/*************************************************************************** source::worx xtree Copyright © 2024-2025 c.holzheuer christoph.holzheuer@gmail.com This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. ***************************************************************************/ #include #include #include #include #include #include #include //! default konstruktor. XQChildModel::XQChildModel( QObject *parent ) : XQViewModel{parent} { } //! erzegt den sichtbaren inhalt des models aus einem root-datenknoten. void XQChildModel::addModelData( const XQNodePtr& contentRoot ) { // __fix: set object name ?? qDebug() << " --- create Model Data: " << contentRoot->to_string(); // Die Datenbasis als shared_ptr sichern _contentRoot = contentRoot; // Wir gehen über alle Einträge, die auch unterschiedliche Typen // haben können, hier: . ... for (const auto& contentEntry : _contentRoot->children()) { // Das ist hier der Typ des Eintrags: Panel, Battery ... QString key = contentEntry->tag_name(); // 'silent failure' hier der Datenbaum kann auch Knoten enthalten // die nicht für uns gedacht sind. if (!_sections.hasValidSection(key)) continue; XQModelSection& section = _sections.at( key ); // wir speichern das parent des datenknoten auch in der // section. // contentEntry->parent == _contentRoot, aber halt nur weil das model flach ist //qDebug() << " --- add section ENTRY: " << key << " TagName: " << contentEntry->attribute("TagName"); section.setContentRootNode( contentEntry->parent() ); int newRow = _sections.lastRow(section); XQNodePtr sheetNode = section.sheetRootNode(); XQItemList list = _itemFactory.makeRow( sheetNode, contentEntry ); // als Baum? //section.headerItem().appendRow( list ); insertRow( newRow, list); } // for } void XQChildModel::addSectionEntry( const QString& key, const XQNodePtr& contentEntry ) { XQModelSection& section = _sections.at( key ); if(section.isValid() ) { section.setContentRootNode( contentEntry->parent() ); int newRow = _sections.lastRow(section); XQNodePtr sheetNode = section.sheetRootNode(); XQItemList list = _itemFactory.makeRow( sheetNode, nullptr ); insertRow( newRow, list); } } //! erzeugt ein adhoc-contextmenu, je nachdem welche aktionen gerade möflich sind. void XQChildModel::initContextMenu() { // __fixme! add a menu title _contextMenu->clear(); const QModelIndex& curIdx = _treeTable->currentIndex(); bool hasSel = curIdx.isValid() && _treeTable->selectionModel()->hasSelection(); bool canPaste = _clipBoard.canPaste( curIdx ); _contextMenu->addAction( "icn11Dummy", "Undo", XQCommand::cmdUndo, _undoStack->canUndo() ); _contextMenu->addAction( "icn17Dummy", "Redo", XQCommand::cmdRedo, _undoStack->canRedo() ); _contextMenu->addAction( "icn58Dummy", "Cut", XQCommand::cmdCut, hasSel ); _contextMenu->addAction( "icn61Dummy", "Paste", XQCommand::cmdPaste, canPaste ); _contextMenu->addAction( "icn55Dummy", "Copy", XQCommand::cmdCopy, hasSel ); //_contextMenu->addAction( "icn35Dummy", "Move", XQCommand::cmdMove, hasSel ); _contextMenu->addAction( "icn70Dummy", "New", XQCommand::cmdNew, hasSel ); _contextMenu->addAction( "icn50Dummy", "Delete", XQCommand::cmdDelete, hasSel ); // __fixme! set 'toggle section ' entry //contextMenu.actions().first()->setText(""); _contextMenu->addAction( "icn29Dummy", "Toggle Section", XQCommand::cmdToggleSection, hasSel); }