-- fyerabend

This commit is contained in:
2025-08-08 21:39:33 +02:00
parent 666a2a9440
commit 5919d9d90d
15 changed files with 228 additions and 257 deletions

View File

@@ -144,42 +144,11 @@ XQItem::XQItem(XQItemType* itemType, const QString *content, const XQNodePtr& co
}
/*
XQItem::XQItem(const XQItem& other)
: QStandardItem( other )
{
// QStandardItem( other ) koopiert bereits
// die data() struktur
}
XQItem& XQItem::operator=(const XQItem& other)
{
if( this != &other)
{
// kopiert data()
this->QStandardItem::operator=( other );
}
return *this;
}
*/
//! firz
XQItem::~XQItem()
{
}
//! firz
//! ruft den copy-konstruktor auf.
XQItem* XQItem::clone() const
{
//return new XQItem( *this );
// this is used as invisible filling material
//return new XQItem( "", XQItemType::StaticStyle );
// __fix!
return new XQItem();
return new XQItem( *this );
}
@@ -193,7 +162,7 @@ bool XQItem::isValid() const
}
//! firz
//! gibt den content-node zurück.
XQNodePtr XQItem::contentNode() const
{
@@ -201,7 +170,7 @@ XQNodePtr XQItem::contentNode() const
}
//! firz
//! setzt den content node.
void XQItem::setContentNode( const XQNodePtr& contentNode )
{
@@ -209,15 +178,14 @@ void XQItem::setContentNode( const XQNodePtr& contentNode )
}
//! firz
//! gibt den sheet-node zurück.
XQNodePtr XQItem::sheetNode() const
{
//
return data( SheetNodeRole ).value<XQNodePtr>();
}
//! firz
//! setzt den sheet-node
void XQItem::setSheetNode(const XQNodePtr& sheetNode )
{
@@ -225,7 +193,7 @@ void XQItem::setSheetNode(const XQNodePtr& sheetNode )
}
//! firz
//! tested, ob ein attribut mit dem namen 'attribKey' vorhanden ist.
bool XQItem::hasAttribute( const QString& attribKey ) const
{
@@ -233,7 +201,7 @@ bool XQItem::hasAttribute( const QString& attribKey ) const
}
//! firz
//! gibt das attribut namens 'attribKey' zurück, sofern vorhanden, sonst 'defaultValue'
const QString& XQItem::attribute( const QString& attribKey, const QString& defaultValue ) const
{
@@ -243,7 +211,7 @@ const QString& XQItem::attribute( const QString& attribKey, const QString& defau
}
//! firz
//! tested, ob das attribut namens 'attribKey' dem wert 'attribValue' entspricht.
bool XQItem::testAttribute( const QString& attribKey, const QString& attribValue ) const
{
@@ -251,15 +219,21 @@ bool XQItem::testAttribute( const QString& attribKey, const QString& attribValue
}
//! firz
//! gibt eine referenz auf den itemType dieses items zurück.
XQItemType& XQItem::itemType() const
{
// __fix: wir gehen hier davon aus, das der itemType immer existiert,
// nur weil er in jeden konstruktor gesetzt wird, das muss aber nicht
// so sein!
XQItemType* itemTypePtr = QStandardItem::data( XQItem::ItemTypeRole ).value<XQItemType*>();
return *itemTypePtr;
// should_throw
}
//! firz
//! speichert einen neuen itemType.
void XQItem::setItemType( XQItemType* itemTypePtr )
{
@@ -268,7 +242,7 @@ void XQItem::setItemType( XQItemType* itemTypePtr )
}
//! firz
//! set ein einzelnes itemFlag.
void XQItem::addFlag( Qt::ItemFlag newFlag )
{
@@ -276,7 +250,7 @@ void XQItem::addFlag( Qt::ItemFlag newFlag )
}
//! firz
//! löscht ein einzelnes itemFlag.
void XQItem::clearFlag( Qt::ItemFlag newFlag )
{
@@ -287,7 +261,7 @@ void XQItem::clearFlag( Qt::ItemFlag newFlag )
/// data() access shortcuts
///
//! firz
//! gibt den renderStyle zurück.
XQItem::RenderStyle XQItem::renderStyle() const
{
@@ -295,37 +269,38 @@ XQItem::RenderStyle XQItem::renderStyle() const
}
//! firz
//! gibt den renderStyle als string zurück.
QString XQItem::renderStyleToString() const
{
return XQItem::fetchRenderStyleToString( renderStyle() );
}
//! firz
//! setzt den editorType. wird im itemType gespeichert.
void XQItem::setRenderStyle(RenderStyle renderStyle )
{
setData( QVariant::fromValue(renderStyle), XQItem::RenderStyleRole );
// Der RenderStyle wohnt im ItemType
//itemType().replaceAttribute( this, RenderStyleRole, renderStyle );
}
//! gibt den editorType zurück.
XQItem::EditorType XQItem::editorType() const
{
return data( EditorTypeRole ).value<EditorType>();
}
//! firz
//! gibt den renderStyle als string zurück.
QString XQItem::editorTypeToString() const
{
return XQItem::fetchEditorTypeToString( editorType() );
}
//! firz
//! setzt den editorType. wird im itemType gespeichert.
void XQItem::setEditorType(EditorType editorType)
{
@@ -335,7 +310,7 @@ void XQItem::setEditorType(EditorType editorType)
}
//! firz
//! setzt den unitType.
XQItem::UnitType XQItem::unitType() const
{
@@ -343,7 +318,7 @@ XQItem::UnitType XQItem::unitType() const
}
//! firz
//! gibt den unitType als string zurück.
QString XQItem::unitTypeToString() const
{
@@ -351,7 +326,7 @@ QString XQItem::unitTypeToString() const
}
//! firz
//! setzt den editorType. wird im itemType gespeichert.
void XQItem::setUnitType(UnitType unitType)
{
@@ -359,7 +334,8 @@ void XQItem::setUnitType(UnitType unitType)
}
//! firz
//! gibt den content-string zurück. das ist ein derefenzierter pointer
//! auf das zu diesem item gehörige daten-attribut 'useres' datenknotens.
const QString& XQItem::content() const
{
@@ -373,7 +349,7 @@ const QString& XQItem::content() const
}
//! firz
//! set den content()-string pointer. (als leihgabe)
void XQItem::setContent( const QString* content )
{
@@ -381,7 +357,7 @@ void XQItem::setContent( const QString* content )
}
//! firz
//! holt den schlüssel bzw. bezeicher des content() string aus 'unserem' content knoten.
const QString& XQItem::contentKey() const
{
@@ -395,6 +371,7 @@ QString XQItem::contentFormat() const
return data( XQItem::ContentFormatRole ).toString();
}
//! setz den den content format-string. wird im itemType gespeichert.
void XQItem::setContentFormat(const QString& contentFormat)
{
@@ -403,7 +380,7 @@ void XQItem::setContentFormat(const QString& contentFormat)
//! gibt das read-only auswahl-model zurück (wenn dieses item als
//! combobox gerendert wird)
//! combobox gerendert wird). wird im itemType gespeichert.
QStandardItemModel* XQItem::fixedChoices() const
{
@@ -451,7 +428,7 @@ bool XQItem::isHeaderStyle()
//! gibt den namen der datarole zurück
QString XQItem::dataRoleName(int role)
QString XQItem::dataRoleName(int role) const
{
if( role < XQItem::NoRole && model() )
return model()->roleNames()[role];
@@ -483,11 +460,24 @@ QVariant XQItem::data(int role ) const
return itemType().data(role);
}
// Das ist der Sonderfall, hier dereferenzieren wir den
// Zeiger auf den QString* aus unserem XQNodePtr
// Zugriffe auf den sichtbaren inhalt geben den inhalt des string pointer
// auf ein feld in content node wieder.
// DisplayRole gibt den formatieren inhalt wieder. die formatierung übernimmt
// der item type
// auf den original inhalt im content node zurückgeben.
case Qt::DisplayRole :
case Qt::EditRole :
{
if( itemType().renderStyle() == XQItem::FormattedStyle)//return "display:"+content();
return itemType().formatText( *this );
[[fallthrough]];
}
// EditRole & ContentRole sollen den 'rohen' inhalt unseres string-pointers
// auf den original inhalt im content node zurückgeben.
case Qt::EditRole :
case XQItem::ContentRole:
{
return content();
@@ -538,41 +528,85 @@ QVariant XQItem::data(int role ) const
}
/*!
Überschreibt setData() vom QStandardItem. Es wird unterschieden zwischen den data roles, die von
'unserem' itemType verwaltet und gespeichert werden und unseren eigenen. ein XQItem enthält nur folgende
Felder:
// - die ItemFlags (geerbt vom QStandardItem) stimmt nicht!
- den pointer auf den ItemType
- den pointer auf den inhalts-string: content()
Die anderen werte werden vom itemType verwaltet:
- der EditorType
- der RenderStyle
- der UnitType
- das ContentFormat
- das Icon
- ggf. das choiceModel, falls dieses Item als combobox gerendert wird.
*/
void XQItem::setData(const QVariant& value, int role )
{
//replaceAttribute( XQItem* item, XQItem::ItemDataRole role, const QVariant& newValue)
//emitDataChanged()
switch(role)
{
// das ist ein pointer auf den original-string aus dem XML
// ContentRole :
// ItemTypeRole :
case RenderStyleRole :
case EditorTypeRole :
case UnitTypeRole:
case ContentFormatRole:
case FlagsRole:
case FlagsRole: // Stimmt das?
case IconRole:
case FixedChoicesRole:
{
//qDebug() << " ---call type set Data: " << role << ": " << XQItem::fetchItemDataRoleName(role) << ":" << value.toString();
itemType().replaceAttribute( this, value, role );
break;
emitDataChanged();
// no break, return!
return;
}
// DAS PASSIERT NIE, AUSSER
// set the raw, unformatted data
case ContentRole:
{
// what will happen? value is a string ptr ?!
qDebug() << " --- setting content: " << value.toString();
// string ptr setzen kann die basis.
break;
return;
}
case Qt::EditRole :
{
// what will happen? value is a string ptr ?!
qDebug() << " --- setting editrole: " << value.toString();
return;
}
case Qt::DisplayRole :
{
// what will happen? value is a string ptr ?!
qDebug() << " --- setting DISPLAYrole: " << value.toString();
// ignore this
return;
}
// alles andere wie gehabt
case ContentNodeRole:
case SheetNodeRole:
case TypeKeyRole:
case Qt::DisplayRole :
case Qt::EditRole :
// return the raw, unformatted data
case ContentRole:
//case TypeKeyRole: not used
default:
QStandardItem::setData( value,role);
break;
}
// hier: behandlung wie gehabt
QStandardItem::setData( value,role);
}