diff --git a/items/xqitem.cpp b/items/xqitem.cpp index dc9eb11..cc4a622 100644 --- a/items/xqitem.cpp +++ b/items/xqitem.cpp @@ -37,18 +37,18 @@ XQItem::XQItemFlagMap XQItem::s_ItemFlagMap XQItem::XQItemDataRoleMap XQItem::s_ItemDataRoleMap { - {"ItemType", ItemTypeRole}, - {"Content", ContentRole}, - {"RenderStyle", RenderStyleRole}, - {"EditorType", EditorTypeRole}, - {"ItemFlags", FlagsRole}, - {"UnitType", UnitTypeRole}, - {"ContentFormat", ContentFormatRole}, - {"FlagsRole", FlagsRole}, - {"Icon", IconRole}, - {"FixedChoices", FixedChoicesRole}, - {"DataNode", ContentNodeRole}, - {"SheetNode", SheetNodeRole} + {"ItemTypeRole", ItemTypeRole}, + {"ContentRole", ContentRole}, + {"RenderStyleRole", RenderStyleRole}, + {"EditorTypeRole", EditorTypeRole}, + {"ItemFlagsRole", FlagsRole}, + {"UnitTypeRole", UnitTypeRole}, + {"ContentFormatRole", ContentFormatRole}, + {"FlagsRoleRole", FlagsRole}, + {"IconRole", IconRole}, + {"FixedChoicesRole", FixedChoicesRole}, + {"DataNodeRole", ContentNodeRole}, + {"SheetNodeRole", SheetNodeRole} }; // No bi-map needed here, qmap.key() is sufficient for the job @@ -388,7 +388,12 @@ bool XQItem::isHeaderStyle() } - +QString XQItem::dataRoleName(int role) +{ + if( role < XQItem::NoRole && model() ) + return model()->roleNames()[role]; + return XQItem::fetchItemDataRoleName(role); +} QVariant XQItem::data(int role ) const { @@ -470,7 +475,8 @@ QVariant XQItem::data(int role ) const void XQItem::setData(const QVariant& value, int role ) { - //replaceAttribute( XQItem* item, XQItem::ItemDataRole role, const QVariant& newValue) + + //qDebug() << " -- item set data: " << value.toString() << " for: " << role << ": " << dataRoleName(role); //emitDataChanged() switch(role) @@ -489,19 +495,34 @@ void XQItem::setData(const QVariant& value, int role ) itemType().replaceAttribute( this, value, role ); break; - case ContentNodeRole: - case SheetNodeRole: - - case TypeKeyRole: case Qt::DisplayRole : case Qt::EditRole : // return the raw, unformatted data case ContentRole: + { + //qDebug() << " -- item set data xxx: " << value.toString() << " for: " << role; + break; + QString* contentPtr = QStandardItem::data( XQItem::ContentRole ).value(); + if(contentPtr) + { + + contentPtr->operator=( value.toString() ); + } + return; + } + + // what to do here? + case ContentNodeRole: + case SheetNodeRole: + case TypeKeyRole: default: - QStandardItem::setData( value,role); + break; } + + QStandardItem::setData( value,role); + } @@ -534,6 +555,8 @@ int XQItem::fetchItemDataRole( const QString& dataRoleKey ) QString XQItem::fetchItemDataRoleName( int dataRole ) { + //if( dataRole < XQItem::NoRole) + // return this->model()-> return s_ItemDataRoleMap.key(dataRole); } diff --git a/items/xqitem.h b/items/xqitem.h index 3877712..7f219dd 100644 --- a/items/xqitem.h +++ b/items/xqitem.h @@ -225,6 +225,7 @@ public: bool isHeaderStyle(); // ... + QString dataRoleName(int role); QVariant data(int role = Qt::DisplayRole ) const override; void setData(const QVariant &value, int role ) override; diff --git a/items/xqitemdelegate.h b/items/xqitemdelegate.h index 5ef16ae..f3b706b 100644 --- a/items/xqitemdelegate.h +++ b/items/xqitemdelegate.h @@ -40,6 +40,7 @@ public: void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override; QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override; + void setEditorData(QWidget *editor, const QModelIndex &index) const override; void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override; void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override; diff --git a/model/xqcommand.cpp b/model/xqcommand.cpp index 9245322..e23cdd4 100644 --- a/model/xqcommand.cpp +++ b/model/xqcommand.cpp @@ -105,6 +105,7 @@ void XQCommand::saveNodes( const QModelIndexList& list ) } } + //! erzeugt einen string aus dem command-type, fürs debuggen. QString XQCommand::toString() diff --git a/model/xqcommand.h b/model/xqcommand.h index b1c0c7a..93608e7 100644 --- a/model/xqcommand.h +++ b/model/xqcommand.h @@ -27,6 +27,9 @@ struct XQNodeBackup XQNodePtr contentNode; }; +//! +//! \brief The XQNodeStore class +//! class XQNodeStore : public QVector { @@ -37,8 +40,9 @@ public: }; -// Das command enthält immer auch die betroffenen items -// ist also auch eine SavedNodeList +//! Das command enthält immer auch die betroffenen items +//! ist also auch ein node store + class XQCommand : public QUndoCommand, public XQNodeStore {