Isis 3.0 Programmer Reference
Back | Home
Directory.cpp
Go to the documentation of this file.
1 
23 #include "Directory.h"
24 
25 
26 #include <QAction>
27 #include <QApplication>
28 #include <QDockWidget>
29 #include <QGridLayout>
30 #include <QMenu>
31 #include <QMenuBar>
32 #include <QSettings>
33 #include <QSplitter>
34 #include <QStringList>
35 #include <QXmlStreamWriter>
36 
37 #include <QtDebug>
38 #include <QMessageBox>
39 
40 #include "ChipViewportsWidget.h"
41 #include "CloseProjectWorkOrder.h"
43 #include "CnetEditorWidget.h"
44 #include "Control.h"
46 #include "ControlList.h"
47 #include "ControlNet.h"
48 #include "ControlPointEditView.h"
49 #include "ControlPointEditWidget.h"
50 #include "CubeDnView.h"
51 #include "CubeDnViewWorkOrder.h"
52 #include "ExportControlNetWorkOrder.h"
53 #include "ExportImagesWorkOrder.h"
54 #include "FileName.h"
55 #include "Footprint2DView.h"
57 #include "HistoryTreeWidget.h"
58 #include "IException.h"
59 #include "IString.h"
62 #include "ImportImagesWorkOrder.h"
63 #include "ImportShapesWorkOrder.h"
64 #include "ImageFileListWidget.h"
65 #include "JigsawWorkOrder.h"
66 #include "MatrixSceneWidget.h"
67 #include "MatrixViewWorkOrder.h"
68 #include "MosaicSceneWidget.h"
69 #include "OpenProjectWorkOrder.h"
71 #include "Project.h"
72 #include "ProjectItem.h"
73 #include "ProjectItemModel.h"
74 #include "ProjectItemTreeView.h"
75 #include "RemoveImagesWorkOrder.h"
76 #include "RenameProjectWorkOrder.h"
77 #include "SaveProjectWorkOrder.h"
78 #include "SaveProjectAsWorkOrder.h"
79 #include "SensorGetInfoWorkOrder.h"
80 #include "SensorInfoWidget.h"
83 #include "TargetInfoWidget.h"
84 #include "TargetGetInfoWorkOrder.h"
85 #include "WarningTreeWidget.h"
86 #include "WorkOrder.h"
87 #include "Workspace.h"
88 #include "XmlStackedHandler.h"
89 #include "XmlStackedHandlerReader.h"
90 
91 namespace Isis {
92 
99  Directory::Directory(QObject *parent) : QObject(parent) {
100  //qDebug()<<"Directory::Directory";
101 
102 
103  try {
104  m_project = new Project(*this);
105  }
106  catch (IException &e) {
108  "Could not create directory because Project could not be created.",
109  _FILEINFO_);
110  }
111 
112  //connect( m_project, SIGNAL(imagesAdded(ImageList *) ),
113  //this, SLOT(imagesAddedToProject(ImageList *) ) );
114 
115  //connect( m_project, SIGNAL(targetsAdded(TargetBodyList *) ),
116  //this, SLOT(targetsAddedToProject(TargetBodyList *) ) );
117 
118  //connect( m_project, SIGNAL(guiCamerasAdded(GuiCameraList *) ),
119  //this, SLOT(guiCamerasAddedToProject(GuiCameraList *) ) );
120 
121 // connect( m_project, SIGNAL(projectLoaded(Project *) ),
122 // this, SLOT(updateRecentProjects(Project *) ) );
123 //
125  m_projectItemModel->addProject(m_project);
126 // qDebug()<<"Directory::Directory model row counter after addProject = "<<m_projectItemModel->rowCount();
127 
128  try {
129  createWorkOrder<SetActiveImageListWorkOrder>();
130  createWorkOrder<SetActiveControlWorkOrder>();
131  createWorkOrder<CnetEditorViewWorkOrder>();
132  createWorkOrder<CubeDnViewWorkOrder>();
133  createWorkOrder<Footprint2DViewWorkOrder>();
134  createWorkOrder<MatrixViewWorkOrder>();
135  createWorkOrder<SensorGetInfoWorkOrder>();
136  createWorkOrder<RemoveImagesWorkOrder>();
137  createWorkOrder<TargetGetInfoWorkOrder>();
138  createWorkOrder<ImageFileListViewWorkOrder>();
139 
140  m_exportControlNetWorkOrder = createWorkOrder<ExportControlNetWorkOrder>();
141  m_exportImagesWorkOrder = createWorkOrder<ExportImagesWorkOrder>();
142  m_importControlNetWorkOrder = createWorkOrder<ImportControlNetWorkOrder>();
143  m_importImagesWorkOrder = createWorkOrder<ImportImagesWorkOrder>();
144  m_importShapesWorkOrder = createWorkOrder<ImportShapesWorkOrder>();
145  m_openProjectWorkOrder = createWorkOrder<OpenProjectWorkOrder>();
146  m_saveProjectWorkOrder = createWorkOrder<SaveProjectWorkOrder>();
147  m_saveProjectAsWorkOrder = createWorkOrder<SaveProjectAsWorkOrder>();
148  m_openRecentProjectWorkOrder = createWorkOrder<OpenRecentProjectWorkOrder>();
149  m_runJigsawWorkOrder = createWorkOrder<JigsawWorkOrder>();
150  m_closeProjectWorkOrder = createWorkOrder<CloseProjectWorkOrder>();
151  m_renameProjectWorkOrder = createWorkOrder<RenameProjectWorkOrder>();
152  }
153  catch (IException &e) {
155  "Could not create directory because work orders are corrupt.",
156  _FILEINFO_);
157  }
158 
160 
161  }
162 
163 
168 
169  delete m_project;
170 
171  foreach (WorkOrder *workOrder, m_workOrders) {
172  delete workOrder;
173  }
174 
175  m_workOrders.clear();
176  }
177 
178 
184  return m_fileMenuActions;
185  }
186 
187 
193  return m_projectMenuActions;
194  }
195 
196 
202  return m_editMenuActions;
203  }
204 
205 
211  return m_viewMenuActions;
212  }
213 
214 
220  return m_settingsMenuActions;
221  }
222 
223 
229  return m_helpMenuActions;
230  }
231 
232 
238  return m_permToolBarActions;
239  }
240 
241 
247  return m_activeToolBarActions;
248  }
249 
250 
256  return m_toolPadActions;
257  }
258 
259 
264  // Menus are created temporarily to convinently organize the actions.
265  QMenu *fileMenu = new QMenu();
266 
267  //fileMenu->addAction(m_importControlNetWorkOrder->clone());
268  //fileMenu->addAction(m_importImagesWorkOrder->clone());
269 
270  QAction *openProjectAction = m_openProjectWorkOrder->clone();
271  openProjectAction->setIcon(QIcon(":open") );
272  fileMenu->addAction(openProjectAction);
273 
274  m_permToolBarActions.append(openProjectAction);
275 
276  QMenu *recentProjectsMenu = fileMenu->addMenu("&Recent Projects");
277  int nRecentProjects = m_recentProjects.size();
278 
279  for (int i = 0; i < nRecentProjects; i++) {
280  FileName projectFileName = m_recentProjects.at(i);
281  if (!projectFileName.fileExists() )
282  continue;
283 
284  QAction *openRecentProjectAction = m_openRecentProjectWorkOrder->clone();
285 
286  openRecentProjectAction->setData(m_recentProjects.at(i) );
287  openRecentProjectAction->setText(m_recentProjects.at(i) );
288 
289  if ( !( (OpenRecentProjectWorkOrder*)openRecentProjectAction )
290  ->isExecutable(m_recentProjects.at(i) ) )
291  continue;
292 
293  recentProjectsMenu->addAction(openRecentProjectAction);
294  }
295 
296  fileMenu->addSeparator();
297 
298  QAction *saveAction = m_saveProjectWorkOrder->clone();
299  saveAction->setShortcut(Qt::Key_S | Qt::CTRL);
300  saveAction->setIcon( QIcon(":save") );
301  connect( project()->undoStack(), SIGNAL( cleanChanged(bool) ),
302  saveAction, SLOT( setDisabled(bool) ) );
303  fileMenu->addAction(saveAction);
304  m_permToolBarActions.append(saveAction);
305 
306  QAction *saveAsAction = m_saveProjectAsWorkOrder->clone();
307  saveAsAction->setIcon(QIcon(":saveAs"));
308  fileMenu->addAction(saveAsAction);
309  m_permToolBarActions.append(saveAsAction);
310 
311  fileMenu->addSeparator();
312 
313  QMenu *importMenu = fileMenu->addMenu("&Import");
314  importMenu->addAction(m_importControlNetWorkOrder->clone() );
315  importMenu->addAction(m_importImagesWorkOrder->clone() );
316  importMenu->addAction(m_importShapesWorkOrder->clone() );
317 
318  QMenu *exportMenu = fileMenu->addMenu("&Export");
319  exportMenu->addAction(m_exportControlNetWorkOrder->clone() );
320  exportMenu->addAction(m_exportImagesWorkOrder->clone() );
321 
322  fileMenu->addSeparator();
323 
324  fileMenu->addAction(m_closeProjectWorkOrder->clone() );
325 
326  m_fileMenuActions.append( fileMenu->actions() );
327 
328 
329  QMenu *projectMenu = new QMenu();
330  projectMenu->addAction(m_renameProjectWorkOrder->clone());
331  projectMenu->addAction(m_runJigsawWorkOrder->clone() );
332 
333  m_projectMenuActions.append( projectMenu->actions() );
334 
339  }
340 
341 
346  void Directory::populateMainMenu(QMenuBar *menuBar) {
347  QMenu *fileMenu = menuBar->findChild<QMenu *>("fileMenu");
348  if (fileMenu) {
349  fileMenu->addAction(m_importControlNetWorkOrder->clone());
350  fileMenu->addAction(m_importImagesWorkOrder->clone());
351  fileMenu->addAction(m_importShapesWorkOrder->clone());
352  QAction *openProjectAction = m_openProjectWorkOrder->clone();
353  openProjectAction->setIcon(QIcon(":open") );
354  fileMenu->addAction(openProjectAction);
355 
356  QMenu *recentProjectsMenu = fileMenu->addMenu("Recent P&rojects");
357  int nRecentProjects = m_recentProjects.size();
358  for (int i = 0; i < nRecentProjects; i++) {
359  FileName projectFileName = m_recentProjects.at(i);
360  if (!projectFileName.fileExists() )
361  continue;
362 
363  QAction *openRecentProjectAction = m_openRecentProjectWorkOrder->clone();
364 
365  openRecentProjectAction->setData(m_recentProjects.at(i) );
366  openRecentProjectAction->setText(m_recentProjects.at(i) );
367 
368  if ( !( (OpenRecentProjectWorkOrder*)openRecentProjectAction )
369  ->isExecutable(m_recentProjects.at(i) ) )
370  continue;
371 
372  recentProjectsMenu->addAction(openRecentProjectAction);
373  }
374 
375  fileMenu->addSeparator();
376  fileMenu->addAction(m_openProjectWorkOrder->clone());
377  fileMenu->addSeparator();
378 
380 
381  QAction *saveAction = m_saveProjectWorkOrder->clone();
382  saveAction->setShortcut(Qt::Key_S | Qt::CTRL);
383  saveAction->setIcon( QIcon(":save") );
384 
385  connect( project()->undoStack(), SIGNAL( cleanChanged(bool) ),
386  saveAction, SLOT( setDisabled(bool) ) );
387 
388  fileMenu->addAction(saveAction);
389  QAction *addAction = m_saveProjectAsWorkOrder->clone();
390  addAction->setIcon(QIcon(":saveAs") );
391  fileMenu->addAction(addAction);
392 
393  fileMenu->addSeparator();
394  fileMenu->addAction(m_exportControlNetWorkOrder->clone());
395  fileMenu->addAction(m_exportImagesWorkOrder->clone());
396 
397  QMenu *importMenu = fileMenu->addMenu("&Import");
398  importMenu->addAction(m_importControlNetWorkOrder->clone() );
399  importMenu->addAction(m_importImagesWorkOrder->clone() );
400  importMenu->addAction(m_importShapesWorkOrder->clone() );
401 
402  QMenu *exportMenu = fileMenu->addMenu("&Export");
403 
404  exportMenu->addAction(m_exportControlNetWorkOrder->clone() );
405  exportMenu->addAction(m_exportImagesWorkOrder->clone() );
406 
407  fileMenu->addSeparator();
408 
409  fileMenu->addAction(m_closeProjectWorkOrder->clone() );
410 
411  fileMenu->addSeparator();
412  }
413 
414  QMenu *projectMenu = menuBar->findChild<QMenu *>("projectMenu");
415  if (projectMenu) {
416  projectMenu->addAction( m_renameProjectWorkOrder->clone() );
417  projectMenu->addAction( m_runJigsawWorkOrder->clone() );
418  }
419  }
420 
421 
426  void Directory::setHistoryContainer(QDockWidget *historyContainer) {
427  if (!m_historyTreeWidget) {
429  }
430  historyContainer->setWidget(m_historyTreeWidget);
431  }
432 
433 
438  void Directory::setWarningContainer(QDockWidget *warningContainer) {
439  if (!m_warningTreeWidget) {
441  }
442  warningContainer->setWidget(m_warningTreeWidget);
443  }
444 
445 
451  m_recentProjects.append(recentProjects);
452  }
453 
454 
460  return m_recentProjects;
461  }
462 
463 
470  QString title = tr("Cnet Editor View %1").arg( network->displayProperties()->displayName() );
471 
472  FileName configFile("$HOME/.Isis/" + QApplication::applicationName() + "/" + title + ".config");
473 
474  // TODO: This layout should be inside of the cnet editor widget, but I put it here to not
475  // conflict with current work in the cnet editor widget code.
476  QWidget *result = new QWidget;
477  QGridLayout *resultLayout = new QGridLayout;
478  result->setLayout(resultLayout);
479 
480  int row = 0;
481 
482  QMenuBar *menuBar = new QMenuBar;
483  resultLayout->addWidget(menuBar, row, 0, 1, 2);
484  row++;
485 
486  CnetEditorWidget *mainWidget =
487  new CnetEditorWidget( network->controlNet(), configFile.expanded() );
488  resultLayout->addWidget(mainWidget, row, 0, 1, 2);
489  row++;
490 
491  // Populate the menu...
492  QMap< QAction *, QList< QString > > actionMap = mainWidget->menuActions();
493  QMapIterator< QAction *, QList< QString > > actionMapIterator(actionMap);
494 
495  QMap<QString, QMenu *> topLevelMenus;
496 
497  while ( actionMapIterator.hasNext() ) {
498  actionMapIterator.next();
499  QAction *actionToAdd = actionMapIterator.key();
500  QList< QString > location = actionMapIterator.value();
501 
502  QMenu *menuToPutActionInto = NULL;
503 
504  if ( location.count() ) {
505  QString topLevelMenuTitle = location.takeFirst();
506  if (!topLevelMenus[topLevelMenuTitle]) {
507  topLevelMenus[topLevelMenuTitle] = menuBar->addMenu(topLevelMenuTitle);
508  }
509 
510  menuToPutActionInto = topLevelMenus[topLevelMenuTitle];
511  }
512 
513  foreach (QString menuName, location) {
514  bool foundSubMenu = false;
515  foreach ( QAction *possibleSubMenu, menuToPutActionInto->actions() ) {
516  if (!foundSubMenu &&
517  possibleSubMenu->menu() && possibleSubMenu->menu()->title() == menuName) {
518  foundSubMenu = true;
519  menuToPutActionInto = possibleSubMenu->menu();
520  }
521  }
522 
523  if (!foundSubMenu) {
524  menuToPutActionInto = menuToPutActionInto->addMenu(menuName);
525  }
526  }
527 
528  menuToPutActionInto->addAction(actionToAdd);
529  }
530 
531  QTabWidget *treeViews = new QTabWidget;
532  treeViews->addTab( mainWidget->pointTreeView(), tr("Point View") );
533  treeViews->addTab( mainWidget->serialTreeView(), tr("Serial View") );
534  treeViews->addTab( mainWidget->connectionTreeView(), tr("Connection View") );
535  resultLayout->addWidget(treeViews, row, 0, 1, 1);
536 
537  QTabWidget *filterViews = new QTabWidget;
538  filterViews->addTab( mainWidget->pointFilterWidget(), tr("Filter Points and Measures") );
539  filterViews->addTab( mainWidget->serialFilterWidget(), tr("Filter Images and Points") );
540  filterViews->addTab( mainWidget->connectionFilterWidget(), tr("Filter Connections") );
541  resultLayout->addWidget(filterViews, row, 1, 1, 1);
542  row++;
543 
544  connect( result, SIGNAL( destroyed(QObject *) ),
545  this, SLOT( cleanupCnetEditorViewWidgets() ) );
546 
547  m_cnetEditorViewWidgets.append(mainWidget);
548 
549  result->setWindowTitle(title);
550  result->setObjectName(title);
551 
552  emit newWidgetAvailable(result);
553 
554  return mainWidget;
555  }
556 
557 
563  CubeDnView *result = new CubeDnView(this);
564  result->setModel(m_projectItemModel);
565  m_cubeDnViewWidgets.append(result);
566  connect( result, SIGNAL( destroyed(QObject *) ),
567  this, SLOT( cleanupCubeDnViewWidgets() ) );
568 
569  result->setWindowTitle("Cube DN View");
570  result->setWindowTitle( tr("Cube DN View %1").arg(m_cubeDnViewWidgets.count() ) );
571 
572  emit newWidgetAvailable(result);
573 
574  // The only reason I need this SLOTs, are to create the control point edit view if it doesn't
575  // exist.
576  // TODO 2016-09-27 TLS Find BETTER WAY
577  connect(result, SIGNAL(modifyControlPoint(ControlPoint *)),
578  this, SLOT(modifyControlPoint(ControlPoint *)));
579 
580  connect(result, SIGNAL(deleteControlPoint(ControlPoint *)),
581  this, SLOT(deleteControlPoint(ControlPoint *)));
582 
583  connect(result, SIGNAL(createControlPoint(double, double, Cube *, bool)),
584  this, SLOT(createControlPoint(double, double, Cube *, bool)));
585 
586  // This causes the control points to be re-drawn on the viewports
587  // TODO 2016-09-27 TLS Same needs to happen anytime a point is changed,deleted, so can
588  // I have one signal, controlChanged?
589  connect(this, SIGNAL(controlPointAdded(QString)), result, SIGNAL(controlPointAdded(QString)));
590 
591  return result;
592  }
593 
594 
600 // qDebug()<<"Directory::addFootprint2DView this = "<<this;
601  Footprint2DView *result = new Footprint2DView(this);
602 // qDebug()<<"Directory::addFootprint2DView internalModel after constructor = "<<result->internalModel();
603 // qDebug()<<" m_projectItemModel = "<<m_projectItemModel;
604  // Set source model on Proxy
605  result->setModel(m_projectItemModel);
606 // qDebug()<<" internalModel after setModel = "<<result->internalModel();
607  m_footprint2DViewWidgets.append(result);
608  result->setWindowTitle( tr("Footprint View %1").arg( m_footprint2DViewWidgets.count() ) );
609 
610  connect( result, SIGNAL( destroyed(QObject *) ),
611  this, SLOT( cleanupFootprint2DViewWidgets() ) );
612 
613  emit newWidgetAvailable(result);
614 
615  // The only reason I need this SLOTs, are to create the control point edit view if it doesn't
616  // exist.
617  // TODO 2016-09-27 TLS Find BETTER WAY
618  connect(result, SIGNAL(modifyControlPoint(ControlPoint *)),
619  this, SLOT(modifyControlPoint(ControlPoint *)));
620 
621  connect(result, SIGNAL(deleteControlPoint(ControlPoint *)),
622  this, SLOT(deleteControlPoint(ControlPoint *)));
623 
624  connect(result, SIGNAL(createControlPoint(double, double)),
625  this, SLOT(createControlPoint(double, double)));
626 
627  // This causes the control points to be re-drawn on the footprint view
628  // TODO 2016-09-27 TLS Same needs to happen anytime a point is changed,deleted, so can
629  // I have one signal, controlChanged?
630  connect(this, SIGNAL(controlPointAdded(QString)), result, SIGNAL(controlPointAdded(QString)));
631 
632  return result;
633 
634  /*
635  //qDebug()<<"Directory::addFootprint2DView";
636  MosaicSceneWidget *result = new MosaicSceneWidget(NULL, true, true, this);
637 
638  connect( result, SIGNAL( destroyed(QObject *) ),
639  this, SLOT( cleanupFootprint2DViewWidgets() ) );
640 
641  m_footprint2DViewWidgets.append(result);
642 
643  result->setWindowTitle( tr("Footprint View %1").arg( m_footprint2DViewWidgets.count() ) );
644  result->setObjectName(result->windowTitle());
645  result->setObjectName( result->windowTitle() );
646 
647  emit newWidgetAvailable(result);
648 
649  return result;
650  */
651  }
652 
653 
654  ControlPointEditView *Directory::addControlPointEditView() {
655 
656 // qDebug()<<"Directory::addControlPointEditor cnetFile = "<<cnetFilename;
657  if (!controlPointEditView()) {
658  // TODO Need parent for controlPointWidget
659  ControlPointEditView *result = new ControlPointEditView(this);
660  result->setWindowTitle(tr("Control Point Editor"));
661  result->setObjectName(result->windowTitle());
662 
663  Control *activeControl = project()->activeControl();
664  if (activeControl == NULL) {
665  // Error and return to Select Tool
666  QString message = "No active control network chosen. Choose active control network on "
667  "project tree.\n";
668  QMessageBox::critical(qobject_cast<QWidget *>(parent()), "Error", message);
669  return NULL;
670  }
671  result->controlPointEditWidget()->setControl(activeControl);
672 
673  if (!project()->activeImageList()->serialNumberList()) {
674  QString message = "No active image list chosen. Choose an active image list on the project "
675  "tree.\n";
676  QMessageBox::critical(qobject_cast<QWidget *>(parent()), "Error", message);
677  return NULL;
678  }
680  project()->activeImageList()->serialNumberList());
681 
682  m_controlPointEditViewWidget = result;
683 
684  connect(result, SIGNAL(destroyed(QObject *)),
685  this, SLOT(cleanupControlPointEditViewWidget()));
686  emit newWidgetAvailable(result);
687 
688 
689  m_chipViewports = new ChipViewportsWidget(result);
690 // connect(m_chipViewports, SIGNAL(destroyed(QObject *)), this, SLOT(cleanupchipViewportWidges()));
691  m_chipViewports->setWindowTitle(tr("ChipViewport View"));
692  m_chipViewports->setObjectName(m_chipViewports->windowTitle());
693  m_chipViewports->setSerialNumberList(project()->activeImageList()->serialNumberList());
694  m_chipViewports->setControlNet(activeControl->controlNet(), activeControl->fileName());
695  emit newWidgetAvailable(m_chipViewports);
696 
697 
698  // Create connections between signals from control point edit view and equivalent directory
699  // signals that can then be connected to other views that display control nets.
700  // TODO 2016-09-27 TLS Same needs to happen anytime a point is changed,deleted, so can
701  // I have one signal, controlChanged?
702  connect(result->controlPointEditWidget(), SIGNAL(controlPointAdded(QString)),
703  this, SIGNAL(controlPointAdded(QString)));
704  }
705 
706  return controlPointEditView();
707  }
708 
709 
710 
711 
712 #if 0
713  ChipViewportsWidget *Directory::addControlPointChipView() {
714 
715  ChipViewportsWidget *result = new ChipViewportsWidget(this);
716  connect(result, SIGNAL(destroyed(QObject *)), this, SLOT(cleanupchipViewportWidges()));
717  m_controlPointChipViews.append(result);
718  result->setWindowTitle(tr("ChipViewport View %1").arg(m_controlPointChipViews.count()));
719  result->setObjectName(result->windowTitle());
720  emit newWidgetAvailable(result);
721 
722  return result;
723  }
724 #endif
725 
726 
732  MatrixSceneWidget *result = new MatrixSceneWidget(NULL, true, true, this);
733 
734  connect( result, SIGNAL( destroyed(QObject *) ),
735  this, SLOT( cleanupMatrixViewWidgets() ) );
736 
737  m_matrixViewWidgets.append(result);
738 
739  result->setWindowTitle( tr("Matrix View %1").arg( m_matrixViewWidgets.count() ) );
740  result->setObjectName( result->windowTitle() );
741 
742  emit newWidgetAvailable(result);
743 
744  return result;
745  }
746 
747 
753  TargetInfoWidget *result = new TargetInfoWidget(target.data(), this);
754 
755  connect( result, SIGNAL( destroyed(QObject *) ),
756  this, SLOT( cleanupTargetInfoWidgets() ) );
757 
758  m_targetInfoWidgets.append(result);
759 
760  result->setWindowTitle( tr("%1").arg(target->displayProperties()->displayName() ) );
761  result->setObjectName( result->windowTitle() );
762 
763  emit newWidgetAvailable(result);
764 
765  return result;
766  }
767 
768 
774  SensorInfoWidget *result = new SensorInfoWidget(camera.data(), this);
775 
776  connect( result, SIGNAL( destroyed(QObject *) ),
777  this, SLOT( cleanupSensorInfoWidgets() ) );
778 
779  m_sensorInfoWidgets.append(result);
780 
781  result->setWindowTitle( tr("%1").arg(camera->displayProperties()->displayName() ) );
782  result->setObjectName( result->windowTitle() );
783 
784  emit newWidgetAvailable(result);
785 
786  return result;
787  }
788 
789 
795  //qDebug()<<"Directory::addImageFileListView";
796  ImageFileListWidget *result = new ImageFileListWidget(this);
797 
798  connect( result, SIGNAL( destroyed(QObject *) ),
799  this, SLOT( cleanupFileListWidgets() ) );
800 
801  m_fileListWidgets.append(result);
802 
803  result->setWindowTitle( tr("File List %1").arg( m_fileListWidgets.count() ) );
804  result->setObjectName( result->windowTitle() );
805 
806  emit newWidgetAvailable(result);
807 
808  return result;
809  }
810 
811 
817  ProjectItemTreeView *result = new ProjectItemTreeView();
818  result->setModel(m_projectItemModel);
819 
820  return result;
821  }
822 
823 
829  return m_projectItemModel;
830  }
831 
832 
838  return m_warningTreeWidget;
839  }
840 
841 
846  m_cnetEditorViewWidgets.removeAll(NULL);
847  }
848 
849 
854  m_cubeDnViewWidgets.removeAll(NULL);
855  }
856 
857 
862  m_fileListWidgets.removeAll(NULL);
863 
864  }
865 
866 
871  m_footprint2DViewWidgets.removeAll(NULL);
872  }
873 
874 
879  delete m_controlPointEditViewWidget;
880  m_controlPointEditViewWidget = NULL;
881  }
882 
883 
888  m_matrixViewWidgets.removeAll(NULL);
889  }
890 
891 
896  m_sensorInfoWidgets.removeAll(NULL);
897  }
898 
899 
904  m_targetInfoWidgets.removeAll(NULL);
905  }
906 
907 
914  if ( !m_recentProjects.contains( project->projectRoot() ) )
915  m_recentProjects.insert( 0, project->projectRoot() );
916  }
917 
918 
924  return m_project;
925  }
926 
927 
934 
935  foreach (CnetEditorWidget *widget, m_cnetEditorViewWidgets) {
936  results.append(widget);
937  }
938 
939  return results;
940  }
941 
942 
948  QList<CubeDnView *> results;
949 
950  foreach (CubeDnView *widget, m_cubeDnViewWidgets) {
951  results.append(widget);
952  }
953 
954  return results;
955  }
956 
957 
964 
965  foreach (MatrixSceneWidget *widget, m_matrixViewWidgets) {
966  results.append(widget);
967  }
968 
969  return results;
970  }
971 
972 
979 
980  foreach (SensorInfoWidget *widget, m_sensorInfoWidgets) {
981  results.append(widget);
982  }
983 
984  return results;
985  }
986 
987 
994 
995  foreach (TargetInfoWidget *widget, m_targetInfoWidgets) {
996  results.append(widget);
997  }
998 
999  return results;
1000  }
1001 
1002 
1008  QList<Footprint2DView *> results;
1009 
1010  foreach (Footprint2DView *view, m_footprint2DViewWidgets) {
1011  results.append(view);
1012  }
1013 
1014  return results;
1015  }
1016 
1017 
1024 
1025  foreach (ImageFileListWidget *widget, m_fileListWidgets) {
1026  results.append(widget);
1027  }
1028 
1029  return results;
1030  }
1031 
1037 
1038  return m_controlPointEditViewWidget;
1039  }
1040 
1041 
1042  ChipViewportsWidget *Directory::controlPointChipViewports() {
1043 
1044  return m_chipViewports;
1045  }
1046 
1047 
1052 //ControlNetEditor *Directory::controlNetEditor() {
1053 // return m_cnetEditor;
1054 //}
1055 
1056 
1062  QList<QProgressBar *> result;
1063  return result;
1064  }
1065 
1066 
1071  void Directory::showWarning(QString text) {
1072  m_warningTreeWidget->showWarning(text);
1073  }
1074 
1075 
1081  return project()->undoStack()->createRedoAction(this);
1082  }
1083 
1084 
1090  return project()->undoStack()->createUndoAction(this);
1091  }
1092 
1093 
1099  xmlReader->pushContentHandler( new XmlHandler(this) );
1100  }
1101 
1102 
1112  void Directory::save(QXmlStreamWriter &stream, FileName newProjectRoot) const {
1113  stream.writeStartElement("directory");
1114 
1115  if ( !m_fileListWidgets.isEmpty() ) {
1116  stream.writeStartElement("fileListWidgets");
1117 
1118  foreach (ImageFileListWidget *fileListWidget, m_fileListWidgets) {
1119  fileListWidget->save(stream, project(), newProjectRoot);
1120  }
1121 
1122  stream.writeEndElement();
1123  }
1124 
1125  // Save footprints
1126  if ( !m_footprint2DViewWidgets.isEmpty() ) {
1127  stream.writeStartElement("footprintViews");
1128 
1129  foreach (Footprint2DView *footprint2DViewWidget, m_footprint2DViewWidgets) {
1130  footprint2DViewWidget->mosaicSceneWidget()->save(stream, project(), newProjectRoot);
1131  }
1132 
1133  stream.writeEndElement();
1134  }
1135 
1136  // Save cubeDnViews
1137  if ( !m_cubeDnViewWidgets.isEmpty() ) {
1138  stream.writeStartElement("cubeDnViews");
1139 
1140  foreach (CubeDnView *cubeDnView, m_cubeDnViewWidgets) {
1141  cubeDnView->save(stream, project(), newProjectRoot);
1142  }
1143 
1144  stream.writeEndElement();
1145  }
1146 
1147  stream.writeEndElement();
1148  }
1149 
1150 
1156  m_directory = directory;
1157  }
1158 
1159 
1164  }
1165 
1166 
1182  bool Directory::XmlHandler::startElement(const QString &namespaceURI, const QString &localName,
1183  const QString &qName, const QXmlAttributes &atts) {
1184  bool result = XmlStackedHandler::startElement(namespaceURI, localName, qName, atts);
1185 
1186  if (result) {
1187  if (localName == "footprint2DView") {
1188  m_directory->addFootprint2DView()->mosaicSceneWidget()->load(reader());
1189  }
1190  else if (localName == "imageFileList") {
1191  m_directory->addImageFileListView()->load(reader());
1192  }
1193  else if (localName == "cubeDnView") {
1194  m_directory->addCubeDnView()->load(reader(), m_directory->project());
1195  }
1196  }
1197 
1198  return result;
1199  }
1200 
1201 
1263  QList< QPair< QString, QList<QAction *> > > actionPairings) {
1264  QList<QAction *> results;
1265 
1266  QStringList sortedActionTexts;
1267 
1268  // This is a map from the Action Text to the actions and their widget titles
1270 
1271  QPair< QString, QList<QAction *> > singleWidgetPairing;
1272  foreach (singleWidgetPairing, actionPairings) {
1273  QString widgetTitle = singleWidgetPairing.first;
1274  QList<QAction *> widgetActions = singleWidgetPairing.second;
1275 
1276  foreach (QAction *widgetAction, widgetActions) {
1277  if (widgetAction) {
1278  QString actionText = widgetAction->text();
1279 
1280  restructuredData[actionText].append( qMakePair(widgetTitle, widgetAction) );
1281 
1282  if ( !sortedActionTexts.contains(actionText) ) {
1283  sortedActionTexts.append(actionText);
1284  }
1285  }
1286  else {
1287  // Add separator
1288  if ( !sortedActionTexts.isEmpty() && !sortedActionTexts.last().isEmpty() ) {
1289  sortedActionTexts.append("");
1290  }
1291  }
1292  }
1293  }
1294 
1295  if ( sortedActionTexts.count() && sortedActionTexts.last().isEmpty() ) {
1296  sortedActionTexts.removeLast();
1297  }
1298 
1299  foreach (QString actionText, sortedActionTexts) {
1300  if ( actionText.isEmpty() ) {
1301  results.append(NULL);
1302  }
1303  else {
1304  // We know this list isn't empty because we always appended to the value when we
1305  // accessed a particular key.
1306  QList< QPair<QString, QAction *> > actions = restructuredData[actionText];
1307 
1308  if (actions.count() == 1) {
1309  QAction *finalAct = actions.first().second;
1310  QString widgetTitle = actions.first().first;
1311 
1312  finalAct->setText( tr("%1 on %2").arg(actionText).arg(widgetTitle) );
1313  results.append(finalAct);
1314  }
1315  else {
1316  QAction *menuAct = new QAction(actionText, NULL);
1317 
1318  QMenu *menu = new QMenu;
1319  menuAct->setMenu(menu);
1320 
1321  QList<QAction *> actionsInsideMenu;
1322 
1323  QPair<QString, QAction *> widgetTitleAndAction;
1324  foreach (widgetTitleAndAction, actions) {
1325  QString widgetTitle = widgetTitleAndAction.first;
1326  QAction *action = widgetTitleAndAction.second;
1327 
1328  action->setText(widgetTitle);
1329  actionsInsideMenu.append(action);
1330  }
1331 
1332  qSort(actionsInsideMenu.begin(), actionsInsideMenu.end(), &actionTextLessThan);
1333 
1334  QAction *allAct = new QAction(tr("All"), NULL);
1335 
1336  foreach (QAction *actionInMenu, actionsInsideMenu) {
1337  connect( allAct, SIGNAL( triggered() ),
1338  actionInMenu, SIGNAL( triggered() ) );
1339  menu->addAction(actionInMenu);
1340  }
1341 
1342  menu->addSeparator();
1343  menu->addAction(allAct);
1344 
1345  results.append(menuAct);
1346  }
1347  }
1348  }
1349 
1350  return results;
1351  }
1352 
1353 
1363  return lhs->text().localeAwareCompare( rhs->text() ) < 0;
1364 
1365  }
1366 
1367 
1372 #if 0
1373  if (m_controlPointEditView && m_footprint2DViewWidgets.size() == 1) {
1374  connect(m_footprint2DViewWidgets.at(0), SIGNAL(controlPointSelected(ControlPoint *)),
1375  m_controlPointEdit, SLOT(loadControlPoint(ControlPoint *)));
1376  connect(m_cnetEditor, SIGNAL(controlPointCreated(ControlPoint *)),
1377  m_controlPointEditWidget, SLOT(setEditPoint(ControlPoint *)));
1378 
1379  // MosaicControlTool->MosaicSceneWidget->ControlNetEditor
1380  connect( m_footprint2DViewWidgets.at(0), SIGNAL( deleteControlPoint(QString) ),
1381  m_cnetEditor, SLOT( deleteControlPoint(QString) ) );
1382  // ControlNetEditor->MosaicSceneWidget->MosaicControlTool
1383  connect( m_cnetEditor, SIGNAL( controlPointDeleted() ),
1384  m_footprint2DViewWidgets.at(0), SIGNAL( controlPointDeleted() ) );
1385 
1386 
1387  // TODO Figure out which footprint view has the "active" cnet.
1388  //qDebug() << "\t\tMos items: " << m_footprint2DViewWidgets.at(0);
1389  connect(m_controlPointEditWidget, SIGNAL(controlPointChanged(QString)),
1390  m_footprint2DViewWidgets.at(0), SIGNAL(controlPointChanged(QString)));
1391  connect(m_controlPointEditWidget, SIGNAL(controlPointAdded(QString)),
1392  m_footprint2DViewWidgets.at(0), SIGNAL(controlPointAdded(QString)));
1393  }
1394 #endif
1395  }
1396 
1397 
1398  void Directory::modifyControlPoint(ControlPoint *controlPoint) {
1399 
1400  if (!controlPointEditView()) {
1401  addControlPointEditView();
1402  }
1404  }
1405 
1406 
1407  void Directory::deleteControlPoint(ControlPoint *controlPoint) {
1408 
1409  if (!controlPointEditView()) {
1410  addControlPointEditView();
1411  }
1412  controlPointEditView()->controlPointEditWidget()->deletePoint(controlPoint);
1413  }
1414 
1415 
1416  void Directory::createControlPoint(double latitude, double longitude, Cube *cube,
1417  bool isGroundSource) {
1418 
1419  if (!controlPointEditView()) {
1420  addControlPointEditView();
1421 
1422  }
1423  controlPointEditView()->controlPointEditWidget()->createControlPoint(
1424  latitude, longitude, cube, isGroundSource);
1425  }
1426 }
This represents an ISIS control net in a project-based GUI interface.
Definition: Control.h:57
~XmlHandler()
The Destructor for Directory::XmlHandler.
Definition: Directory.cpp:1163
QList< QAction * > editMenuActions()
Get the list of actions that the Directory can provide for the edit menu.
Definition: Directory.cpp:201
QList< MatrixSceneWidget * > matrixViews()
Accessor for the list of MatrixSceneWidgets currently available.
Definition: Directory.cpp:962
QList< QAction * > projectMenuActions()
Get the list of actions that the Directory can provide for the project menu.
Definition: Directory.cpp:192
QList< QAction * > toolPadActions()
Get the list of actions that the Directory can provide for the Tool Pad.
Definition: Directory.cpp:255
QPointer< WorkOrder > m_saveProjectWorkOrder
The Save Project WorkOrder.
Definition: Directory.h:311
$Date$ $Revision$
Widget for displaying information about a sensor.
void setEditPoint(ControlPoint *controlPoint)
Slot called by Directory to set the control point for editing.
QList< QAction * > activeToolBarActions()
Get the list of actions that the Directory can provide for the active Tool Bar.
Definition: Directory.cpp:246
The main project for cnetsuite.
Definition: Project.h:105
QList< QPointer< SensorInfoWidget > > m_sensorInfoWidgets
List of SensorInfoWidgets.
Definition: Directory.h:296
void save(QXmlStreamWriter &stream, FileName newProjectRoot) const
Save the directory to an XML file.
Definition: Directory.cpp:1112
void cleanupTargetInfoWidgets()
Removes pointers to deleted TargetInfoWidget objects.
Definition: Directory.cpp:903
void cleanupFileListWidgets()
Reomoves pointers to deleted ImageFileListWidget objects.
Definition: Directory.cpp:861
File name manipulation and expansion.
Definition: FileName.h:111
QList< ImageFileListWidget * > imageFileListViews()
Accessor for the list of ImageFileListWidgets currently available.
Definition: Directory.cpp:1022
$Date$ $Revision$
QStringList recentProjectsList()
Public accessor for the list of recent projects.
Definition: Directory.cpp:459
void save(QXmlStreamWriter &stream, Project *project, FileName newProjectRoot) const
This method saves the FootprintColumns in the project and the settings associated with every column...
~Directory()
The Destructor.
Definition: Directory.cpp:167
View for displaying footprints of images in a QMos like way.
virtual void setModel(ProjectItemModel *model)
Sets the model used by the view.
CnetEditorWidget * addCnetEditorView(Control *network)
Add the widget for the cnet editor view to the window.
Definition: Directory.cpp:469
QPointer< WorkOrder > m_importControlNetWorkOrder
The import ControlNetwork WorkOrder.
Definition: Directory.h:307
TargetInfoWidget * addTargetInfoView(TargetBodyQsp target)
Add target body data view widget to the window.
Definition: Directory.cpp:752
QList< QAction * > m_settingsMenuActions
List of menu settings actions.
Definition: Directory.h:323
MatrixSceneWidget * addMatrixView()
Add the matrix view widget to the window.
Definition: Directory.cpp:731
QList< QAction * > m_helpMenuActions
List of help menu actions.
Definition: Directory.h:324
void cleanupCnetEditorViewWidgets()
Removes pointers to deleted CnetEditorWidget objects.
Definition: Directory.cpp:845
void showWarning(QString text)
Displays a Warning.
Definition: Directory.cpp:1071
Directory * m_directory
Pointer to a Directory which is set by the XmlHandler class.
Definition: Directory.h:255
static bool actionTextLessThan(QAction *lhs, QAction *rhs)
This is for determining the ordering of the descriptive text of for the actions.
Definition: Directory.cpp:1362
$Date$ $Revision$
QPointer< WorkOrder > m_runJigsawWorkOrder
The Run Jigsaw WorkOrder.
Definition: Directory.h:316
QList< QAction * > viewMenuActions()
Get the list of actions that the Directory can provide for the view menu.
Definition: Directory.cpp:210
QList< QPointer< CubeDnView > > m_cubeDnViewWidgets
List of CubeDnCiew obs.
Definition: Directory.h:290
QPointer< ProjectItemModel > m_projectItemModel
Pointer to the ProjectItemModel.
Definition: Directory.h:282
History Widget for cnetsuite.
void populateMainMenu(QMenuBar *)
This method sets up the main menu at the top of the window (File, Settings, ...)
Definition: Directory.cpp:346
This widget encompasses the entire matrixDisplay scene.
This is a child of class WorkOrder which is used for anything that performs an action in a Project...
ControlPointEditView * controlPointEditView()
Gets the ControlPointEditWidget associated with the Directory.
Definition: Directory.cpp:1036
void cleanupMatrixViewWidgets()
Removes pointers to deleted MatrixSceneWidget objects.
Definition: Directory.cpp:887
This error is for when a programmer made an API call that was illegal.
Definition: IException.h:154
void setRecentProjectsList(QStringList recentProjects)
Add recent projects to the recent projects list.
Definition: Directory.cpp:450
Control * activeControl()
Return the Active Control (control network)
Definition: Project.cpp:1182
QList< TargetInfoWidget * > targetInfoViews()
Accessor for the list of TargetInfoWidgets currently available.
Definition: Directory.cpp:992
CubeDnView * addCubeDnView()
Add the qview workspace to the window.
Definition: Directory.cpp:562
Project * project() const
Gets the Project for this directory.
Definition: Directory.cpp:923
void updateRecentProjects(Project *project)
Adds a new Project object to the list of recent projects if it has not already been added...
Definition: Directory.cpp:913
View for editing a single ControlPoint.
QList< QAction * > m_projectMenuActions
List of project menu actions.
Definition: Directory.h:320
QList< QAction * > permToolBarActions()
Get the list of actions that the Directory can provide for the permanent Tool Bar.
Definition: Directory.cpp:237
Provides access to data stored in a Project through Qt&#39;s model-view framework.
QAction * undoAction()
Creates an Action to undo the last action.
Definition: Directory.cpp:1089
QPointer< WorkOrder > m_openProjectWorkOrder
The Open Project WorkOrder.
Definition: Directory.h:310
QList< QAction * > m_fileMenuActions
List of file menu actions.
Definition: Directory.h:319
void load(XmlStackedHandlerReader *xmlReader)
Loads the Directory from an XML file.
Definition: Directory.cpp:1098
QList< Footprint2DView * > footprint2DViews()
Accessor for the list of Footprint2DViews currently available.
Definition: Directory.cpp:1007
virtual bool startElement(const QString &namespaceURI, const QString &localName, const QString &qName, const QXmlAttributes &atts)
The XML reader invokes this method at the start of every element in the XML document.
Definition: Directory.cpp:1182
QList< QAction * > settingsMenuActions()
Get the list of actions that the Directory can provide for the settings menu.
Definition: Directory.cpp:219
Warning Widget for cnetsuite.
QPointer< WorkOrder > m_importShapesWorkOrder
The import shapes WorkOrder.
Definition: Directory.h:309
QList< QAction * > fileMenuActions()
Get the list of actions that the Directory can provide for the file menu.
Definition: Directory.cpp:183
Directory(QObject *parent=0)
The Constructor.
Definition: Directory.cpp:99
ProjectItemModel * model()
Gets the ProjectItemModel for this directory.
Definition: Directory.cpp:828
Parent class for anything that performs an action in Project.
Definition: WorkOrder.h:104
ProjectItemTreeView * addProjectItemTreeView()
Adds a ProjectItemTreeView to the window.
Definition: Directory.cpp:816
QList< QAction * > m_editMenuActions
List of edit menu actions.
Definition: Directory.h:321
QList< SensorInfoWidget * > sensorInfoViews()
Accessor for the list of SensorInfoWidgets currently available.
Definition: Directory.cpp:977
QString displayName() const
Returns the display name.
QList< QPointer< Footprint2DView > > m_footprint2DViewWidgets
List of Footprint2DView objs.
Definition: Directory.h:292
QAction * redoAction()
Creates an Action to redo the last action.
Definition: Directory.cpp:1080
ControlPointEditWidget * controlPointEditWidget() const
Returns the ControlPointEditWidget.
QSharedPointer< TargetBody > TargetBodyQsp
Defines A smart pointer to a TargetBody obj.
Definition: TargetBody.h:224
QList< QProgressBar * > progressBars()
Gets the ControlNetEditor associated with this the Directory.
Definition: Directory.cpp:1061
#define _FILEINFO_
Macro for the filename and line number.
Definition: IException.h:38
QPointer< WorkOrder > m_saveProjectAsWorkOrder
The Save Project As WorkOrder.
Definition: Directory.h:312
A ProjectItemTreeView displays items from a ProjectItemProxyModel in a tree structure.
void setWarningContainer(QDockWidget *warningContainer)
Set up the warning info in the warning dockable widget.
Definition: Directory.cpp:438
void setControl(Control *control)
New control network being edited.
Widget for displaying information about a target.
QList< CubeDnView * > cubeDnViews()
Accessor for the list of CubeDnViews currently available.
Definition: Directory.cpp:947
A single control point.
Definition: ControlPoint.h:339
void setHistoryContainer(QDockWidget *historyContainer)
Set up the history info in the history dockable widget.
Definition: Directory.cpp:426
void cleanupCubeDnViewWidgets()
Removes pointers to deleted CubeDnView objects.
Definition: Directory.cpp:853
QString fileName() const
Access the name of the control network file associated with this Control.
Definition: Control.cpp:171
QList< QPointer< CnetEditorWidget > > m_cnetEditorViewWidgets
List of CnetEditorWidgets.
Definition: Directory.h:289
ControlNet * controlNet()
Open and return a pointer to the ControlNet for this Control.
Definition: Control.cpp:106
void setSerialNumberList(SerialNumberList *snList)
Set the serial number list.
QPointer< WorkOrder > m_openRecentProjectWorkOrder
The Open Recent Project WorkOrder.
Definition: Directory.h:313
QPointer< Project > m_project
Pointer to the Project.
Definition: Directory.h:286
QList< QAction * > m_toolPadActions
List of ToolPad actions.
Definition: Directory.h:328
XmlHandler(Directory *directory)
This function sets the Directory pointer for the Directory::XmlHandler class.
Definition: Directory.cpp:1155
Unless noted otherwise, the portions of Isis written by the USGS are public domain.
QWidget * warningWidget()
Returns a pointer to the warning widget.
Definition: Directory.cpp:837
ControlDisplayProperties * displayProperties()
Access a pointer to the display properties for the control network.
Definition: Control.cpp:151
QPointer< HistoryTreeWidget > m_historyTreeWidget
Pointer to the HistoryTreeWidget.
Definition: Directory.h:285
QSharedPointer< GuiCamera > GuiCameraQsp
GuiCameraQsp Represents a smart pointer to a GuiCamera object.
Definition: GuiCamera.h:188
QList< QAction * > m_permToolBarActions
List of perm ToolBar actions.
Definition: Directory.h:326
$Date$ $Revision$
QPointer< WorkOrder > m_renameProjectWorkOrder
The Rename Project WorkOrder.
Definition: Directory.h:317
A colored, grouped cube list.
ImageFileListWidget * addImageFileListView()
Add an imageFileList widget to the window.
Definition: Directory.cpp:794
QList< QAction * > m_viewMenuActions
List of view menu actions.
Definition: Directory.h:322
View that displays cubes in a QView-like way.
Definition: CubeDnView.h:74
QPointer< WarningTreeWidget > m_warningTreeWidget
Pointer to the WarningTreeWidget.
Definition: Directory.h:287
void updateControlNetEditConnections()
Updates the SIGNAL/SLOT connections for the cotrol net editor.
Definition: Directory.cpp:1371
SensorInfoWidget * addSensorInfoView(GuiCameraQsp camera)
Add sensor data view widget to the window.
Definition: Directory.cpp:773
QList< QAction * > helpMenuActions()
Get the list of actions that the Directory can provide for the help menu.
Definition: Directory.cpp:228
Footprint2DView * addFootprint2DView()
Add the qmos view widget to the window.
Definition: Directory.cpp:599
QList< QPointer< MatrixSceneWidget > > m_matrixViewWidgets
List of MatrixSceneWidgets.
Definition: Directory.h:295
Isis exception class.
Definition: IException.h:99
QPointer< WorkOrder > m_exportImagesWorkOrder
The export images WorkOrder.
Definition: Directory.h:306
QPointer< WorkOrder > m_exportControlNetWorkOrder
The export ControlNetwork WorkOrder.
Definition: Directory.h:305
QList< QPointer< TargetInfoWidget > > m_targetInfoWidgets
List of TargetInfoWidgets.
Definition: Directory.h:297
QPointer< WorkOrder > m_importImagesWorkOrder
The import images WorkOrder.
Definition: Directory.h:308
QList< QAction * > m_activeToolBarActions
List of active ToolBar actions.
Definition: Directory.h:327
Scrolled widget for display ChipViewports.
void cleanupFootprint2DViewWidgets()
Removes pointers to deleted Footprint2DView objects.
Definition: Directory.cpp:870
void cleanupControlPointEditViewWidget()
Delete the ControlPointEditWidget and set it&#39;s pointer to NULL.
Definition: Directory.cpp:878
void cleanupSensorInfoWidgets()
Removes pointers to deleted SensorInfoWidget objects.
Definition: Directory.cpp:895
QStringList m_recentProjects
List of the names of recent projects.
Definition: Directory.h:301
QList< QPointer< WorkOrder > > m_workOrders
List of WorkOrders.
Definition: Directory.h:299
his enables stack-based XML parsing of XML files.
QString projectRoot() const
Get the top-level folder of the project.
Definition: Project.cpp:1087
$Date$ $Revision$
Unless noted otherwise, the portions of Isis written by the USGS are public domain.
QList< QPointer< ImageFileListWidget > > m_fileListWidgets
List of ImageFileListWidgets.
Definition: Directory.h:291
This widget provides full editing, filtering and viewing capabilities for the raw data in a control n...
$Date$ $Revision$
void initializeActions()
Initializes the actions that the Directory can provide to a main window.
Definition: Directory.cpp:263
static QList< QAction * > restructureActions(QList< QPair< QString, QList< QAction * > > >)
Reformat actionPairings to be user friendly for use in menus.
Definition: Directory.cpp:1262
QPointer< WorkOrder > m_closeProjectWorkOrder
The Close Project WorkOrder.
Definition: Directory.h:314
IO Handler for Isis Cubes.
Definition: Cube.h:158
QList< CnetEditorWidget * > cnetEditorViews()
Returns a list of all the control network views for this directory.
Definition: Directory.cpp:932

U.S. Department of the Interior | U.S. Geological Survey
ISIS | Privacy & Disclaimers | Astrogeology Research Program
To contact us, please post comments and questions on the ISIS Support Center
File Modified: 07/12/2023 23:17:34