summaryrefslogtreecommitdiffstats
path: root/qt-ui
diff options
context:
space:
mode:
authorGravatar Tomaz Canabrava <tcanabrava@kde.org>2013-11-18 22:33:01 -0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2013-11-18 16:53:16 -0800
commit61ac0a7c8d45c0d96e75d5e55ad48c6def5f4257 (patch)
tree252ae3f888829816e2a6be0cf042ec36ccdc7761 /qt-ui
parent4433830f550f41f0c558786dfe219fcb0fcbd45f (diff)
downloadsubsurface-61ac0a7c8d45c0d96e75d5e55ad48c6def5f4257.tar.gz
Make it posible to renumber dives.
If the user doubleclicks on the number of the dive in the dive list, this will present to him a dialog to change that number. Pressing enter will renumber the dive if there's no dive with the same number already. Fixes #288 Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-ui')
-rw-r--r--qt-ui/models.cpp49
-rw-r--r--qt-ui/models.h8
2 files changed, 54 insertions, 3 deletions
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<TripItem*>(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<TreeItem*>(index.internalPointer());
+ DiveItem *diveItem = dynamic_cast<DiveItem*>(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<TreeItem*> 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);