diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2013-05-22 08:47:41 -0700 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2013-05-22 08:47:41 -0700 |
commit | 9946fe97c0d0bf774473238170fce05bcac4fc1e (patch) | |
tree | ea8d02743863210667e7b05284e072d9328a7a4e /qt-ui | |
parent | d8673f986703439ceee6b037c14ff10526e6714a (diff) | |
parent | 75956f0f9149d7483ce0771df682d90e2fc9b923 (diff) | |
download | subsurface-9946fe97c0d0bf774473238170fce05bcac4fc1e.tar.gz |
Merge branch 'randomFixes' of https://github.com/tcanabrava/subsurface
Diffstat (limited to 'qt-ui')
-rw-r--r-- | qt-ui/kmessagewidget.cpp | 2 | ||||
-rw-r--r-- | qt-ui/maintab.cpp | 50 | ||||
-rw-r--r-- | qt-ui/maintab.h | 8 | ||||
-rw-r--r-- | qt-ui/maintab.ui | 180 | ||||
-rw-r--r-- | qt-ui/models.cpp | 108 | ||||
-rw-r--r-- | qt-ui/models.h | 12 |
6 files changed, 205 insertions, 155 deletions
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); diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp index 10645c12f..a52058816 100644 --- a/qt-ui/maintab.cpp +++ b/qt-ui/maintab.cpp @@ -61,8 +61,50 @@ MainTab::MainTab(QWidget *parent) : QTabWidget(parent), if (label) label->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")); + 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); + + 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. +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) { @@ -204,6 +246,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); @@ -230,6 +274,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 @@ -240,7 +286,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; @@ -267,7 +313,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 c571df086..4b10e7a6b 100644 --- a/qt-ui/maintab.h +++ b/qt-ui/maintab.h @@ -38,12 +38,14 @@ public: void reload(); bool eventFilter(QObject* , QEvent*); + virtual void resizeEvent(QResizeEvent* ); + 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); @@ -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 @@ <string>TabWidget</string> </property> <property name="currentIndex"> - <number>0</number> + <number>1</number> </property> <widget class="QWidget" name="notesTab"> <attribute name="title"> @@ -78,22 +78,22 @@ </widget> </item> <item row="5" column="0"> - <layout class="QHBoxLayout" name="ratingVisibilityLabels"> - <item> - <widget class="QLabel" name="label_14"> - <property name="text"> - <string>Rating</string> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="visibilityLabel"> - <property name="text"> - <string>Visibility</string> - </property> - </widget> - </item> - </layout> + <layout class="QHBoxLayout" name="ratingVisibilityLabels"> + <item> + <widget class="QLabel" name="label_14"> + <property name="text"> + <string>Rating</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="visibilityLabel"> + <property name="text"> + <string>Visibility</string> + </property> + </widget> + </item> + </layout> </item> <item row="5" column="1"> <widget class="QLabel" name="label_19"> @@ -110,14 +110,14 @@ </widget> </item> <item row="6" column="0"> - <layout class="QHBoxLayout" name="ratingVisibilityWidgets"> - <item> - <widget class="StarWidget" name="rating" native="true"/> - </item> - <item> - <widget class="StarWidget" name="visibility" native="true"/> - </item> - </layout> + <layout class="QHBoxLayout" name="ratingVisibilityWidgets"> + <item> + <widget class="StarWidget" name="rating" native="true"/> + </item> + <item> + <widget class="StarWidget" name="visibility" native="true"/> + </item> + </layout> </item> <item row="10" column="1"> <widget class="QPushButton" name="editReset"> @@ -151,55 +151,17 @@ <property name="orientation"> <enum>Qt::Vertical</enum> </property> - <widget class="QGroupBox" name="groupBox"> + <widget class="QGroupBox" name="cylindersGroup"> <property name="title"> <string>Cylinders</string> </property> - <layout class="QVBoxLayout" name="verticalLayout_2"> + <layout class="QHBoxLayout" name="horizontalLayout"> <item> <widget class="QTableView" name="cylinders"/> </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_2"> - <item> - <widget class="QPushButton" name="editCylinder"> - <property name="text"> - <string>Edit</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="addCylinder"> - <property name="text"> - <string>Add</string> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QPushButton" name="delCylinder"> - <property name="text"> - <string>Delete</string> - </property> - </widget> - </item> - </layout> - </item> </layout> </widget> - <widget class="QGroupBox" name="groupBox_3"> + <widget class="QGroupBox" name="weightGroup"> <property name="title"> <string>Weight</string> </property> @@ -207,44 +169,6 @@ <item> <widget class="QTableView" name="weights"/> </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_3"> - <item> - <widget class="QPushButton" name="editWeight"> - <property name="text"> - <string>Edit</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="addWeight"> - <property name="text"> - <string>Add</string> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer_2"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QPushButton" name="delWeight"> - <property name="text"> - <string>Delete</string> - </property> - </widget> - </item> - </layout> - </item> </layout> </widget> </widget> @@ -271,24 +195,15 @@ </item> <item> <layout class="QGridLayout" name="diveInfoUpperGridLayout"> - <property name="leftMargin"> - <number>10</number> - </property> - <property name="topMargin"> - <number>10</number> - </property> - <property name="rightMargin"> - <number>10</number> - </property> - <property name="bottomMargin"> - <number>10</number> - </property> <property name="horizontalSpacing"> <number>10</number> </property> <property name="verticalSpacing"> <number>15</number> </property> + <property name="margin"> + <number>10</number> + </property> <item row="0" column="0"> <widget class="QLabel" name="sacLabel"> <property name="font"> @@ -386,16 +301,7 @@ </item> <item> <layout class="QGridLayout" name="diveInfoLowerGridLayout"> - <property name="leftMargin"> - <number>10</number> - </property> - <property name="topMargin"> - <number>10</number> - </property> - <property name="rightMargin"> - <number>10</number> - </property> - <property name="bottomMargin"> + <property name="margin"> <number>10</number> </property> <property name="spacing"> @@ -598,16 +504,7 @@ </item> <item> <layout class="QGridLayout" name="statsUpperGridLayout"> - <property name="leftMargin"> - <number>10</number> - </property> - <property name="topMargin"> - <number>10</number> - </property> - <property name="rightMargin"> - <number>10</number> - </property> - <property name="bottomMargin"> + <property name="margin"> <number>10</number> </property> <property name="spacing"> @@ -750,16 +647,7 @@ </item> <item> <layout class="QGridLayout" name="statsLowerGridLayout"> - <property name="leftMargin"> - <number>10</number> - </property> - <property name="topMargin"> - <number>10</number> - </property> - <property name="rightMargin"> - <number>10</number> - </property> - <property name="bottomMargin"> + <property name="margin"> <number>10</number> </property> <property name="spacing"> diff --git a/qt-ui/models.cpp b/qt-ui/models.cpp index 466dcd2f9..360058dfd 100644 --- a/qt-ui/models.cpp +++ b/qt-ui/models.cpp @@ -11,6 +11,7 @@ #include <QColor> #include <QBrush> #include <QFont> +#include <QIcon> 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,9 +103,57 @@ QVariant CylindersModel::data(const QModelIndex& index, int role) const break; } } + + else if (role == Qt::DecorationRole){ + if (index.column() == REMOVE){ + ret = QIcon(":trash"); + } + } + 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; @@ -164,6 +213,33 @@ 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) | Qt::ItemIsEditable; +} + +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) +{ + if (index.column() != REMOVE){ + return; + } + beginRemoveRows(QModelIndex(), index.row(), index.row()); // yah, know, ugly. + // Remove code should be here. + endRemoveRows(); +} + void WeightModel::clear() { if (rows > 0) { @@ -174,7 +250,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 +271,37 @@ QVariant WeightModel::data(const QModelIndex& index, int role) const break; } } + + else if (role == Qt::DecorationRole){ + if (index.column() == REMOVE){ + ret = QIcon(":trash"); + } + } 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) | Qt::ItemIsEditable; +} + int WeightModel::rowCount(const QModelIndex& parent) const { return rows; diff --git a/qt-ui/models.h b/qt-ui/models.h index 62ae3913c..ded612bb9 100644 --- a/qt-ui/models.h +++ b/qt-ui/models.h @@ -38,18 +38,22 @@ 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; + /*reimp*/ bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole); 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 +65,20 @@ 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; + /*reimp*/ bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole); 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; |