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 slotFileClose ();
185  void slotFileExport ();
186  void slotFileImport();
187  void slotFileImportDraggedImage(QImage);
188  void slotFileImportDraggedImageUrl(QUrl);
189  void slotFileImportImage(QString, QImage);
190  void slotFileOpen();
191  void slotFilePrint();
192  bool slotFileSave();
193  bool slotFileSaveAs();
194  void slotHelpAbout();
195  void slotHelpTutorial();
196  void slotKeyPress (Qt::Key, bool);
197  void slotLeave ();
198  void slotMouseMove (QPointF);
199  void slotMousePress (QPointF);
200  void slotMouseRelease (QPointF);
201  void slotRecentFileAction ();
202  void slotRedoTextChanged (const QString &);
203  void slotSetOverrideCursor (QCursor);
204  void slotSettingsAxesChecker ();
205  void slotSettingsColorFilter ();
206  void slotSettingsCommon ();
207  void slotSettingsCoords ();
208  void slotSettingsCurveAddRemove ();
209  void slotSettingsCurveProperties ();
210  void slotSettingsDigitizeCurve ();
211  void slotSettingsExportFormat ();
212  void slotSettingsGridRemoval ();
213  void slotSettingsPointMatch ();
214  void slotSettingsSegments ();
215  void slotUndoTextChanged (const QString &);
216  void slotViewGroupBackground(QAction*);
217  void slotViewGroupCurves(QAction*);
218  void slotViewGroupStatus(QAction*);
219  void slotViewToolBarBackground ();
220  void slotViewToolBarDigitize ();
221  void slotViewToolBarChecklistGuide ();
222  void slotViewToolBarSettingsViews ();
223  void slotViewToolTips ();
224  void slotViewZoom16To1 ();
225  void slotViewZoom8To1 ();
226  void slotViewZoom4To1 ();
227  void slotViewZoom2To1 ();
228  void slotViewZoom1To1 ();
229  void slotViewZoom1To2 ();
230  void slotViewZoom1To4 ();
231  void slotViewZoom1To8 ();
232  void slotViewZoom1To16 ();
233  void slotViewZoom (int);
234  void slotViewZoomFill ();
235  void slotViewZoomIn ();
236  void slotViewZoomOut ();
237 
238 signals:
240  void signalZoom(int);
241 
242 private:
243  MainWindow();
244 
245  virtual void closeEvent(QCloseEvent *event);
246  void createActions();
247  void createActionsDigitize ();
248  void createActionsEdit ();
249  void createActionsFile ();
250  void createActionsHelp ();
251  void createActionsSettings ();
252  void createActionsView ();
253  void createCentralWidget ();
254  void createCommandStackShadow ();
255  void createHelpWindow ();
256  void createIcons();
257  void createLoadImageFromUrl ();
258  void createMenus();
259  void createNetwork();
260  void createScene ();
261  void createSettingsDialogs ();
262  void createStateContextBackground();
263  void createStateContextDigitize();
264  void createStateContextTransformation();
265  void createStatusBar();
266  void createToolBars();
267  void createTutorial();
268  void fileImport (const QString &fileName);
269  void loadCurveListFromCmdMediator();
270  void loadDocumentFile (const QString &fileName);
271  void loadErrorReportFile(const QString &initialPath,
272  const QString &errorReportFile);
273  void loadImage (const QString &fileName,
274  const QImage &image);
275  void loadInputFileForErrorReport(QDomDocument &domInputFile) const;
276  void loadToolTips ();
277  bool maybeSave();
278  void rebuildRecentFileListForCurrentFile(const QString &filePath);
279  bool saveDocumentFile(const QString &fileName);
280  QString saveErrorReportFileAndExitXml (const char *comment,
281  const char *file,
282  int line,
283  const char *context,
284  bool includeDocument) const;
285  void saveStartingDocumentSnapshot();
286  void setCurrentFile(const QString &fileName);
287  void setCurrentPathFromFile (const QString &fileName);
288  void setPixmap (const QPixmap &pixmap);
289  void settingsRead ();
290  void settingsReadEnvironment (QSettings &settings);
291  void settingsReadMainWindow (QSettings &settings);
292  void settingsWrite ();
293  void setupAfterLoad (const QString &fileName,
294  const QString &temporaryMessage);
295  void updateAfterCommandStatusBarCoords ();
296  void updateControls (); // Update the widgets (typically in terms of show/hide state) depending on the application state.
297  void updateRecentFileList();
298  void updateTransformationAndItsDependencies();
299  void updateViewedCurves ();
300  void updateViewsOfSettings (); // Private version gets active curve name from DigitizeContext
301  void writeCheckpointToLogFile();
302 
303  QString m_originalFile; // Original filename for error report
304  bool m_originalFileWasImported; // True/false for imported/opened
305  bool m_isDocumentExported;
306  QString m_engaugeFile; // Not empty when a Document is currently loaded AND it was loaded and/or saved as an Engauge file
307  QString m_currentFile; // Not empty when a Document is currently loaded
308 
309  QMenu *m_menuFile;
310  QAction *m_actionImport;
311  QAction *m_actionOpen;
312  QMenu *m_menuFileOpenRecent;
313  QList<QAction*> m_actionRecentFiles;
314  QAction *m_actionClose;
315  QAction *m_actionSave;
316  QAction *m_actionSaveAs;
317  QAction *m_actionExport;
318  QAction *m_actionPrint;
319  QAction *m_actionExit;
320 
321  QMenu *m_menuEdit;
322  QAction *m_actionEditUndo;
323  QAction *m_actionEditRedo;
324  QAction *m_actionEditCut;
325  QAction *m_actionEditCopy;
326  QAction *m_actionEditPaste;
327  QAction *m_actionEditDelete;
328 
329  QMenu *m_menuDigitize;
330  QActionGroup *m_groupDigitize;
331  QAction *m_actionDigitizeSelect;
332  QAction *m_actionDigitizeAxis;
333  QAction *m_actionDigitizeCurve;
334  QAction *m_actionDigitizePointMatch;
335  QAction *m_actionDigitizeColorPicker;
336  QAction *m_actionDigitizeSegment;
337 
338  QMenu *m_menuView;
339  QAction *m_actionViewBackground;
340  QAction *m_actionViewChecklistGuide;
341  QAction *m_actionViewDigitize;
342  QAction *m_actionViewSettingsViews;
343  QAction *m_actionViewToolTips;
344  QMenu *m_menuViewBackground;
345  QActionGroup *m_groupBackground;
346  QAction *m_actionViewBackgroundNone;
347  QAction *m_actionViewBackgroundOriginal;
348  QAction *m_actionViewBackgroundFiltered;
349  QMenu *m_menuViewCurves;
350  QActionGroup *m_groupCurves;
351  QAction *m_actionViewCurvesNone;
352  QAction *m_actionViewCurvesSelected;
353  QAction *m_actionViewCurvesAll;
354  QMenu *m_menuViewStatus;
355  QActionGroup *m_groupStatus;
356  QAction *m_actionStatusNever;
357  QAction *m_actionStatusTemporary;
358  QAction *m_actionStatusAlways;
359  QMenu *m_menuViewZoom;
360  QAction *m_actionZoomOut;
361  QAction *m_actionZoomIn;
362  QActionGroup *m_groupZoom;
363  QAction *m_actionZoomFill;
364  QAction *m_actionZoom16To1;
365  QAction *m_actionZoom8To1;
366  QAction *m_actionZoom4To1;
367  QAction *m_actionZoom2To1;
368  QAction *m_actionZoom1To1;
369  QAction *m_actionZoom1To2;
370  QAction *m_actionZoom1To4;
371  QAction *m_actionZoom1To8;
372  QAction *m_actionZoom1To16;
373 
374  QMenu *m_menuSettings;
375  QAction *m_actionSettingsAxesChecker;
376  QAction *m_actionSettingsColorFilter;
377  QAction *m_actionSettingsCommon;
378  QAction *m_actionSettingsCoords;
379  QAction *m_actionSettingsCurveAddRemove;
380  QAction *m_actionSettingsCurveProperties;
381  QAction *m_actionSettingsDigitizeCurve;
382  QAction *m_actionSettingsExport;
383  QAction *m_actionSettingsGridRemoval;
384  QAction *m_actionSettingsPointMatch;
385  QAction *m_actionSettingsSegments;
386 
387  QMenu *m_menuHelp;
388  QAction *m_actionHelpAbout;
389  QAction *m_actionHelpChecklistGuideWizard;
390  QAction *m_actionHelpHelp;
391  QAction *m_actionHelpTutorial;
392  QAction *m_actionHelpWhatsThis;
393 
394  QVBoxLayout *m_layout;
395  GraphicsScene *m_scene;
396  GraphicsView *m_view;
397 
398  StatusBar *m_statusBar;
399  Transformation m_transformation;
400 
401  QComboBox *m_cmbCurve;
402  QToolBar *m_toolDigitize;
403  LoadImageFromUrl *m_loadImageFromUrl;
404 
405  QComboBox *m_cmbBackground;
406  QToolBar *m_toolBackground;
407 
408  ViewPointStyle *m_viewPointStyle;
409  ViewSegmentFilter *m_viewSegmentFilter;
410  QToolBar *m_toolSettingsViews;
411  ChecklistGuide *m_dockChecklistGuide;
412 
413  HelpWindow *m_helpWindow;
414  TutorialDlg *m_tutorialDlg;
415 
416  CmdMediator *m_cmdMediator;
417  CmdStackShadow *m_cmdStackShadow;
418 
419  // State machine for user interface states
420  DigitizeStateContext *m_digitizeStateContext;
421 
422  // State machine for transformation states
423  TransformationStateContext *m_transformationStateContext;
424 
425  // State machine for background image
426  BackgroundStateContext *m_backgroundStateContext;
427 
428  DlgSettingsAxesChecker *m_dlgSettingsAxesChecker;
429  DlgSettingsColorFilter *m_dlgSettingsColorFilter;
430  DlgSettingsCommon *m_dlgSettingsCommon;
431  DlgSettingsCoords *m_dlgSettingsCoords;
432  DlgSettingsCurveAddRemove *m_dlgSettingsCurveAddRemove;
433  DlgSettingsCurveProperties *m_dlgSettingsCurveProperties;
434  DlgSettingsDigitizeCurve * m_dlgSettingsDigitizeCurve;
435  DlgSettingsExportFormat *m_dlgSettingsExportFormat;
436  DlgSettingsGridRemoval *m_dlgSettingsGridRemoval;
437  DlgSettingsPointMatch *m_dlgSettingsPointMatch;
438  DlgSettingsSegments *m_dlgSettingsSegments;
439 
440  // Crash reports
441  QString m_startingDocumentSnapshot; // Serialized snapshot of document at startup. Included in error report if user approves
442  NetworkClient *m_networkClient;
443 
444  bool m_isGnuplot;
445 };
446 
447 #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:177
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.