1 /*
2     SPDX-License-Identifier: GPL-2.0-or-later
3     SPDX-FileCopyrightText: 2002-2020 Umbrello UML Modeller Authors <umbrello-devel@kde.org>
4 */
5 
6 #ifndef OPTIONSTATE_H
7 #define OPTIONSTATE_H
8 
9 #include "basictypes.h"
10 #include "codeviewerstate.h"
11 #include "codegenerationpolicy.h"
12 
13 #include <QDomElement>
14 #include <QXmlStreamWriter>
15 
16 namespace Settings {
17 
18 enum Page
19 {
20     page_general = 0,
21     page_font,
22     page_UI,
23     page_class,
24     page_codeimport,
25     page_codegen,
26     page_codeview
27 };
28 
29 //public structs
30 class GeneralState {
31 public:
GeneralState()32     GeneralState()
33       : undo(false),
34         tabdiagrams(false),
35         newcodegen(false),
36         angularlines(false),
37         layoutType(Uml::LayoutType::Undefined),
38         footerPrinting(false),
39         autosave(false),
40         time(0),
41         autosavetime(0),
42         loadlast(false),
43         diagram(Uml::DiagramType::Class),
44         defaultLanguage(Uml::ProgrammingLanguage::Cpp),
45         uml2(false)
46     {
47     }
48 
49     void load();
50     void save();
51 
52     bool undo;
53     bool tabdiagrams;
54     bool newcodegen;
55     bool angularlines;
56     Uml::LayoutType::Enum layoutType;
57     bool footerPrinting;
58     bool autosave;
59     int time;        ///< old autosave time, kept for compatibility
60     int autosavetime;
61     QString autosavesuffix;  ///< Text input field for suffix of autosave
62     bool loadlast;
63     Uml::DiagramType::Enum diagram;
64     Uml::ProgrammingLanguage::Enum defaultLanguage;
65     QString lastFile;
66     bool uml2;
67 };
68 
69 class UIState {
70 public:
UIState()71     UIState()
72      : useFillColor(false),
73        lineWidth(0)
74     {
75     }
76 
77     void load();
78     void save();
79 
80     void saveToXMI1(QXmlStreamWriter& writer);
81     bool loadFromXMI1(QDomElement& element);
82 
83     bool   useFillColor;
84     QColor fillColor;
85     QColor lineColor;
86     uint   lineWidth;
87     QColor textColor;
88     QFont  font;
89     QColor backgroundColor;
90     QColor gridDotColor;
91 };
92 
93 class ClassState {
94 public:
ClassState()95     ClassState()
96       : showVisibility(false),
97         showAtts(false),
98         showOps(false),
99         showStereoType(Uml::ShowStereoType::None),
100         showAttSig(false),
101         showOpSig(false),
102         showPackage(false),
103         showAttribAssocs(false),
104         showDocumentation(false),
105         showPublicOnly(false),
106         defaultAttributeScope(Uml::Visibility::Public),
107         defaultOperationScope(Uml::Visibility::Public)
108     {
109     }
110 
111     void load();
112     void save();
113 
114     void saveToXMI1(QXmlStreamWriter& writer);
115     bool loadFromXMI1(QDomElement& element);
116 
117     bool showVisibility;
118     bool showAtts;
119     bool showOps;
120     Uml::ShowStereoType::Enum showStereoType;
121     bool showAttSig;
122     bool showOpSig;
123     bool showPackage;
124     bool showAttribAssocs;
125     bool showDocumentation;
126     bool showPublicOnly;
127     Uml::Visibility::Enum defaultAttributeScope;
128     Uml::Visibility::Enum defaultOperationScope;
129 };
130 
131 class CodeGenerationState {
132 public:
CodeGenerationState()133     CodeGenerationState()
134       : autoGenEmptyConstructors(false),
135         commentStyle(CodeGenerationPolicy::SingleLine),
136         defaultAssocFieldScope(Uml::Visibility::Public),
137         defaultAttributeAccessorScope(Uml::Visibility::Public),
138         forceDoc(false),
139         forceSections(false),
140         includeHeadings(false),
141         indentationAmount(false),
142         indentationType(CodeGenerationPolicy::NONE),
143 #ifdef Q_OS_WIN
144         lineEndingType(CodeGenerationPolicy::DOS),
145 #elif defined(Q_OS_MAC)
146         lineEndingType(CodeGenerationPolicy::MAC),
147 #else
148         lineEndingType(CodeGenerationPolicy::UNIX),
149 #endif
150         modnamePolicy(CodeGenerationPolicy::No),
151         overwritePolicy(CodeGenerationPolicy::Ok)
152     {
153     }
154 
155     void load();
156     void save();
157 
158     bool autoGenEmptyConstructors;
159     CodeGenerationPolicy::CommentStyle commentStyle;
160     Uml::Visibility::Enum defaultAssocFieldScope;
161     Uml::Visibility::Enum defaultAttributeAccessorScope;
162     bool forceDoc;
163     bool forceSections;
164     QDir headingsDirectory;
165     bool includeHeadings;
166     int indentationAmount;
167     CodeGenerationPolicy::IndentationType indentationType;
168     CodeGenerationPolicy::NewLineType lineEndingType;
169     CodeGenerationPolicy::ModifyNamePolicy modnamePolicy;
170     QDir outputDirectory;
171     CodeGenerationPolicy::OverwritePolicy overwritePolicy;
172 
173     class CPPCodeGenerationState {
174     public:
CPPCodeGenerationState()175         CPPCodeGenerationState()
176           : autoGenAccessors(false),
177             inlineAccessors(false),
178             inlineOps(false),
179             packageIsNamespace(false),
180             publicAccessors(false),
181             stringIncludeIsGlobal(false),
182             vectorIncludeIsGlobal(false),
183             virtualDestructors(false),
184             getterWithGetPrefix(false),
185             removePrefixFromAccessorMethods(false),
186             accessorMethodsStartWithUpperCase(false)
187         {
188         }
189 
190         bool autoGenAccessors;
191         bool inlineAccessors;
192         bool inlineOps;
193         bool packageIsNamespace;
194         bool publicAccessors;
195         QString stringClassName;
196         QString stringClassNameInclude;
197         bool stringIncludeIsGlobal;
198         QString vectorClassName;
199         QString vectorClassNameInclude;
200         QString classMemberPrefix;
201         QString docToolTag;
202         bool vectorIncludeIsGlobal;
203         bool virtualDestructors;
204         bool getterWithGetPrefix;
205         bool removePrefixFromAccessorMethods;
206         bool accessorMethodsStartWithUpperCase;
207     };
208 
209     class DCodeGenerationState {
210     public:
DCodeGenerationState()211         DCodeGenerationState()
212           : autoGenerateAttributeAccessors(false),
213             autoGenerateAssocAccessors(false),
214             buildANTDocument(false)
215         {
216         }
217 
218         bool autoGenerateAttributeAccessors;
219         bool autoGenerateAssocAccessors;
220         bool buildANTDocument;
221     };
222 
223     class JavaCodeGenerationState {
224     public:
JavaCodeGenerationState()225         JavaCodeGenerationState()
226           : autoGenerateAttributeAccessors(false),
227             autoGenerateAssocAccessors(false),
228             buildANTDocument(false)
229         {
230         }
231 
232         bool autoGenerateAttributeAccessors;
233         bool autoGenerateAssocAccessors;
234         bool buildANTDocument;
235     };
236 
237     class RubyCodeGenerationState {
238     public:
RubyCodeGenerationState()239         RubyCodeGenerationState()
240          : autoGenerateAttributeAccessors(false),
241            autoGenerateAssocAccessors(false)
242         {
243         }
244 
245         bool autoGenerateAttributeAccessors;
246         bool autoGenerateAssocAccessors;
247     };
248 
249     CPPCodeGenerationState cppCodeGenerationState;
250     DCodeGenerationState dCodeGenerationState;
251     JavaCodeGenerationState javaCodeGenerationState;
252     RubyCodeGenerationState rubyCodeGenerationState;
253 };
254 
255 class CodeImportState {
256 public:
CodeImportState()257     CodeImportState()
258       : createArtifacts(false),
259         resolveDependencies(false),
260         supportCPP11(true)
261     {
262     }
263 
264     void load();
265     void save();
266 
267     void saveToXMI1(QXmlStreamWriter& writer);
268     bool loadFromXMI1(QDomElement& element);
269 
270     bool createArtifacts;
271     bool resolveDependencies;
272     bool supportCPP11;
273 };
274 
275 class AutoLayoutState {
276 public:
AutoLayoutState()277     AutoLayoutState()
278      : autoDotPath(false),
279        showExportLayout(false)
280     {
281     }
282 
283     void load();
284     void save();
285 
286     void saveToXMI1(QXmlStreamWriter& writer);
287     bool loadFromXMI1(QDomElement& element);
288 
289     bool autoDotPath;  ///< determine path to dot executable automatically
290     QString dotPath;  ///< path to dot executable
291     bool showExportLayout;  ///< flag for display export layout
292 };
293 
294 class LayoutTypeState {
295 public:
LayoutTypeState()296     LayoutTypeState()
297      : showExportLayout(Uml::LayoutType::Enum::Direct)
298     {
299     }
300 
301     void load();
302     void save();
303 
304     void saveToXMI1(QXmlStreamWriter& writer);
305     bool loadFromXMI1(QDomElement& element);
306 
307     Uml::LayoutType::Enum  showExportLayout;  ///< flag for display export layout
308 };
309 
310 class OptionState {
311 public:
312     OptionState();
313 
314     void load();
315     void save();
316 
317     void saveToXMI1(QXmlStreamWriter& writer);
318     bool loadFromXMI1(QDomElement& element);
319 
320     static OptionState &instance();
321 
322     GeneralState        generalState;
323     LayoutTypeState     layoutTypeState;
324     UIState             uiState;
325     ClassState          classState;
326     CodeViewerState     codeViewerState;
327     CodeGenerationState codeGenerationState;
328     CodeImportState     codeImportState;
329     AutoLayoutState     autoLayoutState;
330 };
331 
332 OptionState& optionState();
333 void setOptionState(const OptionState& optstate);
334 
335 }  // namespace Settings
336 
337 #endif
338