1 #include "object_descr.hpp"
2 #include "hole.hpp"
3 #include "dimension.hpp"
4 #include "schematic/schematic_symbol.hpp"
5 #include "shape.hpp"
6 #include "pool/symbol.hpp"
7
8 namespace horizon {
9
get_name_for_n(size_t n) const10 const std::string &ObjectDescription::get_name_for_n(size_t n) const
11 {
12 if (n == 1)
13 return name;
14 else
15 return name_pl;
16 }
17
18 const std::map<ObjectType, ObjectDescription> object_descriptions = {
19 {ObjectType::SYMBOL_PIN,
20 {"Symbol Pin",
21 "Symbol Pins",
22 {
23 {ObjectProperty::ID::NAME, {ObjectProperty::Type::STRING_RO, "Name", 0}},
24 {ObjectProperty::ID::NAME_VISIBLE, {ObjectProperty::Type::BOOL, "Name visible", 1}},
25 {ObjectProperty::ID::PAD_VISIBLE, {ObjectProperty::Type::BOOL, "Pad visible", 2}},
26 {ObjectProperty::ID::LENGTH, {ObjectProperty::Type::LENGTH, "Length", 3}},
27 {ObjectProperty::ID::PIN_NAME_ORIENTATION,
28 {ObjectProperty::Type::ENUM,
29 "Name Orientation",
30 4,
31 {
32 {static_cast<int>(SymbolPin::NameOrientation::IN_LINE), "In Line"},
33 {static_cast<int>(SymbolPin::NameOrientation::PERPENDICULAR), "Perpendicular"},
34 {static_cast<int>(SymbolPin::NameOrientation::HORIZONTAL), "Horizontal"},
35 }}},
36 {ObjectProperty::ID::DOT, {ObjectProperty::Type::BOOL, "Inverted", 5}},
37 {ObjectProperty::ID::CLOCK, {ObjectProperty::Type::BOOL, "Clock", 6}},
38 {ObjectProperty::ID::SCHMITT, {ObjectProperty::Type::BOOL, "Schmitt", 7}},
39 {ObjectProperty::ID::DRIVER,
40 {ObjectProperty::Type::ENUM,
41 "Driver",
42 8,
43 {
44 {static_cast<int>(SymbolPin::Decoration::Driver::DEFAULT), "Default"},
45 {static_cast<int>(SymbolPin::Decoration::Driver::OPEN_COLLECTOR), "Open Collector"},
46 {static_cast<int>(SymbolPin::Decoration::Driver::OPEN_COLLECTOR_PULLUP), "O.C. w/ pullup"},
47 {static_cast<int>(SymbolPin::Decoration::Driver::OPEN_EMITTER), "Open Emitter"},
48 {static_cast<int>(SymbolPin::Decoration::Driver::OPEN_EMITTER_PULLDOWN),
49 "O.E. w/ pulldown"},
50 {static_cast<int>(SymbolPin::Decoration::Driver::TRISTATE), "Tristate"},
51 }}},
52 }}},
53 {ObjectType::JUNCTION, {"Junction", "Junctions", {}}},
54 {ObjectType::MODEL_3D, {"3D Model", "3D Models", {}}},
55 {ObjectType::INVALID, {"Invalid", "Invalid", {}}},
56 {ObjectType::SYMBOL, {"Symbol", "Symbols", {}}},
57 {ObjectType::NET_CLASS, {"Net class", "Net classes", {}}},
58 {ObjectType::UNIT, {"Unit", "Units", {}}},
59 {ObjectType::ENTITY, {"Entity", "Entities", {}}},
60 {ObjectType::PACKAGE, {"Package", "Packages", {}}},
61 {ObjectType::PADSTACK, {"Padstack", "Padstacks", {}}},
62 {ObjectType::PART, {"Part", "Parts", {}}},
63 {ObjectType::LINE_NET, {"Net line", "Net lines", {}}},
64 {ObjectType::BUS_LABEL, {"Bus label", "Bus labels", {}}},
65 {ObjectType::BUS_RIPPER, {"Bus ripper", "Bus rippers", {}}},
66 {ObjectType::SCHEMATIC_SYMBOL,
67 {"Symbol",
68 "Symbols",
69 {
70 {ObjectProperty::ID::REFDES, {ObjectProperty::Type::STRING_RO, "Ref. Desig.", 1}},
71 {ObjectProperty::ID::DISPLAY_DIRECTIONS, {ObjectProperty::Type::BOOL, "Pin directions", 1}},
72 {ObjectProperty::ID::PIN_NAME_DISPLAY,
73 {ObjectProperty::Type::ENUM,
74 "Pin display",
75 2,
76 {
77 {static_cast<int>(SchematicSymbol::PinDisplayMode::SELECTED_ONLY), "Sel. only"},
78 {static_cast<int>(SchematicSymbol::PinDisplayMode::BOTH), "Both"},
79 {static_cast<int>(SchematicSymbol::PinDisplayMode::ALL), "All"},
80 {static_cast<int>(SchematicSymbol::PinDisplayMode::CUSTOM_ONLY), "Custom only"},
81 }}},
82 {ObjectProperty::ID::DISPLAY_ALL_PADS, {ObjectProperty::Type::BOOL, "Show all pads", 3}},
83 {ObjectProperty::ID::VALUE, {ObjectProperty::Type::STRING_MULTILINE, "Custom value", 4}},
84 {ObjectProperty::ID::EXPAND, {ObjectProperty::Type::EXPAND, "Expand", 5}},
85 }}},
86 {ObjectType::POWER_SYMBOL, {"Power symbol", "Power symbols", {}}},
87 {ObjectType::POLYGON_EDGE, {"Polygon edge", "Polygon edges", {}}},
88 {ObjectType::POLYGON_VERTEX, {"Polygon vertex", "Polygon vertices", {}}},
89 {ObjectType::POLYGON_ARC_CENTER, {"Polygon arc center", "Polygon arc centers", {}}},
90 {ObjectType::VIA,
91 {"Via",
92 "Vias",
93 {
94 {ObjectProperty::ID::FROM_RULES, {ObjectProperty::Type::BOOL, "From rules", 1}},
95 {ObjectProperty::ID::NAME, {ObjectProperty::Type::STRING_RO, "Net", 0}},
96 {ObjectProperty::ID::LOCKED, {ObjectProperty::Type::BOOL, "Locked", 2}},
97 {ObjectProperty::ID::POSITION_X, {ObjectProperty::Type::DIM, "Position X", 3}},
98 {ObjectProperty::ID::POSITION_Y, {ObjectProperty::Type::DIM, "Position Y", 4}},
99 }}},
100 {ObjectType::SHAPE,
101 {"Shape",
102 "Shapes",
103 {
104 {ObjectProperty::ID::LAYER, {ObjectProperty::Type::LAYER, "Layer", 0}},
105 {ObjectProperty::ID::PARAMETER_CLASS, {ObjectProperty::Type::STRING, "Parameter class", 1}},
106 {ObjectProperty::ID::POSITION_X, {ObjectProperty::Type::DIM, "Position X", 2}},
107 {ObjectProperty::ID::POSITION_Y, {ObjectProperty::Type::DIM, "Position Y", 3}},
108 {ObjectProperty::ID::ANGLE, {ObjectProperty::Type::ANGLE, "Angle", 4}},
109 {ObjectProperty::ID::FORM,
110 {ObjectProperty::Type::ENUM,
111 "Form",
112 5,
113 {
114 {static_cast<int>(Shape::Form::RECTANGLE), "Rectangle"},
115 {static_cast<int>(Shape::Form::OBROUND), "Obround"},
116 {static_cast<int>(Shape::Form::CIRCLE), "Circle"},
117 }}},
118 {ObjectProperty::ID::WIDTH, {ObjectProperty::Type::DIM, "Width", 6}},
119 {ObjectProperty::ID::HEIGHT, {ObjectProperty::Type::DIM, "Height", 7}},
120 {ObjectProperty::ID::DIAMETER, {ObjectProperty::Type::DIM, "Diamter", 8}},
121 }}},
122 {ObjectType::LINE,
123 {"Line",
124 "Lines",
125 {
126 {ObjectProperty::ID::WIDTH, {ObjectProperty::Type::LENGTH, "Width", 0}},
127 {ObjectProperty::ID::LAYER, {ObjectProperty::Type::LAYER, "Layer", 1}},
128 }}},
129 {ObjectType::ARC,
130 {"Arc",
131 "Arcs",
132 {
133 {ObjectProperty::ID::WIDTH, {ObjectProperty::Type::LENGTH, "Width", 0}},
134 {ObjectProperty::ID::LAYER, {ObjectProperty::Type::LAYER, "Layer", 1}},
135 }}},
136 {ObjectType::TEXT,
137 {"Text",
138 "Texts",
139 {
140 {ObjectProperty::ID::SIZE, {ObjectProperty::Type::LENGTH, "Size", 1}},
141 {ObjectProperty::ID::WIDTH, {ObjectProperty::Type::LENGTH, "Width", 2}},
142 {ObjectProperty::ID::TEXT, {ObjectProperty::Type::STRING_MULTILINE, "Text", 0}},
143 {ObjectProperty::ID::LAYER, {ObjectProperty::Type::LAYER, "Layer", 3}},
144 {ObjectProperty::ID::POSITION_X, {ObjectProperty::Type::DIM, "Position X", 4}},
145 {ObjectProperty::ID::POSITION_Y, {ObjectProperty::Type::DIM, "Position Y", 5}},
146 {ObjectProperty::ID::ANGLE, {ObjectProperty::Type::ANGLE, "Angle", 6}},
147 {ObjectProperty::ID::MIRROR, {ObjectProperty::Type::BOOL, "Mirror", 7}},
148 {ObjectProperty::ID::ALLOW_UPSIDE_DOWN, {ObjectProperty::Type::BOOL, "Allow upside-down", 8}},
149 {ObjectProperty::ID::FONT,
150 {ObjectProperty::Type::ENUM,
151 "Font",
152 9,
153 {
154 {static_cast<int>(TextData::Font::SIMPLEX), "Simplex"},
155 {static_cast<int>(TextData::Font::DUPLEX), "Duplex"},
156 {static_cast<int>(TextData::Font::TRIPLEX), "Triplex"},
157 {static_cast<int>(TextData::Font::TRIPLEX_ITALIC), "Triplex Italic"},
158 {static_cast<int>(TextData::Font::COMPLEX), "Complex"},
159 {static_cast<int>(TextData::Font::COMPLEX_ITALIC), "Complex Italic"},
160 {static_cast<int>(TextData::Font::SCRIPT_SIMPLEX), "Script Simplex"},
161 {static_cast<int>(TextData::Font::SCRIPT_COMPLEX), "Script Complex"},
162 }}},
163
164 }}},
165 {ObjectType::COMPONENT,
166 {"Component",
167 "Components",
168 {
169 {ObjectProperty::ID::REFDES, {ObjectProperty::Type::STRING, "Ref. Desig.", 0}},
170 {ObjectProperty::ID::VALUE, {ObjectProperty::Type::STRING, "Value", 2}},
171 {ObjectProperty::ID::MPN, {ObjectProperty::Type::STRING_RO, "MPN", 1}},
172 {ObjectProperty::ID::NOPOPULATE, {ObjectProperty::Type::BOOL, "Do not pop.", 3}},
173 }}},
174 {ObjectType::NET,
175 {"Net",
176 "Nets",
177 {
178 {ObjectProperty::ID::NAME, {ObjectProperty::Type::STRING, "Name", 0}},
179 {ObjectProperty::ID::IS_POWER, {ObjectProperty::Type::BOOL, "Is power net", 2}},
180 {ObjectProperty::ID::NET_CLASS, {ObjectProperty::Type::NET_CLASS, "Net class", 1}},
181 {ObjectProperty::ID::DIFFPAIR, {ObjectProperty::Type::STRING_RO, "Diff. pair", 3}},
182 }}},
183 {ObjectType::NET_LABEL,
184 {"Net label",
185 "Net labels",
186 {
187 {ObjectProperty::ID::SIZE, {ObjectProperty::Type::LENGTH, "Size", 2}},
188 {ObjectProperty::ID::OFFSHEET_REFS, {ObjectProperty::Type::BOOL, "Offsheet refs", 1}},
189 {ObjectProperty::ID::NAME, {ObjectProperty::Type::STRING_RO, "Net name", 0}},
190 }}},
191 {ObjectType::POLYGON,
192 {"Polygon",
193 "Polygons",
194 {
195 {ObjectProperty::ID::LAYER, {ObjectProperty::Type::LAYER, "Layer", 0}},
196 {ObjectProperty::ID::PARAMETER_CLASS, {ObjectProperty::Type::STRING, "Parameter class", 1}},
197 {ObjectProperty::ID::USAGE, {ObjectProperty::Type::STRING_RO, "Usage", 2}},
198 }}},
199 {ObjectType::HOLE,
200 {"Hole",
201 "Holes",
202 {
203 {ObjectProperty::ID::DIAMETER, {ObjectProperty::Type::LENGTH, "Diameter", 1}},
204 {ObjectProperty::ID::LENGTH, {ObjectProperty::Type::LENGTH, "Length", 2}},
205 {ObjectProperty::ID::PLATED, {ObjectProperty::Type::BOOL, "Plated", 3}},
206 {ObjectProperty::ID::SHAPE,
207 {ObjectProperty::Type::ENUM,
208 "Shape",
209 0,
210 {
211 {static_cast<int>(Hole::Shape::ROUND), "Round"},
212 {static_cast<int>(Hole::Shape::SLOT), "Slot"},
213 }}},
214 {ObjectProperty::ID::PARAMETER_CLASS, {ObjectProperty::Type::STRING, "Parameter class", 4}},
215 {ObjectProperty::ID::POSITION_X, {ObjectProperty::Type::DIM, "Position X", 5}},
216 {ObjectProperty::ID::POSITION_Y, {ObjectProperty::Type::DIM, "Position Y", 6}},
217 {ObjectProperty::ID::ANGLE, {ObjectProperty::Type::ANGLE, "Angle", 7}},
218 }}},
219 {ObjectType::PAD,
220 {"Pad",
221 "Pads",
222 {
223 {ObjectProperty::ID::NAME, {ObjectProperty::Type::STRING, "Name", 0}},
224 {ObjectProperty::ID::VALUE, {ObjectProperty::Type::STRING_RO, "Padstack", 1}},
225 {ObjectProperty::ID::PAD_TYPE, {ObjectProperty::Type::STRING_RO, "Pad type", 2}},
226 {ObjectProperty::ID::ANGLE, {ObjectProperty::Type::ANGLE, "Angle", 5}},
227 {ObjectProperty::ID::POSITION_X, {ObjectProperty::Type::DIM, "Position X", 3}},
228 {ObjectProperty::ID::POSITION_Y, {ObjectProperty::Type::DIM, "Position Y", 4}},
229 }}},
230 {ObjectType::BOARD_HOLE,
231 {"Hole",
232 "Holes",
233 {
234 {ObjectProperty::ID::NAME, {ObjectProperty::Type::STRING_RO, "Padstack", 0}},
235 {ObjectProperty::ID::VALUE, {ObjectProperty::Type::STRING_RO, "Net", 1}},
236 {ObjectProperty::ID::PAD_TYPE, {ObjectProperty::Type::STRING_RO, "Type", 2}},
237 {ObjectProperty::ID::ANGLE, {ObjectProperty::Type::ANGLE, "Angle", 5}},
238 {ObjectProperty::ID::POSITION_X, {ObjectProperty::Type::DIM, "Position X", 3}},
239 {ObjectProperty::ID::POSITION_Y, {ObjectProperty::Type::DIM, "Position Y", 4}},
240 }}},
241 {ObjectType::BOARD_PACKAGE,
242 {"Package",
243 "Packages",
244 {
245 {ObjectProperty::ID::FLIPPED, {ObjectProperty::Type::BOOL, "Flipped", 4}},
246 {ObjectProperty::ID::REFDES, {ObjectProperty::Type::STRING_RO, "Ref. Desig.", 0}},
247 {ObjectProperty::ID::ALTERNATE_PACKAGE, {ObjectProperty::Type::NET_CLASS, "Package", 1}},
248 {ObjectProperty::ID::VALUE, {ObjectProperty::Type::STRING_RO, "Value", 3}},
249 {ObjectProperty::ID::MPN, {ObjectProperty::Type::STRING_RO, "MPN", 2}},
250 {ObjectProperty::ID::ANGLE, {ObjectProperty::Type::ANGLE, "Angle", 7}},
251 {ObjectProperty::ID::POSITION_X, {ObjectProperty::Type::DIM, "Position X", 5}},
252 {ObjectProperty::ID::POSITION_Y, {ObjectProperty::Type::DIM, "Position Y", 6}},
253 {ObjectProperty::ID::OMIT_SILKSCREEN, {ObjectProperty::Type::BOOL, "Omit Silkscreen", 7}},
254 {ObjectProperty::ID::OMIT_OUTLINE, {ObjectProperty::Type::BOOL, "Omit outline", 8}},
255 {ObjectProperty::ID::FIXED, {ObjectProperty::Type::BOOL, "Fix", 9}},
256 }}},
257 {ObjectType::TRACK,
258 {"Track",
259 "Tracks",
260 {
261 {ObjectProperty::ID::WIDTH, {ObjectProperty::Type::LENGTH, "Width", 3}},
262 {ObjectProperty::ID::LAYER, {ObjectProperty::Type::LAYER_COPPER, "Layer", 1}},
263 {ObjectProperty::ID::NAME, {ObjectProperty::Type::STRING_RO, "Net", 0}},
264 {ObjectProperty::ID::NET_CLASS, {ObjectProperty::Type::STRING_RO, "Net class", 4}},
265 {ObjectProperty::ID::WIDTH_FROM_RULES, {ObjectProperty::Type::BOOL, "Width from rules", 2}},
266 {ObjectProperty::ID::LOCKED, {ObjectProperty::Type::BOOL, "Locked", 5}},
267 }}},
268 {ObjectType::PLANE,
269 {"Plane",
270 "Planes",
271 {
272 {ObjectProperty::ID::WIDTH, {ObjectProperty::Type::LENGTH, "Min. Width", 2}},
273 {ObjectProperty::ID::NAME, {ObjectProperty::Type::STRING_RO, "Net", 0}},
274 {ObjectProperty::ID::FROM_RULES, {ObjectProperty::Type::BOOL, "From rules", 1}},
275 {ObjectProperty::ID::PRIORITY, {ObjectProperty::Type::PRIORITY, "Fill order", 3}},
276 }}},
277 {ObjectType::DIMENSION,
278 {"Dimension",
279 "Dimensions",
280 {
281 {ObjectProperty::ID::SIZE, {ObjectProperty::Type::LENGTH, "Size", 0}},
282 {ObjectProperty::ID::MODE,
283 {ObjectProperty::Type::ENUM,
284 "Mode",
285 1,
286 {
287 {static_cast<int>(Dimension::Mode::DISTANCE), "Distance"},
288 {static_cast<int>(Dimension::Mode::HORIZONTAL), "Horizontal"},
289 {static_cast<int>(Dimension::Mode::VERTICAL), "Vertical"},
290 }}},
291 }}},
292 {ObjectType::FRAME, {"Frame", "Frames", {}}},
293 {ObjectType::KEEPOUT,
294 {"Keepout",
295 "Keepouts",
296 {
297 {ObjectProperty::ID::KEEPOUT_CLASS, {ObjectProperty::Type::STRING, "Keepout class", 0}},
298 }}},
299 {ObjectType::CONNECTION_LINE, {"Connection line", "Connection lines", {}}},
300 {ObjectType::SCHEMATIC, {"Schematic", "Schematics", {}}},
301 {ObjectType::BOARD, {"Board", "Boards", {}}},
302 {ObjectType::BOARD_PANEL,
303 {"Board panel",
304 "Board panels",
305 {
306 {ObjectProperty::ID::NAME, {ObjectProperty::Type::STRING_RO, "Board", 0}},
307 {ObjectProperty::ID::POSITION_X, {ObjectProperty::Type::DIM, "Position X", 1}},
308 {ObjectProperty::ID::POSITION_Y, {ObjectProperty::Type::DIM, "Position Y", 2}},
309 {ObjectProperty::ID::ANGLE, {ObjectProperty::Type::ANGLE, "Angle", 3}},
310 {ObjectProperty::ID::OMIT_OUTLINE, {ObjectProperty::Type::BOOL, "Omit outline", 4}},
311 }}},
312 {ObjectType::PICTURE,
313 {"Picture",
314 "Pictures",
315 {
316 {ObjectProperty::ID::POSITION_X, {ObjectProperty::Type::DIM, "Position X", 0}},
317 {ObjectProperty::ID::POSITION_Y, {ObjectProperty::Type::DIM, "Position Y", 1}},
318 {ObjectProperty::ID::ANGLE, {ObjectProperty::Type::ANGLE, "Angle", 2}},
319 {ObjectProperty::ID::SIZE, {ObjectProperty::Type::LENGTH, "Pixel size", 3}},
320 {ObjectProperty::ID::ON_TOP, {ObjectProperty::Type::BOOL, "On top", 4}},
321 {ObjectProperty::ID::OPACITY, {ObjectProperty::Type::OPACITY, "Opacity", 5}},
322 }}},
323 {ObjectType::DECAL, {"Decal", "Decals", {}}},
324 {ObjectType::BOARD_DECAL,
325 {"Decal",
326 "Decals",
327 {
328 {ObjectProperty::ID::NAME, {ObjectProperty::Type::STRING_RO, "Name", 0}},
329 {ObjectProperty::ID::POSITION_X, {ObjectProperty::Type::DIM, "Position X", 1}},
330 {ObjectProperty::ID::POSITION_Y, {ObjectProperty::Type::DIM, "Position Y", 2}},
331 {ObjectProperty::ID::ANGLE, {ObjectProperty::Type::ANGLE, "Angle", 3}},
332 {ObjectProperty::ID::FLIPPED, {ObjectProperty::Type::BOOL, "Flipped", 4}},
333 {ObjectProperty::ID::SCALE, {ObjectProperty::Type::SCALE, "Scale", 5}},
334
335 }}},
336 {ObjectType::PROJECT, {"Project", "Projects", {}}},
337
338 };
339 } // namespace horizon
340