1 #include "QnetNavTool.h"
4 #include <QApplication>
10 #include <QListWidget>
11 #include <QListWidgetItem>
12 #include <QMessageBox>
13 #include <QPushButton>
14 #include <QScrollArea>
16 #include <QStackedWidget>
19 #include <QVBoxLayout>
22 #include "QnetCubeDistanceFilter.h"
23 #include "QnetCubeNameFilter.h"
24 #include "QnetCubePointsFilter.h"
25 #include "QnetPointCubeNameFilter.h"
26 #include "QnetPointDistanceFilter.h"
27 #include "QnetPointJigsawErrorFilter.h"
28 #include "QnetPointRegistrationErrorFilter.h"
29 #include "QnetPointGoodnessFilter.h"
30 #include "QnetPointIdFilter.h"
31 #include "QnetPointImagesFilter.h"
32 #include "QnetPointMeasureFilter.h"
33 #include "QnetPointRangeFilter.h"
34 #include "QnetPointTypeFilter.h"
35 #include "QnetSetAprioriDialog.h"
40 #include "ControlMeasure.h"
41 #include "ControlNet.h"
42 #include "ControlPoint.h"
45 #include "IException.h"
47 #include "Longitude.h"
48 #include "SerialNumberList.h"
49 #include "SpecialPixel.h"
50 #include "SurfacePoint.h"
77 m_filterCountLabel = NULL;
78 m_aprioriDialog = NULL;
79 m_qnetTool = qnetTool;
83 connect(
this, SIGNAL(deletedPoints()),
this, SLOT(
refreshList()));
84 connect(
this, SIGNAL( activityUpdate(QString) ),
103 m_listCombo->addItem(
"Points");
104 m_listCombo->addItem(
"Cubes");
106 m_listBox =
new QListWidget();
107 m_listBox->setSelectionMode(QAbstractItemView::ExtendedSelection);
110 QLabel *filterLabel =
new QLabel(
"Filters");
111 filterLabel->setAlignment(Qt::AlignHCenter);
112 m_filterStack =
new QStackedWidget();
114 connect(m_listCombo, SIGNAL(activated(
int)),
115 m_filterStack, SLOT(setCurrentIndex(
int)));
116 connect(m_listCombo, SIGNAL(activated(
int)),
118 connect(m_listCombo, SIGNAL(activated(
int)),
122 m_filterCountLabel =
new QLabel(
"Filter Count: ");
125 QPushButton *
load =
new QPushButton(
"&View Cube(s)");
126 load->setAutoDefault(
false);
127 load->setToolTip(
"Open Selected Images");
128 load->setWhatsThis(
"<b>Function: </b> Opens all selected images, or images \
129 that are associated with the given point or overlap. \
130 <p><b>Hint: </b> You can select more than one item in \
131 the list by using the shift or control key.</p>");
132 connect(
load, SIGNAL(clicked()),
134 m_tie =
new QPushButton(
"&Modify Point");
135 m_tie->setAutoDefault(
true);
136 m_tie->setToolTip(
"Modify Selected Point");
137 m_tie->setWhatsThis(
"<b>Function: </b> Opens the tie tool to modify the \
138 selected point from the list. This option is only \
139 available when the nav tool is in point mode");
140 connect(m_tie, SIGNAL(clicked()),
143 m_multiIgnore =
new QPushButton(
"&Ignore Points");
144 m_multiIgnore->setAutoDefault(
false);
145 m_multiIgnore->setToolTip(
"Set selected points to Ignore");
146 m_multiIgnore->setWhatsThis(
"<b>Function: </b> Sets the selected points \
147 Ignore = True. You will not be able to preview \
148 in the Point Editor before their Ignore switch \
150 <p><b>Hint: </b> You can select more than one \
151 item in the list by using the shift or control \
153 connect(m_multiIgnore, SIGNAL(clicked()),
156 m_multiDelete =
new QPushButton(
"&Delete Points");
157 m_multiDelete->setAutoDefault(
false);
158 m_multiIgnore->setToolTip(
"Set selected points to Delete");
159 m_multiIgnore->setWhatsThis(
"<b>Function: </b> Delete the selected points \
160 from control network. You will not be able to \
161 preview in the Point Editor before they are \
163 <p><b>Hint: </b> You can select more than one \
164 item in the list by using the shift or control \
166 connect(m_multiDelete, SIGNAL(clicked()),
169 m_setApriori =
new QPushButton(
"&Set Apriori/Sigmas");
170 m_setApriori->setAutoDefault(
false);
171 m_setApriori->setToolTip(
"Set selected points apriori/sigmas");
172 m_setApriori->setWhatsThis(
"<b>Function: </b> Set the apriori points \
174 <p><b>Hint: </b> You can select more than one \
175 item in the list by using the shift or control \
177 connect(m_setApriori, SIGNAL(clicked()),
this, SLOT(
aprioriDialog()));
179 m_filter =
new QPushButton(
"&Filter");
180 m_filter->setAutoDefault(
false);
181 m_filter->setToolTip(
"Filter Current List");
182 m_filter->setWhatsThis(
"<b>Function: </b> Filters the current list by user \
183 specifications made in the selected filter. \
184 <p><b>Note: </b> Any filter options selected in a \
185 filter that is not showing will be ignored.</p>");
186 connect(m_filter, SIGNAL(clicked()),
189 QPushButton *reset =
new QPushButton(
"&Show All");
190 reset->setAutoDefault(
false);
191 reset->setToolTip(
"Reset the Current List to show all the values in the list");
192 reset->setWhatsThis(
"<b>Function: </b> Resets the list of points, \
193 overlaps, or images to the complete initial list. \
194 Any filtering that has been done will be lost.");
195 connect(reset, SIGNAL(clicked()),
197 connect(reset, SIGNAL(clicked()),
201 QHBoxLayout *layout =
new QHBoxLayout();
202 layout->addWidget(
load);
203 layout->addWidget(m_tie);
204 layout->addWidget(m_multiIgnore);
205 layout->addWidget(m_multiDelete);
206 layout->addWidget(m_setApriori);
207 layout->addWidget(m_filter);
208 layout->addWidget(reset);
212 m_filterStack->adjustSize();
215 m_navDialog =
new QDialog(parent);
216 m_navDialog->setWindowTitle(
"Control Network Navigator");
219 QGridLayout *gridLayout =
new QGridLayout();
220 gridLayout->addWidget(m_listCombo, 0, 0);
221 gridLayout->addWidget(filterLabel, 0, 1);
222 gridLayout->addWidget(m_listBox, 1, 0);
223 gridLayout->addWidget(m_filterStack, 1, 1);
224 gridLayout->addWidget(m_filterCountLabel, 2, 0);
225 gridLayout->addLayout(layout, 3, 0, 1, 2);
226 m_navDialog->setLayout(gridLayout);
228 QString settingsFileName =
229 FileName(
"$HOME/.Isis/" + QApplication::applicationName() +
"/NavTool.config").
expanded();
230 QSettings settings(settingsFileName, QSettings::NativeFormat);
231 m_navDialog->resize(settings.value(
"size").toSize());
235 m_navDialog->setVisible(
true);
237 QPoint defaultPos = parent->pos() +
238 QPoint(parent->size().width() / 2,
239 parent->size().height() / 2);
240 defaultPos -= QPoint(m_navDialog->size().width() / 2,
241 m_navDialog->size().height() / 2);
242 m_navDialog->move(settings.value(
"pos", defaultPos).toPoint());
247 QnetNavTool::~QnetNavTool() {
248 QString settingsFileName =
249 FileName(
"$HOME/.Isis/" + QApplication::applicationName() +
"/NavTool.config").
expanded();
250 QSettings settings(settingsFileName, QSettings::NativeFormat);
252 settings.setValue(
"size", m_navDialog->size());
253 settings.setValue(
"pos", m_navDialog->pos());
282 QTabWidget *pointFilters =
new QTabWidget();
285 connect(jigsawErrorFilter, SIGNAL(filteredListModified()),
287 pointFilters->insertTab(JigsawErrors, jigsawErrorFilter,
"&Jigsaw Errors");
288 pointFilters->setTabToolTip(JigsawErrors,
"Filter Points by Jigsaw Error");
289 pointFilters->setTabWhatsThis(JigsawErrors,
290 "<b>Function: </b> Filter points list by \
291 the bundle adjust error value at each \
292 point. You can filter for points that \
293 have an error greater than, or less than \
294 the entered value.");
297 connect(registrationErrorFilter, SIGNAL(filteredListModified()),
299 pointFilters->insertTab(RegistrationErrors, registrationErrorFilter,
300 "&Registration Errors");
301 pointFilters->setTabToolTip(RegistrationErrors,
302 "Filter Points by Registration Error");
303 pointFilters->setTabWhatsThis(RegistrationErrors,
304 "<b>Function: </b> Filter points list by \
305 the registration pixel shift value at each \
306 point. You can filter for points that \
307 have an error greater than, or less than \
308 the entered value. The maximum for all \
309 measures in the point is used");
312 connect(ptIdFilter, SIGNAL(filteredListModified()),
314 pointFilters->insertTab(Id, ptIdFilter,
"&Point ID");
315 pointFilters->setTabToolTip(Id,
"Filter Points by PointID");
318 connect(ptImageFilter, SIGNAL(filteredListModified()),
320 pointFilters->insertTab(NumberImages, ptImageFilter,
"&Number of Measures");
321 pointFilters->setTabToolTip(NumberImages,
"Filter Points by Number of Images");
322 pointFilters->setTabWhatsThis(NumberImages,
"<b>Function: </b> Filter points list \
323 by the number of images that are in \
324 each point. You can filter for \
325 points that have more than the given \
326 number of images, or less than the \
327 given number of images. Points with \
328 the exact number of images specified \
329 will not be included in the filtered \
332 connect(typeFilter, SIGNAL(filteredListModified()),
334 pointFilters->insertTab(Type, typeFilter,
"Point Properties");
335 pointFilters->setTabToolTip(Type,
"Filter Points by Listed Properties");
336 pointFilters->setTabWhatsThis(Type,
"<b>Function: </b> Filter points list by \
337 their Point Type, Ignore status, or Held status properties");
339 connect(rangeFilter, SIGNAL(filteredListModified()),
341 pointFilters->insertTab(LatLonRange, rangeFilter,
"&Range");
342 pointFilters->setTabToolTip(LatLonRange,
"Filter Points by Range");
343 pointFilters->setTabWhatsThis(LatLonRange,
"<b>Function: </b> Filters out points \
344 that are within a user set range lat/lon \
347 connect(ptDistFilter, SIGNAL(filteredListModified()),
349 pointFilters->insertTab(
Distance, ptDistFilter,
"Dist&ance");
350 pointFilters->setTabToolTip(
Distance,
"Filter Points by Distance");
351 pointFilters->setTabWhatsThis(
Distance,
352 "<b>Function: </b> Filter points list by \
353 a user specified maximum distance from \
356 connect(measureFilter, SIGNAL(filteredListModified()),
358 pointFilters->insertTab(MeasureType, measureFilter,
"Measure Properties");
359 pointFilters->setTabToolTip(MeasureType,
"Filter Points by Listed Measure Properties");
360 pointFilters->setTabWhatsThis(MeasureType,
361 "<b>Function: </b> Filter points list by \
362 the properties of their measures. User may \
363 filter by Measure Type or Ignore status. \
364 If one or more measure from a point is found to \
365 match a selected measure type, and that measure \
366 satisfies the ignore status selected, the point \
367 will be left in the filtered list. More \
368 than one measure type can be selected. \
369 Only one Ignore status may be selected.");
372 connect(goodnessFilter, SIGNAL(filteredListModified()),
374 pointFilters->insertTab(GoodnessOfFit, goodnessFilter,
"&Goodness of Fit");
375 pointFilters->setTabToolTip(GoodnessOfFit,
"Filter Points by the Goodness of Fit of its measures");
376 pointFilters->setTabWhatsThis(GoodnessOfFit,
377 "<b>Function: </b> Filter points list by \
378 the goodness of fit.");
380 connect(cubeNamesFilter, SIGNAL(filteredListModified()),
382 connect(
this, SIGNAL(serialListModified()),
383 cubeNamesFilter, SLOT(createCubeList()));
385 pointFilters->insertTab(CubeName, cubeNamesFilter,
"&Cube Name(s)");
386 pointFilters->setTabToolTip(CubeName,
"Filter Points by Cube FileName(s)");
387 pointFilters->setTabWhatsThis(CubeName,
388 "<b>Function: </b> Filter points list by \
389 the filenames of cubes. This filter will \
390 show all points contained in a single \
391 image or all points contained in every \
394 QTabWidget *cubeFilters =
new QTabWidget();
397 connect(cubeNameFilter, SIGNAL(filteredListModified()),
399 cubeFilters->insertTab(Name, cubeNameFilter,
"&Cube Name");
400 cubeFilters->setTabToolTip(Name,
"Filter Images by Cube Name");
403 connect(cubePtsFilter, SIGNAL(filteredListModified()),
405 cubeFilters->insertTab(NumberPoints, cubePtsFilter,
"&Number of Points");
406 cubeFilters->setTabToolTip(NumberPoints,
"Filter Images by Number of Points");
407 cubeFilters->setTabWhatsThis(NumberPoints,
408 "<b>Function: </b> Filter images list by \
409 the number of points that are in each \
410 image. You can filter for images that have \
411 more than the given number of points, or \
412 less than the given number of point. \
413 Images with the exact number of points \
414 specified will not be included in the \
417 connect(cubeDistFilter, SIGNAL(filteredListModified()),
419 cubeFilters->insertTab(PointDistance, cubeDistFilter,
"Dist&ance");
420 cubeFilters->setTabToolTip(PointDistance,
"Filter Images by Distance between Points");
421 cubeFilters->setTabWhatsThis(PointDistance,
422 "<b>Function: </b> Filter images list by \
423 a user specified distance between points \
424 in the image. This may be calculated in \
425 meters or by pixel distance.");
428 m_filterStack->addWidget(pointFilters);
429 m_filterStack->addWidget(cubeFilters);
433 QScrollArea *scrollArea =
new QScrollArea();
438 QVBoxLayout *innerLayout =
new QVBoxLayout();
439 QLabel *title =
new QLabel(
"<b>History</b>");
440 innerLayout->addWidget(title);
441 innerLayout->addWidget(scrollArea);
443 m_historyLayout =
new QVBoxLayout(scrollArea);
444 m_historyLayout->setAlignment(Qt::AlignTop);
446 innerWidget->setLayout(innerLayout);
447 historyWidget->setLayout(m_historyLayout);
448 scrollArea->setWidget(historyWidget);
449 scrollArea->setWidgetResizable(
true);
451 pointFilters->addTab(innerWidget, QString(
"&Activity History") );
457 return m_filteredImages;
461 const QList<int> &QnetNavTool::filteredImages()
const {
462 return m_filteredImages;
467 return m_filteredPoints;
471 const QList<int> &QnetNavTool::filteredPoints()
const {
472 return m_filteredPoints;
476 ControlNet *QnetNavTool::controlNet() {
477 return m_qnetTool->controlNet();
481 const ControlNet *QnetNavTool::controlNet()
const {
482 return m_qnetTool->controlNet();
486 SerialNumberList *QnetNavTool::serialNumberList() {
487 return m_qnetTool->serialNumberList();
491 const SerialNumberList *QnetNavTool::serialNumberList()
const {
492 return m_qnetTool->serialNumberList();
520 if (m_qnetTool->serialNumberList() == NULL)
524 m_listBox->setCurrentRow(-1);
526 m_filteredPoints.clear();
527 m_filteredImages.clear();
531 m_filteredPoints.reserve(numCp);
532 for (
int i = 0; i < numCp; i++) {
533 m_filteredPoints.push_back(i);
536 int numSns = m_qnetTool->serialNumberList()->
size();
537 m_filteredImages.reserve(numSns);
538 for (
int i = 0; i < numSns; i++) {
539 m_filteredImages.push_back(i);
543 if (m_listCombo->currentIndex() == Points) {
545 disconnect(m_listBox, SIGNAL(itemDoubleClicked(QListWidgetItem *)),
546 this, SLOT(
load(QListWidgetItem *)));
547 connect(m_listBox, SIGNAL(itemDoubleClicked(QListWidgetItem *)),
548 this, SLOT(
editPoint(QListWidgetItem *)), Qt::UniqueConnection);
550 for (
int i = 0; i < controlNet()->
GetNumPoints(); i++) {
551 QString cNetId = (*controlNet())[i]->GetId();
552 QString itemString = cNetId;
553 m_listBox->insertItem(i, itemString);
554 int images = (*controlNet())[i]->GetNumMeasures();
555 m_listBox->item(i)->setToolTip(QString::number(images) +
" image(s) in point");
560 QString msg =
"Filter Count: " + QString::number(m_listBox->count()) +
561 " / " + QString::number(controlNet()->GetNumPoints());
562 m_filterCountLabel->setText(msg);
565 else if (m_listCombo->currentIndex() == Cubes) {
566 disconnect(m_listBox, SIGNAL(itemDoubleClicked(QListWidgetItem *)),
567 this, SLOT(
editPoint(QListWidgetItem *)));
568 connect(m_listBox, SIGNAL(itemDoubleClicked(QListWidgetItem *)),
569 this, SLOT(
load(QListWidgetItem *)), Qt::UniqueConnection);
571 for (
int i = 0; i < serialNumberList()->
size(); i++) {
573 QString tempFileName = filename.
name();
574 m_listBox->insertItem(i, tempFileName);
576 QString msg =
"Filter Count: " + QString::number(m_listBox->count()) +
577 " / " + QString::number(serialNumberList()->size());
578 m_filterCountLabel->setText(msg);
597 m_editPointId = pointId;
602 if (items.isEmpty()) {
603 m_listBox->clearSelection();
606 m_listBox->setCurrentItem(items.at(0));
608 QString activityMessage(
"Point selected: " + pointId);
609 emit(activityUpdate(activityMessage));
623 if (m_historyLayout->count() > 0) {
624 QWidget *firstEntry = m_historyLayout->layout()->itemAt(0)->widget();
625 QLabel *firstLabel =
dynamic_cast<QLabel*
>(firstEntry);
626 if (firstLabel->text() == activityMessage) {
631 QLabel *historyEntry =
new QLabel(activityMessage);
632 m_historyLayout->insertWidget(0, historyEntry);
671 if (serialNumberList() == NULL)
675 m_listBox->setCurrentRow(-1);
679 if (m_listCombo->currentIndex() == Points) {
680 disconnect(m_listBox, SIGNAL(itemDoubleClicked(QListWidgetItem *)),
681 this, SLOT(
load(QListWidgetItem *)));
682 connect(m_listBox, SIGNAL(itemDoubleClicked(QListWidgetItem *)),
683 this, SLOT(
editPoint(QListWidgetItem *)), Qt::UniqueConnection);
685 for (
int i = 0; i < m_filteredPoints.size(); i++) {
686 QString cNetId = (*controlNet())[m_filteredPoints[i]]->GetId();
687 QString itemString = cNetId;
688 m_listBox->insertItem(i, itemString);
689 int images = (*controlNet())[m_filteredPoints[i]]->GetNumMeasures();
690 m_listBox->item(i)->setToolTip(QString::number(images) +
" image(s) in point");
692 QString msg =
"Filter Count: " + QString::number(m_listBox->count()) +
693 " / " + QString::number(controlNet()->GetNumPoints());
694 m_filterCountLabel->setText(msg);
698 else if (m_listCombo->currentIndex() == Cubes) {
699 disconnect(m_listBox, SIGNAL(itemDoubleClicked(QListWidgetItem *)),
700 this, SLOT(
editPoint(QListWidgetItem *)));
701 connect(m_listBox, SIGNAL(itemDoubleClicked(QListWidgetItem *)),
702 this, SLOT(
load(QListWidgetItem *)), Qt::UniqueConnection);
703 for (
int i = 0; i < m_filteredImages.size(); i++) {
704 FileName filename =
FileName(serialNumberList()->fileName(m_filteredImages[i]));
705 QString tempFileName = filename.
name();
706 m_listBox->insertItem(i, tempFileName);
708 QString msg =
"Filter Count: " + QString::number(m_listBox->count()) +
709 " / " + QString::number(serialNumberList()->size());
710 m_filterCountLabel->setText(msg);
734 if (serialNumberList() == NULL)
740 if (selected.size() < 1) {
741 QMessageBox::information((
QWidget *)parent(),
742 "Error",
"No file selected to load.");
746 QApplication::setOverrideCursor(Qt::WaitCursor);
747 for (
int i = 0; i < selected.size(); i++) {
748 int index = m_listBox->row(selected[i]);
750 if (m_listCombo->currentIndex() == Points) {
751 if (m_filteredPoints.size() == 0) {
752 emit loadPointImages((*controlNet())[index]);
755 emit loadPointImages((*controlNet())[m_filteredPoints[index]]);
759 else if (m_listCombo->currentIndex() == Cubes) {
760 if (m_filteredImages.size() == 0) {
761 QString serialNumber = (*serialNumberList()).serialNumber(index);
762 QString sn = serialNumber;
766 QString serialNumber = (*serialNumberList()).serialNumber(m_filteredImages[index]);
767 QString sn = serialNumber;
772 QApplication::restoreOverrideCursor();
799 int index = m_listBox->row(ptItem);
800 if (m_filteredPoints.size() == 0) {
801 emit modifyPoint((*controlNet())[index]);
804 emit modifyPoint((*controlNet())[m_filteredPoints[index]]);
819 if (selected.size() > 1) {
820 QMessageBox::information((
QWidget *)parent(),
821 "Error",
"Only one point can be modified at a time");
824 else if (selected.size() < 1) {
825 QMessageBox::information((
QWidget *)parent(),
826 "Error",
"No point selected to modify.");
829 int index = m_listBox->row(selected[0]);
830 if (m_filteredPoints.size() == 0) {
831 emit modifyPoint((*controlNet())[index]);
834 emit modifyPoint((*controlNet())[m_filteredPoints[index]]);
851 if (serialNumberList() == NULL)
return;
853 int index = m_listBox->currentRow();
855 QApplication::restoreOverrideCursor();
856 QMessageBox::information((
QWidget *)parent(),
857 "Error",
"No point selected to ignore");
861 switch (QMessageBox::question((
QWidget *)parent(),
862 "Control Network Navigator - Ignore Points",
863 "You have chosen to set "
864 + QString::number(selected.size())
865 +
" point(s) to ignore. Do you want to continue?",
866 "&Yes",
"&No", 0, 0)) {
868 QApplication::setOverrideCursor(Qt::WaitCursor);
869 int lockedPoints = 0;
870 for (
int i = 0; i < selected.size(); i++) {
871 int index = m_listBox->row(selected[i]);
872 if (m_filteredPoints.size() == 0) {
873 if ((*controlNet())[index]->SetIgnored(
true) ==
877 if ((*controlNet())[m_filteredPoints[index]]->SetIgnored(
true)
880 emit pointChanged((*controlNet())[m_filteredPoints[index]]->GetId());
883 if (lockedPoints > 0) {
884 QMessageBox::information((
QWidget *)parent(),
"EditLocked Points",
885 QString::number(lockedPoints) +
" / "
886 + QString::number(selected.size())
887 +
" points are EditLocked and were not set to Ignored.");
889 QApplication::restoreOverrideCursor();
890 if (lockedPoints != selected.size()) emit netChanged();
920 if (serialNumberList() == NULL)
925 if (selected.size() < 1) {
926 QApplication::restoreOverrideCursor();
927 QMessageBox::information((
QWidget *)parent(),
928 "Error",
"No point selected to delete");
931 switch (QMessageBox::question((
QWidget *)parent(),
932 "Control Network Navigator - Delete Points",
933 "You have chosen to delete "
934 + QString::number(selected.size())
935 +
" point(s). Do you want to continue?",
936 "&Yes",
"&No", 0, 0)) {
940 #if 0 // If resetting filtered list, then re-filtering too slow, try code below
944 vector<int> deletedRows;
948 int deletedSoFar = 0;
950 for (
int i = 0; i < g_filteredPoints.size(); i++) {
951 if (m_listBox->item(i)->isSelected() {
952 QString id = m_listBox->item(i)->text();
953 if (g_controlNetwork->DeletePoint(id) == ControlPoint::PointLocked) {
959 int lockedPoints = 0;
960 for (
int i = 0; i < selected.size(); i++) {
961 QString
id = selected.at(i)->text();
968 if (lockedPoints > 0) {
969 QMessageBox::information((
QWidget *)parent(),
"EditLocked Points",
970 QString::number(lockedPoints) +
" / "
971 + QString::number(selected.size())
972 +
" points are EditLocked and were not deleted.");
978 m_filteredPoints.clear();
980 for (
int i = 0; i < controlNet()->
GetNumPoints(); i++) {
981 m_filteredPoints.push_back(i);
983 emit deletedPoints();
1006 void QnetNavTool::aprioriDialog() {
1008 if (serialNumberList() == NULL)
1011 if (!m_aprioriDialog) {
1013 setAprioriDialogPoints();
1014 connect(m_listBox, SIGNAL(itemSelectionChanged()),
1015 this, SLOT(setAprioriDialogPoints()));
1016 connect(m_aprioriDialog, SIGNAL(pointChanged(QString)),
1017 this, SIGNAL(pointChanged(QString)));
1018 connect(m_aprioriDialog, SIGNAL(netChanged()),
1019 this, SIGNAL(netChanged()));
1020 connect(m_aprioriDialog, SIGNAL(aprioriDialogClosed()),
1021 this, SLOT(disconnectAprioriDialog()));
1023 m_aprioriDialog->setVisiblity();
1034 void QnetNavTool::setAprioriDialogPoints() {
1036 if (m_aprioriDialog == NULL)
return;
1039 if (m_listCombo->currentIndex() == Cubes)
return;
1041 int index = m_listBox->currentRow();
1042 if (index < 0)
return;
1045 m_aprioriDialog->setPoints(selected);
1057 void QnetNavTool::disconnectAprioriDialog() {
1058 if (m_aprioriDialog) {
1059 disconnect(m_listBox, SIGNAL(itemSelectionChanged()),
1060 this, SLOT(setAprioriDialogPoints()));
1061 disconnect(m_aprioriDialog, 0, 0, 0);
1062 m_aprioriDialog = NULL;
1088 void QnetNavTool::filter() {
1091 QApplication::setOverrideCursor(Qt::WaitCursor);
1092 m_filter->setEnabled(
false);
1094 QTabWidget *tab = (QTabWidget *)(m_filterStack->currentWidget());
1097 if (m_listCombo->currentIndex() == Points) {
1098 PointFilterIndex pointIndex = (PointFilterIndex) tab->currentIndex();
1100 if (pointIndex == JigsawErrors) {
1106 if (pointIndex == RegistrationErrors) {
1112 else if (pointIndex == Id) {
1118 else if (pointIndex == NumberImages) {
1124 else if (pointIndex == Type) {
1130 else if (pointIndex == LatLonRange) {
1142 else if (pointIndex == MeasureType) {
1148 else if(pointIndex == GoodnessOfFit) {
1154 else if (pointIndex == CubeName) {
1162 else if (m_listCombo->currentIndex() == Cubes) {
1163 CubeFilterIndex cubeIndex = (CubeFilterIndex) tab->currentIndex();
1165 if (cubeIndex == Name) {
1171 else if (cubeIndex == NumberPoints) {
1177 else if (cubeIndex == PointDistance) {
1183 m_filter->setEnabled(
true);
1184 QApplication::restoreOverrideCursor();
1195 void QnetNavTool::enableButtons() {
1196 if (m_listCombo->currentIndex() == Points) {
1197 m_tie->setEnabled(
true);
1198 m_multiIgnore->setEnabled(
true);
1199 m_multiDelete->setEnabled(
true);
1200 m_setApriori->setEnabled(
true);
1203 m_tie->setEnabled(
false);
1204 m_multiIgnore->setEnabled(
false);
1205 m_multiDelete->setEnabled(
false);
1206 m_setApriori->setEnabled(
false);
1207 if (m_aprioriDialog != NULL) {
1208 m_aprioriDialog->close();
1222 void QnetNavTool::resetCubeList() {
1223 emit serialListModified();
1233 void QnetNavTool::showNavTool() {
1234 m_navDialog->setVisible(
true);
1241 void QnetNavTool::listLockedPoints() {
1244 lockDialog.setWindowTitle(
"Un-lock Points");
1245 lockDialog.setModal(
true);
1247 QListWidget editLockPointsListBox =
new QListWidget(lockDialog);
1248 connect(editLockPointsListBox, SIGNAL(itemChanged(QListWidgetItem *)),
1249 this, SLOT(unlockPoint(QListWidgetItem *)));
1255 for (
int i=0; i<selected.size(); i++) {
1256 QString
id = selected.at(i)->text();
1258 if (pt->IsEditLocked()) {
1259 QListWidgetItem *item =
new QListWidgetItem(*(selected[i]));
1260 item->setCheckState(Qt::Checked);
1261 editLockPointsListBox->addItem(item);
1265 if (lockDialog.exec()) {
1271 switch (QMessageBox::question((
QWidget *)parent(),
1272 "Control Network Navigator - Ignore Points",
1273 "You have chosen to set "
1274 + QString::number(selected.size())
1275 +
" point(s) to ignore. Do you want to continue?",
1276 "&Yes",
"&No", 0, 0)) {
1278 QApplication::setOverrideCursor(Qt::WaitCursor);
1279 emit pointChanged((*g_controlNetwork)[g_filteredPoints[index]]->GetId());
1285 void QnetNavTool::unlockPoint(QListWidgetItem *pointId) {
1286 ControlPoint *pt = g_controlNetwork->GetPoint(pointId->text());
1287 if (pt->IsEditLocked() && pointId->checkState() == Qt::Unchecked) {
1289 editLockPointsListBox->removeItemWidget(pointId);
1290 pointId->setHidden(
true);
1291 editLockPointsListBox->repaint();