4 #include <QApplication>
10 #include <QListWidget>
11 #include <QListWidgetItem>
12 #include <QMessageBox>
13 #include <QPushButton>
15 #include <QStackedWidget>
20 #include "QnetCubeDistanceFilter.h"
21 #include "QnetCubeNameFilter.h"
22 #include "QnetCubePointsFilter.h"
24 #include "QnetPointDistanceFilter.h"
27 #include "QnetPointGoodnessFilter.h"
28 #include "QnetPointIdFilter.h"
29 #include "QnetPointImagesFilter.h"
30 #include "QnetPointMeasureFilter.h"
31 #include "QnetPointRangeFilter.h"
32 #include "QnetPointTypeFilter.h"
33 #include "QnetSetAprioriDialog.h"
75 m_filterCountLabel = NULL;
76 m_aprioriDialog = NULL;
77 m_qnetTool = qnetTool;
81 connect(
this, SIGNAL(deletedPoints()),
this, SLOT(
refreshList()));
99 m_listCombo->addItem(
"Points");
100 m_listCombo->addItem(
"Cubes");
102 m_listBox =
new QListWidget();
103 m_listBox->setSelectionMode(QAbstractItemView::ExtendedSelection);
106 QLabel *filterLabel =
new QLabel(
"Filters");
107 filterLabel->setAlignment(Qt::AlignHCenter);
108 m_filterStack =
new QStackedWidget();
110 connect(m_listCombo, SIGNAL(activated(
int)),
111 m_filterStack, SLOT(setCurrentIndex(
int)));
112 connect(m_listCombo, SIGNAL(activated(
int)),
114 connect(m_listCombo, SIGNAL(activated(
int)),
118 m_filterCountLabel =
new QLabel(
"Filter Count: ");
121 QPushButton *
load =
new QPushButton(
"&View Cube(s)");
122 load->setAutoDefault(
false);
123 load->setToolTip(
"Open Selected Images");
124 load->setWhatsThis(
"<b>Function: </b> Opens all selected images, or images \
125 that are associated with the given point or overlap. \
126 <p><b>Hint: </b> You can select more than one item in \
127 the list by using the shift or control key.</p>");
128 connect(load, SIGNAL(clicked()),
130 m_tie =
new QPushButton(
"&Modify Point");
131 m_tie->setAutoDefault(
true);
132 m_tie->setToolTip(
"Modify Selected Point");
133 m_tie->setWhatsThis(
"<b>Function: </b> Opens the tie tool to modify the \
134 selected point from the list. This option is only \
135 available when the nav tool is in point mode");
136 connect(m_tie, SIGNAL(clicked()),
139 m_multiIgnore =
new QPushButton(
"&Ignore Points");
140 m_multiIgnore->setAutoDefault(
false);
141 m_multiIgnore->setToolTip(
"Set selected points to Ignore");
142 m_multiIgnore->setWhatsThis(
"<b>Function: </b> Sets the selected points \
143 Ignore = True. You will not be able to preview \
144 in the Point Editor before their Ignore switch \
146 <p><b>Hint: </b> You can select more than one \
147 item in the list by using the shift or control \
149 connect(m_multiIgnore, SIGNAL(clicked()),
152 m_multiDelete =
new QPushButton(
"&Delete Points");
153 m_multiDelete->setAutoDefault(
false);
154 m_multiIgnore->setToolTip(
"Set selected points to Delete");
155 m_multiIgnore->setWhatsThis(
"<b>Function: </b> Delete the selected points \
156 from control network. You will not be able to \
157 preview in the Point Editor before they are \
159 <p><b>Hint: </b> You can select more than one \
160 item in the list by using the shift or control \
162 connect(m_multiDelete, SIGNAL(clicked()),
165 m_setApriori =
new QPushButton(
"&Set Apriori/Sigmas");
166 m_setApriori->setAutoDefault(
false);
167 m_setApriori->setToolTip(
"Set selected points apriori/sigmas");
168 m_setApriori->setWhatsThis(
"<b>Function: </b> Set the apriori points \
170 <p><b>Hint: </b> You can select more than one \
171 item in the list by using the shift or control \
173 connect(m_setApriori, SIGNAL(clicked()),
this, SLOT(
aprioriDialog()));
175 m_filter =
new QPushButton(
"&Filter");
176 m_filter->setAutoDefault(
false);
177 m_filter->setToolTip(
"Filter Current List");
178 m_filter->setWhatsThis(
"<b>Function: </b> Filters the current list by user \
179 specifications made in the selected filter. \
180 <p><b>Note: </b> Any filter options selected in a \
181 filter that is not showing will be ignored.</p>");
182 connect(m_filter, SIGNAL(clicked()),
185 QPushButton *reset =
new QPushButton(
"&Show All");
186 reset->setAutoDefault(
false);
187 reset->setToolTip(
"Reset the Current List to show all the values in the list");
188 reset->setWhatsThis(
"<b>Function: </b> Resets the list of points, \
189 overlaps, or images to the complete initial list. \
190 Any filtering that has been done will be lost.");
191 connect(reset, SIGNAL(clicked()),
193 connect(reset, SIGNAL(clicked()),
197 QHBoxLayout *layout =
new QHBoxLayout();
198 layout->addWidget(load);
199 layout->addWidget(m_tie);
200 layout->addWidget(m_multiIgnore);
201 layout->addWidget(m_multiDelete);
202 layout->addWidget(m_setApriori);
203 layout->addWidget(m_filter);
204 layout->addWidget(reset);
208 m_filterStack->adjustSize();
211 m_navDialog =
new QDialog(parent);
212 m_navDialog->setWindowTitle(
"Control Network Navigator");
215 QGridLayout *gridLayout =
new QGridLayout();
216 gridLayout->addWidget(m_listCombo, 0, 0);
217 gridLayout->addWidget(filterLabel, 0, 1);
218 gridLayout->addWidget(m_listBox, 1, 0);
219 gridLayout->addWidget(m_filterStack, 1, 1);
220 gridLayout->addWidget(m_filterCountLabel, 2, 0);
221 gridLayout->addLayout(layout, 3, 0, 1, 2);
222 m_navDialog->setLayout(gridLayout);
224 QString settingsFileName =
225 FileName(
"$HOME/.Isis/" + QApplication::applicationName() +
"/NavTool.config").expanded();
226 QSettings settings(settingsFileName, QSettings::NativeFormat);
227 m_navDialog->resize(settings.value(
"size").toSize());
231 m_navDialog->setVisible(
true);
233 QPoint defaultPos = parent->pos() +
234 QPoint(parent->size().width() / 2,
235 parent->size().height() / 2);
236 defaultPos -= QPoint(m_navDialog->size().width() / 2,
237 m_navDialog->size().height() / 2);
238 m_navDialog->move(settings.value(
"pos", defaultPos).toPoint());
243 QnetNavTool::~QnetNavTool() {
244 QString settingsFileName =
245 FileName(
"$HOME/.Isis/" + QApplication::applicationName() +
"/NavTool.config").expanded();
246 QSettings settings(settingsFileName, QSettings::NativeFormat);
248 settings.setValue(
"size", m_navDialog->size());
249 settings.setValue(
"pos", m_navDialog->pos());
274 QTabWidget *pointFilters =
new QTabWidget();
277 connect(jigsawErrorFilter, SIGNAL(filteredListModified()),
279 pointFilters->insertTab(JigsawErrors, jigsawErrorFilter,
"&Jigsaw Errors");
280 pointFilters->setTabToolTip(JigsawErrors,
"Filter Points by Jigsaw Error");
281 pointFilters->setTabWhatsThis(JigsawErrors,
282 "<b>Function: </b> Filter points list by \
283 the bundle adjust error value at each \
284 point. You can filter for points that \
285 have an error greater than, or less than \
286 the entered value.");
289 connect(registrationErrorFilter, SIGNAL(filteredListModified()),
291 pointFilters->insertTab(RegistrationErrors, registrationErrorFilter,
292 "&Registration Errors");
293 pointFilters->setTabToolTip(RegistrationErrors,
294 "Filter Points by Registration Error");
295 pointFilters->setTabWhatsThis(RegistrationErrors,
296 "<b>Function: </b> Filter points list by \
297 the registration pixel shift value at each \
298 point. You can filter for points that \
299 have an error greater than, or less than \
300 the entered value. The maximum for all \
301 measures in the point is used");
304 connect(ptIdFilter, SIGNAL(filteredListModified()),
306 pointFilters->insertTab(Id, ptIdFilter,
"&Point ID");
307 pointFilters->setTabToolTip(Id,
"Filter Points by PointID");
310 connect(ptImageFilter, SIGNAL(filteredListModified()),
312 pointFilters->insertTab(NumberImages, ptImageFilter,
"&Number of Measures");
313 pointFilters->setTabToolTip(NumberImages,
"Filter Points by Number of Images");
314 pointFilters->setTabWhatsThis(NumberImages,
"<b>Function: </b> Filter points list \
315 by the number of images that are in \
316 each point. You can filter for \
317 points that have more than the given \
318 number of images, or less than the \
319 given number of images. Points with \
320 the exact number of images specified \
321 will not be included in the filtered \
324 connect(typeFilter, SIGNAL(filteredListModified()),
326 pointFilters->insertTab(Type, typeFilter,
"Point Properties");
327 pointFilters->setTabToolTip(Type,
"Filter Points by Listed Properties");
328 pointFilters->setTabWhatsThis(Type,
"<b>Function: </b> Filter points list by \
329 their Point Type, Ignore status, or Held status properties");
331 connect(rangeFilter, SIGNAL(filteredListModified()),
333 pointFilters->insertTab(LatLonRange, rangeFilter,
"&Range");
334 pointFilters->setTabToolTip(LatLonRange,
"Filter Points by Range");
335 pointFilters->setTabWhatsThis(LatLonRange,
"<b>Function: </b> Filters out points \
336 that are within a user set range lat/lon \
339 connect(ptDistFilter, SIGNAL(filteredListModified()),
341 pointFilters->insertTab(
Distance, ptDistFilter,
"Dist&ance");
342 pointFilters->setTabToolTip(
Distance,
"Filter Points by Distance");
343 pointFilters->setTabWhatsThis(
Distance,
344 "<b>Function: </b> Filter points list by \
345 a user specified maximum distance from \
348 connect(measureFilter, SIGNAL(filteredListModified()),
350 pointFilters->insertTab(MeasureType, measureFilter,
"Measure Properties");
351 pointFilters->setTabToolTip(MeasureType,
"Filter Points by Listed Measure Properties");
352 pointFilters->setTabWhatsThis(MeasureType,
353 "<b>Function: </b> Filter points list by \
354 the properties of their measures. User may \
355 filter by Measure Type or Ignore status. \
356 If one or more measure from a point is found to \
357 match a selected measure type, and that measure \
358 satisfies the ignore status selected, the point \
359 will be left in the filtered list. More \
360 than one measure type can be selected. \
361 Only one Ignore status may be selected.");
364 connect(goodnessFilter, SIGNAL(filteredListModified()),
366 pointFilters->insertTab(GoodnessOfFit, goodnessFilter,
"&Goodness of Fit");
367 pointFilters->setTabToolTip(GoodnessOfFit,
"Filter Points by the Goodness of Fit of its measures");
368 pointFilters->setTabWhatsThis(GoodnessOfFit,
369 "<b>Function: </b> Filter points list by \
370 the goodness of fit.");
372 connect(cubeNamesFilter, SIGNAL(filteredListModified()),
374 connect(
this, SIGNAL(serialListModified()),
375 cubeNamesFilter, SLOT(createCubeList()));
377 pointFilters->insertTab(CubeName, cubeNamesFilter,
"&Cube Name(s)");
378 pointFilters->setTabToolTip(CubeName,
"Filter Points by Cube FileName(s)");
379 pointFilters->setTabWhatsThis(CubeName,
380 "<b>Function: </b> Filter points list by \
381 the filenames of cubes. This filter will \
382 show all points contained in a single \
383 image or all points contained in every \
386 QTabWidget *cubeFilters =
new QTabWidget();
389 connect(cubeNameFilter, SIGNAL(filteredListModified()),
391 cubeFilters->insertTab(Name, cubeNameFilter,
"&Cube Name");
392 cubeFilters->setTabToolTip(Name,
"Filter Images by Cube Name");
395 connect(cubePtsFilter, SIGNAL(filteredListModified()),
397 cubeFilters->insertTab(NumberPoints, cubePtsFilter,
"&Number of Points");
398 cubeFilters->setTabToolTip(NumberPoints,
"Filter Images by Number of Points");
399 cubeFilters->setTabWhatsThis(NumberPoints,
400 "<b>Function: </b> Filter images list by \
401 the number of points that are in each \
402 image. You can filter for images that have \
403 more than the given number of points, or \
404 less than the given number of point. \
405 Images with the exact number of points \
406 specified will not be included in the \
409 connect(cubeDistFilter, SIGNAL(filteredListModified()),
411 cubeFilters->insertTab(PointDistance, cubeDistFilter,
"Dist&ance");
412 cubeFilters->setTabToolTip(PointDistance,
"Filter Images by Distance between Points");
413 cubeFilters->setTabWhatsThis(PointDistance,
414 "<b>Function: </b> Filter images list by \
415 a user specified distance between points \
416 in the image. This may be calculated in \
417 meters or by pixel distance.");
420 m_filterStack->addWidget(pointFilters);
421 m_filterStack->addWidget(cubeFilters);
426 return m_filteredImages;
430 const QList<int> &QnetNavTool::filteredImages()
const {
431 return m_filteredImages;
436 return m_filteredPoints;
440 const QList<int> &QnetNavTool::filteredPoints()
const {
441 return m_filteredPoints;
445 ControlNet *QnetNavTool::controlNet() {
446 return m_qnetTool->controlNet();
450 const ControlNet *QnetNavTool::controlNet()
const {
451 return m_qnetTool->controlNet();
455 SerialNumberList *QnetNavTool::serialNumberList() {
456 return m_qnetTool->serialNumberList();
460 const SerialNumberList *QnetNavTool::serialNumberList()
const {
461 return m_qnetTool->serialNumberList();
489 if (m_qnetTool->serialNumberList() == NULL)
493 m_listBox->setCurrentRow(-1);
495 m_filteredPoints.clear();
496 m_filteredImages.clear();
500 m_filteredPoints.reserve(numCp);
501 for (
int i = 0; i < numCp; i++) {
502 m_filteredPoints.push_back(i);
505 int numSns = m_qnetTool->serialNumberList()->
size();
506 m_filteredImages.reserve(numSns);
507 for (
int i = 0; i < numSns; i++) {
508 m_filteredImages.push_back(i);
512 if (m_listCombo->currentIndex() == Points) {
514 disconnect(m_listBox, SIGNAL(itemDoubleClicked(QListWidgetItem *)),
515 this, SLOT(
load(QListWidgetItem *)));
516 connect(m_listBox, SIGNAL(itemDoubleClicked(QListWidgetItem *)),
517 this, SLOT(
editPoint(QListWidgetItem *)), Qt::UniqueConnection);
519 for (
int i = 0; i < controlNet()->
GetNumPoints(); i++) {
520 QString cNetId = (*controlNet())[i]->GetId();
521 QString itemString = cNetId;
522 m_listBox->insertItem(i, itemString);
523 int images = (*controlNet())[i]->GetNumMeasures();
524 m_listBox->item(i)->setToolTip(QString::number(images) +
" image(s) in point");
529 QString msg =
"Filter Count: " + QString::number(m_listBox->count()) +
531 m_filterCountLabel->setText(msg);
534 else if (m_listCombo->currentIndex() == Cubes) {
535 disconnect(m_listBox, SIGNAL(itemDoubleClicked(QListWidgetItem *)),
536 this, SLOT(
editPoint(QListWidgetItem *)));
537 connect(m_listBox, SIGNAL(itemDoubleClicked(QListWidgetItem *)),
538 this, SLOT(
load(QListWidgetItem *)), Qt::UniqueConnection);
540 for (
int i = 0; i < serialNumberList()->
size(); i++) {
542 QString tempFileName = filename.name();
543 m_listBox->insertItem(i, tempFileName);
545 QString msg =
"Filter Count: " + QString::number(m_listBox->count()) +
546 " / " + QString::number(serialNumberList()->
size());
547 m_filterCountLabel->setText(msg);
566 m_editPointId = pointId;
571 if (items.isEmpty()) {
572 m_listBox->clearSelection();
575 m_listBox->setCurrentItem(items.at(0));
618 if (serialNumberList() == NULL)
622 m_listBox->setCurrentRow(-1);
626 if (m_listCombo->currentIndex() == Points) {
627 disconnect(m_listBox, SIGNAL(itemDoubleClicked(QListWidgetItem *)),
628 this, SLOT(
load(QListWidgetItem *)));
629 connect(m_listBox, SIGNAL(itemDoubleClicked(QListWidgetItem *)),
630 this, SLOT(
editPoint(QListWidgetItem *)), Qt::UniqueConnection);
632 for (
int i = 0; i < m_filteredPoints.size(); i++) {
633 QString cNetId = (*controlNet())[m_filteredPoints[i]]->GetId();
634 QString itemString = cNetId;
635 m_listBox->insertItem(i, itemString);
636 int images = (*controlNet())[m_filteredPoints[i]]->GetNumMeasures();
637 m_listBox->item(i)->setToolTip(QString::number(images) +
" image(s) in point");
639 QString msg =
"Filter Count: " + QString::number(m_listBox->count()) +
641 m_filterCountLabel->setText(msg);
645 else if (m_listCombo->currentIndex() == Cubes) {
646 disconnect(m_listBox, SIGNAL(itemDoubleClicked(QListWidgetItem *)),
647 this, SLOT(
editPoint(QListWidgetItem *)));
648 connect(m_listBox, SIGNAL(itemDoubleClicked(QListWidgetItem *)),
649 this, SLOT(
load(QListWidgetItem *)), Qt::UniqueConnection);
650 for (
int i = 0; i < m_filteredImages.size(); i++) {
651 FileName filename =
FileName(serialNumberList()->fileName(m_filteredImages[i]));
652 QString tempFileName = filename.name();
653 m_listBox->insertItem(i, tempFileName);
655 QString msg =
"Filter Count: " + QString::number(m_listBox->count()) +
656 " / " + QString::number(serialNumberList()->
size());
657 m_filterCountLabel->setText(msg);
681 if (serialNumberList() == NULL)
687 if (selected.size() < 1) {
688 QMessageBox::information((
QWidget *)parent(),
689 "Error",
"No file selected to load.");
693 QApplication::setOverrideCursor(Qt::WaitCursor);
694 for (
int i = 0; i < selected.size(); i++) {
695 int index = m_listBox->row(selected[i]);
697 if (m_listCombo->currentIndex() == Points) {
698 if (m_filteredPoints.size() == 0) {
699 emit loadPointImages((*controlNet())[index]);
702 emit loadPointImages((*controlNet())[m_filteredPoints[index]]);
706 else if (m_listCombo->currentIndex() == Cubes) {
707 if (m_filteredImages.size() == 0) {
708 QString serialNumber = (*serialNumberList()).serialNumber(index);
709 QString sn = serialNumber;
713 QString serialNumber = (*serialNumberList()).serialNumber(m_filteredImages[index]);
714 QString sn = serialNumber;
719 QApplication::restoreOverrideCursor();
746 int index = m_listBox->row(ptItem);
747 if (m_filteredPoints.size() == 0) {
748 emit modifyPoint((*controlNet())[index]);
751 emit modifyPoint((*controlNet())[m_filteredPoints[index]]);
766 if (selected.size() > 1) {
767 QMessageBox::information((
QWidget *)parent(),
768 "Error",
"Only one point can be modified at a time");
771 else if (selected.size() < 1) {
772 QMessageBox::information((
QWidget *)parent(),
773 "Error",
"No point selected to modify.");
776 int index = m_listBox->row(selected[0]);
777 if (m_filteredPoints.size() == 0) {
778 emit modifyPoint((*controlNet())[index]);
781 emit modifyPoint((*controlNet())[m_filteredPoints[index]]);
798 if (serialNumberList() == NULL)
return;
800 int index = m_listBox->currentRow();
802 QApplication::restoreOverrideCursor();
803 QMessageBox::information((
QWidget *)parent(),
804 "Error",
"No point selected to ignore");
808 switch (QMessageBox::question((
QWidget *)parent(),
809 "Control Network Navigator - Ignore Points",
810 "You have chosen to set "
811 + QString::number(selected.size())
812 +
" point(s) to ignore. Do you want to continue?",
813 "&Yes",
"&No", 0, 0)) {
815 QApplication::setOverrideCursor(Qt::WaitCursor);
816 int lockedPoints = 0;
817 for (
int i = 0; i < selected.size(); i++) {
818 int index = m_listBox->row(selected[i]);
819 if (m_filteredPoints.size() == 0) {
820 if ((*controlNet())[index]->SetIgnored(
true) ==
824 if ((*controlNet())[m_filteredPoints[index]]->SetIgnored(
true)
827 emit pointChanged((*controlNet())[m_filteredPoints[index]]->GetId());
830 if (lockedPoints > 0) {
831 QMessageBox::information((
QWidget *)parent(),
"EditLocked Points",
832 QString::number(lockedPoints) +
" / "
833 + QString::number(selected.size())
834 +
" points are EditLocked and were not set to Ignored.");
836 QApplication::restoreOverrideCursor();
837 if (lockedPoints != selected.size()) emit netChanged();
867 if (serialNumberList() == NULL)
872 if (selected.size() < 1) {
873 QApplication::restoreOverrideCursor();
874 QMessageBox::information((
QWidget *)parent(),
875 "Error",
"No point selected to delete");
878 switch (QMessageBox::question((
QWidget *)parent(),
879 "Control Network Navigator - Delete Points",
880 "You have chosen to delete "
881 + QString::number(selected.size())
882 +
" point(s). Do you want to continue?",
883 "&Yes",
"&No", 0, 0)) {
887 #if 0 // If resetting filtered list, then re-filtering too slow, try code below
891 vector<int> deletedRows;
895 int deletedSoFar = 0;
897 for (
int i = 0; i < g_filteredPoints.size(); i++) {
898 if (m_listBox->item(i)->isSelected() {
899 QString
id = m_listBox->item(i)->text();
906 int lockedPoints = 0;
907 for (
int i = 0; i < selected.size(); i++) {
908 QString
id = selected.at(i)->text();
915 if (lockedPoints > 0) {
916 QMessageBox::information((
QWidget *)parent(),
"EditLocked Points",
917 QString::number(lockedPoints) +
" / "
918 + QString::number(selected.size())
919 +
" points are EditLocked and were not deleted.");
925 m_filteredPoints.clear();
927 for (
int i = 0; i < controlNet()->
GetNumPoints(); i++) {
928 m_filteredPoints.push_back(i);
930 emit deletedPoints();
955 if (serialNumberList() == NULL)
958 if (!m_aprioriDialog) {
961 connect(m_listBox, SIGNAL(itemSelectionChanged()),
963 connect(m_aprioriDialog, SIGNAL(pointChanged(QString)),
964 this, SIGNAL(pointChanged(QString)));
965 connect(m_aprioriDialog, SIGNAL(netChanged()),
966 this, SIGNAL(netChanged()));
967 connect(m_aprioriDialog, SIGNAL(aprioriDialogClosed()),
983 if (m_aprioriDialog == NULL)
return;
986 if (m_listCombo->currentIndex() == Cubes)
return;
988 int index = m_listBox->currentRow();
989 if (index < 0)
return;
1005 if (m_aprioriDialog) {
1006 disconnect(m_listBox, SIGNAL(itemSelectionChanged()),
1008 disconnect(m_aprioriDialog, 0, 0, 0);
1009 m_aprioriDialog = NULL;
1038 QApplication::setOverrideCursor(Qt::WaitCursor);
1039 m_filter->setEnabled(
false);
1041 QTabWidget *tab = (QTabWidget *)(m_filterStack->currentWidget());
1044 if (m_listCombo->currentIndex() == Points) {
1045 PointFilterIndex pointIndex = (PointFilterIndex) tab->currentIndex();
1047 if (pointIndex == JigsawErrors) {
1053 if (pointIndex == RegistrationErrors) {
1059 else if (pointIndex == Id) {
1065 else if (pointIndex == NumberImages) {
1071 else if (pointIndex == Type) {
1077 else if (pointIndex == LatLonRange) {
1089 else if (pointIndex == MeasureType) {
1095 else if(pointIndex == GoodnessOfFit) {
1101 else if (pointIndex == CubeName) {
1109 else if (m_listCombo->currentIndex() == Cubes) {
1110 CubeFilterIndex cubeIndex = (CubeFilterIndex) tab->currentIndex();
1112 if (cubeIndex == Name) {
1118 else if (cubeIndex == NumberPoints) {
1124 else if (cubeIndex == PointDistance) {
1130 m_filter->setEnabled(
true);
1131 QApplication::restoreOverrideCursor();
1143 if (m_listCombo->currentIndex() == Points) {
1144 m_tie->setEnabled(
true);
1145 m_multiIgnore->setEnabled(
true);
1146 m_multiDelete->setEnabled(
true);
1147 m_setApriori->setEnabled(
true);
1150 m_tie->setEnabled(
false);
1151 m_multiIgnore->setEnabled(
false);
1152 m_multiDelete->setEnabled(
false);
1153 m_setApriori->setEnabled(
false);
1154 if (m_aprioriDialog != NULL) {
1155 m_aprioriDialog->close();
1170 emit serialListModified();
1181 m_navDialog->setVisible(
true);
1188 void QnetNavTool::listLockedPoints() {
1191 lockDialog.setWindowTitle(
"Un-lock Points");
1192 lockDialog.setModal(
true);
1194 QListWidget editLockPointsListBox =
new QListWidget(lockDialog);
1195 connect(editLockPointsListBox, SIGNAL(itemChanged(QListWidgetItem *)),
1196 this, SLOT(unlockPoint(QListWidgetItem *)));
1202 for (
int i=0; i<selected.size(); i++) {
1203 QString
id = selected.at(i)->text();
1205 if (pt->IsEditLocked()) {
1206 QListWidgetItem *item =
new QListWidgetItem(*(selected[i]));
1207 item->setCheckState(Qt::Checked);
1208 editLockPointsListBox->addItem(item);
1212 if (lockDialog.exec()) {
1218 switch (QMessageBox::question((
QWidget *)parent(),
1219 "Control Network Navigator - Ignore Points",
1220 "You have chosen to set "
1221 + QString::number(selected.size())
1222 +
" point(s) to ignore. Do you want to continue?",
1223 "&Yes",
"&No", 0, 0)) {
1225 QApplication::setOverrideCursor(Qt::WaitCursor);
1226 emit pointChanged((*g_controlNetwork)[g_filteredPoints[index]]->GetId());
1232 void QnetNavTool::unlockPoint(QListWidgetItem *pointId) {
1233 ControlPoint *pt = g_controlNetwork->GetPoint(pointId->text());
1234 if (pt->IsEditLocked() && pointId->checkState() == Qt::Unchecked) {
1236 editLockPointsListBox->removeItemWidget(pointId);
1237 pointId->setHidden(
true);
1238 editLockPointsListBox->repaint();
Defines the Cube Name filter for the QnetNavTool's Points section.
Defines the Measure Properties filter for the QnetNavTool's Points section.
Defines the Distance filter for the QnetNavTool's Cubes section.
virtual void filter()
Method overwrites parent method.
Defines the Points filter for the QnetNavTool's Cubes section.
Filter for control point type.
void setVisiblity()
Shows the dialog box.
File name manipulation and expansion.
virtual void filter()
Method overwrites parent method.
Defines the Jigsaw Error filter for the QnetNavTool's Points section.
int size() const
How many serial number / filename combos are in the list.
virtual void filter()
Filters a list of points for points that have less than or greater than the entered bundle adjust err...
virtual void filter()
Filters a list of points and keeps points that have the selected property or in the given range...
virtual void filter()
Filters a list of images looking for cube names using the regular expression entered.
virtual void filter()
Filters a list of images for images that have points that are less than the user entered distance fro...
Defines the Distance filter for the QnetNavTool's Points section.
int GetNumPoints() const
Return the number of control points in the network.
Unless noted otherwise, the portions of Isis written by the USGS are public domain.
Status SetEditLock(bool editLock)
Set the EditLock state.
virtual void filter()
Filters a list of points for points that have less than or greater than the entered number of images...
Distance measurement, usually in meters.
virtual void filter()
Filters a list of images for images that have more or less than the user entered number of points...
Defines the Range filter for the QnetNavTool's Points section.
void setPoints(QList< QListWidgetItem * > selectedPoints)
Set control points in the dialog.
virtual void filter()
Filters a list of points for points that are less than the user entered distance from another point i...
Defines the Name filter for the QnetNavTool's Cubes section.
Defines the Point ID filter for the QnetNavTool's Points section.
Unless noted otherwise, the portions of Isis written by the USGS are public domain.
virtual void filter()
Filters a list of points for points that are of the selected Range or in the given range...
Defines the Goodness of Fit filter for the QnetNavTool's Points section.
Defines the Images filter for the QnetNavTool's Points section, i.e.
virtual void filter()
Filters a list of images looking for cube names using the regular expression entered.
virtual void filter()
Filters a list of points for points that have less than or greater than the entered registration erro...
Defines the Registration Error filter for the QnetNavTool's Points section.
virtual void filter()
Filters a list of points for points that have at least one measure of the selected type(s)...
Unless noted otherwise, the portions of Isis written by the USGS are public domain.
This is returned when the operation requires Edit Lock to be false but it is currently true...