xtree, ein Widget-Set zur Bearbeitung und Anzeige von XML-Daten.

Das xtree-Widget-Set erweitert die Qt Model- und Viewklassen mit Hilfe der znode<T>-lib, um die Entwicklung von XML-basierten Anwendungen zu vereinfachen.

Der XML Datenbaum wird dabei auf eine Excel-artige Tabellenstruktur abgebildet (‚gemappt‘).  Das mapping wird ebenfalls in XML ausgedrückt.  Aus einem XML-Knoten wird eine Zeile in der Tabelle (‚Item-View‘) erzeugt, jedes XML-Attribut kann als ein Feld (‚Item‘) dargestellt werden.

 

 

Beispiel: Photovoltaik
XML-Daten: (siehe xml/modeldata1.xtr)
<Panel PanelID="JA 01" PanelName="JA Solar T62B" WattPeak=”440” MaxVolt=”1200” … />
<Panel PanelID="JA 02" PanelName="JA Solar X58C" WattPeak=”630” MaxVolt=”1600” … />
Mapping-Descriptor: (siehe xml/modelsheets.xml)
<Section ContentType="Inverter" > 
   <ModelSheet>
     <InverterID ItemType="PlainType" />
     <InverterName ItemType="PlainType" />
     <Manufacturer ItemType="PlainType" />
     <MaxPowerInput ItemType="ChoiceType" FixedChoices="2000|4000|6000|8000" UnitType="W"/>
     <MaxPowerOutput ItemType="ValueType" UnitType="W"/>
     <NumStrings ItemType="IntValueType" />
     <Weight ItemType="ValueType"  UnitType="kg"/>
   </ModelSheet>
</Section>

Auch die Darstellungseigenschaften der Datenfelder werden über XML konfiguert. Dazu wird jedem Feld ein ‚ItemType‘ zugewiesen, der die Eigenschaften des Feldes definiert. Dies dient auch der Datensparsamkeit (‚flyweight-pattern‘): Das Icon eines Feldes muss ja nur einmal gespeichert werden.

<ItemTypes>
   <TreeSectionType RenderStyle="PlainStyle"     EditorType="LineEditType" ItemFlags="IsUserCheckable|IsEnabled" Icon="DesktopIcon"/>
   <HeaderType      RenderStyle="HeaderStyle"    EditorType="LineEditType" ItemFlags="IsEnabled"/>
   <PlainType       RenderStyle="PlainStyle"     EditorType="LineEditType" ItemFlags="IsEnabled|IsEditable|IsSelectable"/>
   <ValueType       RenderStyle="FormattedStyle" EditorType="LineEditType" ItemFlags="IsEnabled|IsEditable|IsSelectable" UnitType="Coulomb"/>
   <ChoiceType      RenderStyle="ComboBoxStyle"  EditorType="ComboBoxType" ItemFlags="IsEnabled|IsEditable|IsSelectable" UnitType="W" FixedChoices="2000|4000|6000|8000" />
</ItemTypes>

In der Demo-Applikation sind die Views noch in umschaltbare sections unterteilt, die einzelnen Einträge (Hier: Baugruppen fiktiver PV-Anlagen) können noch Kindelemente (Hier: technische Dokumente). Die Projektview ‚HA02‘ ist experimentell als QQuickWidget mit einer QML TreeView implementiert.