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