diff --git a/quick/quickview.qml b/quick/quickview.qml new file mode 100644 index 0000000..becad0c --- /dev/null +++ b/quick/quickview.qml @@ -0,0 +1,35 @@ +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts + +TableView +{ + id: table + anchors.fill: parent + columnSpacing: 2 + rowSpacing: 2 + model: meinModel // z. B. QStandardItemModel mit 9 Spalten + + delegate: Rectangle + { + + required property string display + width: 100 + height: 20 + border.color: "#ccc" + + Text + { + anchors.centerIn: parent + text: display + font.pixelSize: 10 + } + } + + // // Optional: Spaltenbreiten setzen + // onModelChanged: { + // for (let i = 0; i < model.columns; ++i) + // table.setColumnWidth(i, 100) + // } +} + diff --git a/quick/xqmodelview.qml b/quick/xqmodelview.qml deleted file mode 100644 index e5fb674..0000000 --- a/quick/xqmodelview.qml +++ /dev/null @@ -1,8 +0,0 @@ -Window { - id: popup - width: 300 - height: 200 - visible: true - flags: Qt.Dialog | Qt.WindowStaysOnTopHint - title: "QML-Fenster" -} \ No newline at end of file diff --git a/src/application/xqappdata.cpp b/src/application/xqappdata.cpp index db723d0..4427477 100644 --- a/src/application/xqappdata.cpp +++ b/src/application/xqappdata.cpp @@ -107,16 +107,16 @@ namespace XQAppData namedInsert( "icn63Dummy", QStyle::SP_FileDialogToParent ); namedInsert( "icn64Dummy", QStyle::SP_ToolBarHorizontalExtensionButton ); namedInsert( "icn65Dummy", QStyle::SP_DialogOkButton ); - namedInsert( "FileIcon", QStyle::SP_FileIcon ); + namedInsert( "FileIcon", QStyle::SP_FileIcon ); namedInsert( "icn67Dummy", QStyle::SP_ToolBarVerticalExtensionButton ); namedInsert( "icn68Dummy", QStyle::SP_DialogResetButton ); namedInsert( "icn70Dummy", QStyle::SP_FileLinkIcon ); - namedInsert( "TrashIcon", QStyle::SP_TrashIcon ); + namedInsert( "TrashIcon", QStyle::SP_TrashIcon ); namedInsert( "icn72Dummy", QStyle::SP_DialogSaveButton ); namedInsert( "icn73Dummy", QStyle::SP_MediaPause ); - namedInsert( "VistaShield", QStyle::SP_VistaShield ); + namedInsert( "VistaShield", QStyle::SP_VistaShield ); namedInsert( "icn75Dummy", QStyle::SP_DialogYesButton ); - namedInsert( "icn76Dummy", QStyle::SP_MediaPlay ); + namedInsert( "MediaPlay", QStyle::SP_MediaPlay ); namedInsert( "icn77Dummy", QStyle::SP_DirClosedIcon ); namedInsert( "icn79Dummy", QStyle::SP_MediaSeekBackward ); namedInsert( "DirHomeIcon", QStyle::SP_DirHomeIcon ); diff --git a/src/application/xqmainmodel.cpp b/src/application/xqmainmodel.cpp index e3bd90e..168934d 100644 --- a/src/application/xqmainmodel.cpp +++ b/src/application/xqmainmodel.cpp @@ -86,10 +86,10 @@ XQItem* XQMainModel::addProjectItem( XQNodePtr contentNode ) void XQMainModel::addSectionItem( const XQModelSection& section, XQItem* projectItem ) { - /* +/* XQNodePtr sheetNode = projectItem->sheetNode()->find_child_by_tag_name("CurrentSection"); - XQItem* newItem = _itemFactory.makeItem(sheetNode, §ion.contentType() ); - projectItem->appendRow( newItem ); + XQItemList list = _itemFactory.makeRow( XQItemFactory::mSingle, sheetNode, nullptr, c_ContentType ); + projectItem->appendRow( list ); _treeTable->expand( projectItem->index() ); */ } diff --git a/src/application/xqmainwindow.cpp b/src/application/xqmainwindow.cpp index e03ce2b..409bc21 100644 --- a/src/application/xqmainwindow.cpp +++ b/src/application/xqmainwindow.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include #include @@ -91,15 +92,7 @@ void XQMainWindow::initMainWindow() connect( _mainTreeView, SIGNAL(clicked(QModelIndex)), this, SLOT(onTreeItemClicked(QModelIndex)) ); connect( _tabWidget, SIGNAL(tabBarClicked(int)), this, SLOT(onTabClicked(int)) ); - connect( _tabWidget, SIGNAL(tabBarClicked(int)), this, SLOT(onTabClicked(int)) ); -/* - XQQuickWidget* butt = new XQQuickWidget; - butt->resize(800,600); - butt->setWindowFlags(Qt::Dialog | Qt::WindowStaysOnTopHint); - butt->move( 1200,300); - butt->show(); -*/ /* connect( &_mainModelView, &XQViewModel::itemCreated, this, [=, this](XQItem* item) @@ -124,7 +117,7 @@ void XQMainWindow::initMainWindow() // #2. load demo data loadDocument( c_DocumentFileName1 ); - //loadDocument( c_DocumentFileName2 ); + loadDocumentQML( c_DocumentFileName2 ); qDebug() << " --- all here: " << XQNode::s_Count; @@ -279,12 +272,13 @@ void XQMainWindow::onTreeItemClicked(const QModelIndex& index ) void XQMainWindow::onTabClicked( int index ) { //const QString& key = _documentStore[index].treeItem->attribute( c_ProjectID ); - qDebug() << " ---- tab clicked: " << index << " : " << _documentStore[index].friendlyName;// << ": " << key; + //qDebug() << " ---- tab clicked: " << index << " : " << _documentStore[index].friendlyName;// << ": " << key; //_mainTreeView->setCurrentIndex( _documentStore[index].treeItem->index() ); } void XQMainWindow::onSectionCreated( const XQModelSection& section ) { + qDebug() << " --- XXX section created: " << section.contentType() << ":" << section.sheetRootNode()->to_string(); if( _currentProjectItem ) { _mainModelView.addSectionItem( section, _currentProjectItem ); @@ -296,6 +290,56 @@ void XQMainWindow::onSectionToggled( const XQModelSection& section ) //qDebug() << " --- XXX section toggled: " << section.contentType() << ":" << section.sheetRootNode()->to_string(); } +QStandardItemModel* createModel() { + auto* model = new QStandardItemModel; + model->setHorizontalHeaderLabels({ "Name" }); + + QStandardItem* parent = new QStandardItem("Tiere"); + parent->appendRow(new QStandardItem("Hund")); + parent->appendRow(new QStandardItem("Katze")); + model->appendRow(parent); + + return model; +} + +void XQMainWindow::loadDocumentQML( const QString& fileName ) +{ + // gibts die Datei? + if( !QFile::exists( fileName) ) + throw XQException( "no such file", fileName ); + + XQNodeFactory treeLoader; + // xml daten laden + XQNodePtr rawTree = treeLoader.load_tree( qPrintable(fileName) ); + // versteckten root node ignorieren + XQNodePtr contentRoot = rawTree->first_child(); + + + // 'friendly Name' ist ein Link auf ein anderes Attribute + // das als Namen verwendet wird. + const QString& fName = contentRoot->friendly_name(); + + QStandardItemModel* model = createModel(); + + // Ein neues Child-Model erzeugen + XQChildModel* childModel = new XQChildModel(this); + // die Modelstruktur anlegen + childModel->initModel( c_ChildModelName ); + // model inhalte laden + childModel->addModelData( contentRoot->first_child() ); + + XQQuickWidget* quickChild = new XQQuickWidget(_tabWidget); + //quickChild->setResizeMode(QQuickWidget::SizeViewToRootObject); + + quickChild->rootContext()->setContextProperty("meinModel", childModel); + quickChild->setSource(QUrl(QStringLiteral("qrc:/quickview.qml"))); + _tabWidget->addTab( quickChild, "Fitze!" ); + _tabWidget->setCurrentWidget( quickChild ); + quickChild->setResizeMode(QQuickWidget::SizeRootObjectToView); + + +} + //! liest eine XML datei namens 'fileName' void XQMainWindow::loadDocument( const QString& fileName ) @@ -347,9 +391,7 @@ void XQMainWindow::loadDocument( const QString& fileName ) // neuen eintrag im übsichts-baum erzeugen _currentProjectItem = _mainModelView.addProjectItem( contentRoot ); - //_documentStore.addDocument( fileName, pTitle, _currentProjectItem, childModel ); - - qDebug() << " --- ZZZ und jetzt:"; + _documentStore.addDocument( fileName, pTitle, _currentProjectItem, childModel ); // die Modelstruktur anlegen childModel->initModel( c_ChildModelName ); diff --git a/src/application/xqmainwindow.h b/src/application/xqmainwindow.h index 5f9cead..5737d6d 100644 --- a/src/application/xqmainwindow.h +++ b/src/application/xqmainwindow.h @@ -60,6 +60,7 @@ protected: // fixme implement void showDocumnet( const QString& key ){} void loadDocument( const QString& fileName ); + void loadDocumentQML( const QString& fileName ); void saveDocument( const QString& fileName ); diff --git a/src/items/xqitem.cpp b/src/items/xqitem.cpp index 29fedac..2052bae 100644 --- a/src/items/xqitem.cpp +++ b/src/items/xqitem.cpp @@ -469,7 +469,7 @@ QVariant XQItem::data(int role ) const case Qt::ToolTipRole: { - return rawText() + ":" + unitTypeToString() + ":" + renderStyleToString() + ":" + unitTypeToString() + ":" + itemFlagsToString(); + return itemType().text() + ":: " + rawText() + ":" + unitTypeToString() + ":" + renderStyleToString() + ":" + unitTypeToString() + ":" + itemFlagsToString(); } // diff --git a/src/items/xqitemfactory.cpp b/src/items/xqitemfactory.cpp index 11f7c31..c9f3150 100644 --- a/src/items/xqitemfactory.cpp +++ b/src/items/xqitemfactory.cpp @@ -51,7 +51,6 @@ void XQItemFactory::initItemFactory( const QString& modelSheetFileName ) for( const XQNodePtr& typeSheetNode : _typesSheet->children()) { XQItemType* itemType = new XQItemType; - //const QString& typeName = typeSheetNode->tag_name(); const QString& typeName = typeSheetNode->tag_name(); configureItemType(itemType, typeSheetNode); diff --git a/src/model/xqviewmodel.cpp b/src/model/xqviewmodel.cpp index d68ef69..6f07c7f 100644 --- a/src/model/xqviewmodel.cpp +++ b/src/model/xqviewmodel.cpp @@ -586,7 +586,7 @@ void XQViewModel::onShowContextMenu(const QPoint& point) QHash XQViewModel::roleNames() const { - QHash roles; + QHash roles = QStandardItemModel::roleNames(); roles[XQItem::ContentRole] = "content"; roles[XQItem::ItemTypeRole] = "itemType"; roles[XQItem::RenderStyleRole] = "renderStyle"; diff --git a/src/widgets/xqquickwidget.cpp b/src/widgets/xqquickwidget.cpp index cb10b1c..482dd1d 100644 --- a/src/widgets/xqquickwidget.cpp +++ b/src/widgets/xqquickwidget.cpp @@ -14,7 +14,8 @@ #include -XQQuickWidget::XQQuickWidget() +XQQuickWidget::XQQuickWidget(QWidget *parent) + : QQuickWidget(parent) { } diff --git a/src/widgets/xqquickwidget.h b/src/widgets/xqquickwidget.h index d5ed88f..2232014 100644 --- a/src/widgets/xqquickwidget.h +++ b/src/widgets/xqquickwidget.h @@ -20,8 +20,10 @@ class XQQuickWidget : public QQuickWidget { Q_OBJECT + public: - XQQuickWidget(); + + XQQuickWidget(QWidget *parent = nullptr); }; #endif // XQQUICKWIDGET_H diff --git a/src/xtree.pro b/src/xtree.pro index 252e2a4..a2ac858 100644 --- a/src/xtree.pro +++ b/src/xtree.pro @@ -84,7 +84,6 @@ else: unix:!android: target.path = /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS += target DISTFILES += \ - ../quick/xqmodelview.qml \ README.md \ xml/modelsheets.xml \ xml/modeldata1.xtr \ diff --git a/src/xtree.qrc b/src/xtree.qrc index 8a82227..31c6dd8 100644 --- a/src/xtree.qrc +++ b/src/xtree.qrc @@ -1,8 +1,10 @@ - ../xml/modeldata1.xtr - ../xml/modeldata2.xtr - ../xml/modeldata3.xtr - ../xml/modelsheets.xml + ../xml/modeldata1.xtr + ../xml/modeldata2.xtr + ../xml/modeldata3.xtr + ../xml/modelsheets.xml + ../quick/quickview.qml + diff --git a/xml/modelsheets.xml b/xml/modelsheets.xml index f22ff6e..f27fd9b 100644 --- a/xml/modelsheets.xml +++ b/xml/modelsheets.xml @@ -8,8 +8,8 @@ - - + +