Isis 3 Programmer Reference
CnetEditorWidget.cpp
1
7/* SPDX-License-Identifier: CC0-1.0 */
8
9#include "CnetEditorWidget.h"
10
11#include <QAction>
12#include <QApplication>
13#include <QBoxLayout>
14#include <QByteArray>
15#include <QCloseEvent>
16#include <QDebug>
17#include <QGroupBox>
18#include <QHBoxLayout>
19#include <QHeaderView>
20#include <QItemSelection>
21#include <QMenu>
22#include <QMessageBox>
23#include <QModelIndex>
24#include <QScrollArea>
25#include <QScrollBar>
26#include <QSettings>
27#include <QSplitter>
28#include <QString>
29#include <QStringList>
30#include <QTime>
31#include <QTimer>
32#include <QToolBar>
33#include <QVBoxLayout>
34#include <QWhatsThis>
35#include <QtXml>
36
37#include "AbstractMeasureItem.h"
38#include "AbstractPointItem.h"
39#include "AbstractTreeItem.h"
40#include "CnetDisplayProperties.h"
41#include "CnetEditorSortConfigDialog.h"
42#include "Control.h"
43#include "ControlMeasure.h"
44#include "ControlNet.h"
45#include "ControlPoint.h"
46#include "FileName.h"
47#include "FilterWidget.h"
48#include "IException.h"
49#include "ImageImageTreeModel.h"
50#include "ImagePointTreeModel.h"
51#include "MeasureTableModel.h"
52#include "PointMeasureTreeModel.h"
53#include "PointTableModel.h"
54#include "Project.h"
55#include "TableView.h"
56#include "TableViewHeader.h"
57#include "TreeView.h"
58#include "XmlStackedHandler.h"
59#include "XmlStackedHandlerReader.h"
60
61
62namespace Isis {
63
64//**************************************************************
65//**************************************************************
66//**************************************************************
67
68 const QString CnetEditorWidget::VERSION = "0.1";
69
70//**************************************************************
71//**************************************************************
72//**************************************************************
73
74
75 CnetEditorWidget::CnetEditorWidget(Control *control, QString pathForSettings) {
76 nullify();
77
78 m_workingVersion = new QString;
79 m_menuActions = new QMap< QAction *, QList< QString > >;
80 m_toolBarActions = new QMap< QString, QList< QAction * > >;
81
82 m_updatingSelection = false;
83
84 m_sortDialog = NULL;
85
87 connect(CnetDisplayProperties::getInstance(), SIGNAL(compositionFinished()),
88 this, SLOT(rebuildModels()));
89
90 connect(this, SIGNAL(cnetModified()), this, SLOT(setCnetModified()));
91 m_settingsPath = new QString(pathForSettings);
92
93 QBoxLayout *mainLayout = createMainLayout();
94 setLayout(mainLayout);
95
97
99
101
102 installEventFilter(this);
103 }
104
105
110
112
113 delete m_workingVersion;
114 m_workingVersion = NULL;
115
116 delete m_settingsPath;
117 m_settingsPath = NULL;
118
119 delete m_pointTreeView;
120 m_pointTreeView = NULL;
121
122 delete m_imageTreeView;
123 m_imageTreeView = NULL;
124
127
128 delete m_pointTableView;
129 m_pointTableView = NULL;
130
131 delete m_measureTableView;
132 m_measureTableView = NULL;
133
134 delete m_pointFilterWidget;
135 m_pointFilterWidget = NULL;
136
139
142
143 delete m_menuActions;
144 m_menuActions = NULL;
145
146 delete m_toolBarActions;
147 m_toolBarActions = NULL;
148
149 m_pointTableBox = NULL;
150 m_measureTableBox = NULL;
151 m_mainSplitter = NULL;
152
153 // TODO: null all member widgets!
154
155 delete m_pointModel;
156 m_pointModel = NULL;
157
158 delete m_imageModel;
159 m_imageModel = NULL;
160
161 delete m_connectionModel;
162 m_connectionModel = NULL;
163
164 delete m_sortDialog;
165 m_sortDialog = NULL;
166 }
167
168
173 m_pointTreeView = NULL;
174 m_imageTreeView = NULL;
176
177 m_pointModel = NULL;
178 m_imageModel = NULL;
179 m_connectionModel = NULL;
180
181 m_pointTableModel = NULL;
182 m_measureTableModel = NULL;
183
184 m_pointTableBox = NULL;
185 m_measureTableBox = NULL;
186
187 m_pointTableView = NULL;
188 m_measureTableView = NULL;
189
190 m_mainSplitter = NULL;
191
192 m_menuActions = NULL;
193 m_toolBarActions = NULL;
194
195 m_filterArea = NULL;
196
197 m_pointFilterWidget = NULL;
200
201 m_control = NULL;
202 m_settingsPath = NULL;
203 m_workingVersion = NULL;
204
205 m_sortDialog = NULL;
206 }
207
208
214 void CnetEditorWidget::rebuildModels(QList<AbstractTreeItem *> itemsToDelete) {
215 m_pointModel->stopWorking();
216 m_imageModel->stopWorking();
217 m_connectionModel->stopWorking();
218
219 bool ignoreAll = false;
220 foreach (AbstractTreeItem * item, itemsToDelete) {
221 try {
222 item->deleteSource();
223 }
224 catch (IException &e) {
225 QString message = e.what();
226
227 if (!ignoreAll) {
228 if (item == itemsToDelete.last()) {
229 QMessageBox::warning(
230 this, "Failed to delete row", message, QMessageBox::Ok);
231 }
232 else {
233 message += "\n\nOkay to continue?";
234
235 QMessageBox::StandardButton status = QMessageBox::warning(
236 this, "Failed to delete row", message, QMessageBox::Yes |
237 QMessageBox::YesToAll | QMessageBox::No);
238
239 if (status == QMessageBox::YesToAll)
240 ignoreAll = true;
241 else if (status == QMessageBox::No)
242 break;
243 }
244 }
245 }
246 }
247
248 m_pointModel->rebuildItems();
249 m_imageModel->rebuildItems();
250 m_connectionModel->rebuildItems();
251 }
252
253
261
262 connect(m_pointTreeView, SIGNAL(activated()),
263 m_imageTreeView, SLOT(deactivate()));
264 connect(m_pointTreeView, SIGNAL(activated()),
265 m_connectionTreeView, SLOT(deactivate()));
266
267 connect(m_imageTreeView, SIGNAL(activated()),
268 m_pointTreeView, SLOT(deactivate()));
269 connect(m_imageTreeView, SIGNAL(activated()),
270 m_connectionTreeView, SLOT(deactivate()));
271
272 connect(m_connectionTreeView, SIGNAL(activated()),
273 m_pointTreeView, SLOT(deactivate()));
274 connect(m_connectionTreeView, SIGNAL(activated()),
275 m_imageTreeView, SLOT(deactivate()));
276
278
280 m_pointTableBox = new QGroupBox(tr("Control Point Table"));
281 QHBoxLayout *pointTableLayout = new QHBoxLayout;
282 pointTableLayout->addWidget(m_pointTableView);
283 m_pointTableBox->setLayout(pointTableLayout);
284
286 m_measureTableBox = new QGroupBox(tr("Control Measure Table"));
287 QHBoxLayout *measureTableLayout = new QHBoxLayout;
288 measureTableLayout->addWidget(m_measureTableView);
289 m_measureTableBox->setLayout(measureTableLayout);
290
291 m_mainSplitter = new QSplitter(Qt::Vertical);
294
295 QBoxLayout *mainLayout = new QHBoxLayout;
296 mainLayout->addWidget(m_mainSplitter);
297
298 return mainLayout;
299 }
300
301
306
307 QAction *freezeTablesAct = new QAction(QIcon(
308 FileName("$ISISROOT/appdata/images/icons/ice.png").expanded()),
309 tr("&Freeze Tables"), this);
310 freezeTablesAct->setCheckable(true);
311 freezeTablesAct->setToolTip(tr("Freeze tables (filters will not take "
312 "effect until unfrozen)"));
313 freezeTablesAct->setStatusTip(tr("Freeze tables (filters will not take "
314 "effect until unfrozen)"));
315 freezeTablesAct->setWhatsThis(tr("<html>When frozen, the contents of the "
316 "tables will be locked. Current filters will not be applied to the "
317 "tables until they are unfrozen.</html>"));
318 connect(freezeTablesAct, SIGNAL(toggled(bool)),
319 this, SLOT(setTablesFrozen(bool)));
320 QList< QString > freezeTablesLocation;
321 freezeTablesLocation.append(tr("&Tables"));
322 m_menuActions->insert(freezeTablesAct, freezeTablesLocation);
323
324 QAction *configureSortAct = new QAction(QIcon(
325 FileName("$ISISROOT/appdata/images/icons/sort.png").expanded()),
326 tr("&Sorting Options..."), this);
327 QString configureSortToolTipText = tr("Configure table sorting options");
328 configureSortAct->setToolTip(configureSortToolTipText);
329 configureSortAct->setStatusTip(configureSortToolTipText);
330 configureSortAct->setWhatsThis(tr("<html>Click here to configure options "
331 "related to the sorting of table columns.</html>"));
332 connect(configureSortAct, SIGNAL(triggered()),
333 this, SLOT(configSorting()));
334 QList< QString > configureSortLocation;
335 configureSortLocation.append(tr("&Tables"));
336 m_menuActions->insert(configureSortAct, configureSortLocation);
337
338 QAction *whatsThisAct = QWhatsThis::createAction(this);
339 QList< QString > whatsThisLocation;
340 whatsThisLocation.append(tr("&Help"));
341 m_menuActions->insert(whatsThisAct, whatsThisLocation);
342
343 QList< QAction * > tbActionList;
344 tbActionList.append(freezeTablesAct);
345 tbActionList.append(configureSortAct);
346 m_toolBarActions->insert("settingsToolBar", tbActionList);
347 }
348
349
359
360
370
371
381
382
387
388 FilterWidget *pointFilter = new FilterWidget("Points and Measures");
389 if (m_pointModel) {
390 m_pointModel->setFilter(pointFilter);
391 }
392
393 QHBoxLayout *pointFilterLayout = new QHBoxLayout;
394 pointFilterLayout->addWidget(pointFilter);
395 QWidget *pointArea = new QWidget;
396 pointArea->setLayout(pointFilterLayout);
397 QScrollArea *pointFilterScrollArea = new QScrollArea;
398 pointFilterScrollArea->setWidget(pointArea);
399 pointFilterScrollArea->setWidgetResizable(true);
400 m_pointFilterWidget = pointFilterScrollArea;
401
402 FilterWidget *serialFilter = new FilterWidget("Images and Points");
403 if (m_imageModel) {
404 m_imageModel->setFilter(serialFilter);
405 }
406
407 QHBoxLayout *serialFilterLayout = new QHBoxLayout;
408 serialFilterLayout->addWidget(serialFilter);
409 QWidget *serialArea = new QWidget;
410 serialArea->setLayout(serialFilterLayout);
411 QScrollArea *serialFilterScrollArea = new QScrollArea;
412 serialFilterScrollArea->setWidget(serialArea);
413 serialFilterScrollArea->setWidgetResizable(true);
414 m_serialFilterWidget = serialFilterScrollArea;
415
416 FilterWidget *connectionFilter = new FilterWidget("Connections");
417 if (m_connectionModel) {
418 m_connectionModel->setFilter(connectionFilter);
419 }
420
421 QHBoxLayout *connectionFilterLayout = new QHBoxLayout;
422 connectionFilterLayout->addWidget(connectionFilter);
423 QWidget *connectionArea = new QWidget;
424 connectionArea->setLayout(connectionFilterLayout);
425 QScrollArea *connectionFilterScrollArea = new QScrollArea;
426 connectionFilterScrollArea->setWidget(connectionArea);
427 connectionFilterScrollArea->setWidgetResizable(true);
428 m_connectionFilterWidget = connectionFilterScrollArea;
429 }
430
431
438 "m_pointTableView");
439 m_pointTableView->setWhatsThis("<html>Each row in the table is a control "
440 "point. Each column in the table is an attribute of a control "
441 "point.<br/><br/>Cells that are gray are not editable.</html>");
442 connect(m_pointTableView, SIGNAL(modelDataChanged()),
443 this, SIGNAL(cnetModified()));
444
445 connect(m_pointTreeView, SIGNAL(selectionChanged()),
446 m_pointTableView, SLOT(handleModelSelectionChanged()));
447 connect(m_pointTableView, SIGNAL(selectionChanged()),
448 m_pointTreeView, SLOT(handleModelSelectionChanged()));
449
450 connect(m_pointTableView,
451 SIGNAL(rebuildModels(QList< AbstractTreeItem * >)),
452 this,
453 SLOT(rebuildModels(QList< AbstractTreeItem * >)));
454
455 connect(m_pointTableView, SIGNAL(filterCountsChanged(int, int)),
456 this, SLOT(handlePointTableFilterCountsChanged(int, int)));
457
458 connect(m_pointTableView, SIGNAL(editControlPoint(ControlPoint *, QString)),
459 this, SIGNAL(editControlPoint(ControlPoint *, QString)));
460
461 for (int i = 0; i < AbstractPointItem::COLS; i++) {
462 QAction *act = new QAction(
463 AbstractPointItem::getColumnName((AbstractPointItem::Column) i), this);
464 act->setCheckable(true);
465 connect(act, SIGNAL(toggled(bool)), this, SLOT(pointColToggled()));
466 m_pointTableView->getHorizontalHeader()->addAction(act);
467 }
468
469 m_pointTableView->getHorizontalHeader()->setContextMenuPolicy(
470 Qt::ActionsContextMenu);
471 }
472
473
480 "m_measureTableView");
481 m_measureTableView->setWhatsThis("<html>Each row in the table is a control "
482 "measure. Each column in the table is an attribute of a control "
483 "measure.<br/><br/>Rows with bold text are reference measures. "
484 "Cells that are gray are not editable.</html>");
485 connect(m_pointTableView,
486 SIGNAL(tableSelectionChanged(QList< AbstractTreeItem * >)),
488 SLOT(handleTreeSelectionChanged(QList<AbstractTreeItem *>)));
489
490 connect(m_measureTableView,
491 SIGNAL(tableSelectionChanged(QList< AbstractTreeItem * >)),
493 SLOT(handleTreeSelectionChanged(QList< AbstractTreeItem * >)));
494
495
496 connect(m_measureTableView, SIGNAL(modelDataChanged()),
497 this, SIGNAL(cnetModified()));
498 connect(m_pointTreeView, SIGNAL(selectionChanged()),
499 m_measureTableView, SLOT(handleModelSelectionChanged()));
500 connect(m_measureTableView, SIGNAL(selectionChanged()),
501 m_pointTreeView, SLOT(handleModelSelectionChanged()));
502 connect(m_measureTableView,
503 SIGNAL(rebuildModels(QList< AbstractTreeItem * >)),
504 this,
505 SLOT(rebuildModels(QList< AbstractTreeItem * >)));
506
507 connect(m_measureTableView, SIGNAL(filterCountsChanged(int, int)),
508 this, SLOT(handleMeasureTableFilterCountsChanged(int, int)));
509
510 connect(m_measureTableView, SIGNAL(editControlPoint(ControlPoint *, QString)),
511 this, SIGNAL(editControlPoint(ControlPoint *, QString)));
512
513 for (int i = 0; i < AbstractMeasureItem::COLS; i++) {
514 QAction *act = new QAction(AbstractMeasureItem::getColumnName(
515 (AbstractMeasureItem::Column) i), this);
516 act->setCheckable(true);
517 connect(act, SIGNAL(toggled(bool)), this, SLOT(measureColToggled()));
518 m_measureTableView->getHorizontalHeader()->addAction(act);
519 }
520
521 m_measureTableView->getHorizontalHeader()->setContextMenuPolicy(
522 Qt::ActionsContextMenu);
523 }
524
525
530 rebuildModels(QList< AbstractTreeItem * >());
531 }
532
533
538 QList< QAction * > actions =
540
541 for (int i = 0; i < actions.size(); i++) {
542 m_pointTableView->setColumnVisible(actions[i]->text(),
543 actions[i]->isChecked());
544 }
545 }
546
547
552 QList< QAction * > actions =
554 for (int i = 0; i < actions.size(); i++)
555 m_measureTableView->setColumnVisible(actions[i]->text(),
556 actions[i]->isChecked());
557 }
558
559
570 int visibleRows, int totalRows) {
571 handleTableFilterCountsChanged(visibleRows, totalRows, m_pointTableBox,
572 "Control Point Table");
573 }
574
575
586 int visibleRows, int totalRows) {
588 "Control Measure Table");
589 }
590
591
601 int visibleRows, int totalRows, QGroupBox *box, QString initialText) {
602 if (box) {
603 QString newTitle = initialText + " (";
604 if (visibleRows > -1)
605 newTitle += QString::number(visibleRows);
606 else
607 newTitle += "???";
608
609 newTitle += " / " + QString::number(totalRows) + ")";
610
611 box->setTitle(newTitle);
612 }
613 }
614
615
620 if (*m_workingVersion == "") {
621 *m_workingVersion = "0.1";
622 }
623
626 }
627
628
633
634 QSettings settings(*m_settingsPath, QSettings::NativeFormat);
635 *m_workingVersion = settings.value("version", "").toString();
636
637 m_mainSplitter->restoreState(settings.value("mainSplitter").toByteArray());
638
639 QString key;
640
641 QList< QAction * > actions =
643 for (int i = 0; i < actions.size(); i++) {
644 key = m_measureTableView->objectName() + " " +
645 AbstractMeasureItem::getColumnName((AbstractMeasureItem::Column) i);
646 key.replace(" ", "_");
647 actions[i]->setChecked(settings.value(key, true).toBool());
648 }
649
650 actions = m_pointTableView->getHorizontalHeader()->actions();
651 for (int i = 0; i < actions.size(); i++) {
652 key = m_pointTableView->objectName() + " " +
653 AbstractPointItem::getColumnName((AbstractPointItem::Column) i);
654 key.replace(" ", "_");
655 actions[i]->setChecked(settings.value(key, true).toBool());
656 }
657
658 // Restore sorting configuration settings.
660 settings.value("measureTableSortingEnabled", true).toBool());
662 settings.value("measureTableSortLimit", 500000).toInt());
664 settings.value("pointTableSortingEnabled", true).toBool());
666 settings.value("pointTableSortLimit", 100000).toInt());
667 }
668
669
674
675 QSettings settings(*m_settingsPath, QSettings::NativeFormat);
676 settings.setValue("version", VERSION);
677 settings.setValue("mainSplitter", m_mainSplitter->saveState());
678
679 QString key;
680
681 QList< QAction * > actions =
683 for (int i = 0; i < actions.size(); i++) {
684 key = m_measureTableView->objectName() + " " +
685 AbstractMeasureItem::getColumnName((AbstractMeasureItem::Column) i);
686 key.replace(" ", "_");
687 settings.setValue(key, actions[i]->isChecked());
688 }
689
690 actions = m_pointTableView->getHorizontalHeader()->actions();
691 for (int i = 0; i < actions.size(); i++) {
692 key = m_pointTableView->objectName() + " " +
693 AbstractPointItem::getColumnName((AbstractPointItem::Column) i);
694 key.replace(" ", "_");
695 settings.setValue(key, actions[i]->isChecked());
696 }
697
698 // Write sorting configuration settings.
699 settings.setValue("measureTableSortingEnabled",
701 settings.setValue("measureTableSortLimit",
703 settings.setValue("pointTableSortingEnabled",
705 settings.setValue("pointTableSortLimit",
707 }
708
709
718
719
728
729
738
739
748
749
758
759
768
769
778
779
788
789
798
799
808
809
818
819
825 QMap< QAction *, QList< QString > > CnetEditorWidget::menuActions() {
826 return *m_menuActions;
827 }
828
829
835 QMap< QString, QList< QAction * > > CnetEditorWidget::toolBarActions() {
836 return *m_toolBarActions;
837 }
838
839
846 ControlNet *filteredCnet = new ControlNet(*(m_control->controlNet()));
847
848 QList<AbstractTreeItem *> networkItems = m_pointModel->getItems(0, -1,
849 AbstractTreeModel::MeasureItems | AbstractTreeModel::PointItems, true);
850
851 // Iterate through our copy of the cnet, deleting anything that doesn't
852 // exactly match our networkItems.
853 for (int pointIndex = filteredCnet->GetNumPoints() - 1;
854 pointIndex >= 0;
855 pointIndex--) {
856 if (networkItems.isEmpty()) {
857 ControlPoint *cp = filteredCnet->GetPoint(pointIndex);
858 cp->SetEditLock(false);
859
860 for (int measureIndex = 0;
861 measureIndex < cp->GetNumMeasures();
862 measureIndex++) {
863 cp->GetMeasure(measureIndex)->SetEditLock(false);
864 }
865
866 filteredCnet->DeletePoint(cp);
867 }
868 else if (networkItems.last()->getPointerType() ==
869 AbstractTreeItem::Point) {
870 ControlPoint *networkItemsCp =
871 (ControlPoint *)networkItems.last()->getPointer();
872 ControlPoint *cp = filteredCnet->GetPoint(pointIndex);
873 if (cp->GetId() != networkItemsCp->GetId()) {
874 cp->SetEditLock(false);
875
876 for (int measureIndex = 0;
877 measureIndex < cp->GetNumMeasures();
878 measureIndex++) {
879 cp->GetMeasure(measureIndex)->SetEditLock(false);
880 }
881
882 filteredCnet->DeletePoint(cp);
883 }
884 else {
885 networkItems.removeLast();
886 }
887 }
888 else if (networkItems.last()->getPointerType() ==
889 AbstractTreeItem::Measure) {
890 ControlPoint *cp = filteredCnet->GetPoint(pointIndex);
891 ControlMeasure *networkItemsCm =
892 (ControlMeasure *)networkItems.last()->getPointer();
893
894 if (cp->GetId() != networkItemsCm->Parent()->GetId()) {
895 cp->SetEditLock(false);
896
897 for (int measureIndex = 0;
898 measureIndex < cp->GetNumMeasures();
899 measureIndex++) {
900 cp->GetMeasure(measureIndex)->SetEditLock(false);
901 }
902
903 filteredCnet->DeletePoint(cp);
904 }
905 else {
906 // Our CP stays, figure out which CMs stay.
907 for (int measureIndex = cp->GetNumMeasures() - 1;
908 networkItemsCm && measureIndex >= 0;
909 measureIndex--) {
910 ControlMeasure *cm = cp->GetMeasure(measureIndex);
911 if (cm->GetCubeSerialNumber() !=
912 networkItemsCm->GetCubeSerialNumber()) {
913 cm->SetEditLock(false);
914 cp->Delete(cm);
915 }
916 else {
917 networkItems.removeLast();
918 networkItemsCm = NULL;
919
920 if (networkItems.last()->getPointerType() ==
921 AbstractTreeItem::Measure) {
922 networkItemsCm =
923 (ControlMeasure *)networkItems.last()->getPointer();
924 }
925 }
926 }
927
928 // We still need to verify the copied CP at this index... although
929 // nothing should go wrong, we know things do go wrong so do
930 // the verify instead of just tossing the last networkItems item.
931 pointIndex++;
932 }
933 }
934 }
935
936 return filteredCnet;
937 }
938
939
946 return m_measureTableModel->sortingIsEnabled();
947 }
948
949
956 return m_measureTableModel->sortLimit();
957 }
958
959
966 return m_pointTableModel->sortingIsEnabled();
967 }
968
969
976 return m_pointTableModel->sortLimit();
977 }
978
979
986 m_measureTableModel->setSortingEnabled(enabled);
987 }
988
989
996 m_measureTableModel->setSortLimit(limit);
997 }
998
999
1006 m_pointTableModel->setSortingEnabled(enabled);
1007 }
1008
1009
1016 m_pointTableModel->setSortLimit(limit);
1017 }
1018
1019
1025 if (!m_sortDialog) {
1027 }
1028 m_sortDialog->show();
1029 }
1030
1031
1037 void CnetEditorWidget::setTablesFrozen(bool freezeTables) {
1038 if (freezeTables) {
1039 m_connectionModel->setFrozen(true);
1040 m_imageModel->setFrozen(true);
1041 m_pointModel->setFrozen(true);
1042 }
1043 else {
1044 m_pointModel->setFrozen(false);
1045 m_imageModel->setFrozen(false);
1046 m_connectionModel->setFrozen(false);
1047 }
1048 }
1049
1050
1057}
Translates the tree model into a table model.
Base class for an item in the tree.
Configure user's sorting settings for the cneteditor widget.
void createSerialTreeView()
Creates the serial tree and adds it to the model.
Control * m_control
Control for this widget.
virtual ~CnetEditorWidget()
Destructor.
QWidget * m_connectionFilterWidget
Connection filter widget.
int pointTableSortLimit() const
Returns the sorting limit for the point table.
void setPointTableSortLimit(int limit)
Sets the point table sorting limit.
TreeView * m_connectionTreeView
Connection tree view.
static const QString VERSION
Version.
void setCnetModified()
Connected to cnetModified().
void createMeasureTableView()
Creates the measure table and adds it to the widget.
QString * m_settingsPath
Path to read/write settings.
TreeView * m_imageTreeView
Image tree view.
QWidget * serialFilterWidget()
Returns the serial filter widget.
QGroupBox * m_pointTableBox
Point table box.
AbstractTableModel * measureTableModel()
Returns the measure table model.
void setMeasureTableSortLimit(int limit)
Sets the measure table sorting limit.
bool m_updatingSelection
Updates selection.
void rebuildModels()
Rebuilds the models.
QMap< QString, QList< QAction * > > toolBarActions()
Returns the tool bar actions.
ControlNet * control()
Returns the control network.
QWidget * connectionTreeView()
Returns the connection tree view.
void createConnectionTreeView()
Creates the connection tree and adds it to the model.
void pointColToggled()
Toggles the point column.
void handleMeasureTableFilterCountsChanged(int visibleRows, int totalRows)
Handles measure table filter changes.
AbstractTableModel * pointTableModel()
Returns the point table model.
ControlNet * filteredNetwork() const
Returns the filtered control net.
QWidget * connectionFilterWidget()
Returns the connection filter widget.
void writeSettings()
Writes the configuration settings used.
void setTablesFrozen(bool)
Sets if the tables are frozen.
void readSettings()
Reads the working version settings stored at the settings path.
PointTableModel * m_pointTableModel
Point table model.
void createPointTableView()
Creates the point table and adds it to the widget.
QGroupBox * m_measureTableBox
Measure table box.
void createPointTreeView()
Creates the point tree view and adds it to the model.
QSplitter * m_mainSplitter
Splitter.
void handlePointTableFilterCountsChanged(int visibleRows, int totalRows)
Handles point table filter changes.
MeasureTableModel * m_measureTableModel
Measure table model.
void handleTableFilterCountsChanged(int visibleRows, int totalRows, QGroupBox *box, QString initialText)
Handles any table filter changes.
void upgradeVersion()
Upgrades the working version number.
int measureTableSortLimit() const
Returns the sorting limit for the measure table.
QScrollArea * m_filterArea
Scroll area for filters.
void setPointTableSortingEnabled(bool enabled)
Sets if the point table can be sorted.
CnetEditorSortConfigDialog * m_sortDialog
Sorting dialog.
QWidget * m_pointFilterWidget
Point filter widget.
TableView * pointTableView()
Returns the point table view.
void nullify()
Sets all member variables to NULL.
QBoxLayout * createMainLayout()
Creates the layout of the widget.
void createFilterArea()
Creates filter widgets.
QMap< QAction *, QList< QString > > * m_menuActions
QMap of menu actions.
void createActions()
Creates the menus, and options for the widget.
QMap< QAction *, QList< QString > > menuActions()
Returns the menu actions.
TableView * measureTableView()
Returns the measure table view.
TreeView * m_pointTreeView
Point tree view.
void setMeasureTableSortingEnabled(bool enabled)
Sets if the measure table can be sorted.
QWidget * serialTreeView()
Returns the serial tree view.
TableView * m_pointTableView
Point table view.
QWidget * pointTreeView()
Returns the point tree view.
QWidget * m_serialFilterWidget
Serial filter widget.
QString * m_workingVersion
Working version.
bool measureTableSortingEnabled() const
Returns true if the measure table can be sorted.
void configSorting()
Configures the sorting dialog.
ImageImageTreeModel * m_connectionModel
Connection tree model.
bool pointTableSortingEnabled() const
Returns true if the point table can be sorted.
void measureColToggled()
Toggles the measure column.
TableView * m_measureTableView
Measure table view.
QWidget * pointFilterWidget()
Returns the point filter widget.
PointMeasureTreeModel * m_pointModel
Point tree model.
ImagePointTreeModel * m_imageModel
Image tree model.
QMap< QString, QList< QAction * > > * m_toolBarActions
QMap of tool bar actions.
ControlNet * controlNet()
Open and return a pointer to the ControlNet for this Control.
Definition Control.cpp:150
void setModified(bool modified=true)
@description Sets the modification state of this control.
Definition Control.cpp:241
a control measurement
a control network
Definition ControlNet.h:258
A single control point.
Status SetEditLock(bool editLock)
Set the EditLock state.
File name manipulation and expansion.
Definition FileName.h:100
This widget contains filtering capabilities for a single filter type.
Isis exception class.
Definition IException.h:91
Tree model for images and images.
Tree model for images and control points.
Table model for control measures.
Tree model for control points and control measures.
Table model for control points.
TableViewHeader * getHorizontalHeader()
Returns the horizontal header.
void setColumnVisible(QString, bool)
Sets the specified column visible or invisible.
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16