mit unitType

This commit is contained in:
2025-08-09 11:56:11 +02:00
parent c89cdfef71
commit 63f139de8c
10 changed files with 147 additions and 64 deletions

View File

@@ -69,38 +69,60 @@ void XQItemType::setData(const QVariant& value, int role )
return QStandardItem::setData(value,role);
}
//! tested, ob ein attribute (z.B. unitType) hier vorhanden ist
int XQItemType::hasAttribute( const QString& attrKey )
{
int role = XQItem::fetchItemDataRole(attrKey);
// gibbed überhaupt eine rolle für unser attribut?
if( role == XQItem::NoRole)
return XQItem::NoRole;
// wenn ja, ist die role hier besetzt?
QVariant value = data(role);
if( !value.isValid() || value.isNull() )
return XQItem::NoRole;
return role;
}
//! setzt einen attributwert neu. Ggf. wird ein neuer ItemType erzeugt.
void XQItemType::replaceAttribute( XQItem* item, const QVariant& newValue, int role )
XQItemType* XQItemType::replaceAttribute( const QVariant& newValue, int role )
{
// hat sich überhaupt was geändert?
QVariant oldValue = data(role);
// ja, es hat
if( oldValue != newValue )
{
XQItemType* myClone = new XQItemType(*this);
// Änderungen übernehmen
myClone->setData( newValue, role );
// Gibt es den geänderten ItemType schon?
QString newKey = myClone->makeItemTypeKey();
// jawoll
if( s_ItemTypeMap.contains( newKey ) )
{
// nur abräumen, sonst nix
delete myClone;
}
else
{
// speichern
s_ItemTypeMap.insert( newKey, myClone );
// und ins item übernehmen
item->setItemType( myClone );
/// Obacht! Der alte, geänderte itemType bleibt erhalten
/// und verrottet ggf. ohne Daseinszweck
}
// nein, es hat nicht
if( oldValue == newValue )
return this;
// kopie von mir
XQItemType* myClone = new XQItemType(*this);
// Änderungen übernehmen
myClone->setData( newValue, role );
// Gibt es den geänderten ItemType schon?
QString newKey = myClone->makeItemTypeKey();
// jawoll
if( s_ItemTypeMap.contains( newKey ) )
{
// abräumen ...
delete myClone;
// und die alte version zurückgegen
return s_ItemTypeMap[newKey];
}
// speichern
s_ItemTypeMap.insert( newKey, myClone );
// und ins item übernehmen
//item.setItemType( myClone );
/// Obacht! Der alte, geänderte itemType bleibt erhalten
/// und verrottet ggf. ohne Daseinszweck
return myClone;
}
QVariant XQItemType::formatText( const XQItem& item ) const