diff --git a/qt-ui/models.cpp b/qt-ui/models.cpp index 2e4a0860e..63a5fda4f 100644 --- a/qt-ui/models.cpp +++ b/qt-ui/models.cpp @@ -810,6 +810,11 @@ TreeItem::~TreeItem() qDeleteAll(children); } +Qt::ItemFlags TreeItem::flags(const QModelIndex& index) const +{ + return Qt::ItemIsEnabled | Qt::ItemIsSelectable; +} + int TreeItem::row() const { if (parent) @@ -846,6 +851,10 @@ QVariant TreeModel::data(const QModelIndex& index, int role) const return val; } +bool TreeItem::setData(const QModelIndex& index, const QVariant& value, int role) +{ +} + QModelIndex TreeModel::index(int row, int column, const QModelIndex& parent) const { @@ -995,6 +1004,34 @@ QVariant DiveItem::data(int column, int role) const return retVal; } +Qt::ItemFlags DiveItem::flags(const QModelIndex& index) const +{ + if(index.column() == NR){ + return TreeItem::flags(index) | Qt::ItemIsEditable; + } + return TreeItem::flags(index); +} + +bool DiveItem::setData(const QModelIndex& index, const QVariant& value, int role) +{ + if (role != Qt::EditRole) + return false; + if (index.column() != NR) + return false; + + int v = value.toInt(); + int i; + struct dive *d; + for_each_dive(i, d){ + if (d->number == v) + return false; + } + + dive->number = value.toInt(); + mark_divelist_changed(TRUE); + return true; +} + QString DiveItem::displayDate() const { return get_dive_date_string(dive->when); @@ -1075,7 +1112,8 @@ Qt::ItemFlags DiveTripModel::flags(const QModelIndex& index) const if (!index.isValid()) return 0; - return Qt::ItemIsEnabled | Qt::ItemIsSelectable; + TripItem *item = static_cast(index.internalPointer()); + return item->flags(index); } QVariant DiveTripModel::headerData(int section, Qt::Orientation orientation, int role) const @@ -1167,6 +1205,15 @@ void DiveTripModel::setLayout(DiveTripModel::Layout layout) setupModelData(); } +bool DiveTripModel::setData(const QModelIndex& index, const QVariant& value, int role) +{ + TreeItem* item = static_cast(index.internalPointer()); + DiveItem *diveItem = dynamic_cast(item); + if(!diveItem) + return false; + return diveItem->setData(index, value, role);} + + /*#################################################################### * * Dive Computer Model diff --git a/qt-ui/models.h b/qt-ui/models.h index de9aab5ce..d7b2eedd2 100644 --- a/qt-ui/models.h +++ b/qt-ui/models.h @@ -144,6 +144,9 @@ public: virtual ~TreeItem(); TreeItem(); virtual QVariant data (int column, int role) const; + virtual bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole); + virtual Qt::ItemFlags flags(const QModelIndex &index) const; + int row() const; QList children; TreeItem *parent; @@ -155,7 +158,8 @@ struct DiveItem : public TreeItem { virtual QVariant data(int column, int role) const; struct dive* dive; - + virtual bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole); + virtual Qt::ItemFlags flags(const QModelIndex& index) const; QString displayDate() const; QString displayDuration() const; QString displayDepth() const; @@ -174,7 +178,6 @@ class TreeModel : public QAbstractItemModel public: TreeModel(QObject *parent = 0); virtual ~TreeModel(); - virtual QVariant data(const QModelIndex &index, int role) const; /*reimp*/ int rowCount(const QModelIndex &parent = QModelIndex()) const; /*reimp*/ int columnCount(const QModelIndex &parent = QModelIndex()) const; @@ -197,6 +200,7 @@ public: Qt::ItemFlags flags(const QModelIndex &index) const; virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; + virtual bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole); DiveTripModel(QObject* parent = 0); Layout layout() const; void setLayout(Layout layout);