Isis 3 Developer Reference
Project.h
Go to the documentation of this file.
1 #ifndef Project_H
2 #define Project_H
3 
25 #include <QDir>
26 #include <QObject>
27 #include <QPointer>
28 #include <QStringList>
29 #include <QUndoStack>
30 #include <QXmlDefaultHandler>
31 
32 class QMutex;
33 class QProgressBar;
34 class QXmlAttributes;
35 class QXmlStreamWriter;
36 
37 #include "ControlList.h"
38 #include "Directory.h"
39 #include "GuiCameraList.h"
40 #include "ImageList.h"
41 #include "ShapeList.h"
42 #include "TargetBody.h"
43 #include "TemplateList.h"
44 #include "XmlStackedHandler.h"
45 
46 namespace Isis {
47  class BundleSolutionInfo;
48  class BundleSettings;
49  class Control;
50  class ControlList;
51  class CorrelationMatrix;
52  class FileName;
53  class Shape;
54  class ImageReader;
55  class ProgressBar;
56  class ShapeReader;
57  class Template;
58  class TemplateList;
59  class WorkOrder;
60 
289  class Project : public QObject {
290  Q_OBJECT
291  public:
292  Project(Directory &directory, QObject *parent = 0);
293  ~Project();
294 
297 // static QStringList verifyCNets(QStringList);
298 
300 
301  bool hasTarget(QString id);
302  bool hasCamera(QString id);
303 
304  QDir addBundleSolutionInfoFolder(QString folder);
305  QDir addCnetFolder(QString prefix);
306  void addControl(Control *control);
307  QDir addImageFolder(QString prefix);
308  void addImages(QStringList imageFiles);
309  void addImages(ImageList newImages);
311  QDir addShapeFolder(QString prefix);
312  void addShapes(QStringList shapeFiles);
313  void addShapes(ShapeList newShapes);
314  void addTemplates(TemplateList *templateFiles);
315  QDir addTemplateFolder(QString prefix);
317  void addTarget(Target *target);
318  void addCamera(Camera *camera);
319 
321  void clear();
322  bool clearing();
323  Control *control(QString id);
324  Directory *directory() const;
325  Image *image(QString id);
326  ImageList *imageList(QString name);
327  Shape *shape(QString id);
328  ShapeList *shapeList(QString name);
329  // CorrelationMatrix *correlationMatrix();
330  bool isTemporaryProject() const;
331  bool isOpen();
332  bool isClean();
334  const WorkOrder *lastNotUndoneWorkOrder() const;
335  QString name() const;
336  QMutex *workOrderMutex();
337  QMutex *mutex();
338  QString projectRoot() const;
339  QString newProjectRoot() const;
340 
341  void setName(QString newName);
342  QUndoStack *undoStack();
346  void writeSettings(FileName projName) const;
347 
348  void setActiveControl(QString displayName);
350  void setActiveImageList(QString displayName);
352 
353  static QString cnetRoot(QString projectRoot);
354  QString cnetRoot() const;
356  ControlList *controlList(QString name);
357 
358  static QString imageDataRoot(QString projectRoot);
359  QString imageDataRoot() const;
361 
362  static QString shapeDataRoot(QString projectRoot);
363  QString shapeDataRoot() const;
365 
366  static QString targetBodyRoot(QString projectRoot);
367  QString targetBodyRoot() const;
369 
370  static QString resultsRoot(QString projectRoot);
371  QString resultsRoot() const;
372  static QString bundleSolutionInfoRoot(QString projectRoot);
373  QString bundleSolutionInfoRoot() const;
375 
376  static QString templateRoot(QString projectRoot);
377  QString templateRoot() const;
381  void removeTemplate(FileName file);
382 
383  void deleteAllProjectFiles();
384  void relocateProjectRoot(QString newRoot);
385 
390  BundleSettings *bundleSettings() {return m_bundleSettings;}
391 
396  static int maxRecentProjects() { return m_maxRecentProjects; }
397 
399 
401 
402  bool save();
403  void save(FileName projectPath, bool verifyPathDoesntExist = true);
404 
405  void addToProject(WorkOrder *);
406 
407  template<typename Data> void warn(QString text, Data relevantData);
408 
409  void warn(QString text);
410 
411  signals:
415 // void allImagesClosed();
416 
422 
428 
433  void activeControlSet(bool boolean);
434 
443  void allControlsRemoved();
444 
450 
456 
461  void activeImageListSet();
462 
468 
475 
481 
487 
492  void targetsAdded(TargetBodyList *targets);
493 
498  void guiCamerasAdded(GuiCameraList *targets);
499 
504  void nameChanged(QString newName);
505 
510  void projectLoaded(Project *);
511 
516  void projectSaved(Project *);
517 
522  void projectRelocated(Project *);
523 
528 
533 
534  void templatesAdded(TemplateList *newTemplates);
535 
537 
542  void activeControlModified();
543 
548  void cnetSaved(bool value);
549 
550  public slots:
551  void open(QString);
552  void setClean(bool value);
553  void cnetModified();
554 
555  private slots:
556  void controlClosed(QObject *control);
557  void controlListDeleted(QObject *controlList);
558  void imagesReady(ImageList);
559  void imageClosed(QObject *image);
560  void imageListDeleted(QObject *imageList);
561  void bundleSolutionInfoClosed(QObject *bundleSolutionInfo);
562  void targetBodyClosed(QObject *targetBodyObj);
563  void shapesReady(ShapeList shapes);
564  void shapeClosed(QObject *shape);
565  void shapeListDeleted(QObject *shapeList);
566  void checkActiveControlAndImageList();
567  void checkControlsAndImagesAvailable();
568 
569  private:
570  Project(const Project &other);
571  Project &operator=(const Project &rhs);
572  void createFolders();
573 
574  ControlList *createOrRetrieveControlList(QString name, QString path = "");
575  ImageList *createOrRetrieveImageList(QString name, QString path = "");
576  ShapeList *createOrRetrieveShapeList(QString name, QString path = "");
577 
578  void writeSettings();
579 
580 
581  QString nextImageListGroupName();
582 // void removeImage(Image *image);
583 
584  void save(QXmlStreamWriter &stream, FileName newProjectRoot) const;
585  void saveHistory(QXmlStreamWriter &stream) const;
586  void saveWarnings(QXmlStreamWriter &stream) const;
587 
588  void storeWarning(QString text);
589  void storeWarning(QString text, const ImageList &relevantData);
590 
591  private:
597  class XmlHandler : public XmlStackedHandler {
598  public:
599  XmlHandler(Project *project);
600 
601  virtual bool startElement(const QString &namespaceURI, const QString &localName,
602  const QString &qName, const QXmlAttributes &atts);
603  virtual bool endElement(const QString &namespaceURI, const QString &localName,
604  const QString &qName);
605 
606  private:
607  Q_DISABLE_COPY(XmlHandler);
608 
609  Project *m_project;
610  QList<ImageList *> m_imageLists;
611  QList<ShapeList *> m_shapeLists;
612  QList<ControlList *> m_controls;
613  QList<BundleSolutionInfo *> m_bundleSolutionInfos;
614  QList<TemplateList *> m_mapTemplateLists;
615  QList<TemplateList *> m_regTemplateLists;
616  WorkOrder *m_workOrder;
617  };
618 
619  private:
620 
621  static const int m_maxRecentProjects = 5;
622  QDir *m_projectRoot;
623  QString m_newProjectRoot;
624  QDir *m_cnetRoot;
625  QDir m_currentCnetFolder;
626  QPointer<Directory> m_directory;
627  QList<ImageList *> *m_images;
628  QList<ControlList *> *m_controls;
629  QList<ShapeList *> *m_shapes;
630  TargetBodyList *m_targets;
631  QList<TemplateList *> *m_mapTemplates;
632  QList<TemplateList *> *m_regTemplates;
633  GuiCameraList *m_guiCameras;
634  QList<BundleSolutionInfo *> *m_bundleSolutionInfo;
635 
636  QPointer<Control> m_activeControl;
637  QPointer<ImageList> m_activeImageList;
638 
639 
640  // TODO: kle testing - this will almost certainly be changed
641  BundleSettings *m_bundleSettings;
649 // CorrelationMatrix *m_correlationMatrix;
650 
651  QMap<QString, Control *> *m_idToControlMap;
652  QMap<QString, Image *> *m_idToImageMap;
653  QMap<QString, Shape *> *m_idToShapeMap;
654  QMap<QString, BundleSolutionInfo *> *m_idToBundleSolutionInfoMap;
655  QMap<QString, TargetBody *> *m_idToTargetBodyMap;
656  QMap<QString, GuiCamera *> *m_idToGuiCameraMap;
657 
658  QString m_name;
659  QStringList *m_warnings;
660  QList< QPointer<WorkOrder> > *m_workOrderHistory;
661 
662  QPointer<ImageReader> m_imageReader;
663  //QList<QPair<QString, Data> > m_storedWarnings;
664  bool m_isTemporaryProject;
665  bool m_isOpen;
666  bool m_isClean;
667  bool m_clearing;
668  int m_numImagesCurrentlyReading;
669 
670  QMutex *m_mutex;
671  QMutex *m_workOrderMutex;
672  QMutex *m_imageReadingMutex;
673 
674  int m_numShapesCurrentlyReading;
675  QMutex *m_shapeMutex;
676  QPointer<ShapeReader> m_shapeReader;
677  QMutex *m_shapeReadingMutex;
678 
679  QUndoStack m_undoStack;
680 
681  };
682 }
683 
685 
686 #endif // Project_H
void imageListAdded(ImageList *images)
Emitted when new ImageList added to Project receivers: ProjectTreeWidget.
This represents an ISIS control net in a project-based GUI interface.
Definition: Control.h:79
Internalizes a list of shapes and allows for operations on the entire list.
Definition: ShapeList.h:33
void waitForImageReaderFinished()
Locks program if another spot in code is still running and called this function.
Definition: Project.cpp:1732
QDir addImageFolder(QString prefix)
Create and return the name of a folder for placing images.
Definition: Project.cpp:1003
QString cnetRoot() const
Get where control networks ought to be stored inside the project.
Definition: Project.cpp:2029
Internalizes a list of images and allows for operations on the entire list.
Definition: ImageList.h:55
void activeControlModified()
Emmited in cnetModified() when the actice control is modified.
BundleSettings * bundleSettings()
Return BundleSettings objects in Project.
Definition: Project.h:390
QList< ShapeList * > shapes()
Return the projects shapelist.
Definition: Project.cpp:2106
The main project for ipce.
Definition: Project.h:289
bool isClean()
Accessor to determine whether the current project is Unsaved.
Definition: Project.cpp:1584
void removeImages(ImageList &imageList)
Definition: Project.cpp:2786
~Project()
Clean up the project.
Definition: Project.cpp:257
void projectSaved(Project *)
Emitted when project is saved.
void allControlsRemoved()
Emitted when all controls have been removed from the Project.
File name manipulation and expansion.
Definition: FileName.h:116
QList< WorkOrder * > workOrderHistory()
Get the entire list of work orders that have executed.
Definition: Project.cpp:1748
Container class for BundleAdjustment results.
Definition: BundleSolutionInfo.h:171
bool hasTarget(QString id)
This method checks for the existence of a target based on TargetName.
Definition: Project.cpp:2715
Control * control(QString id)
Accessor for if the project is clearing or not.
Definition: Project.cpp:1163
void addCamera(Camera *camera)
Adds a new camera to the project.
Definition: Project.cpp:2761
static int maxRecentProjects()
Return max number of recent projects to be displayed.
Definition: Project.h:396
QMutex * mutex()
Return mutex used for Naif calls.
Definition: Project.cpp:1658
WorkOrder * lastNotUndoneWorkOrder()
Return the last not undone workorder.
Definition: Project.cpp:1605
Shape * shape(QString id)
Return a shape given its id.
Definition: Project.cpp:1539
Maintains a list of Controls so that control nets can easily be copied from one Project to another...
Definition: ControlList.h:36
Definition: TemplateList.h:49
void open(QString)
Open the project at the given path.
Definition: Project.cpp:1345
void addTarget(Target *target)
Adds a new target to the project.
Definition: Project.cpp:2730
void removeTemplate(FileName file)
void addImagesToIdMap(ImageList images)
Add images to the id map which are not under the projects main data area, the Images node on the proj...
Definition: Project.cpp:2778
bool clearing()
Definition: Project.cpp:666
QString targetBodyRoot() const
Accessor for the root directory of the target body data.
Definition: Project.cpp:2186
void addControl(Control *control)
Add the given Control&#39;s to the current project.
Definition: Project.cpp:958
void controlsAndImagesAvailable()
Emitted when at least one cnet and image have been added to the project.
void controlListAdded(ControlList *controls)
apparently not used?
void activeControlAndImageListSet()
Emitted when both an active control and active image list have been set.
ControlList * controlList(QString name)
Return controlslist matching name in Project.
Definition: Project.cpp:2048
QList< TemplateList * > regTemplates()
Return registration template FileNames.
Definition: Project.cpp:2166
QList< TemplateList * > templates()
Return all template FileNames.
Definition: Project.cpp:2145
QUndoStack * undoStack()
Returns the Projects stack of QUndoCommands.
Definition: Project.cpp:1694
List for holding TargetBodies.
Definition: TargetBodyList.h:33
bool isTemporaryProject() const
Returns if the project is a temp project or not.
Definition: Project.cpp:1567
bool hasCamera(QString id)
This method checks for the existence of a camera based on InstrumentId.
Definition: Project.cpp:2745
QString imageDataRoot() const
Accessor for the root directory of the image data.
Definition: Project.cpp:2077
ShapeList * shapeList(QString name)
Return a shapelist given its name.
Definition: Project.cpp:1549
void clear()
Function to clear out all values in a project essentially making it a new project object...
Definition: Project.cpp:459
Control * activeControl()
Return the Active Control (control network)
Definition: Project.cpp:1903
void addTemplates(TemplateList *templateFiles)
Add new templates to m_mapTemplates or m_regTemplates and update project item model.
Definition: Project.cpp:1113
void projectLoaded(Project *)
Emitted when project loaded receivers: IpceMainWindow, Directory, HistoryTreeWidget.
QList< ImageList * > images()
Return projects imagelist.
Definition: Project.cpp:2115
void workOrderStarting(WorkOrder *)
Emitted when work order starts.
void waitForShapeReaderFinished()
Locks program if another spot in code is still running and called this function.
Definition: Project.cpp:1740
void relocateProjectRoot(QString newRoot)
This is called when the project is moved.
Definition: Project.cpp:2305
void setActiveControl(QString displayName)
Set the Active Control (control network)
Definition: Project.cpp:1819
QList< TemplateList * > mapTemplates()
Return map template FileNames.
Definition: Project.cpp:2156
Definition: Camera.h:249
void addBundleSolutionInfo(BundleSolutionInfo *bundleSolutionInfo)
Add the given BundleSolutionInfo to the current project.
Definition: Project.cpp:1194
QMutex * workOrderMutex()
This function returns a QMutex.
Definition: Project.cpp:2986
void discardActiveControlEdits()
Directory * directory() const
Returns the directory associated with this Project.
Definition: Project.cpp:1229
Q_DECLARE_METATYPE(Isis::Project *)
void addToProject(WorkOrder *)
This executes the WorkOrder and stores it in the project.
Definition: Project.cpp:2598
Provide Undo/redo abilities, serialization, and history for an operation.
Definition: WorkOrder.h:322
QString shapeDataRoot() const
Accessor for the root directory of the shape model data.
Definition: Project.cpp:2097
void bundleSolutionInfoAdded(BundleSolutionInfo *bundleSolutionInfo)
Emitted when new BundleSolutionInfo available from jigsaw receivers: ProjectTreeWidget (TODO: should ...
void cnetModified()
When a cnet is modified, set the project state to not clean.
Definition: Project.cpp:1924
void activeImageListSet()
Emitted when an active image list is set.
void deleteAllProjectFiles()
Delete all of the files, that this project stores, from disk.
Definition: Project.cpp:2251
Container class for BundleAdjustment settings.
Definition: BundleSettings.h:138
void loadBundleSolutionInfo(BundleSolutionInfo *bundleSolutionInfo)
Loads bundle solution info into project.
Definition: Project.cpp:1210
TargetBodyList targetBodies()
Return TargetBodyList in Project.
Definition: Project.cpp:2194
XML Handler that parses XMLs in a stack-oriented way.
Definition: XmlStackedHandler.h:112
void guiCamerasAdded(GuiCameraList *targets)
Emitted when new GuiCamera objects added to project receivers: Directory.
ImageList * activeImageList()
Returns the active ImageList.
Definition: Project.cpp:2003
void controlAdded(Control *control)
Emitted when new Control added to Project receivers: ProjectTreeWidget.
This represents a cube in a project-based GUI interface.
Definition: Image.h:107
QDir addBundleSolutionInfoFolder(QString folder)
Create and return the name of a folder for placing BundleSolutionInfo.
Definition: Project.cpp:1174
QString projectRoot() const
Get the top-level folder of the project.
Definition: Project.cpp:1666
void projectRelocated(Project *)
Emitted when project location moved receivers: Control, BundleSolutionInfo, Image, TargetBody.
void addShapes(QStringList shapeFiles)
Read the given shape model cube file names as Images and add them to the project. ...
Definition: Project.cpp:1089
QList< QAction * > userPreferenceActions()
Get a list of configuration/settings actions related to reading images into this Project.
Definition: Project.cpp:916
QList< ControlList * > controls()
Return controls in project.
Definition: Project.cpp:2038
Image * image(QString id)
Return an image given its id.
Definition: Project.cpp:1509
void shapesAdded(ShapeList *shapes)
Emitted when new shape model images are available.
QString newProjectRoot() const
Get the top-level folder of the new project.
Definition: Project.cpp:1675
void addImages(QStringList imageFiles)
Read the given cube file names as Images and add them to the project.
Definition: Project.cpp:1032
void warn(QString text, Data relevantData)
Definition: Project.cpp:2643
QString name() const
Get the project&#39;s GUI name.
Definition: Project.cpp:1625
This class is used to create and store valid Isis3 targets.
Definition: Target.h:76
QString templateRoot() const
Accessor for the root directory of the template data.
Definition: Project.cpp:2135
QDir addShapeFolder(QString prefix)
Create and return the name of a folder for placing shape models.
Definition: Project.cpp:1060
List of GuiCameras saved as QSharedPointers.
Definition: GuiCameraList.h:35
void nameChanged(QString newName)
Emitted when project name is changed receivers: ProjectTreeWidget.
void imagesAdded(ImageList *images)
Emitted when new images are available.
bool save()
Generic save method to save the state of the project.
Definition: Project.cpp:2324
void setActiveImageList(QString displayName)
Set the Active ImageList from the displayName which is saved in project.xml.
Definition: Project.cpp:1955
QList< BundleSolutionInfo * > bundleSolutionInfo()
Return BundleSolutionInfo objects in Project.
Definition: Project.cpp:2223
void cnetSaved(bool value)
Emmited in save() when the project is being saved Connected to Directory so that ControlPointEditWidg...
void setName(QString newName)
Change the project&#39;s name (GUI only, doesn&#39;t affect location on disk).
Definition: Project.cpp:1684
void activeControlSet(bool boolean)
Emitted when an active control is set.
This represents a shape in a project-based GUI interface.
Definition: Shape.h:78
QString resultsRoot() const
Accessor for the root directory of the results data.
Definition: Project.cpp:2214
void workOrderFinished(WorkOrder *)
Emitted when work order ends.
void templatesAdded(TemplateList *newTemplates)
Definition: BoxcarCachingAlgorithm.h:29
Namespace for ISIS/Bullet specific routines.
Definition: Apollo.h:31
void writeSettings(FileName projName) const
QString bundleSolutionInfoRoot() const
Accessor for the root directory of the results data.
Definition: Project.cpp:2243
void targetsAdded(TargetBodyList *targets)
Emitted when new TargetBody objects added to project receivers: Directory.
QDir addTemplateFolder(QString prefix)
Create and navigate to the appropriate template type folder in the project directory.
Definition: Project.cpp:1134
Definition: Directory.h:285
QDir addCnetFolder(QString prefix)
Create and return the name of a folder for placing control networks.
Definition: Project.cpp:926
Definition: CubeIoHandler.h:38
bool isOpen()
Accessor to determine whether a current project is Open.
Definition: Project.cpp:1575
QProgressBar * progress()
Definition: Project.cpp:1499
void setClean(bool value)
Function to change the clean state of the project.
Definition: Project.cpp:1595
ImageList * imageList(QString name)
Return an imagelist given its name.
Definition: Project.cpp:1520
Project(Directory &directory, QObject *parent=0)
Create a new Project.
Definition: Project.cpp:88