7 #include "BackgroundImage.h"
8 #include "BackgroundStateContext.h"
9 #include "img/bannerapp_16.xpm"
10 #include "img/bannerapp_32.xpm"
11 #include "img/bannerapp_64.xpm"
12 #include "img/bannerapp_128.xpm"
13 #include "img/bannerapp_256.xpm"
14 #include "ChecklistGuide.h"
15 #include "ChecklistGuideWizard.h"
18 #include "CmdDelete.h"
19 #include "CmdMediator.h"
20 #include "CmdSelectCoordSystem.h"
21 #include "CmdStackShadow.h"
22 #include "ColorFilter.h"
25 #include "DigitizeStateContext.h"
26 #include "DigitAxis.xpm"
27 #include "DigitColorPicker.xpm"
28 #include "DigitCurve.xpm"
29 #include "DigitPointMatch.xpm"
30 #include "DigitSegment.xpm"
31 #include "DigitSelect.xpm"
33 #include "DlgErrorReport.h"
34 #include "DlgImportAdvanced.h"
35 #include "DlgRequiresTransform.h"
36 #include "DlgSettingsAxesChecker.h"
37 #include "DlgSettingsColorFilter.h"
38 #include "DlgSettingsCoords.h"
39 #include "DlgSettingsCurveAddRemove.h"
40 #include "DlgSettingsCurveProperties.h"
41 #include "DlgSettingsDigitizeCurve.h"
42 #include "DlgSettingsExportFormat.h"
43 #include "DlgSettingsGeneral.h"
44 #include "DlgSettingsGridRemoval.h"
45 #include "DlgSettingsMainWindow.h"
46 #include "DlgSettingsPointMatch.h"
47 #include "DlgSettingsSegments.h"
48 #include "DocumentSerialize.h"
49 #include "EngaugeAssert.h"
50 #include "EnumsToQt.h"
51 #include "ExportToFile.h"
52 #include "FileCmdScript.h"
54 #include "GraphicsItemType.h"
55 #include "GraphicsScene.h"
56 #include "GraphicsView.h"
57 #include "HelpWindow.h"
58 #ifdef ENGAUGE_JPEG2000
60 #endif // ENGAUGE_JPEG2000
61 #include "LoadFileInfo.h"
62 #include "LoadImageFromUrl.h"
64 #include "MainTitleBarFormat.h"
65 #include "MainWindow.h"
66 #include "NetworkClient.h"
68 #include <QApplication>
69 #include <QCloseEvent>
72 #include <QDesktopServices>
73 #include <QDockWidget>
74 #include <QDomDocument>
76 #include <QFileDialog>
78 #include <QGraphicsLineItem>
79 #include <QImageReader>
81 #include <QKeySequence>
85 #include <QMessageBox>
86 #include <QMouseEvent>
87 #include <QPrintDialog>
90 #include <QTextStream>
94 #include <QToolButton>
95 #include "QtToString.h"
96 #include <QVBoxLayout>
98 #include <QXmlStreamReader>
99 #include <QXmlStreamWriter>
100 #include "Settings.h"
101 #include "StatusBar.h"
102 #include "TransformationStateContext.h"
103 #include "TutorialDlg.h"
105 #include "ViewPointStyle.h"
106 #include "ViewSegmentFilter.h"
107 #include "ZoomFactor.h"
108 #include "ZoomFactorInitial.h"
110 const QString EMPTY_FILENAME (
"");
111 const char *ENGAUGE_FILENAME_DESCRIPTION =
"Engauge Document";
112 const QString ENGAUGE_FILENAME_EXTENSION (
"dig");
114 const unsigned int MAX_RECENT_FILE_LIST_SIZE = 8;
117 const QString &fileCmdScriptFile,
118 bool isRegressionTest,
120 QStringList loadStartupFiles,
123 m_isDocumentExported (false),
124 m_engaugeFile (EMPTY_FILENAME),
125 m_currentFile (EMPTY_FILENAME),
130 m_digitizeStateContext (0),
131 m_transformationStateContext (0),
132 m_backgroundStateContext (0),
133 m_isGnuplot (isGnuplot),
135 m_timerRegressionErrorReport(0),
137 m_timerRegressionFileCmdScript(0)
139 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::MainWindow"
140 <<
" curDir=" << QDir::currentPath().toLatin1().data();
144 QString initialPath = QDir::currentPath();
148 setWindowFlags (Qt::WindowContextHelpButtonHint | windowFlags ());
149 setWindowTitle (engaugeWindowTitle ());
151 createCentralWidget();
160 createLoadImageFromUrl ();
161 createStateContextBackground ();
162 createStateContextDigitize ();
163 createStateContextTransformation ();
164 createSettingsDialogs ();
165 createCommandStackShadow ();
170 setUnifiedTitleAndToolBarOnMac(
true);
172 installEventFilter(
this);
173 if (!errorReportFile.isEmpty()) {
174 loadErrorReportFile(initialPath,
176 if (isRegressionTest) {
177 startRegressionTestErrorReport(initialPath,
180 }
else if (!fileCmdScriptFile.isEmpty()) {
182 startRegressionTestFileCmdScript();
187 m_loadStartupFiles = loadStartupFiles;
191 MainWindow::~MainWindow()
195 void MainWindow::applyZoomFactorAfterLoad()
197 ZoomFactor zoomFactor;
201 case ZOOM_INITIAL_16_TO_1:
202 zoomFactor = ZOOM_16_TO_1;
205 case ZOOM_INITIAL_8_TO_1:
206 zoomFactor = ZOOM_8_TO_1;
209 case ZOOM_INITIAL_4_TO_1:
210 zoomFactor = ZOOM_4_TO_1;
213 case ZOOM_INITIAL_2_TO_1:
214 zoomFactor = ZOOM_2_TO_1;
217 case ZOOM_INITIAL_1_TO_1:
218 zoomFactor = ZOOM_1_TO_1;
221 case ZOOM_INITIAL_1_TO_2:
222 zoomFactor = ZOOM_1_TO_2;
225 case ZOOM_INITIAL_1_TO_4:
226 zoomFactor = ZOOM_1_TO_4;
229 case ZOOM_INITIAL_1_TO_8:
230 zoomFactor = ZOOM_1_TO_8;
233 case ZOOM_INITIAL_1_TO_16:
234 zoomFactor = ZOOM_1_TO_16;
237 case ZOOM_INITIAL_FILL:
238 zoomFactor = ZOOM_FILL;
241 case ZOOM_INITIAL_PREVIOUS:
242 zoomFactor = currentZoomFactor();
246 ENGAUGE_ASSERT (
false);
247 zoomFactor = currentZoomFactor();
251 slotViewZoom (zoomFactor);
254 void MainWindow::closeEvent(QCloseEvent *event)
266 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::cmdFileClose";
268 setWindowModified (
false);
274 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::cmdFileExport";
283 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::cmdFileImport";
285 m_regressionFile = exportFilenameFromInputFilename (fileName);
286 fileImport (fileName,
292 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::cmdFileOpen";
294 m_regressionFile = exportFilenameFromInputFilename (fileName);
295 loadDocumentFile(fileName);
301 return m_cmdMediator;
304 void MainWindow::createActions()
306 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createActions";
308 createActionsFile ();
309 createActionsEdit ();
310 createActionsDigitize ();
311 createActionsView ();
312 createActionsSettings ();
313 createActionsHelp ();
316 void MainWindow::createActionsDigitize ()
318 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createActionsDigitize";
320 QPixmap pixmapAxis (DigitAxis_xpm);
321 QPixmap pixmapCurve (DigitCurve_xpm);
322 QPixmap pixmapColorPicker (DigitColorPicker_xpm);
323 QPixmap pixmapPointMatch (DigitPointMatch_xpm);
324 QPixmap pixmapSegment (DigitSegment_xpm);
325 QPixmap pixmapSelect (DigitSelect_xpm);
327 QIcon iconAxis (pixmapAxis);
328 QIcon iconCurve (pixmapCurve);
329 QIcon iconColorPicker (pixmapColorPicker);
330 QIcon iconPointMatch (pixmapPointMatch);
331 QIcon iconSegment (pixmapSegment);
332 QIcon iconSelect (pixmapSelect);
334 m_actionDigitizeSelect =
new QAction (iconSelect, tr (
"Select Tool"),
this);
335 m_actionDigitizeSelect->setShortcut (QKeySequence (tr (
"Shift+F2")));
336 m_actionDigitizeSelect->setCheckable (
true);
337 m_actionDigitizeSelect->setStatusTip (tr (
"Select points on screen."));
338 m_actionDigitizeSelect->setWhatsThis (tr (
"Select\n\n"
339 "Select points on the screen."));
340 connect (m_actionDigitizeSelect, SIGNAL (triggered ()),
this, SLOT (slotDigitizeSelect ()));
342 m_actionDigitizeAxis =
new QAction (iconAxis, tr (
"Axis Point Tool"),
this);
343 m_actionDigitizeAxis->setShortcut (QKeySequence (tr (
"Shift+F3")));
344 m_actionDigitizeAxis->setCheckable (
true);
345 m_actionDigitizeAxis->setStatusTip (tr (
"Digitize axis points."));
346 m_actionDigitizeAxis->setWhatsThis (tr (
"Digitize Axis Point\n\n"
347 "Digitizes an axis point by placing a new point at the cursor "
348 "after a mouse click. The coordinates of the axis point are then "
349 "entered. In a graph, three axis points are required to define "
350 "the graph coordinates."));
351 connect (m_actionDigitizeAxis, SIGNAL (triggered ()),
this, SLOT (slotDigitizeAxis ()));
353 m_actionDigitizeCurve =
new QAction (iconCurve, tr (
"Curve Point Tool"),
this);
354 m_actionDigitizeCurve->setShortcut (QKeySequence (tr (
"Shift+F4")));
355 m_actionDigitizeCurve->setCheckable (
true);
356 m_actionDigitizeCurve->setStatusTip (tr (
"Digitize curve points."));
357 m_actionDigitizeCurve->setWhatsThis (tr (
"Digitize Curve Point\n\n"
358 "Digitizes a curve point by placing a new point at the cursor "
359 "after a mouse click. Use this mode to digitize points along curves "
361 "New points will be assigned to the currently selected curve."));
362 connect (m_actionDigitizeCurve, SIGNAL (triggered ()),
this, SLOT (slotDigitizeCurve ()));
364 m_actionDigitizePointMatch =
new QAction (iconPointMatch, tr (
"Point Match Tool"),
this);
365 m_actionDigitizePointMatch->setShortcut (QKeySequence (tr (
"Shift+F5")));
366 m_actionDigitizePointMatch->setCheckable (
true);
367 m_actionDigitizePointMatch->setStatusTip (tr (
"Digitize curve points in a point plot by matching a point."));
368 m_actionDigitizePointMatch->setWhatsThis (tr (
"Digitize Curve Points by Point Matching\n\n"
369 "Digitizes curve points in a point plot by finding points that match a sample point. The process "
370 "starts by selecting a representative sample point.\n\n"
371 "New points will be assigned to the currently selected curve."));
372 connect (m_actionDigitizePointMatch, SIGNAL (triggered ()),
this, SLOT (slotDigitizePointMatch ()));
374 m_actionDigitizeColorPicker =
new QAction (iconColorPicker, tr (
"Color Picker Tool"),
this);
375 m_actionDigitizeColorPicker->setShortcut (QKeySequence (tr (
"Shift+F6")));
376 m_actionDigitizeColorPicker->setCheckable (
true);
377 m_actionDigitizeColorPicker->setStatusTip (tr (
"Select color settings for filtering in Segment Fill mode."));
378 m_actionDigitizeColorPicker->setWhatsThis (tr (
"Select color settings for Segment Fill filtering\n\n"
379 "Select a pixel along the currently selected curve. That pixel and its neighbors will "
380 "define the filter settings (color, brightness, and so on) of the currently selected curve "
381 "while in Segment Fill mode."));
382 connect (m_actionDigitizeColorPicker, SIGNAL (triggered ()),
this, SLOT (slotDigitizeColorPicker ()));
384 m_actionDigitizeSegment =
new QAction (iconSegment, tr (
"Segment Fill Tool"),
this);
385 m_actionDigitizeSegment->setShortcut (QKeySequence (tr (
"Shift+F7")));
386 m_actionDigitizeSegment->setCheckable (
true);
387 m_actionDigitizeSegment->setStatusTip (tr (
"Digitize curve points along a segment of a curve."));
388 m_actionDigitizeSegment->setWhatsThis (tr (
"Digitize Curve Points With Segment Fill\n\n"
389 "Digitizes curve points by placing new points along the highlighted "
390 "segment under the cursor. Use this mode to quickly digitize multiple points along a "
391 "curve with a single click.\n\n"
392 "New points will be assigned to the currently selected curve."));
393 connect (m_actionDigitizeSegment, SIGNAL (triggered ()),
this, SLOT (slotDigitizeSegment ()));
395 m_groupDigitize =
new QActionGroup (
this);
396 m_groupDigitize->addAction (m_actionDigitizeSelect);
397 m_groupDigitize->addAction (m_actionDigitizeAxis);
398 m_groupDigitize->addAction (m_actionDigitizeCurve);
399 m_groupDigitize->addAction (m_actionDigitizePointMatch);
400 m_groupDigitize->addAction (m_actionDigitizeColorPicker);
401 m_groupDigitize->addAction (m_actionDigitizeSegment);
404 void MainWindow::createActionsEdit ()
406 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createActionsEdit";
408 m_actionEditUndo =
new QAction(tr (
"&Undo"),
this);
409 m_actionEditUndo->setShortcut (QKeySequence::Undo);
410 m_actionEditUndo->setStatusTip (tr (
"Undo the last operation."));
411 m_actionEditUndo->setWhatsThis (tr (
"Undo\n\n"
412 "Undo the last operation."));
415 m_actionEditRedo =
new QAction(tr (
"&Redo"),
this);
416 m_actionEditRedo->setShortcut (QKeySequence::Redo);
417 m_actionEditRedo->setStatusTip (tr (
"Redo the last operation."));
418 m_actionEditRedo->setWhatsThis (tr (
"Redo\n\n"
419 "Redo the last operation."));
422 m_actionEditCut =
new QAction (tr (
"Cut"),
this);
423 m_actionEditCut->setShortcut (QKeySequence::Cut);
424 m_actionEditCut->setStatusTip (tr (
"Cuts the selected points and copies them to the clipboard."));
425 m_actionEditCut->setWhatsThis (tr (
"Cut\n\n"
426 "Cuts the selected points and copies them to the clipboard."));
427 connect (m_actionEditCut, SIGNAL (triggered ()),
this, SLOT (slotEditCut ()));
429 m_actionEditCopy =
new QAction (tr (
"Copy"),
this);
430 m_actionEditCopy->setShortcut (QKeySequence::Copy);
431 m_actionEditCopy->setStatusTip (tr (
"Copies the selected points to the clipboard."));
432 m_actionEditCopy->setWhatsThis (tr (
"Copy\n\n"
433 "Copies the selected points to the clipboard."));
434 connect (m_actionEditCopy, SIGNAL (triggered ()),
this, SLOT (slotEditCopy ()));
436 m_actionEditPaste =
new QAction (tr (
"Paste"),
this);
437 m_actionEditPaste->setShortcut (QKeySequence::Paste);
438 m_actionEditPaste->setStatusTip (tr (
"Pastes the selected points from the clipboard."));
439 m_actionEditPaste->setWhatsThis (tr (
"Paste\n\n"
440 "Pastes the selected points from the clipboard. They will be assigned to the current curve."));
441 connect (m_actionEditPaste, SIGNAL (triggered ()),
this, SLOT (slotEditPaste ()));
443 m_actionEditDelete =
new QAction (tr (
"Delete"),
this);
444 m_actionEditDelete->setShortcut (QKeySequence::Delete);
445 m_actionEditDelete->setStatusTip (tr (
"Deletes the selected points, after copying them to the clipboard."));
446 m_actionEditDelete->setWhatsThis (tr (
"Delete\n\n"
447 "Deletes the selected points, after copying them to the clipboard."));
448 connect (m_actionEditDelete, SIGNAL (triggered ()),
this, SLOT (slotEditDelete ()));
450 m_actionEditPasteAsNew =
new QAction (tr (
"Paste As New"),
this);
451 m_actionEditPasteAsNew->setStatusTip (tr (
"Pastes an image from the clipboard."));
452 m_actionEditPasteAsNew->setWhatsThis (tr (
"Paste as New\n\n"
453 "Creates a new document by pasting an image from the clipboard."));
454 connect (m_actionEditPasteAsNew, SIGNAL (triggered ()),
this, SLOT (slotEditPasteAsNew ()));
456 m_actionEditPasteAsNewAdvanced =
new QAction (tr (
"Paste As New (Advanced)..."),
this);
457 m_actionEditPasteAsNewAdvanced->setStatusTip (tr (
"Pastes an image from the clipboard, in advanced mode."));
458 m_actionEditPasteAsNewAdvanced->setWhatsThis (tr (
"Paste as New (Advanced)\n\n"
459 "Creates a new document by pasting an image from the clipboard, in advanced mode."));
460 connect (m_actionEditPasteAsNewAdvanced, SIGNAL (triggered ()),
this, SLOT (slotEditPasteAsNewAdvanced ()));
463 void MainWindow::createActionsFile ()
465 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createActionsFile";
467 m_actionImport =
new QAction(tr (
"&Import..."),
this);
468 m_actionImport->setShortcut (tr (
"Ctrl+I"));
469 m_actionImport->setStatusTip (tr (
"Creates a new document by importing an simple image."));
470 m_actionImport->setWhatsThis (tr (
"Import Image\n\n"
471 "Creates a new document by importing an image with a single coordinate system, "
472 "and axes both coordinates known.\n\n"
473 "For more complicated images with multiple coordinate systems, "
474 "and/or floating axes, Import (Advanced) is used instead."));
475 connect (m_actionImport, SIGNAL (triggered ()),
this, SLOT (slotFileImport ()));
477 m_actionImportAdvanced =
new QAction(tr (
"Import (Advanced)..."),
this);
478 m_actionImportAdvanced->setStatusTip (tr (
"Creates a new document by importing an image with support for advanced feaures."));
479 m_actionImportAdvanced->setWhatsThis (tr (
"Import (Advanced)\n\n"
480 "Creates a new document by importing an image with support for advanced feaures. In "
481 "advanced mode, there can be multiple coordinate systems and/or floating axes."));
482 connect (m_actionImportAdvanced, SIGNAL (triggered ()),
this, SLOT (slotFileImportAdvanced ()));
484 m_actionOpen =
new QAction(tr (
"&Open..."),
this);
485 m_actionOpen->setShortcut (QKeySequence::Open);
486 m_actionOpen->setStatusTip (tr (
"Opens an existing document."));
487 m_actionOpen->setWhatsThis (tr (
"Open Document\n\n"
488 "Opens an existing document."));
489 connect (m_actionOpen, SIGNAL (triggered ()),
this, SLOT (slotFileOpen ()));
491 for (
unsigned int i = 0; i < MAX_RECENT_FILE_LIST_SIZE; i++) {
492 QAction *recentFileAction =
new QAction (
this);
493 recentFileAction->setVisible (
true);
494 connect (recentFileAction, SIGNAL (triggered ()),
this, SLOT (slotRecentFileAction ()));
495 m_actionRecentFiles.append (recentFileAction);
498 m_actionClose =
new QAction(tr (
"&Close"),
this);
499 m_actionClose->setShortcut (QKeySequence::Close);
500 m_actionClose->setStatusTip (tr (
"Closes the open document document."));
501 m_actionClose->setWhatsThis (tr (
"Close Document\n\n"
502 "Closes the open document."));
503 connect (m_actionClose, SIGNAL (triggered ()),
this, SLOT (slotFileClose ()));
505 m_actionSave =
new QAction(tr (
"&Save"),
this);
506 m_actionSave->setShortcut (QKeySequence::Save);
507 m_actionSave->setStatusTip (tr (
"Saves the current document."));
508 m_actionSave->setWhatsThis (tr (
"Save Document\n\n"
509 "Saves the current document."));
510 connect (m_actionSave, SIGNAL (triggered ()),
this, SLOT (slotFileSave ()));
512 m_actionSaveAs =
new QAction(tr (
"Save As..."),
this);
513 m_actionSaveAs->setShortcut (QKeySequence::SaveAs);
514 m_actionSaveAs->setStatusTip (tr (
"Saves the current document under a new filename."));
515 m_actionSaveAs->setWhatsThis (tr (
"Save Document As\n\n"
516 "Saves the current document under a new filename."));
517 connect (m_actionSaveAs, SIGNAL (triggered ()),
this, SLOT (slotFileSaveAs ()));
519 m_actionExport =
new QAction (tr (
"Export..."),
this);
520 m_actionExport->setShortcut (tr (
"Ctrl+E"));
521 m_actionExport->setStatusTip (tr (
"Exports the current document into a text file."));
522 m_actionExport->setWhatsThis (tr (
"Export Document\n\n"
523 "Exports the current document into a text file."));
524 connect (m_actionExport, SIGNAL (triggered ()),
this, SLOT (slotFileExport ()));
526 m_actionPrint =
new QAction (tr (
"&Print..."),
this);
527 m_actionPrint->setShortcut (QKeySequence::Print);
528 m_actionPrint->setStatusTip (tr (
"Print the current document."));
529 m_actionPrint->setWhatsThis (tr (
"Print Document\n\n"
530 "Print the current document to a printer or file."));
531 connect (m_actionPrint, SIGNAL (triggered ()),
this, SLOT (slotFilePrint ()));
533 m_actionExit =
new QAction(tr (
"&Exit"),
this);
534 m_actionExit->setShortcut (QKeySequence::Quit);
535 m_actionExit->setStatusTip (tr (
"Quits the application."));
536 m_actionExit->setWhatsThis (tr (
"Exit\n\n"
537 "Quits the application."));
538 connect (m_actionExit, SIGNAL (triggered ()),
this, SLOT (close ()));
541 void MainWindow::createActionsHelp ()
543 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createActionsHelp";
545 m_actionHelpChecklistGuideWizard =
new QAction (tr (
"Checklist Guide Wizard"),
this);
546 m_actionHelpChecklistGuideWizard->setCheckable (
true);
547 m_actionHelpChecklistGuideWizard->setStatusTip (tr (
"Open Checklist Guide Wizard during import to define digitizing steps"));
548 m_actionHelpChecklistGuideWizard->setWhatsThis (tr (
"Checklist Guide Wizard\n\n"
549 "Use Checklist Guide Wizard during import to generate a checklist of steps "
550 "for the imported document"));
552 m_actionHelpWhatsThis = QWhatsThis::createAction(
this);
553 m_actionHelpWhatsThis->setShortcut (QKeySequence::WhatsThis);
555 m_actionHelpTutorial =
new QAction (tr (
"Tutorial"),
this);
556 m_actionHelpTutorial->setStatusTip (tr (
"Play tutorial showing steps for digitizing curves"));
557 m_actionHelpTutorial->setWhatsThis (tr (
"Tutorial\n\n"
558 "Play tutorial showing steps for digitizing points from curves drawn with lines "
560 connect (m_actionHelpTutorial, SIGNAL (triggered ()),
this, SLOT (slotHelpTutorial()));
562 m_actionHelpHelp =
new QAction (tr (
"Help"),
this);
563 m_actionHelpHelp->setShortcut (QKeySequence::HelpContents);
564 m_actionHelpHelp->setStatusTip (tr (
"Help documentation"));
565 m_actionHelpHelp->setWhatsThis (tr (
"Help Documentation\n\n"
566 "Searchable help documentation"));
569 m_actionHelpAbout =
new QAction(tr (
"About Engauge"),
this);
570 m_actionHelpAbout->setStatusTip (tr (
"About the application."));
571 m_actionHelpAbout->setWhatsThis (tr (
"About Engauge\n\nAbout the application."));
572 connect (m_actionHelpAbout, SIGNAL (triggered ()),
this, SLOT (slotHelpAbout ()));
575 void MainWindow::createActionsSettings ()
577 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createActionsSettings";
579 m_actionSettingsCoords =
new QAction (tr (
"Coordinates..."),
this);
580 m_actionSettingsCoords->setStatusTip (tr (
"Edit Coordinate settings."));
581 m_actionSettingsCoords->setWhatsThis (tr (
"Coordinate Settings\n\n"
582 "Coordinate settings determine how the graph coordinates are mapped to the pixels in the image"));
583 connect (m_actionSettingsCoords, SIGNAL (triggered ()),
this, SLOT (slotSettingsCoords ()));
585 m_actionSettingsCurveAddRemove =
new QAction (tr (
"Add/Remove Curve..."),
this);
586 m_actionSettingsCurveAddRemove->setStatusTip (tr (
"Add or Remove Curves."));
587 m_actionSettingsCurveAddRemove->setWhatsThis (tr (
"Add/Remove Curve\n\n"
588 "Add/Remove Curve settings control which curves are included in the current document"));
589 connect (m_actionSettingsCurveAddRemove, SIGNAL (triggered ()),
this, SLOT (slotSettingsCurveAddRemove ()));
591 m_actionSettingsCurveProperties =
new QAction (tr (
"Curve Properties..."),
this);
592 m_actionSettingsCurveProperties->setStatusTip (tr (
"Edit Curve Properties settings."));
593 m_actionSettingsCurveProperties->setWhatsThis (tr (
"Curve Properties Settings\n\n"
594 "Curves properties settings determine how each curve appears"));
595 connect (m_actionSettingsCurveProperties, SIGNAL (triggered ()),
this, SLOT (slotSettingsCurveProperties ()));
597 m_actionSettingsDigitizeCurve =
new QAction (tr (
"Digitize Curve..."),
this);
598 m_actionSettingsDigitizeCurve->setStatusTip (tr (
"Edit Digitize Axis and Graph Curve settings."));
599 m_actionSettingsDigitizeCurve->setWhatsThis (tr (
"Digitize Axis and Graph Curve Settings\n\n"
600 "Digitize Curve settings determine how points are digitized in Digitize Axis Point and "
601 "Digitize Graph Point modes"));
602 connect (m_actionSettingsDigitizeCurve, SIGNAL (triggered ()),
this, SLOT (slotSettingsDigitizeCurve ()));
604 m_actionSettingsExport =
new QAction (tr (
"Export Format..."),
this);
605 m_actionSettingsExport->setStatusTip (tr (
"Edit Export Format settings."));
606 m_actionSettingsExport->setWhatsThis (tr (
"Export Format Settings\n\n"
607 "Export format settings affect how exported files are formatted"));
608 connect (m_actionSettingsExport, SIGNAL (triggered ()),
this, SLOT (slotSettingsExportFormat ()));
610 m_actionSettingsColorFilter =
new QAction (tr (
"Color Filter..."),
this);
611 m_actionSettingsColorFilter->setStatusTip (tr (
"Edit Color Filter settings."));
612 m_actionSettingsColorFilter->setWhatsThis (tr (
"Color Filter Settings\n\n"
613 "Color filtering simplifies the graphs for easier Point Matching and Segment Filling"));
614 connect (m_actionSettingsColorFilter, SIGNAL (triggered ()),
this, SLOT (slotSettingsColorFilter ()));
616 m_actionSettingsAxesChecker =
new QAction (tr (
"Axes Checker..."),
this);
617 m_actionSettingsAxesChecker->setStatusTip (tr (
"Edit Axes Checker settings."));
618 m_actionSettingsAxesChecker->setWhatsThis (tr (
"Axes Checker Settings\n\n"
619 "Axes checker can reveal any axis point mistakes, which are otherwise hard to find."));
620 connect (m_actionSettingsAxesChecker, SIGNAL (triggered ()),
this, SLOT (slotSettingsAxesChecker ()));
622 m_actionSettingsGridRemoval =
new QAction (tr (
"Grid Line Removal..."),
this);
623 m_actionSettingsGridRemoval->setStatusTip (tr (
"Edit Grid Line Removal settings."));
624 m_actionSettingsGridRemoval->setWhatsThis (tr (
"Grid Line Removal Settings\n\n"
625 "Grid line removal isolates curve lines for easier Point Matching and Segment Filling, when "
626 "Color Filtering is not able to separate grid lines from curve lines."));
627 connect (m_actionSettingsGridRemoval, SIGNAL (triggered ()),
this, SLOT (slotSettingsGridRemoval ()));
629 m_actionSettingsPointMatch =
new QAction (tr (
"Point Match..."),
this);
630 m_actionSettingsPointMatch->setStatusTip (tr (
"Edit Point Match settings."));
631 m_actionSettingsPointMatch->setWhatsThis (tr (
"Point Match Settings\n\n"
632 "Point match settings determine how points are matched while in Point Match mode"));
633 connect (m_actionSettingsPointMatch, SIGNAL (triggered ()),
this, SLOT (slotSettingsPointMatch ()));
635 m_actionSettingsSegments =
new QAction (tr (
"Segment Fill..."),
this);
636 m_actionSettingsSegments->setStatusTip (tr (
"Edit Segment Fill settings."));
637 m_actionSettingsSegments->setWhatsThis (tr (
"Segment Fill Settings\n\n"
638 "Segment fill settings determine how points are generated in the Segment Fill mode"));
639 connect (m_actionSettingsSegments, SIGNAL (triggered ()),
this, SLOT (slotSettingsSegments ()));
641 m_actionSettingsGeneral =
new QAction (tr (
"General..."),
this);
642 m_actionSettingsGeneral->setStatusTip (tr (
"Edit General settings."));
643 m_actionSettingsGeneral->setWhatsThis (tr (
"General Settings\n\n"
644 "General settings are document-specific settings that affect multiple modes. For example, the cursor size setting affects "
645 "both Color Picker and Point Match modes"));
646 connect (m_actionSettingsGeneral, SIGNAL (triggered ()),
this, SLOT (slotSettingsGeneral ()));
648 m_actionSettingsMainWindow =
new QAction (tr (
"Main Window..."),
this);
649 m_actionSettingsMainWindow->setEnabled (
true);
650 m_actionSettingsMainWindow->setStatusTip (tr (
"Edit Main Window settings."));
651 m_actionSettingsMainWindow->setWhatsThis (tr (
"Main Window Settings\n\n"
652 "Main window settings affect the user interface and are not specific to any document"));
653 connect (m_actionSettingsMainWindow, SIGNAL (triggered ()),
this, SLOT (slotSettingsMainWindow ()));
656 void MainWindow::createActionsView ()
658 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createActionsView";
660 m_actionViewBackground =
new QAction (tr (
"Background Toolbar"),
this);
661 m_actionViewBackground->setCheckable (
true);
662 m_actionViewBackground->setChecked (
true);
663 m_actionViewBackground->setStatusTip (tr (
"Show or hide the background toolbar."));
664 m_actionViewBackground->setWhatsThis (tr (
"View Background ToolBar\n\n"
665 "Show or hide the background toolbar"));
666 connect (m_actionViewBackground, SIGNAL (triggered ()),
this, SLOT (slotViewToolBarBackground ()));
668 m_actionViewChecklistGuide =
new QAction (tr (
"Checklist Guide Toolbar"),
this);
669 m_actionViewChecklistGuide->setCheckable (
true);
670 m_actionViewChecklistGuide->setChecked (
false);
671 m_actionViewChecklistGuide->setStatusTip (tr (
"Show or hide the checklist guide toolbar."));
672 m_actionViewChecklistGuide->setWhatsThis (tr (
"View Checklist Guide ToolBar\n\n"
673 "Show or hide the checklist guide toolbar"));
674 connect (m_actionViewChecklistGuide, SIGNAL (changed ()),
this, SLOT (slotViewToolBarChecklistGuide()));
676 m_actionViewDigitize =
new QAction (tr (
"Digitizing Tools Toolbar"),
this);
677 m_actionViewDigitize->setCheckable (
true);
678 m_actionViewDigitize->setChecked (
true);
679 m_actionViewDigitize->setStatusTip (tr (
"Show or hide the digitizing tools toolbar."));
680 m_actionViewDigitize->setWhatsThis (tr (
"View Digitizing Tools ToolBar\n\n"
681 "Show or hide the digitizing tools toolbar"));
682 connect (m_actionViewDigitize, SIGNAL (triggered ()),
this, SLOT (slotViewToolBarDigitize()));
684 m_actionViewSettingsViews =
new QAction (tr (
"Settings Views Toolbar"),
this);
685 m_actionViewSettingsViews->setCheckable (
true);
686 m_actionViewSettingsViews->setChecked (
true);
687 m_actionViewSettingsViews->setStatusTip (tr (
"Show or hide the settings views toolbar."));
688 m_actionViewSettingsViews->setWhatsThis (tr (
"View Settings Views ToolBar\n\n"
689 "Show or hide the settings views toolbar. These views graphically show the "
690 "most important settings."));
691 connect (m_actionViewSettingsViews, SIGNAL (triggered ()),
this, SLOT (slotViewToolBarSettingsViews()));
693 m_actionViewCoordSystem =
new QAction (tr (
"Coordinate System Toolbar"),
this);
694 m_actionViewCoordSystem->setCheckable (
true);
695 m_actionViewCoordSystem->setChecked (
false);
696 m_actionViewCoordSystem->setStatusTip (tr (
"Show or hide the coordinate system toolbar."));
697 m_actionViewCoordSystem->setWhatsThis (tr (
"View Coordinate Systems ToolBar\n\n"
698 "Show or hide the coordinate system selection toolbar. This toolbar is used "
699 "to select the current coordinate system when the document has multiple "
700 "coordinate systems. This toolbar is also used to view and print all coordinate "
702 "This toolbar is disabled when there is only one coordinate system."));
703 connect (m_actionViewCoordSystem, SIGNAL (triggered ()),
this, SLOT (slotViewToolBarCoordSystem()));
705 m_actionViewToolTips =
new QAction (tr (
"Tool Tips"),
this);
706 m_actionViewToolTips->setCheckable (
true);
707 m_actionViewToolTips->setChecked (
true);
708 m_actionViewToolTips->setStatusTip (tr (
"Show or hide the tool tips."));
709 m_actionViewToolTips->setWhatsThis (tr (
"View Tool Tips\n\n"
710 "Show or hide the tool tips"));
711 connect (m_actionViewToolTips, SIGNAL (triggered ()),
this, SLOT (slotViewToolTips()));
713 m_actionViewBackgroundNone =
new QAction (tr (
"No Background"),
this);
714 m_actionViewBackgroundNone->setCheckable (
true);
715 m_actionViewBackgroundNone->setStatusTip (tr (
"Do not show the image underneath the points."));
716 m_actionViewBackgroundNone->setWhatsThis (tr (
"No Background\n\n"
717 "No image is shown so points are easier to see"));
719 m_actionViewBackgroundOriginal =
new QAction (tr (
"Show Original Image"),
this);
720 m_actionViewBackgroundOriginal->setCheckable (
true);
721 m_actionViewBackgroundOriginal->setStatusTip (tr (
"Show the original image underneath the points."));
722 m_actionViewBackgroundOriginal->setWhatsThis (tr (
"Show Original Image\n\n"
723 "Show the original image underneath the points"));
725 m_actionViewBackgroundFiltered =
new QAction (tr (
"Show Filtered Image"),
this);
726 m_actionViewBackgroundFiltered->setCheckable (
true);
727 m_actionViewBackgroundFiltered->setChecked (
true);
728 m_actionViewBackgroundFiltered->setStatusTip (tr (
"Show the filtered image underneath the points."));
729 m_actionViewBackgroundFiltered->setWhatsThis (tr (
"Show Filtered Image\n\n"
730 "Show the filtered image underneath the points.\n\n"
731 "The filtered image is created from the original image according to the "
732 "Filter preferences so unimportant information is hidden and important "
733 "information is emphasized"));
735 m_actionViewCurvesNone =
new QAction (tr (
"Hide All Curves"),
this);
736 m_actionViewCurvesNone->setCheckable (
true);
737 m_actionViewCurvesNone->setStatusTip (tr (
"Hide all digitized curves."));
738 m_actionViewCurvesNone->setWhatsThis (tr (
"Hide All Curves\n\n"
739 "No axis points or digitized graph curves are shown so the image is easier to see."));
741 m_actionViewCurvesSelected =
new QAction (tr (
"Show Selected Curve"),
this);
742 m_actionViewCurvesSelected->setCheckable (
true);
743 m_actionViewCurvesSelected->setStatusTip (tr (
"Show only the currently selected curve."));
744 m_actionViewCurvesSelected->setWhatsThis (tr (
"Show Selected Curve\n\n"
745 "Show only the digitized points and line that belong to the currently selected curve."));
747 m_actionViewCurvesAll =
new QAction (tr (
"Show All Curves"),
this);
748 m_actionViewCurvesAll->setCheckable (
true);
749 m_actionViewCurvesAll->setChecked (
true);
750 m_actionViewCurvesAll->setStatusTip (tr (
"Show all curves."));
751 m_actionViewCurvesAll->setWhatsThis (tr (
"Show All Curves\n\n"
752 "Show all digitized axis points and graph curves"));
754 m_groupBackground =
new QActionGroup(
this);
755 m_groupBackground->addAction (m_actionViewBackgroundNone);
756 m_groupBackground->addAction (m_actionViewBackgroundOriginal);
757 m_groupBackground->addAction (m_actionViewBackgroundFiltered);
758 connect (m_groupBackground, SIGNAL(triggered (QAction*)),
this, SLOT (slotViewGroupBackground(QAction*)));
760 m_groupCurves =
new QActionGroup(
this);
761 m_groupCurves->addAction (m_actionViewCurvesNone);
762 m_groupCurves->addAction (m_actionViewCurvesSelected);
763 m_groupCurves->addAction (m_actionViewCurvesAll);
764 connect (m_groupCurves, SIGNAL(triggered (QAction*)),
this, SLOT (slotViewGroupCurves(QAction*)));
766 m_actionStatusNever =
new QAction (tr (
"Hide Always"),
this);
767 m_actionStatusNever->setCheckable(
true);
768 m_actionStatusNever->setStatusTip (tr (
"Always hide the status bar."));
769 m_actionStatusNever->setWhatsThis (tr (
"Hide the status bar. No temporary status or feedback messages will appear."));
771 m_actionStatusTemporary =
new QAction (tr (
"Show Temporary Messages"),
this);
772 m_actionStatusTemporary->setCheckable(
true);
773 m_actionStatusTemporary->setStatusTip (tr (
"Hide the status bar except when display temporary messages."));
774 m_actionStatusTemporary->setWhatsThis (tr (
"Hide the status bar, except when displaying temporary status and feedback messages."));
776 m_actionStatusAlways =
new QAction (tr (
"Show Always"),
this);
777 m_actionStatusAlways->setCheckable(
true);
778 m_actionStatusAlways->setStatusTip (tr (
"Always show the status bar."));
779 m_actionStatusAlways->setWhatsThis (tr (
"Show the status bar. Besides displaying temporary status and feedback messages, "
780 "the status bar also displays information about the cursor position."));
782 m_groupStatus =
new QActionGroup(
this);
783 m_groupStatus->addAction (m_actionStatusNever);
784 m_groupStatus->addAction (m_actionStatusTemporary);
785 m_groupStatus->addAction (m_actionStatusAlways);
786 connect (m_groupStatus, SIGNAL (triggered (QAction*)),
this, SLOT (slotViewGroupStatus(QAction*)));
788 m_actionZoomOut =
new QAction (tr (
"Zoom Out"),
this);
789 m_actionZoomOut->setStatusTip (tr (
"Zoom out"));
791 connect (m_actionZoomOut, SIGNAL (triggered ()),
this, SLOT (slotViewZoomOut ()));
793 m_actionZoomIn =
new QAction (tr (
"Zoom In"),
this);
794 m_actionZoomIn->setStatusTip (tr (
"Zoom in"));
796 connect (m_actionZoomIn, SIGNAL (triggered ()),
this, SLOT (slotViewZoomIn ()));
798 m_actionZoom16To1 =
new QAction (tr (
"16:1 (1600%)"),
this);
799 m_actionZoom16To1->setCheckable (
true);
800 m_actionZoom16To1->setStatusTip (tr (
"Zoom 16:1"));
801 connect (m_actionZoom16To1, SIGNAL (triggered ()),
this, SLOT (slotViewZoom16To1 ()));
803 m_actionZoom8To1 =
new QAction (tr (
"8:1 (800%)"),
this);
804 m_actionZoom8To1->setCheckable (
true);
805 m_actionZoom8To1->setStatusTip (tr (
"Zoom 8:1"));
806 connect (m_actionZoom8To1, SIGNAL (triggered ()),
this, SLOT (slotViewZoom8To1 ()));
808 m_actionZoom4To1 =
new QAction (tr (
"4:1 (400%)"),
this);
809 m_actionZoom4To1->setCheckable (
true);
810 m_actionZoom4To1->setStatusTip (tr (
"Zoom 4:1"));
811 connect (m_actionZoom4To1, SIGNAL (triggered ()),
this, SLOT (slotViewZoom4To1 ()));
813 m_actionZoom2To1 =
new QAction (tr (
"2:1 (200%)"),
this);
814 m_actionZoom2To1->setCheckable (
true);
815 m_actionZoom2To1->setStatusTip (tr (
"Zoom 2:1"));
816 connect (m_actionZoom2To1, SIGNAL (triggered ()),
this, SLOT (slotViewZoom2To1 ()));
818 m_actionZoom1To1 =
new QAction (tr (
"1:1 (100%)"),
this);
819 m_actionZoom1To1->setCheckable (
true);
820 m_actionZoom1To1->setChecked (
true);
821 m_actionZoom1To1->setStatusTip (tr (
"Zoom 6:1"));
822 connect (m_actionZoom1To1, SIGNAL (triggered ()),
this, SLOT (slotViewZoom1To1 ()));
824 m_actionZoom1To2 =
new QAction (tr (
"1:2 (50%)"),
this);
825 m_actionZoom1To2->setCheckable (
true);
826 m_actionZoom1To2->setStatusTip (tr (
"Zoom 1:2"));
827 connect (m_actionZoom1To2, SIGNAL (triggered ()),
this, SLOT (slotViewZoom1To2 ()));
829 m_actionZoom1To4 =
new QAction (tr (
"1:4 (25%)"),
this);
830 m_actionZoom1To4->setCheckable (
true);
831 m_actionZoom1To4->setStatusTip (tr (
"Zoom 1:4"));
832 connect (m_actionZoom1To4, SIGNAL (triggered ()),
this, SLOT (slotViewZoom1To4 ()));
834 m_actionZoom1To8 =
new QAction (tr (
"1:8 (12.5%)"),
this);
835 m_actionZoom1To8->setCheckable (
true);
836 m_actionZoom1To8->setStatusTip (tr (
"Zoom 1:8"));
837 connect (m_actionZoom1To8, SIGNAL (triggered ()),
this, SLOT (slotViewZoom1To8 ()));
839 m_actionZoom1To16 =
new QAction (tr (
"1:16 (6.25%)"),
this);
840 m_actionZoom1To16->setCheckable (
true);
841 m_actionZoom1To16->setStatusTip (tr (
"Zoom 1:16"));
842 connect (m_actionZoom1To16, SIGNAL (triggered ()),
this, SLOT (slotViewZoom1To16 ()));
844 m_actionZoomFill =
new QAction (tr (
"Fill"),
this);
845 m_actionZoomFill->setCheckable (
true);
846 m_actionZoomFill->setStatusTip (tr (
"Zoom with stretching to fill window"));
847 connect (m_actionZoomFill, SIGNAL (triggered ()),
this, SLOT (slotViewZoomFill ()));
849 m_groupZoom =
new QActionGroup (
this);
850 m_groupZoom->addAction (m_actionZoom16To1);
851 m_groupZoom->addAction (m_actionZoom8To1);
852 m_groupZoom->addAction (m_actionZoom4To1);
853 m_groupZoom->addAction (m_actionZoom2To1);
854 m_groupZoom->addAction (m_actionZoom1To1);
855 m_groupZoom->addAction (m_actionZoom1To2);
856 m_groupZoom->addAction (m_actionZoom1To4);
857 m_groupZoom->addAction (m_actionZoom1To8);
858 m_groupZoom->addAction (m_actionZoom1To16);
859 m_groupZoom->addAction (m_actionZoomFill);
862 void MainWindow::createCentralWidget ()
864 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createCentralWidget";
866 QWidget *widget =
new QWidget;
867 setCentralWidget (widget);
868 m_layout =
new QVBoxLayout;
869 widget->setLayout (m_layout);
872 void MainWindow::createCommandStackShadow ()
874 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createCommandStackShadow";
879 void MainWindow::createHelpWindow ()
881 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createHelpWindow";
884 m_helpWindow->hide ();
885 addDockWidget (Qt::RightDockWidgetArea,
887 m_helpWindow->setFloating (
true);
889 connect (m_actionHelpHelp, SIGNAL (triggered ()), m_helpWindow, SLOT (show ()));
892 void MainWindow::createIcons()
894 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createIcons";
897 QPixmap icon16 (bannerapp_16);
898 QPixmap icon32 (bannerapp_32);
899 QPixmap icon64 (bannerapp_64);
900 QPixmap icon128 (bannerapp_128);
901 QPixmap icon256 (bannerapp_256);
903 icon.addPixmap (icon16);
904 icon.addPixmap (icon32);
905 icon.addPixmap (icon64);
906 icon.addPixmap (icon128);
907 icon.addPixmap (icon256);
909 setWindowIcon (icon);
912 void MainWindow::createLoadImageFromUrl ()
917 void MainWindow::createMenus()
919 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createMenus";
921 m_menuFile = menuBar()->addMenu(tr(
"&File"));
922 m_menuFile->addAction (m_actionImport);
923 m_menuFile->addAction (m_actionImportAdvanced);
924 m_menuFile->addAction (m_actionOpen);
925 m_menuFileOpenRecent =
new QMenu (tr (
"Open &Recent"));
926 for (
unsigned int i = 0; i < MAX_RECENT_FILE_LIST_SIZE; i++) {
927 m_menuFileOpenRecent->addAction (m_actionRecentFiles.at (i));
929 m_menuFile->addMenu (m_menuFileOpenRecent);
930 m_menuFile->addAction (m_actionClose);
931 m_menuFile->insertSeparator (m_actionSave);
932 m_menuFile->addAction (m_actionSave);
933 m_menuFile->addAction (m_actionSaveAs);
934 m_menuFile->addAction (m_actionExport);
935 m_menuFile->insertSeparator (m_actionPrint);
936 m_menuFile->addAction (m_actionPrint);
937 m_menuFile->insertSeparator (m_actionExit);
938 m_menuFile->addAction (m_actionExit);
940 m_menuEdit = menuBar()->addMenu(tr(
"&Edit"));
941 connect (m_menuEdit, SIGNAL (aboutToShow ()),
this, SLOT (slotEditMenu ()));
942 m_menuEdit->addAction (m_actionEditUndo);
943 m_menuEdit->addAction (m_actionEditRedo);
944 m_menuEdit->insertSeparator (m_actionEditCut);
945 m_menuEdit->addAction (m_actionEditCut);
946 m_menuEdit->addAction (m_actionEditCopy);
947 m_menuEdit->addAction (m_actionEditPaste);
948 m_menuEdit->addAction (m_actionEditDelete);
949 m_menuEdit->insertSeparator (m_actionEditPasteAsNew);
950 m_menuEdit->addAction (m_actionEditPasteAsNew);
951 m_menuEdit->addAction (m_actionEditPasteAsNewAdvanced);
953 m_menuDigitize = menuBar()->addMenu(tr(
"Digitize"));
954 m_menuDigitize->addAction (m_actionDigitizeSelect);
955 m_menuDigitize->addAction (m_actionDigitizeAxis);
956 m_menuDigitize->addAction (m_actionDigitizeCurve);
957 m_menuDigitize->addAction (m_actionDigitizePointMatch);
958 m_menuDigitize->addAction (m_actionDigitizeColorPicker);
959 m_menuDigitize->addAction (m_actionDigitizeSegment);
961 m_menuView = menuBar()->addMenu(tr(
"View"));
962 m_menuView->addAction (m_actionViewBackground);
963 m_menuView->addAction (m_actionViewDigitize);
964 m_menuView->addAction (m_actionViewChecklistGuide);
965 m_menuView->addAction (m_actionViewSettingsViews);
966 m_menuView->addAction (m_actionViewCoordSystem);
967 m_menuView->insertSeparator (m_actionViewToolTips);
968 m_menuView->addAction (m_actionViewToolTips);
969 m_menuView->insertSeparator (m_actionViewBackgroundNone);
970 m_menuViewBackground =
new QMenu (tr (
"Background"));
971 m_menuViewBackground->addAction (m_actionViewBackgroundNone);
972 m_menuViewBackground->addAction (m_actionViewBackgroundOriginal);
973 m_menuViewBackground->addAction (m_actionViewBackgroundFiltered);
974 m_menuView->addMenu (m_menuViewBackground);
975 m_menuViewCurves =
new QMenu (tr (
"Curves"));
976 m_menuViewCurves->addAction (m_actionViewCurvesNone);
977 m_menuViewCurves->addAction (m_actionViewCurvesSelected);
978 m_menuViewCurves->addAction (m_actionViewCurvesAll);
979 m_menuView->addMenu (m_menuViewCurves);
980 m_menuViewStatus =
new QMenu (tr (
"Status Bar"));
981 m_menuViewStatus->addAction (m_actionStatusNever);
982 m_menuViewStatus->addAction (m_actionStatusTemporary);
983 m_menuViewStatus->addAction (m_actionStatusAlways);
984 m_menuView->addMenu (m_menuViewStatus);
985 m_menuViewZoom =
new QMenu (tr (
"Zoom"));
986 m_menuViewZoom->addAction (m_actionZoomOut);
987 m_menuViewZoom->addAction (m_actionZoomIn);
988 m_menuViewZoom->insertSeparator (m_actionZoom16To1);
989 m_menuViewZoom->addAction (m_actionZoom16To1);
990 m_menuViewZoom->addAction (m_actionZoom8To1);
991 m_menuViewZoom->addAction (m_actionZoom4To1);
992 m_menuViewZoom->addAction (m_actionZoom2To1);
993 m_menuViewZoom->addAction (m_actionZoom1To1);
994 m_menuViewZoom->addAction (m_actionZoom1To2);
995 m_menuViewZoom->addAction (m_actionZoom1To4);
996 m_menuViewZoom->addAction (m_actionZoom1To8);
997 m_menuViewZoom->addAction (m_actionZoom1To16);
998 m_menuViewZoom->addAction (m_actionZoomFill);
999 m_menuView->addMenu (m_menuViewZoom);
1001 m_menuSettings = menuBar()->addMenu(tr (
"Settings"));
1002 m_menuSettings->addAction (m_actionSettingsCoords);
1003 m_menuSettings->addAction (m_actionSettingsCurveAddRemove);
1004 m_menuSettings->addAction (m_actionSettingsCurveProperties);
1005 m_menuSettings->addAction (m_actionSettingsDigitizeCurve);
1006 m_menuSettings->addAction (m_actionSettingsExport);
1007 m_menuSettings->addAction (m_actionSettingsColorFilter);
1008 m_menuSettings->addAction (m_actionSettingsAxesChecker);
1009 m_menuSettings->addAction (m_actionSettingsGridRemoval);
1010 m_menuSettings->addAction (m_actionSettingsPointMatch);
1011 m_menuSettings->addAction (m_actionSettingsSegments);
1012 m_menuSettings->insertSeparator (m_actionSettingsGeneral);
1013 m_menuSettings->addAction (m_actionSettingsGeneral);
1014 m_menuSettings->addAction (m_actionSettingsMainWindow);
1016 m_menuHelp = menuBar()->addMenu(tr(
"&Help"));
1017 m_menuHelp->addAction (m_actionHelpChecklistGuideWizard);
1018 m_menuHelp->insertSeparator(m_actionHelpWhatsThis);
1019 m_menuHelp->addAction (m_actionHelpWhatsThis);
1020 m_menuHelp->addAction (m_actionHelpTutorial);
1021 m_menuHelp->addAction (m_actionHelpHelp);
1022 m_menuHelp->addAction (m_actionHelpAbout);
1024 updateRecentFileList();
1027 void MainWindow::createNetwork ()
1029 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createNetwork";
1034 void MainWindow::createSettingsDialogs ()
1036 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createSettingsDialogs";
1051 m_dlgSettingsCoords->setVisible (
false);
1052 m_dlgSettingsCurveAddRemove->setVisible (
false);
1053 m_dlgSettingsCurveProperties->setVisible (
false);
1054 m_dlgSettingsDigitizeCurve->setVisible (
false);
1055 m_dlgSettingsExportFormat->setVisible (
false);
1056 m_dlgSettingsColorFilter->setVisible (
false);
1057 m_dlgSettingsAxesChecker->setVisible (
false);
1058 m_dlgSettingsGridRemoval->setVisible (
false);
1059 m_dlgSettingsPointMatch->setVisible (
false);
1060 m_dlgSettingsSegments->setVisible (
false);
1061 m_dlgSettingsGeneral->setVisible (
false);
1062 m_dlgSettingsMainWindow->setVisible (
false);
1065 void MainWindow::createScene ()
1067 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createScene";
1071 m_layout->addWidget (m_view);
1074 void MainWindow::createStateContextBackground ()
1076 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createStateContextBackground";
1081 void MainWindow::createStateContextDigitize ()
1083 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createStateContextDigitize";
1090 void MainWindow::createStateContextTransformation ()
1092 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createStateContextTransformation";
1094 ENGAUGE_CHECK_PTR (m_scene);
1100 void MainWindow::createStatusBar ()
1102 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createStatusBar";
1104 m_statusBar =
new StatusBar (*statusBar ());
1105 connect (
this, SIGNAL (
signalZoom(
int)), m_statusBar, SLOT (slotZoom(
int)));
1106 connect (m_statusBar, SIGNAL (
signalZoom (
int)),
this, SLOT (slotViewZoom (
int)));
1109 void MainWindow::createToolBars ()
1111 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createToolBars";
1113 const int VIEW_SIZE = 22;
1116 m_cmbBackground =
new QComboBox ();
1117 m_cmbBackground->setEnabled (
false);
1118 m_cmbBackground->setStatusTip (tr (
"Select background image"));
1119 m_cmbBackground->setWhatsThis (tr (
"Selected Background\n\n"
1120 "Select background image:\n"
1121 "1) No background which highlights points\n"
1122 "2) Original image which shows everything\n"
1123 "3) Filtered image which highlights important details"));
1124 m_cmbBackground->addItem (tr (
"No background"), QVariant (BACKGROUND_IMAGE_NONE));
1125 m_cmbBackground->addItem (tr (
"Original image"), QVariant (BACKGROUND_IMAGE_ORIGINAL));
1126 m_cmbBackground->addItem (tr (
"Filtered image"), QVariant (BACKGROUND_IMAGE_FILTERED));
1128 connect (m_cmbBackground, SIGNAL (currentIndexChanged (
int)),
this, SLOT (slotCmbBackground (
int)));
1131 m_toolBackground =
new QToolBar (tr (
"Background"),
this);
1132 m_toolBackground->addWidget (m_cmbBackground);
1133 addToolBar (m_toolBackground);
1136 m_cmbCurve =
new QComboBox ();
1137 m_cmbCurve->setEnabled (
false);
1138 m_cmbCurve->setMinimumWidth (180);
1139 m_cmbCurve->setStatusTip (tr (
"Select curve for new points."));
1140 m_cmbCurve->setWhatsThis (tr (
"Selected Curve Name\n\n"
1141 "Select curve for any new points. Every point belongs to one curve."));
1142 connect (m_cmbCurve, SIGNAL (activated (
int)),
this, SLOT (slotCmbCurve (
int)));
1145 m_toolDigitize =
new QToolBar (tr (
"Drawing"),
this);
1146 m_toolDigitize->addAction (m_actionDigitizeSelect);
1147 m_toolDigitize->insertSeparator (m_actionDigitizeAxis);
1148 m_toolDigitize->addAction (m_actionDigitizeAxis);
1149 m_toolDigitize->insertSeparator (m_actionDigitizeCurve);
1150 m_toolDigitize->addAction (m_actionDigitizeCurve);
1151 m_toolDigitize->addAction (m_actionDigitizePointMatch);
1152 m_toolDigitize->addAction (m_actionDigitizeColorPicker);
1153 m_toolDigitize->addAction (m_actionDigitizeSegment);
1154 m_toolDigitize->addWidget (m_cmbCurve);
1155 addToolBar (m_toolDigitize);
1159 m_viewPointStyle->setMinimumSize(VIEW_SIZE, VIEW_SIZE);
1160 m_viewPointStyle->setMaximumSize(VIEW_SIZE, VIEW_SIZE);
1161 m_viewPointStyle->setStatusTip (tr (
"Points style for the currently selected curve"));
1162 m_viewPointStyle->setWhatsThis (tr (
"Points Style\n\n"
1163 "Points style for the currently selected curve. The points style is only "
1164 "displayed in this toolbar. To change the points style, "
1165 "use the Curve Properties dialog."));
1168 m_viewSegmentFilter->setMinimumSize(VIEW_SIZE, VIEW_SIZE);
1169 m_viewSegmentFilter->setMaximumSize(VIEW_SIZE, VIEW_SIZE);
1170 m_viewSegmentFilter->setStatusTip (tr (
"View of filter for current curve in Segment Fill mode"));
1171 m_viewSegmentFilter->setWhatsThis (tr (
"Segment Fill Filter\n\n"
1172 "View of filter for the current curve in Segment Fill mode. The filter settings are only "
1173 "displayed in this toolbar. To changed the filter settings, "
1174 "use the Color Picker mode or the Filter Settings dialog."));
1177 m_toolSettingsViews =
new QToolBar (tr (
"Views"),
this);
1178 m_toolSettingsViews->addWidget (m_viewPointStyle);
1179 m_toolSettingsViews->addWidget (
new QLabel (
" "));
1180 m_toolSettingsViews->addWidget (m_viewSegmentFilter);
1181 addToolBar (m_toolSettingsViews);
1184 m_cmbCoordSystem =
new QComboBox;
1185 m_cmbCoordSystem->setEnabled (
false);
1186 m_cmbCoordSystem->setStatusTip (tr (
"Currently selected coordinate system"));
1187 m_cmbCoordSystem->setWhatsThis (tr (
"Selected Coordinate System\n\n"
1188 "Currently selected coordinate system. This is used to switch between coordinate systems "
1189 "in documents with multiple coordinate systems"));
1190 connect (m_cmbCoordSystem, SIGNAL (activated (
int)),
this, SLOT (slotCmbCoordSystem (
int)));
1192 m_btnShowAll =
new QPushButton(QIcon(
":/engauge/img/icon_show_all.png"),
"");
1193 m_btnShowAll->setEnabled (
false);
1194 m_btnShowAll->setAcceptDrops(
false);
1195 m_btnShowAll->setStatusTip (tr (
"Show all coordinate systems"));
1196 m_btnShowAll->setWhatsThis (tr (
"Show All Coordinate Systems\n\n"
1197 "When pressed and held, this button shows all digitized points and lines for all coordinate systems."));
1198 connect (m_btnShowAll, SIGNAL (pressed ()),
this, SLOT (slotBtnShowAllPressed ()));
1199 connect (m_btnShowAll, SIGNAL (released ()),
this, SLOT (slotBtnShowAllReleased ()));
1201 m_btnPrintAll =
new QPushButton(QIcon(
":/engauge/img/icon_print_all.png"),
"");
1202 m_btnPrintAll->setEnabled (
false);
1203 m_btnPrintAll->setAcceptDrops(
false);
1204 m_btnPrintAll->setStatusTip (tr (
"Print all coordinate systems"));
1205 m_btnPrintAll->setWhatsThis (tr (
"Print All Coordinate Systems\n\n"
1206 "When pressed, this button Prints all digitized points and lines for all coordinate systems."));
1207 connect (m_btnPrintAll, SIGNAL (pressed ()),
this, SLOT (slotBtnPrintAll ()));
1209 m_toolCoordSystem =
new QToolBar (tr (
"Coordinate System"),
this);
1210 m_toolCoordSystem->addWidget (m_cmbCoordSystem);
1211 m_toolCoordSystem->addWidget (m_btnShowAll);
1212 m_toolCoordSystem->addWidget (m_btnPrintAll);
1213 addToolBar (m_toolCoordSystem);
1217 connect (m_dockChecklistGuide, SIGNAL (signalChecklistClosed()),
this, SLOT (slotChecklistClosed()));
1220 void MainWindow::createTutorial ()
1222 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createTutorial";
1225 m_tutorialDlg->setModal (
true);
1226 m_tutorialDlg->setMinimumSize (500, 400);
1227 m_tutorialDlg->hide();
1230 ZoomFactor MainWindow::currentZoomFactor ()
const
1232 if (m_actionZoom1To1->isChecked()) {
1234 }
else if (m_actionZoom1To2->isChecked()) {
1236 }
else if (m_actionZoom1To4->isChecked()) {
1238 }
else if (m_actionZoom1To8->isChecked()) {
1240 }
else if (m_actionZoom1To16->isChecked()) {
1241 return ZOOM_1_TO_16;
1242 }
else if (m_actionZoom2To1->isChecked()) {
1244 }
else if (m_actionZoom4To1->isChecked()) {
1246 }
else if (m_actionZoom8To1->isChecked()) {
1248 }
else if (m_actionZoom16To1->isChecked()) {
1249 return ZOOM_16_TO_1;
1250 }
else if (m_actionZoomFill->isChecked()) {
1253 ENGAUGE_ASSERT (
false);
1259 if (event->type () == QEvent::KeyPress) {
1261 QKeyEvent *eventKeyPress = (QKeyEvent *) event;
1264 if ((eventKeyPress->key() == Qt::Key_E) &&
1265 ((eventKeyPress->modifiers() & Qt::ShiftModifier) != 0) &&
1266 ((eventKeyPress->modifiers() & Qt::ControlModifier) != 0)) {
1276 return QObject::eventFilter (target, event);
1279 void MainWindow::exportAllCoordinateSystems()
1281 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::exportAllCoordinateSystems";
1290 QString regressionFile = QString (
"%1_%2")
1291 .arg (m_regressionFile)
1293 fileExport (regressionFile,
1298 QString MainWindow::exportFilenameFromInputFilename (
const QString &fileName)
const
1300 QString outFileName = fileName;
1302 outFileName = outFileName.replace (
".xml",
".csv_actual");
1303 outFileName = outFileName.replace (
".dig",
".csv_actual");
1308 void MainWindow::fileExport(
const QString &fileName,
1311 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::fileExport"
1312 <<
" fileName=" << fileName.toLatin1().data();
1314 QFile file (fileName);
1315 if (file.open(QIODevice::WriteOnly)) {
1317 QTextStream str (&file);
1329 m_isDocumentExported =
true;
1330 m_dockChecklistGuide->
update (*m_cmdMediator,
1331 m_isDocumentExported);
1335 LOG4CPP_ERROR_S ((*mainCat)) <<
"MainWindow::fileExport"
1336 <<
" file=" << fileName.toLatin1().data()
1337 <<
" curDir=" << QDir::currentPath().toLatin1().data();
1338 QMessageBox::critical (0,
1339 engaugeWindowTitle(),
1340 tr (
"Unable to export to file ") + fileName);
1344 void MainWindow::fileImport (
const QString &fileName,
1345 ImportType importType)
1347 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::fileImport"
1348 <<
" fileName=" << fileName.toLatin1 ().data ()
1349 <<
" curDir=" << QDir::currentPath().toLatin1().data()
1350 <<
" importType=" << importType;
1352 QString originalFileOld = m_originalFile;
1353 bool originalFileWasImported = m_originalFileWasImported;
1355 m_originalFile = fileName;
1356 m_originalFileWasImported =
true;
1358 if (importType == IMPORT_TYPE_ADVANCED) {
1369 bool loaded =
false;
1370 #ifdef ENGAUGE_JPEG2000
1372 loaded = jpeg2000.
load (fileName,
1374 #endif // ENGAUGE_JPEG2000
1376 loaded = image.load (fileName);
1380 QMessageBox::warning (
this,
1381 engaugeWindowTitle(),
1383 .arg (tr (
"Cannot read file"))
1387 m_originalFile = originalFileOld;
1388 m_originalFileWasImported = originalFileWasImported;
1392 loaded = loadImage (fileName,
1399 if (importType == IMPORT_TYPE_ADVANCED) {
1409 m_originalFile = originalFileOld;
1410 m_originalFileWasImported = originalFileWasImported;
1416 void MainWindow::fileImportWithPrompts (ImportType importType)
1418 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::fileImportWithPrompts"
1419 <<
" importType=" << importType;
1424 QTextStream str (&filter);
1427 QList<QByteArray>::const_iterator itr;
1428 QList<QByteArray> supportedImageFormats = QImageReader::supportedImageFormats();
1429 QStringList supportedImageFormatStrings;
1430 for (itr = supportedImageFormats.begin (); itr != supportedImageFormats.end (); itr++) {
1431 QByteArray arr = *itr;
1432 QString extensionAsWildcard = QString (
"*.%1").arg (QString (arr));
1433 supportedImageFormatStrings << extensionAsWildcard;
1435 #ifdef ENGAUGE_JPEG2000
1438 #endif // ENGAUGE_JPEG2000
1440 supportedImageFormatStrings.sort();
1442 str <<
"Image Files (" << supportedImageFormatStrings.join (
" ") <<
")";
1446 str <<
";; All Files (*.*)";
1448 QString fileName = QFileDialog::getOpenFileName (
this,
1450 QDir::currentPath (),
1452 if (!fileName.isEmpty ()) {
1455 fileImport (fileName,
1461 void MainWindow::filePaste (ImportType importType)
1463 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::filePaste"
1464 <<
" importType=" << importType;
1466 QString originalFileOld = m_originalFile;
1467 bool originalFileWasImported = m_originalFileWasImported;
1469 QString fileName (
"clipboard");
1470 m_originalFile = fileName;
1471 m_originalFileWasImported =
true;
1473 if (importType == IMPORT_TYPE_ADVANCED) {
1484 QImage image = QApplication::clipboard()->image();
1486 bool loaded =
false;
1488 loaded = !image.isNull();
1492 QMessageBox::warning (
this,
1493 engaugeWindowTitle(),
1495 .arg (tr (
"Cannot read file"))
1499 m_originalFile = originalFileOld;
1500 m_originalFileWasImported = originalFileWasImported;
1504 loaded = loadImage (fileName,
1511 if (importType == IMPORT_TYPE_ADVANCED) {
1521 m_originalFile = originalFileOld;
1522 m_originalFileWasImported = originalFileWasImported;
1528 void MainWindow::ghostsCreate ()
1530 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::ghostsCreate";
1532 ENGAUGE_ASSERT (m_ghosts == 0);
1554 void MainWindow::ghostsDestroy ()
1556 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::ghostsDestroy";
1558 ENGAUGE_CHECK_PTR (m_ghosts);
1576 void MainWindow::loadCoordSystemListFromCmdMediator ()
1578 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::loadCoordSystemListFromCmdMediator";
1580 m_cmbCoordSystem->clear();
1584 for (
unsigned int i = 0; i < numberCoordSystem; i++) {
1585 int index1Based = i + 1;
1586 m_cmbCoordSystem->addItem (QString::number (index1Based),
1591 m_cmbCoordSystem->setCurrentIndex (0);
1594 bool enable = (m_cmbCoordSystem->count() > 1);
1595 m_cmbCoordSystem->setEnabled (enable);
1596 m_btnShowAll->setEnabled (enable);
1597 m_btnPrintAll->setEnabled (enable);
1600 void MainWindow::loadCurveListFromCmdMediator ()
1602 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::loadCurveListFromCmdMediator";
1604 m_cmbCurve->clear ();
1606 QStringList::iterator itr;
1607 for (itr = curvesGraphsNames.begin (); itr != curvesGraphsNames.end (); itr++) {
1609 QString curvesGraphName = *itr;
1610 m_cmbCurve->addItem (curvesGraphName);
1614 m_cmbCurve->setCurrentIndex (0);
1617 void MainWindow::loadDocumentFile (
const QString &fileName)
1619 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::loadDocumentFile fileName=" << fileName.toLatin1 ().data ();
1621 QApplication::setOverrideCursor(Qt::WaitCursor);
1624 QApplication::restoreOverrideCursor();
1628 setCurrentPathFromFile (fileName);
1629 rebuildRecentFileListForCurrentFile(fileName);
1630 m_currentFile = fileName;
1632 if (m_cmdMediator != 0) {
1633 delete m_cmdMediator;
1638 setupAfterLoad(fileName,
1640 IMPORT_TYPE_SIMPLE);
1643 m_actionDigitizeSelect->setChecked (
true);
1644 slotDigitizeSelect();
1646 m_engaugeFile = fileName;
1647 m_originalFile = fileName;
1648 m_originalFileWasImported =
false;
1654 QMessageBox::warning (
this,
1655 engaugeWindowTitle(),
1656 QString(
"%1 %2:\n%3.")
1657 .arg (tr (
"Cannot read file"))
1665 void MainWindow::loadErrorReportFile(
const QString &initialPath,
1666 const QString &errorReportFile)
1668 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::loadErrorReportFile"
1669 <<
" path=" << initialPath.toLatin1().data()
1670 <<
" file=" << errorReportFile.toLatin1().data();
1676 QString originalPath = QDir::currentPath();
1677 QDir::setCurrent(initialPath);
1679 QFile file (errorReportFile);
1680 if (!file.exists()) {
1682 QFileInfo fileInfo (errorReportFile);
1684 QMessageBox::critical (
this,
1685 engaugeWindowTitle(),
1686 tr (
"File not found:") +
" " + fileInfo.absoluteFilePath());
1691 QXmlStreamReader reader (&file);
1692 file.open(QIODevice::ReadOnly | QIODevice::Text);
1703 QDir::setCurrent(originalPath);
1705 setupAfterLoad(errorReportFile,
1706 "Error report opened",
1707 IMPORT_TYPE_SIMPLE);
1710 m_actionDigitizeSelect->setChecked (
true);
1711 slotDigitizeSelect();
1716 bool MainWindow::loadImage (
const QString &fileName,
1717 const QImage &image,
1718 ImportType importType)
1720 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::loadImage"
1721 <<
" fileName=" << fileName.toLatin1 ().data ()
1722 <<
" importType=" << importType;
1724 QApplication::setOverrideCursor(Qt::WaitCursor);
1727 QApplication::restoreOverrideCursor();
1729 setCurrentPathFromFile (fileName);
1731 m_engaugeFile = EMPTY_FILENAME;
1733 if (m_cmdMediator != 0) {
1734 delete m_cmdMediator;
1739 bool accepted = setupAfterLoad(fileName,
1740 tr (
"File imported"),
1746 if (m_actionHelpChecklistGuideWizard->isChecked () &&
1747 (m_fileCmdScript == 0)) {
1752 if (wizard->exec() == QDialog::Accepted) {
1754 for (CoordSystemIndex coordSystemIndex = 0; coordSystemIndex < m_cmdMediator->
document().
coordSystemCount(); coordSystemIndex++) {
1769 m_actionViewChecklistGuide->setChecked (
true);
1772 loadCurveListFromCmdMediator();
1775 loadCoordSystemListFromCmdMediator();
1781 m_actionDigitizeAxis->setChecked (
true);
1782 slotDigitizeAxis ();
1790 void MainWindow::loadInputFileForErrorReport(QDomDocument &domInputFile)
const
1792 QFile file (m_originalFile);
1796 if (!file.open (QIODevice::ReadOnly)) {
1800 domInputFile.setContent (&file);
1804 void MainWindow::loadToolTips()
1806 if (m_actionViewToolTips->isChecked ()) {
1809 m_actionDigitizeSelect->setToolTip (m_actionDigitizeSelect->text());
1810 m_actionDigitizeAxis->setToolTip (m_actionDigitizeAxis->text());
1811 m_actionDigitizeCurve->setToolTip (m_actionDigitizeCurve->text());
1812 m_actionDigitizePointMatch->setToolTip (m_actionDigitizePointMatch->text());
1813 m_actionDigitizeColorPicker->setToolTip (m_actionDigitizeColorPicker->text());
1814 m_actionDigitizeSegment->setToolTip (m_actionDigitizeSegment->text());
1815 m_cmbBackground->setToolTip (tr (
"Background image."));
1816 m_cmbCurve->setToolTip (tr (
"Currently selected curve."));
1817 m_viewPointStyle->setToolTip (tr (
"Point style for currently selected curve."));
1818 m_viewSegmentFilter->setToolTip (tr (
"Segment Fill filter for currently selected curve."));
1823 m_actionDigitizeSelect->setToolTip (
"");
1824 m_actionDigitizeAxis->setToolTip (
"");
1825 m_actionDigitizeCurve->setToolTip (
"");
1826 m_actionDigitizePointMatch->setToolTip (
"");
1827 m_actionDigitizeColorPicker->setToolTip (
"");
1828 m_actionDigitizeSegment->setToolTip (
"");
1829 m_cmbBackground->setToolTip (
"");
1830 m_cmbCurve->setToolTip (
"");
1831 m_viewPointStyle->setToolTip (
"");
1832 m_viewSegmentFilter->setToolTip (
"");
1837 bool MainWindow::maybeSave()
1839 if (m_cmdMediator != 0) {
1841 QMessageBox::StandardButton ret = QMessageBox::warning (
this,
1842 engaugeWindowTitle(),
1843 tr(
"The document has been modified.\n"
1844 "Do you want to save your changes?"),
1845 QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
1846 if (ret == QMessageBox::Save) {
1847 return slotFileSave();
1848 }
else if (ret == QMessageBox::Cancel) {
1859 const QString &fileName)
const
1867 QString csvExtension = QString (
".%1")
1869 QString tsvExtension = QString (
".%1")
1871 QString fileExtensionVersusCsv = fileName.right (csvExtension.size());
1872 QString fileExtensionVersusTsv = fileName.right (tsvExtension.size());
1876 if (csvExtension.compare (fileExtensionVersusCsv, Qt::CaseInsensitive) == 0) {
1877 modelExportFormatAfter.
setDelimiter (EXPORT_DELIMITER_COMMA);
1878 }
else if (tsvExtension.compare (fileExtensionVersusTsv, Qt::CaseInsensitive) == 0) {
1879 modelExportFormatAfter.
setDelimiter (EXPORT_DELIMITER_TAB);
1883 return modelExportFormatAfter;
1888 return m_modelMainWindow;
1891 void MainWindow::rebuildRecentFileListForCurrentFile(
const QString &filePath)
1893 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::rebuildRecentFileListForCurrentFile";
1895 setWindowFilePath (filePath);
1897 QSettings settings (SETTINGS_ENGAUGE, SETTINGS_DIGITIZER);
1898 QStringList recentFilePaths = settings.value (SETTINGS_RECENT_FILE_LIST).toStringList();
1899 recentFilePaths.removeAll (filePath);
1900 recentFilePaths.prepend (filePath);
1901 while (recentFilePaths.count () > (int) MAX_RECENT_FILE_LIST_SIZE) {
1902 recentFilePaths.removeLast ();
1904 settings.setValue (SETTINGS_RECENT_FILE_LIST, recentFilePaths);
1906 updateRecentFileList();
1911 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::resizeEvent";
1913 if (m_actionZoomFill->isChecked ()) {
1918 bool MainWindow::saveDocumentFile (
const QString &fileName)
1920 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::saveDocumentFile fileName=" << fileName.toLatin1 ().data ();
1922 QFile file(fileName);
1923 if (!file.open(QFile::WriteOnly)) {
1924 QMessageBox::warning (
this,
1925 engaugeWindowTitle(),
1926 QString (
"%1 %2: \n%3.")
1927 .arg(tr (
"Cannot write file"))
1929 .arg(file.errorString()));
1933 rebuildRecentFileListForCurrentFile (fileName);
1935 QApplication::setOverrideCursor (Qt::WaitCursor);
1936 QXmlStreamWriter writer(&file);
1937 writer.setAutoFormatting(
true);
1938 writer.writeStartDocument();
1939 writer.writeDTD(
"<!DOCTYPE engauge>");
1941 writer.writeEndDocument();
1942 QApplication::restoreOverrideCursor ();
1946 m_cmdMediator->setClean ();
1948 setCurrentFile(fileName);
1949 m_engaugeFile = fileName;
1959 const char *comment)
const
1961 if (m_cmdMediator != 0) {
1963 QString report = saveErrorReportFileAndExitXml (context,
1970 if (dlg.exec() == QDialog::Accepted) {
1978 QString MainWindow::saveErrorReportFileAndExitXml (
const char *context,
1981 const char *comment)
const
1983 const bool DEEP_COPY =
true;
1985 QString xmlErrorReport;
1986 QXmlStreamWriter writer (&xmlErrorReport);
1987 writer.setAutoFormatting(
true);
1990 writer.writeStartElement(DOCUMENT_SERIALIZE_ERROR_REPORT);
1993 writer.writeStartElement(DOCUMENT_SERIALIZE_APPLICATION);
1994 writer.writeAttribute(DOCUMENT_SERIALIZE_APPLICATION_VERSION_NUMBER, VERSION_NUMBER);
1995 writer.writeEndElement();
1999 QXmlStreamReader reader (m_startingDocumentSnapshot);
2000 while (!reader.atEnd ()) {
2002 if (reader.tokenType() != QXmlStreamReader::StartDocument &&
2003 reader.tokenType() != QXmlStreamReader::EndDocument) {
2004 writer.writeCurrentToken (reader);
2009 writer.writeStartElement(DOCUMENT_SERIALIZE_OPERATING_SYSTEM);
2010 writer.writeAttribute(DOCUMENT_SERIALIZE_OPERATING_SYSTEM_ENDIAN, EndianToString (QSysInfo::ByteOrder));
2011 writer.writeAttribute(DOCUMENT_SERIALIZE_OPERATING_SYSTEM_WORD_SIZE, QString::number (QSysInfo::WordSize));
2012 writer.writeEndElement();
2015 writer.writeStartElement(DOCUMENT_SERIALIZE_FILE);
2016 writer.writeAttribute(DOCUMENT_SERIALIZE_FILE_IMPORTED,
2017 m_originalFileWasImported ? DOCUMENT_SERIALIZE_BOOL_TRUE : DOCUMENT_SERIALIZE_BOOL_FALSE);
2018 writer.writeEndElement();
2021 m_cmdMediator->
saveXml(writer);
2024 writer.writeStartElement(DOCUMENT_SERIALIZE_ERROR);
2025 writer.writeAttribute(DOCUMENT_SERIALIZE_ERROR_CONTEXT, context);
2026 writer.writeAttribute(DOCUMENT_SERIALIZE_ERROR_FILE, file);
2027 writer.writeAttribute(DOCUMENT_SERIALIZE_ERROR_LINE, QString::number (line));
2028 writer.writeAttribute(DOCUMENT_SERIALIZE_ERROR_COMMENT, comment);
2029 writer.writeEndElement();
2031 writer.writeEndElement();
2034 QDomDocument domErrorReport (
"ErrorReport");
2035 domErrorReport.setContent (xmlErrorReport);
2038 if (!m_originalFileWasImported) {
2042 QDomDocument domInputFile;
2043 loadInputFileForErrorReport (domInputFile);
2044 QDomDocumentFragment fragmentFileFrom = domErrorReport.createDocumentFragment();
2045 if (!domInputFile.isNull()) {
2046 fragmentFileFrom.appendChild (domErrorReport.importNode (domInputFile.documentElement(), DEEP_COPY));
2048 QDomNodeList nodesFileTo = domErrorReport.elementsByTagName (DOCUMENT_SERIALIZE_FILE);
2049 if (nodesFileTo.count () > 0) {
2050 QDomNode nodeFileTo = nodesFileTo.at (0);
2051 nodeFileTo.appendChild (fragmentFileFrom);
2058 QDomNodeList nodesDocument = domErrorReport.elementsByTagName (DOCUMENT_SERIALIZE_DOCUMENT);
2059 for (
int i = 0 ; i < nodesDocument.count(); i++) {
2060 QDomNode nodeDocument = nodesDocument.at (i);
2061 QDomElement elemImage = nodeDocument.firstChildElement(DOCUMENT_SERIALIZE_IMAGE);
2062 if (!elemImage.isNull()) {
2065 if (elemImage.hasAttribute (DOCUMENT_SERIALIZE_IMAGE_WIDTH) &&
2066 elemImage.hasAttribute (DOCUMENT_SERIALIZE_IMAGE_HEIGHT)) {
2068 int width = elemImage.attribute(DOCUMENT_SERIALIZE_IMAGE_WIDTH).toInt();
2069 int height = elemImage.attribute(DOCUMENT_SERIALIZE_IMAGE_HEIGHT).toInt();
2071 QDomNode nodeReplacement;
2072 QDomElement elemReplacement = nodeReplacement.toElement();
2073 elemReplacement.setAttribute (DOCUMENT_SERIALIZE_IMAGE_WIDTH, width);
2074 elemReplacement.setAttribute (DOCUMENT_SERIALIZE_IMAGE_HEIGHT, height);
2077 nodeDocument.insertBefore (nodeReplacement,
2079 nodeDocument.removeChild(elemImage);
2085 return domErrorReport.toString();
2088 void MainWindow::saveStartingDocumentSnapshot()
2090 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::saveStartingDocumentSnapshot";
2092 QXmlStreamWriter writer (&m_startingDocumentSnapshot);
2093 writer.setAutoFormatting (
true);
2099 ENGAUGE_CHECK_PTR (m_scene);
2105 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::selectBackgroundOriginal";
2107 BackgroundImage previousBackground = (BackgroundImage) m_cmbBackground->currentData().toInt();
2109 int index = m_cmbBackground->findData (backgroundImage);
2110 ENGAUGE_ASSERT (index >= 0);
2112 m_cmbBackground->setCurrentIndex(index);
2114 return previousBackground;
2119 return m_cmbCurve->currentText ();
2122 void MainWindow::setCurrentFile (
const QString &fileName)
2124 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::setCurrentFile";
2126 QString fileNameStripped;
2127 if (!fileName.isEmpty()) {
2130 QFileInfo fileInfo (fileName);
2131 fileNameStripped = fileInfo.baseName();
2134 m_currentFile = fileNameStripped;
2135 m_currentFileWithPathAndFileExtension = fileName;
2137 updateWindowTitle ();
2140 void MainWindow::setCurrentPathFromFile (
const QString &fileName)
2142 QDir dir = QFileInfo (fileName).absoluteDir();
2144 if (dir.exists ()) {
2146 bool success = QDir::setCurrent (dir.absolutePath ());
2147 ENGAUGE_ASSERT (success);
2155 void MainWindow::setPixmap (
const QPixmap &pixmap)
2157 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::setPixmap";
2161 m_backgroundStateContext->
setPixmap (m_transformation,
2167 void MainWindow::settingsRead ()
2169 QSettings settings (SETTINGS_ENGAUGE, SETTINGS_DIGITIZER);
2171 settingsReadEnvironment (settings);
2172 settingsReadMainWindow (settings);
2175 void MainWindow::settingsReadEnvironment (QSettings &settings)
2177 settings.beginGroup (SETTINGS_GROUP_ENVIRONMENT);
2178 QDir::setCurrent (settings.value (SETTINGS_CURRENT_DIRECTORY,
2179 QDir::currentPath ()).toString ());
2180 settings.endGroup ();
2183 void MainWindow::settingsReadMainWindow (QSettings &settings)
2185 settings.beginGroup(SETTINGS_GROUP_MAIN_WINDOW);
2188 resize (settings.value (SETTINGS_SIZE,
2189 QSize (600, 600)).toSize ());
2190 move (settings.value (SETTINGS_POS,
2191 QPoint (200, 200)).toPoint ());
2194 QSize helpSize = settings.value (SETTINGS_HELP_SIZE,
2195 QSize (900, 600)).toSize();
2196 m_helpWindow->resize (helpSize);
2197 if (settings.contains (SETTINGS_HELP_POS)) {
2198 QPoint helpPos = settings.value (SETTINGS_HELP_POS).toPoint();
2199 m_helpWindow->move (helpPos);
2203 m_actionHelpChecklistGuideWizard->setChecked (settings.value (SETTINGS_CHECKLIST_GUIDE_WIZARD,
2207 bool viewBackgroundToolBar = settings.value (SETTINGS_VIEW_BACKGROUND_TOOLBAR,
2209 m_actionViewBackground->setChecked (viewBackgroundToolBar);
2210 m_toolBackground->setVisible (viewBackgroundToolBar);
2211 BackgroundImage backgroundImage = (BackgroundImage) settings.value (SETTINGS_BACKGROUND_IMAGE,
2212 BACKGROUND_IMAGE_FILTERED).toInt ();
2213 int indexBackground = m_cmbBackground->findData (QVariant (backgroundImage));
2214 m_cmbBackground->setCurrentIndex (indexBackground);
2217 bool viewDigitizeToolBar = settings.value (SETTINGS_VIEW_DIGITIZE_TOOLBAR,
2219 m_actionViewDigitize->setChecked (viewDigitizeToolBar);
2220 m_toolDigitize->setVisible (viewDigitizeToolBar);
2223 bool viewSettingsViewsToolBar = settings.value (SETTINGS_VIEW_SETTINGS_VIEWS_TOOLBAR,
2225 m_actionViewSettingsViews->setChecked (viewSettingsViewsToolBar);
2226 m_toolSettingsViews->setVisible (viewSettingsViewsToolBar);
2229 bool viewCoordSystemToolbar = settings.value (SETTINGS_VIEW_COORD_SYSTEM_TOOLBAR,
2231 m_actionViewCoordSystem->setChecked (viewCoordSystemToolbar);
2232 m_toolCoordSystem->setVisible (viewCoordSystemToolbar);
2235 bool viewToolTips = settings.value (SETTINGS_VIEW_TOOL_TIPS,
2237 m_actionViewToolTips->setChecked (viewToolTips);
2241 StatusBarMode statusBarMode = (StatusBarMode) settings.value (SETTINGS_VIEW_STATUS_BAR,
2244 m_actionStatusNever->setChecked (statusBarMode == STATUS_BAR_MODE_NEVER);
2245 m_actionStatusTemporary->setChecked (statusBarMode == STATUS_BAR_MODE_TEMPORARY);
2246 m_actionStatusAlways->setChecked (statusBarMode == STATUS_BAR_MODE_ALWAYS);
2251 const bool DOCKED_EQUALS_NOT_FLOATING =
false;
2252 Qt::DockWidgetArea area = (Qt::DockWidgetArea) settings.value (SETTINGS_CHECKLIST_GUIDE_DOCK_AREA,
2253 Qt::NoDockWidgetArea).toInt();
2255 if (area == Qt::NoDockWidgetArea) {
2257 addDockWidget (Qt::RightDockWidgetArea,
2258 m_dockChecklistGuide);
2259 m_dockChecklistGuide->setFloating(DOCKED_EQUALS_NOT_FLOATING);
2260 if (settings.contains (SETTINGS_CHECKLIST_GUIDE_DOCK_GEOMETRY)) {
2261 m_dockChecklistGuide->restoreGeometry (settings.value (SETTINGS_CHECKLIST_GUIDE_DOCK_GEOMETRY).toByteArray());
2266 addDockWidget (area,
2267 m_dockChecklistGuide);
2274 QLocale localeDefault;
2275 QLocale::Language language = (QLocale::Language) settings.value (SETTINGS_LOCALE_LANGUAGE,
2276 QVariant (localeDefault.language())).toInt();
2277 QLocale::Country country = (QLocale::Country) settings.value (SETTINGS_LOCALE_COUNTRY,
2278 QVariant (localeDefault.country())).toInt();
2279 QLocale locale (language,
2281 slotViewZoom ((ZoomFactor) settings.value (SETTINGS_ZOOM_FACTOR,
2282 QVariant (ZOOM_1_TO_1)).toInt());
2284 m_modelMainWindow.
setZoomFactorInitial((ZoomFactorInitial) settings.value (SETTINGS_ZOOM_FACTOR_INITIAL,
2285 QVariant (DEFAULT_ZOOM_FACTOR_INITIAL)).toInt());
2286 m_modelMainWindow.
setZoomControl ((ZoomControl) settings.value (SETTINGS_ZOOM_CONTROL,
2287 QVariant (ZOOM_CONTROL_MENU_WHEEL_PLUSMINUS)).toInt());
2288 m_modelMainWindow.
setMainTitleBarFormat ((MainTitleBarFormat) settings.value (SETTINGS_MAIN_TITLE_BAR_FORMAT,
2289 QVariant (MAIN_TITLE_BAR_FORMAT_PATH)).toInt());
2292 settings.endGroup();
2295 void MainWindow::settingsWrite ()
2297 QSettings settings (SETTINGS_ENGAUGE, SETTINGS_DIGITIZER);
2299 settings.beginGroup (SETTINGS_GROUP_ENVIRONMENT);
2300 settings.setValue (SETTINGS_CURRENT_DIRECTORY, QDir::currentPath ());
2301 settings.endGroup ();
2303 settings.beginGroup (SETTINGS_GROUP_MAIN_WINDOW);
2304 settings.setValue (SETTINGS_SIZE, size ());
2305 settings.setValue (SETTINGS_POS, pos ());
2306 settings.setValue (SETTINGS_HELP_SIZE, m_helpWindow->size());
2307 settings.setValue (SETTINGS_HELP_POS, m_helpWindow->pos ());
2308 if (m_dockChecklistGuide->isFloating()) {
2310 settings.setValue (SETTINGS_CHECKLIST_GUIDE_DOCK_AREA, Qt::NoDockWidgetArea);
2311 settings.setValue (SETTINGS_CHECKLIST_GUIDE_DOCK_GEOMETRY, m_dockChecklistGuide->saveGeometry ());
2315 settings.setValue (SETTINGS_CHECKLIST_GUIDE_DOCK_AREA, dockWidgetArea (m_dockChecklistGuide));
2318 settings.setValue (SETTINGS_CHECKLIST_GUIDE_WIZARD, m_actionHelpChecklistGuideWizard->isChecked ());
2319 settings.setValue (SETTINGS_LOCALE_LANGUAGE, m_modelMainWindow.
locale().language());
2320 settings.setValue (SETTINGS_LOCALE_COUNTRY, m_modelMainWindow.
locale().country());
2321 settings.setValue (SETTINGS_VIEW_BACKGROUND_TOOLBAR, m_actionViewBackground->isChecked());
2322 settings.setValue (SETTINGS_BACKGROUND_IMAGE, m_cmbBackground->currentData().toInt());
2323 settings.setValue (SETTINGS_VIEW_DIGITIZE_TOOLBAR, m_actionViewDigitize->isChecked ());
2324 settings.setValue (SETTINGS_VIEW_STATUS_BAR, m_statusBar->
statusBarMode ());
2325 settings.setValue (SETTINGS_VIEW_SETTINGS_VIEWS_TOOLBAR, m_actionViewSettingsViews->isChecked ());
2326 settings.setValue (SETTINGS_VIEW_COORD_SYSTEM_TOOLBAR, m_actionViewCoordSystem->isChecked ());
2327 settings.setValue (SETTINGS_VIEW_TOOL_TIPS, m_actionViewToolTips->isChecked ());
2328 settings.setValue (SETTINGS_ZOOM_CONTROL, m_modelMainWindow.
zoomControl());
2329 settings.setValue (SETTINGS_ZOOM_FACTOR, currentZoomFactor ());
2330 settings.setValue (SETTINGS_ZOOM_FACTOR_INITIAL, m_modelMainWindow.
zoomFactorInitial());
2331 settings.setValue (SETTINGS_MAIN_TITLE_BAR_FORMAT, m_modelMainWindow.
mainTitleBarFormat());
2332 settings.endGroup ();
2335 bool MainWindow::setupAfterLoad (
const QString &fileName,
2336 const QString &temporaryMessage ,
2337 ImportType importType)
2339 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::setupAfterLoad"
2340 <<
" file=" << fileName.toLatin1().data()
2341 <<
" message=" << temporaryMessage.toLatin1().data()
2342 <<
" importType=" << importType;
2344 const QString EMPTY_CURVE_NAME_TO_SKIP_BACKGROUND_PROCESSING;
2348 m_digitizeStateContext->
resetOnLoad (m_cmdMediator);
2352 EMPTY_CURVE_NAME_TO_SKIP_BACKGROUND_PROCESSING);
2353 setPixmap (m_cmdMediator->
pixmap ());
2357 if (importType == IMPORT_TYPE_ADVANCED) {
2359 applyZoomFactorAfterLoad();
2362 dlgImportAdvanced.exec();
2364 if (dlgImportAdvanced.result() == QDialog::Rejected) {
2368 int numberCoordSystem = dlgImportAdvanced.numberCoordSystem();
2377 connect (m_actionEditUndo, SIGNAL (triggered ()), m_cmdMediator, SLOT (undo ()));
2378 connect (m_actionEditUndo, SIGNAL (triggered ()), m_cmdStackShadow, SLOT (slotUndo ()));
2379 connect (m_actionEditRedo, SIGNAL (triggered ()), m_cmdMediator, SLOT (redo ()));
2380 connect (m_actionEditRedo, SIGNAL (triggered ()), m_cmdStackShadow, SLOT (slotRedo ()));
2381 connect (m_cmdMediator, SIGNAL (canRedoChanged(
bool)),
this, SLOT (slotCanRedoChanged (
bool)));
2382 connect (m_cmdMediator, SIGNAL (canUndoChanged(
bool)),
this, SLOT (slotCanUndoChanged (
bool)));
2383 connect (m_cmdMediator, SIGNAL (redoTextChanged (
const QString &)),
this, SLOT (slotRedoTextChanged (
const QString &)));
2384 connect (m_cmdMediator, SIGNAL (undoTextChanged (
const QString &)),
this, SLOT (slotUndoTextChanged (
const QString &)));
2385 loadCurveListFromCmdMediator ();
2386 loadCoordSystemListFromCmdMediator ();
2389 m_isDocumentExported =
false;
2398 m_cmbCurve->currentText ());
2399 m_backgroundStateContext->
setBackgroundImage ((BackgroundImage) m_cmbBackground->currentIndex ());
2401 applyZoomFactorAfterLoad();
2403 setCurrentFile(fileName);
2407 saveStartingDocumentSnapshot();
2416 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::showEvent"
2417 <<
" files=" << m_loadStartupFiles.join (
",").toLatin1().data();
2419 QMainWindow::showEvent (event);
2421 if (m_loadStartupFiles.count() > 0) {
2423 m_timerLoadStartupFiles =
new QTimer;
2424 m_timerLoadStartupFiles->setSingleShot (
true);
2425 connect (m_timerLoadStartupFiles, SIGNAL (timeout ()),
this, SLOT (slotLoadStartupFiles ()));
2426 m_timerLoadStartupFiles->start (0);
2436 void MainWindow::slotBtnPrintAll ()
2438 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::slotBtnPrintAll";
2442 QPrinter printer (QPrinter::HighResolution);
2443 QPrintDialog dlg (&printer,
this);
2444 if (dlg.exec() == QDialog::Accepted) {
2445 QPainter painter (&printer);
2446 m_view->render (&painter);
2453 void MainWindow::slotBtnShowAllPressed ()
2455 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::slotBtnShowAllPressed";
2461 void MainWindow::slotBtnShowAllReleased ()
2463 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::slotBtnShowAllReleased";
2469 void MainWindow::slotCanRedoChanged (
bool canRedo)
2471 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::slotCanRedoChanged";
2473 m_actionEditRedo->setEnabled (canRedo || m_cmdStackShadow->
canRedo());
2476 void MainWindow::slotCanUndoChanged (
bool canUndo)
2478 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::slotCanUndoChanged";
2480 m_actionEditUndo->setEnabled (canUndo);
2483 void MainWindow::slotChecklistClosed()
2485 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotChecklistClosed";
2487 m_actionViewChecklistGuide->setChecked (
false);
2490 void MainWindow::slotCleanChanged(
bool clean)
2492 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotCleanChanged";
2494 setWindowModified (!clean);
2497 void MainWindow::slotCmbBackground(
int currentIndex)
2499 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotCmbBackground";
2501 switch (currentIndex) {
2502 case BACKGROUND_IMAGE_NONE:
2503 if (!m_actionViewBackgroundNone->isChecked()) {
2504 m_actionViewBackgroundNone->toggle();
2508 case BACKGROUND_IMAGE_ORIGINAL:
2509 if (!m_actionViewBackgroundOriginal->isChecked ()) {
2510 m_actionViewBackgroundOriginal->toggle();
2514 case BACKGROUND_IMAGE_FILTERED:
2515 if (!m_actionViewBackgroundFiltered->isChecked ()) {
2516 m_actionViewBackgroundFiltered->toggle();
2524 void MainWindow::slotCmbCoordSystem(
int index)
2526 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotCmbCoordSystem";
2532 m_cmdMediator->push (cmd);
2535 void MainWindow::slotCmbCurve(
int )
2537 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotCmbCurve";
2542 m_cmbCurve->currentText ());
2545 updateViewedCurves();
2549 void MainWindow::slotContextMenuEvent (QString pointIdentifier)
2551 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotContextMenuEvent point=" << pointIdentifier.toLatin1 ().data ();
2557 void MainWindow::slotDigitizeAxis ()
2559 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotDigitizeAxis";
2562 DIGITIZE_STATE_AXIS);
2563 m_cmbCurve->setEnabled (
false);
2568 void MainWindow::slotDigitizeColorPicker ()
2570 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotDigitizeColorPicker";
2573 DIGITIZE_STATE_COLOR_PICKER);
2574 m_cmbCurve->setEnabled (
true);
2579 void MainWindow::slotDigitizeCurve ()
2581 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotDigitizeCurve";
2584 DIGITIZE_STATE_CURVE);
2585 m_cmbCurve->setEnabled (
true);
2590 void MainWindow::slotDigitizePointMatch ()
2592 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotDigitizePointMatch";
2595 DIGITIZE_STATE_POINT_MATCH);
2596 m_cmbCurve->setEnabled (
true);
2601 void MainWindow::slotDigitizeSegment ()
2603 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotDigitizeSegment";
2606 DIGITIZE_STATE_SEGMENT);
2607 m_cmbCurve->setEnabled (
true);
2612 void MainWindow::slotDigitizeSelect ()
2614 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotDigitizeSelect";
2617 DIGITIZE_STATE_SELECT);
2618 m_cmbCurve->setEnabled (
false);
2623 void MainWindow::slotEditCopy ()
2625 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotEditCopy";
2634 void MainWindow::slotEditCut ()
2636 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotEditCut";
2645 void MainWindow::slotEditDelete ()
2647 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotEditDelete";
2656 void MainWindow::slotEditMenu ()
2658 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotEditMenu";
2660 m_actionEditPasteAsNew->setEnabled (!QApplication::clipboard()->image().isNull());
2661 m_actionEditPasteAsNewAdvanced->setEnabled (!QApplication::clipboard()->image().isNull());
2664 void MainWindow::slotEditPaste ()
2666 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotEditPaste";
2669 void MainWindow::slotEditPasteAsNew ()
2671 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotEditPasteAsNew";
2673 filePaste (IMPORT_TYPE_SIMPLE);
2676 void MainWindow::slotEditPasteAsNewAdvanced ()
2678 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotEditPasteAsNewAdvanced";
2680 filePaste (IMPORT_TYPE_ADVANCED);
2683 void MainWindow::slotFileClose()
2685 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileClose";
2699 DIGITIZE_STATE_EMPTY);
2705 m_backgroundStateContext->
close ();
2708 m_scene->setSceneRect (QRectF (0, 0, 1, 1));
2711 delete m_cmdMediator;
2717 setWindowTitle (engaugeWindowTitle ());
2723 void MainWindow::slotFileExport ()
2725 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileExport";
2730 QString filter = QString (
"%1;;%2;;All files (*.*)")
2733 QString defaultFileName = QString (
"%1/%2.%3")
2734 .arg (QDir::currentPath ())
2735 .arg (m_currentFile)
2738 QString filterCsv = exportStrategy.
filterCsv ();
2739 QString fileName = dlg.getSaveFileName (
this,
2744 if (!fileName.isEmpty ()) {
2746 fileExport(fileName,
2755 void MainWindow::slotFileImport ()
2757 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileImport";
2759 fileImportWithPrompts (IMPORT_TYPE_SIMPLE);
2762 void MainWindow::slotFileImportAdvanced ()
2764 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileImportAdvanced";
2766 fileImportWithPrompts (IMPORT_TYPE_ADVANCED);
2769 void MainWindow::slotFileImportDraggedImage(QImage image)
2771 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileImportDraggedImage";
2776 IMPORT_TYPE_SIMPLE);
2779 void MainWindow::slotFileImportDraggedImageUrl(QUrl url)
2781 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileImportDraggedImageUrl url=" << url.toString ().toLatin1 ().data ();
2786 void MainWindow::slotFileImportImage(QString fileName, QImage image)
2788 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileImportImage fileName=" << fileName.toLatin1 ().data ();
2791 loadImage (fileName,
2793 IMPORT_TYPE_SIMPLE);
2796 void MainWindow::slotFileOpen()
2798 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileOpen";
2804 QString filter = QString (
"%1 (*.%2);; All Files (*.*)")
2805 .arg (ENGAUGE_FILENAME_DESCRIPTION)
2806 .arg (ENGAUGE_FILENAME_EXTENSION);
2808 QString fileName = QFileDialog::getOpenFileName (
this,
2809 tr(
"Open Document"),
2810 QDir::currentPath (),
2812 if (!fileName.isEmpty ()) {
2814 loadDocumentFile (fileName);
2820 void MainWindow::slotFileOpenDraggedDigFile (QString fileName)
2822 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileOpenDraggedDigFile";
2824 loadDocumentFile (fileName);
2827 void MainWindow::slotFilePrint()
2829 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFilePrint";
2831 QPrinter printer (QPrinter::HighResolution);
2832 QPrintDialog dlg (&printer,
this);
2833 if (dlg.exec() == QDialog::Accepted) {
2834 QPainter painter (&printer);
2835 m_view->render (&painter);
2840 bool MainWindow::slotFileSave()
2842 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileSave";
2844 if (m_engaugeFile.isEmpty()) {
2845 return slotFileSaveAs();
2847 return saveDocumentFile (m_engaugeFile);
2851 bool MainWindow::slotFileSaveAs()
2853 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileSaveAs";
2856 QString filenameDefault = m_currentFile;
2857 if (!m_currentFile.endsWith (ENGAUGE_FILENAME_EXTENSION)) {
2858 filenameDefault = QString (
"%1.%2")
2859 .arg (m_currentFile)
2860 .arg (ENGAUGE_FILENAME_EXTENSION);
2863 if (!m_engaugeFile.isEmpty()) {
2864 filenameDefault = m_engaugeFile;
2867 QString filterDigitizer = QString (
"%1 (*.%2)")
2868 .arg (ENGAUGE_FILENAME_DESCRIPTION)
2869 .arg (ENGAUGE_FILENAME_EXTENSION);
2870 QString filterAll (
"All files (*. *)");
2872 QStringList filters;
2873 filters << filterDigitizer;
2874 filters << filterAll;
2876 QFileDialog dlg(
this);
2877 dlg.selectNameFilter (filterDigitizer);
2878 dlg.setNameFilters (filters);
2879 dlg.setWindowModality(Qt::WindowModal);
2880 dlg.setAcceptMode(QFileDialog::AcceptSave);
2881 dlg.selectFile(filenameDefault);
2884 QStringList files = dlg.selectedFiles();
2885 return saveDocumentFile(files.at(0));
2891 void MainWindow::slotHelpAbout()
2893 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotHelpAbout";
2899 void MainWindow::slotHelpTutorial()
2901 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotHelpTutorial";
2903 m_tutorialDlg->show ();
2904 m_tutorialDlg->exec ();
2907 void MainWindow::slotKeyPress (Qt::Key key,
2908 bool atLeastOneSelectedItem)
2910 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotKeyPress"
2911 <<
" key=" << QKeySequence (key).toString().toLatin1 ().data ()
2912 <<
" atLeastOneSelectedItem=" << (atLeastOneSelectedItem ?
"true" :
"false");
2916 atLeastOneSelectedItem);
2919 void MainWindow::slotLeave ()
2921 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::slotLeave";
2923 m_digitizeStateContext->
handleLeave (m_cmdMediator);
2926 void MainWindow::slotLoadStartupFiles ()
2928 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotLoadStartupFiles";
2930 ENGAUGE_ASSERT (m_loadStartupFiles.count() > 0);
2932 QString fileName = m_loadStartupFiles.front();
2933 m_loadStartupFiles.pop_front();
2939 loadDocumentFile (fileName);
2943 fileImport (fileName,
2944 IMPORT_TYPE_SIMPLE);
2948 if (m_loadStartupFiles.count() > 0) {
2952 QProcess::startDetached (QCoreApplication::applicationFilePath(),
2953 m_loadStartupFiles);
2957 void MainWindow::slotMouseMove (QPointF pos)
2962 if (m_cmdMediator != 0) {
2965 QString coordsScreen, coordsGraph, resolutionGraph;
2984 void MainWindow::slotMousePress (QPointF pos)
2986 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotMousePress";
2994 void MainWindow::slotMouseRelease (QPointF pos)
2996 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotMouseRelease";
2998 if (pos.x() < 0 || pos.y() < 0) {
3012 void MainWindow::slotRecentFileAction ()
3014 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotRecentFileAction";
3016 QAction *action = qobject_cast<QAction*>(sender ());
3019 QString fileName = action->data().toString();
3020 loadDocumentFile (fileName);
3024 void MainWindow::slotRecentFileClear ()
3026 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotRecentFileClear";
3028 QStringList emptyList;
3030 QSettings settings (SETTINGS_ENGAUGE, SETTINGS_DIGITIZER);
3031 settings.setValue (SETTINGS_RECENT_FILE_LIST,
3034 updateRecentFileList();
3037 void MainWindow::slotRedoTextChanged (
const QString &text)
3039 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::slotRedoTextChanged";
3041 QString completeText (
"Redo");
3042 if (!text.isEmpty ()) {
3043 completeText += QString (
" \"%1\"").arg (text);
3045 m_actionEditRedo->setText (completeText);
3048 void MainWindow::slotSetOverrideCursor (QCursor cursor)
3050 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSetOverrideCursor";
3056 void MainWindow::slotSettingsAxesChecker ()
3058 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsAxesChecker";
3060 m_dlgSettingsAxesChecker->
load (*m_cmdMediator);
3061 m_dlgSettingsAxesChecker->show ();
3064 void MainWindow::slotSettingsColorFilter ()
3066 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsColorFilter";
3068 m_dlgSettingsColorFilter->
load (*m_cmdMediator);
3069 m_dlgSettingsColorFilter->show ();
3072 void MainWindow::slotSettingsCoords ()
3074 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsCoords";
3076 m_dlgSettingsCoords->
load (*m_cmdMediator);
3077 m_dlgSettingsCoords->show ();
3080 void MainWindow::slotSettingsCurveAddRemove ()
3082 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsCurveAddRemove";
3084 m_dlgSettingsCurveAddRemove->
load (*m_cmdMediator);
3085 m_dlgSettingsCurveAddRemove->show ();
3088 void MainWindow::slotSettingsCurveProperties ()
3090 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsCurveProperties";
3092 m_dlgSettingsCurveProperties->
load (*m_cmdMediator);
3094 m_dlgSettingsCurveProperties->show ();
3097 void MainWindow::slotSettingsDigitizeCurve ()
3099 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsDigitizeCurve";
3101 m_dlgSettingsDigitizeCurve->
load (*m_cmdMediator);
3102 m_dlgSettingsDigitizeCurve->show ();
3105 void MainWindow::slotSettingsExportFormat ()
3107 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsExportFormat";
3110 m_dlgSettingsExportFormat->
load (*m_cmdMediator);
3111 m_dlgSettingsExportFormat->show ();
3118 void MainWindow::slotSettingsGeneral ()
3120 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsGeneral";
3122 m_dlgSettingsGeneral->
load (*m_cmdMediator);
3123 m_dlgSettingsGeneral->show ();
3126 void MainWindow::slotSettingsGridRemoval ()
3128 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsGridRemoval";
3130 m_dlgSettingsGridRemoval->
load (*m_cmdMediator);
3131 m_dlgSettingsGridRemoval->show ();
3134 void MainWindow::slotSettingsPointMatch ()
3136 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsPointMatch";
3138 m_dlgSettingsPointMatch->
load (*m_cmdMediator);
3139 m_dlgSettingsPointMatch->show ();
3142 void MainWindow::slotSettingsSegments ()
3144 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsSegments";
3146 m_dlgSettingsSegments->
load (*m_cmdMediator);
3147 m_dlgSettingsSegments->show ();
3150 void MainWindow::slotSettingsMainWindow ()
3152 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsMainWindow";
3156 m_dlgSettingsMainWindow->show ();
3159 void MainWindow::slotTimeoutRegressionErrorReport ()
3161 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotTimeoutRegressionErrorReport"
3162 <<
" cmdStackIndex=" << m_cmdMediator->index()
3163 <<
" cmdStackCount=" << m_cmdMediator->count();
3165 if (m_cmdStackShadow->
canRedo()) {
3171 exportAllCoordinateSystems ();
3174 m_cmdMediator->setClean();
3180 void MainWindow::slotTimeoutRegressionFileCmdScript ()
3182 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotTimeoutRegressionFileCmdScript";
3184 if (m_fileCmdScript->
canRedo()) {
3186 m_fileCmdScript->
redo(*
this);
3191 if (m_cmdMediator != 0) {
3193 exportAllCoordinateSystems ();
3196 m_cmdMediator->setClean();
3206 void MainWindow::slotUndoTextChanged (
const QString &text)
3208 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::slotUndoTextChanged";
3210 QString completeText (
"Undo");
3211 if (!text.isEmpty ()) {
3212 completeText += QString (
" \"%1\"").arg (text);
3214 m_actionEditUndo->setText (completeText);
3217 void MainWindow::slotViewGroupBackground(QAction *action)
3219 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewGroupBackground";
3222 BackgroundImage backgroundImage;
3223 int indexBackground;
3224 if (action == m_actionViewBackgroundNone) {
3225 indexBackground = m_cmbBackground->findData (QVariant (BACKGROUND_IMAGE_NONE));
3226 backgroundImage = BACKGROUND_IMAGE_NONE;
3227 }
else if (action == m_actionViewBackgroundOriginal) {
3228 indexBackground = m_cmbBackground->findData (QVariant (BACKGROUND_IMAGE_ORIGINAL));
3229 backgroundImage = BACKGROUND_IMAGE_ORIGINAL;
3230 }
else if (action == m_actionViewBackgroundFiltered) {
3231 indexBackground = m_cmbBackground->findData (QVariant (BACKGROUND_IMAGE_FILTERED));
3232 backgroundImage = BACKGROUND_IMAGE_FILTERED;
3234 ENGAUGE_ASSERT (
false);
3237 indexBackground = m_cmbBackground->findData (QVariant (BACKGROUND_IMAGE_ORIGINAL));
3238 backgroundImage = BACKGROUND_IMAGE_ORIGINAL;
3241 m_cmbBackground->setCurrentIndex (indexBackground);
3245 void MainWindow::slotViewGroupCurves(QAction * )
3247 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewGroupCurves";
3249 updateViewedCurves ();
3252 void MainWindow::slotViewGroupStatus(QAction *action)
3254 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewGroupStatus";
3256 ENGAUGE_CHECK_PTR (m_statusBar);
3258 if (action == m_actionStatusNever) {
3260 }
else if (action == m_actionStatusTemporary) {
3267 void MainWindow::slotViewToolBarBackground ()
3269 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewToolBarBackground";
3271 if (m_actionViewBackground->isChecked ()) {
3272 m_toolBackground->show();
3274 m_toolBackground->hide();
3278 void MainWindow::slotViewToolBarChecklistGuide ()
3280 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewToolBarChecklistGuide";
3282 if (m_actionViewChecklistGuide->isChecked ()) {
3283 m_dockChecklistGuide->show();
3285 m_dockChecklistGuide->hide();
3289 void MainWindow::slotViewToolBarCoordSystem ()
3291 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewToolBarCoordSystem";
3293 if (m_actionViewCoordSystem->isChecked ()) {
3294 m_toolCoordSystem->show();
3296 m_toolCoordSystem->hide();
3300 void MainWindow::slotViewToolBarDigitize ()
3302 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewToolBarDigitize";
3304 if (m_actionViewDigitize->isChecked ()) {
3305 m_toolDigitize->show();
3307 m_toolDigitize->hide();
3311 void MainWindow::slotViewToolBarSettingsViews ()
3313 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewToolBarSettingsViews";
3315 if (m_actionViewSettingsViews->isChecked ()) {
3316 m_toolSettingsViews->show();
3318 m_toolSettingsViews->hide();
3322 void MainWindow::slotViewToolTips ()
3324 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewToolTips";
3329 void MainWindow::slotViewZoom(
int zoom)
3331 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewZoom";
3334 switch ((ZoomFactor) zoom) {
3336 m_actionZoom16To1->setChecked(
true);
3337 slotViewZoom16To1 ();
3340 m_actionZoom8To1->setChecked(
true);
3341 slotViewZoom8To1 ();
3344 m_actionZoom4To1->setChecked(
true);
3345 slotViewZoom4To1 ();
3348 m_actionZoom2To1->setChecked(
true);
3349 slotViewZoom2To1 ();
3352 m_actionZoom1To1->setChecked(
true);
3353 slotViewZoom1To1 ();
3356 m_actionZoom1To2->setChecked(
true);
3357 slotViewZoom1To2 ();
3360 m_actionZoom1To4->setChecked(
true);
3361 slotViewZoom1To4 ();
3364 m_actionZoom1To8->setChecked(
true);
3365 slotViewZoom1To8 ();
3368 m_actionZoom1To16->setChecked(
true);
3369 slotViewZoom1To16 ();
3372 m_actionZoomFill->setChecked(
true);
3373 slotViewZoomFill ();
3378 void MainWindow::slotViewZoom16To1 ()
3380 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewZoom16To1";
3382 QTransform transform;
3383 transform.scale (16.0, 16.0);
3384 m_view->setTransform (transform);
3388 void MainWindow::slotViewZoom8To1 ()
3390 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewZoom8To1";
3392 QTransform transform;
3393 transform.scale (8.0, 8.0);
3394 m_view->setTransform (transform);
3398 void MainWindow::slotViewZoom4To1 ()
3400 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewZoom4To1";
3402 QTransform transform;
3403 transform.scale (4.0, 4.0);
3404 m_view->setTransform (transform);
3408 void MainWindow::slotViewZoom2To1 ()
3410 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotZoom2To1";
3412 QTransform transform;
3413 transform.scale (2.0, 2.0);
3414 m_view->setTransform (transform);
3418 void MainWindow::slotViewZoom1To1 ()
3420 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewZoom1To1";
3422 QTransform transform;
3423 transform.scale (1.0, 1.0);
3424 m_view->setTransform (transform);
3428 void MainWindow::slotViewZoom1To2 ()
3430 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotZoom1To2";
3432 QTransform transform;
3433 transform.scale (0.5, 0.5);
3434 m_view->setTransform (transform);
3438 void MainWindow::slotViewZoom1To4 ()
3440 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotZoom1To4";
3442 QTransform transform;
3443 transform.scale (0.25, 0.25);
3444 m_view->setTransform (transform);
3448 void MainWindow::slotViewZoom1To8 ()
3450 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotZoom1To8";
3452 QTransform transform;
3453 transform.scale (0.125, 0.125);
3454 m_view->setTransform (transform);
3458 void MainWindow::slotViewZoom1To16 ()
3460 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotZoom1To16";
3462 QTransform transform;
3463 transform.scale (0.0625, 0.0625);
3464 m_view->setTransform (transform);
3468 void MainWindow::slotViewZoomFill ()
3470 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewZoomFill";
3472 m_backgroundStateContext->
fitInView (*m_view);
3477 void MainWindow::slotViewZoomIn ()
3479 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewZoomIn";
3483 bool goto16To1 =
false, goto8To1 =
false, goto4To1 =
false, goto2To1 =
false;
3484 bool goto1To1 =
false;
3485 bool goto1To2 =
false, goto1To4 =
false, goto1To8 =
false, goto1To16 =
false;
3486 if (m_actionZoomFill->isChecked ()) {
3489 double xScale = m_view->transform().m11();
3490 double yScale = m_view->transform().m22();
3491 double scale = qMin(xScale, yScale);
3492 if (scale < 0.125) {
3494 }
else if (scale < 0.25) {
3496 }
else if (scale < 0.5) {
3498 }
else if (scale < 1) {
3500 }
else if (scale < 2) {
3502 }
else if (scale < 4) {
3504 }
else if (scale < 8) {
3510 goto16To1 = m_actionZoom8To1->isChecked ();
3511 goto8To1 = m_actionZoom4To1->isChecked ();
3512 goto4To1 = m_actionZoom2To1->isChecked ();
3513 goto2To1 = m_actionZoom1To1->isChecked ();
3514 goto1To1 = m_actionZoom1To2->isChecked ();
3515 goto1To2 = m_actionZoom1To4->isChecked ();
3516 goto1To4 = m_actionZoom1To8->isChecked ();
3517 goto1To8 = m_actionZoom1To16->isChecked ();
3522 m_actionZoom16To1->setChecked (
true);
3523 slotViewZoom16To1 ();
3524 }
else if (goto8To1) {
3525 m_actionZoom8To1->setChecked (
true);
3526 slotViewZoom8To1 ();
3527 }
else if (goto4To1) {
3528 m_actionZoom4To1->setChecked (
true);
3529 slotViewZoom4To1 ();
3530 }
else if (goto2To1) {
3531 m_actionZoom2To1->setChecked (
true);
3532 slotViewZoom2To1 ();
3533 }
else if (goto1To1) {
3534 m_actionZoom1To1->setChecked (
true);
3535 slotViewZoom1To1 ();
3536 }
else if (goto1To2) {
3537 m_actionZoom1To2->setChecked (
true);
3538 slotViewZoom1To2 ();
3539 }
else if (goto1To4) {
3540 m_actionZoom1To4->setChecked (
true);
3541 slotViewZoom1To4 ();
3542 }
else if (goto1To8) {
3543 m_actionZoom1To8->setChecked (
true);
3544 slotViewZoom1To8 ();
3545 }
else if (goto1To16) {
3546 m_actionZoom1To16->setChecked (
true);
3547 slotViewZoom1To16 ();
3551 void MainWindow::slotViewZoomInFromWheelEvent ()
3553 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewZoomInFromWheelEvent";
3555 if ((m_modelMainWindow.
zoomControl() == ZOOM_CONTROL_MENU_WHEEL) ||
3556 (m_modelMainWindow.
zoomControl() == ZOOM_CONTROL_MENU_WHEEL_PLUSMINUS)) {
3563 void MainWindow::slotViewZoomOut ()
3565 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewZoomOut";
3569 bool goto16To1 =
false, goto8To1 =
false, goto4To1 =
false, goto2To1 =
false;
3570 bool goto1To1 =
false;
3571 bool goto1To2 =
false, goto1To4 =
false, goto1To8 =
false, goto1To16 =
false;
3572 if (m_actionZoomFill->isChecked ()) {
3575 double xScale = m_view->transform().m11();
3576 double yScale = m_view->transform().m22();
3577 double scale = qMax(xScale, yScale);
3580 }
else if (scale > 4) {
3582 }
else if (scale > 2) {
3584 }
else if (scale > 1) {
3586 }
else if (scale > 0.5) {
3588 }
else if (scale > 0.25) {
3590 }
else if (scale > 0.125) {
3596 goto8To1 = m_actionZoom16To1->isChecked ();
3597 goto4To1 = m_actionZoom8To1->isChecked ();
3598 goto2To1 = m_actionZoom4To1->isChecked ();
3599 goto1To1 = m_actionZoom2To1->isChecked ();
3600 goto1To2 = m_actionZoom1To1->isChecked ();
3601 goto1To4 = m_actionZoom1To2->isChecked ();
3602 goto1To8 = m_actionZoom1To4->isChecked ();
3603 goto1To16 = m_actionZoom1To8->isChecked ();
3608 m_actionZoom1To16->setChecked (
true);
3609 slotViewZoom1To16 ();
3610 }
else if (goto1To8) {
3611 m_actionZoom1To8->setChecked (
true);
3612 slotViewZoom1To8 ();
3613 }
else if (goto1To4) {
3614 m_actionZoom1To4->setChecked (
true);
3615 slotViewZoom1To4 ();
3616 }
else if (goto1To2) {
3617 m_actionZoom1To2->setChecked (
true);
3618 slotViewZoom1To2 ();
3619 }
else if (goto1To1) {
3620 m_actionZoom1To1->setChecked (
true);
3621 slotViewZoom1To1 ();
3622 }
else if (goto2To1) {
3623 m_actionZoom2To1->setChecked (
true);
3624 slotViewZoom2To1 ();
3625 }
else if (goto4To1) {
3626 m_actionZoom4To1->setChecked (
true);
3627 slotViewZoom4To1 ();
3628 }
else if (goto8To1) {
3629 m_actionZoom8To1->setChecked (
true);
3630 slotViewZoom8To1 ();
3631 }
else if (goto16To1) {
3632 m_actionZoom16To1->setChecked (
true);
3633 slotViewZoom16To1 ();
3637 void MainWindow::slotViewZoomOutFromWheelEvent ()
3639 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewZoomOutFromWheelEvent";
3641 if ((m_modelMainWindow.
zoomControl() == ZOOM_CONTROL_MENU_WHEEL) ||
3642 (m_modelMainWindow.
zoomControl() == ZOOM_CONTROL_MENU_WHEEL_PLUSMINUS)) {
3649 void MainWindow::startRegressionTestErrorReport(
const QString &initialPath,
3650 const QString ®ressionInputFile)
3652 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::startRegressionTestErrorReport";
3654 const int REGRESSION_INTERVAL = 400;
3658 QString absoluteRegressionInputFile = QString (
"%1/%2")
3660 .arg (regressionInputFile);
3663 m_regressionFile = exportFilenameFromInputFilename (absoluteRegressionInputFile);
3665 m_timerRegressionErrorReport =
new QTimer();
3666 m_timerRegressionErrorReport->setSingleShot(
false);
3667 connect (m_timerRegressionErrorReport, SIGNAL (timeout()),
this, SLOT (slotTimeoutRegressionErrorReport()));
3669 m_timerRegressionErrorReport->start(REGRESSION_INTERVAL);
3672 void MainWindow::startRegressionTestFileCmdScript()
3674 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::startRegressionTestFileCmdScript";
3676 const int REGRESSION_INTERVAL = 400;
3678 m_timerRegressionFileCmdScript =
new QTimer();
3679 m_timerRegressionFileCmdScript->setSingleShot(
false);
3680 connect (m_timerRegressionFileCmdScript, SIGNAL (timeout()),
this, SLOT (slotTimeoutRegressionFileCmdScript()));
3682 m_timerRegressionFileCmdScript->start(REGRESSION_INTERVAL);
3687 return m_transformation;
3697 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateAfterCommand";
3699 ENGAUGE_CHECK_PTR (m_cmdMediator);
3703 updateAfterCommandStatusBarCoords ();
3712 m_dockChecklistGuide->
update (*m_cmdMediator,
3713 m_isDocumentExported);
3717 writeCheckpointToLogFile ();
3720 void MainWindow::updateAfterCommandStatusBarCoords ()
3722 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateAfterCommandStatusBarCoords";
3727 const QPoint HACK_SO_GRAPH_COORDINATE_MATCHES_INPUT (1, 1);
3731 updateTransformationAndItsDependencies();
3734 if (!m_transformationBefore.transformIsDefined() && m_transformation.
transformIsDefined()) {
3742 }
else if (m_transformationBefore.transformIsDefined() && !m_transformation.
transformIsDefined()) {
3750 }
else if (m_transformation.
transformIsDefined() && (m_transformationBefore != m_transformation)) {
3759 QPoint posLocal = m_view->mapFromGlobal (QCursor::pos ()) - HACK_SO_GRAPH_COORDINATE_MATCHES_INPUT;
3760 QPointF posScreen = m_view->mapToScene (posLocal);
3762 slotMouseMove (posScreen);
3767 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateAfterMouseRelease";
3772 void MainWindow::updateControls ()
3774 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateControls"
3775 <<
" selectedItems=" << m_scene->selectedItems().count();
3777 m_cmbBackground->setEnabled (!m_currentFile.isEmpty ());
3779 m_menuFileOpenRecent->setEnabled ((m_actionRecentFiles.count () > 0) &&
3780 (m_actionRecentFiles.at(0)->isVisible ()));
3781 m_actionClose->setEnabled (!m_currentFile.isEmpty ());
3782 m_actionSave->setEnabled (!m_currentFile.isEmpty ());
3783 m_actionSaveAs->setEnabled (!m_currentFile.isEmpty ());
3784 m_actionExport->setEnabled (!m_currentFile.isEmpty ());
3785 m_actionPrint->setEnabled (!m_currentFile.isEmpty ());
3787 if (m_cmdMediator == 0) {
3788 m_actionEditUndo->setEnabled (
false);
3789 m_actionEditRedo->setEnabled (
false);
3791 m_actionEditUndo->setEnabled (m_cmdMediator->canUndo ());
3792 m_actionEditRedo->setEnabled (m_cmdMediator->canRedo () || m_cmdStackShadow->
canRedo ());
3794 m_actionEditCut->setEnabled (m_scene->selectedItems().count () > 0);
3795 m_actionEditCopy->setEnabled (m_scene->selectedItems().count () > 0);
3796 m_actionEditPaste->setEnabled (
false);
3797 m_actionEditDelete->setEnabled (m_scene->selectedItems().count () > 0);
3800 m_actionDigitizeAxis->setEnabled (!m_currentFile.isEmpty ());
3801 m_actionDigitizeCurve ->setEnabled (!m_currentFile.isEmpty ());
3802 m_actionDigitizePointMatch->setEnabled (!m_currentFile.isEmpty ());
3803 m_actionDigitizeColorPicker->setEnabled (!m_currentFile.isEmpty ());
3804 m_actionDigitizeSegment->setEnabled (!m_currentFile.isEmpty ());
3805 m_actionDigitizeSelect->setEnabled (!m_currentFile.isEmpty ());
3807 m_actionViewBackground->setEnabled (!m_currentFile.isEmpty());
3808 m_actionViewChecklistGuide->setEnabled (!m_dockChecklistGuide->
browserIsEmpty());
3809 m_actionViewDigitize->setEnabled (!m_currentFile.isEmpty ());
3810 m_actionViewSettingsViews->setEnabled (!m_currentFile.isEmpty ());
3812 m_actionSettingsCoords->setEnabled (!m_currentFile.isEmpty ());
3813 m_actionSettingsCurveAddRemove->setEnabled (!m_currentFile.isEmpty ());
3814 m_actionSettingsCurveProperties->setEnabled (!m_currentFile.isEmpty ());
3815 m_actionSettingsDigitizeCurve->setEnabled (!m_currentFile.isEmpty ());
3816 m_actionSettingsExport->setEnabled (!m_currentFile.isEmpty ());
3817 m_actionSettingsColorFilter->setEnabled (!m_currentFile.isEmpty ());
3818 m_actionSettingsAxesChecker->setEnabled (!m_currentFile.isEmpty ());
3819 m_actionSettingsGridRemoval->setEnabled (!m_currentFile.isEmpty ());
3820 m_actionSettingsPointMatch->setEnabled (!m_currentFile.isEmpty ());
3821 m_actionSettingsSegments->setEnabled (!m_currentFile.isEmpty ());
3822 m_actionSettingsGeneral->setEnabled (!m_currentFile.isEmpty ());
3824 m_groupBackground->setEnabled (!m_currentFile.isEmpty ());
3825 m_groupCurves->setEnabled (!m_currentFile.isEmpty ());
3826 m_groupZoom->setEnabled (!m_currentFile.isEmpty ());
3828 m_actionZoomIn->setEnabled (!m_currentFile.isEmpty ());
3829 m_actionZoomOut->setEnabled (!m_currentFile.isEmpty ());
3834 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateCoordSystem";
3837 updateTransformationAndItsDependencies();
3849 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateDigitizeStateIfSoftwareTriggered";
3851 switch (digitizeState) {
3852 case DIGITIZE_STATE_AXIS:
3853 m_actionDigitizeAxis->setChecked(
true);
3857 case DIGITIZE_STATE_COLOR_PICKER:
3858 m_actionDigitizeColorPicker->setChecked(
true);
3859 slotDigitizeColorPicker();
3862 case DIGITIZE_STATE_CURVE:
3863 m_actionDigitizeCurve->setChecked(
true);
3864 slotDigitizeCurve();
3867 case DIGITIZE_STATE_EMPTY:
3870 case DIGITIZE_STATE_POINT_MATCH:
3871 m_actionDigitizePointMatch->setChecked(
true);
3872 slotDigitizePointMatch();
3875 case DIGITIZE_STATE_SEGMENT:
3876 m_actionDigitizeSegment->setChecked(
true);
3877 slotDigitizeSegment();
3880 case DIGITIZE_STATE_SELECT:
3881 m_actionDigitizeSelect->setChecked(
true);
3882 slotDigitizeSelect();
3886 LOG4CPP_ERROR_S ((*mainCat)) <<
"MainWindow::updateDigitizeStateIfSoftwareTriggered";
3893 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateGraphicsLinesToMatchGraphicsPoints";
3899 void MainWindow::updateRecentFileList()
3901 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateRecentFileList";
3903 QSettings settings (SETTINGS_ENGAUGE, SETTINGS_DIGITIZER);
3904 QStringList recentFilePaths = settings.value(SETTINGS_RECENT_FILE_LIST).toStringList();
3907 unsigned int count = recentFilePaths.size();
3908 if (count > MAX_RECENT_FILE_LIST_SIZE) {
3909 count = MAX_RECENT_FILE_LIST_SIZE;
3914 for (i = 0; i < count; i++) {
3915 QString strippedName = QFileInfo (recentFilePaths.at(i)).fileName();
3916 m_actionRecentFiles.at (i)->setText (strippedName);
3917 m_actionRecentFiles.at (i)->setData (recentFilePaths.at (i));
3918 m_actionRecentFiles.at (i)->setVisible (
true);
3922 for (i = count; i < MAX_RECENT_FILE_LIST_SIZE; i++) {
3923 m_actionRecentFiles.at (i)->setVisible (
false);
3929 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsAxesChecker";
3936 m_cmbCurve->currentText());
3941 m_cmbCurve->currentText());
3947 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsColorFilter";
3959 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsCoords";
3966 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsCurveAddRemove";
3969 loadCurveListFromCmdMediator();
3975 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsCurveStyles";
3984 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsDigitizeCurve";
3988 modelDigitizeCurve);
3993 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsExportFormat";
4000 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsGeneral";
4007 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsGridRemoval";
4012 void MainWindow::updateSettingsMainWindow()
4014 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsMainWindow";
4016 if (m_modelMainWindow.
zoomControl() == ZOOM_CONTROL_MENU_ONLY ||
4017 m_modelMainWindow.
zoomControl() == ZOOM_CONTROL_MENU_WHEEL) {
4019 m_actionZoomIn->setShortcut (tr (
""));
4020 m_actionZoomOut->setShortcut (tr (
""));
4024 m_actionZoomIn->setShortcut (tr (
"+"));
4025 m_actionZoomOut->setShortcut (tr (
"-"));
4029 updateWindowTitle();
4034 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsMainWindow";
4042 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsPointMatch";
4049 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsSegments";
4055 void MainWindow::updateTransformationAndItsDependencies()
4057 m_transformation.
update (!m_currentFile.isEmpty (),
4065 m_cmbCurve->currentText ());
4068 void MainWindow::updateViewedCurves ()
4070 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateViewedCurves";
4072 if (m_actionViewCurvesAll->isChecked ()) {
4076 }
else if (m_actionViewCurvesSelected->isChecked ()) {
4080 }
else if (m_actionViewCurvesNone->isChecked ()) {
4085 ENGAUGE_ASSERT (
false);
4091 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateViewsOfSettings";
4093 QString activeCurve = m_digitizeStateContext->
activeCurve ();
4100 if (activeCurve.isEmpty ()) {
4113 m_cmdMediator->
pixmap ());
4118 void MainWindow::updateWindowTitle ()
4120 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateWindowTitle";
4122 const QString PLACEHOLDER (
"[*]");
4124 QString title = QString (tr (
"Engauge Digitizer %1")
4125 .arg (VERSION_NUMBER));
4127 QString fileNameMaybeStripped;
4128 if (!m_currentFileWithPathAndFileExtension.isEmpty()) {
4130 QFileInfo fileInfo (m_currentFileWithPathAndFileExtension);
4134 case MAIN_TITLE_BAR_FORMAT_NO_PATH:
4135 fileNameMaybeStripped = fileInfo.baseName();
4138 case MAIN_TITLE_BAR_FORMAT_PATH:
4139 fileNameMaybeStripped = m_currentFileWithPathAndFileExtension;
4143 title += QString (
": %1")
4144 .arg (fileNameMaybeStripped);
4149 title += PLACEHOLDER;
4151 setWindowTitle (title);
4156 ENGAUGE_CHECK_PTR (m_view);
4162 ENGAUGE_CHECK_PTR (m_view);
4166 void MainWindow::writeCheckpointToLogFile ()
4169 QString checkpointDoc;
4170 QTextStream strDoc (&checkpointDoc);
4175 QString checkpointScene;
4176 QTextStream strScene (&checkpointScene);
4181 if (mainCat->getPriority() == log4cpp::Priority::DEBUG) {
4183 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::writeCheckpointToLogFile\n"
4184 <<
"--------------DOCUMENT CHECKPOINT START----------" <<
"\n"
4185 << checkpointDoc.toLatin1().data()
4186 <<
"---------------DOCUMENT CHECKPOINT END-----------" <<
"\n"
4187 <<
"----------------SCENE CHECKPOINT START-----------" <<
"\n"
4188 << checkpointScene.toLatin1().data()
4189 <<
"-----------------SCENE CHECKPOINT END------------" ;
void addCoordSystems(unsigned int numberCoordSystemToAdd)
Add some number (0 or more) of additional coordinate systems.
void updateGraphicsLinesToMatchGraphicsPoints(const CurveStyles &modelCurveStyles, const Transformation &transformation)
A mouse move has just occurred so move the selected points, since they were dragged.
void updateCoordSystem(CoordSystemIndex coordSystemIndex)
Select a different CoordSystem.
Model for DlgSettingsGeneral and CmdSettingsGeneral.
void unsetPointStyle()
Apply no PointStyle.
void setColorFilterSettings(const ColorFilterSettings &colorFilterSettings, const QPixmap &pixmap)
Apply the color filter of the currently selected curve. The pixmap is included so the background colo...
void printStream(QString indentation, QTextStream &str) const
Debugging method that supports print method of this class and printStream method of some other class(...
unsigned int coordSystemCount() const
Number of CoordSystem.
void setCurveName(const QString &curveName)
Load information for the specified curve name. When called externally, the load method must have been...
void createGhosts(QGraphicsScene &scene)
Create ghosts from the path/rect/polygon lists.
Model for DlgSettingsPointMatch and CmdSettingsPointMatch.
Returns information about files.
Color filter parameters for one curve. For a class, this is handled the same as LineStyle and PointSt...
void resetOnLoad(CmdMediator *cmdMediator)
Resetting makes re-initializes for documents after the first.
void updateSettingsMainWindow(const MainWindowModel &modelMainWindow)
Update with new main window properties.
void setStatusBarMode(StatusBarMode statusBarMode)
Set the status bar visibility mode.
DocumentModelColorFilter modelColorFilter() const
Get method for DocumentModelColorFilter.
Command for cutting all selected Points.
void setModelAxesChecker(const DocumentModelAxesChecker &modelAxesChecker)
Set method for DocumentModelAxesChecker.
void setModelGridRemoval(const DocumentModelGridRemoval &modelGridRemoval)
Set method for DocumentModelGridRemoval.
void updateAfterCommand(CmdMediator &cmdMediator)
Update the Points and their Curves after executing a command.
void updateDigitizeStateIfSoftwareTriggered(DigitizeState digitizeState)
After software-triggered state transition, this method manually triggers the action as if user had cl...
unsigned int coordSystemIndexToBeRestored() const
Coordinate system index that was active before the ghosts.
void printStream(QString indentation, QTextStream &str)
Debugging method that supports print method of this class and printStream method of some other class(...
Class that displays the current Segment Filter in a MainWindow toolbar.
Wrapper around OpenJPEG library, in C, for opening jpeg2000 files.
Dialog for editing Segments settings, for DigitizeStateSegment.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
void fitInView(GraphicsView &view)
Zoom so background fills the window.
void setModelPointMatch(const DocumentModelPointMatch &modelPointMatch)
Set method for DocumentModelPointMatch.
Dialog for editing point match settings, for DigitizeStatePointMatch.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
Transformation transformation() const
Return read-only copy of transformation.
void updateModelDigitizeCurve(CmdMediator *cmdMediator, const DocumentModelDigitizeCurve &modelDigitizeCurve)
Update the digitize curve settings.
void setModelGeneral(const DocumentModelGeneral &modelGeneral)
Set method for DocumentModelGeneral.
void setEnabled(bool enabled)
Show the style with semi-transparency or full-transparency to indicate if associated Curve is active ...
Context class for transformation state machine.
Model for DlgSettingsCurveProperties and CmdSettingsCurveProperties.
void updateSettingsCurveAddRemove(const CurvesGraphs &curvesGraphs)
Update with new curves.
bool canRedo() const
Returns true if there is at least one command on the stack.
QString activeCurve() const
Curve name for active Curve. This can include AXIS_CURVE_NAME, and empty string.
void setModelSegments(const DocumentModelSegments &modelSegments)
Set method for DocumentModelSegments.
MainTitleBarFormat mainTitleBarFormat() const
Get method for MainWindow titlebar filename format.
void updateAfterMouseRelease()
Call MainWindow::updateControls (which is private) after the very specific case - a mouse press/relea...
void handleCurveChange(CmdMediator *cmdMediator)
See DigitizeStateAbstractBase::handleCurveChange.
void setCoordinates(const QString &coordsScreen, const QString &coordsGraph, const QString &resolutionGraph)
Populate the coordinates fields. Unavailable values are empty. Html-encoding to highlight with colors...
QStringList selectedPointIdentifiers() const
Return a list of identifiers for the currently selected points.
void cmdFileClose()
Close file. This is called from a file script command.
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.
Class for showing points and lines for all coordinate systems simultaneously, even though the code no...
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
void slotRedo()
Move next command from list to CmdMediator. Noop if there are no more commands.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
void setModelDigitizeCurve(const DocumentModelDigitizeCurve &modelDigitizeCurve)
Set method for DocumentModelDigitizeCurve.
PointStyle pointStyle() const
Get method for PointStyle.
void triggerStateTransition(TransformationState transformationState, CmdMediator &cmdMediator, const Transformation &transformation, const QString &selectedGraphCurve)
Trigger a state transition to be performed immediately.
void cmdFileOpen(const QString &fileName)
Open file. This is called from a file script command.
QString xmlToUpload() const
Xml to be uploaded. Includes document if user has approved.
CmdMediator * cmdMediator()
Accessor for commands to process the Document.
void setModelCoords(const DocumentModelCoords &modelCoords)
Set method for DocumentModelCoords.
void wakeUp()
Enable all widgets in the status bar. This is called just after a Document becomes active...
MainWindow(const QString &errorReportFile, const QString &fileCmdScriptFile, bool isRegressionTest, bool isGnuplot, QStringList loadStartupFiles, QWidget *parent=0)
Single constructor.
BackgroundImage selectOriginal(BackgroundImage backgroundImage)
Make original background visible, for DigitizeStateColorPicker.
static void bindToMainWindow(const MainWindow *mainWindow)
Bind to MainWindow so this class can access the command stack.
Dialog for editing grid removal settings.
void setLocale(QLocale::Language language, QLocale::Country country)
Set method for locale given attributes.
void handleKeyPress(CmdMediator *cmdMediator, Qt::Key key, bool atLeastOneSelectedItem)
See DigitizeStateAbstractBase::handleKeyPress.
void uploadErrorReport(const QString &report)
Upload the error report asynchronously.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
void showTemporaryMessage(const QString &temporaryMessage)
Show temporary message in status bar.
Dialog for editing curve names settings.
bool load(const QString &filename, QImage &image) const
Load image from jpeg2000 file.
void setImageIsLoaded(CmdMediator *cmdMediator, bool imageIsLoaded)
Set the image so QGraphicsView cursor and drag mode are accessible.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
void setCoordSystemIndex(CoordSystemIndex coordSystemIndex)
Set the index of current active CoordSystem.
void updateSettingsDigitizeCurve(const DocumentModelDigitizeCurve &modelDigitizeCurve)
Update with new curve digitization styles.
void loadMainWindowModel(CmdMediator &cmdMediator, const MainWindowModel &modelMainWindow)
Replaced load method since the main window settings are independent of document, unlike other DlgSett...
Tutorial using a strategy like a comic strip with decision points deciding which panels appear...
void cmdFileExport(const QString &fileName)
Export file. This is called from a file script command.
Strategy class for exporting to a file. This strategy is external to the Document class so that class...
CoordSystemIndex coordSystemIndex() const
Index of current active CoordSystem.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
Dockable text window containing checklist guide.
void setModelExport(const DocumentModelExportFormat &modelExport)
Set method for DocumentModelExportFormat.
Model for DlgSettingsDigitizeCurve and CmdSettingsDigitizeCurve.
GraphicsView & view()
View for the QImage and QGraphicsItems, without const.
Dialog for editing filtering settings.
StatusBarMode statusBarMode() const
Current mode for status bar visibility. This is tracked locally so this class knows when to hide/show...
void setPixmap(const Transformation &transformation, const DocumentModelGridRemoval &modelGridRemoval, const DocumentModelColorFilter &modelColorFilter, const QPixmap &pixmapOriginal)
Update the images of all states, rather than just the current state.
ZoomControl zoomControl() const
Get method for zoom control.
QString fileExtensionTsv() const
File extension for tsv export files.
Details for a specific Point.
Container for all graph curves. The axes point curve is external to this class.
void setBackgroundImage(BackgroundImage backgroundImage)
Transition to the specified state. This method is used by classes outside of the state machine to tri...
Model for DlgSettingsColorFilter and CmdSettingsColorFilter.
Wrapper around QStatusBar to manage permanent widgets.
GraphicsScene & scene()
Scene container for the QImage and QGraphicsItems.
void setEnabled(bool enabled)
Show the style with semi-transparency or full-transparency to indicate if associated Curve is active ...
void updateSettingsCurveStyles(const CurveStyles &modelCurveStyles)
Update with new curve styles.
Client for interacting with Engauge server.
void setModelCurveStyles(const CurveStyles &modelCurveStyles)
Set method for CurveStyles.
Context class that manages the background image state machine.
bool browserIsEmpty() const
When browser is empty, it is pointless to show it.
CurveStyles modelCurveStyles() const
Get method for CurveStyles.
QGraphicsView class with event handling added. Typically the events are sent to the active digitizing...
Container for all DigitizeStateAbstractBase subclasses. This functions as the context class in a stan...
Model for DlgSettingsMainWindow.
void appendNewCmd(CmdMediator *cmdMediator, QUndoCommand *cmd)
Append just-created QUndoCommand to command stack. This is called from DigitizeStateAbstractBase subc...
bool canRedo() const
Return true if there is a command available.
DocumentModelAxesChecker modelAxesChecker() const
Get method for DocumentModelAxesChecker.
void updateModelSegments(const DocumentModelSegments &modelSegments)
Update the segments given the new settings.
void resetOnLoad()
Reset, when loading a document after the first, to same state that first document was at when loaded...
Dialog for editing general settings.
void resetPositionHasChangedFlags()
Reset positionHasChanged flag for all items. Typically this is done as part of mousePressEvent.
void setModelColorFilter(const DocumentModelColorFilter &modelColorFilter)
Set method for DocumentModelColorFilter.
void close()
Open Document is being closed so remove the background.
QImage imageForCurveState() const
Image for the Curve state, even if the current state is different.
Model for DlgSettingsCoords and CmdSettingsCoords.
void updateAfterCommand()
See GraphicsScene::updateAfterCommand.
QString fileExtensionCsv() const
File extension for csv export files.
void updateSettingsColorFilter(const DocumentModelColorFilter &modelColorFilter)
Update with new color filter properties.
void setCurveSelected(const Transformation &transformation, const DocumentModelGridRemoval &modelGridRemoval, const DocumentModelColorFilter &modelColorFilter, const QString &curveSelected)
Update the selected curve.
Command for deleting all selected Points.
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.
void updateSettingsGeneral(const DocumentModelGeneral &modelGeneral)
Update with new general properties.
void redo(MainWindow &mainWindow)
Apply the next command. Requires non-empty stack.
void setPointStyle(const PointStyle &pointStyle)
Apply the PointStyle of the currently selected curve.
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.
void showTemporaryMessage(const QString &message)
Show temporary message in status bar. After a short interval the message will disappear.
void exportToFile(const DocumentModelExportFormat &modelExport, const Document &document, const MainWindowModel &modelMainWindow, const Transformation &transformation, QTextStream &str) const
Export Document points according to the settings.
void updateCurveStyles(const CurveStyles &modelCurveStyles)
Update curve styles after settings changed.
void unsetColorFilterSettings()
Apply no color filter.
Dialog for setting the advanced parameters in a newly imported Document.
Wizard for setting up the checklist guide.
const ColorFilterSettings colorFilterSettings(const QString &curveName) const
Get method for copying one color filter. Cannot return just a reference or else there is a warning ab...
Dialog for editing main window settings, which are entirely independent of all documents.
void handleMouseMove(CmdMediator *cmdMediator, QPointF pos)
See DigitizeStateAbstractBase::handleMouseMove.
Model for DlgSettingsAxesChecker and CmdSettingsAxesChecker.
QString filterTsv() const
QFileDialog filter for TSV files.
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.
void startLoadImage(const QUrl &url)
Start the asynchronous loading of an image from the specified url.
void load(CmdMediator &cmdMediator)
Load settings from Document.
bool loadsAsDigFile(const QString &urlString) const
Returns true if specified file name can be loaded as a DIG file.
void resetOnLoad()
Reset, when loading a document after the first, to same state that first document was at when loaded...
bool isGnuplot() const
Get method for gnuplot flag.
CurveStyle curveStyle(const QString &curveName) const
CurveStyle in specified curve.
Dialog for editing curve properties settings.
void setZoomControl(ZoomControl zoomControl)
Set method for zoom control.
void setMainTitleBarFormat(MainTitleBarFormat mainTitleBarFormat)
Set method for MainWindow titlebar filename format.
void handleMouseRelease(CmdMediator *cmdMediator, QPointF pos)
See DigitizeStateAbstractBase::handleMouseRelease.
void captureGraphicsItems(QGraphicsScene &scene)
Take a snapshot of the graphics items.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
void setZoomFactorInitial(ZoomFactorInitial zoomFactorInitial)
Set method for initial zoom factor.
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 destroyGhosts(QGraphicsScene &scene)
Destory ghosts. Called at end of algorithm.
void cmdFileImport(const QString &fileName)
Import file. This is called from a file script command.
void updateColorFilter(const Transformation &transformation, const DocumentModelGridRemoval &modelGridRemoval, const DocumentModelColorFilter &colorFilter)
Apply color filter settings.
void setCurvesGraphs(const CurvesGraphs &curvesGraphs)
Let CmdAbstract classes overwrite CurvesGraphs.
void updateAxesChecker(CmdMediator &cmdMediator, const Transformation &transformation)
Apply the new DocumentModelAxesChecker.
void resizeEvent(QResizeEvent *event)
Intercept resize event so graphics scene can be appropriately resized when in Fill mode...
QStringList supportedImageWildcards() const
List the supported jpeg2000 file extensions, for filtering import files.
void updateSettingsCoords(const DocumentModelCoords &modelCoords)
Update with new coordinate properties.
void loadCommands(MainWindow &mainWindow, Document &document, QXmlStreamReader &reader)
Load commands from serialized xml.
void update(const CmdMediator &cmdMediator, bool documentIsExported)
Update using current CmdMediator/Document state.
ZoomFactorInitial zoomFactorInitial() const
Get method for initial zoom factor.
File that manages a command stack for regression testing of file import/open/export/close.
void handleMousePress(CmdMediator *cmdMediator, QPointF pos)
See DigitizeStateAbstractBase::handleMousePress.
Add point and line handling to generic QGraphicsScene.
void handleSetOverrideCursor(CmdMediator *cmdMediator, const QCursor &cursor)
See DigitizeStateAbstractBase::handleSetOverrideCursor.
QString filterCsv() const
QFileDialog filter for CSV files.
void handleContextMenuEvent(CmdMediator *cmdMediator, const QString &pointIdentifier)
See DigitizeStateAbstractBase::handleContextMenuEvent.
Command for moving all selected Points by a specified translation.
void saveXml(QXmlStreamWriter &writer) const
Save document to xml.
QLocale locale() const
Get method for locale.
Model for DlgSettingsGridRemoval and CmdSettingsGridRemoval. The settings are unstable until the user...
Dialog for sending error report.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
void updateSettingsSegments(const DocumentModelSegments &modelSegments)
Update with new segments properties.
Command for changing the currently selected CoordSystem.
void showCurves(bool show, bool showAll=false, const QString &curveName="")
Show or hide all Curves (if showAll is true) or just the selected Curve (if showAll is false);...
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.
void populateCurvesGraphs(CoordSystemIndex coordSystemIndex, CurvesGraphs &curvesGraphs)
Create entries in CurvesGraphs for each curve name that user provided.
DocumentModelGridRemoval modelGridRemoval() const
Get method for DocumentModelGridRemoval.
MainWindowModel modelMainWindow() const
Get method for main window model.
QString templateHtml(CoordSystemIndex coordSystemIndex) const
Template html comprising the checklist for display.
void setTemplateHtml(const QString &html, const QStringList &curveNames)
Populate the browser with template html.
DocumentModelExportFormat modelExport() const
Get method for DocumentModelExportFormat.
QStringList curveNames(CoordSystemIndex coordSystemIndex) const
Curve names to be placed into Document.
About Engauge dialog. This provides a hidden shortcut for triggering ENGAUGE_ASSERT.
void handleLeave(CmdMediator *cmdMediator)
See DigitizeStateAbstractBase::handleLeave.
virtual void showEvent(QShowEvent *)
Processing performed after gui becomes available.
bool transformIsDefined() const
Return true if all three axis points have been defined.
void requestImmediateStateTransition(CmdMediator *cmdMediator, DigitizeState digitizeState)
Perform immediate state transition. Called from outside state machine.