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"
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"
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
61#include "LoadFileInfo.h"
62#include "LoadImageFromUrl.h"
64#include "MainTitleBarFormat.h"
65#include "MainWindow.h"
66#include "NetworkClient.h"
68#include <QApplication>
72#include <QDesktopServices>
74#include <QDomDocument>
78#include <QGraphicsLineItem>
79#include <QImageReader>
81#include <QKeySequence>
87#include <QPrintDialog>
95#include "QtToString.h"
98#include <QXmlStreamReader>
99#include <QXmlStreamWriter>
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"
111const QString DIGITIZE_ACTION_AXIS_POINT (QObject::tr (
"Axis Point Tool"));
112const QString DIGITIZE_ACTION_COLOR_PICKER (QObject::tr (
"Color Picker Tool"));
113const QString DIGITIZE_ACTION_CURVE_POINT (QObject::tr (
"Curve Point Tool"));
114const QString DIGITIZE_ACTION_POINT_MATCH (QObject::tr (
"Point Match Tool"));
115const QString DIGITIZE_ACTION_SEGMENT_POINTS (QObject::tr (
"Segment Fill Tool"));
116const QString DIGITIZE_ACTION_SELECT (QObject::tr (
"Select Tool"));
118const QString EMPTY_FILENAME (
"");
119const QString ENGAUGE_FILENAME_DESCRIPTION (
"Engauge Document");
120const QString ENGAUGE_FILENAME_EXTENSION (
"dig");
122const unsigned int MAX_RECENT_FILE_LIST_SIZE = 8;
125 const QString &fileCmdScriptFile,
126 bool isRegressionTest,
128 QStringList loadStartupFiles,
131 m_isDocumentExported (false),
132 m_engaugeFile (EMPTY_FILENAME),
133 m_currentFile (EMPTY_FILENAME),
138 m_digitizeStateContext (0),
139 m_transformationStateContext (0),
140 m_backgroundStateContext (0),
141 m_isGnuplot (isGnuplot),
143 m_timerRegressionErrorReport(0),
145 m_timerRegressionFileCmdScript(0)
147 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::MainWindow"
148 <<
" curDir=" << QDir::currentPath().toLatin1().data();
152 QString initialPath = QDir::currentPath();
156 setWindowFlags (Qt::WindowContextHelpButtonHint | windowFlags ());
157 setWindowTitle (engaugeWindowTitle ());
159 createCentralWidget();
168 createLoadImageFromUrl ();
169 createStateContextBackground ();
170 createStateContextDigitize ();
171 createStateContextTransformation ();
172 createSettingsDialogs ();
173 createCommandStackShadow ();
178 setUnifiedTitleAndToolBarOnMac(
true);
180 installEventFilter(
this);
181 if (!errorReportFile.isEmpty()) {
182 loadErrorReportFile(initialPath,
184 if (isRegressionTest) {
185 startRegressionTestErrorReport(errorReportFile);
187 }
else if (!fileCmdScriptFile.isEmpty()) {
189 startRegressionTestFileCmdScript();
194 m_loadStartupFiles = loadStartupFiles;
198MainWindow::~MainWindow()
202void MainWindow::applyZoomFactorAfterLoad()
204 ZoomFactor zoomFactor;
208 case ZOOM_INITIAL_16_TO_1:
209 zoomFactor = ZOOM_16_TO_1;
212 case ZOOM_INITIAL_8_TO_1:
213 zoomFactor = ZOOM_8_TO_1;
216 case ZOOM_INITIAL_4_TO_1:
217 zoomFactor = ZOOM_4_TO_1;
220 case ZOOM_INITIAL_2_TO_1:
221 zoomFactor = ZOOM_2_TO_1;
224 case ZOOM_INITIAL_1_TO_1:
225 zoomFactor = ZOOM_1_TO_1;
228 case ZOOM_INITIAL_1_TO_2:
229 zoomFactor = ZOOM_1_TO_2;
232 case ZOOM_INITIAL_1_TO_4:
233 zoomFactor = ZOOM_1_TO_4;
236 case ZOOM_INITIAL_1_TO_8:
237 zoomFactor = ZOOM_1_TO_8;
240 case ZOOM_INITIAL_1_TO_16:
241 zoomFactor = ZOOM_1_TO_16;
244 case ZOOM_INITIAL_FILL:
245 zoomFactor = ZOOM_FILL;
248 case ZOOM_INITIAL_PREVIOUS:
249 zoomFactor = currentZoomFactor();
253 ENGAUGE_ASSERT (
false);
254 zoomFactor = currentZoomFactor();
258 slotViewZoom (zoomFactor);
261void MainWindow::closeEvent(QCloseEvent *event)
273 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::cmdFileClose";
275 setWindowModified (
false);
281 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::cmdFileExport";
290 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::cmdFileImport";
292 m_regressionFile = exportFilenameFromInputFilename (fileName);
293 fileImport (fileName,
299 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::cmdFileOpen";
301 m_regressionFile = exportFilenameFromInputFilename (fileName);
302 loadDocumentFile(fileName);
308 return m_cmdMediator;
311void MainWindow::createActions()
313 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createActions";
315 createActionsFile ();
316 createActionsEdit ();
317 createActionsDigitize ();
318 createActionsView ();
319 createActionsSettings ();
320 createActionsHelp ();
323void MainWindow::createActionsDigitize ()
325 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createActionsDigitize";
327 QPixmap pixmapAxis (DigitAxis_xpm);
328 QPixmap pixmapCurve (DigitCurve_xpm);
329 QPixmap pixmapColorPicker (DigitColorPicker_xpm);
330 QPixmap pixmapPointMatch (DigitPointMatch_xpm);
331 QPixmap pixmapSegment (DigitSegment_xpm);
332 QPixmap pixmapSelect (DigitSelect_xpm);
334 QIcon iconAxis (pixmapAxis);
335 QIcon iconCurve (pixmapCurve);
336 QIcon iconColorPicker (pixmapColorPicker);
337 QIcon iconPointMatch (pixmapPointMatch);
338 QIcon iconSegment (pixmapSegment);
339 QIcon iconSelect (pixmapSelect);
341 m_actionDigitizeSelect =
new QAction (iconSelect, DIGITIZE_ACTION_SELECT,
this);
342 m_actionDigitizeSelect->setShortcut (QKeySequence (tr (
"Shift+F2")));
343 m_actionDigitizeSelect->setCheckable (
true);
344 m_actionDigitizeSelect->setStatusTip (tr (
"Select points on screen."));
345 m_actionDigitizeSelect->setWhatsThis (tr (
"Select\n\n"
346 "Select points on the screen."));
347 connect (m_actionDigitizeSelect, SIGNAL (triggered ()),
this, SLOT (slotDigitizeSelect ()));
349 m_actionDigitizeAxis =
new QAction (iconAxis, DIGITIZE_ACTION_AXIS_POINT,
this);
350 m_actionDigitizeAxis->setShortcut (QKeySequence (tr (
"Shift+F3")));
351 m_actionDigitizeAxis->setCheckable (
true);
352 m_actionDigitizeAxis->setStatusTip (tr (
"Digitize axis points."));
353 m_actionDigitizeAxis->setWhatsThis (tr (
"Digitize Axis Point\n\n"
354 "Digitizes an axis point by placing a new point at the cursor "
355 "after a mouse click. The coordinates of the axis point are then "
356 "entered. In a graph, three axis points are required to define "
357 "the graph coordinates."));
358 connect (m_actionDigitizeAxis, SIGNAL (triggered ()),
this, SLOT (slotDigitizeAxis ()));
360 m_actionDigitizeCurve =
new QAction (iconCurve, DIGITIZE_ACTION_CURVE_POINT,
this);
361 m_actionDigitizeCurve->setShortcut (QKeySequence (tr (
"Shift+F4")));
362 m_actionDigitizeCurve->setCheckable (
true);
363 m_actionDigitizeCurve->setStatusTip (tr (
"Digitize curve points."));
364 m_actionDigitizeCurve->setWhatsThis (tr (
"Digitize Curve Point\n\n"
365 "Digitizes a curve point by placing a new point at the cursor "
366 "after a mouse click. Use this mode to digitize points along curves "
368 "New points will be assigned to the currently selected curve."));
369 connect (m_actionDigitizeCurve, SIGNAL (triggered ()),
this, SLOT (slotDigitizeCurve ()));
371 m_actionDigitizePointMatch =
new QAction (iconPointMatch, DIGITIZE_ACTION_POINT_MATCH,
this);
372 m_actionDigitizePointMatch->setShortcut (QKeySequence (tr (
"Shift+F5")));
373 m_actionDigitizePointMatch->setCheckable (
true);
374 m_actionDigitizePointMatch->setStatusTip (tr (
"Digitize curve points in a point plot by matching a point."));
375 m_actionDigitizePointMatch->setWhatsThis (tr (
"Digitize Curve Points by Point Matching\n\n"
376 "Digitizes curve points in a point plot by finding points that match a sample point. The process "
377 "starts by selecting a representative sample point.\n\n"
378 "New points will be assigned to the currently selected curve."));
379 connect (m_actionDigitizePointMatch, SIGNAL (triggered ()),
this, SLOT (slotDigitizePointMatch ()));
381 m_actionDigitizeColorPicker =
new QAction (iconColorPicker, DIGITIZE_ACTION_COLOR_PICKER,
this);
382 m_actionDigitizeColorPicker->setShortcut (QKeySequence (tr (
"Shift+F6")));
383 m_actionDigitizeColorPicker->setCheckable (
true);
384 m_actionDigitizeColorPicker->setStatusTip (tr (
"Select color settings for filtering in Segment Fill mode."));
385 m_actionDigitizeColorPicker->setWhatsThis (tr (
"Select color settings for Segment Fill filtering\n\n"
386 "Select a pixel along the currently selected curve. That pixel and its neighbors will "
387 "define the filter settings (color, brightness, and so on) of the currently selected curve "
388 "while in Segment Fill mode."));
389 connect (m_actionDigitizeColorPicker, SIGNAL (triggered ()),
this, SLOT (slotDigitizeColorPicker ()));
391 m_actionDigitizeSegment =
new QAction (iconSegment, DIGITIZE_ACTION_SEGMENT_POINTS,
this);
392 m_actionDigitizeSegment->setShortcut (QKeySequence (tr (
"Shift+F7")));
393 m_actionDigitizeSegment->setCheckable (
true);
394 m_actionDigitizeSegment->setStatusTip (tr (
"Digitize curve points along a segment of a curve."));
395 m_actionDigitizeSegment->setWhatsThis (tr (
"Digitize Curve Points With Segment Fill\n\n"
396 "Digitizes curve points by placing new points along the highlighted "
397 "segment under the cursor. Use this mode to quickly digitize multiple points along a "
398 "curve with a single click.\n\n"
399 "New points will be assigned to the currently selected curve."));
400 connect (m_actionDigitizeSegment, SIGNAL (triggered ()),
this, SLOT (slotDigitizeSegment ()));
402 m_groupDigitize =
new QActionGroup (
this);
403 m_groupDigitize->addAction (m_actionDigitizeSelect);
404 m_groupDigitize->addAction (m_actionDigitizeAxis);
405 m_groupDigitize->addAction (m_actionDigitizeCurve);
406 m_groupDigitize->addAction (m_actionDigitizePointMatch);
407 m_groupDigitize->addAction (m_actionDigitizeColorPicker);
408 m_groupDigitize->addAction (m_actionDigitizeSegment);
411void MainWindow::createActionsEdit ()
413 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createActionsEdit";
415 m_actionEditUndo =
new QAction(tr (
"&Undo"),
this);
416 m_actionEditUndo->setShortcut (QKeySequence::Undo);
417 m_actionEditUndo->setStatusTip (tr (
"Undo the last operation."));
418 m_actionEditUndo->setWhatsThis (tr (
"Undo\n\n"
419 "Undo the last operation."));
422 m_actionEditRedo =
new QAction(tr (
"&Redo"),
this);
423 m_actionEditRedo->setShortcut (QKeySequence::Redo);
424 m_actionEditRedo->setStatusTip (tr (
"Redo the last operation."));
425 m_actionEditRedo->setWhatsThis (tr (
"Redo\n\n"
426 "Redo the last operation."));
429 m_actionEditCut =
new QAction (tr (
"Cut"),
this);
430 m_actionEditCut->setShortcut (QKeySequence::Cut);
431 m_actionEditCut->setStatusTip (tr (
"Cuts the selected points and copies them to the clipboard."));
432 m_actionEditCut->setWhatsThis (tr (
"Cut\n\n"
433 "Cuts the selected points and copies them to the clipboard."));
434 connect (m_actionEditCut, SIGNAL (triggered ()),
this, SLOT (slotEditCut ()));
436 m_actionEditCopy =
new QAction (tr (
"Copy"),
this);
437 m_actionEditCopy->setShortcut (QKeySequence::Copy);
438 m_actionEditCopy->setStatusTip (tr (
"Copies the selected points to the clipboard."));
439 m_actionEditCopy->setWhatsThis (tr (
"Copy\n\n"
440 "Copies the selected points to the clipboard."));
441 connect (m_actionEditCopy, SIGNAL (triggered ()),
this, SLOT (slotEditCopy ()));
443 m_actionEditPaste =
new QAction (tr (
"Paste"),
this);
444 m_actionEditPaste->setShortcut (QKeySequence::Paste);
445 m_actionEditPaste->setStatusTip (tr (
"Pastes the selected points from the clipboard."));
446 m_actionEditPaste->setWhatsThis (tr (
"Paste\n\n"
447 "Pastes the selected points from the clipboard. They will be assigned to the current curve."));
448 connect (m_actionEditPaste, SIGNAL (triggered ()),
this, SLOT (slotEditPaste ()));
450 m_actionEditDelete =
new QAction (tr (
"Delete"),
this);
451 m_actionEditDelete->setShortcut (QKeySequence::Delete);
452 m_actionEditDelete->setStatusTip (tr (
"Deletes the selected points, after copying them to the clipboard."));
453 m_actionEditDelete->setWhatsThis (tr (
"Delete\n\n"
454 "Deletes the selected points, after copying them to the clipboard."));
455 connect (m_actionEditDelete, SIGNAL (triggered ()),
this, SLOT (slotEditDelete ()));
457 m_actionEditPasteAsNew =
new QAction (tr (
"Paste As New"),
this);
458 m_actionEditPasteAsNew->setStatusTip (tr (
"Pastes an image from the clipboard."));
459 m_actionEditPasteAsNew->setWhatsThis (tr (
"Paste as New\n\n"
460 "Creates a new document by pasting an image from the clipboard."));
461 connect (m_actionEditPasteAsNew, SIGNAL (triggered ()),
this, SLOT (slotEditPasteAsNew ()));
463 m_actionEditPasteAsNewAdvanced =
new QAction (tr (
"Paste As New (Advanced)..."),
this);
464 m_actionEditPasteAsNewAdvanced->setStatusTip (tr (
"Pastes an image from the clipboard, in advanced mode."));
465 m_actionEditPasteAsNewAdvanced->setWhatsThis (tr (
"Paste as New (Advanced)\n\n"
466 "Creates a new document by pasting an image from the clipboard, in advanced mode."));
467 connect (m_actionEditPasteAsNewAdvanced, SIGNAL (triggered ()),
this, SLOT (slotEditPasteAsNewAdvanced ()));
470void MainWindow::createActionsFile ()
472 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createActionsFile";
474 m_actionImport =
new QAction(tr (
"&Import..."),
this);
475 m_actionImport->setShortcut (tr (
"Ctrl+I"));
476 m_actionImport->setStatusTip (tr (
"Creates a new document by importing an image with a single coordinate system."));
477 m_actionImport->setWhatsThis (tr (
"Import Image\n\n"
478 "Creates a new document by importing an image with a single coordinate system."));
479 connect (m_actionImport, SIGNAL (triggered ()),
this, SLOT (slotFileImport ()));
481 m_actionImportAdvanced =
new QAction(tr (
"Import (Advanced)..."),
this);
482 m_actionImportAdvanced->setStatusTip (tr (
"Creates a new document by importing an image with support for advanced feaures."));
483 m_actionImportAdvanced->setWhatsThis (tr (
"Import (Advanced)\n\n"
484 "Creates a new document by importing an image with support for advanced feaures. In "
485 "advanced mode, there can be multiple coordinate systems and/or floating axes."));
486 connect (m_actionImportAdvanced, SIGNAL (triggered ()),
this, SLOT (slotFileImportAdvanced ()));
488 m_actionOpen =
new QAction(tr (
"&Open..."),
this);
489 m_actionOpen->setShortcut (QKeySequence::Open);
490 m_actionOpen->setStatusTip (tr (
"Opens an existing document."));
491 m_actionOpen->setWhatsThis (tr (
"Open Document\n\n"
492 "Opens an existing document."));
493 connect (m_actionOpen, SIGNAL (triggered ()),
this, SLOT (slotFileOpen ()));
495 for (
unsigned int i = 0; i < MAX_RECENT_FILE_LIST_SIZE; i++) {
496 QAction *recentFileAction =
new QAction (
this);
497 recentFileAction->setVisible (
true);
498 connect (recentFileAction, SIGNAL (triggered ()),
this, SLOT (slotRecentFileAction ()));
499 m_actionRecentFiles.append (recentFileAction);
502 m_actionClose =
new QAction(tr (
"&Close"),
this);
503 m_actionClose->setShortcut (QKeySequence::Close);
504 m_actionClose->setStatusTip (tr (
"Closes the open document document."));
505 m_actionClose->setWhatsThis (tr (
"Close Document\n\n"
506 "Closes the open document."));
507 connect (m_actionClose, SIGNAL (triggered ()),
this, SLOT (slotFileClose ()));
509 m_actionSave =
new QAction(tr (
"&Save"),
this);
510 m_actionSave->setShortcut (QKeySequence::Save);
511 m_actionSave->setStatusTip (tr (
"Saves the current document."));
512 m_actionSave->setWhatsThis (tr (
"Save Document\n\n"
513 "Saves the current document."));
514 connect (m_actionSave, SIGNAL (triggered ()),
this, SLOT (slotFileSave ()));
516 m_actionSaveAs =
new QAction(tr (
"Save As..."),
this);
517 m_actionSaveAs->setShortcut (QKeySequence::SaveAs);
518 m_actionSaveAs->setStatusTip (tr (
"Saves the current document under a new filename."));
519 m_actionSaveAs->setWhatsThis (tr (
"Save Document As\n\n"
520 "Saves the current document under a new filename."));
521 connect (m_actionSaveAs, SIGNAL (triggered ()),
this, SLOT (slotFileSaveAs ()));
523 m_actionExport =
new QAction (tr (
"Export..."),
this);
524 m_actionExport->setShortcut (tr (
"Ctrl+E"));
525 m_actionExport->setStatusTip (tr (
"Exports the current document into a text file."));
526 m_actionExport->setWhatsThis (tr (
"Export Document\n\n"
527 "Exports the current document into a text file."));
528 connect (m_actionExport, SIGNAL (triggered ()),
this, SLOT (slotFileExport ()));
530 m_actionPrint =
new QAction (tr (
"&Print..."),
this);
531 m_actionPrint->setShortcut (QKeySequence::Print);
532 m_actionPrint->setStatusTip (tr (
"Print the current document."));
533 m_actionPrint->setWhatsThis (tr (
"Print Document\n\n"
534 "Print the current document to a printer or file."));
535 connect (m_actionPrint, SIGNAL (triggered ()),
this, SLOT (slotFilePrint ()));
537 m_actionExit =
new QAction(tr (
"&Exit"),
this);
538 m_actionExit->setShortcut (QKeySequence::Quit);
539 m_actionExit->setStatusTip (tr (
"Quits the application."));
540 m_actionExit->setWhatsThis (tr (
"Exit\n\n"
541 "Quits the application."));
542 connect (m_actionExit, SIGNAL (triggered ()),
this, SLOT (close ()));
545void MainWindow::createActionsHelp ()
547 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createActionsHelp";
549 m_actionHelpChecklistGuideWizard =
new QAction (tr (
"Checklist Guide Wizard"),
this);
550 m_actionHelpChecklistGuideWizard->setCheckable (
true);
551 m_actionHelpChecklistGuideWizard->setStatusTip (tr (
"Open Checklist Guide Wizard during import to define digitizing steps"));
552 m_actionHelpChecklistGuideWizard->setWhatsThis (tr (
"Checklist Guide Wizard\n\n"
553 "Use Checklist Guide Wizard during import to generate a checklist of steps "
554 "for the imported document"));
556 m_actionHelpWhatsThis = QWhatsThis::createAction(
this);
557 m_actionHelpWhatsThis->setShortcut (QKeySequence::WhatsThis);
559 m_actionHelpTutorial =
new QAction (tr (
"Tutorial"),
this);
560 m_actionHelpTutorial->setStatusTip (tr (
"Play tutorial showing steps for digitizing curves"));
561 m_actionHelpTutorial->setWhatsThis (tr (
"Tutorial\n\n"
562 "Play tutorial showing steps for digitizing points from curves drawn with lines "
564 connect (m_actionHelpTutorial, SIGNAL (triggered ()),
this, SLOT (slotHelpTutorial()));
566 m_actionHelpHelp =
new QAction (tr (
"Help"),
this);
567 m_actionHelpHelp->setShortcut (QKeySequence::HelpContents);
568 m_actionHelpHelp->setStatusTip (tr (
"Help documentation"));
569 m_actionHelpHelp->setWhatsThis (tr (
"Help Documentation\n\n"
570 "Searchable help documentation"));
573 m_actionHelpAbout =
new QAction(tr (
"About Engauge"),
this);
574 m_actionHelpAbout->setStatusTip (tr (
"About the application."));
575 m_actionHelpAbout->setWhatsThis (tr (
"About Engauge\n\nAbout the application."));
576 connect (m_actionHelpAbout, SIGNAL (triggered ()),
this, SLOT (slotHelpAbout ()));
579void MainWindow::createActionsSettings ()
581 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createActionsSettings";
583 m_actionSettingsCoords =
new QAction (tr (
"Coordinates..."),
this);
584 m_actionSettingsCoords->setStatusTip (tr (
"Edit Coordinate settings."));
585 m_actionSettingsCoords->setWhatsThis (tr (
"Coordinate Settings\n\n"
586 "Coordinate settings determine how the graph coordinates are mapped to the pixels in the image"));
587 connect (m_actionSettingsCoords, SIGNAL (triggered ()),
this, SLOT (slotSettingsCoords ()));
589 m_actionSettingsCurveAddRemove =
new QAction (tr (
"Add/Remove Curve..."),
this);
590 m_actionSettingsCurveAddRemove->setStatusTip (tr (
"Add or Remove Curves."));
591 m_actionSettingsCurveAddRemove->setWhatsThis (tr (
"Add/Remove Curve\n\n"
592 "Add/Remove Curve settings control which curves are included in the current document"));
593 connect (m_actionSettingsCurveAddRemove, SIGNAL (triggered ()),
this, SLOT (slotSettingsCurveAddRemove ()));
595 m_actionSettingsCurveProperties =
new QAction (tr (
"Curve Properties..."),
this);
596 m_actionSettingsCurveProperties->setStatusTip (tr (
"Edit Curve Properties settings."));
597 m_actionSettingsCurveProperties->setWhatsThis (tr (
"Curve Properties Settings\n\n"
598 "Curves properties settings determine how each curve appears"));
599 connect (m_actionSettingsCurveProperties, SIGNAL (triggered ()),
this, SLOT (slotSettingsCurveProperties ()));
601 m_actionSettingsDigitizeCurve =
new QAction (tr (
"Digitize Curve..."),
this);
602 m_actionSettingsDigitizeCurve->setStatusTip (tr (
"Edit Digitize Axis and Graph Curve settings."));
603 m_actionSettingsDigitizeCurve->setWhatsThis (tr (
"Digitize Axis and Graph Curve Settings\n\n"
604 "Digitize Curve settings determine how points are digitized in Digitize Axis Point and "
605 "Digitize Graph Point modes"));
606 connect (m_actionSettingsDigitizeCurve, SIGNAL (triggered ()),
this, SLOT (slotSettingsDigitizeCurve ()));
608 m_actionSettingsExport =
new QAction (tr (
"Export Format..."),
this);
609 m_actionSettingsExport->setStatusTip (tr (
"Edit Export Format settings."));
610 m_actionSettingsExport->setWhatsThis (tr (
"Export Format Settings\n\n"
611 "Export format settings affect how exported files are formatted"));
612 connect (m_actionSettingsExport, SIGNAL (triggered ()),
this, SLOT (slotSettingsExportFormat ()));
614 m_actionSettingsColorFilter =
new QAction (tr (
"Color Filter..."),
this);
615 m_actionSettingsColorFilter->setStatusTip (tr (
"Edit Color Filter settings."));
616 m_actionSettingsColorFilter->setWhatsThis (tr (
"Color Filter Settings\n\n"
617 "Color filtering simplifies the graphs for easier Point Matching and Segment Filling"));
618 connect (m_actionSettingsColorFilter, SIGNAL (triggered ()),
this, SLOT (slotSettingsColorFilter ()));
620 m_actionSettingsAxesChecker =
new QAction (tr (
"Axes Checker..."),
this);
621 m_actionSettingsAxesChecker->setStatusTip (tr (
"Edit Axes Checker settings."));
622 m_actionSettingsAxesChecker->setWhatsThis (tr (
"Axes Checker Settings\n\n"
623 "Axes checker can reveal any axis point mistakes, which are otherwise hard to find."));
624 connect (m_actionSettingsAxesChecker, SIGNAL (triggered ()),
this, SLOT (slotSettingsAxesChecker ()));
626 m_actionSettingsGridRemoval =
new QAction (tr (
"Grid Line Removal..."),
this);
627 m_actionSettingsGridRemoval->setStatusTip (tr (
"Edit Grid Line Removal settings."));
628 m_actionSettingsGridRemoval->setWhatsThis (tr (
"Grid Line Removal Settings\n\n"
629 "Grid line removal isolates curve lines for easier Point Matching and Segment Filling, when "
630 "Color Filtering is not able to separate grid lines from curve lines."));
631 connect (m_actionSettingsGridRemoval, SIGNAL (triggered ()),
this, SLOT (slotSettingsGridRemoval ()));
633 m_actionSettingsPointMatch =
new QAction (tr (
"Point Match..."),
this);
634 m_actionSettingsPointMatch->setStatusTip (tr (
"Edit Point Match settings."));
635 m_actionSettingsPointMatch->setWhatsThis (tr (
"Point Match Settings\n\n"
636 "Point match settings determine how points are matched while in Point Match mode"));
637 connect (m_actionSettingsPointMatch, SIGNAL (triggered ()),
this, SLOT (slotSettingsPointMatch ()));
639 m_actionSettingsSegments =
new QAction (tr (
"Segment Fill..."),
this);
640 m_actionSettingsSegments->setStatusTip (tr (
"Edit Segment Fill settings."));
641 m_actionSettingsSegments->setWhatsThis (tr (
"Segment Fill Settings\n\n"
642 "Segment fill settings determine how points are generated in the Segment Fill mode"));
643 connect (m_actionSettingsSegments, SIGNAL (triggered ()),
this, SLOT (slotSettingsSegments ()));
645 m_actionSettingsGeneral =
new QAction (tr (
"General..."),
this);
646 m_actionSettingsGeneral->setStatusTip (tr (
"Edit General settings."));
647 m_actionSettingsGeneral->setWhatsThis (tr (
"General Settings\n\n"
648 "General settings are document-specific settings that affect multiple modes. For example, the cursor size setting affects "
649 "both Color Picker and Point Match modes"));
650 connect (m_actionSettingsGeneral, SIGNAL (triggered ()),
this, SLOT (slotSettingsGeneral ()));
652 m_actionSettingsMainWindow =
new QAction (tr (
"Main Window..."),
this);
653 m_actionSettingsMainWindow->setEnabled (
true);
654 m_actionSettingsMainWindow->setStatusTip (tr (
"Edit Main Window settings."));
655 m_actionSettingsMainWindow->setWhatsThis (tr (
"Main Window Settings\n\n"
656 "Main window settings affect the user interface and are not specific to any document"));
657 connect (m_actionSettingsMainWindow, SIGNAL (triggered ()),
this, SLOT (slotSettingsMainWindow ()));
660void MainWindow::createActionsView ()
662 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createActionsView";
664 m_actionViewBackground =
new QAction (tr (
"Background Toolbar"),
this);
665 m_actionViewBackground->setCheckable (
true);
666 m_actionViewBackground->setChecked (
true);
667 m_actionViewBackground->setStatusTip (tr (
"Show or hide the background toolbar."));
668 m_actionViewBackground->setWhatsThis (tr (
"View Background ToolBar\n\n"
669 "Show or hide the background toolbar"));
670 connect (m_actionViewBackground, SIGNAL (triggered ()),
this, SLOT (slotViewToolBarBackground ()));
672 m_actionViewChecklistGuide =
new QAction (tr (
"Checklist Guide Toolbar"),
this);
673 m_actionViewChecklistGuide->setCheckable (
true);
674 m_actionViewChecklistGuide->setChecked (
false);
675 m_actionViewChecklistGuide->setStatusTip (tr (
"Show or hide the checklist guide toolbar."));
676 m_actionViewChecklistGuide->setWhatsThis (tr (
"View Checklist Guide ToolBar\n\n"
677 "Show or hide the checklist guide toolbar"));
678 connect (m_actionViewChecklistGuide, SIGNAL (changed ()),
this, SLOT (slotViewToolBarChecklistGuide()));
680 m_actionViewDigitize =
new QAction (tr (
"Digitizing Tools Toolbar"),
this);
681 m_actionViewDigitize->setCheckable (
true);
682 m_actionViewDigitize->setChecked (
true);
683 m_actionViewDigitize->setStatusTip (tr (
"Show or hide the digitizing tools toolbar."));
684 m_actionViewDigitize->setWhatsThis (tr (
"View Digitizing Tools ToolBar\n\n"
685 "Show or hide the digitizing tools toolbar"));
686 connect (m_actionViewDigitize, SIGNAL (triggered ()),
this, SLOT (slotViewToolBarDigitize()));
688 m_actionViewSettingsViews =
new QAction (tr (
"Settings Views Toolbar"),
this);
689 m_actionViewSettingsViews->setCheckable (
true);
690 m_actionViewSettingsViews->setChecked (
true);
691 m_actionViewSettingsViews->setStatusTip (tr (
"Show or hide the settings views toolbar."));
692 m_actionViewSettingsViews->setWhatsThis (tr (
"View Settings Views ToolBar\n\n"
693 "Show or hide the settings views toolbar. These views graphically show the "
694 "most important settings."));
695 connect (m_actionViewSettingsViews, SIGNAL (triggered ()),
this, SLOT (slotViewToolBarSettingsViews()));
697 m_actionViewCoordSystem =
new QAction (tr (
"Coordinate System Toolbar"),
this);
698 m_actionViewCoordSystem->setCheckable (
true);
699 m_actionViewCoordSystem->setChecked (
false);
700 m_actionViewCoordSystem->setStatusTip (tr (
"Show or hide the coordinate system toolbar."));
701 m_actionViewCoordSystem->setWhatsThis (tr (
"View Coordinate Systems ToolBar\n\n"
702 "Show or hide the coordinate system selection toolbar. This toolbar is used "
703 "to select the current coordinate system when the document has multiple "
704 "coordinate systems. This toolbar is also used to view and print all coordinate "
706 "This toolbar is disabled when there is only one coordinate system."));
707 connect (m_actionViewCoordSystem, SIGNAL (triggered ()),
this, SLOT (slotViewToolBarCoordSystem()));
709 m_actionViewToolTips =
new QAction (tr (
"Tool Tips"),
this);
710 m_actionViewToolTips->setCheckable (
true);
711 m_actionViewToolTips->setChecked (
true);
712 m_actionViewToolTips->setStatusTip (tr (
"Show or hide the tool tips."));
713 m_actionViewToolTips->setWhatsThis (tr (
"View Tool Tips\n\n"
714 "Show or hide the tool tips"));
715 connect (m_actionViewToolTips, SIGNAL (triggered ()),
this, SLOT (slotViewToolTips()));
717 m_actionViewBackgroundNone =
new QAction (tr (
"No Background"),
this);
718 m_actionViewBackgroundNone->setCheckable (
true);
719 m_actionViewBackgroundNone->setStatusTip (tr (
"Do not show the image underneath the points."));
720 m_actionViewBackgroundNone->setWhatsThis (tr (
"No Background\n\n"
721 "No image is shown so points are easier to see"));
723 m_actionViewBackgroundOriginal =
new QAction (tr (
"Show Original Image"),
this);
724 m_actionViewBackgroundOriginal->setCheckable (
true);
725 m_actionViewBackgroundOriginal->setStatusTip (tr (
"Show the original image underneath the points."));
726 m_actionViewBackgroundOriginal->setWhatsThis (tr (
"Show Original Image\n\n"
727 "Show the original image underneath the points"));
729 m_actionViewBackgroundFiltered =
new QAction (tr (
"Show Filtered Image"),
this);
730 m_actionViewBackgroundFiltered->setCheckable (
true);
731 m_actionViewBackgroundFiltered->setChecked (
true);
732 m_actionViewBackgroundFiltered->setStatusTip (tr (
"Show the filtered image underneath the points."));
733 m_actionViewBackgroundFiltered->setWhatsThis (tr (
"Show Filtered Image\n\n"
734 "Show the filtered image underneath the points.\n\n"
735 "The filtered image is created from the original image according to the "
736 "Filter preferences so unimportant information is hidden and important "
737 "information is emphasized"));
739 m_actionViewCurvesNone =
new QAction (tr (
"Hide All Curves"),
this);
740 m_actionViewCurvesNone->setCheckable (
true);
741 m_actionViewCurvesNone->setStatusTip (tr (
"Hide all digitized curves."));
742 m_actionViewCurvesNone->setWhatsThis (tr (
"Hide All Curves\n\n"
743 "No axis points or digitized graph curves are shown so the image is easier to see."));
745 m_actionViewCurvesSelected =
new QAction (tr (
"Show Selected Curve"),
this);
746 m_actionViewCurvesSelected->setCheckable (
true);
747 m_actionViewCurvesSelected->setStatusTip (tr (
"Show only the currently selected curve."));
748 m_actionViewCurvesSelected->setWhatsThis (tr (
"Show Selected Curve\n\n"
749 "Show only the digitized points and line that belong to the currently selected curve."));
751 m_actionViewCurvesAll =
new QAction (tr (
"Show All Curves"),
this);
752 m_actionViewCurvesAll->setCheckable (
true);
753 m_actionViewCurvesAll->setChecked (
true);
754 m_actionViewCurvesAll->setStatusTip (tr (
"Show all curves."));
755 m_actionViewCurvesAll->setWhatsThis (tr (
"Show All Curves\n\n"
756 "Show all digitized axis points and graph curves"));
758 m_groupBackground =
new QActionGroup(
this);
759 m_groupBackground->addAction (m_actionViewBackgroundNone);
760 m_groupBackground->addAction (m_actionViewBackgroundOriginal);
761 m_groupBackground->addAction (m_actionViewBackgroundFiltered);
762 connect (m_groupBackground, SIGNAL(triggered (QAction*)),
this, SLOT (slotViewGroupBackground(QAction*)));
764 m_groupCurves =
new QActionGroup(
this);
765 m_groupCurves->addAction (m_actionViewCurvesNone);
766 m_groupCurves->addAction (m_actionViewCurvesSelected);
767 m_groupCurves->addAction (m_actionViewCurvesAll);
768 connect (m_groupCurves, SIGNAL(triggered (QAction*)),
this, SLOT (slotViewGroupCurves(QAction*)));
770 m_actionStatusNever =
new QAction (tr (
"Hide Always"),
this);
771 m_actionStatusNever->setCheckable(
true);
772 m_actionStatusNever->setStatusTip (tr (
"Always hide the status bar."));
773 m_actionStatusNever->setWhatsThis (tr (
"Hide the status bar. No temporary status or feedback messages will appear."));
775 m_actionStatusTemporary =
new QAction (tr (
"Show Temporary Messages"),
this);
776 m_actionStatusTemporary->setCheckable(
true);
777 m_actionStatusTemporary->setStatusTip (tr (
"Hide the status bar except when display temporary messages."));
778 m_actionStatusTemporary->setWhatsThis (tr (
"Hide the status bar, except when displaying temporary status and feedback messages."));
780 m_actionStatusAlways =
new QAction (tr (
"Show Always"),
this);
781 m_actionStatusAlways->setCheckable(
true);
782 m_actionStatusAlways->setStatusTip (tr (
"Always show the status bar."));
783 m_actionStatusAlways->setWhatsThis (tr (
"Show the status bar. Besides displaying temporary status and feedback messages, "
784 "the status bar also displays information about the cursor position."));
786 m_groupStatus =
new QActionGroup(
this);
787 m_groupStatus->addAction (m_actionStatusNever);
788 m_groupStatus->addAction (m_actionStatusTemporary);
789 m_groupStatus->addAction (m_actionStatusAlways);
790 connect (m_groupStatus, SIGNAL (triggered (QAction*)),
this, SLOT (slotViewGroupStatus(QAction*)));
792 m_actionZoomOut =
new QAction (tr (
"Zoom Out"),
this);
793 m_actionZoomOut->setStatusTip (tr (
"Zoom out"));
795 connect (m_actionZoomOut, SIGNAL (triggered ()),
this, SLOT (slotViewZoomOut ()));
797 m_actionZoomIn =
new QAction (tr (
"Zoom In"),
this);
798 m_actionZoomIn->setStatusTip (tr (
"Zoom in"));
800 connect (m_actionZoomIn, SIGNAL (triggered ()),
this, SLOT (slotViewZoomIn ()));
802 m_actionZoom16To1 =
new QAction (tr (
"16:1 (1600%)"),
this);
803 m_actionZoom16To1->setCheckable (
true);
804 m_actionZoom16To1->setStatusTip (tr (
"Zoom 16:1"));
805 connect (m_actionZoom16To1, SIGNAL (triggered ()),
this, SLOT (slotViewZoom16To1 ()));
807 m_actionZoom8To1 =
new QAction (tr (
"8:1 (800%)"),
this);
808 m_actionZoom8To1->setCheckable (
true);
809 m_actionZoom8To1->setStatusTip (tr (
"Zoom 8:1"));
810 connect (m_actionZoom8To1, SIGNAL (triggered ()),
this, SLOT (slotViewZoom8To1 ()));
812 m_actionZoom4To1 =
new QAction (tr (
"4:1 (400%)"),
this);
813 m_actionZoom4To1->setCheckable (
true);
814 m_actionZoom4To1->setStatusTip (tr (
"Zoom 4:1"));
815 connect (m_actionZoom4To1, SIGNAL (triggered ()),
this, SLOT (slotViewZoom4To1 ()));
817 m_actionZoom2To1 =
new QAction (tr (
"2:1 (200%)"),
this);
818 m_actionZoom2To1->setCheckable (
true);
819 m_actionZoom2To1->setStatusTip (tr (
"Zoom 2:1"));
820 connect (m_actionZoom2To1, SIGNAL (triggered ()),
this, SLOT (slotViewZoom2To1 ()));
822 m_actionZoom1To1 =
new QAction (tr (
"1:1 (100%)"),
this);
823 m_actionZoom1To1->setCheckable (
true);
824 m_actionZoom1To1->setChecked (
true);
825 m_actionZoom1To1->setStatusTip (tr (
"Zoom 6:1"));
826 connect (m_actionZoom1To1, SIGNAL (triggered ()),
this, SLOT (slotViewZoom1To1 ()));
828 m_actionZoom1To2 =
new QAction (tr (
"1:2 (50%)"),
this);
829 m_actionZoom1To2->setCheckable (
true);
830 m_actionZoom1To2->setStatusTip (tr (
"Zoom 1:2"));
831 connect (m_actionZoom1To2, SIGNAL (triggered ()),
this, SLOT (slotViewZoom1To2 ()));
833 m_actionZoom1To4 =
new QAction (tr (
"1:4 (25%)"),
this);
834 m_actionZoom1To4->setCheckable (
true);
835 m_actionZoom1To4->setStatusTip (tr (
"Zoom 1:4"));
836 connect (m_actionZoom1To4, SIGNAL (triggered ()),
this, SLOT (slotViewZoom1To4 ()));
838 m_actionZoom1To8 =
new QAction (tr (
"1:8 (12.5%)"),
this);
839 m_actionZoom1To8->setCheckable (
true);
840 m_actionZoom1To8->setStatusTip (tr (
"Zoom 1:8"));
841 connect (m_actionZoom1To8, SIGNAL (triggered ()),
this, SLOT (slotViewZoom1To8 ()));
843 m_actionZoom1To16 =
new QAction (tr (
"1:16 (6.25%)"),
this);
844 m_actionZoom1To16->setCheckable (
true);
845 m_actionZoom1To16->setStatusTip (tr (
"Zoom 1:16"));
846 connect (m_actionZoom1To16, SIGNAL (triggered ()),
this, SLOT (slotViewZoom1To16 ()));
848 m_actionZoomFill =
new QAction (tr (
"Fill"),
this);
849 m_actionZoomFill->setCheckable (
true);
850 m_actionZoomFill->setStatusTip (tr (
"Zoom with stretching to fill window"));
851 connect (m_actionZoomFill, SIGNAL (triggered ()),
this, SLOT (slotViewZoomFill ()));
853 m_groupZoom =
new QActionGroup (
this);
854 m_groupZoom->addAction (m_actionZoom16To1);
855 m_groupZoom->addAction (m_actionZoom8To1);
856 m_groupZoom->addAction (m_actionZoom4To1);
857 m_groupZoom->addAction (m_actionZoom2To1);
858 m_groupZoom->addAction (m_actionZoom1To1);
859 m_groupZoom->addAction (m_actionZoom1To2);
860 m_groupZoom->addAction (m_actionZoom1To4);
861 m_groupZoom->addAction (m_actionZoom1To8);
862 m_groupZoom->addAction (m_actionZoom1To16);
863 m_groupZoom->addAction (m_actionZoomFill);
866void MainWindow::createCentralWidget ()
868 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createCentralWidget";
870 QWidget *widget =
new QWidget;
871 setCentralWidget (widget);
872 m_layout =
new QVBoxLayout;
873 widget->setLayout (m_layout);
876void MainWindow::createCommandStackShadow ()
878 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createCommandStackShadow";
883void MainWindow::createHelpWindow ()
885 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createHelpWindow";
888 m_helpWindow->hide ();
889 addDockWidget (Qt::RightDockWidgetArea,
891 m_helpWindow->setFloating (
true);
893 connect (m_actionHelpHelp, SIGNAL (triggered ()), m_helpWindow, SLOT (show ()));
896void MainWindow::createIcons()
898 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createIcons";
901 QPixmap icon16 (bannerapp_16);
902 QPixmap icon32 (bannerapp_32);
903 QPixmap icon64 (bannerapp_64);
904 QPixmap icon128 (bannerapp_128);
905 QPixmap icon256 (bannerapp_256);
907 icon.addPixmap (icon16);
908 icon.addPixmap (icon32);
909 icon.addPixmap (icon64);
910 icon.addPixmap (icon128);
911 icon.addPixmap (icon256);
913 setWindowIcon (icon);
916void MainWindow::createLoadImageFromUrl ()
921void MainWindow::createMenus()
923 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createMenus";
925 m_menuFile = menuBar()->addMenu(tr(
"&File"));
926 m_menuFile->addAction (m_actionImport);
927 m_menuFile->addAction (m_actionImportAdvanced);
928 m_menuFile->addAction (m_actionOpen);
929 m_menuFileOpenRecent =
new QMenu (tr (
"Open &Recent"));
930 for (
unsigned int i = 0; i < MAX_RECENT_FILE_LIST_SIZE; i++) {
931 m_menuFileOpenRecent->addAction (m_actionRecentFiles.at (i));
933 m_menuFile->addMenu (m_menuFileOpenRecent);
934 m_menuFile->addAction (m_actionClose);
935 m_menuFile->insertSeparator (m_actionSave);
936 m_menuFile->addAction (m_actionSave);
937 m_menuFile->addAction (m_actionSaveAs);
938 m_menuFile->addAction (m_actionExport);
939 m_menuFile->insertSeparator (m_actionPrint);
940 m_menuFile->addAction (m_actionPrint);
941 m_menuFile->insertSeparator (m_actionExit);
942 m_menuFile->addAction (m_actionExit);
944 m_menuEdit = menuBar()->addMenu(tr(
"&Edit"));
945 connect (m_menuEdit, SIGNAL (aboutToShow ()),
this, SLOT (slotEditMenu ()));
946 m_menuEdit->addAction (m_actionEditUndo);
947 m_menuEdit->addAction (m_actionEditRedo);
948 m_menuEdit->insertSeparator (m_actionEditCut);
949 m_menuEdit->addAction (m_actionEditCut);
950 m_menuEdit->addAction (m_actionEditCopy);
951 m_menuEdit->addAction (m_actionEditPaste);
952 m_menuEdit->addAction (m_actionEditDelete);
953 m_menuEdit->insertSeparator (m_actionEditPasteAsNew);
954 m_menuEdit->addAction (m_actionEditPasteAsNew);
955 m_menuEdit->addAction (m_actionEditPasteAsNewAdvanced);
957 m_menuDigitize = menuBar()->addMenu(tr(
"Digitize"));
958 m_menuDigitize->addAction (m_actionDigitizeSelect);
959 m_menuDigitize->addAction (m_actionDigitizeAxis);
960 m_menuDigitize->addAction (m_actionDigitizeCurve);
961 m_menuDigitize->addAction (m_actionDigitizePointMatch);
962 m_menuDigitize->addAction (m_actionDigitizeColorPicker);
963 m_menuDigitize->addAction (m_actionDigitizeSegment);
965 m_menuView = menuBar()->addMenu(tr(
"View"));
966 m_menuView->addAction (m_actionViewBackground);
967 m_menuView->addAction (m_actionViewDigitize);
968 m_menuView->addAction (m_actionViewChecklistGuide);
969 m_menuView->addAction (m_actionViewSettingsViews);
970 m_menuView->addAction (m_actionViewCoordSystem);
971 m_menuView->insertSeparator (m_actionViewToolTips);
972 m_menuView->addAction (m_actionViewToolTips);
973 m_menuView->insertSeparator (m_actionViewBackgroundNone);
974 m_menuViewBackground =
new QMenu (tr (
"Background"));
975 m_menuViewBackground->addAction (m_actionViewBackgroundNone);
976 m_menuViewBackground->addAction (m_actionViewBackgroundOriginal);
977 m_menuViewBackground->addAction (m_actionViewBackgroundFiltered);
978 m_menuView->addMenu (m_menuViewBackground);
979 m_menuViewCurves =
new QMenu (tr (
"Curves"));
980 m_menuViewCurves->addAction (m_actionViewCurvesNone);
981 m_menuViewCurves->addAction (m_actionViewCurvesSelected);
982 m_menuViewCurves->addAction (m_actionViewCurvesAll);
983 m_menuView->addMenu (m_menuViewCurves);
984 m_menuViewStatus =
new QMenu (tr (
"Status Bar"));
985 m_menuViewStatus->addAction (m_actionStatusNever);
986 m_menuViewStatus->addAction (m_actionStatusTemporary);
987 m_menuViewStatus->addAction (m_actionStatusAlways);
988 m_menuView->addMenu (m_menuViewStatus);
989 m_menuViewZoom =
new QMenu (tr (
"Zoom"));
990 m_menuViewZoom->addAction (m_actionZoomOut);
991 m_menuViewZoom->addAction (m_actionZoomIn);
992 m_menuViewZoom->insertSeparator (m_actionZoom16To1);
993 m_menuViewZoom->addAction (m_actionZoom16To1);
994 m_menuViewZoom->addAction (m_actionZoom8To1);
995 m_menuViewZoom->addAction (m_actionZoom4To1);
996 m_menuViewZoom->addAction (m_actionZoom2To1);
997 m_menuViewZoom->addAction (m_actionZoom1To1);
998 m_menuViewZoom->addAction (m_actionZoom1To2);
999 m_menuViewZoom->addAction (m_actionZoom1To4);
1000 m_menuViewZoom->addAction (m_actionZoom1To8);
1001 m_menuViewZoom->addAction (m_actionZoom1To16);
1002 m_menuViewZoom->addAction (m_actionZoomFill);
1003 m_menuView->addMenu (m_menuViewZoom);
1005 m_menuSettings = menuBar()->addMenu(tr (
"Settings"));
1006 m_menuSettings->addAction (m_actionSettingsCoords);
1007 m_menuSettings->addAction (m_actionSettingsCurveAddRemove);
1008 m_menuSettings->addAction (m_actionSettingsCurveProperties);
1009 m_menuSettings->addAction (m_actionSettingsDigitizeCurve);
1010 m_menuSettings->addAction (m_actionSettingsExport);
1011 m_menuSettings->addAction (m_actionSettingsColorFilter);
1012 m_menuSettings->addAction (m_actionSettingsAxesChecker);
1013 m_menuSettings->addAction (m_actionSettingsGridRemoval);
1014 m_menuSettings->addAction (m_actionSettingsPointMatch);
1015 m_menuSettings->addAction (m_actionSettingsSegments);
1016 m_menuSettings->insertSeparator (m_actionSettingsGeneral);
1017 m_menuSettings->addAction (m_actionSettingsGeneral);
1018 m_menuSettings->addAction (m_actionSettingsMainWindow);
1020 m_menuHelp = menuBar()->addMenu(tr(
"&Help"));
1021 m_menuHelp->addAction (m_actionHelpChecklistGuideWizard);
1022 m_menuHelp->insertSeparator(m_actionHelpWhatsThis);
1023 m_menuHelp->addAction (m_actionHelpWhatsThis);
1024 m_menuHelp->addAction (m_actionHelpTutorial);
1025 m_menuHelp->addAction (m_actionHelpHelp);
1026 m_menuHelp->addAction (m_actionHelpAbout);
1028 updateRecentFileList();
1031void MainWindow::createNetwork ()
1033 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createNetwork";
1038void MainWindow::createSettingsDialogs ()
1040 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createSettingsDialogs";
1055 m_dlgSettingsCoords->setVisible (
false);
1056 m_dlgSettingsCurveAddRemove->setVisible (
false);
1057 m_dlgSettingsCurveProperties->setVisible (
false);
1058 m_dlgSettingsDigitizeCurve->setVisible (
false);
1059 m_dlgSettingsExportFormat->setVisible (
false);
1060 m_dlgSettingsColorFilter->setVisible (
false);
1061 m_dlgSettingsAxesChecker->setVisible (
false);
1062 m_dlgSettingsGridRemoval->setVisible (
false);
1063 m_dlgSettingsPointMatch->setVisible (
false);
1064 m_dlgSettingsSegments->setVisible (
false);
1065 m_dlgSettingsGeneral->setVisible (
false);
1066 m_dlgSettingsMainWindow->setVisible (
false);
1069void MainWindow::createScene ()
1071 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createScene";
1075 m_layout->addWidget (m_view);
1078void MainWindow::createStateContextBackground ()
1080 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createStateContextBackground";
1085void MainWindow::createStateContextDigitize ()
1087 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createStateContextDigitize";
1094void MainWindow::createStateContextTransformation ()
1096 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createStateContextTransformation";
1098 ENGAUGE_CHECK_PTR (m_scene);
1104void MainWindow::createStatusBar ()
1106 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createStatusBar";
1108 m_statusBar =
new StatusBar (*statusBar ());
1109 connect (
this, SIGNAL (
signalZoom(
int)), m_statusBar, SLOT (slotZoom(
int)));
1110 connect (m_statusBar, SIGNAL (
signalZoom (
int)),
this, SLOT (slotViewZoom (
int)));
1113void MainWindow::createToolBars ()
1115 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createToolBars";
1117 const int VIEW_SIZE = 22;
1120 m_cmbBackground =
new QComboBox ();
1121 m_cmbBackground->setEnabled (
false);
1122 m_cmbBackground->setStatusTip (tr (
"Select background image"));
1123 m_cmbBackground->setWhatsThis (tr (
"Selected Background\n\n"
1124 "Select background image:\n"
1125 "1) No background which highlights points\n"
1126 "2) Original image which shows everything\n"
1127 "3) Filtered image which highlights important details"));
1128 m_cmbBackground->addItem (tr (
"No background"), QVariant (BACKGROUND_IMAGE_NONE));
1129 m_cmbBackground->addItem (tr (
"Original image"), QVariant (BACKGROUND_IMAGE_ORIGINAL));
1130 m_cmbBackground->addItem (tr (
"Filtered image"), QVariant (BACKGROUND_IMAGE_FILTERED));
1132 connect (m_cmbBackground, SIGNAL (currentIndexChanged (
int)),
this, SLOT (slotCmbBackground (
int)));
1135 m_toolBackground =
new QToolBar (tr (
"Background"),
this);
1136 m_toolBackground->addWidget (m_cmbBackground);
1137 addToolBar (m_toolBackground);
1140 m_cmbCurve =
new QComboBox ();
1141 m_cmbCurve->setEnabled (
false);
1142 m_cmbCurve->setMinimumWidth (180);
1143 m_cmbCurve->setStatusTip (tr (
"Select curve for new points."));
1144 m_cmbCurve->setWhatsThis (tr (
"Selected Curve Name\n\n"
1145 "Select curve for any new points. Every point belongs to one curve."));
1146 connect (m_cmbCurve, SIGNAL (activated (
int)),
this, SLOT (slotCmbCurve (
int)));
1149 m_toolDigitize =
new QToolBar (tr (
"Drawing"),
this);
1150 m_toolDigitize->addAction (m_actionDigitizeSelect);
1151 m_toolDigitize->insertSeparator (m_actionDigitizeAxis);
1152 m_toolDigitize->addAction (m_actionDigitizeAxis);
1153 m_toolDigitize->insertSeparator (m_actionDigitizeCurve);
1154 m_toolDigitize->addAction (m_actionDigitizeCurve);
1155 m_toolDigitize->addAction (m_actionDigitizePointMatch);
1156 m_toolDigitize->addAction (m_actionDigitizeColorPicker);
1157 m_toolDigitize->addAction (m_actionDigitizeSegment);
1158 m_toolDigitize->addWidget (m_cmbCurve);
1159 addToolBar (m_toolDigitize);
1163 m_viewPointStyle->setMinimumSize(VIEW_SIZE, VIEW_SIZE);
1164 m_viewPointStyle->setMaximumSize(VIEW_SIZE, VIEW_SIZE);
1165 m_viewPointStyle->setStatusTip (tr (
"Points style for the currently selected curve"));
1166 m_viewPointStyle->setWhatsThis (tr (
"Points Style\n\n"
1167 "Points style for the currently selected curve. The points style is only "
1168 "displayed in this toolbar. To change the points style, "
1169 "use the Curve Properties dialog."));
1172 m_viewSegmentFilter->setMinimumSize(VIEW_SIZE, VIEW_SIZE);
1173 m_viewSegmentFilter->setMaximumSize(VIEW_SIZE, VIEW_SIZE);
1174 m_viewSegmentFilter->setStatusTip (tr (
"View of filter for current curve in Segment Fill mode"));
1175 m_viewSegmentFilter->setWhatsThis (tr (
"Segment Fill Filter\n\n"
1176 "View of filter for the current curve in Segment Fill mode. The filter settings are only "
1177 "displayed in this toolbar. To changed the filter settings, "
1178 "use the Color Picker mode or the Filter Settings dialog."));
1181 m_toolSettingsViews =
new QToolBar (tr (
"Views"),
this);
1182 m_toolSettingsViews->addWidget (m_viewPointStyle);
1183 m_toolSettingsViews->addWidget (
new QLabel (
" "));
1184 m_toolSettingsViews->addWidget (m_viewSegmentFilter);
1185 addToolBar (m_toolSettingsViews);
1188 m_cmbCoordSystem =
new QComboBox;
1189 m_cmbCoordSystem->setEnabled (
false);
1190 m_cmbCoordSystem->setStatusTip (tr (
"Currently selected coordinate system"));
1191 m_cmbCoordSystem->setWhatsThis (tr (
"Selected Coordinate System\n\n"
1192 "Currently selected coordinate system. This is used to switch between coordinate systems "
1193 "in documents with multiple coordinate systems"));
1194 connect (m_cmbCoordSystem, SIGNAL (activated (
int)),
this, SLOT (slotCmbCoordSystem (
int)));
1196 m_btnShowAll =
new QPushButton(QIcon(
":/engauge/img/icon_show_all.png"),
"");
1197 m_btnShowAll->setEnabled (
false);
1198 m_btnShowAll->setAcceptDrops(
false);
1199 m_btnShowAll->setStatusTip (tr (
"Show all coordinate systems"));
1200 m_btnShowAll->setWhatsThis (tr (
"Show All Coordinate Systems\n\n"
1201 "When pressed and held, this button shows all digitized points and lines for all coordinate systems."));
1202 connect (m_btnShowAll, SIGNAL (pressed ()),
this, SLOT (slotBtnShowAllPressed ()));
1203 connect (m_btnShowAll, SIGNAL (released ()),
this, SLOT (slotBtnShowAllReleased ()));
1205 m_btnPrintAll =
new QPushButton(QIcon(
":/engauge/img/icon_print_all.png"),
"");
1206 m_btnPrintAll->setEnabled (
false);
1207 m_btnPrintAll->setAcceptDrops(
false);
1208 m_btnPrintAll->setStatusTip (tr (
"Print all coordinate systems"));
1209 m_btnPrintAll->setWhatsThis (tr (
"Print All Coordinate Systems\n\n"
1210 "When pressed, this button Prints all digitized points and lines for all coordinate systems."));
1211 connect (m_btnPrintAll, SIGNAL (pressed ()),
this, SLOT (slotBtnPrintAll ()));
1213 m_toolCoordSystem =
new QToolBar (tr (
"Coordinate System"),
this);
1214 m_toolCoordSystem->addWidget (m_cmbCoordSystem);
1215 m_toolCoordSystem->addWidget (m_btnShowAll);
1216 m_toolCoordSystem->addWidget (m_btnPrintAll);
1217 addToolBar (m_toolCoordSystem);
1221 connect (m_dockChecklistGuide, SIGNAL (signalChecklistClosed()),
this, SLOT (slotChecklistClosed()));
1224void MainWindow::createTutorial ()
1226 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::createTutorial";
1229 m_tutorialDlg->setModal (
true);
1230 m_tutorialDlg->setMinimumSize (500, 400);
1231 m_tutorialDlg->hide();
1234ZoomFactor MainWindow::currentZoomFactor ()
const
1236 if (m_actionZoom1To1->isChecked()) {
1238 }
else if (m_actionZoom1To2->isChecked()) {
1240 }
else if (m_actionZoom1To4->isChecked()) {
1242 }
else if (m_actionZoom1To8->isChecked()) {
1244 }
else if (m_actionZoom1To16->isChecked()) {
1245 return ZOOM_1_TO_16;
1246 }
else if (m_actionZoom2To1->isChecked()) {
1248 }
else if (m_actionZoom4To1->isChecked()) {
1250 }
else if (m_actionZoom8To1->isChecked()) {
1252 }
else if (m_actionZoom16To1->isChecked()) {
1253 return ZOOM_16_TO_1;
1254 }
else if (m_actionZoomFill->isChecked()) {
1257 ENGAUGE_ASSERT (
false);
1263 if (event->type () == QEvent::KeyPress) {
1265 QKeyEvent *eventKeyPress = (QKeyEvent *) event;
1268 if ((eventKeyPress->key() == Qt::Key_E) &&
1269 ((eventKeyPress->modifiers() & Qt::ShiftModifier) != 0) &&
1270 ((eventKeyPress->modifiers() & Qt::ControlModifier) != 0)) {
1280 return QObject::eventFilter (target, event);
1283void MainWindow::exportAllCoordinateSystems()
1285 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::exportAllCoordinateSystems";
1290 for (CoordSystemIndex index = 0; index < m_cmdMediator->
document().coordSystemCount(); index++) {
1294 QString regressionFile = QString (
"%1_%2")
1295 .arg (m_regressionFile)
1297 fileExport (regressionFile,
1302QString MainWindow::exportFilenameFromInputFilename (
const QString &fileName)
const
1304 QString outFileName = fileName;
1306 outFileName = outFileName.replace (
".xml",
".csv_actual");
1307 outFileName = outFileName.replace (
".dig",
".csv_actual");
1312void MainWindow::fileExport(
const QString &fileName,
1315 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::fileExport"
1316 <<
" fileName=" << fileName.toLatin1().data();
1318 QFile file (fileName);
1319 if (file.open(QIODevice::WriteOnly)) {
1321 QTextStream str (&file);
1333 m_isDocumentExported =
true;
1334 m_dockChecklistGuide->
update (*m_cmdMediator,
1335 m_isDocumentExported);
1339 QMessageBox::critical (0,
1340 engaugeWindowTitle(),
1341 tr (
"Unable to export to file ") + fileName);
1345void MainWindow::fileImport (
const QString &fileName,
1346 ImportType importType)
1348 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::fileImport"
1349 <<
" fileName=" << fileName.toLatin1 ().data ()
1350 <<
" curDir=" << QDir::currentPath().toLatin1().data()
1351 <<
" importType=" << importType;
1353 QString originalFileOld = m_originalFile;
1354 bool originalFileWasImported = m_originalFileWasImported;
1356 m_originalFile = fileName;
1357 m_originalFileWasImported =
true;
1359 if (importType == IMPORT_TYPE_ADVANCED) {
1370 bool loaded =
false;
1371#ifdef ENGAUGE_JPEG2000
1373 loaded = jpeg2000.
load (fileName,
1377 loaded = image.load (fileName);
1381 QMessageBox::warning (
this,
1382 engaugeWindowTitle(),
1384 .arg (tr (
"Cannot read file"))
1388 m_originalFile = originalFileOld;
1389 m_originalFileWasImported = originalFileWasImported;
1393 loaded = loadImage (fileName,
1400 if (importType == IMPORT_TYPE_ADVANCED) {
1410 m_originalFile = originalFileOld;
1411 m_originalFileWasImported = originalFileWasImported;
1417void MainWindow::fileImportWithPrompts (ImportType importType)
1419 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::fileImportWithPrompts"
1420 <<
" importType=" << importType;
1425 QTextStream str (&filter);
1428 QList<QByteArray>::const_iterator itr;
1429 QList<QByteArray> supportedImageFormats = QImageReader::supportedImageFormats();
1430 QStringList supportedImageFormatStrings;
1431 for (itr = supportedImageFormats.begin (); itr != supportedImageFormats.end (); itr++) {
1432 QByteArray arr = *itr;
1433 QString extensionAsWildcard = QString (
"*.%1").arg (QString (arr));
1434 supportedImageFormatStrings << extensionAsWildcard;
1436#ifdef ENGAUGE_JPEG2000
1441 supportedImageFormatStrings.sort();
1443 str <<
"Image Files (" << supportedImageFormatStrings.join (
" ") <<
")";
1447 str <<
";; All Files (*.*)";
1449 QString fileName = QFileDialog::getOpenFileName (
this,
1451 QDir::currentPath (),
1453 if (!fileName.isEmpty ()) {
1456 fileImport (fileName,
1462void MainWindow::filePaste (ImportType importType)
1464 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::filePaste"
1465 <<
" importType=" << importType;
1467 QString originalFileOld = m_originalFile;
1468 bool originalFileWasImported = m_originalFileWasImported;
1470 QString fileName (
"clipboard");
1471 m_originalFile = fileName;
1472 m_originalFileWasImported =
true;
1474 if (importType == IMPORT_TYPE_ADVANCED) {
1485 QImage image = QApplication::clipboard()->image();
1487 bool loaded =
false;
1489 loaded = !image.isNull();
1493 QMessageBox::warning (
this,
1494 engaugeWindowTitle(),
1496 .arg (tr (
"Cannot read file"))
1500 m_originalFile = originalFileOld;
1501 m_originalFileWasImported = originalFileWasImported;
1505 loaded = loadImage (fileName,
1512 if (importType == IMPORT_TYPE_ADVANCED) {
1522 m_originalFile = originalFileOld;
1523 m_originalFileWasImported = originalFileWasImported;
1529void MainWindow::ghostsCreate ()
1531 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::ghostsCreate";
1533 ENGAUGE_ASSERT (m_ghosts == 0);
1536 for (
unsigned int index = 0; index < m_cmdMediator->
document().coordSystemCount(); index++) {
1555void MainWindow::ghostsDestroy ()
1557 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::ghostsDestroy";
1559 ENGAUGE_CHECK_PTR (m_ghosts);
1577void MainWindow::loadCoordSystemListFromCmdMediator ()
1579 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::loadCoordSystemListFromCmdMediator";
1581 m_cmbCoordSystem->clear();
1585 for (
unsigned int i = 0; i < numberCoordSystem; i++) {
1586 int index1Based = i + 1;
1587 m_cmbCoordSystem->addItem (QString::number (index1Based),
1592 m_cmbCoordSystem->setCurrentIndex (0);
1595 bool enable = (m_cmbCoordSystem->count() > 1);
1596 m_cmbCoordSystem->setEnabled (enable);
1597 m_btnShowAll->setEnabled (enable);
1598 m_btnPrintAll->setEnabled (enable);
1601void MainWindow::loadCurveListFromCmdMediator ()
1603 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::loadCurveListFromCmdMediator";
1605 m_cmbCurve->clear ();
1607 QStringList::iterator itr;
1608 for (itr = curvesGraphsNames.begin (); itr != curvesGraphsNames.end (); itr++) {
1610 QString curvesGraphName = *itr;
1611 m_cmbCurve->addItem (curvesGraphName);
1615 m_cmbCurve->setCurrentIndex (0);
1618void MainWindow::loadDocumentFile (
const QString &fileName)
1620 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::loadDocumentFile fileName=" << fileName.toLatin1 ().data ();
1622 QApplication::setOverrideCursor(Qt::WaitCursor);
1625 QApplication::restoreOverrideCursor();
1629 setCurrentPathFromFile (fileName);
1630 rebuildRecentFileListForCurrentFile(fileName);
1631 m_currentFile = fileName;
1633 if (m_cmdMediator != 0) {
1634 delete m_cmdMediator;
1639 setupAfterLoad(fileName,
1641 IMPORT_TYPE_SIMPLE);
1644 m_actionDigitizeSelect->setChecked (
true);
1645 slotDigitizeSelect();
1647 m_engaugeFile = fileName;
1648 m_originalFile = fileName;
1649 m_originalFileWasImported =
false;
1655 QMessageBox::warning (
this,
1656 engaugeWindowTitle(),
1657 QString(
"%1 %2:\n%3.")
1658 .arg (tr (
"Cannot read file"))
1666void MainWindow::loadErrorReportFile(
const QString &initialPath,
1667 const QString &errorReportFile)
1669 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::loadErrorReportFile"
1670 <<
" path=" << initialPath.toLatin1().data()
1671 <<
" file=" << errorReportFile.toLatin1().data();
1677 QString originalPath = QDir::currentPath();
1678 QDir::setCurrent(initialPath);
1680 QFile file (errorReportFile);
1681 if (!file.exists()) {
1683 QFileInfo fileInfo (errorReportFile);
1685 QMessageBox::critical (
this,
1686 engaugeWindowTitle(),
1687 tr (
"File not found:") +
" " + fileInfo.absoluteFilePath());
1692 QXmlStreamReader reader (&file);
1693 file.open(QIODevice::ReadOnly | QIODevice::Text);
1704 QDir::setCurrent(originalPath);
1706 setupAfterLoad(errorReportFile,
1707 "Error report opened",
1708 IMPORT_TYPE_SIMPLE);
1711 m_actionDigitizeSelect->setChecked (
true);
1712 slotDigitizeSelect();
1717bool MainWindow::loadImage (
const QString &fileName,
1718 const QImage &image,
1719 ImportType importType)
1721 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::loadImage"
1722 <<
" fileName=" << fileName.toLatin1 ().data ()
1723 <<
" importType=" << importType;
1725 QApplication::setOverrideCursor(Qt::WaitCursor);
1728 QApplication::restoreOverrideCursor();
1730 setCurrentPathFromFile (fileName);
1732 m_engaugeFile = EMPTY_FILENAME;
1734 if (m_cmdMediator != 0) {
1735 delete m_cmdMediator;
1740 bool accepted = setupAfterLoad(fileName,
1741 tr (
"File imported"),
1747 if (m_actionHelpChecklistGuideWizard->isChecked () &&
1748 (m_fileCmdScript == 0)) {
1753 if (wizard->exec() == QDialog::Accepted) {
1755 for (CoordSystemIndex coordSystemIndex = 0; coordSystemIndex < m_cmdMediator->
document().coordSystemCount(); coordSystemIndex++) {
1770 m_actionViewChecklistGuide->setChecked (
true);
1773 loadCurveListFromCmdMediator();
1776 loadCoordSystemListFromCmdMediator();
1782 m_actionDigitizeAxis->setChecked (
true);
1783 slotDigitizeAxis ();
1791void MainWindow::loadInputFileForErrorReport(QDomDocument &domInputFile)
const
1793 QFile file (m_originalFile);
1797 if (!file.open (QIODevice::ReadOnly)) {
1801 domInputFile.setContent (&file);
1805void MainWindow::loadToolTips()
1807 if (m_actionViewToolTips->isChecked ()) {
1810 m_actionDigitizeSelect->setToolTip (DIGITIZE_ACTION_SELECT);
1811 m_actionDigitizeAxis->setToolTip (DIGITIZE_ACTION_AXIS_POINT);
1812 m_actionDigitizeCurve->setToolTip (DIGITIZE_ACTION_CURVE_POINT);
1813 m_actionDigitizePointMatch->setToolTip (DIGITIZE_ACTION_POINT_MATCH);
1814 m_actionDigitizeColorPicker->setToolTip (DIGITIZE_ACTION_COLOR_PICKER);
1815 m_actionDigitizeSegment->setToolTip (DIGITIZE_ACTION_SEGMENT_POINTS);
1816 m_cmbBackground->setToolTip (tr (
"Background image."));
1817 m_cmbCurve->setToolTip (tr (
"Currently selected curve."));
1818 m_viewPointStyle->setToolTip (tr (
"Point style for currently selected curve."));
1819 m_viewSegmentFilter->setToolTip (tr (
"Segment Fill filter for currently selected curve."));
1824 m_actionDigitizeSelect->setToolTip (
"");
1825 m_actionDigitizeAxis->setToolTip (
"");
1826 m_actionDigitizeCurve->setToolTip (
"");
1827 m_actionDigitizePointMatch->setToolTip (
"");
1828 m_actionDigitizeColorPicker->setToolTip (
"");
1829 m_actionDigitizeSegment->setToolTip (
"");
1830 m_cmbBackground->setToolTip (
"");
1831 m_cmbCurve->setToolTip (
"");
1832 m_viewPointStyle->setToolTip (
"");
1833 m_viewSegmentFilter->setToolTip (
"");
1838bool MainWindow::maybeSave()
1840 if (m_cmdMediator != 0) {
1842 QMessageBox::StandardButton ret = QMessageBox::warning (
this,
1843 engaugeWindowTitle(),
1844 tr(
"The document has been modified.\n"
1845 "Do you want to save your changes?"),
1846 QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
1847 if (ret == QMessageBox::Save) {
1848 return slotFileSave();
1849 }
else if (ret == QMessageBox::Cancel) {
1860 const QString &fileName)
const
1865 QString csvExtension = QString (
".%1")
1867 QString tsvExtension = QString (
".%1")
1869 QString fileExtensionVersusCsv = fileName.right (csvExtension.size());
1870 QString fileExtensionVersusTsv = fileName.right (tsvExtension.size());
1874 if (csvExtension.compare (fileExtensionVersusCsv, Qt::CaseInsensitive) == 0) {
1875 modelExportFormatAfter.
setDelimiter (EXPORT_DELIMITER_COMMA);
1876 }
else if (tsvExtension.compare (fileExtensionVersusTsv, Qt::CaseInsensitive) == 0) {
1877 modelExportFormatAfter.
setDelimiter (EXPORT_DELIMITER_TAB);
1880 return modelExportFormatAfter;
1885 return m_modelMainWindow;
1888void MainWindow::rebuildRecentFileListForCurrentFile(
const QString &filePath)
1890 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::rebuildRecentFileListForCurrentFile";
1892 setWindowFilePath (filePath);
1894 QSettings settings (SETTINGS_ENGAUGE, SETTINGS_DIGITIZER);
1895 QStringList recentFilePaths = settings.value (SETTINGS_RECENT_FILE_LIST).toStringList();
1896 recentFilePaths.removeAll (filePath);
1897 recentFilePaths.prepend (filePath);
1898 while (recentFilePaths.count () > (
int) MAX_RECENT_FILE_LIST_SIZE) {
1899 recentFilePaths.removeLast ();
1901 settings.setValue (SETTINGS_RECENT_FILE_LIST, recentFilePaths);
1903 updateRecentFileList();
1908 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::resizeEvent";
1910 if (m_actionZoomFill->isChecked ()) {
1915bool MainWindow::saveDocumentFile (
const QString &fileName)
1917 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::saveDocumentFile fileName=" << fileName.toLatin1 ().data ();
1919 QFile file(fileName);
1920 if (!file.open(QFile::WriteOnly)) {
1921 QMessageBox::warning (
this,
1922 engaugeWindowTitle(),
1923 QString (
"%1 %2: \n%3.")
1924 .arg(tr (
"Cannot write file"))
1926 .arg(file.errorString()));
1930 rebuildRecentFileListForCurrentFile (fileName);
1932 QApplication::setOverrideCursor (Qt::WaitCursor);
1933 QXmlStreamWriter writer(&file);
1934 writer.setAutoFormatting(
true);
1935 writer.writeStartDocument();
1936 writer.writeDTD(
"<!DOCTYPE engauge>");
1938 writer.writeEndDocument();
1939 QApplication::restoreOverrideCursor ();
1943 m_cmdMediator->setClean ();
1945 setCurrentFile(fileName);
1946 m_engaugeFile = fileName;
1956 const char *comment)
const
1958 if (m_cmdMediator != 0) {
1960 QString report = saveErrorReportFileAndExitXml (context,
1967 if (dlg.exec() == QDialog::Accepted) {
1975QString MainWindow::saveErrorReportFileAndExitXml (
const char *context,
1978 const char *comment)
const
1980 const bool DEEP_COPY =
true;
1982 QString xmlErrorReport;
1983 QXmlStreamWriter writer (&xmlErrorReport);
1984 writer.setAutoFormatting(
true);
1987 writer.writeStartElement(DOCUMENT_SERIALIZE_ERROR_REPORT);
1990 writer.writeStartElement(DOCUMENT_SERIALIZE_APPLICATION);
1991 writer.writeAttribute(DOCUMENT_SERIALIZE_APPLICATION_VERSION_NUMBER, VERSION_NUMBER);
1992 writer.writeEndElement();
1996 QXmlStreamReader reader (m_startingDocumentSnapshot);
1997 while (!reader.atEnd ()) {
1999 if (reader.tokenType() != QXmlStreamReader::StartDocument &&
2000 reader.tokenType() != QXmlStreamReader::EndDocument) {
2001 writer.writeCurrentToken (reader);
2006 writer.writeStartElement(DOCUMENT_SERIALIZE_OPERATING_SYSTEM);
2007 writer.writeAttribute(DOCUMENT_SERIALIZE_OPERATING_SYSTEM_ENDIAN, EndianToString (QSysInfo::ByteOrder));
2008 writer.writeAttribute(DOCUMENT_SERIALIZE_OPERATING_SYSTEM_WORD_SIZE, QString::number (QSysInfo::WordSize));
2009 writer.writeEndElement();
2012 writer.writeStartElement(DOCUMENT_SERIALIZE_FILE);
2013 writer.writeAttribute(DOCUMENT_SERIALIZE_FILE_IMPORTED,
2014 m_originalFileWasImported ? DOCUMENT_SERIALIZE_BOOL_TRUE : DOCUMENT_SERIALIZE_BOOL_FALSE);
2015 writer.writeEndElement();
2018 m_cmdMediator->
saveXml(writer);
2021 writer.writeStartElement(DOCUMENT_SERIALIZE_ERROR);
2022 writer.writeAttribute(DOCUMENT_SERIALIZE_ERROR_CONTEXT, context);
2023 writer.writeAttribute(DOCUMENT_SERIALIZE_ERROR_FILE, file);
2024 writer.writeAttribute(DOCUMENT_SERIALIZE_ERROR_LINE, QString::number (line));
2025 writer.writeAttribute(DOCUMENT_SERIALIZE_ERROR_COMMENT, comment);
2026 writer.writeEndElement();
2028 writer.writeEndElement();
2031 QDomDocument domErrorReport (
"ErrorReport");
2032 domErrorReport.setContent (xmlErrorReport);
2035 if (!m_originalFileWasImported) {
2039 QDomDocument domInputFile;
2040 loadInputFileForErrorReport (domInputFile);
2041 QDomDocumentFragment fragmentFileFrom = domErrorReport.createDocumentFragment();
2042 if (!domInputFile.isNull()) {
2043 fragmentFileFrom.appendChild (domErrorReport.importNode (domInputFile.documentElement(), DEEP_COPY));
2045 QDomNodeList nodesFileTo = domErrorReport.elementsByTagName (DOCUMENT_SERIALIZE_FILE);
2046 if (nodesFileTo.count () > 0) {
2047 QDomNode nodeFileTo = nodesFileTo.at (0);
2048 nodeFileTo.appendChild (fragmentFileFrom);
2055 QDomNodeList nodesDocument = domErrorReport.elementsByTagName (DOCUMENT_SERIALIZE_DOCUMENT);
2056 for (
int i = 0 ; i < nodesDocument.count(); i++) {
2057 QDomNode nodeDocument = nodesDocument.at (i);
2058 QDomElement elemImage = nodeDocument.firstChildElement(DOCUMENT_SERIALIZE_IMAGE);
2059 if (!elemImage.isNull()) {
2062 if (elemImage.hasAttribute (DOCUMENT_SERIALIZE_IMAGE_WIDTH) &&
2063 elemImage.hasAttribute (DOCUMENT_SERIALIZE_IMAGE_HEIGHT)) {
2065 int width = elemImage.attribute(DOCUMENT_SERIALIZE_IMAGE_WIDTH).toInt();
2066 int height = elemImage.attribute(DOCUMENT_SERIALIZE_IMAGE_HEIGHT).toInt();
2068 QDomNode nodeReplacement;
2069 QDomElement elemReplacement = nodeReplacement.toElement();
2070 elemReplacement.setAttribute (DOCUMENT_SERIALIZE_IMAGE_WIDTH, width);
2071 elemReplacement.setAttribute (DOCUMENT_SERIALIZE_IMAGE_HEIGHT, height);
2074 nodeDocument.insertBefore (nodeReplacement,
2076 nodeDocument.removeChild(elemImage);
2082 return domErrorReport.toString();
2085void MainWindow::saveStartingDocumentSnapshot()
2087 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::saveStartingDocumentSnapshot";
2089 QXmlStreamWriter writer (&m_startingDocumentSnapshot);
2090 writer.setAutoFormatting (
true);
2096 ENGAUGE_CHECK_PTR (m_scene);
2102 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::selectBackgroundOriginal";
2104 BackgroundImage previousBackground = (BackgroundImage) m_cmbBackground->currentData().toInt();
2106 int index = m_cmbBackground->findData (backgroundImage);
2107 ENGAUGE_ASSERT (index >= 0);
2109 m_cmbBackground->setCurrentIndex(index);
2111 return previousBackground;
2116 return m_cmbCurve->currentText ();
2119void MainWindow::setCurrentFile (
const QString &fileName)
2121 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::setCurrentFile";
2123 QString fileNameStripped;
2124 if (!fileName.isEmpty()) {
2127 QFileInfo fileInfo (fileName);
2128 fileNameStripped = fileInfo.baseName();
2131 m_currentFile = fileNameStripped;
2132 m_currentFileWithPathAndFileExtension = fileName;
2134 updateWindowTitle ();
2137void MainWindow::setCurrentPathFromFile (
const QString &fileName)
2139 QDir dir = QFileInfo (fileName).absoluteDir();
2141 if (dir.exists ()) {
2143 bool success = QDir::setCurrent (dir.absolutePath ());
2144 ENGAUGE_ASSERT (success);
2152void MainWindow::setPixmap (
const QPixmap &pixmap)
2154 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::setPixmap";
2158 m_backgroundStateContext->
setPixmap (m_transformation,
2164void MainWindow::settingsRead ()
2166 QSettings settings (SETTINGS_ENGAUGE, SETTINGS_DIGITIZER);
2168 settingsReadEnvironment (settings);
2169 settingsReadMainWindow (settings);
2172void MainWindow::settingsReadEnvironment (QSettings &settings)
2174 settings.beginGroup (SETTINGS_GROUP_ENVIRONMENT);
2175 QDir::setCurrent (settings.value (SETTINGS_CURRENT_DIRECTORY,
2176 QDir::currentPath ()).toString ());
2177 settings.endGroup ();
2180void MainWindow::settingsReadMainWindow (QSettings &settings)
2182 settings.beginGroup(SETTINGS_GROUP_MAIN_WINDOW);
2185 resize (settings.value (SETTINGS_SIZE,
2186 QSize (400, 400)).toSize ());
2187 move (settings.value (SETTINGS_POS,
2188 QPoint (200, 200)).toPoint ());
2191 QSize helpSize = settings.value (SETTINGS_HELP_SIZE,
2192 QSize (900, 600)).toSize();
2193 m_helpWindow->resize (helpSize);
2194 if (settings.contains (SETTINGS_HELP_POS)) {
2195 QPoint helpPos = settings.value (SETTINGS_HELP_POS).toPoint();
2196 m_helpWindow->move (helpPos);
2200 m_actionHelpChecklistGuideWizard->setChecked (settings.value (SETTINGS_CHECKLIST_GUIDE_WIZARD,
2204 bool viewBackgroundToolBar = settings.value (SETTINGS_VIEW_BACKGROUND_TOOLBAR,
2206 m_actionViewBackground->setChecked (viewBackgroundToolBar);
2207 m_toolBackground->setVisible (viewBackgroundToolBar);
2208 BackgroundImage backgroundImage = (BackgroundImage) settings.value (SETTINGS_BACKGROUND_IMAGE,
2209 BACKGROUND_IMAGE_FILTERED).toInt ();
2210 int indexBackground = m_cmbBackground->findData (QVariant (backgroundImage));
2211 m_cmbBackground->setCurrentIndex (indexBackground);
2214 bool viewDigitizeToolBar = settings.value (SETTINGS_VIEW_DIGITIZE_TOOLBAR,
2216 m_actionViewDigitize->setChecked (viewDigitizeToolBar);
2217 m_toolDigitize->setVisible (viewDigitizeToolBar);
2220 bool viewSettingsViewsToolBar = settings.value (SETTINGS_VIEW_SETTINGS_VIEWS_TOOLBAR,
2222 m_actionViewSettingsViews->setChecked (viewSettingsViewsToolBar);
2223 m_toolSettingsViews->setVisible (viewSettingsViewsToolBar);
2226 bool viewCoordSystemToolbar = settings.value (SETTINGS_VIEW_COORD_SYSTEM_TOOLBAR,
2228 m_actionViewCoordSystem->setChecked (viewCoordSystemToolbar);
2229 m_toolCoordSystem->setVisible (viewCoordSystemToolbar);
2232 bool viewToolTips = settings.value (SETTINGS_VIEW_TOOL_TIPS,
2234 m_actionViewToolTips->setChecked (viewToolTips);
2238 StatusBarMode statusBarMode = (StatusBarMode) settings.value (SETTINGS_VIEW_STATUS_BAR,
2241 m_actionStatusNever->setChecked (statusBarMode == STATUS_BAR_MODE_NEVER);
2242 m_actionStatusTemporary->setChecked (statusBarMode == STATUS_BAR_MODE_TEMPORARY);
2243 m_actionStatusAlways->setChecked (statusBarMode == STATUS_BAR_MODE_ALWAYS);
2246 Qt::DockWidgetArea area = (Qt::DockWidgetArea) settings.value (SETTINGS_CHECKLIST_GUIDE_DOCK_AREA,
2247 Qt::NoDockWidgetArea).toInt();
2249 if (area == Qt::NoDockWidgetArea) {
2251 addDockWidget (Qt::RightDockWidgetArea,
2252 m_dockChecklistGuide);
2253 m_dockChecklistGuide->setFloating(
true);
2254 if (settings.contains (SETTINGS_CHECKLIST_GUIDE_DOCK_GEOMETRY)) {
2255 m_dockChecklistGuide->restoreGeometry (settings.value (SETTINGS_CHECKLIST_GUIDE_DOCK_GEOMETRY).toByteArray());
2260 addDockWidget (area,
2261 m_dockChecklistGuide);
2267 QLocale localeDefault;
2268 QLocale::Language language = (QLocale::Language) settings.value (SETTINGS_LOCALE_LANGUAGE,
2269 QVariant (localeDefault.language())).toInt();
2270 QLocale::Country country = (QLocale::Country) settings.value (SETTINGS_LOCALE_COUNTRY,
2271 QVariant (localeDefault.country())).toInt();
2272 QLocale locale (language,
2274 slotViewZoom ((ZoomFactor) settings.value (SETTINGS_ZOOM_FACTOR,
2275 QVariant (ZOOM_1_TO_1)).toInt());
2277 m_modelMainWindow.
setZoomFactorInitial((ZoomFactorInitial) settings.value (SETTINGS_ZOOM_FACTOR_INITIAL,
2278 QVariant (DEFAULT_ZOOM_FACTOR_INITIAL)).toInt());
2279 m_modelMainWindow.
setZoomControl ((ZoomControl) settings.value (SETTINGS_ZOOM_CONTROL,
2280 QVariant (ZOOM_CONTROL_MENU_WHEEL_PLUSMINUS)).toInt());
2281 m_modelMainWindow.
setMainTitleBarFormat ((MainTitleBarFormat) settings.value (SETTINGS_MAIN_TITLE_BAR_FORMAT,
2282 QVariant (MAIN_TITLE_BAR_FORMAT_PATH)).toInt());
2285 settings.endGroup();
2288void MainWindow::settingsWrite ()
2290 QSettings settings (SETTINGS_ENGAUGE, SETTINGS_DIGITIZER);
2292 settings.beginGroup (SETTINGS_GROUP_ENVIRONMENT);
2293 settings.setValue (SETTINGS_CURRENT_DIRECTORY, QDir::currentPath ());
2294 settings.endGroup ();
2296 settings.beginGroup (SETTINGS_GROUP_MAIN_WINDOW);
2297 settings.setValue (SETTINGS_SIZE, size ());
2298 settings.setValue (SETTINGS_POS, pos ());
2299 settings.setValue (SETTINGS_HELP_SIZE, m_helpWindow->size());
2300 settings.setValue (SETTINGS_HELP_POS, m_helpWindow->pos ());
2301 if (m_dockChecklistGuide->isFloating()) {
2303 settings.setValue (SETTINGS_CHECKLIST_GUIDE_DOCK_AREA, Qt::NoDockWidgetArea);
2304 settings.setValue (SETTINGS_CHECKLIST_GUIDE_DOCK_GEOMETRY, m_dockChecklistGuide->saveGeometry ());
2308 settings.setValue (SETTINGS_CHECKLIST_GUIDE_DOCK_AREA, dockWidgetArea (m_dockChecklistGuide));
2311 settings.setValue (SETTINGS_CHECKLIST_GUIDE_WIZARD, m_actionHelpChecklistGuideWizard->isChecked ());
2312 settings.setValue (SETTINGS_LOCALE_LANGUAGE, m_modelMainWindow.
locale().language());
2313 settings.setValue (SETTINGS_LOCALE_COUNTRY, m_modelMainWindow.
locale().country());
2314 settings.setValue (SETTINGS_VIEW_BACKGROUND_TOOLBAR, m_actionViewBackground->isChecked());
2315 settings.setValue (SETTINGS_BACKGROUND_IMAGE, m_cmbBackground->currentData().toInt());
2316 settings.setValue (SETTINGS_VIEW_DIGITIZE_TOOLBAR, m_actionViewDigitize->isChecked ());
2317 settings.setValue (SETTINGS_VIEW_STATUS_BAR, m_statusBar->
statusBarMode ());
2318 settings.setValue (SETTINGS_VIEW_SETTINGS_VIEWS_TOOLBAR, m_actionViewSettingsViews->isChecked ());
2319 settings.setValue (SETTINGS_VIEW_COORD_SYSTEM_TOOLBAR, m_actionViewCoordSystem->isChecked ());
2320 settings.setValue (SETTINGS_VIEW_TOOL_TIPS, m_actionViewToolTips->isChecked ());
2321 settings.setValue (SETTINGS_ZOOM_CONTROL, m_modelMainWindow.
zoomControl());
2322 settings.setValue (SETTINGS_ZOOM_FACTOR, currentZoomFactor ());
2323 settings.setValue (SETTINGS_ZOOM_FACTOR_INITIAL, m_modelMainWindow.
zoomFactorInitial());
2324 settings.setValue (SETTINGS_MAIN_TITLE_BAR_FORMAT, m_modelMainWindow.
mainTitleBarFormat());
2325 settings.endGroup ();
2328bool MainWindow::setupAfterLoad (
const QString &fileName,
2329 const QString &temporaryMessage ,
2330 ImportType importType)
2332 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::setupAfterLoad"
2333 <<
" file=" << fileName.toLatin1().data()
2334 <<
" message=" << temporaryMessage.toLatin1().data()
2335 <<
" importType=" << importType;
2337 const QString EMPTY_CURVE_NAME_TO_SKIP_BACKGROUND_PROCESSING;
2341 m_digitizeStateContext->
resetOnLoad (m_cmdMediator);
2345 EMPTY_CURVE_NAME_TO_SKIP_BACKGROUND_PROCESSING);
2346 setPixmap (m_cmdMediator->
pixmap ());
2350 if (importType == IMPORT_TYPE_ADVANCED) {
2352 applyZoomFactorAfterLoad();
2355 dlgImportAdvanced.exec();
2357 if (dlgImportAdvanced.result() == QDialog::Rejected) {
2361 int numberCoordSystem = dlgImportAdvanced.numberCoordSystem();
2370 connect (m_actionEditUndo, SIGNAL (triggered ()), m_cmdMediator, SLOT (undo ()));
2371 connect (m_actionEditUndo, SIGNAL (triggered ()), m_cmdStackShadow, SLOT (slotUndo ()));
2372 connect (m_actionEditRedo, SIGNAL (triggered ()), m_cmdMediator, SLOT (redo ()));
2373 connect (m_actionEditRedo, SIGNAL (triggered ()), m_cmdStackShadow, SLOT (slotRedo ()));
2374 connect (m_cmdMediator, SIGNAL (canRedoChanged(
bool)),
this, SLOT (slotCanRedoChanged (
bool)));
2375 connect (m_cmdMediator, SIGNAL (canUndoChanged(
bool)),
this, SLOT (slotCanUndoChanged (
bool)));
2376 connect (m_cmdMediator, SIGNAL (redoTextChanged (
const QString &)),
this, SLOT (slotRedoTextChanged (
const QString &)));
2377 connect (m_cmdMediator, SIGNAL (undoTextChanged (
const QString &)),
this, SLOT (slotUndoTextChanged (
const QString &)));
2378 loadCurveListFromCmdMediator ();
2379 loadCoordSystemListFromCmdMediator ();
2382 m_isDocumentExported =
false;
2391 m_cmbCurve->currentText ());
2392 m_backgroundStateContext->
setBackgroundImage ((BackgroundImage) m_cmbBackground->currentIndex ());
2394 applyZoomFactorAfterLoad();
2396 setCurrentFile(fileName);
2400 saveStartingDocumentSnapshot();
2409 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::showEvent"
2410 <<
" files=" << m_loadStartupFiles.join (
",").toLatin1().data();
2412 QMainWindow::showEvent (event);
2414 if (m_loadStartupFiles.count() > 0) {
2416 m_timerLoadStartupFiles =
new QTimer;
2417 m_timerLoadStartupFiles->setSingleShot (
true);
2418 connect (m_timerLoadStartupFiles, SIGNAL (timeout ()),
this, SLOT (slotLoadStartupFiles ()));
2419 m_timerLoadStartupFiles->start (0);
2429void MainWindow::slotBtnPrintAll ()
2431 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::slotBtnPrintAll";
2435 QPrinter printer (QPrinter::HighResolution);
2436 QPrintDialog dlg (&printer,
this);
2437 if (dlg.exec() == QDialog::Accepted) {
2438 QPainter painter (&printer);
2439 m_view->render (&painter);
2446void MainWindow::slotBtnShowAllPressed ()
2448 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::slotBtnShowAllPressed";
2454void MainWindow::slotBtnShowAllReleased ()
2456 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::slotBtnShowAllReleased";
2462void MainWindow::slotCanRedoChanged (
bool canRedo)
2464 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::slotCanRedoChanged";
2466 m_actionEditRedo->setEnabled (canRedo || m_cmdStackShadow->
canRedo());
2469void MainWindow::slotCanUndoChanged (
bool canUndo)
2471 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::slotCanUndoChanged";
2473 m_actionEditUndo->setEnabled (canUndo);
2476void MainWindow::slotChecklistClosed()
2478 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotChecklistClosed";
2480 m_actionViewChecklistGuide->setChecked (
false);
2483void MainWindow::slotCleanChanged(
bool clean)
2485 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotCleanChanged";
2487 setWindowModified (!clean);
2490void MainWindow::slotCmbBackground(
int currentIndex)
2492 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotCmbBackground";
2494 switch (currentIndex) {
2495 case BACKGROUND_IMAGE_NONE:
2496 if (!m_actionViewBackgroundNone->isChecked()) {
2497 m_actionViewBackgroundNone->toggle();
2501 case BACKGROUND_IMAGE_ORIGINAL:
2502 if (!m_actionViewBackgroundOriginal->isChecked ()) {
2503 m_actionViewBackgroundOriginal->toggle();
2507 case BACKGROUND_IMAGE_FILTERED:
2508 if (!m_actionViewBackgroundFiltered->isChecked ()) {
2509 m_actionViewBackgroundFiltered->toggle();
2517void MainWindow::slotCmbCoordSystem(
int index)
2519 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotCmbCoordSystem";
2525 m_cmdMediator->push (cmd);
2528void MainWindow::slotCmbCurve(
int )
2530 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotCmbCurve";
2535 m_cmbCurve->currentText ());
2538 updateViewedCurves();
2542void MainWindow::slotContextMenuEvent (QString pointIdentifier)
2544 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotContextMenuEvent point=" << pointIdentifier.toLatin1 ().data ();
2550void MainWindow::slotDigitizeAxis ()
2552 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotDigitizeAxis";
2555 DIGITIZE_STATE_AXIS);
2556 m_cmbCurve->setEnabled (
false);
2561void MainWindow::slotDigitizeColorPicker ()
2563 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotDigitizeColorPicker";
2566 DIGITIZE_STATE_COLOR_PICKER);
2567 m_cmbCurve->setEnabled (
true);
2572void MainWindow::slotDigitizeCurve ()
2574 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotDigitizeCurve";
2577 DIGITIZE_STATE_CURVE);
2578 m_cmbCurve->setEnabled (
true);
2583void MainWindow::slotDigitizePointMatch ()
2585 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotDigitizePointMatch";
2588 DIGITIZE_STATE_POINT_MATCH);
2589 m_cmbCurve->setEnabled (
true);
2594void MainWindow::slotDigitizeSegment ()
2596 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotDigitizeSegment";
2599 DIGITIZE_STATE_SEGMENT);
2600 m_cmbCurve->setEnabled (
true);
2605void MainWindow::slotDigitizeSelect ()
2607 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotDigitizeSelect";
2610 DIGITIZE_STATE_SELECT);
2611 m_cmbCurve->setEnabled (
false);
2616void MainWindow::slotEditCopy ()
2618 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotEditCopy";
2627void MainWindow::slotEditCut ()
2629 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotEditCut";
2638void MainWindow::slotEditDelete ()
2640 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotEditDelete";
2649void MainWindow::slotEditMenu ()
2651 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotEditMenu";
2653 m_actionEditPasteAsNew->setEnabled (!QApplication::clipboard()->image().isNull());
2654 m_actionEditPasteAsNewAdvanced->setEnabled (!QApplication::clipboard()->image().isNull());
2657void MainWindow::slotEditPaste ()
2659 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotEditPaste";
2662void MainWindow::slotEditPasteAsNew ()
2664 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotEditPasteAsNew";
2666 filePaste (IMPORT_TYPE_SIMPLE);
2669void MainWindow::slotEditPasteAsNewAdvanced ()
2671 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotEditPasteAsNewAdvanced";
2673 filePaste (IMPORT_TYPE_ADVANCED);
2676void MainWindow::slotFileClose()
2678 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileClose";
2692 DIGITIZE_STATE_EMPTY);
2698 m_backgroundStateContext->
close ();
2701 m_scene->setSceneRect (QRectF (0, 0, 1, 1));
2704 delete m_cmdMediator;
2710 setWindowTitle (engaugeWindowTitle ());
2716void MainWindow::slotFileExport ()
2718 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileExport";
2723 QString filter = QString (
"%1;;%2;;All files (*.*)")
2726 QString defaultFileName = QString (
"%1/%2.%3")
2727 .arg (QDir::currentPath ())
2728 .arg (m_currentFile)
2731 QString filterCsv = exportStrategy.
filterCsv ();
2732 QString fileName = dlg.getSaveFileName (
this,
2737 if (!fileName.isEmpty ()) {
2739 fileExport(fileName,
2748void MainWindow::slotFileImport ()
2750 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileImport";
2752 fileImportWithPrompts (IMPORT_TYPE_SIMPLE);
2755void MainWindow::slotFileImportAdvanced ()
2757 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileImportAdvanced";
2759 fileImportWithPrompts (IMPORT_TYPE_ADVANCED);
2762void MainWindow::slotFileImportDraggedImage(QImage image)
2764 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileImportDraggedImage";
2769 IMPORT_TYPE_SIMPLE);
2772void MainWindow::slotFileImportDraggedImageUrl(QUrl url)
2774 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileImportDraggedImageUrl url=" << url.toString ().toLatin1 ().data ();
2779void MainWindow::slotFileImportImage(QString fileName, QImage image)
2781 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileImportImage fileName=" << fileName.toLatin1 ().data ();
2784 loadImage (fileName,
2786 IMPORT_TYPE_SIMPLE);
2789void MainWindow::slotFileOpen()
2791 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileOpen";
2797 QString filter = QString (
"%1 (*.%2);; All Files (*.*)")
2798 .arg (ENGAUGE_FILENAME_DESCRIPTION)
2799 .arg (ENGAUGE_FILENAME_EXTENSION);
2801 QString fileName = QFileDialog::getOpenFileName (
this,
2802 tr(
"Open Document"),
2803 QDir::currentPath (),
2805 if (!fileName.isEmpty ()) {
2807 loadDocumentFile (fileName);
2813void MainWindow::slotFileOpenDraggedDigFile (QString fileName)
2815 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileOpenDraggedDigFile";
2817 loadDocumentFile (fileName);
2820void MainWindow::slotFilePrint()
2822 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFilePrint";
2824 QPrinter printer (QPrinter::HighResolution);
2825 QPrintDialog dlg (&printer,
this);
2826 if (dlg.exec() == QDialog::Accepted) {
2827 QPainter painter (&printer);
2828 m_view->render (&painter);
2833bool MainWindow::slotFileSave()
2835 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileSave";
2837 if (m_engaugeFile.isEmpty()) {
2838 return slotFileSaveAs();
2840 return saveDocumentFile (m_engaugeFile);
2844bool MainWindow::slotFileSaveAs()
2846 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileSaveAs";
2849 QString filenameDefault = m_currentFile;
2850 if (!m_currentFile.endsWith (ENGAUGE_FILENAME_EXTENSION)) {
2851 filenameDefault = QString (
"%1.%2")
2852 .arg (m_currentFile)
2853 .arg (ENGAUGE_FILENAME_EXTENSION);
2856 if (!m_engaugeFile.isEmpty()) {
2857 filenameDefault = m_engaugeFile;
2860 QString filterDigitizer = QString (
"%1 (*.%2)")
2861 .arg (ENGAUGE_FILENAME_DESCRIPTION)
2862 .arg (ENGAUGE_FILENAME_EXTENSION);
2863 QString filterAll (
"All files (*. *)");
2865 QStringList filters;
2866 filters << filterDigitizer;
2867 filters << filterAll;
2869 QFileDialog dlg(
this);
2870 dlg.selectNameFilter (filterDigitizer);
2871 dlg.setNameFilters (filters);
2872 dlg.setWindowModality(Qt::WindowModal);
2873 dlg.setAcceptMode(QFileDialog::AcceptSave);
2874 dlg.selectFile(filenameDefault);
2877 QStringList files = dlg.selectedFiles();
2878 return saveDocumentFile(files.at(0));
2884void MainWindow::slotHelpAbout()
2886 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotHelpAbout";
2892void MainWindow::slotHelpTutorial()
2894 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotHelpTutorial";
2896 m_tutorialDlg->show ();
2897 m_tutorialDlg->exec ();
2900void MainWindow::slotKeyPress (Qt::Key key,
2901 bool atLeastOneSelectedItem)
2903 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotKeyPress"
2904 <<
" key=" << QKeySequence (key).toString().toLatin1 ().data ()
2905 <<
" atLeastOneSelectedItem=" << (atLeastOneSelectedItem ?
"true" :
"false");
2909 atLeastOneSelectedItem);
2912void MainWindow::slotLeave ()
2914 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::slotLeave";
2916 m_digitizeStateContext->
handleLeave (m_cmdMediator);
2919void MainWindow::slotLoadStartupFiles ()
2921 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotLoadStartupFiles";
2923 ENGAUGE_ASSERT (m_loadStartupFiles.count() > 0);
2925 QString fileName = m_loadStartupFiles.front();
2926 m_loadStartupFiles.pop_front();
2932 loadDocumentFile (fileName);
2936 fileImport (fileName,
2937 IMPORT_TYPE_SIMPLE);
2941 if (m_loadStartupFiles.count() > 0) {
2945 QProcess::startDetached (QCoreApplication::applicationFilePath(),
2946 m_loadStartupFiles);
2950void MainWindow::slotMouseMove (QPointF pos)
2955 if (m_cmdMediator != 0) {
2958 QString coordsScreen, coordsGraph, resolutionGraph;
2977void MainWindow::slotMousePress (QPointF pos)
2979 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotMousePress";
2987void MainWindow::slotMouseRelease (QPointF pos)
2989 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotMouseRelease";
2991 if (pos.x() < 0 || pos.y() < 0) {
3005void MainWindow::slotRecentFileAction ()
3007 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotRecentFileAction";
3009 QAction *action = qobject_cast<QAction*>(sender ());
3012 QString fileName = action->data().toString();
3013 loadDocumentFile (fileName);
3017void MainWindow::slotRecentFileClear ()
3019 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotRecentFileClear";
3021 QStringList emptyList;
3023 QSettings settings (SETTINGS_ENGAUGE, SETTINGS_DIGITIZER);
3024 settings.setValue (SETTINGS_RECENT_FILE_LIST,
3027 updateRecentFileList();
3030void MainWindow::slotRedoTextChanged (
const QString &text)
3032 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::slotRedoTextChanged";
3034 QString completeText (
"Redo");
3035 if (!text.isEmpty ()) {
3036 completeText += QString (
" \"%1\"").arg (text);
3038 m_actionEditRedo->setText (completeText);
3041void MainWindow::slotSetOverrideCursor (QCursor cursor)
3043 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSetOverrideCursor";
3049void MainWindow::slotSettingsAxesChecker ()
3051 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsAxesChecker";
3053 m_dlgSettingsAxesChecker->
load (*m_cmdMediator);
3054 m_dlgSettingsAxesChecker->show ();
3057void MainWindow::slotSettingsColorFilter ()
3059 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsColorFilter";
3061 m_dlgSettingsColorFilter->
load (*m_cmdMediator);
3062 m_dlgSettingsColorFilter->show ();
3065void MainWindow::slotSettingsCoords ()
3067 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsCoords";
3069 m_dlgSettingsCoords->
load (*m_cmdMediator);
3070 m_dlgSettingsCoords->show ();
3073void MainWindow::slotSettingsCurveAddRemove ()
3075 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsCurveAddRemove";
3077 m_dlgSettingsCurveAddRemove->
load (*m_cmdMediator);
3078 m_dlgSettingsCurveAddRemove->show ();
3081void MainWindow::slotSettingsCurveProperties ()
3083 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsCurveProperties";
3085 m_dlgSettingsCurveProperties->
load (*m_cmdMediator);
3087 m_dlgSettingsCurveProperties->show ();
3090void MainWindow::slotSettingsDigitizeCurve ()
3092 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsDigitizeCurve";
3094 m_dlgSettingsDigitizeCurve->
load (*m_cmdMediator);
3095 m_dlgSettingsDigitizeCurve->show ();
3098void MainWindow::slotSettingsExportFormat ()
3100 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsExportFormat";
3103 m_dlgSettingsExportFormat->
load (*m_cmdMediator);
3104 m_dlgSettingsExportFormat->show ();
3111void MainWindow::slotSettingsGeneral ()
3113 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsGeneral";
3115 m_dlgSettingsGeneral->
load (*m_cmdMediator);
3116 m_dlgSettingsGeneral->show ();
3119void MainWindow::slotSettingsGridRemoval ()
3121 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsGridRemoval";
3123 m_dlgSettingsGridRemoval->
load (*m_cmdMediator);
3124 m_dlgSettingsGridRemoval->show ();
3127void MainWindow::slotSettingsPointMatch ()
3129 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsPointMatch";
3131 m_dlgSettingsPointMatch->
load (*m_cmdMediator);
3132 m_dlgSettingsPointMatch->show ();
3135void MainWindow::slotSettingsSegments ()
3137 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsSegments";
3139 m_dlgSettingsSegments->
load (*m_cmdMediator);
3140 m_dlgSettingsSegments->show ();
3143void MainWindow::slotSettingsMainWindow ()
3145 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsMainWindow";
3149 m_dlgSettingsMainWindow->show ();
3152void MainWindow::slotTimeoutRegressionErrorReport ()
3154 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotTimeoutRegressionErrorReport"
3155 <<
" cmdStackIndex=" << m_cmdMediator->index()
3156 <<
" cmdStackCount=" << m_cmdMediator->count();
3158 if (m_cmdStackShadow->
canRedo()) {
3164 exportAllCoordinateSystems ();
3167 m_cmdMediator->setClean();
3173void MainWindow::slotTimeoutRegressionFileCmdScript ()
3175 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotTimeoutRegressionFileCmdScript";
3177 if (m_fileCmdScript->
canRedo()) {
3179 m_fileCmdScript->
redo(*
this);
3184 if (m_cmdMediator != 0) {
3186 exportAllCoordinateSystems ();
3189 m_cmdMediator->setClean();
3199void MainWindow::slotUndoTextChanged (
const QString &text)
3201 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::slotUndoTextChanged";
3203 QString completeText (
"Undo");
3204 if (!text.isEmpty ()) {
3205 completeText += QString (
" \"%1\"").arg (text);
3207 m_actionEditUndo->setText (completeText);
3210void MainWindow::slotViewGroupBackground(QAction *action)
3212 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewGroupBackground";
3215 BackgroundImage backgroundImage;
3216 int indexBackground;
3217 if (action == m_actionViewBackgroundNone) {
3218 indexBackground = m_cmbBackground->findData (QVariant (BACKGROUND_IMAGE_NONE));
3219 backgroundImage = BACKGROUND_IMAGE_NONE;
3220 }
else if (action == m_actionViewBackgroundOriginal) {
3221 indexBackground = m_cmbBackground->findData (QVariant (BACKGROUND_IMAGE_ORIGINAL));
3222 backgroundImage = BACKGROUND_IMAGE_ORIGINAL;
3223 }
else if (action == m_actionViewBackgroundFiltered) {
3224 indexBackground = m_cmbBackground->findData (QVariant (BACKGROUND_IMAGE_FILTERED));
3225 backgroundImage = BACKGROUND_IMAGE_FILTERED;
3227 ENGAUGE_ASSERT (
false);
3230 indexBackground = m_cmbBackground->findData (QVariant (BACKGROUND_IMAGE_ORIGINAL));
3231 backgroundImage = BACKGROUND_IMAGE_ORIGINAL;
3234 m_cmbBackground->setCurrentIndex (indexBackground);
3238void MainWindow::slotViewGroupCurves(QAction * )
3240 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewGroupCurves";
3242 updateViewedCurves ();
3245void MainWindow::slotViewGroupStatus(QAction *action)
3247 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewGroupStatus";
3249 ENGAUGE_CHECK_PTR (m_statusBar);
3251 if (action == m_actionStatusNever) {
3253 }
else if (action == m_actionStatusTemporary) {
3260void MainWindow::slotViewToolBarBackground ()
3262 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewToolBarBackground";
3264 if (m_actionViewBackground->isChecked ()) {
3265 m_toolBackground->show();
3267 m_toolBackground->hide();
3271void MainWindow::slotViewToolBarChecklistGuide ()
3273 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewToolBarChecklistGuide";
3275 if (m_actionViewChecklistGuide->isChecked ()) {
3276 m_dockChecklistGuide->show();
3278 m_dockChecklistGuide->hide();
3282void MainWindow::slotViewToolBarCoordSystem ()
3284 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewToolBarCoordSystem";
3286 if (m_actionViewCoordSystem->isChecked ()) {
3287 m_toolCoordSystem->show();
3289 m_toolCoordSystem->hide();
3293void MainWindow::slotViewToolBarDigitize ()
3295 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewToolBarDigitize";
3297 if (m_actionViewDigitize->isChecked ()) {
3298 m_toolDigitize->show();
3300 m_toolDigitize->hide();
3304void MainWindow::slotViewToolBarSettingsViews ()
3306 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewToolBarSettingsViews";
3308 if (m_actionViewSettingsViews->isChecked ()) {
3309 m_toolSettingsViews->show();
3311 m_toolSettingsViews->hide();
3315void MainWindow::slotViewToolTips ()
3317 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewToolTips";
3322void MainWindow::slotViewZoom(
int zoom)
3324 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewZoom";
3327 switch ((ZoomFactor) zoom) {
3329 m_actionZoom16To1->setChecked(
true);
3330 slotViewZoom16To1 ();
3333 m_actionZoom8To1->setChecked(
true);
3334 slotViewZoom8To1 ();
3337 m_actionZoom4To1->setChecked(
true);
3338 slotViewZoom4To1 ();
3341 m_actionZoom2To1->setChecked(
true);
3342 slotViewZoom2To1 ();
3345 m_actionZoom1To1->setChecked(
true);
3346 slotViewZoom1To1 ();
3349 m_actionZoom1To2->setChecked(
true);
3350 slotViewZoom1To2 ();
3353 m_actionZoom1To4->setChecked(
true);
3354 slotViewZoom1To4 ();
3357 m_actionZoom1To8->setChecked(
true);
3358 slotViewZoom1To8 ();
3361 m_actionZoom1To16->setChecked(
true);
3362 slotViewZoom1To16 ();
3365 m_actionZoomFill->setChecked(
true);
3366 slotViewZoomFill ();
3371void MainWindow::slotViewZoom16To1 ()
3373 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewZoom16To1";
3375 QTransform transform;
3376 transform.scale (16.0, 16.0);
3377 m_view->setTransform (transform);
3381void MainWindow::slotViewZoom8To1 ()
3383 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewZoom8To1";
3385 QTransform transform;
3386 transform.scale (8.0, 8.0);
3387 m_view->setTransform (transform);
3391void MainWindow::slotViewZoom4To1 ()
3393 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewZoom4To1";
3395 QTransform transform;
3396 transform.scale (4.0, 4.0);
3397 m_view->setTransform (transform);
3401void MainWindow::slotViewZoom2To1 ()
3403 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotZoom2To1";
3405 QTransform transform;
3406 transform.scale (2.0, 2.0);
3407 m_view->setTransform (transform);
3411void MainWindow::slotViewZoom1To1 ()
3413 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewZoom1To1";
3415 QTransform transform;
3416 transform.scale (1.0, 1.0);
3417 m_view->setTransform (transform);
3421void MainWindow::slotViewZoom1To2 ()
3423 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotZoom1To2";
3425 QTransform transform;
3426 transform.scale (0.5, 0.5);
3427 m_view->setTransform (transform);
3431void MainWindow::slotViewZoom1To4 ()
3433 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotZoom1To4";
3435 QTransform transform;
3436 transform.scale (0.25, 0.25);
3437 m_view->setTransform (transform);
3441void MainWindow::slotViewZoom1To8 ()
3443 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotZoom1To8";
3445 QTransform transform;
3446 transform.scale (0.125, 0.125);
3447 m_view->setTransform (transform);
3451void MainWindow::slotViewZoom1To16 ()
3453 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotZoom1To16";
3455 QTransform transform;
3456 transform.scale (0.0625, 0.0625);
3457 m_view->setTransform (transform);
3461void MainWindow::slotViewZoomFill ()
3463 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewZoomFill";
3465 m_backgroundStateContext->
fitInView (*m_view);
3470void MainWindow::slotViewZoomIn ()
3472 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewZoomIn";
3476 bool goto16To1 =
false, goto8To1 =
false, goto4To1 =
false, goto2To1 =
false;
3477 bool goto1To1 =
false;
3478 bool goto1To2 =
false, goto1To4 =
false, goto1To8 =
false, goto1To16 =
false;
3479 if (m_actionZoomFill->isChecked ()) {
3482 double xScale = m_view->transform().m11();
3483 double yScale = m_view->transform().m22();
3484 double scale = qMin(xScale, yScale);
3485 if (scale < 0.125) {
3487 }
else if (scale < 0.25) {
3489 }
else if (scale < 0.5) {
3491 }
else if (scale < 1) {
3493 }
else if (scale < 2) {
3495 }
else if (scale < 4) {
3497 }
else if (scale < 8) {
3503 goto16To1 = m_actionZoom8To1->isChecked ();
3504 goto8To1 = m_actionZoom4To1->isChecked ();
3505 goto4To1 = m_actionZoom2To1->isChecked ();
3506 goto2To1 = m_actionZoom1To1->isChecked ();
3507 goto1To1 = m_actionZoom1To2->isChecked ();
3508 goto1To2 = m_actionZoom1To4->isChecked ();
3509 goto1To4 = m_actionZoom1To8->isChecked ();
3510 goto1To8 = m_actionZoom1To16->isChecked ();
3515 m_actionZoom16To1->setChecked (
true);
3516 slotViewZoom16To1 ();
3517 }
else if (goto8To1) {
3518 m_actionZoom8To1->setChecked (
true);
3519 slotViewZoom8To1 ();
3520 }
else if (goto4To1) {
3521 m_actionZoom4To1->setChecked (
true);
3522 slotViewZoom4To1 ();
3523 }
else if (goto2To1) {
3524 m_actionZoom2To1->setChecked (
true);
3525 slotViewZoom2To1 ();
3526 }
else if (goto1To1) {
3527 m_actionZoom1To1->setChecked (
true);
3528 slotViewZoom1To1 ();
3529 }
else if (goto1To2) {
3530 m_actionZoom1To2->setChecked (
true);
3531 slotViewZoom1To2 ();
3532 }
else if (goto1To4) {
3533 m_actionZoom1To4->setChecked (
true);
3534 slotViewZoom1To4 ();
3535 }
else if (goto1To8) {
3536 m_actionZoom1To8->setChecked (
true);
3537 slotViewZoom1To8 ();
3538 }
else if (goto1To16) {
3539 m_actionZoom1To16->setChecked (
true);
3540 slotViewZoom1To16 ();
3544void MainWindow::slotViewZoomInFromWheelEvent ()
3546 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewZoomInFromWheelEvent";
3548 if ((m_modelMainWindow.
zoomControl() == ZOOM_CONTROL_MENU_WHEEL) ||
3549 (m_modelMainWindow.
zoomControl() == ZOOM_CONTROL_MENU_WHEEL_PLUSMINUS)) {
3556void MainWindow::slotViewZoomOut ()
3558 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewZoomOut";
3562 bool goto16To1 =
false, goto8To1 =
false, goto4To1 =
false, goto2To1 =
false;
3563 bool goto1To1 =
false;
3564 bool goto1To2 =
false, goto1To4 =
false, goto1To8 =
false, goto1To16 =
false;
3565 if (m_actionZoomFill->isChecked ()) {
3568 double xScale = m_view->transform().m11();
3569 double yScale = m_view->transform().m22();
3570 double scale = qMax(xScale, yScale);
3573 }
else if (scale > 4) {
3575 }
else if (scale > 2) {
3577 }
else if (scale > 1) {
3579 }
else if (scale > 0.5) {
3581 }
else if (scale > 0.25) {
3583 }
else if (scale > 0.125) {
3589 goto8To1 = m_actionZoom16To1->isChecked ();
3590 goto4To1 = m_actionZoom8To1->isChecked ();
3591 goto2To1 = m_actionZoom4To1->isChecked ();
3592 goto1To1 = m_actionZoom2To1->isChecked ();
3593 goto1To2 = m_actionZoom1To1->isChecked ();
3594 goto1To4 = m_actionZoom1To2->isChecked ();
3595 goto1To8 = m_actionZoom1To4->isChecked ();
3596 goto1To16 = m_actionZoom1To8->isChecked ();
3601 m_actionZoom1To16->setChecked (
true);
3602 slotViewZoom1To16 ();
3603 }
else if (goto1To8) {
3604 m_actionZoom1To8->setChecked (
true);
3605 slotViewZoom1To8 ();
3606 }
else if (goto1To4) {
3607 m_actionZoom1To4->setChecked (
true);
3608 slotViewZoom1To4 ();
3609 }
else if (goto1To2) {
3610 m_actionZoom1To2->setChecked (
true);
3611 slotViewZoom1To2 ();
3612 }
else if (goto1To1) {
3613 m_actionZoom1To1->setChecked (
true);
3614 slotViewZoom1To1 ();
3615 }
else if (goto2To1) {
3616 m_actionZoom2To1->setChecked (
true);
3617 slotViewZoom2To1 ();
3618 }
else if (goto4To1) {
3619 m_actionZoom4To1->setChecked (
true);
3620 slotViewZoom4To1 ();
3621 }
else if (goto8To1) {
3622 m_actionZoom8To1->setChecked (
true);
3623 slotViewZoom8To1 ();
3624 }
else if (goto16To1) {
3625 m_actionZoom16To1->setChecked (
true);
3626 slotViewZoom16To1 ();
3630void MainWindow::slotViewZoomOutFromWheelEvent ()
3632 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewZoomOutFromWheelEvent";
3634 if ((m_modelMainWindow.
zoomControl() == ZOOM_CONTROL_MENU_WHEEL) ||
3635 (m_modelMainWindow.
zoomControl() == ZOOM_CONTROL_MENU_WHEEL_PLUSMINUS)) {
3642void MainWindow::startRegressionTestErrorReport(
const QString ®ressionInputFile)
3644 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::startRegressionTestErrorReport";
3646 const int REGRESSION_INTERVAL = 400;
3649 m_regressionFile = exportFilenameFromInputFilename (regressionInputFile);
3651 m_timerRegressionErrorReport =
new QTimer();
3652 m_timerRegressionErrorReport->setSingleShot(
false);
3653 connect (m_timerRegressionErrorReport, SIGNAL (timeout()),
this, SLOT (slotTimeoutRegressionErrorReport()));
3655 m_timerRegressionErrorReport->start(REGRESSION_INTERVAL);
3658void MainWindow::startRegressionTestFileCmdScript()
3660 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::startRegressionTestFileCmdScript";
3662 const int REGRESSION_INTERVAL = 400;
3664 m_timerRegressionFileCmdScript =
new QTimer();
3665 m_timerRegressionFileCmdScript->setSingleShot(
false);
3666 connect (m_timerRegressionFileCmdScript, SIGNAL (timeout()),
this, SLOT (slotTimeoutRegressionFileCmdScript()));
3668 m_timerRegressionFileCmdScript->start(REGRESSION_INTERVAL);
3673 return m_transformation;
3683 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateAfterCommand";
3685 ENGAUGE_CHECK_PTR (m_cmdMediator);
3689 updateAfterCommandStatusBarCoords ();
3698 m_dockChecklistGuide->
update (*m_cmdMediator,
3699 m_isDocumentExported);
3703 writeCheckpointToLogFile ();
3706void MainWindow::updateAfterCommandStatusBarCoords ()
3708 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateAfterCommandStatusBarCoords";
3713 const QPoint HACK_SO_GRAPH_COORDINATE_MATCHES_INPUT (1, 1);
3717 updateTransformationAndItsDependencies();
3720 if (!m_transformationBefore.transformIsDefined() && m_transformation.
transformIsDefined()) {
3728 }
else if (m_transformationBefore.transformIsDefined() && !m_transformation.
transformIsDefined()) {
3736 }
else if (m_transformation.
transformIsDefined() && (m_transformationBefore != m_transformation)) {
3745 QPoint posLocal = m_view->mapFromGlobal (QCursor::pos ()) - HACK_SO_GRAPH_COORDINATE_MATCHES_INPUT;
3746 QPointF posScreen = m_view->mapToScene (posLocal);
3748 slotMouseMove (posScreen);
3753 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateAfterMouseRelease";
3758void MainWindow::updateControls ()
3760 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateControls"
3761 <<
" selectedItems=" << m_scene->selectedItems().count();
3763 m_cmbBackground->setEnabled (!m_currentFile.isEmpty ());
3765 m_menuFileOpenRecent->setEnabled ((m_actionRecentFiles.count () > 0) &&
3766 (m_actionRecentFiles.at(0)->isVisible ()));
3767 m_actionClose->setEnabled (!m_currentFile.isEmpty ());
3768 m_actionSave->setEnabled (!m_currentFile.isEmpty ());
3769 m_actionSaveAs->setEnabled (!m_currentFile.isEmpty ());
3770 m_actionExport->setEnabled (!m_currentFile.isEmpty ());
3771 m_actionPrint->setEnabled (!m_currentFile.isEmpty ());
3773 if (m_cmdMediator == 0) {
3774 m_actionEditUndo->setEnabled (
false);
3775 m_actionEditRedo->setEnabled (
false);
3777 m_actionEditUndo->setEnabled (m_cmdMediator->canUndo ());
3778 m_actionEditRedo->setEnabled (m_cmdMediator->canRedo () || m_cmdStackShadow->
canRedo ());
3780 m_actionEditCut->setEnabled (m_scene->selectedItems().count () > 0);
3781 m_actionEditCopy->setEnabled (m_scene->selectedItems().count () > 0);
3782 m_actionEditPaste->setEnabled (
false);
3783 m_actionEditDelete->setEnabled (m_scene->selectedItems().count () > 0);
3786 m_actionDigitizeAxis->setEnabled (!m_currentFile.isEmpty ());
3787 m_actionDigitizeCurve ->setEnabled (!m_currentFile.isEmpty ());
3788 m_actionDigitizePointMatch->setEnabled (!m_currentFile.isEmpty ());
3789 m_actionDigitizeColorPicker->setEnabled (!m_currentFile.isEmpty ());
3790 m_actionDigitizeSegment->setEnabled (!m_currentFile.isEmpty ());
3791 m_actionDigitizeSelect->setEnabled (!m_currentFile.isEmpty ());
3793 m_actionViewBackground->setEnabled (!m_currentFile.isEmpty());
3794 m_actionViewChecklistGuide->setEnabled (!m_dockChecklistGuide->
browserIsEmpty());
3795 m_actionViewDigitize->setEnabled (!m_currentFile.isEmpty ());
3796 m_actionViewSettingsViews->setEnabled (!m_currentFile.isEmpty ());
3798 m_actionSettingsCoords->setEnabled (!m_currentFile.isEmpty ());
3799 m_actionSettingsCurveAddRemove->setEnabled (!m_currentFile.isEmpty ());
3800 m_actionSettingsCurveProperties->setEnabled (!m_currentFile.isEmpty ());
3801 m_actionSettingsDigitizeCurve->setEnabled (!m_currentFile.isEmpty ());
3802 m_actionSettingsExport->setEnabled (!m_currentFile.isEmpty ());
3803 m_actionSettingsColorFilter->setEnabled (!m_currentFile.isEmpty ());
3804 m_actionSettingsAxesChecker->setEnabled (!m_currentFile.isEmpty ());
3805 m_actionSettingsGridRemoval->setEnabled (!m_currentFile.isEmpty ());
3806 m_actionSettingsPointMatch->setEnabled (!m_currentFile.isEmpty ());
3807 m_actionSettingsSegments->setEnabled (!m_currentFile.isEmpty ());
3808 m_actionSettingsGeneral->setEnabled (!m_currentFile.isEmpty ());
3810 m_groupBackground->setEnabled (!m_currentFile.isEmpty ());
3811 m_groupCurves->setEnabled (!m_currentFile.isEmpty ());
3812 m_groupZoom->setEnabled (!m_currentFile.isEmpty ());
3814 m_actionZoomIn->setEnabled (!m_currentFile.isEmpty ());
3815 m_actionZoomOut->setEnabled (!m_currentFile.isEmpty ());
3820 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateCoordSystem";
3823 updateTransformationAndItsDependencies();
3835 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateDigitizeStateIfSoftwareTriggered";
3837 switch (digitizeState) {
3838 case DIGITIZE_STATE_AXIS:
3839 m_actionDigitizeAxis->setChecked(
true);
3843 case DIGITIZE_STATE_COLOR_PICKER:
3844 m_actionDigitizeColorPicker->setChecked(
true);
3845 slotDigitizeColorPicker();
3848 case DIGITIZE_STATE_CURVE:
3849 m_actionDigitizeCurve->setChecked(
true);
3850 slotDigitizeCurve();
3853 case DIGITIZE_STATE_EMPTY:
3856 case DIGITIZE_STATE_POINT_MATCH:
3857 m_actionDigitizePointMatch->setChecked(
true);
3858 slotDigitizePointMatch();
3861 case DIGITIZE_STATE_SEGMENT:
3862 m_actionDigitizeSegment->setChecked(
true);
3863 slotDigitizeSegment();
3866 case DIGITIZE_STATE_SELECT:
3867 m_actionDigitizeSelect->setChecked(
true);
3868 slotDigitizeSelect();
3872 LOG4CPP_ERROR_S ((*mainCat)) <<
"MainWindow::updateDigitizeStateIfSoftwareTriggered";
3879 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateGraphicsLinesToMatchGraphicsPoints";
3885void MainWindow::updateRecentFileList()
3887 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateRecentFileList";
3889 QSettings settings (SETTINGS_ENGAUGE, SETTINGS_DIGITIZER);
3890 QStringList recentFilePaths = settings.value(SETTINGS_RECENT_FILE_LIST).toStringList();
3893 unsigned int count = recentFilePaths.size();
3894 if (count > MAX_RECENT_FILE_LIST_SIZE) {
3895 count = MAX_RECENT_FILE_LIST_SIZE;
3900 for (i = 0; i < count; i++) {
3901 QString strippedName = QFileInfo (recentFilePaths.at(i)).fileName();
3902 m_actionRecentFiles.at (i)->setText (strippedName);
3903 m_actionRecentFiles.at (i)->setData (recentFilePaths.at (i));
3904 m_actionRecentFiles.at (i)->setVisible (
true);
3908 for (i = count; i < MAX_RECENT_FILE_LIST_SIZE; i++) {
3909 m_actionRecentFiles.at (i)->setVisible (
false);
3915 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsAxesChecker";
3922 m_cmbCurve->currentText());
3927 m_cmbCurve->currentText());
3933 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsColorFilter";
3945 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsCoords";
3952 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsCurveAddRemove";
3955 loadCurveListFromCmdMediator();
3961 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsCurveStyles";
3970 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsDigitizeCurve";
3974 modelDigitizeCurve);
3979 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsExportFormat";
3986 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsGeneral";
3993 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsGridRemoval";
3998void MainWindow::updateSettingsMainWindow()
4000 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsMainWindow";
4002 if (m_modelMainWindow.
zoomControl() == ZOOM_CONTROL_MENU_ONLY ||
4003 m_modelMainWindow.
zoomControl() == ZOOM_CONTROL_MENU_WHEEL) {
4005 m_actionZoomIn->setShortcut (tr (
""));
4006 m_actionZoomOut->setShortcut (tr (
""));
4010 m_actionZoomIn->setShortcut (tr (
"+"));
4011 m_actionZoomOut->setShortcut (tr (
"-"));
4015 updateWindowTitle();
4020 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsMainWindow";
4028 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsPointMatch";
4035 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsSegments";
4041void MainWindow::updateTransformationAndItsDependencies()
4043 m_transformation.
update (!m_currentFile.isEmpty (),
4051 m_cmbCurve->currentText ());
4054void MainWindow::updateViewedCurves ()
4056 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateViewedCurves";
4058 if (m_actionViewCurvesAll->isChecked ()) {
4062 }
else if (m_actionViewCurvesSelected->isChecked ()) {
4066 }
else if (m_actionViewCurvesNone->isChecked ()) {
4071 ENGAUGE_ASSERT (
false);
4077 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateViewsOfSettings";
4079 QString activeCurve = m_digitizeStateContext->
activeCurve ();
4086 if (activeCurve.isEmpty ()) {
4099 m_cmdMediator->
pixmap ());
4104void MainWindow::updateWindowTitle ()
4106 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateWindowTitle";
4108 const QString PLACEHOLDER (
"[*]");
4110 QString title = QString (tr (
"Engauge Digitizer %1")
4111 .arg (VERSION_NUMBER));
4113 QString fileNameMaybeStripped;
4114 if (!m_currentFileWithPathAndFileExtension.isEmpty()) {
4116 QFileInfo fileInfo (m_currentFileWithPathAndFileExtension);
4120 case MAIN_TITLE_BAR_FORMAT_NO_PATH:
4121 fileNameMaybeStripped = fileInfo.baseName();
4124 case MAIN_TITLE_BAR_FORMAT_PATH:
4125 fileNameMaybeStripped = m_currentFileWithPathAndFileExtension;
4129 title += QString (
": %1")
4130 .arg (fileNameMaybeStripped);
4135 title += PLACEHOLDER;
4137 setWindowTitle (title);
4142 ENGAUGE_CHECK_PTR (m_view);
4148 ENGAUGE_CHECK_PTR (m_view);
4152void MainWindow::writeCheckpointToLogFile ()
4155 QString checkpointDoc;
4156 QTextStream strDoc (&checkpointDoc);
4161 QString checkpointScene;
4162 QTextStream strScene (&checkpointScene);
4167 if (mainCat->getPriority() == log4cpp::Priority::DEBUG) {
4169 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::writeCheckpointToLogFile\n"
4170 <<
"--------------DOCUMENT CHECKPOINT START----------" <<
"\n"
4171 << checkpointDoc.toLatin1().data()
4172 <<
"---------------DOCUMENT CHECKPOINT END-----------" <<
"\n"
4173 <<
"----------------SCENE CHECKPOINT START-----------" <<
"\n"
4174 << checkpointScene.toLatin1().data()
4175 <<
"-----------------SCENE CHECKPOINT END------------" ;
Context class that manages the background image state machine.
void updateColorFilter(const Transformation &transformation, const DocumentModelGridRemoval &modelGridRemoval, const DocumentModelColorFilter &colorFilter)
Apply color filter settings.
void setBackgroundImage(BackgroundImage backgroundImage)
Transition to the specified state. This method is used by classes outside of the state machine to tri...
QImage imageForCurveState() const
Image for the Curve state, even if the current state is different.
void fitInView(GraphicsView &view)
Zoom so background fills the window.
void setCurveSelected(const Transformation &transformation, const DocumentModelGridRemoval &modelGridRemoval, const DocumentModelColorFilter &modelColorFilter, const QString &curveSelected)
Update the selected curve.
void close()
Open Document is being closed so remove the background.
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.
Wizard for setting up the checklist guide.
QStringList curveNames(CoordSystemIndex coordSystemIndex) const
Curve names to be placed into Document.
QString templateHtml(CoordSystemIndex coordSystemIndex) const
Template html comprising the checklist for display.
void populateCurvesGraphs(CoordSystemIndex coordSystemIndex, CurvesGraphs &curvesGraphs)
Create entries in CurvesGraphs for each curve name that user provided.
Dockable text window containing checklist guide.
bool browserIsEmpty() const
When browser is empty, it is pointless to show it.
void setTemplateHtml(const QString &html, const QStringList &curveNames)
Populate the browser with template html.
void update(const CmdMediator &cmdMediator, bool documentIsExported)
Update using current CmdMediator/Document state.
Command for moving all selected Points by a specified translation.
Command for cutting all selected Points.
Command for deleting all selected Points.
Command for changing the currently selected CoordSystem.
Command stack that shadows the CmdMediator command stack at startup when reading commands from an err...
bool canRedo() const
Return true if there is a command available.
void slotRedo()
Move next command from list to CmdMediator. Noop if there are no more commands.
void loadCommands(MainWindow &mainWindow, Document &document, QXmlStreamReader &reader)
Load commands from serialized xml.
Color filter parameters for one curve. For a class, this is handled the same as LineStyle and PointSt...
PointStyle pointStyle() const
Get method for PointStyle.
Model for DlgSettingsCurveProperties and CmdSettingsCurveProperties.
CurveStyle curveStyle(const QString &curveName) const
CurveStyle in specified curve.
Container for all graph curves. The axes point curve is external to this class.
Container for all DigitizeStateAbstractBase subclasses. This functions as the context class in a stan...
void resetOnLoad(CmdMediator *cmdMediator)
Resetting makes re-initializes for documents after the first.
void handleMouseRelease(CmdMediator *cmdMediator, QPointF pos)
See DigitizeStateAbstractBase::handleMouseRelease.
void handleContextMenuEvent(CmdMediator *cmdMediator, const QString &pointIdentifier)
See DigitizeStateAbstractBase::handleContextMenuEvent.
void handleMouseMove(CmdMediator *cmdMediator, QPointF pos)
See DigitizeStateAbstractBase::handleMouseMove.
void requestImmediateStateTransition(CmdMediator *cmdMediator, DigitizeState digitizeState)
Perform immediate state transition. Called from outside state machine.
void updateModelDigitizeCurve(CmdMediator *cmdMediator, const DocumentModelDigitizeCurve &modelDigitizeCurve)
Update the digitize curve settings.
void handleMousePress(CmdMediator *cmdMediator, QPointF pos)
See DigitizeStateAbstractBase::handleMousePress.
void appendNewCmd(CmdMediator *cmdMediator, QUndoCommand *cmd)
Append just-created QUndoCommand to command stack. This is called from DigitizeStateAbstractBase subc...
void handleSetOverrideCursor(CmdMediator *cmdMediator, const QCursor &cursor)
See DigitizeStateAbstractBase::handleSetOverrideCursor.
void setImageIsLoaded(CmdMediator *cmdMediator, bool imageIsLoaded)
Set the image so QGraphicsView cursor and drag mode are accessible.
QString activeCurve() const
Curve name for active Curve. This can include AXIS_CURVE_NAME, and empty string.
void handleKeyPress(CmdMediator *cmdMediator, Qt::Key key, bool atLeastOneSelectedItem)
See DigitizeStateAbstractBase::handleKeyPress.
void updateModelSegments(const DocumentModelSegments &modelSegments)
Update the segments given the new settings.
void handleCurveChange(CmdMediator *cmdMediator)
See DigitizeStateAbstractBase::handleCurveChange.
void handleLeave(CmdMediator *cmdMediator)
See DigitizeStateAbstractBase::handleLeave.
About Engauge dialog. This provides a hidden shortcut for triggering ENGAUGE_ASSERT.
Dialog for sending error report.
QString xmlToUpload() const
Xml to be uploaded. Includes document if user has approved.
Dialog for setting the advanced parameters in a newly imported Document.
Dialog for editing axes checker settings.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
Dialog for editing filtering settings.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
Dialog for editing coordinates settings.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
Dialog for editing curve names settings.
void load(CmdMediator &cmdMediator)
Load settings from Document.
Dialog for editing curve properties settings.
void setCurveName(const QString &curveName)
Load information for the specified curve name. When called externally, the load method must have been...
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
Dialog for editing DigitizeStateCurve settings.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
Dialog for editing general settings.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
Dialog for editing grid removal settings.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
Dialog for editing main window settings, which are entirely independent of all documents.
void loadMainWindowModel(CmdMediator &cmdMediator, const MainWindowModel &modelMainWindow)
Replaced load method since the main window settings are independent of document, unlike other DlgSett...
Dialog for editing point match settings, for DigitizeStatePointMatch.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
Dialog for editing Segments settings, for DigitizeStateSegment.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
Model for DlgSettingsAxesChecker and CmdSettingsAxesChecker.
Model for DlgSettingsColorFilter and CmdSettingsColorFilter.
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...
Model for DlgSettingsCoords and CmdSettingsCoords.
Model for DlgSettingsDigitizeCurve and CmdSettingsDigitizeCurve.
Model for DlgSettingsGeneral and CmdSettingsGeneral.
Model for DlgSettingsGridRemoval and CmdSettingsGridRemoval. The settings are unstable until the user...
Model for DlgSettingsPointMatch and CmdSettingsPointMatch.
Model for DlgSettingsSegments and CmdSettingsSegments.
unsigned int coordSystemCount() const
Number of CoordSystem.
void setModelGridRemoval(const DocumentModelGridRemoval &modelGridRemoval)
Set method for DocumentModelGridRemoval.
void setCoordSystemIndex(CoordSystemIndex coordSystemIndex)
Set the index of current active CoordSystem.
void printStream(QString indentation, QTextStream &str) const
Debugging method that supports print method of this class and printStream method of some other class(...
CoordSystemIndex coordSystemIndex() const
Index of current active CoordSystem.
void setModelPointMatch(const DocumentModelPointMatch &modelPointMatch)
Set method for DocumentModelPointMatch.
void setModelCurveStyles(const CurveStyles &modelCurveStyles)
Set method for CurveStyles.
void addCoordSystems(unsigned int numberCoordSystemToAdd)
Add some number (0 or more) of additional coordinate systems.
void setModelColorFilter(const DocumentModelColorFilter &modelColorFilter)
Set method for DocumentModelColorFilter.
void setModelDigitizeCurve(const DocumentModelDigitizeCurve &modelDigitizeCurve)
Set method for DocumentModelDigitizeCurve.
void saveXml(QXmlStreamWriter &writer) const
Save document to xml.
DocumentModelAxesChecker modelAxesChecker() const
Get method for DocumentModelAxesChecker.
DocumentModelColorFilter modelColorFilter() const
Get method for DocumentModelColorFilter.
void setCurvesGraphs(const CurvesGraphs &curvesGraphs)
Let CmdAbstract classes overwrite CurvesGraphs.
CurveStyles modelCurveStyles() const
Get method for CurveStyles.
void setModelCoords(const DocumentModelCoords &modelCoords)
Set method for DocumentModelCoords.
void setModelAxesChecker(const DocumentModelAxesChecker &modelAxesChecker)
Set method for DocumentModelAxesChecker.
void setModelSegments(const DocumentModelSegments &modelSegments)
Set method for DocumentModelSegments.
void setModelGeneral(const DocumentModelGeneral &modelGeneral)
Set method for DocumentModelGeneral.
void setModelExport(const DocumentModelExportFormat &modelExport)
Set method for DocumentModelExportFormat.
DocumentModelGridRemoval modelGridRemoval() const
Get method for DocumentModelGridRemoval.
DocumentModelExportFormat modelExport() const
Get method for DocumentModelExportFormat.
Strategy class for exporting to a file. This strategy is external to the Document class so that class...
QString filterTsv() const
QFileDialog filter for TSV files.
QString filterCsv() const
QFileDialog filter for CSV files.
void exportToFile(const DocumentModelExportFormat &modelExport, const Document &document, const MainWindowModel &modelMainWindow, const Transformation &transformation, QTextStream &str) const
Export Document points according to the settings.
QString fileExtensionTsv() const
File extension for tsv export files.
QString fileExtensionCsv() const
File extension for csv export files.
File that manages a command stack for regression testing of file import/open/export/close.
bool canRedo() const
Returns true if there is at least one command on the stack.
void redo(MainWindow &mainWindow)
Apply the next command. Requires non-empty stack.
Class for showing points and lines for all coordinate systems simultaneously, even though the code no...
unsigned int coordSystemIndexToBeRestored() const
Coordinate system index that was active before the ghosts.
void createGhosts(QGraphicsScene &scene)
Create ghosts from the path/rect/polygon lists.
void captureGraphicsItems(QGraphicsScene &scene)
Take a snapshot of the graphics items.
void destroyGhosts(QGraphicsScene &scene)
Destory ghosts. Called at end of algorithm.
Add point and line handling to generic QGraphicsScene.
void updateGraphicsLinesToMatchGraphicsPoints(const CurveStyles &modelCurveStyles, const Transformation &transformation)
A mouse move has just occurred so move the selected points, since they were dragged.
void resetOnLoad()
Reset, when loading a document after the first, to same state that first document was at when loaded.
void updateAfterCommand(CmdMediator &cmdMediator)
Update the Points and their Curves after executing a command.
QStringList selectedPointIdentifiers() const
Return a list of identifiers for the currently selected points.
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);.
void resetPositionHasChangedFlags()
Reset positionHasChanged flag for all items. Typically this is done as part of mousePressEvent.
void printStream(QString indentation, QTextStream &str)
Debugging method that supports print method of this class and printStream method of some other class(...
void updateCurveStyles(const CurveStyles &modelCurveStyles)
Update curve styles after settings changed.
QGraphicsView class with event handling added. Typically the events are sent to the active digitizing...
Wrapper around OpenJPEG library, in C, for opening jpeg2000 files.
QStringList supportedImageWildcards() const
List the supported jpeg2000 file extensions, for filtering import files.
bool load(const QString &filename, QImage &image) const
Load image from jpeg2000 file.
Returns information about files.
bool loadsAsDigFile(const QString &urlString) const
Returns true if specified file name can be loaded as a DIG file.
Load QImage from url. This is trivial for a file, but requires an asynchronous download step for http...
void startLoadImage(const QUrl &url)
Start the asynchronous loading of an image from the specified url.
static void bindToMainWindow(const MainWindow *mainWindow)
Bind to MainWindow so this class can access the command stack.
Model for DlgSettingsMainWindow.
QLocale locale() const
Get method for locale.
ZoomFactorInitial zoomFactorInitial() const
Get method for initial zoom factor.
void setMainTitleBarFormat(MainTitleBarFormat mainTitleBarFormat)
Set method for MainWindow titlebar filename format.
void setZoomControl(ZoomControl zoomControl)
Set method for zoom control.
ZoomControl zoomControl() const
Get method for zoom control.
void setZoomFactorInitial(ZoomFactorInitial zoomFactorInitial)
Set method for initial zoom factor.
MainTitleBarFormat mainTitleBarFormat() const
Get method for MainWindow titlebar filename format.
void setLocale(QLocale::Language language, QLocale::Country country)
Set method for locale given attributes.
void updateSettingsGridRemoval(const DocumentModelGridRemoval &modelGridRemoval)
Update with new grid removal properties.
void showTemporaryMessage(const QString &temporaryMessage)
Show temporary message in status bar.
CmdMediator * cmdMediator()
Accessor for commands to process the Document.
virtual bool eventFilter(QObject *, QEvent *)
Catch secret keypresses.
void updateSettingsAxesChecker(const DocumentModelAxesChecker &modelAxesChecker)
Update with new axes indicator properties.
virtual void showEvent(QShowEvent *)
Processing performed after gui becomes available.
void updateSettingsDigitizeCurve(const DocumentModelDigitizeCurve &modelDigitizeCurve)
Update with new curve digitization styles.
bool isGnuplot() const
Get method for gnuplot flag.
void updateSettingsCurveStyles(const CurveStyles &modelCurveStyles)
Update with new curve styles.
bool transformIsDefined() const
Return true if all three axis points have been defined.
MainWindowModel modelMainWindow() const
Get method for main window model.
void cmdFileOpen(const QString &fileName)
Open file. This is called from a file script command.
void updateAfterCommand()
See GraphicsScene::updateAfterCommand.
void updateSettingsExportFormat(const DocumentModelExportFormat &modelExport)
Update with new export properties.
void updateSettingsSegments(const DocumentModelSegments &modelSegments)
Update with new segments properties.
BackgroundImage selectOriginal(BackgroundImage backgroundImage)
Make original background visible, for DigitizeStateColorPicker.
void updateSettingsCurveAddRemove(const CurvesGraphs &curvesGraphs)
Update with new curves.
void saveErrorReportFileAndExit(const char *comment, const char *file, int line, const char *context) const
Save error report and exit.
void cmdFileExport(const QString &fileName)
Export 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...
void updateSettingsMainWindow(const MainWindowModel &modelMainWindow)
Update with new main window properties.
void cmdFileClose()
Close file. This is called from a file script command.
void updateDigitizeStateIfSoftwareTriggered(DigitizeState digitizeState)
After software-triggered state transition, this method manually triggers the action as if user had cl...
void updateSettingsGeneral(const DocumentModelGeneral &modelGeneral)
Update with new general properties.
void signalZoom(int)
Send zoom selection, picked from menu or keystroke, to StatusBar.
void updateSettingsPointMatch(const DocumentModelPointMatch &modelPointMatch)
Update with new point match properties.
void cmdFileImport(const QString &fileName)
Import file. This is called from a file script command.
void updateGraphicsLinesToMatchGraphicsPoints()
Update the graphics lines so they follow the graphics points, after a drag, addition,...
MainWindow(const QString &errorReportFile, const QString &fileCmdScriptFile, bool isRegressionTest, bool isGnuplot, QStringList loadStartupFiles, QWidget *parent=0)
Single constructor.
QImage imageFiltered() const
Background image that has been filtered for the current curve. This asserts if a curve-specific image...
QString selectedGraphCurve() const
Curve name that is currently selected in m_cmbCurve.
GraphicsScene & scene()
Scene container for the QImage and QGraphicsItems.
void updateAfterMouseRelease()
Call MainWindow::updateControls (which is private) after the very specific case - a mouse press/relea...
void resizeEvent(QResizeEvent *event)
Intercept resize event so graphics scene can be appropriately resized when in Fill mode.
Transformation transformation() const
Return read-only copy of transformation.
void updateSettingsColorFilter(const DocumentModelColorFilter &modelColorFilter)
Update with new color filter properties.
void updateCoordSystem(CoordSystemIndex coordSystemIndex)
Select a different CoordSystem.
void updateSettingsCoords(const DocumentModelCoords &modelCoords)
Update with new coordinate properties.
GraphicsView & view()
View for the QImage and QGraphicsItems, without const.
Client for interacting with Engauge server.
void uploadErrorReport(const QString &report)
Upload the error report asynchronously.
Details for a specific Point.
Wrapper around QStatusBar to manage permanent widgets.
void wakeUp()
Enable all widgets in the status bar. This is called just after a Document becomes active.
void setStatusBarMode(StatusBarMode statusBarMode)
Set the status bar visibility mode.
StatusBarMode statusBarMode() const
Current mode for status bar visibility. This is tracked locally so this class knows when to hide/show...
void showTemporaryMessage(const QString &message)
Show temporary message in status bar. After a short interval the message will disappear.
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...
Context class for transformation state machine.
void triggerStateTransition(TransformationState transformationState, CmdMediator &cmdMediator, const Transformation &transformation, const QString &selectedGraphCurve)
Trigger a state transition to be performed immediately.
void resetOnLoad()
Reset, when loading a document after the first, to same state that first document was at when loaded.
void updateAxesChecker(CmdMediator &cmdMediator, const Transformation &transformation)
Apply the new DocumentModelAxesChecker.
Tutorial using a strategy like a comic strip with decision points deciding which panels appear.
Class that displays a view of the current Curve's point style.
void unsetPointStyle()
Apply no PointStyle.
void setPointStyle(const PointStyle &pointStyle)
Apply the PointStyle of the currently selected curve.
void setEnabled(bool enabled)
Show the style with semi-transparency or full-transparency to indicate if associated Curve is active ...
Class that displays the current Segment Filter in a MainWindow toolbar.
void unsetColorFilterSettings()
Apply no color filter.
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 setEnabled(bool enabled)
Show the style with semi-transparency or full-transparency to indicate if associated Curve is active ...