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