Engauge Digitizer  2
 All Classes Functions Variables Typedefs Enumerations Friends Pages
MainWindowModel.cpp
1 /******************************************************************************************************
2  * (C) 2014 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
3  * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
4  * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
5  ******************************************************************************************************/
6 
7 #include "CmdMediator.h"
8 #include "DocumentSerialize.h"
9 #include "GraphicsPoint.h"
10 #include "GridLineLimiter.h"
11 #include "ImportCroppingUtilBase.h"
12 #include "Logger.h"
13 #include "MainWindowModel.h"
14 #include "PdfResolution.h"
15 #include <QLocale>
16 #include <QObject>
17 #include <QTextStream>
18 #include "QtToString.h"
19 #include <QXmlStreamWriter>
20 #include "Xml.h"
21 #include "ZoomFactorInitial.h"
22 
23 // Prevent comma ambiguity with group separator commas and field delimiting commas
24 const QLocale::NumberOption HIDE_GROUP_SEPARATOR = QLocale::OmitGroupSeparator;
25 
26 bool DEFAULT_DRAG_DROP_EXPORT = false; // False value allows intuitive copy-and-drag to select a rectangular set of table cells
27 int DEFAULT_SIGNIFICANT_DIGITS = 7;
28 bool DEFAULT_SMALL_DIALOGS = false;
29 bool DEFAULT_IMAGE_REPLACE_RENAMES_DOCUMENT = true; // Pre-version 11.3 behavior
30 
32  m_zoomControl (ZOOM_CONTROL_MENU_WHEEL_PLUSMINUS),
33  m_zoomFactorInitial (DEFAULT_ZOOM_FACTOR_INITIAL),
34  m_mainTitleBarFormat (MAIN_TITLE_BAR_FORMAT_PATH),
35  m_pdfResolution (DEFAULT_IMPORT_PDF_RESOLUTION),
36  m_importCropping (DEFAULT_IMPORT_CROPPING),
37  m_maximumGridLines (DEFAULT_MAXIMUM_GRID_LINES),
38  m_highlightOpacity (DEFAULT_HIGHLIGHT_OPACITY),
39  m_smallDialogs (DEFAULT_SMALL_DIALOGS),
40  m_dragDropExport (DEFAULT_DRAG_DROP_EXPORT),
41  m_significantDigits (DEFAULT_SIGNIFICANT_DIGITS),
42  m_imageReplaceRenamesDocument (DEFAULT_IMAGE_REPLACE_RENAMES_DOCUMENT)
43 {
44  // Locale member variable m_locale is initialized to default locale when default constructor is called
45 }
46 
48  m_locale (other.locale()),
49  m_zoomControl (other.zoomControl()),
50  m_zoomFactorInitial (other.zoomFactorInitial()),
51  m_mainTitleBarFormat (other.mainTitleBarFormat()),
52  m_pdfResolution (other.pdfResolution()),
53  m_importCropping (other.importCropping()),
54  m_maximumGridLines (other.maximumGridLines()),
55  m_highlightOpacity (other.highlightOpacity()),
56  m_smallDialogs (other.smallDialogs()),
57  m_dragDropExport (other.dragDropExport()),
58  m_significantDigits (other.significantDigits()),
59  m_imageReplaceRenamesDocument (other.imageReplaceRenamesDocument())
60 {
61 }
62 
64 {
65  m_locale = other.locale();
66  m_zoomControl = other.zoomControl();
67  m_zoomFactorInitial = other.zoomFactorInitial();
68  m_mainTitleBarFormat = other.mainTitleBarFormat();
69  m_pdfResolution = other.pdfResolution();
70  m_importCropping = other.importCropping();
71  m_maximumGridLines = other.maximumGridLines();
72  m_highlightOpacity = other.highlightOpacity();
73  m_smallDialogs = other.smallDialogs();
74  m_dragDropExport = other.dragDropExport();
75  m_significantDigits = other.significantDigits();
76  m_imageReplaceRenamesDocument = other.imageReplaceRenamesDocument();
77 
78  return *this;
79 }
80 
82 {
83  return m_dragDropExport;
84 }
85 
87 {
88  return m_highlightOpacity;
89 }
90 
92 {
93  return m_imageReplaceRenamesDocument;
94 }
95 
96 ImportCropping MainWindowModel::importCropping() const
97 {
98  return m_importCropping;
99 }
100 
101 void MainWindowModel::loadXml(QXmlStreamReader &reader)
102 {
103  LOG4CPP_INFO_S ((*mainCat)) << "MainWindowModel::loadXml";
104 
105  bool success = true;
106 
107  // Read until end of this subtree
108  while ((reader.tokenType() != QXmlStreamReader::EndElement) ||
109  (reader.name() != DOCUMENT_SERIALIZE_MAIN_WINDOW)){
110  loadNextFromReader(reader);
111  if (reader.atEnd()) {
112  success = false;
113  break;
114  }
115  }
116 
117  if (!success) {
118  reader.raiseError (QObject::tr ("Cannot read main window data"));
119  }
120 }
121 
122 QLocale MainWindowModel::locale () const
123 {
124  return m_locale;
125 }
126 
127 MainTitleBarFormat MainWindowModel::mainTitleBarFormat() const
128 {
129  return m_mainTitleBarFormat;
130 }
131 
133 {
134  return m_maximumGridLines;
135 }
136 
138 {
139  return m_pdfResolution;
140 }
141 
142 void MainWindowModel::printStream(QString indentation,
143  QTextStream &str) const
144 {
145  str << indentation << "MainWindowModel\n";
146 
147  indentation += INDENTATION_DELTA;
148 
149  str << indentation << "locale=" << m_locale.name() << "\n";
150  str << indentation << "zoomControl=" << m_zoomControl << "\n";
151  str << indentation << "zoomFactorInitial=" << m_zoomFactorInitial << "\n";
152  str << indentation << "mainWindowTitleBarFormat=" << (m_mainTitleBarFormat == MAIN_TITLE_BAR_FORMAT_NO_PATH ?
153  "NoPath" :
154  "Path") << "\n";
155  str << indentation << "pdfResolution=" << m_pdfResolution << "\n";
156  str << indentation << "importCropping=" << ImportCroppingUtilBase::importCroppingToString (m_importCropping).toLatin1().data() << "\n";
157  str << indentation << "maximumGridLines=" << m_maximumGridLines << "\n";
158  str << indentation << "highlightOpacity=" << m_highlightOpacity << "\n";
159  str << indentation << "smallDialogs=" << (m_smallDialogs ? "yes" : "no") << "\n";
160  str << indentation << "dragDropExport=" << (m_dragDropExport ? "yes" : "no") << "\n";
161  str << indentation << "significantDigits=" << m_significantDigits << "\n";
162  str << indentation << "imageReplaceRenamesDocument=" << (m_imageReplaceRenamesDocument ? "yes" : "no") << "\n";
163 }
164 
165 void MainWindowModel::saveXml(QXmlStreamWriter &writer) const
166 {
167  LOG4CPP_INFO_S ((*mainCat)) << "MainWindowModel::saveXml";
168 
169  writer.writeStartElement(DOCUMENT_SERIALIZE_MAIN_WINDOW);
170  writer.writeEndElement();
171 }
172 
173 void MainWindowModel::setDragDropExport(bool dragDropExport)
174 {
175  m_dragDropExport = dragDropExport;
176 }
177 
178 void MainWindowModel::setHighlightOpacity(double highlightOpacity)
179 {
180  m_highlightOpacity = highlightOpacity;
181 }
182 
183 void MainWindowModel::setImageReplaceRenamesDocument(bool imageReplaceRenamesDocument)
184 {
185  m_imageReplaceRenamesDocument = imageReplaceRenamesDocument;
186 }
187 
188 void MainWindowModel::setImportCropping (ImportCropping importCropping)
189 {
190  m_importCropping = importCropping;
191 }
192 
193 void MainWindowModel::setLocale (QLocale::Language language,
194  QLocale::Country country)
195 {
196  QLocale locale (language,
197  country);
198  locale.setNumberOptions(HIDE_GROUP_SEPARATOR);
199 
200  m_locale = locale;
201 }
202 
203 void MainWindowModel::setLocale (const QLocale &locale)
204 {
205  m_locale = locale;
206  m_locale.setNumberOptions(HIDE_GROUP_SEPARATOR);
207 }
208 
209 void MainWindowModel::setMainTitleBarFormat(MainTitleBarFormat mainTitleBarFormat)
210 {
211  m_mainTitleBarFormat = mainTitleBarFormat;
212 }
213 
214 void MainWindowModel::setMaximumGridLines(int maximumGridLines)
215 {
216  m_maximumGridLines = maximumGridLines;
217 }
218 
220 {
221  m_pdfResolution = resolution;
222 }
223 
224 void MainWindowModel::setSignificantDigits (int significantDigits)
225 {
226  m_significantDigits = significantDigits;
227 }
228 
229 void MainWindowModel::setSmallDialogs(bool smallDialogs)
230 {
231  m_smallDialogs = smallDialogs;
232 }
233 
234 void MainWindowModel::setZoomControl (ZoomControl zoomControl)
235 {
236  m_zoomControl = zoomControl;
237 }
238 
239 void MainWindowModel::setZoomFactorInitial(ZoomFactorInitial zoomFactorInitial)
240 {
241  m_zoomFactorInitial = zoomFactorInitial;
242 }
243 
245 {
246  return m_significantDigits;
247 }
248 
250 {
251  return m_smallDialogs;
252 }
253 
254 ZoomControl MainWindowModel::zoomControl () const
255 {
256  return m_zoomControl;
257 }
258 
259 ZoomFactorInitial MainWindowModel::zoomFactorInitial() const
260 {
261  return m_zoomFactorInitial;
262 }
static QString importCroppingToString(ImportCropping importCropping)
Option as string for display to user.
MainWindowModel & operator=(const MainWindowModel &other)
Assignment constructor.
bool imageReplaceRenamesDocument() const
Get method for image replaces renames document.
void setDragDropExport(bool dragDropExport)
Set method for drag and drop export.
virtual void saveXml(QXmlStreamWriter &writer) const
Save entire model as xml into stream.
void setSignificantDigits(int significantDigits)
Set method for significant digits.
MainTitleBarFormat mainTitleBarFormat() const
Get method for MainWindow titlebar filename format.
void setHighlightOpacity(double highlightOpacity)
Set method for highlight opacity.
void setLocale(QLocale::Language language, QLocale::Country country)
Set method for locale given attributes.
int maximumGridLines() const
Maximum number of grid lines.
MainWindowModel()
Default constructor.
bool dragDropExport() const
Get method for drag and drop export.
bool smallDialogs() const
Get method for small dialogs flag.
virtual void loadXml(QXmlStreamReader &reader)
Load model from serialized xml.
int significantDigits() const
Get method for significant digits.
ZoomControl zoomControl() const
Get method for zoom control.
Model for DlgSettingsMainWindow.
void printStream(QString indentation, QTextStream &str) const
Debugging method that supports print method of this class and printStream method of some other class(...
void setMaximumGridLines(int maximumGridLines)
Set method for maximum number of grid lines.
double highlightOpacity() const
Get method for highlight opacity.
int pdfResolution() const
Get method for resolution of imported PDF files, in dots per inch.
void setZoomControl(ZoomControl zoomControl)
Set method for zoom control.
void setMainTitleBarFormat(MainTitleBarFormat mainTitleBarFormat)
Set method for MainWindow titlebar filename format.
void setZoomFactorInitial(ZoomFactorInitial zoomFactorInitial)
Set method for initial zoom factor.
void setImageReplaceRenamesDocument(bool imageReplaceRenamesDocument)
Set method for image replace renames document.
ZoomFactorInitial zoomFactorInitial() const
Get method for initial zoom factor.
void setSmallDialogs(bool smallDialogs)
Set method for small dialogs flag.
ImportCropping importCropping() const
Get method for import cropping.
QLocale locale() const
Get method for locale.
void setPdfResolution(int resolution)
Set method for resolution of imported PDF files, in dots per inch.
void setImportCropping(ImportCropping importCropping)
Set method for import cropping.