mit unitType
This commit is contained in:
@@ -28,7 +28,7 @@ void XQItemFactory::initItemFactory( const QString& modelSheetFileName )
|
||||
// über alle attribute
|
||||
for( const auto& [key,value] : sheetNode->attributes() )
|
||||
{
|
||||
qDebug() << " --- conf: " << key << " : " << value;
|
||||
qDebug() << " --- conf item Type: " << key << " : " << value;
|
||||
setItemDataFromString( *itemType, key, value );
|
||||
}
|
||||
};
|
||||
@@ -45,7 +45,7 @@ void XQItemFactory::initItemFactory( const QString& modelSheetFileName )
|
||||
_typesSheet = _modelSheet->find_child_by_tag_name( "ItemTypes" );
|
||||
// ... und testen
|
||||
if( !_typesSheet )
|
||||
throw XQException( "initItemFactory typeSheetRoot is null" );
|
||||
throw XQException( "initItemFactory <ItemTypes> is null" );
|
||||
|
||||
// alle itemtype vorlagen erzeugen
|
||||
for( const XQNodePtr& typeSheetNode : _typesSheet->children())
|
||||
@@ -56,8 +56,9 @@ void XQItemFactory::initItemFactory( const QString& modelSheetFileName )
|
||||
configureItemType(itemType, typeSheetNode);
|
||||
|
||||
itemType->setText( typeName);
|
||||
s_ItemTypeCache[typeName] = itemType;
|
||||
s_ItemTypeTemplates[typeName] = itemType;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -67,11 +68,32 @@ bool XQItemFactory::isValid()
|
||||
}
|
||||
|
||||
|
||||
XQItemType* XQItemFactory::findItemType(const QString& key ) const
|
||||
//! 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' ). Al
|
||||
//!
|
||||
//! \param sheetEntry
|
||||
//! \return
|
||||
//!
|
||||
|
||||
XQItemType* XQItemFactory::makeItemType(const XQNodePtr& sheetEntry )
|
||||
{
|
||||
if( !key.isEmpty() && s_ItemTypeCache.contains(key))
|
||||
return s_ItemTypeCache[key];
|
||||
throw XQException( "itemfactory: findItemType: not found:", key );
|
||||
QString typeKey = sheetEntry->attribute("ItemType");
|
||||
XQItemType* itemType = findItemTypeTemplate(typeKey);
|
||||
|
||||
// wir prüfen, ob im sheetEntry noch zusätzliche attribute vorhanden
|
||||
// sind, die wir in dem itemType müssen
|
||||
|
||||
|
||||
|
||||
return itemType;
|
||||
}
|
||||
|
||||
XQItemType* XQItemFactory::findItemTypeTemplate(const QString& key ) const
|
||||
{
|
||||
if( !key.isEmpty() && s_ItemTypeTemplates.contains(key))
|
||||
return s_ItemTypeTemplates[key];
|
||||
throw XQException( "itemfactory: findItemTypeTemplate: not found:", key );
|
||||
}
|
||||
|
||||
|
||||
@@ -85,11 +107,13 @@ XQNodePtr XQItemFactory::findModelSheet( const QString& modelName ) const
|
||||
}
|
||||
|
||||
|
||||
XQItem* XQItemFactory::makeContentItem( const XQNodePtr& contentNode, const XQNodePtr& sheetEntry ) const
|
||||
XQItem* XQItemFactory::makeContentItem( const XQNodePtr& contentNode, const XQNodePtr& sheetEntry )
|
||||
{
|
||||
// den itemtype des neuen items rausfinden
|
||||
QString typeKey = sheetEntry->attribute("ItemType");
|
||||
XQItemType* itemType = findItemType(typeKey); // throws
|
||||
//XQItemType* itemType = findItemTypeTemplate(typeKey); // throws
|
||||
XQItemType* itemType = makeItemType(sheetEntry); // throws
|
||||
|
||||
const QString* contentPtr = contentNode->attribute_ptr( sheetEntry->tag_name() );
|
||||
|
||||
XQItem* newItem = new XQItem( itemType, contentPtr );
|
||||
@@ -98,7 +122,7 @@ XQItem* XQItemFactory::makeContentItem( const XQNodePtr& contentNode, const XQNo
|
||||
}
|
||||
|
||||
|
||||
XQItem* XQItemFactory::makeHeaderItem( const XQNodePtr& sheetEntry ) const
|
||||
XQItem* XQItemFactory::makeHeaderItem( const XQNodePtr& sheetEntry )
|
||||
{
|
||||
// header items are all non-data items:
|
||||
// - section header row items
|
||||
@@ -108,7 +132,7 @@ XQItem* XQItemFactory::makeHeaderItem( const XQNodePtr& sheetEntry ) const
|
||||
|
||||
// den itemtype des neuen items rausfinden
|
||||
QString typeKey = sheetEntry->attribute("HeaderItemType");
|
||||
XQItemType* itemType = findItemType(typeKey); // throws
|
||||
XQItemType* itemType = findItemTypeTemplate(typeKey); // throws
|
||||
// das ist Unterschied zum normalen Item: Der Titel kommt aus der Modelbeschreibung
|
||||
const QString* contentPtr = sheetEntry->attribute_ptr("HeaderCaption");
|
||||
|
||||
@@ -148,7 +172,7 @@ QVariant XQItemFactory::makeVariant( int dataRole, const QString& source ) const
|
||||
case XQItem::ItemTypeRole:
|
||||
{
|
||||
// itemType() -> XQItemType*
|
||||
XQItemType* itemType = findItemType( source );
|
||||
XQItemType* itemType = findItemTypeTemplate( source );
|
||||
value = QVariant::fromValue(itemType);
|
||||
break;
|
||||
}
|
||||
|
Reference in New Issue
Block a user