Engauge Digitizer  2
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 
31  m_zoomControl (ZOOM_CONTROL_MENU_WHEEL_PLUSMINUS),
32  m_zoomFactorInitial (DEFAULT_ZOOM_FACTOR_INITIAL),
33  m_mainTitleBarFormat (MAIN_TITLE_BAR_FORMAT_PATH),
34  m_pdfResolution (DEFAULT_IMPORT_PDF_RESOLUTION),
35  m_importCropping (DEFAULT_IMPORT_CROPPING),
36  m_maximumGridLines (DEFAULT_MAXIMUM_GRID_LINES),
37  m_highlightOpacity (DEFAULT_HIGHLIGHT_OPACITY),
38  m_smallDialogs (DEFAULT_SMALL_DIALOGS),
39  m_dragDropExport (DEFAULT_DRAG_DROP_EXPORT),
40  m_significantDigits (DEFAULT_SIGNIFICANT_DIGITS)
41 {
42  // Locale member variable m_locale is initialized to default locale when default constructor is called
43 }
44 
46  m_locale (other.locale()),
47  m_zoomControl (other.zoomControl()),
48  m_zoomFactorInitial (other.zoomFactorInitial()),
49  m_mainTitleBarFormat (other.mainTitleBarFormat()),
50  m_pdfResolution (other.pdfResolution()),
51  m_importCropping (other.importCropping()),
52  m_maximumGridLines (other.maximumGridLines()),
53  m_highlightOpacity (other.highlightOpacity()),
54  m_smallDialogs (other.smallDialogs()),
55  m_dragDropExport (other.dragDropExport()),
56  m_significantDigits (other.significantDigits())
57 {
58 }
59 
61 {
62  m_locale = other.locale();
63  m_zoomControl = other.zoomControl();
64  m_zoomFactorInitial = other.zoomFactorInitial();
65  m_mainTitleBarFormat = other.mainTitleBarFormat();
66  m_pdfResolution = other.pdfResolution();
67  m_importCropping = other.importCropping();
68  m_maximumGridLines = other.maximumGridLines();
69  m_highlightOpacity = other.highlightOpacity();
70  m_smallDialogs = other.smallDialogs();
71  m_dragDropExport = other.dragDropExport();
72  m_significantDigits = other.significantDigits();
73 
74  return *this;
75 }
76 
78 {
79  return m_dragDropExport;
80 }
81 
83 {
84  return m_highlightOpacity;
85 }
86 
87 ImportCropping MainWindowModel::importCropping() const
88 {
89  return m_importCropping;
90 }
91 
92 void MainWindowModel::loadXml(QXmlStreamReader &reader)
93 {
94  LOG4CPP_INFO_S ((*mainCat)) << "MainWindowModel::loadXml";
95 
96  bool success = true;
97 
98  // Read until end of this subtree
99  while ((reader.tokenType() != QXmlStreamReader::EndElement) ||
100  (reader.name() != DOCUMENT_SERIALIZE_MAIN_WINDOW)){
101  loadNextFromReader(reader);
102  if (reader.atEnd()) {
103  success = false;
104  break;
105  }
106  }
107 
108  if (!success) {
109  reader.raiseError (QObject::tr ("Cannot read main window data"));
110  }
111 }
112 
113 QLocale MainWindowModel::locale () const
114 {
115  return m_locale;
116 }
117 
118 MainTitleBarFormat MainWindowModel::mainTitleBarFormat() const
119 {
120  return m_mainTitleBarFormat;
121 }
122 
124 {
125  return m_maximumGridLines;
126 }
127 
129 {
130  return m_pdfResolution;
131 }
132 
133 void MainWindowModel::printStream(QString indentation,
134  QTextStream &str) const
135 {
136  str << indentation << "MainWindowModel\n";
137 
138  indentation += INDENTATION_DELTA;
139 
140  str << indentation << "locale=" << m_locale.name() << "\n";
141  str << indentation << "zoomControl=" << m_zoomControl << "\n";
142  str << indentation << "zoomFactorInitial=" << m_zoomFactorInitial << "\n";
143  str << indentation << "mainWindowTitleBarFormat=" << (m_mainTitleBarFormat == MAIN_TITLE_BAR_FORMAT_NO_PATH ?
144  "NoPath" :
145  "Path") << "\n";
146  str << indentation << "pdfResolution=" << m_pdfResolution << "\n";
147  str << indentation << "importCropping=" << ImportCroppingUtilBase::importCroppingToString (m_importCropping).toLatin1().data() << "\n";
148  str << indentation << "maximumGridLines=" << m_maximumGridLines << "\n";
149  str << indentation << "highlightOpacity=" << m_highlightOpacity << "\n";
150  str << indentation << "smallDialogs=" << (m_smallDialogs ? "yes" : "no") << "\n";
151  str << indentation << "dragDropExport=" << (m_dragDropExport ? "yes" : "no") << "\n";
152  str << indentation << "significantDigits=" << m_significantDigits << "\n";
153 }
154 
155 void MainWindowModel::saveXml(QXmlStreamWriter &writer) const
156 {
157  LOG4CPP_INFO_S ((*mainCat)) << "MainWindowModel::saveXml";
158 
159  writer.writeStartElement(DOCUMENT_SERIALIZE_MAIN_WINDOW);
160  writer.writeEndElement();
161 }
162 
163 void MainWindowModel::setDragDropExport(bool dragDropExport)
164 {
165  m_dragDropExport = dragDropExport;
166 }
167 
168 void MainWindowModel::setHighlightOpacity(double highlightOpacity)
169 {
170  m_highlightOpacity = highlightOpacity;
171 }
172 
173 void MainWindowModel::setImportCropping (ImportCropping importCropping)
174 {
175  m_importCropping = importCropping;
176 }
177 
178 void MainWindowModel::setLocale (QLocale::Language language,
179  QLocale::Country country)
180 {
181  QLocale locale (language,
182  country);
183  locale.setNumberOptions(HIDE_GROUP_SEPARATOR);
184 
185  m_locale = locale;
186 }
187 
188 void MainWindowModel::setLocale (const QLocale &locale)
189 {
190  m_locale = locale;
191  m_locale.setNumberOptions(HIDE_GROUP_SEPARATOR);
192 }
193 
194 void MainWindowModel::setMainTitleBarFormat(MainTitleBarFormat mainTitleBarFormat)
195 {
196  m_mainTitleBarFormat = mainTitleBarFormat;
197 }
198 
199 void MainWindowModel::setMaximumGridLines(int maximumGridLines)
200 {
201  m_maximumGridLines = maximumGridLines;
202 }
203 
205 {
206  m_pdfResolution = resolution;
207 }
208 
209 void MainWindowModel::setSignificantDigits (int significantDigits)
210 {
211  m_significantDigits = significantDigits;
212 }
213 
214 void MainWindowModel::setSmallDialogs(bool smallDialogs)
215 {
216  m_smallDialogs = smallDialogs;
217 }
218 
219 void MainWindowModel::setZoomControl (ZoomControl zoomControl)
220 {
221  m_zoomControl = zoomControl;
222 }
223 
224 void MainWindowModel::setZoomFactorInitial(ZoomFactorInitial zoomFactorInitial)
225 {
226  m_zoomFactorInitial = zoomFactorInitial;
227 }
228 
230 {
231  return m_significantDigits;
232 }
233 
235 {
236  return m_smallDialogs;
237 }
238 
239 ZoomControl MainWindowModel::zoomControl () const
240 {
241  return m_zoomControl;
242 }
243 
244 ZoomFactorInitial MainWindowModel::zoomFactorInitial() const
245 {
246  return m_zoomFactorInitial;
247 }
static QString importCroppingToString(ImportCropping importCropping)
Option as string for display to user.
MainWindowModel & operator=(const MainWindowModel &other)
Assignment constructor.
void setDragDropExport(bool dragDropExport)
Set method for drag and drop export.
void setSignificantDigits(int significantDigits)
Set method for significant digits.
void setHighlightOpacity(double highlightOpacity)
Set method for highlight opacity.
double highlightOpacity() const
Get method for highlight opacity.
ZoomFactorInitial zoomFactorInitial() const
Get method for initial zoom factor.
void setLocale(QLocale::Language language, QLocale::Country country)
Set method for locale given attributes.
bool smallDialogs() const
Get method for small dialogs flag.
MainWindowModel()
Default constructor.
virtual void loadXml(QXmlStreamReader &reader)
Load model from serialized xml.
ZoomControl zoomControl() const
Get method for zoom control.
ImportCropping importCropping() const
Get method for import cropping.
int significantDigits() const
Get method for significant digits.
Model for DlgSettingsMainWindow.
virtual void saveXml(QXmlStreamWriter &writer) const
Save entire model as xml into stream.
int maximumGridLines() const
Maximum number of grid lines.
int pdfResolution() const
Get method for resolution of imported PDF files, in dots per inch.
void setMaximumGridLines(int maximumGridLines)
Set method for maximum number of grid lines.
MainTitleBarFormat mainTitleBarFormat() const
Get method for MainWindow titlebar filename format.
QLocale locale() const
Get method for locale.
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.
bool dragDropExport() const
Get method for drag and drop export.
void setSmallDialogs(bool smallDialogs)
Set method for small dialogs flag.
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.
void printStream(QString indentation, QTextStream &str) const
Debugging method that supports print method of this class and printStream method of some other class(...