From 003729bde6d88ed59ee0ce088e78b3953a670847 Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Wed, 22 May 2013 08:10:02 -0300 Subject: [PATCH 1/7] Fixed the 'click in close doesn't close' on KMessageWidget. Signed-off-by: Tomaz Canabrava --- qt-ui/kmessagewidget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qt-ui/kmessagewidget.cpp b/qt-ui/kmessagewidget.cpp index dc200654e..5b37c7455 100644 --- a/qt-ui/kmessagewidget.cpp +++ b/qt-ui/kmessagewidget.cpp @@ -56,7 +56,7 @@ void KMessageWidgetPrivate::init(KMessageWidget* q_ptr) QObject::connect(textLabel, SIGNAL(linkHovered(const QString&)), q, SIGNAL(linkHovered(const QString&))); QAction* closeAction = new QAction(QObject::tr("Close"), q); - q->connect(closeAction, SIGNAL(toggled(bool)), q, SLOT(animatedHide())); + q->connect(closeAction, SIGNAL(triggered(bool)), q, SLOT(animatedHide())); closeButton = new QToolButton(content); closeButton->setAutoRaise(true); From df57b657fdcc1ac4ff9cf7bdb81e0c7a575f7b3b Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Wed, 22 May 2013 09:17:18 -0300 Subject: [PATCH 2/7] Rework on the Equipment tab to make it look more Modern. Note that this is a WIP and it does break functionality - ie, not possible to add Equipments, but this will be fixed in the next commit. Removed add / edit / remove buttons, only a single '+' icon appears on the widget now. the edit / delete will be done in place. Signed-off-by: Tomaz Canabrava --- plus.png | Bin 0 -> 7356 bytes qt-ui/maintab.cpp | 30 ++++++++ qt-ui/maintab.h | 4 ++ qt-ui/maintab.ui | 180 +++++++++------------------------------------- subsurface.qrc | 1 + 5 files changed, 69 insertions(+), 146 deletions(-) create mode 100644 plus.png diff --git a/plus.png b/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..1008f31cebe49df25c150af5b34752277fa180b9 GIT binary patch literal 7356 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 d6>jZT1!NwZK<`setAlignment(Qt::AlignHCenter); } + + /*Thid couldn't be done on the ui file because element + is floating, instead of being fixed on the layout. */ + QIcon plusIcon(":plus"); + addCylinder = new QPushButton(plusIcon, QString(), ui->cylindersGroup); + addCylinder->setFlat(true); + addCylinder->setToolTip(tr("Add Cylinder")); + addWeight = new QPushButton(plusIcon, QString(), ui->weightGroup); + addWeight->setFlat(true); + addWeight->setToolTip(tr("Add Weight System")); } +// We need to manually position the 'plus' on cylinder and weight. +void MainTab::resizeEvent(QResizeEvent* event) +{ + if (ui->cylindersGroup->isVisible()) + addCylinder->setGeometry( ui->cylindersGroup->contentsRect().width() - 30, 2, 24,24); + + if (ui->weightGroup->isVisible()) + addWeight->setGeometry( ui->weightGroup->contentsRect().width() - 30, 2, 24,24); + + QTabWidget::resizeEvent(event); +} + +void MainTab::showEvent(QShowEvent* event) +{ + QTabWidget::showEvent(event); + addCylinder->setGeometry( ui->cylindersGroup->contentsRect().width() - 30, 2, 24,24); + addWeight->setGeometry( ui->weightGroup->contentsRect().width() - 30, 2, 24,24); +} + + bool MainTab::eventFilter(QObject* object, QEvent* event) { if (event->type() == QEvent::FocusIn) { diff --git a/qt-ui/maintab.h b/qt-ui/maintab.h index c571df086..2bdb63fbc 100644 --- a/qt-ui/maintab.h +++ b/qt-ui/maintab.h @@ -38,6 +38,8 @@ public: void reload(); bool eventFilter(QObject* , QEvent*); + virtual void resizeEvent(QResizeEvent* ); + virtual void showEvent(QShowEvent* ); public Q_SLOTS: void on_addCylinder_clicked(); @@ -63,6 +65,8 @@ private: CylindersModel *cylindersModel; NotesBackup notesBackup; struct dive* currentDive; + QPushButton *addCylinder; + QPushButton *addWeight; }; #endif diff --git a/qt-ui/maintab.ui b/qt-ui/maintab.ui index 0a31897a4..0784980eb 100644 --- a/qt-ui/maintab.ui +++ b/qt-ui/maintab.ui @@ -14,7 +14,7 @@ TabWidget - 0 + 1 @@ -78,22 +78,22 @@ - - - - - Rating - - - - - - - Visibility - - - - + + + + + Rating + + + + + + + Visibility + + + + @@ -110,14 +110,14 @@ - - - - - - - - + + + + + + + + @@ -151,55 +151,17 @@ Qt::Vertical - + Cylinders - + - - - - - - Edit - - - - - - - Add - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Delete - - - - - - + Weight @@ -207,44 +169,6 @@ - - - - - - Edit - - - - - - - Add - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Delete - - - - - @@ -271,24 +195,15 @@ - - 10 - - - 10 - - - 10 - - - 10 - 10 15 + + 10 + @@ -386,16 +301,7 @@ - - 10 - - - 10 - - - 10 - - + 10 @@ -598,16 +504,7 @@ - - 10 - - - 10 - - - 10 - - + 10 @@ -750,16 +647,7 @@ - - 10 - - - 10 - - - 10 - - + 10 diff --git a/subsurface.qrc b/subsurface.qrc index e1939f28e..6ec97071f 100644 --- a/subsurface.qrc +++ b/subsurface.qrc @@ -2,5 +2,6 @@ star.svg subsurface-icon.png + plus.png From 28deb3e65dd04ba0eb178b44b2a3bdd16f40ef0f Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Wed, 22 May 2013 09:40:26 -0300 Subject: [PATCH 3/7] Re Enable the option to add cylinders / weigthsystems. Signed-off-by: Tomaz Canabrava --- qt-ui/maintab.cpp | 7 +++++-- qt-ui/maintab.h | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp index bbd9ebad8..50549f2c0 100644 --- a/qt-ui/maintab.cpp +++ b/qt-ui/maintab.cpp @@ -68,9 +68,12 @@ MainTab::MainTab(QWidget *parent) : QTabWidget(parent), addCylinder = new QPushButton(plusIcon, QString(), ui->cylindersGroup); addCylinder->setFlat(true); addCylinder->setToolTip(tr("Add Cylinder")); + connect(addCylinder, SIGNAL(clicked(bool)), this, SLOT(addCylinder_clicked())); + addWeight = new QPushButton(plusIcon, QString(), ui->weightGroup); addWeight->setFlat(true); addWeight->setToolTip(tr("Add Weight System")); + connect(addWeight, SIGNAL(clicked(bool)), this, SLOT(addWeight_clicked())); } // We need to manually position the 'plus' on cylinder and weight. @@ -270,7 +273,7 @@ void MainTab::updateDiveInfo(int dive) // qDebug("min temp %u",stats_selection.min_temp); } -void MainTab::on_addCylinder_clicked() +void MainTab::addCylinder_clicked() { if (cylindersModel->rowCount() >= MAX_CYLINDERS) return; @@ -297,7 +300,7 @@ void MainTab::on_delCylinder_clicked() { } -void MainTab::on_addWeight_clicked() +void MainTab::addWeight_clicked() { if (weightModel->rowCount() >= MAX_WEIGHTSYSTEMS) return; diff --git a/qt-ui/maintab.h b/qt-ui/maintab.h index 2bdb63fbc..4b10e7a6b 100644 --- a/qt-ui/maintab.h +++ b/qt-ui/maintab.h @@ -42,10 +42,10 @@ public: virtual void showEvent(QShowEvent* ); public Q_SLOTS: - void on_addCylinder_clicked(); + void addCylinder_clicked(); void on_editCylinder_clicked(); void on_delCylinder_clicked(); - void on_addWeight_clicked(); + void addWeight_clicked(); void on_editWeight_clicked(); void on_delWeight_clicked(); void updateDiveInfo(int dive); From 94ba79c0fedc92113df22da27a4ff2cf01b26f94 Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Wed, 22 May 2013 09:42:35 -0300 Subject: [PATCH 4/7] Only enable the add buttons when there's a dive loaded Signed-off-by: Tomaz Canabrava --- qt-ui/maintab.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp index 50549f2c0..0a8710e09 100644 --- a/qt-ui/maintab.cpp +++ b/qt-ui/maintab.cpp @@ -69,11 +69,12 @@ MainTab::MainTab(QWidget *parent) : QTabWidget(parent), addCylinder->setFlat(true); addCylinder->setToolTip(tr("Add Cylinder")); connect(addCylinder, SIGNAL(clicked(bool)), this, SLOT(addCylinder_clicked())); - + addCylinder->setEnabled(false); addWeight = new QPushButton(plusIcon, QString(), ui->weightGroup); addWeight->setFlat(true); addWeight->setToolTip(tr("Add Weight System")); connect(addWeight, SIGNAL(clicked(bool)), this, SLOT(addWeight_clicked())); + addWeight->setEnabled(false); } // We need to manually position the 'plus' on cylinder and weight. @@ -237,6 +238,8 @@ void MainTab::updateDiveInfo(int dive) ui->shortestAllText->setText(get_time_string(stats_selection.shortest_time.seconds, 0)); cylindersModel->setDive(d); weightModel->setDive(d); + addCylinder->setEnabled(true); + addWeight->setEnabled(true); } else { /* make the fields read-only */ ui->location->setReadOnly(true); @@ -263,6 +266,8 @@ void MainTab::updateDiveInfo(int dive) ui->airPressureText->clear(); cylindersModel->clear(); weightModel->clear(); + addCylinder->setEnabled(false); + addWeight->setEnabled(false); } /* statisticsTab*/ /* we can access the stats_selection struct, but how do we ensure the relevant dives are selected From 0b30c821ae5b8cb9f5e3e8d49152d56f215aeec4 Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Wed, 22 May 2013 11:00:20 -0300 Subject: [PATCH 5/7] Added a 'trash' icon on the Cylinders and Weigthsystem models So, the Cylinders and Weigthsystems got a new Trash icon, and the interface already intercepts the clicks ( on all columns ) and send this to the 'remove' method on boch models. On the model I'm just filtering the indexes that are not 'DELETE' and creating a stub method to be filled later. Signed-off-by: Tomaz Canabrava --- qt-ui/maintab.cpp | 8 ++++++++ qt-ui/models.cpp | 48 +++++++++++++++++++++++++++++++++++++++++++++-- qt-ui/models.h | 10 ++++++++-- subsurface.qrc | 1 + 4 files changed, 63 insertions(+), 4 deletions(-) diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp index 0a8710e09..a52058816 100644 --- a/qt-ui/maintab.cpp +++ b/qt-ui/maintab.cpp @@ -75,6 +75,14 @@ MainTab::MainTab(QWidget *parent) : QTabWidget(parent), addWeight->setToolTip(tr("Add Weight System")); connect(addWeight, SIGNAL(clicked(bool)), this, SLOT(addWeight_clicked())); addWeight->setEnabled(false); + + connect(ui->cylinders, SIGNAL(clicked(QModelIndex)), ui->cylinders->model(), SLOT(remove(QModelIndex))); + connect(ui->weights, SIGNAL(clicked(QModelIndex)), ui->weights->model(), SLOT(remove(QModelIndex))); + + ui->cylinders->setColumnWidth( CylindersModel::REMOVE, 24); + ui->cylinders->horizontalHeader()->setResizeMode (CylindersModel::REMOVE , QHeaderView::Fixed); + ui->weights->setColumnWidth( WeightModel::REMOVE, 24); + ui->cylinders->horizontalHeader()->setResizeMode (WeightModel::REMOVE , QHeaderView::Fixed); } // We need to manually position the 'plus' on cylinder and weight. diff --git a/qt-ui/models.cpp b/qt-ui/models.cpp index 466dcd2f9..82c125df6 100644 --- a/qt-ui/models.cpp +++ b/qt-ui/models.cpp @@ -11,6 +11,7 @@ #include #include #include +#include extern struct tank_info tank_info[100]; @@ -54,7 +55,7 @@ QVariant CylindersModel::headerData(int section, Qt::Orientation orientation, in int CylindersModel::columnCount(const QModelIndex& parent) const { - return 7; + return COLUMNS; } QVariant CylindersModel::data(const QModelIndex& index, int role) const @@ -102,6 +103,13 @@ QVariant CylindersModel::data(const QModelIndex& index, int role) const break; } } + + else if (role == Qt::DecorationRole){ + if (index.column() == REMOVE){ + ret = QIcon(":trash"); + } + } + return ret; } @@ -164,6 +172,29 @@ void CylindersModel::setDive(dive* d) endInsertRows(); } +Qt::ItemFlags CylindersModel::flags(const QModelIndex& index) const +{ + if (index.column() == REMOVE) + return Qt::ItemIsEnabled; + return QAbstractItemModel::flags(index); +} + +void CylindersModel::remove(const QModelIndex& index) +{ + if (index.column() != REMOVE){ + return; + } + // Remove code should be here. +} + +void WeightModel::remove(const QModelIndex& index) +{ + if (index.column() != REMOVE){ + return; + } + // Remove code should be here. +} + void WeightModel::clear() { if (rows > 0) { @@ -174,7 +205,7 @@ void WeightModel::clear() int WeightModel::columnCount(const QModelIndex& parent) const { - return 2; + return COLUMNS; } QVariant WeightModel::data(const QModelIndex& index, int role) const @@ -195,9 +226,22 @@ QVariant WeightModel::data(const QModelIndex& index, int role) const break; } } + + else if (role == Qt::DecorationRole){ + if (index.column() == REMOVE){ + ret = QIcon(":trash"); + } + } return ret; } +Qt::ItemFlags WeightModel::flags(const QModelIndex& index) const +{ + if (index.column() == REMOVE) + return Qt::ItemIsEnabled; + return QAbstractItemModel::flags(index); +} + int WeightModel::rowCount(const QModelIndex& parent) const { return rows; diff --git a/qt-ui/models.h b/qt-ui/models.h index 62ae3913c..98f955bf6 100644 --- a/qt-ui/models.h +++ b/qt-ui/models.h @@ -38,18 +38,21 @@ private: class CylindersModel : public QAbstractTableModel { Q_OBJECT public: - enum Column {TYPE, SIZE, MAXPRESS, START, END, O2, HE}; + enum Column {REMOVE, TYPE, SIZE, MAXPRESS, START, END, O2, HE, COLUMNS}; explicit CylindersModel(QObject* parent = 0); /*reimp*/ QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; /*reimp*/ int columnCount(const QModelIndex& parent = QModelIndex()) const; /*reimp*/ QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const; /*reimp*/ int rowCount(const QModelIndex& parent = QModelIndex()) const; + /*reimp*/ Qt::ItemFlags flags(const QModelIndex& index) const; void add(cylinder_t *cyl); void clear(); void update(); void setDive(struct dive *d); +public slots: + void remove(const QModelIndex& index); private: struct dive *current; @@ -61,16 +64,19 @@ private: class WeightModel : public QAbstractTableModel { Q_OBJECT public: - enum Column {TYPE, WEIGHT}; + enum Column {REMOVE, TYPE, WEIGHT, COLUMNS}; /*reimp*/ QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; /*reimp*/ int columnCount(const QModelIndex& parent = QModelIndex()) const; /*reimp*/ QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const; /*reimp*/ int rowCount(const QModelIndex& parent = QModelIndex()) const; + /*reimp*/ Qt::ItemFlags flags(const QModelIndex& index) const; void add(weightsystem_t *weight); void clear(); void update(); void setDive(struct dive *d); +public slots: + void remove(const QModelIndex& index); private: struct dive *current; diff --git a/subsurface.qrc b/subsurface.qrc index 6ec97071f..887390583 100644 --- a/subsurface.qrc +++ b/subsurface.qrc @@ -3,5 +3,6 @@ star.svg subsurface-icon.png plus.png + trash.png From 8cfb2aa237ede19d1eb23086905a010c908788f5 Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Wed, 22 May 2013 11:40:57 -0300 Subject: [PATCH 6/7] Extend a bit the skeleton 'removes' on cylinder and weigth to help dirk. Signed-off-by: Tomaz Canabrava --- qt-ui/models.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/qt-ui/models.cpp b/qt-ui/models.cpp index 82c125df6..6ac320b26 100644 --- a/qt-ui/models.cpp +++ b/qt-ui/models.cpp @@ -184,7 +184,9 @@ void CylindersModel::remove(const QModelIndex& index) if (index.column() != REMOVE){ return; } + beginRemoveRows(QModelIndex(), index.row(), index.row()); // yah, know, ugly. // Remove code should be here. + endRemoveRows(); } void WeightModel::remove(const QModelIndex& index) @@ -192,7 +194,9 @@ void WeightModel::remove(const QModelIndex& index) if (index.column() != REMOVE){ return; } + beginRemoveRows(QModelIndex(), index.row(), index.row()); // yah, know, ugly. // Remove code should be here. + endRemoveRows(); } void WeightModel::clear() From 75956f0f9149d7483ce0771df682d90e2fc9b923 Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Wed, 22 May 2013 12:20:00 -0300 Subject: [PATCH 7/7] Added basic editing functionality for Cylinders and Weigthsystems This patch adds basic editing functionality for Cylinders and Weigthsystems, it still doesn't use delegates to show the data to the user in a better way, and it does not take in consideration user preferences yet, but it's a starting point. Signed-off-by: Tomaz Canabrava --- qt-ui/models.cpp | 60 ++++++++++++++++++++++++++++++++++++++++++++++-- qt-ui/models.h | 6 +++-- 2 files changed, 62 insertions(+), 4 deletions(-) diff --git a/qt-ui/models.cpp b/qt-ui/models.cpp index 6ac320b26..360058dfd 100644 --- a/qt-ui/models.cpp +++ b/qt-ui/models.cpp @@ -113,6 +113,47 @@ QVariant CylindersModel::data(const QModelIndex& index, int role) const return ret; } +bool CylindersModel::setData(const QModelIndex& index, const QVariant& value, int role) +{ + cylinder_t *cyl = ¤t->cylinder[index.row()]; + switch(index.column()){ + case TYPE:{ + QByteArray desc = value.toByteArray(); + cyl->type.description = strdup(desc.data()); + break; + } + case SIZE: + // we can't use get_volume_string because the idiotic imperial tank + // sizes take working pressure into account... + if (cyl->type.size.mliter) { + if (prefs.units.volume == prefs.units.CUFT) { + double liters = cuft_to_l(value.toDouble()); + cyl->type.size.mliter = liters * 1000.0; + } else { + cyl->type.size.mliter = value.toDouble() * 1000.0; + } + } + break; + case MAXPRESS: + cyl->type.workingpressure.mbar = value.toInt(); + break; + case START: + cyl->start.mbar = value.toInt(); + break; + case END: + cyl->end.mbar = value.toInt(); + break; + case O2: + cyl->gasmix.o2.permille = value.toInt() * 10 - 5; + break; + case HE: + cyl->gasmix.he.permille = value.toInt() * 10 - 5; + break; + } + + return QAbstractItemModel::setData(index, value, role); +} + int CylindersModel::rowCount(const QModelIndex& parent) const { return rows; @@ -176,7 +217,7 @@ Qt::ItemFlags CylindersModel::flags(const QModelIndex& index) const { if (index.column() == REMOVE) return Qt::ItemIsEnabled; - return QAbstractItemModel::flags(index); + return QAbstractItemModel::flags(index) | Qt::ItemIsEditable; } void CylindersModel::remove(const QModelIndex& index) @@ -239,11 +280,26 @@ QVariant WeightModel::data(const QModelIndex& index, int role) const return ret; } +bool WeightModel::setData(const QModelIndex& index, const QVariant& value, int role) +{ + weightsystem_t *ws = ¤t_dive->weightsystem[index.row()]; + switch(index.column()) { + case TYPE:{ + QByteArray desc = value.toByteArray(); + ws->description = strdup(desc.data()); + break; + } + case WEIGHT: + ws->weight.grams = value.toInt() *1000; + break; + } +} + Qt::ItemFlags WeightModel::flags(const QModelIndex& index) const { if (index.column() == REMOVE) return Qt::ItemIsEnabled; - return QAbstractItemModel::flags(index); + return QAbstractItemModel::flags(index) | Qt::ItemIsEditable; } int WeightModel::rowCount(const QModelIndex& parent) const diff --git a/qt-ui/models.h b/qt-ui/models.h index 98f955bf6..ded612bb9 100644 --- a/qt-ui/models.h +++ b/qt-ui/models.h @@ -45,7 +45,8 @@ public: /*reimp*/ int columnCount(const QModelIndex& parent = QModelIndex()) const; /*reimp*/ QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const; /*reimp*/ int rowCount(const QModelIndex& parent = QModelIndex()) const; - /*reimp*/ Qt::ItemFlags flags(const QModelIndex& index) const; + /*reimp*/ Qt::ItemFlags flags(const QModelIndex& index) const; + /*reimp*/ bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole); void add(cylinder_t *cyl); void clear(); @@ -69,7 +70,8 @@ public: /*reimp*/ int columnCount(const QModelIndex& parent = QModelIndex()) const; /*reimp*/ QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const; /*reimp*/ int rowCount(const QModelIndex& parent = QModelIndex()) const; - /*reimp*/ Qt::ItemFlags flags(const QModelIndex& index) const; + /*reimp*/ Qt::ItemFlags flags(const QModelIndex& index) const; + /*reimp*/ bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole); void add(weightsystem_t *weight); void clear();