Isis Developer Reference
WorkOrder.h
Go to the documentation of this file.
1#ifndef WorkOrder_H
2#define WorkOrder_H
3
10/* SPDX-License-Identifier: CC0-1.0 */
11
12
13#include <QAction>
14#include <QDateTime>
15// This is needed for the QVariant macro
16#include <QMetaType>
17#include <QPointer>
18#include <QUndoCommand>
19
20
21
22#include "CorrelationMatrix.h"
23#include "FileItem.h"
24#include "GuiCamera.h"
25#include "TargetBody.h"
26#include "XmlStackedHandler.h"
27
28template<typename T> class QFutureWatcher;
29class QMutex;
30class QXmlStreamWriter;
31
32namespace Isis {
33 class Control;
34 class ControlList;
35 class Directory;
36 class ImageList;
37 class ProgressBar;
38 class Project;
39 class ProjectItem;
40 class ShapeList;
41 class Template;
42 class XmlStackedHandlerReader;
43
311 class WorkOrder : public QAction, public QUndoCommand {
312 Q_OBJECT
313 public:
314
315
316
334
343
345 virtual ~WorkOrder();
346
347 virtual WorkOrder *clone() const = 0;
348
349 virtual bool isExecutable(Context);
350 virtual bool isExecutable(ImageList *images);
351 virtual bool isExecutable(ShapeList *shapes);
352 virtual bool isExecutable(ControlList *controls);
353 virtual bool isExecutable(CorrelationMatrix);
355 virtual bool isExecutable(Template *currentTemplate);
356 virtual bool isExecutable(GuiCameraQsp guiCamera);
357 virtual bool isExecutable(FileItemQsp fileItem);
358 virtual bool isExecutable(ProjectItem *item);
359
360 void read(XmlStackedHandlerReader *xmlReader);
361 void save(QXmlStreamWriter &stream) const;
362
363 virtual void setData(Context);
364 virtual void setData(QString data);
365 virtual void setData(ImageList *images);
366 virtual void setData(ShapeList *shapes);
367 virtual void setData(ControlList *controls);
368 virtual void setData(Template *currentTemplate);
369 virtual void setData(CorrelationMatrix);
370 virtual void setData(TargetBodyQsp targetBody);
371 virtual void setData(GuiCameraQsp guiCamera);
372 virtual void setData(FileItemQsp fileItem);
373 virtual void setData(ProjectItem *item);
374
375
376
377 void setNext(WorkOrder *nextWorkOrder);
378 void setPrevious(WorkOrder *previousWorkOrder);
379
380 QString bestText() const;
381 bool isUndoable() const;
382 bool isSavedToHistory() const;
383 bool isSynchronous() const;
384 bool createsCleanState() const;
385 QDateTime executionTime() const;
386 bool isFinished() const;
387 bool isRedoing() const;
388 bool isRedone() const;
389 bool isUndoing() const;
390 bool isUndone() const;
391 bool modifiesDiskState() const;
392 WorkOrder *next() const;
393 WorkOrder *previous() const;
394 QString statusText() const;
395
397
398 static WorkOrderStatus fromStatusString(QString);
399 static QString toString(WorkOrderStatus);
400
401 signals:
403 // This is necessary because QTreeWidget doesn't support us just deleting the progress bar..
404 // HistoryWidget relies on this signal.
408
409 public slots:
410 void enableWorkOrder();
411 void disableWorkOrder();
412
413 virtual bool setupExecution();
414
415 virtual void execute();
416
417 virtual void redo();
418 virtual void undo();
419
420 protected:
421 WorkOrder(const WorkOrder &other);
422
424 const ImageList *imageList() const;
425
427 const ShapeList *shapeList() const;
428
430
431 QPointer<ControlList> controlList();
432
434
436
438
440
441 virtual bool dependsOn(WorkOrder *other) const;
442
443 Directory *directory() const;
444 Project *project() const;
445
447 void setModifiesDiskState(bool changesProjectOnDisk);
448 void setInternalData(QStringList data);
449
450 int progressMin() const;
451 int progressMax() const;
452 int progressValue() const;
453 void setProgressRange(int, int);
454 void setProgressValue(int);
455
457 virtual void postExecution();
458 virtual void undoExecution();
459 virtual void postUndoExecution();
460
461 protected slots:
462 void addCloneToProject();
463
464 private:
465 bool isInStableState() const;
466 void listenForImageDestruction();
467 void listenForShapeDestruction();
468 void resetProgressBar();
469 void setProgressToFinalText();
470
471 private slots:
472 void attemptQueuedAction();
473 void executionFinished();
474 void clearImageList();
475 void clearShapeList();
476 void updateProgress();
477 void startRedo();
478
479 private:
483 enum QueuedWorkOrderAction {
484 NoQueuedAction,
485 RedoQueuedAction,
486 UndoQueuedAction
487 };
488
497 class XmlHandler : public XmlStackedHandler {
498 public:
499 XmlHandler(WorkOrder *workOrder);
500
501 virtual bool startElement(const QString &namespaceURI, const QString &localName,
502 const QString &qName, const QXmlAttributes &atts);
503
504 private:
505 Q_DISABLE_COPY(XmlHandler);
506
511 WorkOrder *m_workOrder;
512 };
513
514 protected:
524
531
538
540
541 private:
542 WorkOrder &operator=(const WorkOrder &rhs);
543
549 bool m_createsCleanState;
550
556 bool m_modifiesDiskState;
557
558 QueuedWorkOrderAction m_queuedAction;
559
563 int m_progressRangeMinValue;
567 int m_progressRangeMaxValue;
571 int m_progressValue;
572
573 Context m_context;
574 QString m_data;
575 QPointer<ImageList> m_imageList;
576 QPointer<ShapeList> m_shapeList;
577 QPointer<ControlList> m_controlList;
578 CorrelationMatrix m_correlationMatrix;
583 GuiCameraQsp m_guiCamera;
584
585
590 Template *m_template;
591
592
597 TargetBodyQsp m_targetBody;
598
599
603 FileItemQsp m_fileItem;
604
605
610 QStringList m_imageIds;
611
616 QStringList m_shapeIds;
617
621 QStringList m_internalData;
622
626 QPointer<WorkOrder> m_nextWorkOrder;
627
631 QPointer<WorkOrder> m_previousWorkOrder;
632
636 QPointer<Project> m_project;
637
642 QMutex *m_transparentConstMutex;
643
647 QDateTime m_executionTime;
648
654 QPointer< QFutureWatcher<void> > m_futureWatcher;
655
656
657
661 QPointer<ProgressBar> m_progressBar;
662
666 QPointer<QTimer> m_progressBarUpdateTimer;
667
671 QPointer<QTimer> m_progressBarDeletionTimer;
672
673
677 QTime *m_elapsedTimer;
678
682 double m_secondsElapsed;
683 };
684}
685
688
689#endif
Q_DECLARE_METATYPE(Isis::WorkOrder *)
This allows WorkOrder *'s to be stored in a QVariant.
Maintains a list of Controls so that control nets can easily be copied from one Project to another,...
Definition ControlList.h:44
This is a container for the correlation matrix that comes from a bundle adjust.
Definition CorrelationMatrix.h:61
Definition Directory.h:271
Internalizes a list of images and allows for operations on the entire list.
Definition ImageList.h:55
Definition ProgressBar.h:15
The main project for ipce.
Definition Project.h:289
Represents an item of a ProjectItemModel in Qt's model-view framework.
Definition ProjectItem.h:134
Internalizes a list of shapes and allows for operations on the entire list.
Definition ShapeList.h:33
Definition Template.h:30
Provide Undo/redo abilities, serialization, and history for an operation.
Definition WorkOrder.h:311
void creatingProgress(WorkOrder *)
void enableWorkOrder()
Enables the work order.
Definition WorkOrder.cpp:1216
void setNext(WorkOrder *nextWorkOrder)
Sets the next WorkOrder in the sequence.
Definition WorkOrder.cpp:611
void finished(WorkOrder *)
ShapeList * shapeList()
@briefReturns a pointer to the ShapeList for this WorkOrder.
Definition WorkOrder.cpp:661
bool m_isSavedToHistory
Set the work order to be shown in the HistoryTreeWidget.
Definition WorkOrder.h:537
void setProgressRange(int, int)
Sets the progress range of the WorkOrder.
Definition WorkOrder.cpp:1356
int progressMax() const
Gets the maximum value of the progress range of the WorkOrder.
Definition WorkOrder.cpp:1335
virtual void setData(Context)
Sets the context data for this WorkOrder.
Definition WorkOrder.cpp:246
WorkOrder * next() const
Gets the next WorkOrder.
Definition WorkOrder.cpp:932
bool modifiesDiskState() const
Returns the modified disk state.
Definition WorkOrder.cpp:922
void read(XmlStackedHandlerReader *xmlReader)
Read this work order's data from disk.
Definition WorkOrder.cpp:518
bool m_isSynchronous
This is defaulted to true.
Definition WorkOrder.h:530
bool isUndoing() const
Returns the WorkOrderUndoing state.
Definition WorkOrder.cpp:901
virtual void undoExecution()
Execute the steps necessary to undo this workorder.
Definition WorkOrder.cpp:1432
virtual void postUndoExecution()
Perform any steps necessary after an undo of a workorder.
Definition WorkOrder.cpp:1443
Template * getTemplate()
WorkOrder::getTemplate.
Definition WorkOrder.cpp:734
void save(QXmlStreamWriter &stream) const
: Saves a WorkOrder to a data stream.
Definition WorkOrder.cpp:542
bool isRedone() const
Returns the WorkOrder redone status.
Definition WorkOrder.cpp:891
virtual void redo()
Starts (or enqueues) a redo.
Definition WorkOrder.cpp:1041
WorkOrderStatus
This enumeration is used by other functions to set and retrieve the current state of the WorkOrder.
Definition WorkOrder.h:321
@ WorkOrderUnknownStatus
Definition WorkOrder.h:322
@ WorkOrderNotStarted
Definition WorkOrder.h:323
@ WorkOrderUndone
Definition WorkOrder.h:327
@ WorkOrderRedoing
Definition WorkOrder.h:324
@ WorkOrderUndoing
Definition WorkOrder.h:326
@ WorkOrderFinished
This is used for work orders that will not undo or redo (See createsCleanState())
Definition WorkOrder.h:331
@ WorkOrderLastStatus
Definition WorkOrder.h:332
@ WorkOrderRedone
Definition WorkOrder.h:325
WorkOrderStatus m_status
Definition WorkOrder.h:539
virtual void undo()
Starts (or enqueues) an undo.
Definition WorkOrder.cpp:1144
int progressMin() const
Gets the minimum value of the progress range of the WorkOrder.
Definition WorkOrder.cpp:1325
bool isUndoable() const
Returns true if this work order is undoable, otherwise false.
Definition WorkOrder.cpp:817
WorkOrder * previous() const
Gets the previous WorkOrder.
Definition WorkOrder.cpp:942
bool m_isUndoable
Set the workorder to be undoable/redoable This is defaulted to true - his will allow the workorder to...
Definition WorkOrder.h:523
void setProgressValue(int)
Sets the current progress value for the WorkOrder.
Definition WorkOrder.cpp:1366
static QString toString(WorkOrderStatus)
Gets the current status of the WorkOrder.
Definition WorkOrder.cpp:1007
bool isUndone() const
Returns the WorkOrder undo status.
Definition WorkOrder.cpp:911
virtual bool setupExecution()
This sets up the state for the work order.
Definition WorkOrder.cpp:1259
void statusChanged(WorkOrder *)
bool isSavedToHistory() const
Returns true if this work order is to be shown in History, otherwise false.
Definition WorkOrder.cpp:828
static WorkOrderStatus fromStatusString(QString)
Attempts to query the current status of the WorkOrder.
Definition WorkOrder.cpp:986
bool isRedoing() const
Returns the redoing status of this WorkOrder.
Definition WorkOrder.cpp:881
QStringList internalData() const
Gets the internal data for this WorkOrder.
Definition WorkOrder.cpp:1375
QPointer< ControlList > controlList()
Returns the Control List for this WorkOrder (a list of control networks).
Definition WorkOrder.cpp:704
Directory * directory() const
return the workorder project directory Returns the Directory object of the Project this WorkOrder is ...
Definition WorkOrder.cpp:1288
virtual WorkOrder * clone() const =0
GuiCameraQsp guiCamera()
WorkOrder::guiCamera.
Definition WorkOrder.cpp:754
void setCreatesCleanState(bool createsCleanState)
Declare that this work order is saving the project.
Definition WorkOrder.cpp:1661
QString statusText() const
WorkOrder::statusText.
Definition WorkOrder.cpp:952
QDateTime executionTime() const
Gets the execution time of this WorkOrder.
Definition WorkOrder.cpp:862
virtual void execute()
Execute the workorder.
Definition WorkOrder.cpp:1401
void setModifiesDiskState(bool changesProjectOnDisk)
Definition WorkOrder.cpp:1672
void setPrevious(WorkOrder *previousWorkOrder)
Sets the previous WorkOrder in the sequence.
Definition WorkOrder.cpp:620
virtual bool isExecutable(Context)
Re-implement this method if your work order utilizes controls for data in order to operate.
Definition WorkOrder.cpp:180
void disableWorkOrder()
Disables the work order.
Definition WorkOrder.cpp:1228
bool createsCleanState() const
Returns the CleanState status (whether the Project has been saved to disk or not).
Definition WorkOrder.cpp:852
TargetBodyQsp targetBody()
WorkOrder::targetBody.
Definition WorkOrder.cpp:744
void setInternalData(QStringList data)
Sets the internal data for this WorkOrder.
Definition WorkOrder.cpp:1316
virtual bool dependsOn(WorkOrder *other) const
Indicate workorder dependency This is a virtual function whose role in child classes is to determine ...
Definition WorkOrder.cpp:779
Project * project() const
Returns the Project this WorkOrder is attached to.
Definition WorkOrder.cpp:1298
virtual ~WorkOrder()
The Destructor.
Definition WorkOrder.cpp:155
ProgressBar * progressBar()
Returns the ProgressBar.
Definition WorkOrder.cpp:973
void addCloneToProject()
Runs a copy of the current WorkOrder and stores it in the project.
Definition WorkOrder.cpp:1450
ImageList * imageList()
Returns a pointer to the ImageList for this WorkOrder.
Definition WorkOrder.cpp:629
bool isSynchronous() const
Returns true if this work order is run synchronously, otherwise false.
Definition WorkOrder.cpp:839
Context
This enumeration is for recording the context of the current Workorder (whether it is part of a proje...
Definition WorkOrder.h:339
@ NoContext
Definition WorkOrder.h:340
@ ProjectContext
Definition WorkOrder.h:341
QString bestText() const
Generate unique action names We don't use action text anymore because Directory likes to rename our a...
Definition WorkOrder.cpp:793
int progressValue() const
Gets the current progress value of the WorkOrder.
Definition WorkOrder.cpp:1345
bool isFinished() const
Returns the finished state of this WorkOrder.
Definition WorkOrder.cpp:872
void deletingProgress(WorkOrder *)
virtual void postExecution()
Perform any necessary actions after execution of a workorder.
Definition WorkOrder.cpp:1412
CorrelationMatrix correlationMatrix()
Returns the CorrleationMatrix for this WorkOrder.
Definition WorkOrder.cpp:694
FileItemQsp fileItem()
WorkOrder::fileItem.
Definition WorkOrder.cpp:764
WorkOrder(Project *project)
Create a work order that will work with the given project.
Definition WorkOrder.cpp:39
XML Handler that parses XMLs in a stack-oriented way.
Definition XmlStackedHandler.h:118
Manage a stack of content handlers for reading XML files.
Definition XmlStackedHandlerReader.h:30
This is free and unencumbered software released into the public domain.
Definition AbstractTableModel.h:24
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16