-- fyerabend
This commit is contained in:
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@@ -131,7 +131,7 @@ public:
|
||||
XQItem( XQItemType* itemType, const QString* content );
|
||||
XQItem( XQItemType* itemType, const QString* content, const XQNodePtr& contentNode );
|
||||
|
||||
virtual ~XQItem();
|
||||
virtual ~XQItem() = default;
|
||||
|
||||
//! creates not a clone but a new default item, \see QStandardItemModel::setItemPrototype()
|
||||
//! -- not used at the moment --
|
||||
@@ -202,7 +202,7 @@ public:
|
||||
//
|
||||
|
||||
bool isHeaderStyle();
|
||||
QString dataRoleName(int role);
|
||||
QString dataRoleName(int role) const;
|
||||
|
||||
QVariant data(int role = Qt::DisplayRole ) const override;
|
||||
void setData(const QVariant &value, int role ) override;
|
||||
|
@@ -242,7 +242,6 @@ void XQItemDelegate::setEditorData(QWidget* editor, const QModelIndex& index) co
|
||||
{
|
||||
|
||||
XQItem& item = xqItemFromIndex( index );
|
||||
qDebug() << " --- ZZZ: setEditorData: " << item.text();
|
||||
switch( item.editorType() )
|
||||
{
|
||||
case XQItemType::ComboBoxType :
|
||||
|
@@ -30,33 +30,47 @@ size_t XQItemType::s_ItemTypeCount = 0;
|
||||
XQItemType::XQItemType()
|
||||
: XQItem(nullptr) // vermeide rekursion
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
XQItemType::XQItemType( const XQItemType& other)
|
||||
: XQItem( other )
|
||||
{
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
//! destruktor, räumt das fixedChoices auf, so vorhanden.
|
||||
|
||||
XQItemType::~XQItemType()
|
||||
{
|
||||
|
||||
// das einzige property, was auch auf dem heap liegt.
|
||||
QStandardItemModel* choices = fixedChoices();
|
||||
if( choices )
|
||||
{
|
||||
setfixedChoices( nullptr );
|
||||
delete choices;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//! ruft QStandardItem::data auf
|
||||
|
||||
QVariant XQItemType::data( int role ) const
|
||||
{
|
||||
return QStandardItem::data(role);
|
||||
}
|
||||
|
||||
|
||||
//! ruft QStandardItem::setData auf
|
||||
|
||||
void XQItemType::setData(const QVariant &value, int role )
|
||||
{
|
||||
return QStandardItem::setData(value,role);
|
||||
}
|
||||
|
||||
|
||||
//! setzt einen attributwert neu. Ggf. wird ein neuer ItemType erzeugt.
|
||||
|
||||
void XQItemType::replaceAttribute( XQItem* item, const QVariant& newValue, int role )
|
||||
{
|
||||
// hat sich überhaupt was geändert?
|
||||
@@ -82,20 +96,26 @@ void XQItemType::replaceAttribute( XQItem* item, const QVariant& newValue, int r
|
||||
// und ins item übernehmen
|
||||
item->setItemType( myClone );
|
||||
|
||||
/// Obacht! Der alte, geänderte itemType bleibt erhaltent
|
||||
/// Obacht! Der alte, geänderte itemType bleibt erhalten
|
||||
/// und verrottet ggf. ohne Daseinszweck
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
QString XQItemType::formatToSI( const QString& valueTxt ) const
|
||||
QVariant XQItemType::formatText( const XQItem& item ) const
|
||||
{
|
||||
/*
|
||||
return "type says:"+ item.content();
|
||||
}
|
||||
|
||||
//! firz
|
||||
|
||||
QString XQItemType::formatToSI( const QString& valueTxt, XQItem::UnitType unitType ) const
|
||||
{
|
||||
|
||||
if( valueTxt.isEmpty() )
|
||||
return valueTxt;
|
||||
|
||||
if( XQItem::ISODate == _unitType )
|
||||
if( XQItem::ISODate == unitType )
|
||||
{
|
||||
// format iso date
|
||||
QDateTime dateTime = QDateTime::fromString(valueTxt, Qt::ISODate);
|
||||
@@ -122,14 +142,14 @@ QString XQItemType::formatToSI( const QString& valueTxt ) const
|
||||
//qDebug() << " convert: " << dVal << " : " << valueTxt << ": " << strVal << ":" << exp << " : " << strPrefix << ": " << nVal;
|
||||
|
||||
return QString("%1 %2%3").arg( strVal, strPrefix, unitTypeToString() );
|
||||
*/
|
||||
return "fitze!";
|
||||
|
||||
}
|
||||
|
||||
//! firz
|
||||
|
||||
QString XQItemType::unFormatFromSI(const QString& formText ) const
|
||||
{
|
||||
/*
|
||||
|
||||
QString input = formText.simplified();
|
||||
// #1: strip numeric part
|
||||
if( input.isEmpty() )
|
||||
@@ -167,14 +187,15 @@ QString XQItemType::unFormatFromSI(const QString& formText ) const
|
||||
//qDebug() << " convert: " << numPart << " : " << unitPart << " : " << dVal << " : " << result;
|
||||
|
||||
return result;
|
||||
*/
|
||||
return "fitze!";
|
||||
|
||||
}
|
||||
|
||||
///
|
||||
/// --- statics --------------------------------------------------------------------------
|
||||
///
|
||||
|
||||
//! gibt den dummy item type zurück (benutzt für null-items).
|
||||
|
||||
XQItemType* XQItemType::staticItemType()
|
||||
{
|
||||
static XQItemType s_DummyItemType;
|
||||
@@ -182,6 +203,8 @@ XQItemType* XQItemType::staticItemType()
|
||||
}
|
||||
|
||||
|
||||
//! erzeugt aus den eingenschaften des itemTypes einen eindeutigen schlüssel.
|
||||
|
||||
QString XQItemType::makeItemTypeKey()
|
||||
{
|
||||
QString key("%1:%2:%3:%4:%5:%6:%7");
|
||||
|
@@ -40,8 +40,10 @@ public:
|
||||
QVariant data( int role ) const override;
|
||||
void setData(const QVariant& value, int role ) override;
|
||||
|
||||
virtual QVariant formatText( const XQItem& item ) const;
|
||||
|
||||
// FIX! Das gehört hier nicht her!
|
||||
QString formatToSI(const QString& rawText ) const;
|
||||
QString formatToSI(const QString& rawText, XQItem::UnitType unitType ) const;
|
||||
QString unFormatFromSI(const QString& valueText ) const;
|
||||
|
||||
void replaceAttribute( XQItem* item, const QVariant& newValue, int role );
|
||||
|
Reference in New Issue
Block a user