Fix choice model.

This commit is contained in:
2025-09-10 23:32:00 +02:00
parent 03b0dafdcc
commit fd41138175
7 changed files with 146 additions and 136 deletions

View File

@@ -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

View File

@@ -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();

View File

@@ -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 :

View File

@@ -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;
}
///
/// ------------------------------------------------

View File

@@ -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:

View File

@@ -1,14 +1,10 @@
<RCC>
<qresource prefix="/">
<file alias="modeldata1.xtr">../xml/modeldata1.xtr</file>
<file alias="modeldata2.xtr">../xml/modeldata2.xtr</file>
<file alias="modeldata3.xtr">../xml/modeldata3.xtr</file>
<file alias="modelsheet.xml">../xml/modelsheets.xml</file>
<file alias="xqtableview.qml">../qml/xqtableview.qml</file>
<file alias="HorizontalHeaderViewDelegate.qml">../qml/HorizontalHeaderViewDelegate.qml</file>
<file alias="XMain.qml">../qml/XMain.qml</file>
<file alias="VerticalHeaderViewDelegate.qml">../qml/VerticalHeaderViewDelegate.qml</file>
<file alias="dummyview.qml">../qml/dummyview.qml</file>
<file alias="xqtreeview.qml">../qml/xqtreeview.qml</file>
</qresource>
<qresource prefix="/">
<file alias="modeldata1.xtr">../xml/modeldata1.xtr</file>
<file alias="modeldata2.xtr">../xml/modeldata2.xtr</file>
<file alias="modeldata3.xtr">../xml/modeldata3.xtr</file>
<file alias="modelsheet.xml">../xml/modelsheets.xml</file>
<file alias="xqtableview.qml">../qml/xqtableview.qml</file>
<file alias="xqtreeview.qml">../qml/xqtreeview.qml</file>
</qresource>
</RCC>

View File

@@ -19,7 +19,7 @@
<ValueType RenderStyle="FormattedStyle" EditorType="LineEditType" ItemFlags="IsEnabled|IsEditable|IsSelectable" UnitType="Coulomb"/>
<CheckableType RenderStyle="FormattedStyle" EditorType="LineEditType" ItemFlags="IsEnabled|IsEditable|IsSelectable" />
<PercentageType RenderStyle="ColorBarStyle" EditorType="ColorBarType" ItemFlags="IsEnabled|IsEditable|IsSelectable" UnitType="%"/>
<ChoiceType RenderStyle="ComboBoxStyle" EditorType="ComboBoxType" ItemFlags="IsEnabled|IsEditable|IsSelectable" FixedChoices="2000|4000|6000|8000" UnitType="W"/>
<ChoiceType RenderStyle="ComboBoxStyle" EditorType="ComboBoxType" ItemFlags="IsEnabled|IsEditable|IsSelectable" UnitType="W" FixedChoices="2000|4000|6000|8000" />
<IntValueType RenderStyle="SpinBoxStyle" EditorType="SpinBoxType" ItemFlags="IsEnabled|IsEditable|IsSelectable"/>
</ItemTypes>