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