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