diff --git a/CMakeLists.txt b/CMakeLists.txt index f63e779fc..3b9a0277e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -257,6 +257,7 @@ set(SUBSURFACE_MODELS_LIB_SRCS qt-models/weightmodel.cpp qt-models/divecomputermodel.cpp qt-models/treemodel.cpp + qt-models/tableprintmodel.cpp qt-models/yearlystatisticsmodel.cpp qt-models/divetripmodel.cpp qt-models/divecomputerextradatamodel.cpp diff --git a/qt-models/models.cpp b/qt-models/models.cpp index f2aba0b1b..bca8032eb 100644 --- a/qt-models/models.cpp +++ b/qt-models/models.cpp @@ -58,130 +58,6 @@ const QPixmap &trashIcon() * # * ################################################################ */ -TablePrintModel::TablePrintModel() -{ - columns = 7; - rows = 0; -} - -TablePrintModel::~TablePrintModel() -{ - for (int i = 0; i < list.size(); i++) - delete list.at(i); -} - -void TablePrintModel::insertRow(int index) -{ - struct TablePrintItem *item = new struct TablePrintItem(); - item->colorBackground = 0xffffffff; - if (index == -1) { - beginInsertRows(QModelIndex(), rows, rows); - list.append(item); - } else { - beginInsertRows(QModelIndex(), index, index); - list.insert(index, item); - } - endInsertRows(); - rows++; -} - -void TablePrintModel::callReset() -{ - beginResetModel(); - endResetModel(); -} - -QVariant TablePrintModel::data(const QModelIndex &index, int role) const -{ - if (!index.isValid()) - return QVariant(); - if (role == Qt::BackgroundRole) - return QColor(list.at(index.row())->colorBackground); - if (role == Qt::DisplayRole) - switch (index.column()) { - case 0: - return list.at(index.row())->number; - case 1: - return list.at(index.row())->date; - case 2: - return list.at(index.row())->depth; - case 3: - return list.at(index.row())->duration; - case 4: - return list.at(index.row())->divemaster; - case 5: - return list.at(index.row())->buddy; - case 6: - return list.at(index.row())->location; - } - if (role == Qt::FontRole) { - QFont font; - font.setPointSizeF(7.5); - if (index.row() == 0 && index.column() == 0) { - font.setBold(true); - } - return QVariant::fromValue(font); - } - return QVariant(); -} - -bool TablePrintModel::setData(const QModelIndex &index, const QVariant &value, int role) -{ - if (index.isValid()) { - if (role == Qt::DisplayRole) { - switch (index.column()) { - case 0: - list.at(index.row())->number = value.toString(); - case 1: - list.at(index.row())->date = value.toString(); - case 2: - list.at(index.row())->depth = value.toString(); - case 3: - list.at(index.row())->duration = value.toString(); - case 4: - list.at(index.row())->divemaster = value.toString(); - case 5: - list.at(index.row())->buddy = value.toString(); - case 6: { - /* truncate if there are more than N lines of text, - * we don't want a row to be larger that a single page! */ - QString s = value.toString(); - const int maxLines = 15; - int count = 0; - for (int i = 0; i < s.length(); i++) { - if (s.at(i) != QChar('\n')) - continue; - count++; - if (count > maxLines) { - s = s.left(i - 1); - break; - } - } - list.at(index.row())->location = s; - } - } - return true; - } - if (role == Qt::BackgroundRole) { - list.at(index.row())->colorBackground = value.value(); - return true; - } - } - return false; -} - -int TablePrintModel::rowCount(const QModelIndex &parent) const -{ - Q_UNUSED(parent); - return rows; -} - -int TablePrintModel::columnCount(const QModelIndex &parent) const -{ - Q_UNUSED(parent); - return columns; -} - /*################################################################# * # * # Profile Print Model diff --git a/qt-models/models.h b/qt-models/models.h index 32f0f4321..94fcc5129 100644 --- a/qt-models/models.h +++ b/qt-models/models.h @@ -22,45 +22,6 @@ #include "cleanertablemodel.h" #include "treemodel.h" -/* TablePrintModel: - * for now we use a blank table model with row items TablePrintItem. - * these are pretty much the same as DiveItem, but have color - * properties, as well. perhaps later one a more unified model has to be - * considered, but the current TablePrintModel idea has to be extended - * to support variadic column lists and column list orders that can - * be controlled by the user. - */ -struct TablePrintItem { - QString number; - QString date; - QString depth; - QString duration; - QString divemaster; - QString buddy; - QString location; - unsigned int colorBackground; -}; - -class TablePrintModel : public QAbstractTableModel { - Q_OBJECT - -private: - QList list; - -public: - ~TablePrintModel(); - TablePrintModel(); - - int rows, columns; - void insertRow(int index = -1); - void callReset(); - - QVariant data(const QModelIndex &index, int role) const; - bool setData(const QModelIndex &index, const QVariant &value, int role); - int rowCount(const QModelIndex &parent) const; - int columnCount(const QModelIndex &parent) const; -}; - /* 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. diff --git a/qt-models/tableprintmodel.cpp b/qt-models/tableprintmodel.cpp new file mode 100644 index 000000000..c3ed3c118 --- /dev/null +++ b/qt-models/tableprintmodel.cpp @@ -0,0 +1,127 @@ +#include "tableprintmodel.h" +#include "metrics.h" +#include "color.h" + +TablePrintModel::TablePrintModel() +{ + columns = 7; + rows = 0; +} + +TablePrintModel::~TablePrintModel() +{ + for (int i = 0; i < list.size(); i++) + delete list.at(i); +} + +void TablePrintModel::insertRow(int index) +{ + struct TablePrintItem *item = new struct TablePrintItem(); + item->colorBackground = 0xffffffff; + if (index == -1) { + beginInsertRows(QModelIndex(), rows, rows); + list.append(item); + } else { + beginInsertRows(QModelIndex(), index, index); + list.insert(index, item); + } + endInsertRows(); + rows++; +} + +void TablePrintModel::callReset() +{ + beginResetModel(); + endResetModel(); +} + +QVariant TablePrintModel::data(const QModelIndex &index, int role) const +{ + if (!index.isValid()) + return QVariant(); + if (role == Qt::BackgroundRole) + return QColor(list.at(index.row())->colorBackground); + if (role == Qt::DisplayRole) + switch (index.column()) { + case 0: + return list.at(index.row())->number; + case 1: + return list.at(index.row())->date; + case 2: + return list.at(index.row())->depth; + case 3: + return list.at(index.row())->duration; + case 4: + return list.at(index.row())->divemaster; + case 5: + return list.at(index.row())->buddy; + case 6: + return list.at(index.row())->location; + } + if (role == Qt::FontRole) { + QFont font; + font.setPointSizeF(7.5); + if (index.row() == 0 && index.column() == 0) { + font.setBold(true); + } + return QVariant::fromValue(font); + } + return QVariant(); +} + +bool TablePrintModel::setData(const QModelIndex &index, const QVariant &value, int role) +{ + if (index.isValid()) { + if (role == Qt::DisplayRole) { + switch (index.column()) { + case 0: + list.at(index.row())->number = value.toString(); + case 1: + list.at(index.row())->date = value.toString(); + case 2: + list.at(index.row())->depth = value.toString(); + case 3: + list.at(index.row())->duration = value.toString(); + case 4: + list.at(index.row())->divemaster = value.toString(); + case 5: + list.at(index.row())->buddy = value.toString(); + case 6: { + /* truncate if there are more than N lines of text, + * we don't want a row to be larger that a single page! */ + QString s = value.toString(); + const int maxLines = 15; + int count = 0; + for (int i = 0; i < s.length(); i++) { + if (s.at(i) != QChar('\n')) + continue; + count++; + if (count > maxLines) { + s = s.left(i - 1); + break; + } + } + list.at(index.row())->location = s; + } + } + return true; + } + if (role == Qt::BackgroundRole) { + list.at(index.row())->colorBackground = value.value(); + return true; + } + } + return false; +} + +int TablePrintModel::rowCount(const QModelIndex &parent) const +{ + Q_UNUSED(parent); + return rows; +} + +int TablePrintModel::columnCount(const QModelIndex &parent) const +{ + Q_UNUSED(parent); + return columns; +} diff --git a/qt-models/tableprintmodel.h b/qt-models/tableprintmodel.h new file mode 100644 index 000000000..9263d10d2 --- /dev/null +++ b/qt-models/tableprintmodel.h @@ -0,0 +1,45 @@ +#ifndef TABLEPRINTMODEL_H +#define TABLEPRINTMODEL_H + +#include + +/* TablePrintModel: + * for now we use a blank table model with row items TablePrintItem. + * these are pretty much the same as DiveItem, but have color + * properties, as well. perhaps later one a more unified model has to be + * considered, but the current TablePrintModel idea has to be extended + * to support variadic column lists and column list orders that can + * be controlled by the user. + */ +struct TablePrintItem { + QString number; + QString date; + QString depth; + QString duration; + QString divemaster; + QString buddy; + QString location; + unsigned int colorBackground; +}; + +class TablePrintModel : public QAbstractTableModel { + Q_OBJECT + +private: + QList list; + +public: + ~TablePrintModel(); + TablePrintModel(); + + int rows, columns; + void insertRow(int index = -1); + void callReset(); + + QVariant data(const QModelIndex &index, int role) const; + bool setData(const QModelIndex &index, const QVariant &value, int role); + int rowCount(const QModelIndex &parent) const; + int columnCount(const QModelIndex &parent) const; +}; + +#endif diff --git a/qt-ui/printlayout.cpp b/qt-ui/printlayout.cpp index 637612e41..487f87e86 100644 --- a/qt-ui/printlayout.cpp +++ b/qt-ui/printlayout.cpp @@ -12,6 +12,7 @@ #include "models.h" #include "profile/profilewidget2.h" #include "divetripmodel.h" +#include "tableprintmodel.h" PrintLayout::PrintLayout(PrintDialog *dialogPtr, QPrinter *printerPtr, struct print_options *optionsPtr) {