Isis 3 Programmer 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 
398  QProgressBar *progress();
399 
400  void removeImages(ImageList &imageList);
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 
536  void discardActiveControlEdits();
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:
558  void imagesReady(ImageList);
559  void imageClosed(QObject *image);
562  void targetBodyClosed(QObject *targetBodyObj);
563  void shapesReady(ShapeList shapes);
564  void shapeClosed(QObject *shape);
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 
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;
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
void controlClosed(QObject *control)
A control is being deleted from the project.
Definition: Project.cpp:2833
The main project for ipce.
Definition: Project.h:289
bool isClean()
Accessor to determine whether the current project is Unsaved.
Definition: Project.cpp:1584
~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.
bool hasTarget(QString id)
This method checks for the existence of a target based on TargetName.
Definition: Project.cpp:2715
void checkActiveControlAndImageList()
Checks if both an active control and active image list have been set.
Definition: Project.cpp:1767
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
void controlListDeleted(QObject *controlList)
An control list is being deleted from the project.
Definition: Project.cpp:2841
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
bool m_clearing
used to determine whether a project&#39;s changes are unsaved
Definition: Project.h:667
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
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
void targetBodyClosed(QObject *targetBodyObj)
A target body is being deleted from the project.
Definition: Project.cpp:2893
QList< TemplateList * > regTemplates()
Return registration template FileNames.
Definition: Project.cpp:2166
QList< TemplateList * > templates()
Return all template FileNames.
Definition: Project.cpp:2145
Q_DECLARE_METATYPE(Isis::Cube *)
This allows Cube *&#39;s to be stored in a QVariant.
QUndoStack * undoStack()
Returns the Projects stack of QUndoCommands.
Definition: Project.cpp:1694
List for holding TargetBodies.
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
void imagesReady(ImageList)
Prepare new images for opening.
Definition: Project.cpp:2666
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 saveHistory(QXmlStreamWriter &stream) const
Serialize the work orders into the given XML.
Definition: Project.cpp:851
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 createFolders()
This creates the project root, image root, and control net root directories.
Definition: Project.cpp:384
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
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 saveWarnings(QXmlStreamWriter &stream) const
Serialize the warnings into the given XML.
Definition: Project.cpp:874
Directory * directory() const
Returns the directory associated with this Project.
Definition: Project.cpp:1229
void checkControlsAndImagesAvailable()
Checks if at least one control and image have been added to the project.
Definition: Project.cpp:1784
void addToProject(WorkOrder *)
This executes the WorkOrder and stores it in the project.
Definition: Project.cpp:2598
void imageClosed(QObject *image)
An image is being deleted from the project.
Definition: Project.cpp:2802
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 shapeListDeleted(QObject *shapeList)
A shape model list is being deleted from the project.
Definition: Project.cpp:2856
void shapeClosed(QObject *shape)
A shape model is being deleted from the project.
Definition: Project.cpp:2954
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.
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.
void guiCamerasAdded(GuiCameraList *targets)
Emitted when new GuiCamera objects added to project receivers: Directory.
ImageList * activeImageList()
Returns the active ImageList.
Definition: Project.cpp:2003
virtual bool endElement(const QString &namespaceURI, const QString &localName, const QString &qName)
The xml parser for ending tags.
Definition: Project.cpp:3072
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 imageListDeleted(QObject *imageList)
An image list is being deleted from the project.
Definition: Project.cpp:2822
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
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
int m_numImagesCurrentlyReading
used to negate segfaults happening in post undos when clearning project
Definition: Project.h:668
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
void bundleSolutionInfoClosed(QObject *bundleSolutionInfo)
A BundleSolutionInfo object is being deleted from the project.
Definition: Project.cpp:2867
QString resultsRoot() const
Accessor for the root directory of the results data.
Definition: Project.cpp:2214
void workOrderFinished(WorkOrder *)
Emitted when work order ends.
QMap< QString, Control * > * m_idToControlMap
This variable will probably go away when we add the bundle results object because it will be under: B...
Definition: Project.h:651
Namespace for ISIS/Bullet specific routines.
Definition: Apollo.h:31
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
QDir addCnetFolder(QString prefix)
Create and return the name of a folder for placing control networks.
Definition: Project.cpp:926
bool isOpen()
Accessor to determine whether a current project is Open.
Definition: Project.cpp:1575
void setClean(bool value)
Function to change the clean state of the project.
Definition: Project.cpp:1595
bool m_isClean
used to determine whether a project is currently open
Definition: Project.h:666
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