10 #include <QVBoxLayout>
12 #include "AbstractTableModel.h"
14 #include "TableViewHeader.h"
15 #include "TableViewContent.h"
16 #include "TableColumn.h"
17 #include "TableColumnList.h"
22 TableView::TableView(AbstractTableModel *someModel,
23 QString pathForSettings,
27 m_settingsPath =
new QString(pathForSettings);
28 setObjectName(objName);
30 m_warningLabel =
new QLabel;
33 connect(m_model, SIGNAL(filterCountsChanged(
int,
int)),
34 this, SIGNAL(filterCountsChanged(
int,
int)));
35 connect(m_model, SIGNAL(userWarning(AbstractTableModel::Warning)),
36 this, SLOT(displayWarning(AbstractTableModel::Warning)));
38 m_columns = m_model->getColumns();
41 m_columns->prepend(
new TableColumn(
"",
true,
false));
43 QSettings settings(*m_settingsPath, QSettings::NativeFormat);
45 for (
int i = 0; i < m_columns->size(); i++) {
46 TableColumn *
const &col = (*m_columns)[i];
47 QString colTitle = col->getTitle();
48 int defaultWidth = QFontMetrics(font()).width(colTitle) + 40;
49 if (colTitle.size()) {
50 key = objectName() +
" " + colTitle +
" width";
51 key.replace(
" ",
"_");
52 col->setWidth(settings.value(key, defaultWidth).toInt());
54 key = objectName() +
" " + colTitle +
" ascending";
55 key.replace(
" ",
"_");
56 col->setSortAscending(settings.value(key,
true).toBool());
59 col->setWidth(defaultWidth);
65 key = objectName() +
" sorting order";
66 key.replace(
" ",
"_");
68 m_columns->setSortingOrder(
71 catch (IException &) {
74 m_header =
new TableViewHeader(m_model);
75 connect(m_header, SIGNAL(requestedGlobalSelection(
bool)),
76 this, SLOT(handleModelSelectionChanged()));
77 connect(m_header, SIGNAL(requestedGlobalSelection(
bool)),
78 this, SIGNAL(selectionChanged()));
80 m_content =
new TableViewContent(m_model);
81 connect(m_content, SIGNAL(tableSelectionChanged()),
82 this, SIGNAL(selectionChanged()));
87 connect(m_content, SIGNAL(horizontalScrollBarValueChanged(
int)),
88 m_header, SLOT(updateHeaderOffset(
int)));
89 connect(m_content, SIGNAL(modelDataChanged()),
90 this, SIGNAL(modelDataChanged()));
94 connect(m_header, SIGNAL(columnResized(
bool)),
95 m_content, SLOT(updateHorizontalScrollBar(
bool)));
97 QVBoxLayout *layout =
new QVBoxLayout;
98 layout->addWidget(m_header);
99 layout->addWidget(m_content);
100 layout->addWidget(m_warningLabel);
101 layout->setContentsMargins(0, 0, 0, 0);
102 layout->setSpacing(0);
108 TableView::~TableView() {
110 ASSERT(objectName().size());
111 if (m_settingsPath->size() && objectName().size()) {
112 QSettings settings(*m_settingsPath, QSettings::NativeFormat);
114 for (
int i = 0; i < m_columns->size(); i++) {
115 TableColumn *
const &col = (*m_columns)[i];
116 QString colTitle = col->getTitle();
117 if (colTitle.size()) {
118 key = objectName() +
" " + colTitle +
" width";
119 key.replace(
" ",
"_");
120 settings.setValue(key, col->getWidth());
122 key = objectName() +
" " + colTitle +
" ascending";
123 key.replace(
" ",
"_");
124 settings.setValue(key, col->sortAscending());
128 key = objectName() +
" sorting order";
129 key.replace(
" ",
"_");
130 settings.setValue(key, m_columns->getSortingOrderAsStrings());
140 TableViewHeader *TableView::getHorizontalHeader() {
145 void TableView::setColumnVisible(QString column,
bool visible) {
146 for (
int i = 0; i < m_columns->size(); i++) {
147 TableColumn *col = (*m_columns)[i];
148 if (col->getTitle() == column)
149 col->setVisible(visible);
154 AbstractTableModel *TableView::getModel() {
155 return m_content->getModel();
207 void TableView::displayWarning(AbstractTableModel::Warning warning) {
209 case AbstractTableModel::SortingDisabled:
210 m_warningLabel->setText(tr(
"<font color='red'>Sorting disabled</font>"));
211 m_warningLabel->setVisible(
true);
214 case AbstractTableModel::SortingTableSizeLimitReached:
215 m_warningLabel->setText(
216 tr(
"<font color='red'>Sorting disabled - table row count (%L1) > table size limit"
218 .arg(m_content->getModel()->getVisibleRowCount())
219 .arg(m_content->getModel()->sortLimit()));
220 m_warningLabel->setVisible(
true);
223 case AbstractTableModel::None:
224 m_warningLabel->setText(tr(
""));
225 m_warningLabel->setVisible(
false);
231 void TableView::handleModelSelectionChanged() {
232 m_content->refresh();
236 void TableView::handleModelSelectionChanged(
238 m_content->refresh();
239 m_content->scrollTo(newlySelectedItems);
243 void TableView::nullify() {
248 m_settingsPath = NULL;