Moved child row creation to XQItemFactory, some other cleanups.

This commit is contained in:
2025-09-28 14:15:18 +02:00
parent 007970f4ee
commit f74c004bf9
7 changed files with 32 additions and 56 deletions

View File

@@ -88,48 +88,17 @@ void XQChildModel::addModelData( const XQNodePtr& contentRoot )
// Die Beschreibungen für die optionalen Kinder
// steck im ersten Knoten des Model-Sheets
if( !sheetNode->first_child()->has_children() )
{
qDebug() << " --- no sheet node for children";
continue;
}
addSectionChildren( list.front(), sheetNode->first_child(), contentEntry );
XQItemList childList = _itemFactory.makeRow( sheetNode, contentEntry );
// als kinder einfügen
list.front()->appendRow( childList );
}
} // for
}
void XQChildModel::addSectionChildren( QStandardItem* parent, const XQNodePtr& sheetNode, const XQNodePtr& contentEntry )
{
qDebug() << " --- AddModelData: CHILD Found for: :" << contentEntry->to_string() << " sheet parent: " << sheetNode->tag_name();
for (const auto& contentChild : contentEntry->children())
{
const QString& contentKey = contentChild->tag_name();
qDebug() << " --- Na Hopp1: " << contentChild->to_string() << " -> " <<contentKey;
qDebug() << " --- Na Hopp2: " << sheetNode->to_string();
// wir brauchen ein beschreibenden sheetnode für diesen content-child knoten
if( sheetNode->has_child( contentKey ))
{
const XQNodePtr& sheetChild = sheetNode->child(contentKey);
qDebug() << " --- Na Also: " << sheetChild->to_string();
for( const auto& sheetX : sheetChild->children() )
{
qDebug() << " --- --- sheetX: " << sheetX->to_string();
}
XQItemList list = _itemFactory.makeRow( sheetChild, contentChild );
//insertRow( parent->row()+1, list );
parent->appendRow( list );
}
}
}
//! erzeugt ein adhoc-contextmenu, je nachdem welche aktionen gerade möglich sind.

View File

@@ -31,7 +31,6 @@ public:
void addModelData(const XQNodePtr& contentRoot );
void addSectionEntry( const QString& key, const XQNodePtr& contentEntry );
void addSectionChildren(QStandardItem* parent, const XQNodePtr& sheetNode, const XQNodePtr& contentEntry );
protected:

View File

@@ -118,7 +118,7 @@ void XQMainWindow::initMainWindow()
// #2. load demo data
loadDocument( c_DocumentFileName1 );
//loadDocument( c_DocumentFileName2, true );
//loadDocument( c_DocumentFileName2 );
loadDocument( c_DocumentFileName2 );
//loadDocument( c_DocumentFileName3 );
@@ -260,7 +260,6 @@ void XQMainWindow::onTreeViewItemClicked( const XQItem& item )
void XQMainWindow::onTreeViewItemChanged(const XQItem& item )
{
qDebug() << " --- TREE VIEW itemChanged: text" << item.text() << " parent: " << item.parent()->text() << " type: " << item.itemType().text() << " : " << (void*)&_mainModel << " : " << (void*) sender();
// hier müssen wir erst das projekt aktivieren
XQItem* xqItem = static_cast<XQItem*>(item.parent());
onTreeViewItemClicked( *xqItem );
@@ -268,8 +267,7 @@ void XQMainWindow::onTreeViewItemChanged(const XQItem& item )
{
int idx = _tabWidget->currentIndex();
if(_documentStore.contains(idx) )
{
qDebug() << " --- Has Document and might toggle: " << item.text();
{
XQViewModel& childModel = *_documentStore[idx].viewModel;
childModel.onToggleSection(item.text());
}

View File

@@ -167,13 +167,23 @@ XQItemList XQItemFactory::makeRow(const XQNodePtr& sheetNode, const XQNodePtr& c
return list;
}
XQItemList XQItemFactory::makeChildRow( XQItem* parent, const XQNodePtr& sheetNode, const XQNodePtr& contentNode )
{
Q_UNUSED(parent);
Q_UNUSED(sheetNode);
Q_UNUSED(contentNode);
return XQItemList();
//! Erzeugt kind-items zu einem section-eintrag.
XQItemList XQItemFactory::makeChildRow( const XQNodePtr& sheetNode, const XQNodePtr& contentNode )
{
XQItemList list;
for (const auto& contentChild : contentNode->children())
{
const QString& contentKey = contentChild->tag_name();
// wir brauchen ein beschreibenden sheetnode für diesen content-child knoten
if( sheetNode->has_child( contentKey ))
{
const XQNodePtr& sheetChild = sheetNode->child(contentKey);
list = makeRow( sheetChild, contentChild );
}
}
return list;
}
//! Erzeugt ein XQItem aus einer typ-beschreibung ('sheetNode') und einem daten-knoten ('contentNode').

View File

@@ -32,8 +32,9 @@ public:
XQNodePtr findModelSheet( const QString& modelName ) const;
// __fix auf nicht vorhandenen content felder prüfen! vereinheitlichen!
XQItemList makeRow( const XQNodePtr& sheetNode, const XQNodePtr& contentNode );
XQItemList makeChildRow( XQItem* parent, const XQNodePtr& sheetNode, const XQNodePtr& contentNode );
XQItemList makeChildRow( const XQNodePtr& sheetNode, const XQNodePtr& contentNode );
XQItem* makeSingleItem( const XQNodePtr& sheetNode, const QString& caption );
void setItemTypeDataFromString( XQItem& item, const QString& roleKey, const QString& source ) const;

View File

@@ -182,8 +182,6 @@ void XQViewModel::addSection(const XQItemList& list, const XQNodePtr& sheetNode
void XQViewModel::onToggleSection(const QString& sectionKey )
{
qDebug() << " --- Model: " << this->objectName() << " should toggle: " << sectionKey << ": " << _sections.hasValidSection( sectionKey );
_sections.dump();
if(_sections.hasValidSection( sectionKey ) )
toggleSection( _sections.sectionByKey(sectionKey) );
}

View File

@@ -15,6 +15,7 @@
<HeaderType RenderStyle="HeaderStyle" EditorType="LineEditType" ItemFlags="IsEnabled"/>
<HiddenType RenderStyle="HiddenStyle"/>
<StaticType RenderStyle="PlainStyle"/>
<FilePickerType RenderStyle="PlainStyle" EditorType="LineEditType" ItemFlags="IsEnabled|IsEditable|IsSelectable" Icon="DirIcon" />
<PlainType RenderStyle="PlainStyle" EditorType="LineEditType" ItemFlags="IsEnabled|IsEditable|IsSelectable"/>
<ValueType RenderStyle="FormattedStyle" EditorType="LineEditType" ItemFlags="IsEnabled|IsEditable|IsSelectable" UnitType="Coulomb"/>
<CheckableType RenderStyle="FormattedStyle" EditorType="LineEditType" ItemFlags="IsEnabled|IsEditable|IsSelectable" />
@@ -121,17 +122,17 @@
<ModelSheet>
<BatteryID ItemType="PlainType">
<Images>
<FrontView ItemType="PlainType"/>
<PackageView ItemType="PlainType"/>
<InstalledView ItemType="PlainType"/>
<FrontView ItemType="FilePickerType"/>
<PackageView ItemType="FilePickerType"/>
<InstalledView ItemType="FilePickerType"/>
</Images >
<Documents>
<Manual ItemType="PlainType"/>
<Installation ItemType="PlainType"/>
<Manual ItemType="FilePickerType"/>
<Installation ItemType="FilePickerType"/>
</Documents>
<Certificates>
<Certificate ItemType="PlainType"/>
<Conformity ItemType="PlainType"/>
<Certificate ItemType="FilePickerType"/>
<Conformity ItemType="FilePickerType"/>
</Certificates>
</BatteryID>
<BatteryName ItemType="PlainType" />