summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Giuseppe Bilotta <giuseppe.bilotta@gmail.com>2014-10-19 16:15:20 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2014-10-19 07:23:36 -0700
commitdfec501e7a1cd26dc2ff4d675a3c8d91ac86aaa5 (patch)
tree08f86ceb31922b2a40d1a16585d421fbfddd008f
parent60702f104ca5f27c6399db22e4a4bdf2d4b6791f (diff)
downloadsubsurface-dfec501e7a1cd26dc2ff4d675a3c8d91ac86aaa5.tar.gz
Resolution-independent trash icon
Also, generate the corresponding pixmap only once, and distribute it to all models that need it. Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--qt-ui/diveplanner.cpp8
-rw-r--r--qt-ui/models.cpp36
-rw-r--r--qt-ui/models.h3
-rw-r--r--qt-ui/tableview.cpp2
4 files changed, 44 insertions, 5 deletions
diff --git a/qt-ui/diveplanner.cpp b/qt-ui/diveplanner.cpp
index 2e382051e..b8ca2fb27 100644
--- a/qt-ui/diveplanner.cpp
+++ b/qt-ui/diveplanner.cpp
@@ -615,7 +615,13 @@ QVariant DivePlannerPointsModel::data(const QModelIndex &index, int role) const
switch (index.column()) {
case REMOVE:
if (rowCount() > 1)
- return p.entered ? QIcon(":trash") : QVariant();
+ return p.entered ? trashIcon() : QVariant();
+ }
+ } else if (role == Qt::SizeHintRole) {
+ switch (index.column()) {
+ case REMOVE:
+ if (rowCount() > 1)
+ return p.entered ? trashIcon().size() : QVariant();
}
} else if (role == Qt::FontRole) {
if (divepoints.at(index.row()).entered) {
diff --git a/qt-ui/models.cpp b/qt-ui/models.cpp
index 0e57b3b52..ef76e7e51 100644
--- a/qt-ui/models.cpp
+++ b/qt-ui/models.cpp
@@ -56,16 +56,31 @@ void CleanerTableModel::setHeaderDataStrings(const QStringList &newHeaders)
headers = newHeaders;
}
+static QPixmap *trashIconPixmap;
+
+// initialize the trash icon if necessary
+static void initTrashIcon() {
+ if (!trashIconPixmap)
+ trashIconPixmap = new QPixmap(QIcon(":trash").pixmap(defaultIconMetrics().sz_small));
+}
+
+const QPixmap &trashIcon() {
+ return *trashIconPixmap;
+}
+
CylindersModel::CylindersModel(QObject *parent) : rows(0)
{
// enum {REMOVE, TYPE, SIZE, WORKINGPRESS, START, END, O2, HE, DEPTH};
setHeaderDataStrings(QStringList() << "" << tr("Type") << tr("Size") << tr("Work press.") << tr("Start press.") << tr("End press.") << trUtf8("O" UTF8_SUBSCRIPT_2 "%") << tr("He%")
<< tr("Switch at")
);
+
+ initTrashIcon();
}
CylindersModel *CylindersModel::instance()
{
+
static QScopedPointer<CylindersModel> self(new CylindersModel());
return self.data();
}
@@ -158,7 +173,11 @@ QVariant CylindersModel::data(const QModelIndex &index, int role) const
break;
case Qt::DecorationRole:
if (index.column() == REMOVE)
- ret = QIcon(":trash");
+ ret = trashIcon();
+ break;
+ case Qt::SizeHintRole:
+ if (index.column() == REMOVE)
+ ret = trashIcon().size();
break;
case Qt::ToolTipRole:
@@ -394,6 +413,8 @@ WeightModel::WeightModel(QObject *parent) : CleanerTableModel(parent), rows(0)
{
//enum Column {REMOVE, TYPE, WEIGHT};
setHeaderDataStrings(QStringList() << tr("") << tr("Type") << tr("Weight"));
+
+ initTrashIcon();
}
weightsystem_t *WeightModel::weightSystemAt(const QModelIndex &index)
@@ -449,7 +470,11 @@ QVariant WeightModel::data(const QModelIndex &index, int role) const
break;
case Qt::DecorationRole:
if (index.column() == REMOVE)
- ret = QIcon(":trash");
+ ret = trashIcon();
+ break;
+ case Qt::SizeHintRole:
+ if (index.column() == REMOVE)
+ ret = trashIcon().size();
break;
case Qt::ToolTipRole:
if (index.column() == REMOVE)
@@ -1466,6 +1491,8 @@ DiveComputerModel::DiveComputerModel(QMultiMap<QString, DiveComputerNode> &dcMap
setHeaderDataStrings(QStringList() << "" << tr("Model") << tr("Device ID") << tr("Nickname"));
dcWorkingMap = dcMap;
numRows = 0;
+
+ initTrashIcon();
}
QVariant DiveComputerModel::data(const QModelIndex &index, int role) const
@@ -1491,7 +1518,10 @@ QVariant DiveComputerModel::data(const QModelIndex &index, int role) const
if (index.column() == REMOVE) {
switch (role) {
case Qt::DecorationRole:
- ret = QIcon(":trash");
+ ret = trashIcon();
+ break;
+ case Qt::SizeHintRole:
+ ret = trashIcon().size();
break;
case Qt::ToolTipRole:
ret = tr("Clicking here will remove this dive computer.");
diff --git a/qt-ui/models.h b/qt-ui/models.h
index 2345d0de2..a0b256594 100644
--- a/qt-ui/models.h
+++ b/qt-ui/models.h
@@ -89,6 +89,9 @@ private:
QString biggerEntry;
};
+/* Retrieve the trash icon pixmap, common to most table models */
+const QPixmap &trashIcon();
+
/* Encapsulation of the Cylinder Model, that presents the
* Current cylinders that are used on a dive. */
class CylindersModel : public CleanerTableModel {
diff --git a/qt-ui/tableview.cpp b/qt-ui/tableview.cpp
index 242141c26..423fcc766 100644
--- a/qt-ui/tableview.cpp
+++ b/qt-ui/tableview.cpp
@@ -21,7 +21,7 @@ TableView::TableView(QWidget *parent) : QGroupBox(parent)
metrics.icon = &defaultIconMetrics();
metrics.col_width = 7*text_em;
- metrics.rm_col_width = 3*text_em;
+ metrics.rm_col_width = metrics.icon->sz_small + 2*metrics.icon->spacing;
metrics.header_ht = text_ht + 10; // TODO DPI
/* There`s mostly a need for a Mac fix here too. */