File failed to load: https://isis.astrogeology.usgs.gov/6.0.0/Object/assets/jax/output/NativeMML/config.js
Isis 3 Programmer Reference
TableView.cpp
1 
7 /* SPDX-License-Identifier: CC0-1.0 */
8 
9 #include "IsisDebug.h"
10 
11 #include "TableView.h"
12 
13 #include <iostream>
14 
15 #include <QLabel>
16 #include <QMargins>
17 #include <QSettings>
18 #include <QVBoxLayout>
19 
20 #include "AbstractTableModel.h"
21 #include "IException.h"
22 #include "TableViewHeader.h"
23 #include "TableViewContent.h"
24 #include "TableColumn.h"
25 #include "TableColumnList.h"
26 
27 
28 namespace Isis {
37  QString pathForSettings,
38  QString objName) {
39  nullify();
40 
41  m_settingsPath = new QString(pathForSettings);
42  setObjectName(objName);
43 
44  m_warningLabel = new QLabel;
45 
46  m_model = someModel;
47  connect(m_model, SIGNAL(filterCountsChanged(int, int)),
48  this, SIGNAL(filterCountsChanged(int, int)));
49  connect(m_model, SIGNAL(userWarning(AbstractTableModel::Warning)),
50  this, SLOT(displayWarning(AbstractTableModel::Warning)));
51 
52  m_columns = m_model->getColumns();
53 
54  // Add a column for row numbers and global selection.
55  m_columns->prepend(new TableColumn("", true, false));
56 
57  QSettings settings(*m_settingsPath, QSettings::NativeFormat);
58  QString key;
59  for (int i = 0; i < m_columns->size(); i++) {
60  TableColumn *const &col = (*m_columns)[i];
61  QString colTitle = col->getTitle();
62  int defaultWidth = QFontMetrics(font()).width(colTitle) + 40;
63  if (colTitle.size()) {
64  key = objectName() + " " + colTitle + " width";
65  key.replace(" ", "_");
66  col->setWidth(settings.value(key, defaultWidth).toInt());
67 
68  key = objectName() + " " + colTitle + " ascending";
69  key.replace(" ", "_");
70  col->setSortAscending(settings.value(key, true).toBool());
71  }
72  else {
73  col->setWidth(defaultWidth);
74 
75  // no need to set sort order since it is already ascending by default
76  }
77  }
78 
79  key = objectName() + " sorting order";
80  key.replace(" ", "_");
81  try {
82  m_columns->setSortingOrder(
83  settings.value(key, QStringList()).toStringList());
84  }
85  catch (IException &) {
86  }
87 
89  connect(m_header, SIGNAL(requestedGlobalSelection(bool)),
90  this, SLOT(handleModelSelectionChanged()));
91  connect(m_header, SIGNAL(requestedGlobalSelection(bool)),
92  this, SIGNAL(selectionChanged()));
93 
95  connect(m_content, SIGNAL(tableSelectionChanged()),
96  this, SIGNAL(selectionChanged()));
97  connect(m_content,
98  SIGNAL(rebuildModels(QList< AbstractTreeItem * >)),
99  this,
100  SIGNAL(rebuildModels(QList< AbstractTreeItem * >)));
101  connect(m_content, SIGNAL(horizontalScrollBarValueChanged(int)),
102  m_header, SLOT(updateHeaderOffset(int)));
103  connect(m_content, SIGNAL(modelDataChanged()),
104  this, SIGNAL(modelDataChanged()));
105  connect(m_content, SIGNAL(tableSelectionChanged(QList<AbstractTreeItem *>)),
106  this, SIGNAL(tableSelectionChanged(QList<AbstractTreeItem *>)));
107  connect(m_content, SIGNAL(editControlPoint(ControlPoint *, QString)),
108  this, SIGNAL(editControlPoint(ControlPoint *, QString)));
109 
110  connect(m_header, SIGNAL(columnResized(bool)),
111  m_content, SLOT(updateHorizontalScrollBar(bool)));
112 
113  QVBoxLayout *layout = new QVBoxLayout;
114  layout->addWidget(m_header);
115  layout->addWidget(m_content);
116  layout->addWidget(m_warningLabel);
117  layout->setContentsMargins(0, 0, 0, 0);
118  layout->setSpacing(0);
119 
120  setLayout(layout);
121  }
122 
123 
128  // save column widths
129  ASSERT(objectName().size());
130  if (m_settingsPath->size() && objectName().size()) {
131  QSettings settings(*m_settingsPath, QSettings::NativeFormat);
132  QString key;
133  for (int i = 0; i < m_columns->size(); i++) {
134  TableColumn *const &col = (*m_columns)[i];
135  QString colTitle = col->getTitle();
136  if (colTitle.size()) {
137  key = objectName() + " " + colTitle + " width";
138  key.replace(" ", "_");
139  settings.setValue(key, col->getWidth());
140 
141  key = objectName() + " " + colTitle + " ascending";
142  key.replace(" ", "_");
143  settings.setValue(key, col->sortAscending());
144  }
145  }
146 
147  key = objectName() + " sorting order";
148  key.replace(" ", "_");
149  settings.setValue(key, m_columns->getSortingOrderAsStrings());
150  }
151 
152  delete m_model;
153  m_model = NULL;
154 
155  m_columns = NULL;
156  }
157 
158 
165  return m_header;
166  }
167 
168 
175  void TableView::setColumnVisible(QString column, bool visible) {
176  for (int i = 0; i < m_columns->size(); i++) {
177  TableColumn *col = (*m_columns)[i];
178  if (col->getTitle() == column)
179  col->setVisible(visible);
180  }
181  }
182 
183 
190  return m_content->getModel();
191  }
192 
193 
200  return m_content;
201  }
202 
203 
204  // void TableView::setModel(AbstractTableModel * newModel)
205  // {
206  // ASSERT(m_content);
207  //
208  // if (newModel)
209  // {
210  // ASSERT(m_header);
211  // connect(newModel, SIGNAL(filterProgressChanged(int)),
212  // m_header, SLOT(updateFilterProgress(int)));
213  // connect(newModel, SIGNAL(rebuildProgressChanged(int)),
214  // m_header, SLOT(updateRebuildProgress(int)));
215  // connect(newModel, SIGNAL(filterProgressRangeChanged(int, int)),
216  // m_header, SLOT(updateFilterProgressRange(int, int)));
217  // connect(newModel, SIGNAL(rebuildProgressRangeChanged(int, int)),
218  // m_header, SLOT(updateRebuildProgressRange(int, int)));
219  // connect(newModel, SIGNAL(filterCountsChanged(int, int)),
220  // m_header, SLOT(handleFilterCountsChanged(int, int)));
221  // connect(m_header, SIGNAL(requestedGlobalSelection(bool)),
222  // newModel, SLOT(setGlobalSelection(bool)));
223  // connect(m_header, SIGNAL(requestedGlobalSelection(bool)),
224  // this, SLOT(onModelSelectionChanged()));
225  // connect(m_header, SIGNAL(requestedGlobalSelection(bool)),
226  // this, SIGNAL(selectionChanged()));
227  //
228  // m_columns = newModel->getColumns();
229  //
230  // // Add a column for row numbers and global selection.
231  // m_columns->prepend(new TableColumn("", true, false));
232  //
233  // for (int i = 0; i < m_columns->size(); i++)
234  // {
235  // TableColumn * column = (*m_columns)[i];
236  //
237  // column->setWidth(QFontMetrics(font()).width(column->getTitle()) + 25);
238  // connect(column, SIGNAL(visibilityChanged()), m_header, SLOT(update()));
239  // connect(column, SIGNAL(visibilityChanged()), m_content, SLOT(refresh()));
240  // connect(column, SIGNAL(visibilityChanged()),
241  // m_content, SLOT(updateHorizontalScrollBar()));
242  // connect(column, SIGNAL(widthChanged()), m_content, SLOT(refresh()));
243  // }
244  //
245  // m_header->setColumns(m_columns);
246  // m_content->setModel(newModel);
247  // m_header->update();
248  // }
249  // }
250 
251 
257  void TableView::displayWarning(AbstractTableModel::Warning warning) {
258  switch (warning) {
259  case AbstractTableModel::SortingDisabled:
260  m_warningLabel->setText(tr("<font color='red'>Sorting disabled</font>"));
261  m_warningLabel->setVisible(true);
262  break;
263 
264  case AbstractTableModel::SortingTableSizeLimitReached:
265  m_warningLabel->setText(
266  tr("<font color='red'>Sorting disabled - table row count (%L1) > table size limit"
267  " (%L2)</font>")
268  .arg(m_content->getModel()->getVisibleRowCount())
269  .arg(m_content->getModel()->sortLimit()));
270  m_warningLabel->setVisible(true);
271  break;
272 
273  case AbstractTableModel::None:
274  m_warningLabel->setText(tr(""));
275  m_warningLabel->setVisible(false);
276  break;
277  }
278  }
279 
284  m_content->refresh();
285  }
286 
287 
289  QList< AbstractTreeItem * > newlySelectedItems) {
290  m_content->refresh();
291  m_content->scrollTo(newlySelectedItems);
292  }
293 
298  m_header = NULL;
299  m_content = NULL;
300  m_columns = NULL;
301  m_model = NULL;
302  m_settingsPath = NULL;
303  }
304 }
Isis::TableView::getModel
AbstractTableModel * getModel()
Returns the model.
Definition: TableView.cpp:189
Isis::TableView::m_settingsPath
QString * m_settingsPath
Path of where to read/write the settings.
Definition: TableView.h:95
Isis::TableViewHeader
Definition: TableViewHeader.h:34
Isis::TableView::content
TableViewContent * content()
Returns the content of the table.
Definition: TableView.cpp:199
QList
This is free and unencumbered software released into the public domain.
Definition: BoxcarCachingAlgorithm.h:13
Isis::TableView::getHorizontalHeader
TableViewHeader * getHorizontalHeader()
Returns the horizontal header.
Definition: TableView.cpp:164
Isis::TableView::m_model
AbstractTableModel * m_model
The model of the table.
Definition: TableView.h:94
Isis::TableColumn
Definition: TableColumn.h:26
Isis::TableViewContent::scrollTo
void scrollTo(QList< AbstractTreeItem * >)
Scrolls to the selected items.
Definition: TableViewContent.cpp:274
Isis::AbstractTableModel
Translates the tree model into a table model.
Definition: AbstractTableModel.h:48
QStringList
Isis::ControlPoint
A single control point.
Definition: ControlPoint.h:354
Isis::TableViewContent::getModel
AbstractTableModel * getModel()
Returns the model.
Definition: TableViewContent.cpp:167
Isis::TableView::nullify
void nullify()
Sets all member variables to NULL.
Definition: TableView.cpp:297
Isis::TableView::setColumnVisible
void setColumnVisible(QString, bool)
Sets the specified column visible or invisible.
Definition: TableView.cpp:175
Isis::TableView::TableView
TableView(AbstractTableModel *someModel, QString pathForSettigs, QString objName)
Constructor.
Definition: TableView.cpp:36
Isis::IException
Isis exception class.
Definition: IException.h:91
Isis::TableView::~TableView
virtual ~TableView()
Destructor.
Definition: TableView.cpp:127
Isis::TableView::handleModelSelectionChanged
void handleModelSelectionChanged()
Handles refreshing the content when the model selection is changed.
Definition: TableView.cpp:283
Isis::TableView::m_columns
TableColumnList * m_columns
The columns of the table.
Definition: TableView.h:93
Isis::TableViewContent::refresh
void refresh()
Refreshes the table and viewport.
Definition: TableViewContent.cpp:224
Isis::TableView::m_header
TableViewHeader * m_header
The table header.
Definition: TableView.h:91
Isis::TableView::m_content
TableViewContent * m_content
The content of the header.
Definition: TableView.h:92
Isis::TableView::displayWarning
void displayWarning(AbstractTableModel::Warning)
Displays warnings for a table.
Definition: TableView.cpp:257
Isis
This is free and unencumbered software released into the public domain.
Definition: Apollo.h:16
Isis::TableViewContent
Definition: TableViewContent.h:60
Isis::TableView::m_warningLabel
QLabel * m_warningLabel
Label of any warnings.
Definition: TableView.h:96

U.S. Department of the Interior | U.S. Geological Survey
ISIS | Privacy & Disclaimers | Astrogeology Research Program
To contact us, please post comments and questions on the USGS Astrogeology Discussion Board
To report a bug, or suggest a feature go to: ISIS Github
File Modified: 07/13/2023 15:17:22