This commit is contained in:
2025-08-15 20:31:40 +02:00
parent 6865e6aaaa
commit c87da2802a
14 changed files with 235 additions and 293 deletions

View File

@@ -68,28 +68,32 @@ bool XQItemFactory::isValid()
}
//! es reicht nicht, einen itemType aus den itemType-templates zu
//! Es reicht nicht, einen itemType aus den itemType-templates zu
//! holen: möglicherweise muss der noch mit zusätzlichen attributen
//! ergänzt werden, (hier 'UnitType' ).
//! ergänzt werden.
//! Vom aufwand ist es auch egal, ob ich daten aus dem XML in das
//! item oder den itemtyp schreiben muss.
XQItemType* XQItemFactory::makeItemType(const XQNodePtr& sheetEntry )
{
QString typeKey = sheetEntry->attribute("ItemType");
QString typeKey = sheetEntry->attribute( c_ItemType );
XQItemType* itemType = findItemTypeTemplate(typeKey);
// wir prüfen, ob im sheetEntry noch zusätzliche attribute vorhanden
// sind, die wir in dem itemType müssen
qDebug() << " --- makeItemType: " << sheetEntry->to_string();
// über alle attribute
for (const auto& attr : sheetEntry->attributes())
for (const auto& attrEntry : sheetEntry->attributes())
{
// prüfen, ob der itemType des attribute schon hat
int role = itemType->hasAttribute( attr.first);
int role = itemType->roleForAttributeKey( attrEntry.first );
// wenn ja, überschreiben
if( role != XQItem::NoRole )
{
QVariant newValue = makeVariant(role,attr.second);
QVariant newValue = makeVariant(role, attrEntry.second );
itemType = itemType->replaceAttribute( newValue, role );
}
@@ -97,7 +101,7 @@ XQItemType* XQItemFactory::makeItemType(const XQNodePtr& sheetEntry )
return itemType;
}
//! firz!
//! sucht einen item typ aus der map mit 'vorgefertigen' itemtypen.
XQItemType* XQItemFactory::findItemTypeTemplate(const QString& key ) const
{
@@ -107,7 +111,7 @@ XQItemType* XQItemFactory::findItemTypeTemplate(const QString& key ) const
}
//! firz!
//! sucht eine model-beschreibung
XQNodePtr XQItemFactory::findModelSheet( const QString& modelName ) const
{
@@ -153,6 +157,7 @@ QVariant XQItemFactory::makeVariant( int dataRole, const QString& source ) const
case XQItem::ItemTypeRole:
{
// itemType() -> XQItemType*
qDebug() << " --- makeVariant: make ItemType: " << source;
XQItemType* itemType = findItemTypeTemplate( source );
value = QVariant::fromValue(itemType);
break;
@@ -202,10 +207,8 @@ QVariant XQItemFactory::makeVariant( int dataRole, const QString& source ) const
case XQItem::IconRole:
{
QIcon typeIcon;
if(XQAppData::hasTypeIcon(source))
typeIcon = XQAppData::typeIcon(source);
{
QIcon typeIcon = XQAppData::typeIcon(source);
value = QVariant::fromValue(typeIcon);
break;
}
@@ -264,9 +267,8 @@ XQItem* XQItemFactory::makeItem( const XQNodePtr& sheetNode, const XQNodePtr& co
{
// den itemtype des neuen items rausfinden
QString typeKey = sheetNode->attribute(c_ItemType);
qDebug() << " --- makeItem: typeKey: " << typeKey << ": " << sheetNode->to_string();
//XQItemType* itemType = makeItemType(sheetEntry); // throws
XQItemType* itemType = findItemTypeTemplate(typeKey);
XQItemType* itemType = makeItemType(sheetNode); // throws
// fallunterscheidung beim inhalt:
const QString* contentPtr{};
// das ist Unterschied zum normalen Item: Der Titel kommt aus der Modelbeschreibung
@@ -280,24 +282,8 @@ XQItem* XQItemFactory::makeItem( const XQNodePtr& sheetNode, const XQNodePtr& co
}
XQItemList XQItemFactory::makeHeaderRow( const XQNodePtr& headerNode )
{
XQItemList list;
// über alle kinder der <Header> sektion
for( const auto& headerEntry : headerNode->children() )
{
//qDebug() << " --- headerEntry: " << headerEntry->tag_name() << ": " << headerEntry->attribute( "ItemType") << headerEntry->attribute( "Caption");
XQItem* headerItem = makeItem( headerEntry );
list.append( headerItem );
}
return list;
}
//! erzeugt eine header item row.
//! erzeugt eine item-row.
XQItemList XQItemFactory::makeContentRow( const XQNodePtr& sheetNode, const XQNodePtr& contentNode )
{