diff --git a/src/items/xqitem.cpp b/src/items/xqitem.cpp
index a1cbfdb..d4f24e0 100644
--- a/src/items/xqitem.cpp
+++ b/src/items/xqitem.cpp
@@ -647,6 +647,133 @@ void XQItem::setData(const QVariant& value, int role )
}
+//! erzeugt eine QVariant zur gegebenen rolle aus dem gegebenen string.
+//! Hack: Das Item wird hier als zusätzliche datenquelle übergeben,
+//! um _vorher_ erzeugte eigenschaften des items als parameter für _jetzt_
+//! erzeugte eigenschaft verwenden zu können.
+//! Beispiel
+
+QVariant XQItem::makeVariant( XQItem* item, int dataRole, const QString& source )
+{
+
+ QVariant value;
+
+ //qDebug() << " ----- makeVariant: " << XQItem::fetchItemDataRoleName( dataRole );
+
+ switch(dataRole)
+ {
+ // das ist ein pointer auf den original-string aus dem XML
+ case XQItem::ContentRole:
+ {
+ // content() -> QString*
+ value = QVariant::fromValue(&source);
+ break;
+ }
+
+ /*
+ case XQItem::ItemTypeRole:
+ {
+ // itemType() -> XQItemType*
+ XQItemType* itemType = findItemTypeTemplate( source );
+ value = QVariant::fromValue(itemType);
+ break;
+ }
+ */
+
+ case XQItem::RenderStyleRole:
+ {
+ XQItem::RenderStyle renderStyle = XQItem::fetchRenderStyle( source );
+ value = QVariant::fromValue(renderStyle);
+ break;
+ }
+
+ case XQItem::EditorTypeRole:
+ {
+ XQItem::EditorType editorType = XQItem::fetchEditorType( source );
+ value = QVariant::fromValue(editorType);
+ break;
+ }
+
+ case XQItem::UnitTypeRole:
+ {
+ //qDebug() << " --- make unit type: " << source;
+ XQItem::UnitType unitType = XQItem::fetchUnitType( source );
+ value = QVariant::fromValue(unitType);
+ break;
+ }
+
+ case XQItem::ContentFormatRole:
+ {
+ // contentFormat() -> QString
+ value = QVariant::fromValue(source);
+ break;
+ }
+
+ case XQItem::FlagsRole:
+ {
+ QFlags itemFlags = Qt::NoItemFlags;
+ const QStringList flagKeys = source.split( '|' );
+ for( const QString& flagKey : flagKeys )
+ {
+ Qt::ItemFlag flag = XQItem::fetchItemFlag( flagKey );
+ itemFlags.setFlag( flag );
+ }
+ value = QVariant::fromValue(itemFlags);
+ break;
+ }
+
+
+ case XQItem::IconRole:
+ {
+ QIcon typeIcon = XQAppData::typeIcon(source);
+ value = QVariant::fromValue(typeIcon);
+ break;
+ }
+
+
+ case XQItem::FixedChoicesRole:
+ {
+ const QStringList choices = source.split( '|' );
+
+ QStandardItemModel* fixedChoices = new QStandardItemModel();
+ for( const QString& entry : choices )
+ {
+ QString result = entry;
+ if( item->unitType() != XQItem::NoUnitType )
+ result = XQItemType::formatToSI( entry, item->unitType() );
+ fixedChoices->appendRow( new QStandardItem( result ) );
+ }
+ value = QVariant::fromValue(fixedChoices);
+ break;
+ }
+
+ /*
+ case XQItem::ContentNodeRole:
+ {
+ value = QVariant::fromValue(&source);
+ break;
+ }
+
+ case XQItem::XQItem::SheetNodeRole:
+ {
+ value = QVariant::fromValue(&source);
+ break;
+ }
+ */
+
+ default:
+ case XQItem::XQItem::NoRole:
+ {
+ break;
+ }
+ };
+
+ //if( !value.toString().isEmpty())
+ // setData( value, dataRole);
+
+ return value;
+
+}
//! gibt ein statisches invalid-item zurück, anstelle von nullptr
diff --git a/src/items/xqitem.h b/src/items/xqitem.h
index 8abcb36..734e0a2 100644
--- a/src/items/xqitem.h
+++ b/src/items/xqitem.h
@@ -224,6 +224,8 @@ public:
/// Static convenience methods
///
+ static QVariant makeVariant( XQItem* item, int dataRole, const QString& source );
+
static XQItem& xqItemFromIndex( const QModelIndex& index );
static XQItem& fallBackDummyItem();
diff --git a/src/items/xqitemdelegate.cpp b/src/items/xqitemdelegate.cpp
index e4ede87..59e9974 100644
--- a/src/items/xqitemdelegate.cpp
+++ b/src/items/xqitemdelegate.cpp
@@ -135,10 +135,9 @@ void XQItemDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option
return drawHeaderStyle( painter, option, item );
case XQItem::ComboBoxStyle :
- return drawComboBoxStyle( painter, option, item );
+ return drawComboBoxStyle( painter, option, item );
case XQItem::ColorBarStyle :
- qDebug() << " --- JAJA: " << index.data().toString();
return drawColorBarStyle( painter, option, item );
/*
case XQItem::SpinBoxStyle :
diff --git a/src/items/xqitemfactory.cpp b/src/items/xqitemfactory.cpp
index fcfc7ee..b780ee4 100644
--- a/src/items/xqitemfactory.cpp
+++ b/src/items/xqitemfactory.cpp
@@ -29,7 +29,7 @@ void XQItemFactory::initItemFactory( const QString& modelSheetFileName )
for( const auto& [key,value] : sheetNode->attributes() )
{
//qDebug() << " --- conf item Type: " << key << " : " << value;
- setItemDataFromString( *itemType, key, value );
+ setItemTypeDataFromString( *itemType, key, value );
}
};
@@ -91,7 +91,7 @@ XQItemType* XQItemFactory::makeItemType(const XQNodePtr& sheetEntry )
// wenn ja, überschreiben
if( role != XQItem::NoRole )
{
- QVariant newValue = makeVariant(role, attrEntry.second );
+ QVariant newValue = XQItem::makeVariant( itemType, role, attrEntry.second );
itemType = itemType->replaceAttribute( newValue, role );
}
@@ -124,133 +124,19 @@ XQNodePtr XQItemFactory::findModelSheet( const QString& modelName ) const
//! erzeugt eine QVariant aus dem gegebenen string und setzt diese dann via role im item.
-void XQItemFactory::setItemDataFromString( XQItem& item, const QString& roleKey, const QString& source ) const
+void XQItemFactory::setItemTypeDataFromString( XQItem& item, const QString& roleKey, const QString& source ) const
{
int dataRole = XQItem::fetchItemDataRole( roleKey );
if( dataRole != XQItem::NoRole)
{
- QVariant variant = makeVariant( dataRole, source );
+ QVariant variant = XQItem::makeVariant( &item, dataRole, source );
if( !variant.isNull() && variant.isValid() )
item.setData( variant, dataRole );
}
}
-//! erzeugt eine QVariant aus dem gegebenen string
-QVariant XQItemFactory::makeVariant( int dataRole, const QString& source ) const
-{
-
- QVariant value;
-
- switch(dataRole)
- {
- // das ist ein pointer auf den original-string aus dem XML
- case XQItem::ContentRole:
- {
- // content() -> QString*
- value = QVariant::fromValue(&source);
- break;
- }
-
- case XQItem::ItemTypeRole:
- {
- // itemType() -> XQItemType*
- //qDebug() << " --- makeVariant: make ItemType: " << source;
- XQItemType* itemType = findItemTypeTemplate( source );
- value = QVariant::fromValue(itemType);
- break;
- }
-
- case XQItem::RenderStyleRole:
- {
- XQItem::RenderStyle renderStyle = XQItem::fetchRenderStyle( source );
- value = QVariant::fromValue(renderStyle);
- break;
- }
-
- case XQItem::EditorTypeRole:
- {
- XQItem::EditorType editorType = XQItem::fetchEditorType( source );
- value = QVariant::fromValue(editorType);
- break;
- }
-
- case XQItem::UnitTypeRole:
- {
- //qDebug() << " --- make unit type: " << source;
- XQItem::UnitType unitType = XQItem::fetchUnitType( source );
- value = QVariant::fromValue(unitType);
- break;
- }
-
- case XQItem::ContentFormatRole:
- {
- // contentFormat() -> QString
- value = QVariant::fromValue(source);
- break;
- }
-
- case XQItem::FlagsRole:
- {
- QFlags itemFlags = Qt::NoItemFlags;
- const QStringList flagKeys = source.split( '|' );
- for( const QString& flagKey : flagKeys )
- {
- Qt::ItemFlag flag = XQItem::fetchItemFlag( flagKey );
- itemFlags.setFlag( flag );
- }
- value = QVariant::fromValue(itemFlags);
- break;
- }
-
-
- case XQItem::IconRole:
- {
- QIcon typeIcon = XQAppData::typeIcon(source);
- value = QVariant::fromValue(typeIcon);
- break;
- }
-
-
- case XQItem::FixedChoicesRole:
- {
- const QStringList choices = source.split( '|' );
-
- QStandardItemModel* fixedChoices = new QStandardItemModel();
- for( const QString& entry : choices )
- fixedChoices->appendRow( new QStandardItem( entry ) );
- value = QVariant::fromValue(fixedChoices);
- break;
- }
-
- /*
- case XQItem::ContentNodeRole:
- {
- value = QVariant::fromValue(&source);
- break;
- }
-
- case XQItem::XQItem::SheetNodeRole:
- {
- value = QVariant::fromValue(&source);
- break;
- }
- */
-
- default:
- case XQItem::XQItem::NoRole:
- {
- break;
- }
- };
-
- //if( !value.toString().isEmpty())
- // setData( value, dataRole);
-
- return value;
-
-}
///
/// ------------------------------------------------
diff --git a/src/items/xqitemfactory.h b/src/items/xqitemfactory.h
index cf51a4e..31e44b3 100644
--- a/src/items/xqitemfactory.h
+++ b/src/items/xqitemfactory.h
@@ -35,11 +35,11 @@ public:
XQItemList makeRow( const XQNodePtr& sheetNode, const XQNodePtr& contentNode );
XQItem* makeSingleItem( const XQNodePtr& sheetNode, const QString& caption );
- void setItemDataFromString( XQItem& item, const QString& roleKey, const QString& source ) const;
+ void setItemTypeDataFromString( XQItem& item, const QString& roleKey, const QString& source ) const;
XQItemType* makeItemType(const XQNodePtr& sheetEntry );
XQItemType* findItemTypeTemplate(const QString& key ) const;
- QVariant makeVariant(int dataRole, const QString &value ) const;
+
protected:
diff --git a/src/xtree.qrc b/src/xtree.qrc
index 5ddd828..7df0b75 100644
--- a/src/xtree.qrc
+++ b/src/xtree.qrc
@@ -1,14 +1,10 @@
-
- ../xml/modeldata1.xtr
- ../xml/modeldata2.xtr
- ../xml/modeldata3.xtr
- ../xml/modelsheets.xml
- ../qml/xqtableview.qml
- ../qml/HorizontalHeaderViewDelegate.qml
- ../qml/XMain.qml
- ../qml/VerticalHeaderViewDelegate.qml
- ../qml/dummyview.qml
- ../qml/xqtreeview.qml
-
-
\ No newline at end of file
+
+ ../xml/modeldata1.xtr
+ ../xml/modeldata2.xtr
+ ../xml/modeldata3.xtr
+ ../xml/modelsheets.xml
+ ../qml/xqtableview.qml
+ ../qml/xqtreeview.qml
+
+
diff --git a/xml/modelsheets.xml b/xml/modelsheets.xml
index e09f636..3f10178 100644
--- a/xml/modelsheets.xml
+++ b/xml/modelsheets.xml
@@ -19,7 +19,7 @@
-
+