diff options
-rw-r--r-- | CMakeLists.txt | 1 | ||||
-rw-r--r-- | qt-models/models.cpp | 177 | ||||
-rw-r--r-- | qt-models/models.h | 20 | ||||
-rw-r--r-- | qt-models/profileprintmodel.cpp | 156 | ||||
-rw-r--r-- | qt-models/profileprintmodel.h | 26 | ||||
-rw-r--r-- | qt-ui/printlayout.cpp | 1 |
6 files changed, 184 insertions, 197 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 3b9a0277e..cfa156d17 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -262,6 +262,7 @@ set(SUBSURFACE_MODELS_LIB_SRCS qt-models/divetripmodel.cpp qt-models/divecomputerextradatamodel.cpp qt-models/completionmodels.cpp + qt-models/profileprintmodel.cpp ) source_group("Subsurface Models" FILES ${SUBSURFACE_MODELS}) diff --git a/qt-models/models.cpp b/qt-models/models.cpp index bca8032eb..5fa45c4f0 100644 --- a/qt-models/models.cpp +++ b/qt-models/models.cpp @@ -38,183 +38,6 @@ const QPixmap &trashIcon() return trash; } -/*################################################################ - * - * Implementation of the Dive List. - * - * ############################################################### */ - - -/*################################################################# - * # - * # Yearly Statistics Model - * # - * ################################################################ - */ - -/*################################################################# - * # - * # Table Print Model - * # - * ################################################################ - */ -/*################################################################# - * # - * # Profile Print Model - * # - * ################################################################ - */ - -ProfilePrintModel::ProfilePrintModel(QObject *parent) -{ -} - -void ProfilePrintModel::setDive(struct dive *divePtr) -{ - diveId = divePtr->id; - // reset(); -} - -void ProfilePrintModel::setFontsize(double size) -{ - fontSize = size; -} - -int ProfilePrintModel::rowCount(const QModelIndex &parent) const -{ - return 12; -} - -int ProfilePrintModel::columnCount(const QModelIndex &parent) const -{ - return 5; -} - -QVariant ProfilePrintModel::data(const QModelIndex &index, int role) const -{ - const int row = index.row(); - const int col = index.column(); - - switch (role) { - case Qt::DisplayRole: { - struct dive *dive = get_dive_by_uniq_id(diveId); - struct DiveItem di; - di.diveId = diveId; - - const QString unknown = tr("unknown"); - - // dive# + date, depth, location, duration - if (row == 0) { - if (col == 0) - return tr("Dive #%1 - %2").arg(dive->number).arg(di.displayDate()); - if (col == 3) { - QString unit = (get_units()->length == units::METERS) ? "m" : "ft"; - return tr("Max depth: %1 %2").arg(di.displayDepth()).arg(unit); - } - } - if (row == 1) { - if (col == 0) - return QString(get_dive_location(dive)); - if (col == 3) - return QString(tr("Duration: %1 min")).arg(di.displayDuration()); - } - // headings - if (row == 2) { - if (col == 0) - return tr("Gas used:"); - if (col == 2) - return tr("Tags:"); - if (col == 3) - return tr("SAC:"); - if (col == 4) - return tr("Weights:"); - } - // notes - if (col == 0) { - if (row == 6) - return tr("Notes:"); - if (row == 7) - return QString(dive->notes); - } - // more headings - if (row == 4) { - if (col == 0) - return tr("Divemaster:"); - if (col == 1) - return tr("Buddy:"); - if (col == 2) - return tr("Suit:"); - if (col == 3) - return tr("Viz:"); - if (col == 4) - return tr("Rating:"); - } - // values for gas, sac, etc... - if (row == 3) { - if (col == 0) { - int added = 0; - QString gas, gases; - for (int i = 0; i < MAX_CYLINDERS; i++) { - if (!is_cylinder_used(dive, i)) - continue; - gas = dive->cylinder[i].type.description; - gas += QString(!gas.isEmpty() ? " " : "") + gasname(&dive->cylinder[i].gasmix); - // if has a description and if such gas is not already present - if (!gas.isEmpty() && gases.indexOf(gas) == -1) { - if (added > 0) - gases += QString(" / "); - gases += gas; - added++; - } - } - return gases; - } - if (col == 2) { - char buffer[256]; - taglist_get_tagstring(dive->tag_list, buffer, 256); - return QString(buffer); - } - if (col == 3) - return di.displaySac(); - if (col == 4) { - weight_t tw = { total_weight(dive) }; - return get_weight_string(tw, true); - } - } - // values for DM, buddy, suit, etc... - if (row == 5) { - if (col == 0) - return QString(dive->divemaster); - if (col == 1) - return QString(dive->buddy); - if (col == 2) - return QString(dive->suit); - if (col == 3) - return (dive->visibility) ? QString::number(dive->visibility).append(" / 5") : QString(); - if (col == 4) - return (dive->rating) ? QString::number(dive->rating).append(" / 5") : QString(); - } - return QString(); - } - case Qt::FontRole: { - QFont font; - font.setPointSizeF(fontSize); - if (row == 0 && col == 0) { - font.setBold(true); - } - return QVariant::fromValue(font); - } - case Qt::TextAlignmentRole: { - // everything is aligned to the left - unsigned int align = Qt::AlignLeft; - // align depth and duration right - if (row < 2 && col == 4) - align = Qt::AlignRight | Qt::AlignVCenter; - return QVariant::fromValue(align); - } - } // switch (role) - return QVariant(); -} Qt::ItemFlags GasSelectionModel::flags(const QModelIndex &index) const { diff --git a/qt-models/models.h b/qt-models/models.h index 94fcc5129..df5906a18 100644 --- a/qt-models/models.h +++ b/qt-models/models.h @@ -22,26 +22,6 @@ #include "cleanertablemodel.h" #include "treemodel.h" -/* ProfilePrintModel: - * this model is used when printing a data table under a profile. it requires - * some exact usage of setSpan(..) on the target QTableView widget. - */ -class ProfilePrintModel : public QAbstractTableModel { - Q_OBJECT - -private: - int diveId; - double fontSize; - -public: - ProfilePrintModel(QObject *parent = 0); - int rowCount(const QModelIndex &parent = QModelIndex()) const; - int columnCount(const QModelIndex &parent = QModelIndex()) const; - QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; - void setDive(struct dive *divePtr); - void setFontsize(double size); -}; - class GasSelectionModel : public QStringListModel { Q_OBJECT public: diff --git a/qt-models/profileprintmodel.cpp b/qt-models/profileprintmodel.cpp new file mode 100644 index 000000000..1f8d918ed --- /dev/null +++ b/qt-models/profileprintmodel.cpp @@ -0,0 +1,156 @@ +#include "profileprintmodel.h" +#include "metrics.h" +#include "dive.h" +#include "divetripmodel.h" +#include "helpers.h" + +ProfilePrintModel::ProfilePrintModel(QObject *parent) +{ +} + +void ProfilePrintModel::setDive(struct dive *divePtr) +{ + diveId = divePtr->id; + // reset(); +} + +void ProfilePrintModel::setFontsize(double size) +{ + fontSize = size; +} + +int ProfilePrintModel::rowCount(const QModelIndex &parent) const +{ + return 12; +} + +int ProfilePrintModel::columnCount(const QModelIndex &parent) const +{ + return 5; +} + +QVariant ProfilePrintModel::data(const QModelIndex &index, int role) const +{ + const int row = index.row(); + const int col = index.column(); + + switch (role) { + case Qt::DisplayRole: { + struct dive *dive = get_dive_by_uniq_id(diveId); + struct DiveItem di; + di.diveId = diveId; + + const QString unknown = tr("unknown"); + + // dive# + date, depth, location, duration + if (row == 0) { + if (col == 0) + return tr("Dive #%1 - %2").arg(dive->number).arg(di.displayDate()); + if (col == 3) { + QString unit = (get_units()->length == units::METERS) ? "m" : "ft"; + return tr("Max depth: %1 %2").arg(di.displayDepth()).arg(unit); + } + } + if (row == 1) { + if (col == 0) + return QString(get_dive_location(dive)); + if (col == 3) + return QString(tr("Duration: %1 min")).arg(di.displayDuration()); + } + // headings + if (row == 2) { + if (col == 0) + return tr("Gas used:"); + if (col == 2) + return tr("Tags:"); + if (col == 3) + return tr("SAC:"); + if (col == 4) + return tr("Weights:"); + } + // notes + if (col == 0) { + if (row == 6) + return tr("Notes:"); + if (row == 7) + return QString(dive->notes); + } + // more headings + if (row == 4) { + if (col == 0) + return tr("Divemaster:"); + if (col == 1) + return tr("Buddy:"); + if (col == 2) + return tr("Suit:"); + if (col == 3) + return tr("Viz:"); + if (col == 4) + return tr("Rating:"); + } + // values for gas, sac, etc... + if (row == 3) { + if (col == 0) { + int added = 0; + QString gas, gases; + for (int i = 0; i < MAX_CYLINDERS; i++) { + if (!is_cylinder_used(dive, i)) + continue; + gas = dive->cylinder[i].type.description; + gas += QString(!gas.isEmpty() ? " " : "") + gasname(&dive->cylinder[i].gasmix); + // if has a description and if such gas is not already present + if (!gas.isEmpty() && gases.indexOf(gas) == -1) { + if (added > 0) + gases += QString(" / "); + gases += gas; + added++; + } + } + return gases; + } + if (col == 2) { + char buffer[256]; + taglist_get_tagstring(dive->tag_list, buffer, 256); + return QString(buffer); + } + if (col == 3) + return di.displaySac(); + if (col == 4) { + weight_t tw = { total_weight(dive) }; + return get_weight_string(tw, true); + } + } + // values for DM, buddy, suit, etc... + if (row == 5) { + if (col == 0) + return QString(dive->divemaster); + if (col == 1) + return QString(dive->buddy); + if (col == 2) + return QString(dive->suit); + if (col == 3) + return (dive->visibility) ? QString::number(dive->visibility).append(" / 5") : QString(); + if (col == 4) + return (dive->rating) ? QString::number(dive->rating).append(" / 5") : QString(); + } + return QString(); + } + case Qt::FontRole: { + QFont font; + font.setPointSizeF(fontSize); + if (row == 0 && col == 0) { + font.setBold(true); + } + return QVariant::fromValue(font); + } + case Qt::TextAlignmentRole: { + // everything is aligned to the left + unsigned int align = Qt::AlignLeft; + // align depth and duration right + if (row < 2 && col == 4) + align = Qt::AlignRight | Qt::AlignVCenter; + return QVariant::fromValue(align); + } + } // switch (role) + return QVariant(); +} diff --git a/qt-models/profileprintmodel.h b/qt-models/profileprintmodel.h new file mode 100644 index 000000000..b15f2df61 --- /dev/null +++ b/qt-models/profileprintmodel.h @@ -0,0 +1,26 @@ +#ifndef PROFILEPRINTMODEL_H +#define PROFILEPRINTMODEL_H + +#include <QAbstractTableModel> + +/* ProfilePrintModel: + * this model is used when printing a data table under a profile. it requires + * some exact usage of setSpan(..) on the target QTableView widget. + */ +class ProfilePrintModel : public QAbstractTableModel { + Q_OBJECT + +private: + int diveId; + double fontSize; + +public: + ProfilePrintModel(QObject *parent = 0); + int rowCount(const QModelIndex &parent = QModelIndex()) const; + int columnCount(const QModelIndex &parent = QModelIndex()) const; + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; + void setDive(struct dive *divePtr); + void setFontsize(double size); +}; + +#endif
\ No newline at end of file diff --git a/qt-ui/printlayout.cpp b/qt-ui/printlayout.cpp index 487f87e86..87f5f7c30 100644 --- a/qt-ui/printlayout.cpp +++ b/qt-ui/printlayout.cpp @@ -13,6 +13,7 @@ #include "profile/profilewidget2.h" #include "divetripmodel.h" #include "tableprintmodel.h" +#include "profileprintmodel.h" PrintLayout::PrintLayout(PrintDialog *dialogPtr, QPrinter *printerPtr, struct print_options *optionsPtr) { |