# XTree ## Also, noch mal von vorn: - Es geht um das Editieren von XML Daten in einer baumartigen Darstellung am Bildschirm. - Es handelt sich vorwiegend um technische Daten: Strom, Spannung, unterschiedliche Betriebsparameter und sowas. - Die Qt Viewerklassen arbeiten feldbasiert, die Datenfelder heissen 'Items', die Basisklasse zu einem Datenfeld heisst bei uns ```XQItem``` - Unser Darstellung der Datenfelder ist im Prinzip erstmal tabellenartig, bla blu - Die QtLib unterscheidet zwischen 'rendering' und 'editing' - bla blub Also: itemtypes werden einfach beschrieben, mit properties, wie die properties intern implementiert werden, ist erstmal egal: ein type sheet pattern: model-view-controller qt: model-view wir: modelhub _only_ -- ein ItemType aggregiert gemeinsame Eigenschaften von Items, z.b. UnitType, EditorType, RenderTypezusammen, die ein Gruppe von Items gemeinsam # Old stuff: ## Getting started Das working directory muss aufs source directory zeigen, da liegen unter xml/ die Testfiles. ## Wo ich hinwill - [ ] Alle models, menus etc. sollen in XML beschrieben werden, siehe xml/modelsheet.xml - [ ] Es gibt nur eine Modelklasse: XQModel (ist ein QStandardItemModel) - [ ] Datenlogik und Anwendungslogik sollen getrennt sein - [ ] Dazu werden die Datenknoten (composites) in einen Wrapper verpackt und in den Items 'versteckt' - [ ] Für jede Editorklasse XyzEditor.cpp gibt es eine Klasse XyzHub.cpp - [ ] Im XyzHub wird die Anwendungslogik implementiert, d.h. die SIGNALs der UI werden mit Operationen auf das Model verbunden - [ ] Operationen auf Datenknoten werden für die Anwendung transparent von der Datenschicht ausgeführt - [ ] Die genaue Implementierung dafür ist mir noch unklar: - [ ] ```ZQNode::nodeManager.applyCommand( ZQCommand( ZQ::PasteNode, ZQNode& ) )``` ??? ## Basisklassen - [ ] ```znode::zbasic_node``` Knotenabstraction, vgl. ```std::basic_string``` - [ ] ```ZQNode``` template-Instanziierung von zbasic_node mit QString - [ ] ```XQModel``` ein QStandardItemModel mit ZQItems - [ ] ```XQItem``` ein QStandardItem mit einem XQNodeWrapper - [ ] (Sauberer wäre ein eigenes Model aus einem QAbstractItemModel, aber das ist dann wirklich Arbeit ...) - [ ] ```XQNodeWrapper``` verpackt einen ZQNode* und vermittelt dessen Attributes an die ViewItems - [ ] ```XQNodeManager``` operations on nodes, gibts noch nicht. - [ ] Eigentlich ```znode::znode_manager...> ...``` für alle Anwendungsfälle - [ ] ```XQModelReader``` erzeugt QModels aus XML, siehe XML/modelsheet.xml - [ ] ```XQModelHub``` Datenmanager-Klasse, hier läuft alles zusammen - [ ] ```class XQModelHub : public XQModel, public XQModelReader```: etwas fragwürdig, spart aber leidige Verpointerungen