LibrePCB Developers Documentation
theme.h
Go to the documentation of this file.
1 /*
2  * LibrePCB - Professional EDA for everyone!
3  * Copyright (C) 2013 LibrePCB Developers, see AUTHORS.md for contributors.
4  * https://librepcb.org/
5  *
6  * This program is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program. If not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #ifndef LIBREPCB_CORE_THEME_H
21 #define LIBREPCB_CORE_THEME_H
22 
23 /*******************************************************************************
24  * Includes
25  ******************************************************************************/
26 #include "../serialization/sexpression.h"
27 #include "../types/uuid.h"
28 #include "themecolor.h"
29 
30 #include <QtCore>
31 
32 /*******************************************************************************
33  * Namespace / Forward Declarations
34  ******************************************************************************/
35 namespace librepcb {
36 
37 /*******************************************************************************
38  * Class Theme
39  ******************************************************************************/
40 
44 class Theme final {
45  Q_DECLARE_TR_FUNCTIONS(Theme)
46 
47 public:
48  // Types
49  enum class GridStyle : int {
50  None,
51  Dots,
52  Lines,
53  };
54 
55  struct Color {
56  // clang-format off
57  static constexpr const char* sSchematicBackground = "schematic_background";
58  static constexpr const char* sSchematicOverlays = "schematic_overlays";
59  static constexpr const char* sSchematicInfoBox = "schematic_info_box";
60  static constexpr const char* sSchematicSelection = "schematic_selection";
61  static constexpr const char* sSchematicReferences = "schematic_references";
62  static constexpr const char* sSchematicFrames = "schematic_frames";
63  static constexpr const char* sSchematicWires = "schematic_wires";
64  static constexpr const char* sSchematicNetLabels = "schematic_net_labels";
65  static constexpr const char* sSchematicNetLabelAnchors = "schematic_net_label_anchors";
66  static constexpr const char* sSchematicDocumentation = "schematic_documentation";
67  static constexpr const char* sSchematicComments = "schematic_comments";
68  static constexpr const char* sSchematicGuide = "schematic_guide";
69  static constexpr const char* sSchematicOutlines = "schematic_outlines";
70  static constexpr const char* sSchematicGrabAreas = "schematic_grab_areas";
71  static constexpr const char* sSchematicHiddenGrabAreas = "schematic_hidden_grab_areas";
72  static constexpr const char* sSchematicNames = "schematic_names";
73  static constexpr const char* sSchematicValues = "schematic_values";
74  static constexpr const char* sSchematicOptionalPins = "schematic_optional_pins";
75  static constexpr const char* sSchematicRequiredPins = "schematic_required_pins";
76  static constexpr const char* sSchematicPinLines = "schematic_pin_lines";
77  static constexpr const char* sSchematicPinNames = "schematic_pin_names";
78  static constexpr const char* sSchematicPinNumbers = "schematic_pin_numbers";
79  static constexpr const char* sBoardBackground = "board_background";
80  static constexpr const char* sBoardOverlays = "board_overlays";
81  static constexpr const char* sBoardInfoBox = "board_info_box";
82  static constexpr const char* sBoardSelection = "board_selection";
83  static constexpr const char* sBoardDrcMarker = "board_drc_marker";
84  static constexpr const char* sBoardFrames = "board_frames";
85  static constexpr const char* sBoardOutlines = "board_outlines";
86  static constexpr const char* sBoardPlatedCutouts = "board_plated_cutouts";
87  static constexpr const char* sBoardHoles = "board_holes";
88  static constexpr const char* sBoardPads = "board_pads";
89  static constexpr const char* sBoardVias = "board_vias";
90  static constexpr const char* sBoardZones = "board_zones";
91  static constexpr const char* sBoardAirWires = "board_airwires";
92  static constexpr const char* sBoardMeasures = "board_measures";
93  static constexpr const char* sBoardAlignment = "board_alignment";
94  static constexpr const char* sBoardDocumentation = "board_documentation";
95  static constexpr const char* sBoardComments = "board_comments";
96  static constexpr const char* sBoardGuide = "board_guide";
97  static constexpr const char* sBoardNamesTop = "board_names_top";
98  static constexpr const char* sBoardNamesBot = "board_names_bottom";
99  static constexpr const char* sBoardValuesTop = "board_values_top";
100  static constexpr const char* sBoardValuesBot = "board_values_bottom";
101  static constexpr const char* sBoardLegendTop = "board_legend_top";
102  static constexpr const char* sBoardLegendBot = "board_legend_bottom";
103  static constexpr const char* sBoardDocumentationTop = "board_documentation_top";
104  static constexpr const char* sBoardDocumentationBot = "board_documentation_bottom";
105  static constexpr const char* sBoardPackageOutlinesTop = "board_package_outlines_top";
106  static constexpr const char* sBoardPackageOutlinesBot = "board_package_outlines_bottom";
107  static constexpr const char* sBoardCourtyardTop = "board_courtyard_top";
108  static constexpr const char* sBoardCourtyardBot = "board_courtyard_bottom";
109  static constexpr const char* sBoardGrabAreasTop = "board_grab_areas_top";
110  static constexpr const char* sBoardGrabAreasBot = "board_grab_areas_bottom";
111  static constexpr const char* sBoardHiddenGrabAreasTop = "board_hidden_grab_areas_top";
112  static constexpr const char* sBoardHiddenGrabAreasBot = "board_hidden_grab_areas_bottom";
113  static constexpr const char* sBoardReferencesTop = "board_references_top";
114  static constexpr const char* sBoardReferencesBot = "board_references_bottom";
115  static constexpr const char* sBoardStopMaskTop = "board_stop_mask_top";
116  static constexpr const char* sBoardStopMaskBot = "board_stop_mask_bottom";
117  static constexpr const char* sBoardSolderPasteTop = "board_solder_paste_top";
118  static constexpr const char* sBoardSolderPasteBot = "board_solder_paste_bottom";
119  static constexpr const char* sBoardFinishTop = "board_finish_top";
120  static constexpr const char* sBoardFinishBot = "board_finish_bottom";
121  static constexpr const char* sBoardGlueTop = "board_glue_top";
122  static constexpr const char* sBoardGlueBot = "board_glue_bottom";
123  static constexpr const char* sBoardCopperTop = "board_copper_top";
124  static constexpr const char* sBoardCopperInner = "board_copper_inner_%1";
125  static constexpr const char* sBoardCopperBot = "board_copper_bottom";
126  // clang-format on
127  };
128 
129  // Constructors / Destructor
130  explicit Theme(const Uuid& uuid = Uuid::createRandom(),
131  const QString& name = "Unnamed") noexcept;
132  Theme(const Uuid& uuid, const QString& name, const Theme& copyFrom) noexcept;
133  Theme(const Theme& other) noexcept;
134  ~Theme() noexcept;
135 
136  // Getters
137  const Uuid& getUuid() const noexcept { return mUuid; }
138  const QString& getName() const noexcept { return mName; }
139  const QList<ThemeColor>& getColors() const noexcept { return mColors; }
140  const ThemeColor& getColor(const QString& identifier) const noexcept;
141  GridStyle getSchematicGridStyle() const noexcept {
142  return mSchematicGridStyle;
143  }
144  GridStyle getBoardGridStyle() const noexcept { return mBoardGridStyle; }
145 
146  // Setters
147  void setName(const QString& name) noexcept;
148  void setColors(const QList<ThemeColor>& colors) noexcept;
149  void setSchematicGridStyle(GridStyle style) noexcept;
150  void setBoardGridStyle(GridStyle style) noexcept;
151 
152  // General Methods
153  void restoreDefaults() noexcept;
154  void load(const SExpression& root);
155  void serialize(SExpression& root) const;
156 
157  // Operator Overloadings
158  bool operator==(const Theme& rhs) const noexcept;
159  bool operator!=(const Theme& rhs) const noexcept { return !(*this == rhs); }
160  Theme& operator=(const Theme& rhs) noexcept;
161 
162  // Static Methods
163  static const QSet<QString>& getCopperColorNames() noexcept;
164  static QString getGrabAreaColorName(const QString& outlineColorName) noexcept;
165 
166 private: // Methods
167  void addColor(const QString& id, const QString& category, const QString& name,
168  const QColor& primary, const QColor& secondary) noexcept;
169  SExpression& addNode(const QString& name) noexcept;
170 
171 private: // Data
172  QMap<QString, SExpression> mNodes;
173 
175  QString mName;
176  QList<ThemeColor> mColors;
179 };
180 
181 /*******************************************************************************
182  * End of File
183  ******************************************************************************/
184 
185 } // namespace librepcb
186 
187 Q_DECLARE_METATYPE(librepcb::Theme::GridStyle)
188 
189 #endif
SExpression & addNode(const QString &name) noexcept
Definition: theme.cpp:377
GridStyle getSchematicGridStyle() const noexcept
Definition: theme.h:141
static const QSet< QString > & getCopperColorNames() noexcept
Definition: theme.cpp:343
Uuid mUuid
Definition: theme.h:174
QMap< QString, SExpression > mNodes
Definition: theme.h:172
Theme(const Uuid &uuid=Uuid::createRandom(), const QString &name="Unnamed") noexcept
Definition: theme.cpp:72
Definition: occmodel.cpp:76
void setColors(const QList< ThemeColor > &colors) noexcept
Definition: theme.cpp:233
void addColor(const QString &id, const QString &category, const QString &name, const QColor &primary, const QColor &secondary) noexcept
Definition: theme.cpp:371
void setName(const QString &name) noexcept
Definition: theme.cpp:229
QList< ThemeColor > mColors
Definition: theme.h:176
const ThemeColor & getColor(const QString &identifier) const noexcept
Definition: theme.cpp:213
Color settings as used by librepcb::Theme.
Definition: themecolor.h:43
void setBoardGridStyle(GridStyle style) noexcept
Definition: theme.cpp:268
Theme & operator=(const Theme &rhs) noexcept
Definition: theme.cpp:329
const QString & getName() const noexcept
Definition: theme.h:138
void serialize(SExpression &root) const
Definition: theme.cpp:305
GridStyle
Definition: theme.h:49
static QString getGrabAreaColorName(const QString &outlineColorName) noexcept
Definition: theme.cpp:355
bool operator!=(const Theme &rhs) const noexcept
Definition: theme.h:159
GridStyle getBoardGridStyle() const noexcept
Definition: theme.h:144
bool operator==(const Theme &rhs) const noexcept
Definition: theme.cpp:319
void setSchematicGridStyle(GridStyle style) noexcept
Definition: theme.cpp:261
GridStyle mSchematicGridStyle
Definition: theme.h:177
void load(const SExpression &root)
Definition: theme.cpp:283
void restoreDefaults() noexcept
Definition: theme.cpp:279
QString mName
Definition: theme.h:175
const Uuid & getUuid() const noexcept
Definition: theme.h:137
The Uuid class is a replacement for QUuid to get UUID strings without {} braces.
Definition: uuid.h:56
static Uuid createRandom() noexcept
Create a new random UUID.
Definition: uuid.cpp:99
GridStyle mBoardGridStyle
Definition: theme.h:178
Definition: theme.h:55
Theme class as used by librepcb::WorkspaceSettingsItem_Themes.
Definition: theme.h:44
The SExpression class.
Definition: sexpression.h:66
const QList< ThemeColor > & getColors() const noexcept
Definition: theme.h:139