00001
00002
00003
00004
00005
00006
00007 #ifndef MAIN_WINDOW_H
00008 #define MAIN_WINDOW_H
00009
00010 #include "BackgroundImage.h"
00011 #include "CoordSystemIndex.h"
00012 #include "DigitizeStateAbstractBase.h"
00013 #include "DocumentAxesPointsRequired.h"
00014 #include "GridLines.h"
00015 #include "MainWindowModel.h"
00016 #include <QCursor>
00017 #include <QMainWindow>
00018 #include <QMap>
00019 #include <QUrl>
00020 #include "Transformation.h"
00021 #include "ZoomControl.h"
00022 #include "ZoomFactor.h"
00023 #include "ZoomFactorInitial.h"
00024
00025 class BackgroundStateContext;
00026 class ChecklistGuide;
00027 class CmdMediator;
00028 class CmdStackShadow;
00029 class CurveStyles;
00030 class DigitizeStateContext;
00031 class DlgSettingsAxesChecker;
00032 class DlgSettingsColorFilter;
00033 class DlgSettingsCoords;
00034 class DlgSettingsCurveAddRemove;
00035 class DlgSettingsCurveProperties;
00036 class DlgSettingsDigitizeCurve;
00037 class DlgSettingsExportFormat;
00038 class DlgSettingsGeneral;
00039 class DlgSettingsGridDisplay;
00040 class DlgSettingsGridRemoval;
00041 class DlgSettingsMainWindow;
00042 class DlgSettingsPointMatch;
00043 class DlgSettingsSegments;
00044 class DocumentModelAxesChecker;
00045 class DocumentModelColorFilter;
00046 class DocumentModelCoords;
00047 class DocumentModelDigitizeCurve;
00048 class DocumentModelExportFormat;
00049 class DocumentModelGeneral;
00050 class DocumentModelGridDisplay;
00051 class DocumentModelGridRemoval;
00052 class DocumentModelPointMatch;
00053 class DocumentModelSegments;
00054 class ExportToFile;
00055 class FileCmdScript;
00056 class GeometryWindow;
00057 class Ghosts;
00058 class GraphicsScene;
00059 class GraphicsView;
00060 class HelpWindow;
00061 class LoadImageFromUrl;
00062 class NetworkClient;
00063 class QAction;
00064 class QActionGroup;
00065 class QCloseEvent;
00066 class QComboBox;
00067 class QDomDocument;
00068 class QGraphicsLineItem;
00069 class QMenu;
00070 class QPushButton;
00071 class QSettings;
00072 class QTextStream;
00073 class QTimer;
00074 class QToolBar;
00075 class QVBoxLayout;
00076 class StatusBar;
00077 class TransformationStateContext;
00078 class TutorialDlg;
00079 class ViewPointStyle;
00080 class ViewSegmentFilter;
00081
00083 class MainWindow : public QMainWindow
00084 {
00085 Q_OBJECT
00086
00087 public:
00096 MainWindow(const QString &errorReportFile,
00097 const QString &fileCmdScriptFile,
00098 bool isRegressionTest,
00099 bool isGnuplot,
00100 bool isReset,
00101 QStringList loadStartupFiles,
00102 QWidget *parent = 0);
00103 ~MainWindow();
00104
00106 void cmdFileClose();
00107
00109 void cmdFileExport(const QString &fileName);
00110
00112 void cmdFileImport(const QString &fileName);
00113
00115 void cmdFileOpen(const QString &fileName);
00116
00118 CmdMediator *cmdMediator();
00119
00121 virtual bool eventFilter(QObject *, QEvent *);
00122
00124 QImage imageFiltered () const;
00125
00127 bool isGnuplot() const;
00128
00130 MainWindowModel modelMainWindow () const;
00131
00133 void resizeEvent (QResizeEvent *event);
00134
00136 void saveErrorReportFileAndExit(const char *comment,
00137 const char *file,
00138 int line,
00139 const char *context) const;
00140
00142 GraphicsScene &scene();
00143
00146 BackgroundImage selectOriginal(BackgroundImage backgroundImage);
00147
00149 QString selectedGraphCurve () const;
00150
00152 virtual void showEvent(QShowEvent *);
00153
00155 void showTemporaryMessage (const QString &temporaryMessage);
00156
00158 Transformation transformation() const;
00159
00161 bool transformIsDefined() const;
00162
00164 void updateAfterCommand();
00165
00167 void updateAfterMouseRelease();
00168
00170 void updateCoordSystem(CoordSystemIndex coordSystemIndex);
00171
00173 void updateDigitizeStateIfSoftwareTriggered (DigitizeState digitizeState);
00174
00177 void updateGraphicsLinesToMatchGraphicsPoints();
00178
00180 void updateSettingsAxesChecker(const DocumentModelAxesChecker &modelAxesChecker);
00181
00183 void updateSettingsColorFilter(const DocumentModelColorFilter &modelColorFilter);
00184
00186 void updateSettingsCoords(const DocumentModelCoords &modelCoords);
00187
00189 void updateSettingsCurveAddRemove (const CurvesGraphs &curvesGraphs);
00190
00192 void updateSettingsCurveStyles(const CurveStyles &modelCurveStyles);
00193
00195 void updateSettingsDigitizeCurve(const DocumentModelDigitizeCurve &modelDigitizeCurve);
00196
00198 void updateSettingsExportFormat(const DocumentModelExportFormat &modelExport);
00199
00201 void updateSettingsGeneral(const DocumentModelGeneral &modelGeneral);
00202
00204 void updateSettingsGridDisplay(const DocumentModelGridDisplay &modelGridDisplay);
00205
00207 void updateSettingsGridRemoval(const DocumentModelGridRemoval &modelGridRemoval);
00208
00210 void updateSettingsMainWindow(const MainWindowModel &modelMainWindow);
00211
00213 void updateSettingsPointMatch(const DocumentModelPointMatch &modelPointMatch);
00214
00216 void updateSettingsSegments(const DocumentModelSegments &modelSegments);
00217
00219 void updateViewsOfSettings (const QString &activeCurve);
00220
00222 GraphicsView &view ();
00223
00225 const GraphicsView &view () const;
00226
00227 private slots:
00228 void slotBtnPrintAll();
00229 void slotBtnShowAllPressed();
00230 void slotBtnShowAllReleased();
00231 void slotCanRedoChanged (bool);
00232 void slotCanUndoChanged (bool);
00233 void slotChecklistClosed ();
00234 void slotCleanChanged (bool);
00235 void slotCmbBackground(int);
00236 void slotCmbCoordSystem(int);
00237 void slotCmbCurve(int);
00238 void slotContextMenuEventAxis (QString);
00239 void slotContextMenuEventGraph (QStringList);
00240 void slotDigitizeAxis ();
00241 void slotDigitizeColorPicker ();
00242 void slotDigitizeCurve ();
00243 void slotDigitizePointMatch ();
00244 void slotDigitizeSegment ();
00245 void slotDigitizeSelect ();
00246 void slotEditCopy ();
00247 void slotEditCut ();
00248 void slotEditDelete ();
00249 void slotEditMenu ();
00250 void slotEditPaste ();
00251 void slotEditPasteAsNew ();
00252 void slotEditPasteAsNewAdvanced ();
00253 void slotFileClose ();
00254 void slotFileExport ();
00255 void slotFileImport();
00256 void slotFileImportAdvanced();
00257 void slotFileImportDraggedImage(QImage);
00258 void slotFileImportDraggedImageUrl(QUrl);
00259 void slotFileImportImage(QString, QImage);
00260 void slotFileImportImageReplace();
00261 void slotFileOpen();
00262 void slotFileOpenDraggedDigFile (QString);
00263 void slotFilePrint();
00264 bool slotFileSave();
00265 bool slotFileSaveAs();
00266 void slotGeometryWindowClosed();
00267 void slotHelpAbout();
00268 void slotHelpTutorial();
00269 void slotKeyPress (Qt::Key, bool);
00270 void slotLoadStartupFiles ();
00271 void slotMouseMove (QPointF);
00272 void slotMousePress (QPointF);
00273 void slotMouseRelease (QPointF);
00274 void slotRecentFileAction ();
00275 void slotRecentFileClear ();
00276 void slotRedoTextChanged (const QString &);
00277 void slotSettingsAxesChecker ();
00278 void slotSettingsColorFilter ();
00279 void slotSettingsCoords ();
00280 void slotSettingsCurveAddRemove ();
00281 void slotSettingsCurveProperties ();
00282 void slotSettingsDigitizeCurve ();
00283 void slotSettingsExportFormat ();
00284 void slotSettingsGeneral ();
00285 void slotSettingsGridDisplay ();
00286 void slotSettingsGridRemoval ();
00287 void slotSettingsMainWindow ();
00288 void slotSettingsPointMatch ();
00289 void slotSettingsSegments ();
00290 void slotTimeoutRegressionErrorReport ();
00291 void slotTimeoutRegressionFileCmdScript ();
00292 void slotUndoTextChanged (const QString &);
00293 void slotViewGridLines ();
00294 void slotViewGroupBackground(QAction*);
00295 void slotViewGroupCurves(QAction*);
00296 void slotViewGroupStatus(QAction*);
00297 void slotViewToolBarBackground ();
00298 void slotViewToolBarChecklistGuide ();
00299 void slotViewToolBarCoordSystem ();
00300 void slotViewToolBarDigitize ();
00301 void slotViewToolBarGeometryWindow ();
00302 void slotViewToolBarSettingsViews ();
00303 void slotViewToolTips ();
00304 void slotViewZoom16To1 ();
00305 void slotViewZoom8To1 ();
00306 void slotViewZoom4To1 ();
00307 void slotViewZoom2To1 ();
00308 void slotViewZoom1To1 ();
00309 void slotViewZoom1To2 ();
00310 void slotViewZoom1To4 ();
00311 void slotViewZoom1To8 ();
00312 void slotViewZoom1To16 ();
00313 void slotViewZoom (int);
00314 void slotViewZoomFill ();
00315 void slotViewZoomIn ();
00316 void slotViewZoomInFromWheelEvent ();
00317 void slotViewZoomOut ();
00318 void slotViewZoomOutFromWheelEvent ();
00319
00320 signals:
00322 void signalZoom(int);
00323
00324 private:
00325 MainWindow();
00326
00327 enum ImportType {
00328 IMPORT_TYPE_SIMPLE,
00329 IMPORT_TYPE_ADVANCED,
00330 IMPORT_TYPE_IMAGE_REPLACE
00331 };
00332
00333 void addDockWindow (QDockWidget *dockWidget,
00334 QSettings &settings,
00335 const QString &settingsTokenArea,
00336 const QString &settingsTokenGeometry,
00337 Qt::DockWidgetArea dockWidgetArea);
00338 void applyZoomFactorAfterLoad();
00339 virtual void closeEvent(QCloseEvent *event);
00340 void createActions();
00341 void createActionsDigitize ();
00342 void createActionsEdit ();
00343 void createActionsFile ();
00344 void createActionsHelp ();
00345 void createActionsSettings ();
00346 void createActionsView ();
00347 void createCentralWidget ();
00348 void createCommandStackShadow ();
00349 void createDockableWidgets ();
00350 void createHelpWindow ();
00351 void createIcons();
00352 void createLoadImageFromUrl ();
00353 void createMenus();
00354 void createNetwork();
00355 void createScene ();
00356 void createSettingsDialogs ();
00357 void createStateContextBackground();
00358 void createStateContextDigitize();
00359 void createStateContextTransformation();
00360 void createStatusBar();
00361 void createToolBars();
00362 void createTutorial();
00363 void createZoomMap ();
00364 ZoomFactor currentZoomFactor () const;
00365 #ifndef OSX_RELEASE
00366 void exportAllCoordinateSystemsAfterRegressionTests();
00367 #endif
00368 QString exportFilenameFromInputFilename (const QString &fileName) const;
00369 void fileExport(const QString &fileName,
00370 ExportToFile exportStrategy);
00371 void fileImport (const QString &fileName,
00372 ImportType ImportType);
00373 void fileImportWithPrompts (ImportType ImportType);
00374 void filePaste (ImportType importType);
00375 void ghostsCreate ();
00376 void ghostsDestroy ();
00377 void loadCoordSystemListFromCmdMediator();
00378 void loadCurveListFromCmdMediator();
00379 void loadDocumentFile (const QString &fileName);
00380 void loadErrorReportFile(const QString &errorReportFile);
00381 bool loadImage (const QString &fileName,
00382 const QImage &image,
00383 ImportType ImportType);
00384 bool loadImageNewDocument (const QString &fileName,
00385 const QImage &image,
00386 ImportType ImportType);
00387 bool loadImageReplacingImage (const QString &fileName,
00388 const QImage &image,
00389 ImportType ImportType);
00390 void loadInputFileForErrorReport(QDomDocument &domInputFile) const;
00391 void loadToolTips ();
00392 bool maybeSave();
00393 DocumentModelExportFormat modelExportOverride (const DocumentModelExportFormat &modelExportFormatBefore,
00394 const ExportToFile &exportStrategy,
00395 const QString &selectedNameFilter) const;
00396 void rebuildRecentFileListForCurrentFile(const QString &filePath);
00397 bool saveDocumentFile(const QString &fileName);
00398 QString saveErrorReportFileAndExitXml (const char *comment,
00399 const char *file,
00400 int line,
00401 const char *context) const;
00402 void saveStartingDocumentSnapshot();
00403 void setCurrentFile(const QString &fileName);
00404 void setCurrentPathFromFile (const QString &fileName);
00405 void setPixmap (const QString &curveSelected,
00406 const QPixmap &pixmap);
00407 void settingsRead (bool isReset);
00408 void settingsReadEnvironment (QSettings &settings);
00409 void settingsReadMainWindow (QSettings &settings);
00410 void settingsWrite ();
00411 bool setupAfterLoadNewDocument (const QString &fileName,
00412 const QString &temporaryMessage,
00413 ImportType ImportType);
00414 bool setupAfterLoadReplacingImage (const QString &fileName,
00415 const QString &temporaryMessage,
00416 ImportType ImportType);
00417 void startRegressionTestErrorReport (const QString ®ressionInputFile);
00418 void startRegressionTestFileCmdScript ();
00419 void updateAfterCommandStatusBarCoords ();
00420 void updateChecklistGuide ();
00421 void updateControls ();
00422 void updateGeometryWindow ();
00423 void updateGridLines();
00424 void updateHighlightOpacity();
00425 void updateRecentFileList();
00426 void updateSettingsMainWindow();
00427 void updateSmallDialogs();
00428 void updateTransformationAndItsDependencies();
00429 void updateViewedCurves ();
00430 void updateViewsOfSettings ();
00431 void updateWindowTitle ();
00432 void writeCheckpointToLogFile();
00433
00434 QString m_originalFile;
00435 bool m_originalFileWasImported;
00436 bool m_isDocumentExported;
00437 QString m_engaugeFile;
00438 QString m_currentFile;
00439 QString m_currentFileWithPathAndFileExtension;
00440 MainTitleBarFormat m_titleBarFormat;
00441
00442 QMenu *m_menuFile;
00443 QAction *m_actionImport;
00444 QAction *m_actionImportAdvanced;
00445 QAction *m_actionImportImageReplace;
00446 QAction *m_actionOpen;
00447 QMenu *m_menuFileOpenRecent;
00448 QList<QAction*> m_actionRecentFiles;
00449 QAction *m_actionClose;
00450 QAction *m_actionSave;
00451 QAction *m_actionSaveAs;
00452 QAction *m_actionExport;
00453 QAction *m_actionPrint;
00454 QAction *m_actionExit;
00455
00456 QMenu *m_menuEdit;
00457 QAction *m_actionEditUndo;
00458 QAction *m_actionEditRedo;
00459 QAction *m_actionEditCut;
00460 QAction *m_actionEditCopy;
00461 QAction *m_actionEditPaste;
00462 QAction *m_actionEditDelete;
00463 QAction *m_actionEditPasteAsNew;
00464 QAction *m_actionEditPasteAsNewAdvanced;
00465
00466 QMenu *m_menuDigitize;
00467 QActionGroup *m_groupDigitize;
00468 QAction *m_actionDigitizeSelect;
00469 QAction *m_actionDigitizeAxis;
00470 QAction *m_actionDigitizeCurve;
00471 QAction *m_actionDigitizePointMatch;
00472 QAction *m_actionDigitizeColorPicker;
00473 QAction *m_actionDigitizeSegment;
00474
00475 QMenu *m_menuView;
00476 QAction *m_actionViewBackground;
00477 QAction *m_actionViewChecklistGuide;
00478 QAction *m_actionViewCoordSystem;
00479 QAction *m_actionViewDigitize;
00480 QAction *m_actionViewGeometryWindow;
00481 QAction *m_actionViewSettingsViews;
00482 QAction *m_actionViewToolTips;
00483 QAction *m_actionViewGridLines;
00484 QMenu *m_menuViewBackground;
00485 QActionGroup *m_groupBackground;
00486 QAction *m_actionViewBackgroundNone;
00487 QAction *m_actionViewBackgroundOriginal;
00488 QAction *m_actionViewBackgroundFiltered;
00489 QMenu *m_menuViewCurves;
00490 QActionGroup *m_groupCurves;
00491 QAction *m_actionViewCurvesNone;
00492 QAction *m_actionViewCurvesSelected;
00493 QAction *m_actionViewCurvesAll;
00494 QMenu *m_menuViewStatus;
00495 QActionGroup *m_groupStatus;
00496 QAction *m_actionStatusNever;
00497 QAction *m_actionStatusTemporary;
00498 QAction *m_actionStatusAlways;
00499 QMenu *m_menuViewZoom;
00500 QAction *m_actionZoomOut;
00501 QAction *m_actionZoomIn;
00502 QActionGroup *m_groupZoom;
00503 QAction *m_actionZoomFill;
00504 QAction *m_actionZoom16To1;
00505 QAction *m_actionZoom8To1;
00506 QAction *m_actionZoom4To1;
00507 QAction *m_actionZoom2To1;
00508 QAction *m_actionZoom1To1;
00509 QAction *m_actionZoom1To2;
00510 QAction *m_actionZoom1To4;
00511 QAction *m_actionZoom1To8;
00512 QAction *m_actionZoom1To16;
00513
00514 QMenu *m_menuSettings;
00515 QAction *m_actionSettingsAxesChecker;
00516 QAction *m_actionSettingsColorFilter;
00517 QAction *m_actionSettingsCoords;
00518 QAction *m_actionSettingsCurveAddRemove;
00519 QAction *m_actionSettingsCurveProperties;
00520 QAction *m_actionSettingsDigitizeCurve;
00521 QAction *m_actionSettingsExport;
00522 QAction *m_actionSettingsGeneral;
00523 QAction *m_actionSettingsGridDisplay;
00524 QAction *m_actionSettingsGridRemoval;
00525 QAction *m_actionSettingsMainWindow;
00526 QAction *m_actionSettingsPointMatch;
00527 QAction *m_actionSettingsSegments;
00528
00529 QMenu *m_menuHelp;
00530 QAction *m_actionHelpAbout;
00531 QAction *m_actionHelpChecklistGuideWizard;
00532 QAction *m_actionHelpHelp;
00533 QAction *m_actionHelpTutorial;
00534 QAction *m_actionHelpWhatsThis;
00535
00536 QVBoxLayout *m_layout;
00537 GraphicsScene *m_scene;
00538 GraphicsView *m_view;
00539
00540 StatusBar *m_statusBar;
00541 Transformation m_transformation;
00542
00543 QComboBox *m_cmbCurve;
00544 QToolBar *m_toolDigitize;
00545 LoadImageFromUrl *m_loadImageFromUrl;
00546
00547 QComboBox *m_cmbBackground;
00548 QToolBar *m_toolBackground;
00549
00550 ViewPointStyle *m_viewPointStyle;
00551 ViewSegmentFilter *m_viewSegmentFilter;
00552 QToolBar *m_toolSettingsViews;
00553 ChecklistGuide *m_dockChecklistGuide;
00554 GeometryWindow *m_dockGeometryWindow;
00555
00556 QComboBox *m_cmbCoordSystem;
00557 QPushButton *m_btnPrintAll;
00558 QPushButton *m_btnShowAll;
00559 QToolBar *m_toolCoordSystem;
00560
00561 HelpWindow *m_helpWindow;
00562 TutorialDlg *m_tutorialDlg;
00563
00564 CmdMediator *m_cmdMediator;
00565 CmdStackShadow *m_cmdStackShadow;
00566
00567
00568 DigitizeStateContext *m_digitizeStateContext;
00569
00570
00571 TransformationStateContext *m_transformationStateContext;
00572
00573
00574 BackgroundStateContext *m_backgroundStateContext;
00575
00576 DlgSettingsAxesChecker *m_dlgSettingsAxesChecker;
00577 DlgSettingsColorFilter *m_dlgSettingsColorFilter;
00578 DlgSettingsCoords *m_dlgSettingsCoords;
00579 DlgSettingsCurveAddRemove *m_dlgSettingsCurveAddRemove;
00580 DlgSettingsCurveProperties *m_dlgSettingsCurveProperties;
00581 DlgSettingsDigitizeCurve * m_dlgSettingsDigitizeCurve;
00582 DlgSettingsExportFormat *m_dlgSettingsExportFormat;
00583 DlgSettingsGeneral *m_dlgSettingsGeneral;
00584 DlgSettingsGridDisplay *m_dlgSettingsGridDisplay;
00585 DlgSettingsGridRemoval *m_dlgSettingsGridRemoval;
00586 DlgSettingsMainWindow *m_dlgSettingsMainWindow;
00587 DlgSettingsPointMatch *m_dlgSettingsPointMatch;
00588 DlgSettingsSegments *m_dlgSettingsSegments;
00589
00590
00591 QString m_startingDocumentSnapshot;
00592 NetworkClient *m_networkClient;
00593
00594
00595 bool m_isGnuplot;
00596 MainWindowModel m_modelMainWindow;
00597
00598
00599 QTimer *m_timerLoadStartupFiles;
00600 QStringList m_loadStartupFiles;
00601
00602
00603 Ghosts *m_ghosts;
00604
00605
00606
00607
00608 QTimer *m_timerRegressionErrorReport;
00609 FileCmdScript *m_fileCmdScript;
00610 bool m_isErrorReportRegressionTest;
00611 QTimer *m_timerRegressionFileCmdScript;
00612 QString m_regressionFile;
00613 QString m_startupDirectory;
00614
00615
00616
00617
00618 GridLines m_gridLines;
00619
00620
00621 QMap<ZoomFactorInitial, ZoomFactor> m_zoomMap;
00622 };
00623
00624 #endif // MAIN_WINDOW_H