1 /************************************************************************
2  **
3  **  @file   vabstractvalapplication.h
4  **  @author Roman Telezhynskyi <dismine(at)gmail.com>
5  **  @date   15 10, 2020
6  **
7  **  @brief
8  **  @copyright
9  **  This source code is part of the Valentina project, a pattern making
10  **  program, whose allow create and modeling patterns of clothing.
11  **  Copyright (C) 2020 Valentina project
12  **  <https://gitlab.com/smart-pattern/valentina> All Rights Reserved.
13  **
14  **  Valentina is free software: you can redistribute it and/or modify
15  **  it under the terms of the GNU General Public License as published by
16  **  the Free Software Foundation, either version 3 of the License, or
17  **  (at your option) any later version.
18  **
19  **  Valentina is distributed in the hope that it will be useful,
20  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
21  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22  **  GNU General Public License for more details.
23  **
24  **  You should have received a copy of the GNU General Public License
25  **  along with Valentina.  If not, see <http://www.gnu.org/licenses/>.
26  **
27  *************************************************************************/
28 #ifndef VABSTRACTVALAPPLICATION_H
29 #define VABSTRACTVALAPPLICATION_H
30 
31 #include "vabstractapplication.h"
32 
33 #include <QDate>
34 
35 class VAbstractValApplication;// use in define
36 class VAbstractPattern;
37 class VMainGraphicsView;
38 class QGraphicsScene;
39 class VSettings;
40 
41 class VAbstractValApplication : public VAbstractApplication
42 {
43     Q_OBJECT
44 public:
45     VAbstractValApplication(int &argc, char **argv);
46     virtual ~VAbstractValApplication() =default;
47 
48     QString GetCustomerName() const;
49     void    SetCustomerName(const QString &name);
50 
51     QDate   GetCustomerBirthDate() const;
52     void    SetCustomerBirthDate(const QDate &date);
53 
54     QString CustomerEmail() const;
55     void    SetCustomerEmail(const QString &email);
56 
57     Unit        patternUnits() const;
58     const Unit *patternUnitsP() const;
59     void        SetPatternUnits(const Unit &patternUnit);
60 
61     MeasurementsType GetMeasurementsType() const;
62     void             SetMeasurementsType(const MeasurementsType &patternType);
63 
64     Unit MeasurementsUnits() const;
65     void SetMeasurementsUnits(const Unit &measurementsUnits);
66 
67     Unit DimensionSizeUnits() const;
68     void SetDimensionSizeUnits(const Unit &sizeUnits);
69 
70     double toPixel(double val) const;
71     double fromPixel(double pix) const;
72 
73     void              setCurrentDocument(VAbstractPattern *doc);
74     VAbstractPattern *getCurrentDocument() const;
75 
76     VMainGraphicsView *getSceneView() const;
77     void               setSceneView(VMainGraphicsView *value);
78 
79     QGraphicsScene *getCurrentScene() const;
80     void            setCurrentScene(QGraphicsScene **value);
81 
82     QWidget *getMainWindow() const;
83     void     setMainWindow(QWidget *value);
84 
85     QString GetPatternPath() const;
86     void    SetPatternPath(const QString &value);
87 
88     QMap<int, QString> GetUserMaterials() const;
89     void               SetUserMaterials(const QMap<int, QString> &userMaterials);
90 
91     const Draw &GetDrawMode() const;
92     void        SetDrawMode(const Draw &value);
93 
94     bool getOpeningPattern() const;
95     void setOpeningPattern();
96 
97     void PostWarningMessage(const QString &message, QtMsgType severity) const;
98 
99     qreal GetDimensionHeight() const;
100     void  SetDimensionHeight(qreal dimensionHeight);
101 
102     qreal GetDimensionSize() const;
103     void  SetDimensionSize(qreal dimensionSize);
104 
105     qreal GetDimensionHip() const;
106     void  SetDimensionHip(qreal dimensionHip);
107 
108     qreal GetDimensionWaist() const;
109     void  SetDimensionWaist(qreal dimensionWaist);
110 
111     QString GetDimensionHeightLabel() const;
112     void    SetDimensionHeightLabel(const QString &label);
113 
114     QString GetDimensionSizeLabel() const;
115     void    SetDimensionSizeLabel(const QString &label);
116 
117     QString GetDimensionHipLabel() const;
118     void    SetDimensionHipLabel(const QString &label);
119 
120     QString GetDimensionWaistLabel() const;
121     void    SetDimensionWaistLabel(const QString &label);
122 
123     virtual void OpenSettings() override;
124     VSettings *ValentinaSettings();
125 
126     static VAbstractValApplication *VApp();
127 
128 protected:
129     QString m_customerName{};
130     QDate   m_customerBirthDate{};
131     QString m_customerEmail{};
132 
133     Unit                m_patternUnits{Unit::Cm};
134     MeasurementsType    m_measurementsType{MeasurementsType::Unknown};
135     Unit                m_measurementsUnits{Unit::Cm};
136     VAbstractPattern   *m_doc{nullptr};
137     VMainGraphicsView  *m_sceneView{nullptr};
138     QGraphicsScene    **m_currentScene{nullptr};
139     QString             m_patternFilePath{};
140     QMap<int, QString>  m_userMaterials{};
141 
142     qreal m_dimensionHeight{0};
143     qreal m_dimensionSize{0};
144     qreal m_dimensionHip{0};
145     qreal m_dimensionWaist{0};
146 
147     QString m_dimensionHeightLabel{};
148     QString m_dimensionSizeLabel{};
149     QString m_dimensionHipLabel{};
150     QString m_dimensionWaistLabel{};
151 
152     Unit m_dimensionSizeUnits{Unit::Cm};
153 
154     /**
155      * @brief mainWindow pointer to main window. Usefull if need create modal dialog. Without pointer to main window
156      * modality doesn't work.
157      */
158     QWidget *mainWindow{nullptr};
159 
160     /** @brief mode keep current draw mode. */
161     Draw m_mode{Draw::Calculation};
162 
163     /**
164      * @brief openingPattern true when we opening pattern. If something will be wrong in formula this help understand if
165      * we can allow user use Undo option.
166      */
167     bool openingPattern{false};
168 
169 private:
170     Q_DISABLE_COPY(VAbstractValApplication)
171 };
172 
173 //---------------------------------------------------------------------------------------------------------------------
GetCustomerName()174 inline QString VAbstractValApplication::GetCustomerName() const
175 {
176     return m_customerName;
177 }
178 
179 //---------------------------------------------------------------------------------------------------------------------
SetCustomerName(const QString & name)180 inline void VAbstractValApplication::SetCustomerName(const QString &name)
181 {
182     m_customerName = name;
183 }
184 
185 //---------------------------------------------------------------------------------------------------------------------
patternUnits()186 inline Unit VAbstractValApplication::patternUnits() const
187 {
188     return m_patternUnits;
189 }
190 
191 //---------------------------------------------------------------------------------------------------------------------
patternUnitsP()192 inline const Unit *VAbstractValApplication::patternUnitsP() const
193 {
194     return &m_patternUnits;
195 }
196 
197 //---------------------------------------------------------------------------------------------------------------------
SetPatternUnits(const Unit & patternUnit)198 inline void VAbstractValApplication::SetPatternUnits(const Unit &patternUnit)
199 {
200     m_patternUnits = patternUnit;
201 }
202 
203 //---------------------------------------------------------------------------------------------------------------------
GetMeasurementsType()204 inline MeasurementsType VAbstractValApplication::GetMeasurementsType() const
205 {
206     return m_measurementsType;
207 }
208 
209 //---------------------------------------------------------------------------------------------------------------------
SetMeasurementsType(const MeasurementsType & patternType)210 inline void VAbstractValApplication::SetMeasurementsType(const MeasurementsType &patternType)
211 {
212     m_measurementsType = patternType;
213 }
214 
215 //---------------------------------------------------------------------------------------------------------------------
MeasurementsUnits()216 inline Unit VAbstractValApplication::MeasurementsUnits() const
217 {
218     return m_measurementsUnits;
219 }
220 
221 //---------------------------------------------------------------------------------------------------------------------
SetMeasurementsUnits(const Unit & measurementsUnits)222 inline void VAbstractValApplication::SetMeasurementsUnits(const Unit &measurementsUnits)
223 {
224     m_measurementsUnits = measurementsUnits;
225 }
226 
227 //---------------------------------------------------------------------------------------------------------------------
DimensionSizeUnits()228 inline Unit VAbstractValApplication::DimensionSizeUnits() const
229 {
230     return m_dimensionSizeUnits;
231 }
232 
233 //---------------------------------------------------------------------------------------------------------------------
SetDimensionSizeUnits(const Unit & sizeUnits)234 inline void VAbstractValApplication::SetDimensionSizeUnits(const Unit &sizeUnits)
235 {
236     m_dimensionSizeUnits = sizeUnits;
237 }
238 
239 //---------------------------------------------------------------------------------------------------------------------
setCurrentDocument(VAbstractPattern * doc)240 inline void VAbstractValApplication::setCurrentDocument(VAbstractPattern *doc)
241 {
242     m_doc = doc;
243 }
244 
245 //---------------------------------------------------------------------------------------------------------------------
getCurrentDocument()246 inline VAbstractPattern *VAbstractValApplication::getCurrentDocument() const
247 {
248     return m_doc;
249 }
250 
251 //---------------------------------------------------------------------------------------------------------------------
getSceneView()252 inline VMainGraphicsView *VAbstractValApplication::getSceneView() const
253 {
254     return m_sceneView;
255 }
256 
257 //---------------------------------------------------------------------------------------------------------------------
setSceneView(VMainGraphicsView * value)258 inline void VAbstractValApplication::setSceneView(VMainGraphicsView *value)
259 {
260     m_sceneView = value;
261 }
262 
263 //---------------------------------------------------------------------------------------------------------------------
getCurrentScene()264 inline QGraphicsScene *VAbstractValApplication::getCurrentScene() const
265 {
266     return *m_currentScene;
267 }
268 
269 //---------------------------------------------------------------------------------------------------------------------
setCurrentScene(QGraphicsScene ** value)270 inline void VAbstractValApplication::setCurrentScene(QGraphicsScene **value)
271 {
272     m_currentScene = value;
273 }
274 
275 //---------------------------------------------------------------------------------------------------------------------
getMainWindow()276 inline QWidget *VAbstractValApplication::getMainWindow() const
277 {
278     return mainWindow;
279 }
280 
281 //---------------------------------------------------------------------------------------------------------------------
setMainWindow(QWidget * value)282 inline void VAbstractValApplication::setMainWindow(QWidget *value)
283 {
284     mainWindow = value;
285 }
286 
287 //---------------------------------------------------------------------------------------------------------------------
GetPatternPath()288 inline QString VAbstractValApplication::GetPatternPath() const
289 {
290     return m_patternFilePath;
291 }
292 
293 //---------------------------------------------------------------------------------------------------------------------
SetPatternPath(const QString & value)294 inline void VAbstractValApplication::SetPatternPath(const QString &value)
295 {
296     m_patternFilePath = value;
297 }
298 
299 //---------------------------------------------------------------------------------------------------------------------
GetUserMaterials()300 inline QMap<int, QString> VAbstractValApplication::GetUserMaterials() const
301 {
302     return m_userMaterials;
303 }
304 
305 //---------------------------------------------------------------------------------------------------------------------
SetUserMaterials(const QMap<int,QString> & userMaterials)306 inline void VAbstractValApplication::SetUserMaterials(const QMap<int, QString> &userMaterials)
307 {
308     m_userMaterials = userMaterials;
309 }
310 
311 //---------------------------------------------------------------------------------------------------------------------
GetDrawMode()312 inline const Draw &VAbstractValApplication::GetDrawMode() const
313 {
314     return m_mode;
315 }
316 
317 //---------------------------------------------------------------------------------------------------------------------
SetDrawMode(const Draw & value)318 inline void VAbstractValApplication::SetDrawMode(const Draw &value)
319 {
320     m_mode = value;
321 }
322 
323 //---------------------------------------------------------------------------------------------------------------------
getOpeningPattern()324 inline bool VAbstractValApplication::getOpeningPattern() const
325 {
326     return openingPattern;
327 }
328 
329 //---------------------------------------------------------------------------------------------------------------------
setOpeningPattern()330 inline void VAbstractValApplication::setOpeningPattern()
331 {
332     openingPattern = !openingPattern;
333 }
334 
335 //---------------------------------------------------------------------------------------------------------------------
GetDimensionHeight()336 inline qreal VAbstractValApplication::GetDimensionHeight() const
337 {
338     return m_dimensionHeight;
339 }
340 
341 //---------------------------------------------------------------------------------------------------------------------
SetDimensionHeight(qreal dimensionHeight)342 inline void VAbstractValApplication::SetDimensionHeight(qreal dimensionHeight)
343 {
344     m_dimensionHeight = dimensionHeight;
345 }
346 
347 //---------------------------------------------------------------------------------------------------------------------
GetDimensionSize()348 inline qreal VAbstractValApplication::GetDimensionSize() const
349 {
350     return m_dimensionSize;
351 }
352 
353 //---------------------------------------------------------------------------------------------------------------------
SetDimensionSize(qreal dimensionSize)354 inline void VAbstractValApplication::SetDimensionSize(qreal dimensionSize)
355 {
356     m_dimensionSize = dimensionSize;
357 }
358 
359 //---------------------------------------------------------------------------------------------------------------------
GetDimensionHip()360 inline qreal VAbstractValApplication::GetDimensionHip() const
361 {
362     return m_dimensionHip;
363 }
364 
365 //---------------------------------------------------------------------------------------------------------------------
SetDimensionHip(qreal dimensionHip)366 inline void VAbstractValApplication::SetDimensionHip(qreal dimensionHip)
367 {
368     m_dimensionHip = dimensionHip;
369 }
370 
371 //---------------------------------------------------------------------------------------------------------------------
GetDimensionWaist()372 inline qreal VAbstractValApplication::GetDimensionWaist() const
373 {
374     return m_dimensionWaist;
375 }
376 
377 //---------------------------------------------------------------------------------------------------------------------
SetDimensionWaist(qreal dimensionWaist)378 inline void VAbstractValApplication::SetDimensionWaist(qreal dimensionWaist)
379 {
380     m_dimensionWaist = dimensionWaist;
381 }
382 
383 //---------------------------------------------------------------------------------------------------------------------
GetDimensionHeightLabel()384 inline QString VAbstractValApplication::GetDimensionHeightLabel() const
385 {
386     return m_dimensionHeightLabel;
387 }
388 
389 //---------------------------------------------------------------------------------------------------------------------
SetDimensionHeightLabel(const QString & label)390 inline void VAbstractValApplication::SetDimensionHeightLabel(const QString &label)
391 {
392     m_dimensionHeightLabel = label;
393 }
394 
395 //---------------------------------------------------------------------------------------------------------------------
GetDimensionSizeLabel()396 inline QString VAbstractValApplication::GetDimensionSizeLabel() const
397 {
398     return m_dimensionSizeLabel;
399 }
400 
401 //---------------------------------------------------------------------------------------------------------------------
SetDimensionSizeLabel(const QString & label)402 inline void VAbstractValApplication::SetDimensionSizeLabel(const QString &label)
403 {
404     m_dimensionSizeLabel = label;
405 }
406 
407 //---------------------------------------------------------------------------------------------------------------------
GetDimensionHipLabel()408 inline QString VAbstractValApplication::GetDimensionHipLabel() const
409 {
410     return m_dimensionHipLabel;
411 }
412 
413 //---------------------------------------------------------------------------------------------------------------------
SetDimensionHipLabel(const QString & label)414 inline void VAbstractValApplication::SetDimensionHipLabel(const QString &label)
415 {
416     m_dimensionHipLabel = label;
417 }
418 
419 //---------------------------------------------------------------------------------------------------------------------
GetDimensionWaistLabel()420 inline QString VAbstractValApplication::GetDimensionWaistLabel() const
421 {
422     return m_dimensionWaistLabel;
423 }
424 
425 //---------------------------------------------------------------------------------------------------------------------
SetDimensionWaistLabel(const QString & label)426 inline void VAbstractValApplication::SetDimensionWaistLabel(const QString &label)
427 {
428     m_dimensionWaistLabel = label;
429 }
430 
431 //---------------------------------------------------------------------------------------------------------------------
GetCustomerBirthDate()432 inline QDate VAbstractValApplication::GetCustomerBirthDate() const
433 {
434     return m_customerBirthDate;
435 }
436 
437 //---------------------------------------------------------------------------------------------------------------------
SetCustomerBirthDate(const QDate & date)438 inline void VAbstractValApplication::SetCustomerBirthDate(const QDate &date)
439 {
440     m_customerBirthDate = date;
441 }
442 
443 //---------------------------------------------------------------------------------------------------------------------
CustomerEmail()444 inline QString VAbstractValApplication::CustomerEmail() const
445 {
446     return m_customerEmail;
447 }
448 
449 //---------------------------------------------------------------------------------------------------------------------
SetCustomerEmail(const QString & email)450 inline void VAbstractValApplication::SetCustomerEmail(const QString &email)
451 {
452     m_customerEmail = email;
453 }
454 
455 #endif // VABSTRACTVALAPPLICATION_H
456