7 #include "BackgroundImage.h" 8 #include "BackgroundStateContext.h" 9 #include "ChecklistGuide.h" 10 #include "ChecklistGuideWizard.h" 11 #include "CmdAddPointsGraph.h" 14 #include "CmdDelete.h" 15 #include "CmdMediator.h" 16 #include "CmdSelectCoordSystem.h" 17 #include "CmdStackShadow.h" 18 #include "ColorFilter.h" 19 #include "CreateFacade.h" 22 #include "DigitizeStateContext.h" 24 #include "DlgErrorReportLocal.h" 25 #include "DlgImportAdvanced.h" 26 #include "DlgRequiresTransform.h" 27 #include "DlgSettingsAxesChecker.h" 28 #include "DlgSettingsColorFilter.h" 29 #include "DlgSettingsCoords.h" 30 #include "DlgSettingsCurveList.h" 31 #include "DlgSettingsCurveProperties.h" 32 #include "DlgSettingsDigitizeCurve.h" 33 #include "DlgSettingsExportFormat.h" 34 #include "DlgSettingsGeneral.h" 35 #include "DlgSettingsGridDisplay.h" 36 #include "DlgSettingsGridRemoval.h" 37 #include "DlgSettingsMainWindow.h" 38 #include "DlgSettingsPointMatch.h" 39 #include "DlgSettingsSegments.h" 40 #include "DocumentScrub.h" 41 #include "DocumentSerialize.h" 42 #include "EngaugeAssert.h" 43 #include "EnumsToQt.h" 44 #include "ExportImageForRegression.h" 45 #include "ExportToFile.h" 46 #include "FileCmdScript.h" 47 #include "FittingCurve.h" 48 #include "FittingWindow.h" 49 #include "GeometryWindow.h" 51 #include "GraphicsItemsExtractor.h" 52 #include "GraphicsItemType.h" 53 #include "GraphicsScene.h" 54 #include "GraphicsView.h" 55 #include "GridLineFactory.h" 56 #include "GridLineLimiter.h" 57 #if !defined(OSX_DEBUG) && !defined(OSX_RELEASE) 58 #include "HelpWindow.h" 60 #include "ImportImageExtensions.h" 61 #ifdef ENGAUGE_JPEG2000 63 #endif // ENGAUGE_JPEG2000 64 #include "LoadFileInfo.h" 65 #include "LoadImageFromUrl.h" 67 #include "MainDirectoryPersist.h" 68 #include "MainTitleBarFormat.h" 69 #include "MainWindow.h" 70 #include "MimePointsImport.h" 72 #include "NetworkClient.h" 78 #include "PdfResolution.h" 80 #include <QApplication> 82 #include <QCloseEvent> 85 #include <QDesktopServices> 86 #include <QDockWidget> 87 #include <QDomDocument> 88 #include <QFileDialog> 90 #include <QImageReader> 92 #include <QKeySequence> 94 #include <QMessageBox> 95 #include <QMouseEvent> 96 #include <QPrintDialog> 99 #include <QPushButton> 101 #include <QSignalMapper> 102 #include <QTextStream> 103 #if !defined(OSX_DEBUG) && !defined(OSX_RELEASE) 108 #include <QToolButton> 109 #include "QtToString.h" 110 #include <QVBoxLayout> 111 #include <QWhatsThis> 112 #include <QXmlStreamReader> 113 #include <QXmlStreamWriter> 114 #include "ScaleBarAxisPointsUnite.h" 115 #include "Settings.h" 116 #include "StatusBar.h" 117 #include "TransformationStateContext.h" 118 #include "TutorialDlg.h" 120 #include "ViewPointStyle.h" 121 #include "ViewSegmentFilter.h" 122 #include "ZoomFactor.h" 123 #include "ZoomFactorInitial.h" 124 #include "ZoomTransition.h" 126 const QString EMPTY_FILENAME (
"");
127 static const char *ENGAUGE_FILENAME_DESCRIPTION =
"Engauge Document";
128 const QString ENGAUGE_FILENAME_EXTENSION (
"dig");
129 const int REGRESSION_INTERVAL = 400;
130 const unsigned int MAX_RECENT_FILE_LIST_SIZE = 8;
133 const QString &fileCmdScriptFile,
134 bool isDropRegression,
135 bool isRegressionTest,
139 bool isExtractImageOnly,
140 const QString &extractImageOnlyExtension,
141 const QStringList &loadStartupFiles,
142 const QStringList &commandLineWithoutLoadStartupFiles,
145 m_originalFileWasImported (false),
146 m_isDocumentExported (false),
147 m_engaugeFile (EMPTY_FILENAME),
148 m_currentFile (EMPTY_FILENAME),
152 m_loadImageFromUrl (nullptr),
153 m_cmdMediator (nullptr),
154 m_digitizeStateContext (nullptr),
155 m_transformationStateContext (nullptr),
156 m_backgroundStateContext (nullptr),
157 m_networkClient (nullptr),
158 m_isGnuplot (isGnuplot),
159 m_commandLineWithoutLoadStartupFiles (commandLineWithoutLoadStartupFiles),
161 m_timerRegressionErrorReport(nullptr),
162 m_fileCmdScript (nullptr),
163 m_isErrorReportRegressionTest (isRegressionTest),
164 m_timerRegressionFileCmdScript(nullptr),
165 m_fittingCurve (nullptr),
166 m_isExportOnly (isExportOnly),
167 m_isExtractImageOnly (isExtractImageOnly),
168 m_extractImageOnlyExtension (extractImageOnlyExtension)
170 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::MainWindow" 171 <<
" curDir=" << QDir::currentPath().toLatin1().data();
173 #if defined(OSX_DEBUG) || defined(OSX_RELEASE) 174 qApp->setApplicationName (
"Engauge Digitizer");
175 qApp->setOrganizationDomain (
"Mark Mitchell");
180 m_startupDirectory = QDir::currentPath();
185 createFacade.
create (*
this);
189 settingsRead (isReset);
191 setUnifiedTitleAndToolBarOnMac(
true);
193 installEventFilter(
this);
197 QString originalPath = QDir::currentPath();
198 QDir::setCurrent (m_startupDirectory);
200 m_loadStartupFiles = loadStartupFiles;
201 m_regressionFile = exportRegressionFilenameFromInputFilename (loadStartupFiles.first ());
202 slotLoadStartupFiles ();
205 }
else if (isExtractImageOnly) {
206 m_loadStartupFiles = loadStartupFiles;
207 m_regressionFile = exportRegressionFilenameFromInputFilename (loadStartupFiles.first ());
208 slotLoadStartupFiles ();
209 handlerFileExtractImage ();
211 }
else if (!errorReportFile.isEmpty()) {
212 loadErrorReportFile(errorReportFile);
213 if (m_isErrorReportRegressionTest) {
214 startRegressionTestErrorReport(errorReportFile);
216 }
else if (!fileCmdScriptFile.isEmpty()) {
218 startRegressionTestFileCmdScript();
219 }
else if (isDropRegression) {
221 startRegressionDropTest (loadStartupFiles);
226 m_loadStartupFiles = loadStartupFiles;
228 QDir::setCurrent (originalPath);
231 MainWindow::~MainWindow()
233 #if !defined(OSX_DEBUG) && !defined(OSX_RELEASE) 236 delete m_tutorialDlg;
237 delete m_cmdMediator;
238 delete m_cmdStackShadow;
239 delete m_digitizeStateContext;
240 delete m_transformationStateContext;
241 delete m_backgroundStateContext;
242 delete m_dlgSettingsAxesChecker;
243 delete m_dlgSettingsColorFilter;
244 delete m_dlgSettingsCoords;
245 delete m_dlgSettingsCurveList;
246 delete m_dlgSettingsCurveProperties;
247 delete m_dlgSettingsDigitizeCurve;
248 delete m_dlgSettingsExportFormat;
249 delete m_dlgSettingsGeneral;
250 delete m_dlgSettingsGridDisplay;
251 delete m_dlgSettingsGridRemoval;
252 delete m_dlgSettingsMainWindow;
253 delete m_dlgSettingsPointMatch;
254 delete m_dlgSettingsSegments;
255 delete m_fileCmdScript;
256 m_gridLines.
clear ();
259 void MainWindow::addDockWindow (QDockWidget *dockWidget,
261 const QString &settingsTokenArea,
262 const QString &settingsTokenGeometry,
263 Qt::DockWidgetArea dockWidgetArea)
268 const bool DOCKED_EQUALS_NOT_FLOATING =
false;
269 Qt::DockWidgetArea area = static_cast<Qt::DockWidgetArea> (settings.value (settingsTokenArea,
270 Qt::NoDockWidgetArea).toInt());
272 if (area == Qt::NoDockWidgetArea) {
274 addDockWidget (dockWidgetArea,
276 dockWidget->setFloating(DOCKED_EQUALS_NOT_FLOATING);
277 if (settings.contains (settingsTokenGeometry)) {
278 dockWidget->restoreGeometry (settings.value (settingsTokenGeometry).toByteArray());
289 void MainWindow::applyZoomFactorAfterLoad()
291 ZoomFactor zoomFactor;
294 if (m_zoomMapFromInitial.contains (zoomFactorInitial)) {
295 zoomFactor = m_zoomMapFromInitial [zoomFactorInitial];
296 }
else if (zoomFactorInitial == ZOOM_INITIAL_PREVIOUS) {
297 zoomFactor = currentZoomFactor ();
299 ENGAUGE_ASSERT (
false);
300 zoomFactor = currentZoomFactor();
303 slotViewZoom (zoomFactor);
306 void MainWindow::closeEvent(QCloseEvent *event)
318 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::cmdFileClose";
320 setWindowModified (
false);
326 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::cmdFileExport";
335 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::cmdFileImport";
337 m_regressionFile = exportRegressionFilenameFromInputFilename (fileName);
338 fileImport (fileName,
344 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::cmdFileOpen";
346 m_regressionFile = exportRegressionFilenameFromInputFilename (fileName);
347 loadDocumentFile(fileName);
353 return m_cmdMediator;
356 ZoomFactor MainWindow::currentZoomFactor ()
const 359 for (
int z = 0; z < NUMBER_ZOOM_FACTORS; z++) {
360 ZoomFactor zoomFactor = static_cast<ZoomFactor> (z);
361 if (m_zoomMapToAction [zoomFactor]->isChecked ()) {
367 ENGAUGE_ASSERT (
false);
373 if (event->type () == QEvent::KeyPress) {
375 QKeyEvent *eventKeyPress = static_cast<QKeyEvent *> (event);
378 if ((eventKeyPress->key() == Qt::Key_E) &&
379 ((eventKeyPress->modifiers() & Qt::ShiftModifier) != 0) &&
380 ((eventKeyPress->modifiers() & Qt::ControlModifier) != 0)) {
390 return QObject::eventFilter (target, event);
393 #if !defined(OSX_DEBUG) && !defined(OSX_RELEASE) 394 void MainWindow::exportAllCoordinateSystemsAfterRegressionTests()
396 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::exportAllCoordinateSystemsAfterRegressionTests curDir=" << QDir::currentPath().toLatin1().data();
403 QString regressionFile = QString (
"%1_%2")
404 .arg (m_regressionFile)
418 fileExport (regressionFile,
425 QString MainWindow::exportRegressionFilenameFromInputFilename (
const QString &fileName)
const 430 befores <<
".dig" <<
".gif" <<
".html" <<
".htm" <<
".jp2" <<
".jpg" <<
".pbm" 431 <<
".pdf" <<
".pgm" <<
".png" <<
".ppm" <<
".xbm" <<
".xpm" <<
".xml";
433 QString outFileName = fileName;
435 QStringList::iterator itr;
436 for (itr = befores.begin(); itr != befores.end(); itr++) {
437 QString suffix = *itr;
439 outFileName = outFileName.replace (suffix,
".csv_actual", Qt::CaseInsensitive);
445 void MainWindow::fileExport(
const QString &fileName,
448 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::fileExport" 449 <<
" curDir=" << QDir::currentPath().toLatin1().data()
450 <<
" fileName=" << fileName.toLatin1().data();
452 QFile file (fileName);
453 if (file.open(QIODevice::WriteOnly)) {
455 QTextStream str (&file);
466 m_isDocumentExported =
true;
468 updateChecklistGuide ();
473 LOG4CPP_ERROR_S ((*mainCat)) <<
"MainWindow::fileExport" 474 <<
" file=" << fileName.toLatin1().data()
475 <<
" curDir=" << QDir::currentPath().toLatin1().data();
476 QMessageBox::critical (
nullptr,
477 engaugeWindowTitle(),
478 tr (
"Unable to export to file") +
" " + fileName);
482 void MainWindow::fileExtractImage (
const QString &fileName)
484 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::fileExtractImage" 485 <<
" curDir=" << QDir::currentPath().toLatin1().data()
486 <<
" fileName=" << fileName.toLatin1().data();
488 QFile file (fileName);
489 if (file.open(QIODevice::WriteOnly)) {
491 QPixmap pixmap = m_cmdMediator->
pixmap();
495 if (m_isErrorReportRegressionTest) {
496 QString csvFile = QString (
"%1_1")
497 .arg (exportRegressionFilenameFromInputFilename (m_regressionFile));
501 process.start (
"bash -c \"cksum " + fileName +
" | awk '{print $1}' > " + csvFile +
"\"");
502 process.waitForFinished (-1);
507 LOG4CPP_ERROR_S ((*mainCat)) <<
"MainWindow::fileExtractImage" 508 <<
" file=" << fileName.toLatin1().data()
509 <<
" curDir=" << QDir::currentPath().toLatin1().data();
510 QMessageBox::critical (
nullptr,
511 engaugeWindowTitle(),
512 tr (
"Unable to extract image to file") +
" " + fileName);
516 void MainWindow::fileImport (
const QString &fileName,
517 ImportType importType)
519 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::fileImport" 520 <<
" fileName=" << fileName.toLatin1 ().data ()
521 <<
" curDir=" << QDir::currentPath().toLatin1().data()
522 <<
" importType=" << importType;
524 QString originalFileOld = m_originalFile;
525 bool originalFileWasImported = m_originalFileWasImported;
527 m_originalFile = fileName;
528 m_originalFileWasImported =
true;
530 if (importType == IMPORT_TYPE_ADVANCED) {
543 #ifdef ENGAUGE_JPEG2000 545 loaded = jpeg2000.
load (fileName,
547 #endif // ENGAUGE_JPEG2000 553 PdfReturn pdfReturn = pdf.
load (fileName,
557 m_isErrorReportRegressionTest);
558 if (pdfReturn == PDF_RETURN_CANCELED) {
565 loaded = (pdfReturn == PDF_RETURN_SUCCESS);
567 #endif // ENGAUGE_PDF 571 NonPdfReturn nonPdfReturn = nonPdf.
load (fileName,
574 m_isErrorReportRegressionTest);
575 if (nonPdfReturn == NON_PDF_RETURN_CANCELED) {
582 loaded = (nonPdfReturn == NON_PDF_RETURN_SUCCESS);
586 QString msg = QString(
"%1 %2 %3 %4.")
587 .arg (tr (
"Cannot read file"))
589 .arg (tr (
"from directory"))
590 .arg (QDir::currentPath());
592 if (fileName.contains (
"???")) {
597 msg += QObject::tr (
"The file appears to have characters from multiple language " 598 "alphabets, which does not work in the Windows command line");
601 QMessageBox::warning (
this,
602 engaugeWindowTitle(),
606 m_originalFile = originalFileOld;
607 m_originalFileWasImported = originalFileWasImported;
611 loaded = loadImage (fileName,
618 if (importType == IMPORT_TYPE_ADVANCED) {
628 m_originalFile = originalFileOld;
629 m_originalFileWasImported = originalFileWasImported;
635 void MainWindow::fileImportWithPrompts (ImportType importType)
637 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::fileImportWithPrompts" 638 <<
" importType=" << importType;
642 bool okToContinue =
true;
643 if (importType != IMPORT_TYPE_IMAGE_REPLACE) {
644 okToContinue = maybeSave ();
650 QTextStream str (&filter);
655 str <<
"Image Files (" << supportedImageFormatStrings.join (
" ") <<
")";
659 str <<
";; All Files (*.*)";
662 QString fileName = QFileDialog::getOpenFileName (
this,
666 if (!fileName.isEmpty ()) {
671 fileImport (fileName,
677 QString MainWindow::fileNameForExportOnly ()
const 682 if (m_isErrorReportRegressionTest) {
685 fileName = QString (
"%1_1")
686 .arg (exportRegressionFilenameFromInputFilename (m_regressionFile));
691 QString dir = QFileInfo (m_currentFileWithPathAndFileExtension).absolutePath();
692 fileName = QString (
"%1/%2.%3")
701 QString MainWindow::fileNameForExtractImageOnly ()
const 704 QString dir = QFileInfo (m_currentFileWithPathAndFileExtension).absolutePath();
705 QString fileName = QString (
"%1/%2.%3")
708 .arg (m_extractImageOnlyExtension);
713 void MainWindow::filePaste (ImportType importType)
715 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::filePaste" 716 <<
" importType=" << importType;
718 QString originalFileOld = m_originalFile;
719 bool originalFileWasImported = m_originalFileWasImported;
721 QString fileName (
"clipboard");
722 m_originalFile = fileName;
723 m_originalFileWasImported =
true;
725 if (importType == IMPORT_TYPE_ADVANCED) {
736 QImage image = QApplication::clipboard()->image();
740 loaded = !image.isNull();
744 QMessageBox::warning (
this,
745 engaugeWindowTitle(),
746 QString(
"%1 %2 %3 %4.")
747 .arg (tr (
"Cannot read file"))
749 .arg (tr (
"from directory"))
750 .arg (QDir::currentPath ()));
753 m_originalFile = originalFileOld;
754 m_originalFileWasImported = originalFileWasImported;
758 loaded = loadImage (fileName,
765 if (importType == IMPORT_TYPE_ADVANCED) {
775 m_originalFile = originalFileOld;
776 m_originalFileWasImported = originalFileWasImported;
782 void MainWindow::ghostsCreate ()
784 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::ghostsCreate";
786 ENGAUGE_ASSERT (m_ghosts ==
nullptr);
808 void MainWindow::ghostsDestroy ()
810 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::ghostsDestroy";
812 ENGAUGE_CHECK_PTR (m_ghosts);
820 void MainWindow::handlerFileExtractImage ()
822 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::handlerFileExtractImage";
824 if (m_isExtractImageOnly) {
825 QString fileName = fileNameForExtractImageOnly ();
830 fileExtractImage(fileName);
844 void MainWindow::loadCoordSystemListFromCmdMediator ()
846 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::loadCoordSystemListFromCmdMediator";
848 m_cmbCoordSystem->clear();
852 for (
unsigned int i = 0; i < numberCoordSystem; i++) {
853 int index1Based = signed (i + 1);
854 m_cmbCoordSystem->addItem (QString::number (index1Based),
859 m_cmbCoordSystem->setCurrentIndex (0);
862 bool enable = (m_cmbCoordSystem->count() > 1);
863 m_cmbCoordSystem->setEnabled (enable);
864 m_btnShowAll->setEnabled (enable);
865 m_btnPrintAll->setEnabled (enable);
868 void MainWindow::loadCurveListFromCmdMediator ()
870 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::loadCurveListFromCmdMediator";
872 m_cmbCurve->clear ();
874 QStringList::iterator itr;
875 for (itr = curvesGraphsNames.begin (); itr != curvesGraphsNames.end (); itr++) {
877 QString curvesGraphName = *itr;
878 m_cmbCurve->addItem (curvesGraphName);
885 void MainWindow::loadDocumentFile (
const QString &fileName)
887 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::loadDocumentFile fileName=" << fileName.toLatin1 ().data ();
889 QApplication::setOverrideCursor(Qt::WaitCursor);
895 setCurrentPathFromFile (fileName);
896 rebuildRecentFileListForCurrentFile(fileName);
897 m_currentFile = fileName;
899 delete m_cmdMediator;
902 setupAfterLoadNewDocument (fileName,
907 m_actionDigitizeSelect->setChecked (
true);
908 slotDigitizeSelect();
910 m_engaugeFile = fileName;
911 m_originalFile = fileName;
912 m_originalFileWasImported =
false;
917 QApplication::restoreOverrideCursor();
921 QApplication::restoreOverrideCursor();
923 QMessageBox::warning (
this,
924 engaugeWindowTitle(),
925 QString(
"%1 %2 %3 %4:\n%5.")
926 .arg (tr (
"Cannot read file"))
928 .arg (tr (
"from directory"))
929 .arg (QDir::currentPath ())
936 void MainWindow::loadErrorReportFile(
const QString &errorReportFile)
938 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::loadErrorReportFile" 939 <<
" file=" << errorReportFile.toLatin1().data();
941 QFile file (errorReportFile);
942 if (!file.exists()) {
944 QFileInfo fileInfo (errorReportFile);
946 QMessageBox::critical (
this,
947 engaugeWindowTitle(),
948 tr (
"File not found") +
": " + fileInfo.absoluteFilePath());
953 QXmlStreamReader reader (&file);
954 file.open(QIODevice::ReadOnly | QIODevice::Text);
964 setupAfterLoadNewDocument (errorReportFile,
965 tr (
"Error report opened"),
969 m_actionDigitizeSelect->setChecked (
true);
970 slotDigitizeSelect();
975 bool MainWindow::loadImage (
const QString &fileName,
977 ImportType importType)
979 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::loadImage" 980 <<
" fileName=" << fileName.toLatin1 ().data ()
981 <<
" importType=" << importType;
984 if (importType == IMPORT_TYPE_IMAGE_REPLACE) {
985 success = loadImageReplacingImage (fileName,
989 success = loadImageNewDocument (fileName,
997 bool MainWindow::loadImageNewDocument (
const QString &fileName,
999 ImportType importType)
1001 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::loadImageNewDocument" 1002 <<
" fileName=" << fileName.toLatin1 ().data ()
1003 <<
" importType=" << importType;
1005 ENGAUGE_ASSERT (importType != IMPORT_TYPE_IMAGE_REPLACE);
1007 QApplication::setOverrideCursor(Qt::WaitCursor);
1010 QApplication::restoreOverrideCursor();
1012 setCurrentPathFromFile (fileName);
1014 m_engaugeFile = EMPTY_FILENAME;
1016 delete m_cmdMediator;
1019 bool accepted = setupAfterLoadNewDocument (fileName,
1020 tr (
"File imported"),
1026 if (m_actionHelpChecklistGuideWizard->isChecked () &&
1027 (m_fileCmdScript ==
nullptr)) {
1032 if (wizard->exec() == QDialog::Accepted) {
1034 for (CoordSystemIndex coordSystemIndex = 0; coordSystemIndex < m_cmdMediator->
document().
coordSystemCount(); coordSystemIndex++) {
1048 m_actionViewChecklistGuide->setChecked (
true);
1051 loadCurveListFromCmdMediator();
1054 loadCoordSystemListFromCmdMediator();
1060 m_actionDigitizeAxis->setChecked (
true);
1064 slotDigitizeScale ();
1065 }
else if (modeGraph ()) {
1066 slotDigitizeAxis ();
1075 bool MainWindow::loadImageReplacingImage (
const QString &fileName,
1076 const QImage &image,
1077 ImportType importType)
1079 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::loadImageReplacingImage" 1080 <<
" fileName=" << fileName.toLatin1 ().data ()
1081 <<
" importType=" << importType;
1083 ENGAUGE_ASSERT (importType == IMPORT_TYPE_IMAGE_REPLACE);
1085 setCurrentPathFromFile (fileName);
1087 m_engaugeFile = EMPTY_FILENAME;
1089 ENGAUGE_ASSERT (m_cmdMediator !=
nullptr);
1093 bool accepted = setupAfterLoadReplacingImage (fileName,
1094 tr (
"File imported"),
1102 void MainWindow::loadInputFileForErrorReport(QDomDocument &domInputFile)
const 1104 QFile file (m_originalFile);
1108 if (!file.open (QIODevice::ReadOnly)) {
1112 domInputFile.setContent (&file);
1116 void MainWindow::loadToolTips()
1118 if (m_actionViewToolTips->isChecked ()) {
1121 m_actionDigitizeSelect->setToolTip (m_actionDigitizeSelect->text());
1122 m_actionDigitizeAxis->setToolTip (m_actionDigitizeAxis->text());
1123 m_actionDigitizeScale->setToolTip (m_actionDigitizeScale->text());
1124 m_actionDigitizeCurve->setToolTip (m_actionDigitizeCurve->text());
1125 m_actionDigitizePointMatch->setToolTip (m_actionDigitizePointMatch->text());
1126 m_actionDigitizeColorPicker->setToolTip (m_actionDigitizeColorPicker->text());
1127 m_actionDigitizeSegment->setToolTip (m_actionDigitizeSegment->text());
1128 m_cmbBackground->setToolTip (tr (
"Background image."));
1129 m_cmbCurve->setToolTip (tr (
"Currently selected curve."));
1130 m_viewPointStyle->setToolTip (tr (
"Point style for currently selected curve."));
1131 m_viewSegmentFilter->setToolTip (tr (
"Segment Fill filter for currently selected curve."));
1136 m_actionDigitizeSelect->setToolTip (
"");
1137 m_actionDigitizeAxis->setToolTip (
"");
1138 m_actionDigitizeScale->setToolTip (
"");
1139 m_actionDigitizeCurve->setToolTip (
"");
1140 m_actionDigitizePointMatch->setToolTip (
"");
1141 m_actionDigitizeColorPicker->setToolTip (
"");
1142 m_actionDigitizeSegment->setToolTip (
"");
1143 m_cmbBackground->setToolTip (
"");
1144 m_cmbCurve->setToolTip (
"");
1145 m_viewPointStyle->setToolTip (
"");
1146 m_viewSegmentFilter->setToolTip (
"");
1151 bool MainWindow::modeGraph ()
const 1153 bool success =
false;
1155 if (m_cmdMediator !=
nullptr) {
1164 bool success =
false;
1166 if (m_cmdMediator !=
nullptr) {
1173 bool MainWindow::maybeSave()
1175 if (m_cmdMediator !=
nullptr) {
1177 QMessageBox::StandardButton ret = QMessageBox::warning (
this,
1178 engaugeWindowTitle(),
1179 tr(
"The document has been modified.\n" 1180 "Do you want to save your changes?"),
1181 QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
1182 if (ret == QMessageBox::Save) {
1183 return slotFileSave();
1184 }
else if (ret == QMessageBox::Cancel) {
1195 const QString &fileName)
const 1203 QString csvExtension = QString (
".%1")
1205 QString tsvExtension = QString (
".%1")
1207 QString fileExtensionVersusCsv = fileName.right (csvExtension.size());
1208 QString fileExtensionVersusTsv = fileName.right (tsvExtension.size());
1212 if (csvExtension.compare (fileExtensionVersusCsv, Qt::CaseInsensitive) == 0) {
1213 modelExportFormatAfter.
setDelimiter (EXPORT_DELIMITER_COMMA);
1214 }
else if (tsvExtension.compare (fileExtensionVersusTsv, Qt::CaseInsensitive) == 0) {
1215 modelExportFormatAfter.
setDelimiter (EXPORT_DELIMITER_TAB);
1219 return modelExportFormatAfter;
1224 return m_modelMainWindow;
1227 void MainWindow::rebuildRecentFileListForCurrentFile(
const QString &filePath)
1229 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::rebuildRecentFileListForCurrentFile";
1231 setWindowFilePath (filePath);
1233 QSettings settings (SETTINGS_ENGAUGE, SETTINGS_DIGITIZER);
1234 QStringList recentFilePaths = settings.value (SETTINGS_RECENT_FILE_LIST).toStringList();
1235 recentFilePaths.removeAll (filePath);
1236 recentFilePaths.prepend (filePath);
1237 while (recentFilePaths.count () > qFloor (MAX_RECENT_FILE_LIST_SIZE)) {
1238 recentFilePaths.removeLast ();
1240 settings.setValue (SETTINGS_RECENT_FILE_LIST, recentFilePaths);
1242 updateRecentFileList();
1247 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::resizeEvent";
1249 if (m_actionZoomFill->isChecked ()) {
1250 slotViewZoomFactor (ZOOM_FILL);
1254 bool MainWindow::saveDocumentFile (
const QString &fileName)
1256 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::saveDocumentFile fileName=" << fileName.toLatin1 ().data ();
1258 QFile file(fileName);
1259 if (!file.open(QFile::WriteOnly)) {
1260 QMessageBox::warning (
this,
1261 engaugeWindowTitle(),
1262 QString (
"%1 %2: \n%3.")
1263 .arg(tr (
"Cannot write file"))
1265 .arg(file.errorString()));
1269 rebuildRecentFileListForCurrentFile (fileName);
1271 QApplication::setOverrideCursor (Qt::WaitCursor);
1272 QXmlStreamWriter writer(&file);
1273 writer.setAutoFormatting(
true);
1274 writer.writeStartDocument();
1275 writer.writeDTD(
"<!DOCTYPE engauge>");
1277 writer.writeEndDocument();
1278 QApplication::restoreOverrideCursor ();
1282 m_cmdMediator->setClean ();
1284 setCurrentFile(fileName);
1285 m_engaugeFile = fileName;
1295 const char *comment)
1299 if ((m_cmdMediator !=
nullptr) && !m_isErrorReportRegressionTest) {
1301 QString report = saveErrorReportFileAndExitXml (context,
1307 if (dlg.exec() == QDialog::Accepted) {
1310 QString fileName = dlg.getSaveFileName (
this,
1312 "error_report.xml");
1313 if (!fileName.isEmpty ()) {
1315 QFile fileError (fileName);
1316 QTextStream str (&fileError);
1317 fileError.open (QIODevice::WriteOnly | QIODevice::Text);
1327 QString MainWindow::saveErrorReportFileAndExitXml (
const char *context,
1330 const char *comment)
const 1332 const bool DEEP_COPY =
true;
1334 QString xmlErrorReport;
1335 QXmlStreamWriter writer (&xmlErrorReport);
1336 writer.setAutoFormatting(
true);
1339 writer.writeStartElement(DOCUMENT_SERIALIZE_ERROR_REPORT);
1342 writer.writeStartElement(DOCUMENT_SERIALIZE_APPLICATION);
1343 writer.writeAttribute(DOCUMENT_SERIALIZE_APPLICATION_VERSION_NUMBER, VERSION_NUMBER);
1344 writer.writeEndElement();
1348 QXmlStreamReader reader (m_startingDocumentSnapshot);
1349 while (!reader.atEnd ()) {
1351 if (reader.tokenType() != QXmlStreamReader::StartDocument &&
1352 reader.tokenType() != QXmlStreamReader::EndDocument &&
1353 reader.tokenType() != QXmlStreamReader::Invalid) {
1354 writer.writeCurrentToken (reader);
1359 writer.writeStartElement(DOCUMENT_SERIALIZE_OPERATING_SYSTEM);
1360 writer.writeAttribute(DOCUMENT_SERIALIZE_OPERATING_SYSTEM_ENDIAN, EndianToString (QSysInfo::ByteOrder));
1361 writer.writeAttribute(DOCUMENT_SERIALIZE_OPERATING_SYSTEM_WORD_SIZE, QString::number (QSysInfo::WordSize));
1362 writer.writeEndElement();
1365 writer.writeStartElement(DOCUMENT_SERIALIZE_FILE);
1366 writer.writeAttribute(DOCUMENT_SERIALIZE_FILE_IMPORTED,
1367 m_originalFileWasImported ? DOCUMENT_SERIALIZE_BOOL_TRUE : DOCUMENT_SERIALIZE_BOOL_FALSE);
1368 writer.writeEndElement();
1371 m_cmdMediator->
saveXml(writer);
1374 writer.writeStartElement(DOCUMENT_SERIALIZE_ERROR);
1375 writer.writeAttribute(DOCUMENT_SERIALIZE_ERROR_CONTEXT, context);
1376 writer.writeAttribute(DOCUMENT_SERIALIZE_ERROR_FILE, file);
1377 writer.writeAttribute(DOCUMENT_SERIALIZE_ERROR_LINE, QString::number (line));
1378 writer.writeAttribute(DOCUMENT_SERIALIZE_ERROR_COMMENT, comment);
1379 writer.writeEndElement();
1381 writer.writeEndElement();
1384 QDomDocument domErrorReport (
"ErrorReport");
1385 domErrorReport.setContent (xmlErrorReport);
1388 if (!m_originalFileWasImported) {
1392 QDomDocument domInputFile;
1393 loadInputFileForErrorReport (domInputFile);
1394 QDomDocumentFragment fragmentFileFrom = domErrorReport.createDocumentFragment();
1395 if (!domInputFile.isNull()) {
1396 fragmentFileFrom.appendChild (domErrorReport.importNode (domInputFile.documentElement(), DEEP_COPY));
1398 QDomNodeList nodesFileTo = domErrorReport.elementsByTagName (DOCUMENT_SERIALIZE_FILE);
1399 if (nodesFileTo.count () > 0) {
1400 QDomNode nodeFileTo = nodesFileTo.at (0);
1401 nodeFileTo.appendChild (fragmentFileFrom);
1408 QDomNodeList nodesDocument = domErrorReport.elementsByTagName (DOCUMENT_SERIALIZE_DOCUMENT);
1409 for (
int i = 0 ; i < nodesDocument.count(); i++) {
1410 QDomNode nodeDocument = nodesDocument.at (i);
1411 QDomElement elemImage = nodeDocument.firstChildElement(DOCUMENT_SERIALIZE_IMAGE);
1412 if (!elemImage.isNull()) {
1415 if (elemImage.hasAttribute (DOCUMENT_SERIALIZE_IMAGE_WIDTH) &&
1416 elemImage.hasAttribute (DOCUMENT_SERIALIZE_IMAGE_HEIGHT)) {
1418 int width = elemImage.attribute(DOCUMENT_SERIALIZE_IMAGE_WIDTH).toInt();
1419 int height = elemImage.attribute(DOCUMENT_SERIALIZE_IMAGE_HEIGHT).toInt();
1421 QDomNode nodeReplacement;
1422 QDomElement elemReplacement = nodeReplacement.toElement();
1423 elemReplacement.setAttribute (DOCUMENT_SERIALIZE_IMAGE_WIDTH, width);
1424 elemReplacement.setAttribute (DOCUMENT_SERIALIZE_IMAGE_HEIGHT, height);
1427 nodeDocument.insertBefore (nodeReplacement,
1429 nodeDocument.removeChild(elemImage);
1435 return domErrorReport.toString();
1438 void MainWindow::saveStartingDocumentSnapshot()
1440 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::saveStartingDocumentSnapshot";
1442 QXmlStreamWriter writer (&m_startingDocumentSnapshot);
1443 writer.setAutoFormatting (
true);
1449 ENGAUGE_CHECK_PTR (m_scene);
1455 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::selectBackgroundOriginal";
1457 BackgroundImage previousBackground = static_cast<BackgroundImage> (m_cmbBackground->currentData().toInt());
1459 int index = m_cmbBackground->findData (backgroundImage);
1460 ENGAUGE_ASSERT (index >= 0);
1462 m_cmbBackground->setCurrentIndex(index);
1464 return previousBackground;
1469 return m_cmbCurve->currentText ();
1472 void MainWindow::setCurrentFile (
const QString &fileName)
1474 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::setCurrentFile";
1476 QString fileNameStripped;
1477 if (!fileName.isEmpty()) {
1481 QFileInfo fileInfo (fileName);
1482 fileNameStripped = fileInfo.completeBaseName();
1485 m_currentFile = fileNameStripped;
1486 m_currentFileWithPathAndFileExtension = fileName;
1488 updateWindowTitle ();
1491 void MainWindow::setCurrentPathFromFile (
const QString &fileName)
1493 QDir dir = QFileInfo (fileName).absoluteDir();
1495 if (dir.exists ()) {
1497 bool success = QDir::setCurrent (dir.absolutePath ());
1498 ENGAUGE_ASSERT (success);
1506 void MainWindow::setNonFillZoomFactor (ZoomFactor newZoomFactor)
1508 ENGAUGE_ASSERT (newZoomFactor != ZOOM_FILL);
1511 m_zoomMapToAction [newZoomFactor]->setChecked (
true);
1512 slotViewZoomFactor (newZoomFactor);
1515 void MainWindow::setPixmap (
const QString &curveSelected,
1516 const QPixmap &pixmap)
1518 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::setPixmap";
1525 m_backgroundStateContext->
setPixmap (m_isGnuplot,
1533 void MainWindow::settingsRead (
bool isReset)
1535 QSettings settings (SETTINGS_ENGAUGE, SETTINGS_DIGITIZER);
1542 settingsReadEnvironment (settings);
1543 settingsReadMainWindow (settings);
1546 void MainWindow::settingsReadEnvironment (QSettings &settings)
1548 settings.beginGroup (SETTINGS_GROUP_ENVIRONMENT);
1549 QDir::setCurrent (settings.value (SETTINGS_CURRENT_DIRECTORY,
1550 QDir::currentPath ()).toString ());
1551 settings.endGroup ();
1554 void MainWindow::settingsReadMainWindow (QSettings &settings)
1556 settings.beginGroup(SETTINGS_GROUP_MAIN_WINDOW);
1559 resize (settings.value (SETTINGS_SIZE,
1560 QSize (600, 600)).toSize ());
1561 move (settings.value (SETTINGS_POS,
1562 QPoint (200, 200)).toPoint ());
1565 #if !defined(OSX_DEBUG) && !defined(OSX_RELEASE) 1566 QSize helpSize = settings.value (SETTINGS_HELP_SIZE,
1567 QSize (900, 600)).toSize();
1568 m_helpWindow->resize (helpSize);
1569 if (settings.contains (SETTINGS_HELP_POS)) {
1570 QPoint helpPos = settings.value (SETTINGS_HELP_POS).toPoint();
1571 m_helpWindow->move (helpPos);
1576 m_actionHelpChecklistGuideWizard->setChecked (settings.value (SETTINGS_CHECKLIST_GUIDE_WIZARD,
1580 bool viewBackgroundToolBar = settings.value (SETTINGS_VIEW_BACKGROUND_TOOLBAR,
1582 m_actionViewBackground->setChecked (viewBackgroundToolBar);
1583 m_toolBackground->setVisible (viewBackgroundToolBar);
1584 BackgroundImage backgroundImage = static_cast<BackgroundImage> (settings.value (SETTINGS_BACKGROUND_IMAGE,
1585 BACKGROUND_IMAGE_FILTERED).toInt ());
1586 int indexBackground = m_cmbBackground->findData (QVariant (backgroundImage));
1587 m_cmbBackground->setCurrentIndex (indexBackground);
1590 bool viewDigitizeToolBar = settings.value (SETTINGS_VIEW_DIGITIZE_TOOLBAR,
1592 m_actionViewDigitize->setChecked (viewDigitizeToolBar);
1593 m_toolDigitize->setVisible (viewDigitizeToolBar);
1596 bool viewSettingsViewsToolBar = settings.value (SETTINGS_VIEW_SETTINGS_VIEWS_TOOLBAR,
1598 m_actionViewSettingsViews->setChecked (viewSettingsViewsToolBar);
1599 m_toolSettingsViews->setVisible (viewSettingsViewsToolBar);
1602 bool viewCoordSystemToolbar = settings.value (SETTINGS_VIEW_COORD_SYSTEM_TOOLBAR,
1604 m_actionViewCoordSystem->setChecked (viewCoordSystemToolbar);
1605 m_toolCoordSystem->setVisible (viewCoordSystemToolbar);
1608 bool viewToolTips = settings.value (SETTINGS_VIEW_TOOL_TIPS,
1610 m_actionViewToolTips->setChecked (viewToolTips);
1614 StatusBarMode statusBarMode = static_cast<StatusBarMode> (settings.value (SETTINGS_VIEW_STATUS_BAR,
1617 m_actionStatusNever->setChecked (statusBarMode == STATUS_BAR_MODE_NEVER);
1618 m_actionStatusTemporary->setChecked (statusBarMode == STATUS_BAR_MODE_TEMPORARY);
1619 m_actionStatusAlways->setChecked (statusBarMode == STATUS_BAR_MODE_ALWAYS);
1621 addDockWindow (m_dockChecklistGuide,
1623 SETTINGS_CHECKLIST_GUIDE_DOCK_AREA,
1624 SETTINGS_CHECKLIST_GUIDE_DOCK_GEOMETRY,
1625 Qt::RightDockWidgetArea);
1626 addDockWindow (m_dockFittingWindow,
1628 SETTINGS_FITTING_WINDOW_DOCK_AREA,
1629 SETTINGS_FITTING_WINDOW_DOCK_GEOMETRY,
1630 Qt::RightDockWidgetArea);
1631 addDockWindow (m_dockGeometryWindow,
1633 SETTINGS_GEOMETRY_WINDOW_DOCK_AREA,
1634 SETTINGS_GEOMETRY_WINDOW_DOCK_GEOMETRY,
1635 Qt::RightDockWidgetArea);
1640 QLocale localeDefault;
1641 QLocale::Language language = static_cast<QLocale::Language> (settings.value (SETTINGS_LOCALE_LANGUAGE,
1642 QVariant (localeDefault.language())).toInt());
1643 QLocale::Country country = static_cast<QLocale::Country> (settings.value (SETTINGS_LOCALE_COUNTRY,
1644 QVariant (localeDefault.country())).toInt());
1645 QLocale locale (language,
1647 slotViewZoom (static_cast<ZoomFactor> (settings.value (SETTINGS_ZOOM_FACTOR,
1648 QVariant (ZOOM_1_TO_1)).toInt()));
1650 m_modelMainWindow.
setZoomFactorInitial(static_cast<ZoomFactorInitial> (settings.value (SETTINGS_ZOOM_FACTOR_INITIAL,
1651 QVariant (DEFAULT_ZOOM_FACTOR_INITIAL)).toInt()));
1652 m_modelMainWindow.
setZoomControl (static_cast<ZoomControl> (settings.value (SETTINGS_ZOOM_CONTROL,
1653 QVariant (ZOOM_CONTROL_MENU_WHEEL_PLUSMINUS)).toInt()));
1654 m_modelMainWindow.
setMainTitleBarFormat (static_cast<MainTitleBarFormat> (settings.value (SETTINGS_MAIN_TITLE_BAR_FORMAT,
1655 QVariant (MAIN_TITLE_BAR_FORMAT_PATH)).toInt()));
1656 m_modelMainWindow.
setPdfResolution (settings.value (SETTINGS_IMPORT_PDF_RESOLUTION,
1657 QVariant (DEFAULT_IMPORT_PDF_RESOLUTION)).toInt ());
1658 m_modelMainWindow.
setImportCropping (static_cast<ImportCropping> (settings.value (SETTINGS_IMPORT_CROPPING,
1659 QVariant (DEFAULT_IMPORT_CROPPING)).toInt ()));
1661 QVariant (DEFAULT_MAXIMUM_GRID_LINES)).toInt ());
1663 QVariant (DEFAULT_HIGHLIGHT_OPACITY)).toDouble ());
1664 m_modelMainWindow.
setSmallDialogs (settings.value (SETTINGS_SMALL_DIALOGS,
1665 QVariant (DEFAULT_SMALL_DIALOGS)).toBool ());
1667 QVariant (DEFAULT_DRAG_DROP_EXPORT)).toBool ());
1669 QVariant (DEFAULT_SIGNIFICANT_DIGITS)).toInt ());
1671 QVariant (DEFAULT_IMAGE_REPLACE_RENAMES_DOCUMENT)).toBool ());
1674 updateSmallDialogs();
1676 settings.endGroup();
1679 void MainWindow::settingsWrite ()
1681 QSettings settings (SETTINGS_ENGAUGE, SETTINGS_DIGITIZER);
1683 settings.beginGroup (SETTINGS_GROUP_ENVIRONMENT);
1684 settings.setValue (SETTINGS_CURRENT_DIRECTORY, QDir::currentPath ());
1685 settings.endGroup ();
1687 settings.beginGroup (SETTINGS_GROUP_MAIN_WINDOW);
1688 settings.setValue (SETTINGS_SIZE, size ());
1689 settings.setValue (SETTINGS_POS, pos ());
1690 #if !defined(OSX_DEBUG) && !defined(OSX_RELEASE) 1691 settings.setValue (SETTINGS_HELP_SIZE, m_helpWindow->size());
1692 settings.setValue (SETTINGS_HELP_POS, m_helpWindow->pos ());
1694 if (m_dockChecklistGuide->isFloating()) {
1696 settings.setValue (SETTINGS_CHECKLIST_GUIDE_DOCK_AREA, Qt::NoDockWidgetArea);
1697 settings.setValue (SETTINGS_CHECKLIST_GUIDE_DOCK_GEOMETRY, m_dockChecklistGuide->saveGeometry ());
1701 settings.setValue (SETTINGS_CHECKLIST_GUIDE_DOCK_AREA, dockWidgetArea (m_dockChecklistGuide));
1704 if (m_dockFittingWindow->isFloating()) {
1706 settings.setValue (SETTINGS_FITTING_WINDOW_DOCK_AREA, Qt::NoDockWidgetArea);
1707 settings.setValue (SETTINGS_FITTING_WINDOW_DOCK_GEOMETRY, m_dockFittingWindow->saveGeometry());
1710 settings.setValue (SETTINGS_FITTING_WINDOW_DOCK_AREA, dockWidgetArea (m_dockFittingWindow));
1712 if (m_dockGeometryWindow->isFloating()) {
1714 settings.setValue (SETTINGS_GEOMETRY_WINDOW_DOCK_AREA, Qt::NoDockWidgetArea);
1715 settings.setValue (SETTINGS_GEOMETRY_WINDOW_DOCK_GEOMETRY, m_dockGeometryWindow->saveGeometry ());
1719 settings.setValue (SETTINGS_GEOMETRY_WINDOW_DOCK_AREA, dockWidgetArea (m_dockGeometryWindow));
1722 settings.setValue (SETTINGS_BACKGROUND_IMAGE, m_cmbBackground->currentData().toInt());
1723 settings.setValue (SETTINGS_CHECKLIST_GUIDE_WIZARD, m_actionHelpChecklistGuideWizard->isChecked ());
1724 settings.setValue (SETTINGS_DRAG_DROP_EXPORT, m_modelMainWindow.
dragDropExport ());
1725 settings.setValue (SETTINGS_HIGHLIGHT_OPACITY, m_modelMainWindow.
highlightOpacity());
1727 settings.setValue (SETTINGS_IMPORT_CROPPING, m_modelMainWindow.
importCropping());
1728 settings.setValue (SETTINGS_IMPORT_PDF_RESOLUTION, m_modelMainWindow.
pdfResolution ());
1729 settings.setValue (SETTINGS_LOCALE_LANGUAGE, m_modelMainWindow.
locale().language());
1730 settings.setValue (SETTINGS_LOCALE_COUNTRY, m_modelMainWindow.
locale().country());
1731 settings.setValue (SETTINGS_MAIN_TITLE_BAR_FORMAT, m_modelMainWindow.
mainTitleBarFormat());
1732 settings.setValue (SETTINGS_MAXIMUM_GRID_LINES, m_modelMainWindow.
maximumGridLines());
1733 settings.setValue (SETTINGS_SMALL_DIALOGS, m_modelMainWindow.
smallDialogs());
1734 settings.setValue (SETTINGS_VIEW_BACKGROUND_TOOLBAR, m_actionViewBackground->isChecked());
1735 settings.setValue (SETTINGS_VIEW_DIGITIZE_TOOLBAR, m_actionViewDigitize->isChecked ());
1736 settings.setValue (SETTINGS_VIEW_STATUS_BAR, m_statusBar->
statusBarMode ());
1737 settings.setValue (SETTINGS_VIEW_SETTINGS_VIEWS_TOOLBAR, m_actionViewSettingsViews->isChecked ());
1738 settings.setValue (SETTINGS_VIEW_COORD_SYSTEM_TOOLBAR, m_actionViewCoordSystem->isChecked ());
1739 settings.setValue (SETTINGS_VIEW_TOOL_TIPS, m_actionViewToolTips->isChecked ());
1740 settings.setValue (SETTINGS_ZOOM_CONTROL, m_modelMainWindow.
zoomControl());
1741 settings.setValue (SETTINGS_ZOOM_FACTOR, currentZoomFactor ());
1742 settings.setValue (SETTINGS_ZOOM_FACTOR_INITIAL, m_modelMainWindow.
zoomFactorInitial());
1743 settings.endGroup ();
1746 bool MainWindow::setupAfterLoadNewDocument (
const QString &fileName,
1747 const QString &temporaryMessage ,
1748 ImportType importType)
1750 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::setupAfterLoadNewDocument" 1751 <<
" file=" << fileName.toLatin1().data()
1752 <<
" message=" << temporaryMessage.toLatin1().data()
1753 <<
" importType=" << importType;
1758 const QString EMPTY_CURVE_NAME_TO_SKIP_BACKGROUND_PROCESSING;
1762 m_digitizeStateContext->
resetOnLoad (m_cmdMediator);
1767 EMPTY_CURVE_NAME_TO_SKIP_BACKGROUND_PROCESSING);
1769 m_cmdMediator->
pixmap ());
1773 if (importType == IMPORT_TYPE_ADVANCED) {
1775 applyZoomFactorAfterLoad();
1778 dlgImportAdvanced.exec();
1780 if (dlgImportAdvanced.result() == QDialog::Rejected) {
1784 int numberCoordSystem = signed (dlgImportAdvanced.numberCoordSystem());
1793 connect (m_actionEditUndo, SIGNAL (triggered ()), m_cmdMediator, SLOT (undo ()));
1794 connect (m_actionEditUndo, SIGNAL (triggered ()), m_cmdStackShadow, SLOT (slotUndo ()));
1795 connect (m_actionEditRedo, SIGNAL (triggered ()), m_cmdMediator, SLOT (redo ()));
1796 connect (m_actionEditRedo, SIGNAL (triggered ()), m_cmdStackShadow, SLOT (slotRedo ()));
1797 connect (m_cmdMediator, SIGNAL (canRedoChanged(
bool)),
this, SLOT (slotCanRedoChanged (
bool)));
1798 connect (m_cmdMediator, SIGNAL (canUndoChanged(
bool)),
this, SLOT (slotCanUndoChanged (
bool)));
1799 connect (m_cmdMediator, SIGNAL (redoTextChanged (
const QString &)),
this, SLOT (slotRedoTextChanged (
const QString &)));
1800 connect (m_cmdMediator, SIGNAL (undoTextChanged (
const QString &)),
this, SLOT (slotUndoTextChanged (
const QString &)));
1801 loadCurveListFromCmdMediator ();
1802 loadCoordSystemListFromCmdMediator ();
1805 m_isDocumentExported =
false;
1815 m_cmbCurve->currentText ());
1816 m_backgroundStateContext->
setBackgroundImage (static_cast<BackgroundImage> (m_cmbBackground->currentIndex ()));
1818 applyZoomFactorAfterLoad();
1820 setCurrentFile(fileName);
1824 saveStartingDocumentSnapshot();
1831 bool MainWindow::setupAfterLoadReplacingImage (
const QString &fileName,
1832 const QString &temporaryMessage ,
1833 ImportType importType)
1835 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::setupAfterLoadReplacingImage" 1836 <<
" file=" << fileName.toLatin1().data()
1837 <<
" message=" << temporaryMessage.toLatin1().data()
1838 <<
" importType=" << importType;
1843 m_cmdMediator->clear();
1846 m_cmdMediator->
pixmap ());
1848 m_isDocumentExported =
false;
1850 m_backgroundStateContext->
setBackgroundImage (static_cast<BackgroundImage> (m_cmbBackground->currentIndex ()));
1852 applyZoomFactorAfterLoad();
1856 setCurrentFile(fileName);
1862 saveStartingDocumentSnapshot();
1871 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::showEvent" 1872 <<
" files=" << m_loadStartupFiles.join (
",").toLatin1().data();
1874 QMainWindow::showEvent (event);
1876 if (m_loadStartupFiles.count() > 0) {
1878 m_timerLoadStartupFiles =
new QTimer;
1879 m_timerLoadStartupFiles->setSingleShot (
true);
1880 connect (m_timerLoadStartupFiles, SIGNAL (timeout ()),
this, SLOT (slotLoadStartupFiles ()));
1881 m_timerLoadStartupFiles->start (0);
1891 void MainWindow::slotBtnPrintAll ()
1893 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::slotBtnPrintAll";
1897 QPrinter printer (QPrinter::HighResolution);
1898 QPrintDialog dlg (&printer,
this);
1899 if (dlg.exec() == QDialog::Accepted) {
1900 QPainter painter (&printer);
1901 m_view->render (&painter);
1908 void MainWindow::slotBtnShowAllPressed ()
1910 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::slotBtnShowAllPressed";
1916 void MainWindow::slotBtnShowAllReleased ()
1918 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::slotBtnShowAllReleased";
1924 void MainWindow::slotCanRedoChanged (
bool canRedo)
1926 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::slotCanRedoChanged";
1928 m_actionEditRedo->setEnabled (canRedo || m_cmdStackShadow->
canRedo());
1931 void MainWindow::slotCanUndoChanged (
bool canUndo)
1933 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::slotCanUndoChanged";
1935 m_actionEditUndo->setEnabled (canUndo);
1938 void MainWindow::slotChecklistClosed()
1940 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotChecklistClosed";
1942 m_actionViewChecklistGuide->setChecked (
false);
1945 void MainWindow::slotCleanChanged(
bool clean)
1947 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotCleanChanged";
1949 setWindowModified (!clean);
1952 void MainWindow::slotCmbBackground(
int currentIndex)
1954 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotCmbBackground";
1956 switch (currentIndex) {
1957 case BACKGROUND_IMAGE_NONE:
1958 if (!m_actionViewBackgroundNone->isChecked()) {
1959 m_actionViewBackgroundNone->toggle();
1963 case BACKGROUND_IMAGE_ORIGINAL:
1964 if (!m_actionViewBackgroundOriginal->isChecked ()) {
1965 m_actionViewBackgroundOriginal->toggle();
1969 case BACKGROUND_IMAGE_FILTERED:
1970 if (!m_actionViewBackgroundFiltered->isChecked ()) {
1971 m_actionViewBackgroundFiltered->toggle();
1976 m_backgroundStateContext->
setBackgroundImage (static_cast<BackgroundImage> (currentIndex));
1979 void MainWindow::slotCmbCoordSystem(
int index)
1981 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotCmbCoordSystem";
1985 static_cast<CoordSystemIndex> (index));
1987 m_cmdMediator->push (cmd);
1990 void MainWindow::slotCmbCurve(
int )
1992 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotCmbCurve";
1998 m_cmbCurve->currentText ());
2002 updateViewedCurves();
2004 updateFittingWindow();
2005 updateGeometryWindow();
2008 void MainWindow::slotContextMenuEventAxis (QString pointIdentifier)
2010 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotContextMenuEventAxis point=" << pointIdentifier.toLatin1 ().data ();
2016 void MainWindow::slotContextMenuEventGraph (QStringList pointIdentifiers)
2018 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotContextMenuEventGraph point=" << pointIdentifiers.join(
",").toLatin1 ().data ();
2024 void MainWindow::slotDigitizeAxis ()
2026 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotDigitizeAxis";
2029 DIGITIZE_STATE_AXIS);
2030 m_cmbCurve->setEnabled (
false);
2036 void MainWindow::slotDigitizeColorPicker ()
2038 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotDigitizeColorPicker";
2041 DIGITIZE_STATE_COLOR_PICKER);
2042 m_cmbCurve->setEnabled (
true);
2048 void MainWindow::slotDigitizeCurve ()
2050 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotDigitizeCurve";
2053 DIGITIZE_STATE_CURVE);
2054 m_cmbCurve->setEnabled (
true);
2060 void MainWindow::slotDigitizePointMatch ()
2062 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotDigitizePointMatch";
2065 DIGITIZE_STATE_POINT_MATCH);
2066 m_cmbCurve->setEnabled (
true);
2072 void MainWindow::slotDigitizeScale ()
2074 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotDigitizeScale";
2077 DIGITIZE_STATE_SCALE);
2078 m_cmbCurve->setEnabled (
false);
2084 void MainWindow::slotDigitizeSegment ()
2086 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotDigitizeSegment";
2089 DIGITIZE_STATE_SEGMENT);
2090 m_cmbCurve->setEnabled (
true);
2096 void MainWindow::slotDigitizeSelect ()
2098 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotDigitizeSelect";
2101 DIGITIZE_STATE_SELECT);
2102 m_cmbCurve->setEnabled (
false);
2108 void MainWindow::slotEditCopy ()
2110 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotEditCopy";
2113 bool tableFittingIsActive, tableFittingIsCopyable;
2114 bool tableGeometryIsActive, tableGeometryIsCopyable;
2115 m_dockFittingWindow->
getTableStatus (tableFittingIsActive, tableFittingIsCopyable);
2116 m_dockGeometryWindow->
getTableStatus (tableGeometryIsActive, tableGeometryIsCopyable);
2118 if (tableFittingIsActive) {
2121 m_dockFittingWindow->
doCopy ();
2123 }
else if (tableGeometryIsActive) {
2126 m_dockGeometryWindow->
doCopy ();
2132 const QList<QGraphicsItem*> &items = m_scene->selectedItems();
2143 void MainWindow::slotEditCut ()
2145 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotEditCut";
2148 bool tableFittingIsActive, tableFittingIsCopyable;
2149 bool tableGeometryIsActive, tableGeometryIsCopyable;
2150 m_dockFittingWindow->
getTableStatus (tableFittingIsActive, tableFittingIsCopyable);
2151 m_dockGeometryWindow->
getTableStatus (tableGeometryIsActive, tableGeometryIsCopyable);
2153 if (tableFittingIsActive || tableGeometryIsActive) {
2161 const QList<QGraphicsItem*> &items = m_scene->selectedItems();
2172 void MainWindow::slotEditDelete ()
2174 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotEditDelete";
2177 bool tableFittingIsActive, tableFittingIsCopyable;
2178 bool tableGeometryIsActive, tableGeometryIsCopyable;
2179 m_dockFittingWindow->
getTableStatus (tableFittingIsActive, tableFittingIsCopyable);
2180 m_dockGeometryWindow->
getTableStatus (tableGeometryIsActive, tableGeometryIsCopyable);
2182 if (tableFittingIsActive || tableGeometryIsActive) {
2195 const QList<QGraphicsItem*> &items = m_scene->selectedItems();
2196 QStringList pointIdentifiers = scaleBarAxisPoints.
unite (m_cmdMediator,
2207 void MainWindow::slotEditMenu ()
2209 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotEditMenu";
2211 m_actionEditPasteAsNew->setEnabled (!QApplication::clipboard()->image().isNull());
2212 m_actionEditPasteAsNewAdvanced->setEnabled (!QApplication::clipboard()->image().isNull());
2215 void MainWindow::slotEditPaste ()
2217 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotEditPaste";
2219 QList<QPoint> points;
2220 QList<double> ordinals;
2229 m_cmbCurve->currentText (),
2236 void MainWindow::slotEditPasteAsNew ()
2238 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotEditPasteAsNew";
2240 filePaste (IMPORT_TYPE_SIMPLE);
2243 void MainWindow::slotEditPasteAsNewAdvanced ()
2245 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotEditPasteAsNewAdvanced";
2247 filePaste (IMPORT_TYPE_ADVANCED);
2250 void MainWindow::slotFileClose()
2252 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileClose";
2259 TRANSFORMATION_STATE_UNDEFINED,
2267 DIGITIZE_STATE_EMPTY);
2270 if (m_fittingCurve !=
nullptr) {
2271 m_scene->removeItem (m_fittingCurve);
2272 m_fittingCurve =
nullptr;
2279 m_backgroundStateContext->
close ();
2282 m_scene->setSceneRect (QRectF (0, 0, 1, 1));
2285 m_dockFittingWindow->
clear ();
2288 m_dockGeometryWindow->
clear ();
2291 delete m_cmdMediator;
2294 m_cmdMediator =
nullptr;
2297 setWindowTitle (engaugeWindowTitle ());
2299 m_gridLines.
clear();
2304 void MainWindow::slotFileExport ()
2306 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileExport";
2314 if (m_isExportOnly) {
2315 fileName = fileNameForExportOnly ();
2318 QString filter = QString (
"%1;;%2;;All files (*.*)")
2323 QString defaultFileName = QString (
"%1/%2.%3")
2325 .arg (m_currentFile)
2328 QString filterCsv = exportStrategy.
filterCsv ();
2330 fileName = dlg.getSaveFileName (
this,
2337 if (!fileName.isEmpty ()) {
2340 fileExport(fileName,
2349 void MainWindow::slotFileImport ()
2351 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileImport";
2353 fileImportWithPrompts (IMPORT_TYPE_SIMPLE);
2356 void MainWindow::slotFileImportAdvanced ()
2358 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileImportAdvanced";
2360 fileImportWithPrompts (IMPORT_TYPE_ADVANCED);
2363 void MainWindow::slotFileImportDraggedImage(QImage image)
2365 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileImportDraggedImage";
2370 IMPORT_TYPE_SIMPLE);
2373 void MainWindow::slotFileImportDraggedImageUrl(QUrl url)
2375 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileImportDraggedImageUrl url=" << url.toString ().toLatin1 ().data ();
2382 void MainWindow::slotFileImportImage(QString fileName, QImage image)
2384 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileImportImage fileName=" << fileName.toLatin1 ().data ();
2387 loadImage (fileName,
2389 IMPORT_TYPE_SIMPLE);
2392 void MainWindow::slotFileImportImageReplace ()
2394 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileImportImageReplace";
2396 fileImportWithPrompts (IMPORT_TYPE_IMAGE_REPLACE);
2399 void MainWindow::slotFileOpen()
2401 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileOpen";
2407 QString filter = QString (
"%1 (*.%2);; All Files (*.*)")
2408 .arg (ENGAUGE_FILENAME_DESCRIPTION)
2409 .arg (ENGAUGE_FILENAME_EXTENSION);
2412 QString fileName = QFileDialog::getOpenFileName (
this,
2413 tr(
"Open Document"),
2416 if (!fileName.isEmpty ()) {
2419 loadDocumentFile (fileName);
2425 void MainWindow::slotFileOpenDraggedDigFile (QString fileName)
2427 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileOpenDraggedDigFile";
2429 loadDocumentFile (fileName);
2432 void MainWindow::slotFilePrint()
2434 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFilePrint";
2436 QPrinter printer (QPrinter::HighResolution);
2437 QPrintDialog dlg (&printer,
this);
2438 if (dlg.exec() == QDialog::Accepted) {
2439 QPainter painter (&printer);
2440 m_view->render (&painter);
2445 bool MainWindow::slotFileSave()
2447 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileSave";
2449 if (m_engaugeFile.isEmpty()) {
2450 return slotFileSaveAs();
2452 return saveDocumentFile (m_engaugeFile);
2456 bool MainWindow::slotFileSaveAs()
2458 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFileSaveAs";
2461 QString filenameDefault = m_currentFile;
2462 if (!m_currentFile.endsWith (ENGAUGE_FILENAME_EXTENSION)) {
2463 filenameDefault = QString (
"%1.%2")
2464 .arg (m_currentFile)
2465 .arg (ENGAUGE_FILENAME_EXTENSION);
2468 if (!m_engaugeFile.isEmpty()) {
2469 filenameDefault = m_engaugeFile;
2472 QString filterDigitizer = QString (
"%1 (*.%2)")
2473 .arg (ENGAUGE_FILENAME_DESCRIPTION)
2474 .arg (ENGAUGE_FILENAME_EXTENSION);
2475 QString filterAll (
"All files (*. *)");
2477 QStringList filters;
2478 filters << filterDigitizer;
2479 filters << filterAll;
2483 QFileDialog dlg(
this);
2484 dlg.setFileMode (QFileDialog::AnyFile);
2485 dlg.selectNameFilter (filterDigitizer);
2486 dlg.setNameFilters (filters);
2487 #if !defined(OSX_DEBUG) && !defined(OSX_RELEASE) 2489 dlg.setWindowModality(Qt::WindowModal);
2491 dlg.setAcceptMode(QFileDialog::AcceptSave);
2492 dlg.selectFile(filenameDefault);
2496 QStringList files = dlg.selectedFiles();
2498 return saveDocumentFile(files.at(0));
2504 void MainWindow::slotFittingWindowClosed()
2506 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFittingWindowClosed";
2508 m_actionViewFittingWindow->setChecked (
false);
2511 void MainWindow::slotFittingWindowCurveFit(FittingCurveCoefficients fittingCurveCoef,
2518 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotFittingWindowCurveFit" 2519 <<
" order=" << fittingCurveCoef.size() - 1;
2521 if (m_fittingCurve !=
nullptr) {
2522 m_scene->removeItem (m_fittingCurve);
2523 delete m_fittingCurve;
2532 m_fittingCurve->setVisible (m_actionViewFittingWindow->isChecked ());
2533 m_scene->addItem (m_fittingCurve);
2536 void MainWindow::slotGeometryWindowClosed()
2538 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotGeometryWindowClosed";
2540 m_actionViewGeometryWindow->setChecked (
false);
2543 void MainWindow::slotHelpAbout()
2545 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotHelpAbout";
2551 void MainWindow::slotHelpTutorial()
2553 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotHelpTutorial";
2555 m_tutorialDlg->show ();
2556 m_tutorialDlg->exec ();
2559 void MainWindow::slotKeyPress (Qt::Key key,
2560 bool atLeastOneSelectedItem)
2562 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotKeyPress" 2563 <<
" key=" << QKeySequence (key).toString().toLatin1 ().data ()
2564 <<
" atLeastOneSelectedItem=" << (atLeastOneSelectedItem ?
"true" :
"false");
2568 atLeastOneSelectedItem);
2571 void MainWindow::slotLoadStartupFiles ()
2573 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotLoadStartupFiles";
2575 ENGAUGE_ASSERT (m_loadStartupFiles.count() > 0);
2577 QString fileName = m_loadStartupFiles.front();
2578 m_loadStartupFiles.pop_front();
2584 loadDocumentFile (fileName);
2588 fileImport (fileName,
2589 IMPORT_TYPE_SIMPLE);
2593 if (m_loadStartupFiles.count() > 0) {
2597 QProcess::startDetached (QCoreApplication::applicationFilePath(),
2598 m_commandLineWithoutLoadStartupFiles + m_loadStartupFiles);
2602 void MainWindow::slotMouseMove (QPointF pos)
2607 if (m_cmdMediator !=
nullptr) {
2610 QString coordsScreen, coordsGraph, resolutionGraph;
2630 void MainWindow::slotMousePress (QPointF pos)
2632 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotMousePress";
2640 void MainWindow::slotMouseRelease (QPointF pos)
2642 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotMouseRelease";
2644 if (pos.x() < 0 || pos.y() < 0) {
2658 void MainWindow::slotRecentFileAction ()
2660 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotRecentFileAction";
2662 QAction *action = qobject_cast<QAction*>(sender ());
2665 QString fileName = action->data().toString();
2666 loadDocumentFile (fileName);
2670 void MainWindow::slotRecentFileClear ()
2672 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotRecentFileClear";
2674 QStringList emptyList;
2676 QSettings settings (SETTINGS_ENGAUGE, SETTINGS_DIGITIZER);
2677 settings.setValue (SETTINGS_RECENT_FILE_LIST,
2680 updateRecentFileList();
2683 void MainWindow::slotRedoTextChanged (
const QString &text)
2685 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::slotRedoTextChanged";
2687 QString completeText (
"Redo");
2688 if (!text.isEmpty ()) {
2689 completeText += QString (
" \"%1\"").arg (text);
2691 m_actionEditRedo->setText (completeText);
2694 void MainWindow::slotSettingsAxesChecker ()
2696 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsAxesChecker";
2698 m_dlgSettingsAxesChecker->
load (*m_cmdMediator);
2699 m_dlgSettingsAxesChecker->show ();
2702 void MainWindow::slotSettingsColorFilter ()
2704 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsColorFilter";
2706 m_dlgSettingsColorFilter->
load (*m_cmdMediator);
2707 m_dlgSettingsColorFilter->show ();
2710 void MainWindow::slotSettingsCoords ()
2712 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsCoords";
2714 m_dlgSettingsCoords->
load (*m_cmdMediator);
2715 m_dlgSettingsCoords->show ();
2718 void MainWindow::slotSettingsCurveList ()
2720 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsCurveList";
2722 m_dlgSettingsCurveList->
load (*m_cmdMediator);
2723 m_dlgSettingsCurveList->show ();
2726 void MainWindow::slotSettingsCurveProperties ()
2728 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsCurveProperties";
2730 m_dlgSettingsCurveProperties->
load (*m_cmdMediator);
2732 m_dlgSettingsCurveProperties->show ();
2735 void MainWindow::slotSettingsDigitizeCurve ()
2737 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsDigitizeCurve";
2739 m_dlgSettingsDigitizeCurve->
load (*m_cmdMediator);
2740 m_dlgSettingsDigitizeCurve->show ();
2743 void MainWindow::slotSettingsExportFormat ()
2745 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsExportFormat";
2748 m_dlgSettingsExportFormat->
load (*m_cmdMediator);
2749 m_dlgSettingsExportFormat->show ();
2756 void MainWindow::slotSettingsGeneral ()
2758 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsGeneral";
2760 m_dlgSettingsGeneral->
load (*m_cmdMediator);
2761 m_dlgSettingsGeneral->show ();
2764 void MainWindow::slotSettingsGridDisplay()
2766 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsGridDisplay";
2768 m_dlgSettingsGridDisplay->
load (*m_cmdMediator);
2769 m_dlgSettingsGridDisplay->show ();
2772 void MainWindow::slotSettingsGridRemoval ()
2774 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsGridRemoval";
2776 m_dlgSettingsGridRemoval->
load (*m_cmdMediator);
2777 m_dlgSettingsGridRemoval->show ();
2780 void MainWindow::slotSettingsPointMatch ()
2782 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsPointMatch";
2784 m_dlgSettingsPointMatch->
load (*m_cmdMediator);
2785 m_dlgSettingsPointMatch->show ();
2788 void MainWindow::slotSettingsSegments ()
2790 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsSegments";
2792 m_dlgSettingsSegments->
load (*m_cmdMediator);
2793 m_dlgSettingsSegments->show ();
2796 void MainWindow::slotTableStatusChange ()
2798 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotTableStatusChange";
2805 void MainWindow::slotSettingsMainWindow ()
2807 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotSettingsMainWindow";
2811 m_dlgSettingsMainWindow->show ();
2814 void MainWindow::slotTimeoutRegressionErrorReport ()
2816 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotTimeoutRegressionErrorReport" 2817 <<
" cmdStackIndex=" << m_cmdMediator->index()
2818 <<
" cmdStackCount=" << m_cmdMediator->count();
2820 if (m_cmdStackShadow->
canRedo()) {
2823 QDir::setCurrent (m_startupDirectory);
2828 QDir::setCurrent (m_startupDirectory);
2832 #if !defined(OSX_DEBUG) && !defined(OSX_RELEASE) 2833 exportAllCoordinateSystemsAfterRegressionTests ();
2837 m_cmdMediator->setClean();
2843 void MainWindow::slotTimeoutRegressionFileCmdScript ()
2845 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotTimeoutRegressionFileCmdScript";
2847 if (m_fileCmdScript->
canRedo()) {
2850 QDir::setCurrent (m_startupDirectory);
2852 m_fileCmdScript->
redo(*
this);
2855 QDir::setCurrent (m_startupDirectory);
2860 if (m_cmdMediator !=
nullptr) {
2862 #if !defined(OSX_DEBUG) && !defined(OSX_RELEASE) 2863 exportAllCoordinateSystemsAfterRegressionTests ();
2867 m_cmdMediator->setClean();
2877 void MainWindow::slotUndoTextChanged (
const QString &text)
2879 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::slotUndoTextChanged";
2881 QString completeText (
"Undo");
2882 if (!text.isEmpty ()) {
2883 completeText += QString (
" \"%1\"").arg (text);
2885 m_actionEditUndo->setText (completeText);
2888 void MainWindow::slotViewGridLines ()
2890 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::slotViewGridLines";
2895 void MainWindow::slotViewGroupBackground(QAction *action)
2897 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewGroupBackground";
2900 BackgroundImage backgroundImage;
2901 int indexBackground;
2902 if (action == m_actionViewBackgroundNone) {
2903 indexBackground = m_cmbBackground->findData (QVariant (BACKGROUND_IMAGE_NONE));
2904 backgroundImage = BACKGROUND_IMAGE_NONE;
2905 }
else if (action == m_actionViewBackgroundOriginal) {
2906 indexBackground = m_cmbBackground->findData (QVariant (BACKGROUND_IMAGE_ORIGINAL));
2907 backgroundImage = BACKGROUND_IMAGE_ORIGINAL;
2908 }
else if (action == m_actionViewBackgroundFiltered) {
2909 indexBackground = m_cmbBackground->findData (QVariant (BACKGROUND_IMAGE_FILTERED));
2910 backgroundImage = BACKGROUND_IMAGE_FILTERED;
2912 ENGAUGE_ASSERT (
false);
2915 indexBackground = m_cmbBackground->findData (QVariant (BACKGROUND_IMAGE_ORIGINAL));
2916 backgroundImage = BACKGROUND_IMAGE_ORIGINAL;
2919 m_cmbBackground->setCurrentIndex (indexBackground);
2923 void MainWindow::slotViewGroupCurves(QAction * )
2925 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewGroupCurves";
2927 updateViewedCurves ();
2930 void MainWindow::slotViewGroupStatus(QAction *action)
2932 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewGroupStatus";
2934 ENGAUGE_CHECK_PTR (m_statusBar);
2936 if (action == m_actionStatusNever) {
2938 }
else if (action == m_actionStatusTemporary) {
2945 void MainWindow::slotViewToolBarBackground ()
2947 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewToolBarBackground";
2949 if (m_actionViewBackground->isChecked ()) {
2950 m_toolBackground->show();
2952 m_toolBackground->hide();
2956 void MainWindow::slotViewToolBarChecklistGuide ()
2958 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewToolBarChecklistGuide";
2960 if (m_actionViewChecklistGuide->isChecked ()) {
2961 m_dockChecklistGuide->show();
2963 m_dockChecklistGuide->hide();
2967 void MainWindow::slotViewToolBarCoordSystem ()
2969 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewToolBarCoordSystem";
2971 if (m_actionViewCoordSystem->isChecked ()) {
2972 m_toolCoordSystem->show();
2974 m_toolCoordSystem->hide();
2978 void MainWindow::slotViewToolBarDigitize ()
2980 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewToolBarDigitize";
2982 if (m_actionViewDigitize->isChecked ()) {
2983 m_toolDigitize->show();
2985 m_toolDigitize->hide();
2989 void MainWindow::slotViewToolBarFittingWindow()
2991 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewToolBarFittingWindow";
2993 if (m_actionViewFittingWindow->isChecked()) {
2994 m_dockFittingWindow->show ();
2995 if (m_fittingCurve !=
nullptr) {
2996 m_fittingCurve->setVisible (
true);
2999 m_dockFittingWindow->hide ();
3000 if (m_fittingCurve !=
nullptr) {
3001 m_fittingCurve->setVisible (
false);
3006 void MainWindow::slotViewToolBarGeometryWindow ()
3008 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewToolBarGeometryWindow";
3010 if (m_actionViewGeometryWindow->isChecked ()) {
3011 m_dockGeometryWindow->show();
3013 m_dockGeometryWindow->hide();
3017 void MainWindow::slotViewToolBarSettingsViews ()
3019 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewToolBarSettingsViews";
3021 if (m_actionViewSettingsViews->isChecked ()) {
3022 m_toolSettingsViews->show();
3024 m_toolSettingsViews->hide();
3028 void MainWindow::slotViewToolTips ()
3030 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewToolTips";
3035 void MainWindow::slotViewZoom (
int zoom)
3037 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewZoom";
3040 ZoomFactor zoomFactor = static_cast<ZoomFactor> (zoom);
3041 m_zoomMapToAction [zoomFactor]->setChecked (
true);
3042 slotViewZoomFactor (static_cast<ZoomFactor> (zoom));
3045 void MainWindow::slotViewZoomFactor (ZoomFactor zoomFactor)
3047 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewZoomFactor";
3049 if (zoomFactor == ZOOM_FILL) {
3050 m_backgroundStateContext->
fitInView (*m_view);
3054 double factor = zoomTransition.
mapToFactor (zoomFactor);
3056 QTransform transform;
3057 transform.scale (factor, factor);
3058 m_view->setTransform (transform);
3064 void MainWindow::slotViewZoomFactorInt (
int zoom)
3066 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewZoomFactorInt";
3068 slotViewZoomFactor (static_cast<ZoomFactor> (zoom));
3071 void MainWindow::slotViewZoomIn ()
3073 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewZoomIn";
3076 ZoomFactor zoomFactorNew = zoomTransition.
zoomIn (currentZoomFactor (),
3077 m_view->transform ().m11 (),
3078 m_view->transform ().m22 (),
3079 m_actionZoomFill->isChecked ());
3080 setNonFillZoomFactor (zoomFactorNew);
3084 void MainWindow::slotViewZoomInFromWheelEvent ()
3086 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewZoomInFromWheelEvent";
3088 if ((m_modelMainWindow.
zoomControl() == ZOOM_CONTROL_MENU_WHEEL) ||
3089 (m_modelMainWindow.
zoomControl() == ZOOM_CONTROL_MENU_WHEEL_PLUSMINUS)) {
3092 m_view->setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
3097 m_view->setTransformationAnchor(QGraphicsView::NoAnchor);
3101 void MainWindow::slotViewZoomOut ()
3103 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewZoomOut";
3107 ZoomFactor zoomFactorNew = zoomTransition.
zoomOut (currentZoomFactor (),
3108 m_view->transform ().m11 (),
3109 m_view->transform ().m22 (),
3110 m_actionZoomFill->isChecked ());
3111 setNonFillZoomFactor (zoomFactorNew);
3114 void MainWindow::slotViewZoomOutFromWheelEvent ()
3116 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::slotViewZoomOutFromWheelEvent";
3118 if ((m_modelMainWindow.
zoomControl() == ZOOM_CONTROL_MENU_WHEEL) ||
3119 (m_modelMainWindow.
zoomControl() == ZOOM_CONTROL_MENU_WHEEL_PLUSMINUS)) {
3122 m_view->setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
3127 m_view->setTransformationAnchor(QGraphicsView::NoAnchor);
3131 void MainWindow::startRegressionDropTest (
const QStringList &loadStartupFiles)
3133 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::startRegressionTestErrorReport";
3140 connect (
this, SIGNAL (
signalDropRegression (QString)), m_view, SLOT (slotDropRegression (QString)));
3142 for (
int counter = 0; counter < loadStartupFiles.size (); counter++) {
3143 QString filenameDrop = loadStartupFiles.at (counter);
3148 QSize siz = m_view->size();
3150 QString filenameCsv;
3151 if (filenameDrop.startsWith (
"http")) {
3155 filenameCsv =
"../test/drag_and_drop_http.csv_actual_1";
3160 filenameCsv = QString (
"%1_%2")
3161 .arg (exportRegressionFilenameFromInputFilename (filenameDrop))
3165 QFile file (filenameCsv);
3166 file.open (QIODevice::WriteOnly);
3167 QTextStream str (&file);
3168 str << siz.width() <<
"x" << siz.height() <<
"\n";
3175 void MainWindow::startRegressionTestErrorReport(
const QString ®ressionInputFile)
3177 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::startRegressionTestErrorReport";
3186 m_regressionFile = exportRegressionFilenameFromInputFilename (regressionInputFile);
3188 m_timerRegressionErrorReport =
new QTimer();
3189 m_timerRegressionErrorReport->setSingleShot(
false);
3190 connect (m_timerRegressionErrorReport, SIGNAL (timeout()),
this, SLOT (slotTimeoutRegressionErrorReport()));
3192 m_timerRegressionErrorReport->start(REGRESSION_INTERVAL);
3195 void MainWindow::startRegressionTestFileCmdScript()
3197 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::startRegressionTestFileCmdScript";
3199 m_timerRegressionFileCmdScript =
new QTimer();
3200 m_timerRegressionFileCmdScript->setSingleShot(
false);
3201 connect (m_timerRegressionFileCmdScript, SIGNAL (timeout()),
this, SLOT (slotTimeoutRegressionFileCmdScript()));
3203 m_timerRegressionFileCmdScript->start(REGRESSION_INTERVAL);
3208 return m_transformation;
3218 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateAfterCommand";
3220 ENGAUGE_CHECK_PTR (m_cmdMediator);
3224 updateAfterCommandStatusBarCoords ();
3226 updateHighlightOpacity ();
3232 updateChecklistGuide ();
3233 updateFittingWindow ();
3234 updateGeometryWindow();
3239 writeCheckpointToLogFile ();
3241 docScrub.
check (*
this,
3246 m_view->setFocus ();
3249 void MainWindow::updateAfterCommandStatusBarCoords ()
3251 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateAfterCommandStatusBarCoords";
3256 const QPoint HACK_SO_GRAPH_COORDINATE_MATCHES_INPUT (1, 1);
3260 updateTransformationAndItsDependencies();
3263 if (!m_transformationBefore.transformIsDefined() && m_transformation.
transformIsDefined()) {
3267 TRANSFORMATION_STATE_DEFINED,
3272 }
else if (m_transformationBefore.transformIsDefined() && !m_transformation.
transformIsDefined()) {
3276 TRANSFORMATION_STATE_UNDEFINED,
3281 }
else if (m_transformation.
transformIsDefined() && (m_transformationBefore != m_transformation)) {
3290 QPoint posLocal = m_view->mapFromGlobal (QCursor::pos ()) - HACK_SO_GRAPH_COORDINATE_MATCHES_INPUT;
3291 QPointF posScreen = m_view->mapToScene (posLocal);
3293 slotMouseMove (posScreen);
3298 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateAfterMouseRelease";
3303 void MainWindow::updateChecklistGuide ()
3305 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateChecklistGuide";
3307 m_dockChecklistGuide->
update (*m_cmdMediator,
3308 m_isDocumentExported);
3311 void MainWindow::updateControls ()
3313 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateControls" 3314 <<
" selectedItems=" << m_scene->selectedItems().count();
3316 m_cmbBackground->setEnabled (!m_currentFile.isEmpty ());
3318 m_actionImportImageReplace->setEnabled (m_cmdMediator !=
nullptr);
3319 #if !defined(OSX_DEBUG) && !defined(OSX_RELEASE) 3320 m_menuFileOpenRecent->setEnabled ((m_actionRecentFiles.count () > 0) &&
3321 (m_actionRecentFiles.at(0)->isVisible ()));
3323 m_actionClose->setEnabled (!m_currentFile.isEmpty ());
3324 m_actionSave->setEnabled (!m_currentFile.isEmpty ());
3325 m_actionSaveAs->setEnabled (!m_currentFile.isEmpty ());
3326 m_actionExport->setEnabled (!m_currentFile.isEmpty ());
3327 m_actionPrint->setEnabled (!m_currentFile.isEmpty ());
3329 if (m_cmdMediator ==
nullptr) {
3330 m_actionEditUndo->setEnabled (
false);
3331 m_actionEditRedo->setEnabled (
false);
3333 m_actionEditUndo->setEnabled (m_cmdMediator->canUndo ());
3334 m_actionEditRedo->setEnabled (m_cmdMediator->canRedo () || m_cmdStackShadow->
canRedo ());
3336 bool tableFittingIsActive, tableFittingIsCopyable;
3337 bool tableGeometryIsActive, tableGeometryIsCopyable;
3338 m_dockFittingWindow->
getTableStatus (tableFittingIsActive, tableFittingIsCopyable);
3339 m_dockGeometryWindow->
getTableStatus (tableGeometryIsActive, tableGeometryIsCopyable);
3340 m_actionEditCut->setEnabled (!tableFittingIsActive &&
3341 !tableGeometryIsActive &&
3342 m_scene->selectedItems().count () > 0);
3343 m_actionEditCopy->setEnabled ((!tableFittingIsActive && !tableGeometryIsActive && m_scene->selectedItems().count () > 0) ||
3344 (tableFittingIsActive && tableFittingIsCopyable) ||
3345 (tableGeometryIsActive && tableGeometryIsCopyable));
3346 m_actionEditPaste->setEnabled (m_digitizeStateContext->
canPaste (m_transformation,
3348 m_actionEditDelete->setEnabled (!tableFittingIsActive &&
3349 !tableGeometryIsActive &&
3350 m_scene->selectedItems().count () > 0);
3353 m_actionDigitizeAxis->setEnabled (modeGraph ());
3354 m_actionDigitizeScale->setEnabled (
modeMap ());
3355 m_actionDigitizeCurve ->setEnabled (!m_currentFile.isEmpty ());
3356 m_actionDigitizePointMatch->setEnabled (!m_currentFile.isEmpty ());
3357 m_actionDigitizeColorPicker->setEnabled (!m_currentFile.isEmpty ());
3358 m_actionDigitizeSegment->setEnabled (!m_currentFile.isEmpty ());
3359 m_actionDigitizeSelect->setEnabled (!m_currentFile.isEmpty ());
3361 m_actionViewGridLines->setEnabled (
true);
3363 m_actionViewGridLines->setEnabled (
false);
3364 m_actionViewGridLines->setChecked (
false);
3366 m_actionViewBackground->setEnabled (!m_currentFile.isEmpty());
3367 m_actionViewChecklistGuide->setEnabled (!m_dockChecklistGuide->
browserIsEmpty());
3368 m_actionViewDigitize->setEnabled (!m_currentFile.isEmpty ());
3369 m_actionViewSettingsViews->setEnabled (!m_currentFile.isEmpty ());
3371 m_actionSettingsCoords->setEnabled (!m_currentFile.isEmpty ());
3372 m_actionSettingsCurveList->setEnabled (!m_currentFile.isEmpty ());
3373 m_actionSettingsCurveProperties->setEnabled (!m_currentFile.isEmpty ());
3374 m_actionSettingsDigitizeCurve->setEnabled (!m_currentFile.isEmpty ());
3375 m_actionSettingsExport->setEnabled (!m_currentFile.isEmpty ());
3376 m_actionSettingsColorFilter->setEnabled (!m_currentFile.isEmpty ());
3377 m_actionSettingsAxesChecker->setEnabled (!m_currentFile.isEmpty ());
3378 m_actionSettingsGridDisplay->setEnabled (!m_currentFile.isEmpty () && m_transformation.
transformIsDefined());
3379 m_actionSettingsGridRemoval->setEnabled (!m_currentFile.isEmpty ());
3380 m_actionSettingsPointMatch->setEnabled (!m_currentFile.isEmpty ());
3381 m_actionSettingsSegments->setEnabled (!m_currentFile.isEmpty ());
3382 m_actionSettingsGeneral->setEnabled (!m_currentFile.isEmpty ());
3384 m_groupBackground->setEnabled (!m_currentFile.isEmpty ());
3385 m_groupCurves->setEnabled (!m_currentFile.isEmpty ());
3386 m_groupZoom->setEnabled (!m_currentFile.isEmpty ());
3388 m_actionZoomIn->setEnabled (!m_currentFile.isEmpty ());
3389 m_actionZoomOut->setEnabled (!m_currentFile.isEmpty ());
3394 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateCoordSystem";
3399 loadCurveListFromCmdMediator ();
3401 updateTransformationAndItsDependencies();
3413 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateDigitizeStateIfSoftwareTriggered";
3415 switch (digitizeState) {
3416 case DIGITIZE_STATE_AXIS:
3417 m_actionDigitizeAxis->setChecked(
true);
3421 case DIGITIZE_STATE_COLOR_PICKER:
3422 m_actionDigitizeColorPicker->setChecked(
true);
3423 slotDigitizeColorPicker();
3426 case DIGITIZE_STATE_CURVE:
3427 m_actionDigitizeCurve->setChecked(
true);
3428 slotDigitizeCurve();
3431 case DIGITIZE_STATE_EMPTY:
3434 case DIGITIZE_STATE_POINT_MATCH:
3435 m_actionDigitizePointMatch->setChecked(
true);
3436 slotDigitizePointMatch();
3439 case DIGITIZE_STATE_SCALE:
3440 m_actionDigitizeScale->setChecked(
true);
3441 slotDigitizeScale();
3444 case DIGITIZE_STATE_SEGMENT:
3445 m_actionDigitizeSegment->setChecked(
true);
3446 slotDigitizeSegment();
3449 case DIGITIZE_STATE_SELECT:
3450 m_actionDigitizeSelect->setChecked(
true);
3451 slotDigitizeSelect();
3455 LOG4CPP_ERROR_S ((*mainCat)) <<
"MainWindow::updateDigitizeStateIfSoftwareTriggered";
3460 void MainWindow::updateFittingWindow ()
3462 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateFittingWindow";
3464 if (m_cmdMediator !=
nullptr &&
3465 m_cmbCurve !=
nullptr) {
3468 m_dockFittingWindow->
update (*m_cmdMediator,
3470 m_cmbCurve->currentText (),
3475 void MainWindow::updateGeometryWindow ()
3477 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateGeometryWindow";
3479 if (m_cmdMediator !=
nullptr &&
3480 m_cmbCurve !=
nullptr) {
3483 m_dockGeometryWindow->
update (*m_cmdMediator,
3485 m_cmbCurve->currentText (),
3492 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateGraphicsLinesToMatchGraphicsPoints";
3498 void MainWindow::updateGridLines ()
3500 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateGridLines";
3503 m_gridLines.
clear ();
3514 m_gridLines.
setVisible (m_actionViewGridLines->isChecked());
3517 void MainWindow::updateHighlightOpacity ()
3519 if (m_cmdMediator !=
nullptr) {
3525 m_dockGeometryWindow,
3530 void MainWindow::updateRecentFileList()
3532 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateRecentFileList";
3534 #if !defined(OSX_DEBUG) && !defined(OSX_RELEASE) 3535 QSettings settings (SETTINGS_ENGAUGE, SETTINGS_DIGITIZER);
3536 QStringList recentFilePaths = settings.value(SETTINGS_RECENT_FILE_LIST).toStringList();
3539 unsigned int count = unsigned (recentFilePaths.size());
3540 if (count > MAX_RECENT_FILE_LIST_SIZE) {
3541 count = MAX_RECENT_FILE_LIST_SIZE;
3546 for (i = 0; i < signed (count); i++) {
3547 QString strippedName = QFileInfo (recentFilePaths.at(i)).fileName();
3548 m_actionRecentFiles.at (i)->setText (strippedName);
3549 m_actionRecentFiles.at (i)->setData (recentFilePaths.at (i));
3550 m_actionRecentFiles.at (i)->setVisible (
true);
3554 for (i =
signed (count); i < signed (MAX_RECENT_FILE_LIST_SIZE); i++) {
3555 m_actionRecentFiles.at (i)->setVisible (
false);
3562 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsAxesChecker";
3565 if (m_transformation.transformIsDefined()) {
3567 TRANSFORMATION_STATE_DEFINED,
3570 m_cmbCurve->currentText());
3573 TRANSFORMATION_STATE_UNDEFINED,
3576 m_cmbCurve->currentText());
3582 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsColorFilter";
3589 m_cmbCurve->currentText());
3596 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsCoords";
3603 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsCurveList";
3606 loadCurveListFromCmdMediator();
3612 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsCurveStyles";
3621 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsDigitizeCurve";
3625 modelDigitizeCurve);
3630 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsExportFormat";
3637 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsGeneral";
3644 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsGridDisplay";
3652 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsGridRemoval";
3657 void MainWindow::updateSettingsMainWindow()
3659 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsMainWindow";
3661 if (m_modelMainWindow.
zoomControl() == ZOOM_CONTROL_MENU_ONLY ||
3662 m_modelMainWindow.
zoomControl() == ZOOM_CONTROL_MENU_WHEEL) {
3664 m_actionZoomIn->setShortcut (tr (
""));
3665 m_actionZoomOut->setShortcut (tr (
""));
3669 m_actionZoomIn->setShortcut (tr (
"+"));
3670 m_actionZoomOut->setShortcut (tr (
"-"));
3674 if ((m_scene !=
nullptr) &&
3675 (m_cmdMediator !=
nullptr)) {
3679 updateHighlightOpacity();
3680 updateWindowTitle();
3681 updateFittingWindow();
3682 updateGeometryWindow();
3687 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsMainWindow";
3695 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsPointMatch";
3702 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateSettingsSegments";
3708 void MainWindow::updateSmallDialogs ()
3725 void MainWindow::updateTransformationAndItsDependencies()
3727 m_transformation.update (!m_currentFile.isEmpty (),
3736 m_cmbCurve->currentText ());
3743 void MainWindow::updateViewedCurves ()
3745 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateViewedCurves";
3747 if (m_actionViewCurvesAll->isChecked ()) {
3751 }
else if (m_actionViewCurvesSelected->isChecked ()) {
3755 }
else if (m_actionViewCurvesNone->isChecked ()) {
3760 ENGAUGE_ASSERT (
false);
3766 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateViewsOfSettings";
3768 QString activeCurve = m_digitizeStateContext->
activeCurve ();
3775 if (activeCurve.isEmpty ()) {
3788 m_cmdMediator->
pixmap ());
3793 void MainWindow::updateWindowTitle ()
3795 LOG4CPP_INFO_S ((*mainCat)) <<
"MainWindow::updateWindowTitle";
3797 const QString PLACEHOLDER (
"[*]");
3799 QString title = QString (
"%1 %2")
3800 .arg (tr (
"Engauge Digitizer"))
3801 .arg (VERSION_NUMBER);
3803 QString fileNameMaybeStripped;
3804 if (!m_currentFileWithPathAndFileExtension.isEmpty()) {
3806 QFileInfo fileInfo (m_currentFileWithPathAndFileExtension);
3810 case MAIN_TITLE_BAR_FORMAT_NO_PATH:
3813 fileNameMaybeStripped = fileInfo.completeBaseName();
3816 case MAIN_TITLE_BAR_FORMAT_PATH:
3817 fileNameMaybeStripped = m_currentFileWithPathAndFileExtension;
3821 title += QString (
": %1")
3822 .arg (fileNameMaybeStripped);
3827 title += PLACEHOLDER;
3829 setWindowTitle (title);
3834 ENGAUGE_CHECK_PTR (m_view);
3840 ENGAUGE_CHECK_PTR (m_view);
3844 void MainWindow::writeCheckpointToLogFile ()
3847 QString checkpointDoc;
3848 QTextStream strDoc (&checkpointDoc);
3853 QString checkpointScene;
3854 QTextStream strScene (&checkpointScene);
3859 if (mainCat->
getPriority() == log4cpp::Priority::DEBUG) {
3861 LOG4CPP_DEBUG_S ((*mainCat)) <<
"MainWindow::writeCheckpointToLogFile\n" 3862 <<
"--------------DOCUMENT CHECKPOINT START----------" <<
"\n" 3863 << checkpointDoc.toLatin1().data()
3864 <<
"---------------DOCUMENT CHECKPOINT END-----------" <<
"\n" 3865 <<
"----------------SCENE CHECKPOINT START-----------" <<
"\n" 3866 << checkpointScene.toLatin1().data()
3867 <<
"-----------------SCENE CHECKPOINT END------------" ;
void addCoordSystems(unsigned int numberCoordSystemToAdd)
Add some number (0 or more) of additional coordinate systems.
bool canRedo() const
Return true if there is a command available.
void load(CmdMediator &cmdMediator)
Load settings from Document.
Factory class for generating the points, composed of QGraphicsItem objects, along a GridLine.
void updateGraphicsLinesToMatchGraphicsPoints(const CurveStyles &modelCurveStyles, const Transformation &transformation)
A mouse move has just occurred so move the selected points, since they were dragged.
QImage imageFiltered() const
Background image that has been filtered for the current curve. This asserts if a curve-specific image...
void updateCoordSystem(CoordSystemIndex coordSystemIndex)
Select a different CoordSystem.
Model for DlgSettingsGeneral and CmdSettingsGeneral.
CurveStyle curveStyle(const QString &curveName) const
CurveStyle in specified curve.
void unsetPointStyle()
Apply no PointStyle.
Given a set of point identifiers, if a map is in effect (with its two axis endpoints) then both axis ...
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 setCurveName(const QString &curveName)
Load information for the specified curve name. When called externally, the load method must have been...
bool canRedo() const
Returns true if there is at least one command on the stack.
void createGhosts(QGraphicsScene &scene)
Create ghosts from the path/rect/polygon lists.
Model for DlgSettingsPointMatch and CmdSettingsPointMatch.
Returns information about files.
void updateAfterPointAddition()
Update the graphics attributes.
Color filter parameters for one curve. For a class, this is handled the same as LineStyle and PointSt...
void resetOnLoad(CmdMediator *cmdMediator)
Resetting makes re-initializes for documents after the first.
void updateSettingsMainWindow(const MainWindowModel &modelMainWindow)
Update with new main window properties.
virtual void setSmallDialogs(bool smallDialogs)
If false then dialogs have a minimum size so all controls are visible.
void setStatusBarMode(StatusBarMode statusBarMode)
Set the status bar visibility mode.
Model for DlgSettingsGridDisplay and CmdSettingsGridDisplay.
Command for cutting all selected Points.
void setModelAxesChecker(const DocumentModelAxesChecker &modelAxesChecker)
Set method for DocumentModelAxesChecker.
void setModelGridRemoval(const DocumentModelGridRemoval &modelGridRemoval)
Set method for DocumentModelGridRemoval.
Dialog for saving error report for later transmission to the developers.
void clear()
Deallocate and remove all grid lines.
void updateDigitizeStateIfSoftwareTriggered(DigitizeState digitizeState)
After software-triggered state transition, this method manually triggers the action as if user had cl...
void setDragDropExport(bool dragDropExport)
Set method for drag and drop export.
static void setIdentifierIndex(unsigned int identifierIndex)
Reset the current index while performing a Redo.
double mapToFactor(ZoomFactor zoomFactor) const
Return the floating precision zoom factor given the enum value.
void printStream(QString indentation, QTextStream &str)
Debugging method that supports print method of this class and printStream method of some other class(...
Wrapper around the Poppler library.
Wrapper around OpenJPEG library, in C, for opening jpeg2000 files.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
void fitInView(GraphicsView &view)
Zoom so background fills the window.
void setModelPointMatch(const DocumentModelPointMatch &modelPointMatch)
Set method for DocumentModelPointMatch.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
void updateModelDigitizeCurve(CmdMediator *cmdMediator, const DocumentModelDigitizeCurve &modelDigitizeCurve)
Update the digitize curve settings.
void setModelGeneral(const DocumentModelGeneral &modelGeneral)
Set method for DocumentModelGeneral.
void setEnabled(bool enabled)
Show the style with semi-transparency or full-transparency to indicate if associated Curve is active ...
void setSignificantDigits(int significantDigits)
Set method for significant digits.
Model for DlgSettingsCurveProperties and CmdSettingsCurveProperties.
void createGridLinesForEvenlySpacedGrid(const DocumentModelGridDisplay &modelGridDisplay, const Document &document, const MainWindowModel &modelMainWindow, const Transformation &transformation, GridLines &gridLines)
Create a rectangular (cartesian) or annular (polar) grid of evenly spaced grid lines.
DocumentModelGridRemoval modelGridRemoval() const
Get method for DocumentModelGridRemoval.
Wrapper around the QImage class for read and importing non-PDF files.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
bool loadsAsDigFile(const QString &urlString) const
Returns true if specified file name can be loaded as a DIG file.
void setModelSegments(const DocumentModelSegments &modelSegments)
Set method for DocumentModelSegments.
unsigned int coordSystemIndexToBeRestored() const
Coordinate system index that was active before the ghosts.
void handleContextMenuEventAxis(CmdMediator *cmdMediator, const QString &pointIdentifier)
See DigitizeStateAbstractBase::handleContextMenuEventAxis.
void updateColorFilter(bool isGnuplot, const Transformation &transformation, const DocumentModelGridRemoval &modelGridRemoval, const DocumentModelColorFilter &colorFilter, const QString &curveSelected)
Apply color filter settings.
void updateAfterMouseRelease()
Call MainWindow::updateControls (which is private) after the very specific case - a mouse press/relea...
void exportToFile(const DocumentModelExportFormat &modelExport, const Document &document, const MainWindowModel &modelMainWindow, const Transformation &transformation, QTextStream &str) const
Export Document points according to the settings.
void saveErrorReportFileAndExit(const char *comment, const char *file, int line, const char *context)
Save error report and exit.
void handleCurveChange(CmdMediator *cmdMediator)
See DigitizeStateAbstractBase::handleCurveChange.
void setDirectoryExportSaveFromFilename(const QString &fileName)
Save the current Export/Save directory, after user has accepted the Export/Save dialog.
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...
QDir getDirectoryExportSave() const
Get the current Export/Save directory.
ZoomFactor zoomIn(ZoomFactor currentZoomFactor, double m11, double m22, bool actionZoomFillIsChecked) const
Zoom in.
void handleContextMenuEventGraph(CmdMediator *cmdMediator, const QStringList &pointIdentifiers)
See DigitizeStateAbstractBase::handleContextMenuEventGraph.
PointStyle pointStyle() const
Get method for PointStyle.
MainWindow(const QString &errorReportFile, const QString &fileCmdScriptFile, bool isDropRegression, bool isRegressionTest, bool isGnuplot, bool isReset, bool isExportOnly, bool isExtractImageOnly, const QString &extractImageOnlyExtension, const QStringList &loadStartupFiles, const QStringList &commandLineWithoutLoadStartupFiles, QWidget *parent=0)
Single constructor.
void cmdFileClose()
Close file. This is called from a file script command.
void setModelGridDisplay(const DocumentModelGridDisplay &modelGridDisplay)
Set method for DocumentModelGridDisplay.
Provides list of file extensions for import.
virtual void setSmallDialogs(bool smallDialogs)
If false then dialogs have a minimum size so all controls are visible.
void updateViewsOfSettings(const QString &activeCurve)
Update curve-specific view of settings. Private version gets active curve name from DigitizeStateCont...
void setHighlightOpacity(double highlightOpacity)
Set method for highlight opacity.
Class for showing points and lines for all coordinate systems simultaneously, even though the code no...
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
void retrievePoints(const Transformation &transformation, QList< QPoint > &points, QList< double > &ordinals) const
Retrieve points from clipboard.
QString activeCurve() const
Curve name for active Curve. This can include AXIS_CURVE_NAME, and empty string.
void slotRedo()
Move next command from list to CmdMediator. Noop if there are no more commands.
DocumentAxesPointsRequired documentAxesPointsRequired() const
Get method for DocumentAxesPointsRequired.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
DocumentModelColorFilter modelColorFilter() const
Get method for DocumentModelColorFilter.
virtual void update(const CmdMediator &cmdMediator, const MainWindowModel &modelMainWindow, const QString &curveSelected, const Transformation &transformation)
Populate the table with the specified Curve.
void getTableStatus(bool &tableIsActive, bool &tableIsCopyable) const
Give table status so MainWindow can determine if table can be copied.
void setModelDigitizeCurve(const DocumentModelDigitizeCurve &modelDigitizeCurve)
Set method for DocumentModelDigitizeCurve.
void cmdFileOpen(const QString &fileName)
Open file. This is called from a file script command.
virtual void update(const CmdMediator &cmdMediator, const MainWindowModel &modelMainWindow, const QString &curveSelected, const Transformation &transformation)
Populate the table with the specified Curve.
double highlightOpacity() const
Get method for highlight opacity.
CmdMediator * cmdMediator()
Accessor for commands to process the Document.
void setModelCoords(const DocumentModelCoords &modelCoords)
Set method for DocumentModelCoords.
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...
void wakeUp()
Enable all widgets in the status bar. This is called just after a Document becomes active.
BackgroundImage selectOriginal(BackgroundImage backgroundImage)
Make original background visible, for DigitizeStateColorPicker.
Priority::Value getPriority() const
Returns unused priority.
void setDirectoryImportOpenFromFilename(const QString &fileName)
Save the current Import/Open directory, after user has accepted the Import/Open dialog.
void setPixmap(bool isGnuplot, const Transformation &transformation, const DocumentModelGridRemoval &modelGridRemoval, const DocumentModelColorFilter &modelColorFilter, const QPixmap &pixmapOriginal, const QString &curveSelected)
Update the images of all states, rather than just the current state.
void updateAfterCommand(CmdMediator &cmdMediator, double highlightOpacity, GeometryWindow *geometryWindow, const Transformation &transformation)
Update the Points and their Curves after executing a command.
ZoomFactorInitial zoomFactorInitial() const
Get method for initial zoom factor.
QString filterCsv() const
QFileDialog filter for CSV files.
void setLocale(QLocale::Language language, QLocale::Country country)
Set method for locale given attributes.
void handleKeyPress(CmdMediator *cmdMediator, Qt::Key key, bool atLeastOneSelectedItem)
See DigitizeStateAbstractBase::handleKeyPress.
void setPixmap(const QImage &image)
Set method for the background pixmap.
bool smallDialogs() const
Get method for small dialogs flag.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
Transformation transformation() const
Return read-only copy of transformation.
void showTemporaryMessage(const QString &temporaryMessage)
Show temporary message in status bar.
static void bindToMainWindow(MainWindow *mainWindow)
Bind to MainWindow so this class can access the command stack.
StatusBarMode statusBarMode() const
Current mode for status bar visibility. This is tracked locally so this class knows when to hide/show...
void setImageIsLoaded(CmdMediator *cmdMediator, bool imageIsLoaded)
Set the image so QGraphicsView cursor and drag mode are accessible.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
void setCoordSystemIndex(CoordSystemIndex coordSystemIndex)
Set the index of current active CoordSystem.
void updateSettingsDigitizeCurve(const DocumentModelDigitizeCurve &modelDigitizeCurve)
Update with new curve digitization styles.
bool load(const QString &filename, QImage &image) const
Load image from jpeg2000 file.
void loadMainWindowModel(CmdMediator &cmdMediator, const MainWindowModel &modelMainWindow)
Replaced load method since the main window settings are independent of document, unlike other DlgSett...
void cmdFileExport(const QString &fileName)
Export file. This is called from a file script command.
QDir getDirectoryImportOpen() const
Get the current Import/Open directory.
Strategy class for exporting to a file. This strategy is external to the Document class so that class...
virtual void setSmallDialogs(bool smallDialogs)
If false then dialogs have a minimum size so all controls are visible.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
void setModelExport(const DocumentModelExportFormat &modelExport)
Set method for DocumentModelExportFormat.
bool imageReplaceRenamesDocument() const
Get method for image replaces renames document.
Model for DlgSettingsDigitizeCurve and CmdSettingsDigitizeCurve.
GraphicsView & view()
View for the QImage and QGraphicsItems, without const.
Details for a specific Point.
Class for exporting during regression, when the Transformation has not yet been defined.
Container for all graph curves. The axes point curve is external to this class.
void setBackgroundImage(BackgroundImage backgroundImage)
Transition to the specified state. This method is used by classes outside of the state machine to tri...
ZoomControl zoomControl() const
Get method for zoom control.
Model for DlgSettingsColorFilter and CmdSettingsColorFilter.
GraphicsScene & scene()
Scene container for the QImage and QGraphicsItems.
void updateSettingsGridDisplay(const DocumentModelGridDisplay &modelGridDisplay)
Update with new grid display properties.
void setEnabled(bool enabled)
Show the style with semi-transparency or full-transparency to indicate if associated Curve is active ...
void updateSettingsCurveStyles(const CurveStyles &modelCurveStyles)
Update with new curve styles.
ImportCropping importCropping() const
Get method for import cropping.
void setModelCurveStyles(const CurveStyles &modelCurveStyles)
Set method for CurveStyles.
bool transformIsDefined() const
Return true if all three axis points have been defined.
Facade class that wraps around all of the create classes for MainWindow.
QGraphicsView class with event handling added. Typically the events are sent to the active digitizing...
virtual void doCopy()
Copy the current selection to the clipboard.
bool isGnuplot() const
Get method for gnuplot flag.
Model for DlgSettingsMainWindow.
void appendNewCmd(CmdMediator *cmdMediator, QUndoCommand *cmd)
Append just-created QUndoCommand to command stack. This is called from DigitizeStateAbstractBase subc...
void create(MainWindow &mw)
Create QAction facade.
CoordSystemIndex coordSystemIndex() const
Index of current active CoordSystem.
void updateModelSegments(const DocumentModelSegments &modelSegments)
Update the segments given the new settings.
virtual void setSmallDialogs(bool smallDialogs)
If false then dialogs have a minimum size so all controls are visible.
int maximumGridLines() const
Maximum number of grid lines.
void resetOnLoad()
Reset, when loading a document after the first, to same state that first document was at when loaded.
Command for adding one or more graph points. This is for Segment Fill mode.
void setCurveSelected(bool isGnuplot, const Transformation &transformation, const DocumentModelGridRemoval &modelGridRemoval, const DocumentModelColorFilter &modelColorFilter, const QString &curveSelected)
Update the selected curve.
void resetPositionHasChangedFlags()
Reset positionHasChanged flag for all items. Typically this is done as part of mousePressEvent.
void signalDropRegression(QString)
Send drag and drop regression test url.
DocumentModelGridDisplay modelGridDisplay() const
Get method for DocumentModelGridDisplay.
QStringList unite(CmdMediator *cmdMediator, const QStringList &pointIdentifiersIn) const
Add.
void setModelColorFilter(const DocumentModelColorFilter &modelColorFilter)
Set method for DocumentModelColorFilter.
void close()
Open Document is being closed so remove the background.
Model for DlgSettingsCoords and CmdSettingsCoords.
void setVisible(bool visible)
Make all grid lines visible or hidden.
void updateAfterCommand()
See GraphicsScene::updateAfterCommand.
Curve that overlays the current scene so the regression-fitted curve is visible.
void updateSettingsColorFilter(const DocumentModelColorFilter &modelColorFilter)
Update with new color filter properties.
NonPdfReturn load(const QString &fileName, QImage &image, ImportCropping importCropping, bool isErrorReportRegressionTest) const
Try to load the specified file. Success is indicated in the function return value.
int pdfResolution() const
Get method for resolution of imported PDF files, in dots per inch.
Command for deleting all selected Points.
void setMaximumGridLines(int maximumGridLines)
Set method for maximum number of grid lines.
void updateSettingsAxesChecker(const DocumentModelAxesChecker &modelAxesChecker)
Update with new axes indicator properties.
void updateSettingsPointMatch(const DocumentModelPointMatch &modelPointMatch)
Update with new point match properties.
void updateSettingsGeneral(const DocumentModelGeneral &modelGeneral)
Update with new general properties.
virtual void setSmallDialogs(bool smallDialogs)
If false then dialogs have a minimum size so all controls are visible.
void redo(MainWindow &mainWindow)
Apply the next command. Requires non-empty stack.
void setPointStyle(const PointStyle &pointStyle)
Apply the PointStyle of the currently selected curve.
void printStream(QString indentation, QTextStream &str) const
Debugging method that supports print method of this class and printStream method of some other class(...
bool canPaste(const Transformation &transformation, const QSize &viewSize) const
Return true if there is good data in the clipboard for pasting, and that operation is compatible with...
void updateSettingsGridRemoval(const DocumentModelGridRemoval &modelGridRemoval)
Update with new grid removal properties.
void showTemporaryMessage(const QString &message)
Show temporary message in status bar. After a short interval the message will disappear.
void updateCurveStyles(const CurveStyles &modelCurveStyles)
Update curve styles after settings changed.
virtual void setSmallDialogs(bool smallDialogs)
If false then dialogs have a minimum size so all controls are visible.
void unsetColorFilterSettings()
Apply no color filter.
Dialog for setting the advanced parameters in a newly imported Document.
Wizard for setting up the checklist guide.
void handleMouseMove(CmdMediator *cmdMediator, QPointF pos)
See DigitizeStateAbstractBase::handleMouseMove.
MainWindowModel modelMainWindow() const
Get method for main window model.
MainTitleBarFormat mainTitleBarFormat() const
Get method for MainWindow titlebar filename format.
QLocale locale() const
Get method for locale.
Model for DlgSettingsAxesChecker and CmdSettingsAxesChecker.
unsigned int coordSystemCount() const
Number of CoordSystem.
void updateSettingsExportFormat(const DocumentModelExportFormat &modelExport)
Update with new export properties.
Import of point data from clipboard.
virtual bool eventFilter(QObject *, QEvent *)
Catch secret keypresses.
void startLoadImage(const QUrl &url)
Start the asynchronous loading of an image from the specified url.
virtual void setSmallDialogs(bool smallDialogs)
If false then dialogs have a minimum size so all controls are visible.
void resetOnLoad()
Reset, when loading a document after the first, to same state that first document was at when loaded.
Perform calculations to determine the next zoom setting given the current zoom setting,...
virtual void setSmallDialogs(bool smallDialogs)
If false then dialogs have a minimum size so all controls are visible.
void setZoomControl(ZoomControl zoomControl)
Set method for zoom control.
QString fileExtensionTsv() const
File extension for tsv export files.
QStringList curveNames(CoordSystemIndex coordSystemIndex) const
Curve names to be placed into Document.
void setMainTitleBarFormat(MainTitleBarFormat mainTitleBarFormat)
Set method for MainWindow titlebar filename format.
void handleMouseRelease(CmdMediator *cmdMediator, QPointF pos)
See DigitizeStateAbstractBase::handleMouseRelease.
void captureGraphicsItems(QGraphicsScene &scene)
Take a snapshot of the graphics items.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
void setZoomFactorInitial(ZoomFactorInitial zoomFactorInitial)
Set method for initial zoom factor.
virtual void setSmallDialogs(bool smallDialogs)
If false then dialogs have a minimum size so all controls are visible.
bool dragDropExport() const
Get method for drag and drop export.
void signalZoom(int)
Send zoom selection, picked from menu or keystroke, to StatusBar.
Model for DlgSettingsSegments and CmdSettingsSegments.
void destroyGhosts(QGraphicsScene &scene)
Destory ghosts. Called at end of algorithm.
QImage imageForCurveState() const
Image for the Curve state, even if the current state is different.
void setImageReplaceRenamesDocument(bool imageReplaceRenamesDocument)
Set method for image replace renames document.
void cmdFileImport(const QString &fileName)
Import file. This is called from a file script command.
void setCurvesGraphs(const CurvesGraphs &curvesGraphs)
Let CmdAbstract classes overwrite CurvesGraphs.
void updateAxesChecker(CmdMediator &cmdMediator, const Transformation &transformation)
Apply the new DocumentModelAxesChecker.
void resizeEvent(QResizeEvent *event)
Intercept resize event so graphics scene can be appropriately resized when in Fill mode.
void updateSettingsCoords(const DocumentModelCoords &modelCoords)
Update with new coordinate properties.
void triggerStateTransition(bool isGnuplot, TransformationState transformationState, CmdMediator &cmdMediator, const Transformation &transformation, const QString &selectedGraphCurve)
Trigger a state transition to be performed immediately.
void check(MainWindow &mainWindow, const Document &document) const
Check document state.
void loadCommands(MainWindow &mainWindow, Document &document, QXmlStreamReader &reader)
Load commands from serialized xml.
DocumentModelExportFormat modelExport() const
Get method for DocumentModelExportFormat.
void update(const CmdMediator &cmdMediator, bool documentIsExported)
Update using current CmdMediator/Document state.
void saveXml(QXmlStreamWriter &writer) const
Save document to xml.
File that manages a command stack for regression testing of file import/open/export/close.
QString fileExtensionCsv() const
File extension for csv export files.
ZoomFactor zoomOut(ZoomFactor currentZoomFactor, double m11, double m22, bool actionZoomFillIsChecked) const
Zoom out.
void setSmallDialogs(bool smallDialogs)
Set method for small dialogs flag.
void handleMousePress(CmdMediator *cmdMediator, QPointF pos)
See DigitizeStateAbstractBase::handleMousePress.
Add point and line handling to generic QGraphicsScene.
CurveStyles modelCurveStyles() const
Get method for CurveStyles.
QStringList fileExtensionsWithAsterisks() const
File extensions for use in file dialogs.
QString selectedGraphCurve() const
Curve name that is currently selected in m_cmbCurve.
Command for moving all selected Points by a specified translation.
bool browserIsEmpty() const
When browser is empty, it is pointless to show it.
Model for DlgSettingsGridRemoval and CmdSettingsGridRemoval. The settings are unstable until the user...
bool modeMap() const
True if document scale is set using a scale bar, otherwise using axis points.
QString filterTsv() const
QFileDialog filter for TSV files.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
void fileExport(const QString &filename) const
Export to the specified file. This is called when the Transformation has not been defined.
void updateSettingsSegments(const DocumentModelSegments &modelSegments)
Update with new segments properties.
Command for changing the currently selected CoordSystem.
void showCurves(bool show, bool showAll=false, const QString &curveName="")
Show or hide all Curves (if showAll is true) or just the selected Curve (if showAll is false);.
void setPdfResolution(int resolution)
Set method for resolution of imported PDF files, in dots per inch.
void updateGraphicsLinesToMatchGraphicsPoints()
Update the graphics lines so they follow the graphics points, after a drag, addition,...
QString templateHtml(CoordSystemIndex coordSystemIndex) const
Template html comprising the checklist for display.
Persist the directory between successive Import/Open operations, or successive Export/Save operations...
DocumentModelCoords modelCoords() const
Get method for DocumentModelCoords.
void populateCurvesGraphs(CoordSystemIndex coordSystemIndex, CurvesGraphs &curvesGraphs)
Create entries in CurvesGraphs for each curve name that user provided.
void setImportCropping(ImportCropping importCropping)
Set method for import cropping.
QStringList curvesGraphsNames() const
See CurvesGraphs::curvesGraphsNames.
void setTemplateHtml(const QString &html, const QStringList &curveNames)
Populate the browser with template html.
virtual void clear()
Clear stale information.
virtual void setSmallDialogs(bool smallDialogs)
If false then dialogs have a minimum size so all controls are visible.
About Engauge dialog. This provides a hidden shortcut for triggering ENGAUGE_ASSERT.
DocumentModelAxesChecker modelAxesChecker() const
Get method for DocumentModelAxesChecker.
virtual void setSmallDialogs(bool smallDialogs)
If false then dialogs have a minimum size so all controls are visible.
virtual void clear()
Clear stale information.
virtual void showEvent(QShowEvent *)
Processing performed after gui becomes available.
PdfReturn load(const QString &fileName, QImage &image, int resolution, ImportCropping importCropping, bool isErrorReportRegressionTest) const
Try to load the specified file. Success is indicated in the function return value.
void requestImmediateStateTransition(CmdMediator *cmdMediator, DigitizeState digitizeState)
Perform immediate state transition. Called from outside state machine.
virtual void doCopy()
Copy the current selection to the clipboard.
virtual void setSmallDialogs(bool smallDialogs)
If false then dialogs have a minimum size so all controls are visible.
void updateSettingsCurveList(const CurvesGraphs &curvesGraphs)
Update with new curves.