diff options
author | Giuseppe Bilotta <giuseppe.bilotta@gmail.com> | 2014-10-19 16:15:20 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2014-10-19 07:23:36 -0700 |
commit | dfec501e7a1cd26dc2ff4d675a3c8d91ac86aaa5 (patch) | |
tree | 08f86ceb31922b2a40d1a16585d421fbfddd008f | |
parent | 60702f104ca5f27c6399db22e4a4bdf2d4b6791f (diff) | |
download | subsurface-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.cpp | 8 | ||||
-rw-r--r-- | qt-ui/models.cpp | 36 | ||||
-rw-r--r-- | qt-ui/models.h | 3 | ||||
-rw-r--r-- | qt-ui/tableview.cpp | 2 |
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. */ |