Engauge Digitizer  2
MainWindow.h
1 #ifndef MAIN_WINDOW_H
2 #define MAIN_WINDOW_H
3 
4 #include "BackgroundImage.h"
5 #include "DigitizeStateAbstractBase.h"
6 #include <QCursor>
7 #include <QMainWindow>
8 #include <QUrl>
9 #include "Transformation.h"
10 
12 class ChecklistGuide;
13 class CmdMediator;
14 class CmdStackShadow;
15 class CurveStyles;
19 class DlgSettingsCommon;
20 class DlgSettingsCoords;
37 class GraphicsScene;
38 class GraphicsView;
39 class HelpWindow;
40 class LoadImageFromUrl;
41 class NetworkClient;
42 class QAction;
43 class QActionGroup;
44 class QCloseEvent;
45 class QComboBox;
46 class QDomDocument;
47 class QGraphicsLineItem;
48 class QMenu;
49 class QSettings;
50 class QTextStream;
51 class QToolBar;
52 class QVBoxLayout;
53 class StatusBar;
55 class TutorialDlg;
56 class ViewPointStyle;
57 class ViewSegmentFilter;
58 
60 class MainWindow : public QMainWindow
61 {
62  Q_OBJECT
63 
64 public:
66  MainWindow(const QString &errorReportFile, // Empty if unused
67  bool isGnuplot,
68  QWidget *parent = 0);
69  ~MainWindow();
70 
73 
75  virtual bool eventFilter(QObject *, QEvent *);
76 
78  QImage imageFiltered () const;
79 
81  bool isGnuplot() const;
82 
84  void resizeEvent (QResizeEvent *event);
85 
87  void saveErrorReportFileAndExit(const char *comment,
88  const char *file,
89  int line,
90  const char *context) const;
91 
94 
97  BackgroundImage selectOriginal(BackgroundImage backgroundImage);
98 
100  QString selectedGraphCurve () const;
101 
103  void showTemporaryMessage (const QString &temporaryMessage);
104 
107 
109  bool transformIsDefined() const;
110 
112  void updateAfterCommand();
113 
116 
118  void updateDigitizeStateIfSoftwareTriggered (DigitizeState digitizeState);
119 
123 
125  void updateSettingsAxesChecker(const DocumentModelAxesChecker &modelAxesChecker);
126 
128  void updateSettingsColorFilter(const DocumentModelColorFilter &modelColorFilter);
129 
131  void updateSettingsCommon(const DocumentModelCommon &modelCommon);
132 
134  void updateSettingsCoords(const DocumentModelCoords &modelCoords);
135 
137  void updateSettingsCurveAddRemove (const CurvesGraphs &curvesGraphs);
138 
140  void updateSettingsCurveStyles(const CurveStyles &modelCurveStyles);
141 
143  void updateSettingsDigitizeCurve(const DocumentModelDigitizeCurve &modelDigitizeCurve);
144 
146  void updateSettingsExportFormat(const DocumentModelExportFormat &modelExport);
147 
149  void updateSettingsGridRemoval(const DocumentModelGridRemoval &modelGridRemoval);
150 
152  void updateSettingsPointMatch(const DocumentModelPointMatch &modelPointMatch);
153 
155  void updateSettingsSegments(const DocumentModelSegments &modelSegments);
156 
158  void updateViewsOfSettings (const QString &activeCurve);
159 
161  GraphicsView &view ();
162 
164  const GraphicsView &view () const;
165 
166 private slots:
167  void slotCanRedoChanged (bool);
168  void slotCanUndoChanged (bool);
169  void slotChecklistClosed ();
170  void slotCleanChanged (bool);
171  void slotCmbBackground(int);
172  void slotCmbCurve(int);
173  void slotContextMenuEvent (QString);
174  void slotDigitizeAxis ();
175  void slotDigitizeColorPicker ();
176  void slotDigitizeCurve ();
177  void slotDigitizePointMatch ();
178  void slotDigitizeSegment ();
179  void slotDigitizeSelect ();
180  void slotEditCopy ();
181  void slotEditCut ();
182  void slotEditDelete ();
183  void slotEditPaste ();
184  void slotFileExport ();
185  void slotFileImport();
186  void slotFileImportDraggedImage(QImage);
187  void slotFileImportDraggedImageUrl(QUrl);
188  void slotFileImportImage(QString, QImage);
189  void slotFileOpen();
190  void slotFilePrint();
191  bool slotFileSave();
192  bool slotFileSaveAs();
193  void slotHelpAbout();
194  void slotHelpTutorial();
195  void slotKeyPress (Qt::Key, bool);
196  void slotLeave ();
197  void slotMouseMove (QPointF);
198  void slotMousePress (QPointF);
199  void slotMouseRelease (QPointF);
200  void slotRecentFileAction ();
201  void slotRedoTextChanged (const QString &);
202  void slotSetOverrideCursor (QCursor);
203  void slotSettingsAxesChecker ();
204  void slotSettingsColorFilter ();
205  void slotSettingsCommon ();
206  void slotSettingsCoords ();
207  void slotSettingsCurveAddRemove ();
208  void slotSettingsCurveProperties ();
209  void slotSettingsDigitizeCurve ();
210  void slotSettingsExportFormat ();
211  void slotSettingsGridRemoval ();
212  void slotSettingsPointMatch ();
213  void slotSettingsSegments ();
214  void slotUndoTextChanged (const QString &);
215  void slotViewGroupBackground(QAction*);
216  void slotViewGroupCurves(QAction*);
217  void slotViewGroupStatus(QAction*);
218  void slotViewToolBarBackground ();
219  void slotViewToolBarDigitize ();
220  void slotViewToolBarChecklistGuide ();
221  void slotViewToolBarSettingsViews ();
222  void slotViewToolTips ();
223  void slotViewZoom16To1 ();
224  void slotViewZoom8To1 ();
225  void slotViewZoom4To1 ();
226  void slotViewZoom2To1 ();
227  void slotViewZoom1To1 ();
228  void slotViewZoom1To2 ();
229  void slotViewZoom1To4 ();
230  void slotViewZoom1To8 ();
231  void slotViewZoom1To16 ();
232  void slotViewZoom (int);
233  void slotViewZoomFill ();
234  void slotViewZoomIn ();
235  void slotViewZoomOut ();
236 
237 signals:
239  void signalZoom(int);
240 
241 private:
242  MainWindow();
243 
244  virtual void closeEvent(QCloseEvent *event);
245  void createActions();
246  void createActionsDigitize ();
247  void createActionsEdit ();
248  void createActionsFile ();
249  void createActionsHelp ();
250  void createActionsSettings ();
251  void createActionsView ();
252  void createCentralWidget ();
253  void createCommandStackShadow ();
254  void createHelpWindow ();
255  void createIcons();
256  void createLoadImageFromUrl ();
257  void createMenus();
258  void createNetwork();
259  void createScene ();
260  void createSettingsDialogs ();
261  void createStateContextBackground();
262  void createStateContextDigitize();
263  void createStateContextTransformation();
264  void createStatusBar();
265  void createToolBars();
266  void createTutorial();
267  void fileImport (const QString &fileName);
268  void loadCurveListFromCmdMediator();
269  void loadDocumentFile (const QString &fileName);
270  void loadErrorReportFile(const QString &initialPath,
271  const QString &errorReportFile);
272  void loadImage (const QString &fileName,
273  const QImage &image);
274  void loadInputFileForErrorReport(QDomDocument &domInputFile) const;
275  void loadToolTips ();
276  bool maybeSave();
277  void rebuildRecentFileListForCurrentFile(const QString &filePath);
278  bool saveDocumentFile(const QString &fileName);
279  QString saveErrorReportFileAndExitXml (const char *comment,
280  const char *file,
281  int line,
282  const char *context,
283  bool includeDocument) const;
284  void saveStartingDocumentSnapshot();
285  void setCurrentFile(const QString &fileName);
286  void setCurrentPathFromFile (const QString &fileName);
287  void setPixmap (const QPixmap &pixmap);
288  void settingsRead ();
289  void settingsReadEnvironment (QSettings &settings);
290  void settingsReadMainWindow (QSettings &settings);
291  void settingsWrite ();
292  void setupAfterLoad (const QString &fileName,
293  const QString &temporaryMessage);
294  void updateAfterCommandStatusBarCoords ();
295  void updateControls (); // Update the widgets (typically in terms of show/hide state) depending on the application state.
296  void updateRecentFileList();
297  void updateTransformationAndItsDependencies();
298  void updateViewedCurves ();
299  void updateViewsOfSettings (); // Private version gets active curve name from DigitizeContext
300  void writeCheckpointToLogFile();
301 
302  QString m_originalFile; // Original filename for error report
303  bool m_originalFileWasImported; // True/false for imported/opened
304  bool m_isDocumentExported;
305  QString m_engaugeFile; // Not empty when a Document is currently loaded AND it was loaded and/or saved as an Engauge file
306  QString m_currentFile; // Not empty when a Document is currently loaded
307 
308  QMenu *m_menuFile;
309  QAction *m_actionImport;
310  QAction *m_actionOpen;
311  QMenu *m_menuFileOpenRecent;
312  QList<QAction*> m_actionRecentFiles;
313  QAction *m_actionSave;
314  QAction *m_actionSaveAs;
315  QAction *m_actionExport;
316  QAction *m_actionPrint;
317  QAction *m_actionExit;
318 
319  QMenu *m_menuEdit;
320  QAction *m_actionEditUndo;
321  QAction *m_actionEditRedo;
322  QAction *m_actionEditCut;
323  QAction *m_actionEditCopy;
324  QAction *m_actionEditPaste;
325  QAction *m_actionEditDelete;
326 
327  QMenu *m_menuDigitize;
328  QActionGroup *m_groupDigitize;
329  QAction *m_actionDigitizeSelect;
330  QAction *m_actionDigitizeAxis;
331  QAction *m_actionDigitizeCurve;
332  QAction *m_actionDigitizePointMatch;
333  QAction *m_actionDigitizeColorPicker;
334  QAction *m_actionDigitizeSegment;
335 
336  QMenu *m_menuView;
337  QAction *m_actionViewBackground;
338  QAction *m_actionViewChecklistGuide;
339  QAction *m_actionViewDigitize;
340  QAction *m_actionViewSettingsViews;
341  QAction *m_actionViewToolTips;
342  QMenu *m_menuViewBackground;
343  QActionGroup *m_groupBackground;
344  QAction *m_actionViewBackgroundNone;
345  QAction *m_actionViewBackgroundOriginal;
346  QAction *m_actionViewBackgroundFiltered;
347  QMenu *m_menuViewCurves;
348  QActionGroup *m_groupCurves;
349  QAction *m_actionViewCurvesNone;
350  QAction *m_actionViewCurvesSelected;
351  QAction *m_actionViewCurvesAll;
352  QMenu *m_menuViewStatus;
353  QActionGroup *m_groupStatus;
354  QAction *m_actionStatusNever;
355  QAction *m_actionStatusTemporary;
356  QAction *m_actionStatusAlways;
357  QMenu *m_menuViewZoom;
358  QAction *m_actionZoomOut;
359  QAction *m_actionZoomIn;
360  QActionGroup *m_groupZoom;
361  QAction *m_actionZoomFill;
362  QAction *m_actionZoom16To1;
363  QAction *m_actionZoom8To1;
364  QAction *m_actionZoom4To1;
365  QAction *m_actionZoom2To1;
366  QAction *m_actionZoom1To1;
367  QAction *m_actionZoom1To2;
368  QAction *m_actionZoom1To4;
369  QAction *m_actionZoom1To8;
370  QAction *m_actionZoom1To16;
371 
372  QMenu *m_menuSettings;
373  QAction *m_actionSettingsAxesChecker;
374  QAction *m_actionSettingsColorFilter;
375  QAction *m_actionSettingsCommon;
376  QAction *m_actionSettingsCoords;
377  QAction *m_actionSettingsCurveAddRemove;
378  QAction *m_actionSettingsCurveProperties;
379  QAction *m_actionSettingsDigitizeCurve;
380  QAction *m_actionSettingsExport;
381  QAction *m_actionSettingsGridRemoval;
382  QAction *m_actionSettingsPointMatch;
383  QAction *m_actionSettingsSegments;
384 
385  QMenu *m_menuHelp;
386  QAction *m_actionHelpAbout;
387  QAction *m_actionHelpChecklistGuideWizard;
388  QAction *m_actionHelpHelp;
389  QAction *m_actionHelpTutorial;
390  QAction *m_actionHelpWhatsThis;
391 
392  QVBoxLayout *m_layout;
393  GraphicsScene *m_scene;
394  GraphicsView *m_view;
395 
396  StatusBar *m_statusBar;
397  Transformation m_transformation;
398 
399  QComboBox *m_cmbCurve;
400  QToolBar *m_toolDigitize;
401  LoadImageFromUrl *m_loadImageFromUrl;
402 
403  QComboBox *m_cmbBackground;
404  QToolBar *m_toolBackground;
405 
406  ViewPointStyle *m_viewPointStyle;
407  ViewSegmentFilter *m_viewSegmentFilter;
408  QToolBar *m_toolSettingsViews;
409  ChecklistGuide *m_dockChecklistGuide;
410 
411  HelpWindow *m_helpWindow;
412  TutorialDlg *m_tutorialDlg;
413 
414  CmdMediator *m_cmdMediator;
415  CmdStackShadow *m_cmdStackShadow;
416 
417  // State machine for user interface states
418  DigitizeStateContext *m_digitizeStateContext;
419 
420  // State machine for transformation states
421  TransformationStateContext *m_transformationStateContext;
422 
423  // State machine for background image
424  BackgroundStateContext *m_backgroundStateContext;
425 
426  DlgSettingsAxesChecker *m_dlgSettingsAxesChecker;
427  DlgSettingsColorFilter *m_dlgSettingsColorFilter;
428  DlgSettingsCommon *m_dlgSettingsCommon;
429  DlgSettingsCoords *m_dlgSettingsCoords;
430  DlgSettingsCurveAddRemove *m_dlgSettingsCurveAddRemove;
431  DlgSettingsCurveProperties *m_dlgSettingsCurveProperties;
432  DlgSettingsDigitizeCurve * m_dlgSettingsDigitizeCurve;
433  DlgSettingsExportFormat *m_dlgSettingsExportFormat;
434  DlgSettingsGridRemoval *m_dlgSettingsGridRemoval;
435  DlgSettingsPointMatch *m_dlgSettingsPointMatch;
436  DlgSettingsSegments *m_dlgSettingsSegments;
437 
438  // Crash reports
439  QString m_startingDocumentSnapshot; // Serialized snapshot of document at startup. Included in error report if user approves
440  NetworkClient *m_networkClient;
441 
442  bool m_isGnuplot;
443 };
444 
445 #endif // MAIN_WINDOW_H
Model for DlgSettingsPointMatch and CmdSettingsPointMatch.
void updateDigitizeStateIfSoftwareTriggered(DigitizeState digitizeState)
After software-triggered state transition, this method manually triggers the action as if user had cl...
Class that displays the current Segment Filter in a MainWindow toolbar.
Dialog for editing Segments settings, for DigitizeStateSegment.
Model for DlgSettingsExportFormat and CmdSettingsExportFormat.
Dialog for editing point match settings, for DigitizeStatePointMatch.
Dialog for editing axes checker settings.
Transformation transformation() const
Return read-only copy of transformation.
Context class for transformation state machine.
Model for DlgSettingsCurveProperties and CmdSettingsCurveProperties.
Definition: CurveStyles.h:16
Dockable help window.
Definition: HelpWindow.h:7
void updateSettingsCurveAddRemove(const CurvesGraphs &curvesGraphs)
Update with new curves.
void updateSettingsCommon(const DocumentModelCommon &modelCommon)
Update with new common properties.
void updateAfterMouseRelease()
Call MainWindow::updateControls (which is private) after the very specific case - a mouse press/relea...
Model for DlgSettingsCommon and CmdSettingsCommon.
void updateViewsOfSettings(const QString &activeCurve)
Update curve-specific view of settings. Private version gets active curve name from DigitizeStateCont...
QString selectedGraphCurve() const
Curve name that is currently selected in m_cmbCurve.
CmdMediator & cmdMediator()
Accessor for commands to process the Document.
Definition: MainWindow.cpp:176
BackgroundImage selectOriginal(BackgroundImage backgroundImage)
Make original background visible, for DigitizeStateColorPicker.
Dialog for editing grid removal settings.
Dialog for editing exporting settings.
void showTemporaryMessage(const QString &temporaryMessage)
Show temporary message in status bar.
Dialog for editing curve names settings.
void updateSettingsDigitizeCurve(const DocumentModelDigitizeCurve &modelDigitizeCurve)
Update with new curve digitization styles.
Tutorial using a strategy like a comic strip with decision points deciding which panels appear...
Definition: TutorialDlg.h:13
Dockable text window containing checklist guide.
Model for DlgSettingsDigitizeCurve and CmdSettingsDigitizeCurve.
GraphicsView & view()
View for the QImage and QGraphicsItems, without const.
Affine transformation between screen and graph coordinates, based on digitized axis points...
Dialog for editing filtering settings.
Container for all graph curves. The axes point curve is external to this class.
Definition: CurvesGraphs.h:18
Model for DlgSettingsColorFilter and CmdSettingsColorFilter.
Wrapper around QStatusBar to manage permanent widgets.
Definition: StatusBar.h:15
GraphicsScene & scene()
Scene container for the QImage and QGraphicsItems.
void updateSettingsCurveStyles(const CurveStyles &modelCurveStyles)
Update with new curve styles.
Client for interacting with Engauge server.
Definition: NetworkClient.h:10
Context class that manages the background image state machine.
QGraphicsView class with event handling added. Typically the events are sent to the active digitizing...
Definition: GraphicsView.h:13
Container for all DigitizeStateAbstractBase subclasses. This functions as the context class in a stan...
Model for DlgSettingsCoords and CmdSettingsCoords.
void updateAfterCommand()
See GraphicsScene::updateAfterCommand.
void updateSettingsColorFilter(const DocumentModelColorFilter &modelColorFilter)
Update with new color filter properties.
Dialog for editing DigitizeStateCurve settings.
void updateSettingsAxesChecker(const DocumentModelAxesChecker &modelAxesChecker)
Update with new axes indicator properties.
void updateSettingsPointMatch(const DocumentModelPointMatch &modelPointMatch)
Update with new point match properties.
QImage imageFiltered() const
Background image that has been filtered for the current curve. This asserts if a curve-specific image...
void updateSettingsGridRemoval(const DocumentModelGridRemoval &modelGridRemoval)
Update with new grid removal properties.
Class that displays a view of the current Curve's point style.
Model for DlgSettingsAxesChecker and CmdSettingsAxesChecker.
Command stack that shadows the CmdMediator command stack at startup when reading commands from an err...
void updateSettingsExportFormat(const DocumentModelExportFormat &modelExport)
Update with new export properties.
Dialog for editing coordinates settings.
Load QImage from url. This is trivial for a file, but requires an asynchronous download step for http...
virtual bool eventFilter(QObject *, QEvent *)
Catch secret keypresses.
bool isGnuplot() const
Get method for gnuplot flag.
Dialog for editing curve properties settings.
Command queue stack.
Definition: CmdMediator.h:16
void saveErrorReportFileAndExit(const char *comment, const char *file, int line, const char *context) const
Save error report and exit.
void signalZoom(int)
Send zoom selection, picked from menu or keystroke, to StatusBar.
Model for DlgSettingsSegments and CmdSettingsSegments.
void resizeEvent(QResizeEvent *event)
Intercept resize event so graphics scene can be appropriately resized when in Fill mode...
void updateSettingsCoords(const DocumentModelCoords &modelCoords)
Update with new coordinate properties.
Add point and line handling to generic QGraphicsScene.
Definition: GraphicsScene.h:25
Model for DlgSettingsGridRemoval and CmdSettingsGridRemoval. The settings are unstable until the user...
void updateSettingsSegments(const DocumentModelSegments &modelSegments)
Update with new segments properties.
Dialog for editing axes checker settings.
void updateGraphicsLinesToMatchGraphicsPoints()
Update the graphics lines so they follow the graphics points, after a drag, addition, removal, and such.
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
Definition: MainWindow.h:60
bool transformIsDefined() const
Return true if all three axis points have been defined.