Move TablePrintModel to Qt-models

Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Tomaz Canabrava 2015-05-29 13:53:07 -03:00 committed by Dirk Hohndel
parent 85d4bb8a70
commit 60dc9f4ab3
6 changed files with 174 additions and 163 deletions

View file

@ -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

View file

@ -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<unsigned int>();
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

View file

@ -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<struct TablePrintItem *> 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.

View file

@ -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<unsigned int>();
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;
}

View file

@ -0,0 +1,45 @@
#ifndef TABLEPRINTMODEL_H
#define TABLEPRINTMODEL_H
#include <QAbstractTableModel>
/* 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<TablePrintItem *> 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

View file

@ -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)
{