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" 26 #include "QnetPointDistanceFilter.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" 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()) +
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()) +
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();
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();
1008 if (serialNumberList() == NULL)
1011 if (!m_aprioriDialog) {
1014 connect(m_listBox, SIGNAL(itemSelectionChanged()),
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()),
1036 if (m_aprioriDialog == NULL)
return;
1039 if (m_listCombo->currentIndex() == Cubes)
return;
1041 int index = m_listBox->currentRow();
1042 if (index < 0)
return;
1058 if (m_aprioriDialog) {
1059 disconnect(m_listBox, SIGNAL(itemSelectionChanged()),
1061 disconnect(m_aprioriDialog, 0, 0, 0);
1062 m_aprioriDialog = NULL;
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();
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();
1223 emit serialListModified();
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();
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.
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...
Namespace for the standard library.
QString name() const
Returns the name of the file excluding the path and the attributes in the file name.
Defines the Distance filter for the QnetNavTool's Points section.
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.
void setPoints(QList< QListWidgetItem *> selectedPoints)
Set control points in the dialog.
virtual void filter()
Filters a list of images for images that have more or less than the user entered number of points...
int GetNumPoints() const
Return the number of control points in the network.
Defines the Range filter for the QnetNavTool's Points section.
virtual void filter()
Filters a list of points for points that are less than the user entered distance from another point i...
QString expanded() const
Returns a QString of the full file name including the file path, excluding the attributes.
Defines the Name filter for the QnetNavTool's Cubes section.
Defines the Point ID filter for the QnetNavTool's Points section.
int size() const
How many serial number / filename combos are in the list.
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.
Namespace for ISIS/Bullet specific routines.
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...