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