Skip to content

Commit 6ad326e

Browse files
Merge pull request #2236 from KLayout/issue-2224
Issue 2224
2 parents b7bda21 + fc7011d commit 6ad326e

21 files changed

+639
-189
lines changed

src/ant/ant/antPropertiesPage.cc

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -375,8 +375,9 @@ PropertiesPage::count () const
375375
void
376376
PropertiesPage::select_entries (const std::vector<size_t> &entries)
377377
{
378-
tl_assert (entries.size () == 1);
379-
m_index = entries.front ();
378+
if (! entries.empty ()) {
379+
m_index = entries.front ();
380+
}
380381
}
381382

382383
std::string

src/db/db/dbShape.cc

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,47 @@ static NO_RETURN void raise_invalid_hole_index_on_simple_polygon ()
7373
// -------------------------------------------------------------------------------
7474
// Shape implementation
7575

76+
int Shape::layer () const
77+
{
78+
const db::Shapes *sh = shapes ();
79+
if (! sh) {
80+
return -1;
81+
}
82+
const db::Cell *cell = sh->cell ();
83+
if (! cell) {
84+
return -1;
85+
}
86+
87+
unsigned int li = cell->index_of_shapes (sh);
88+
return li < cell->layers () ? int (li) : -1;
89+
}
90+
91+
void Shape::set_layer (unsigned int layer_index)
92+
{
93+
db::Shapes *sh = shapes ();
94+
if (! sh) {
95+
return;
96+
}
97+
db::Cell *cell = sh->cell ();
98+
if (! cell) {
99+
return;
100+
}
101+
db::Layout *layout = cell->layout ();
102+
if (! layout || ! layout->is_valid_layer (layer_index)) {
103+
return;
104+
}
105+
106+
db::Shapes *target_sh = &cell->shapes (layer_index);
107+
if (target_sh != sh) {
108+
109+
// move the shape inside the cell
110+
db::Shape new_shape = target_sh->insert (*this);
111+
sh->erase_shape (*this);
112+
*this = new_shape;
113+
114+
}
115+
}
116+
76117
db::properties_id_type Shape::prop_id () const
77118
{
78119
if (m_with_props) {

src/db/db/dbShape.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1098,6 +1098,26 @@ class DB_PUBLIC Shape
10981098
m_type = UserObject;
10991099
}
11001100

1101+
/**
1102+
* @brief Gets the index of layer the shape sits in
1103+
*
1104+
* This getter only applies to shapes that are members of a cell
1105+
* and a layout.
1106+
* For other shapes this method returns -1.
1107+
*/
1108+
int layer () const;
1109+
1110+
/**
1111+
* @brief Changes the layer the shape sits in
1112+
*
1113+
* This setter applies to shapes are are members of a cell
1114+
* and a layout.
1115+
* Changing the layer effectively moves the shape to a different
1116+
* container. For invalid layer indexes or if the shape is
1117+
* not member of a cell and layout, this method does nothing.
1118+
*/
1119+
void set_layer (unsigned int layer_index);
1120+
11011121
/**
11021122
* @brief Get the properties Id associated with the shape
11031123
*/

src/db/unit_tests/dbShapeTests.cc

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1047,3 +1047,32 @@ TEST(10)
10471047
si = s.begin (db::ShapeIterator::All);
10481048
EXPECT_EQ (si->rectangle ().empty (), true);
10491049
}
1050+
1051+
// layer index setter/getter
1052+
TEST(20)
1053+
{
1054+
db::Shape sh0;
1055+
EXPECT_EQ (sh0.layer (), -1);
1056+
1057+
db::Layout ly (true);
1058+
1059+
unsigned int l1 = ly.get_layer (db::LayerProperties (1, 0));
1060+
unsigned int l2 = ly.get_layer (db::LayerProperties (2, 0));
1061+
1062+
db::Cell &top = ly.cell (ly.add_cell ("TOP"));
1063+
db::Shape sh = top.shapes (l1).insert (db::Box (0, 0, 1000, 2000));
1064+
1065+
EXPECT_EQ (top.shapes (l1).size (), size_t (1));
1066+
EXPECT_EQ (top.shapes (l2).size (), size_t (0));
1067+
1068+
EXPECT_EQ (sh.layer (), int (l1));
1069+
EXPECT_EQ (sh.to_string (), "box (0,0;1000,2000)");
1070+
1071+
sh.set_layer (l2);
1072+
1073+
EXPECT_EQ (sh.layer (), int (l2));
1074+
EXPECT_EQ (sh.to_string (), "box (0,0;1000,2000)");
1075+
1076+
EXPECT_EQ (top.shapes (l1).size (), size_t (0));
1077+
EXPECT_EQ (top.shapes (l2).size (), size_t (1));
1078+
}

src/edt/edt/BoxPropertiesPage.ui

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,10 @@
5353
</widget>
5454
</item>
5555
<item>
56-
<widget class="QLabel" name="layer_lbl">
56+
<widget class="QLabel" name="cell_lbl">
5757
<property name="sizePolicy">
58-
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
59-
<horstretch>0</horstretch>
58+
<sizepolicy hsizetype="Ignored" vsizetype="Preferred">
59+
<horstretch>1</horstretch>
6060
<verstretch>0</verstretch>
6161
</sizepolicy>
6262
</property>
@@ -68,6 +68,13 @@
6868
</property>
6969
</widget>
7070
</item>
71+
<item>
72+
<widget class="lay::LayerSelectionComboBox" name="layer_cbx">
73+
<property name="sizeAdjustPolicy">
74+
<enum>QComboBox::AdjustToContents</enum>
75+
</property>
76+
</widget>
77+
</item>
7178
</layout>
7279
</widget>
7380
</item>
@@ -576,6 +583,13 @@
576583
</item>
577584
</layout>
578585
</widget>
586+
<customwidgets>
587+
<customwidget>
588+
<class>lay::LayerSelectionComboBox</class>
589+
<extends>QComboBox</extends>
590+
<header>layWidgets.h</header>
591+
</customwidget>
592+
</customwidgets>
579593
<tabstops>
580594
<tabstop>mode_tab</tabstop>
581595
<tabstop>x1_le_1</tabstop>

src/edt/edt/EditablePathPropertiesPage.ui

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,6 @@
9696
<font>
9797
<family>Sans Serif</family>
9898
<pointsize>12</pointsize>
99-
<weight>75</weight>
10099
<italic>false</italic>
101100
<bold>true</bold>
102101
<underline>false</underline>
@@ -109,10 +108,10 @@
109108
</widget>
110109
</item>
111110
<item>
112-
<widget class="QLabel" name="layer_lbl">
111+
<widget class="QLabel" name="cell_lbl">
113112
<property name="sizePolicy">
114-
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
115-
<horstretch>0</horstretch>
113+
<sizepolicy hsizetype="Ignored" vsizetype="Preferred">
114+
<horstretch>1</horstretch>
116115
<verstretch>0</verstretch>
117116
</sizepolicy>
118117
</property>
@@ -124,6 +123,9 @@
124123
</property>
125124
</widget>
126125
</item>
126+
<item>
127+
<widget class="lay::LayerSelectionComboBox" name="layer_cbx"/>
128+
</item>
127129
</layout>
128130
</widget>
129131
</item>
@@ -334,6 +336,13 @@
334336
</item>
335337
</layout>
336338
</widget>
339+
<customwidgets>
340+
<customwidget>
341+
<class>lay::LayerSelectionComboBox</class>
342+
<extends>QComboBox</extends>
343+
<header>layWidgets.h</header>
344+
</customwidget>
345+
</customwidgets>
337346
<tabstops>
338347
<tabstop>width_le</tabstop>
339348
<tabstop>ptlist_le</tabstop>

src/edt/edt/PathPropertiesPage.ui

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,6 @@
264264
<font>
265265
<family>Sans Serif</family>
266266
<pointsize>12</pointsize>
267-
<weight>75</weight>
268267
<italic>false</italic>
269268
<bold>true</bold>
270269
<underline>false</underline>
@@ -277,10 +276,10 @@
277276
</widget>
278277
</item>
279278
<item>
280-
<widget class="QLabel" name="layer_lbl">
279+
<widget class="QLabel" name="cell_lbl">
281280
<property name="sizePolicy">
282-
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
283-
<horstretch>0</horstretch>
281+
<sizepolicy hsizetype="Ignored" vsizetype="Preferred">
282+
<horstretch>1</horstretch>
284283
<verstretch>0</verstretch>
285284
</sizepolicy>
286285
</property>
@@ -292,6 +291,13 @@
292291
</property>
293292
</widget>
294293
</item>
294+
<item>
295+
<widget class="lay::LayerSelectionComboBox" name="layer_cbx">
296+
<property name="sizeAdjustPolicy">
297+
<enum>QComboBox::AdjustToContents</enum>
298+
</property>
299+
</widget>
300+
</item>
295301
</layout>
296302
</widget>
297303
</item>
@@ -304,6 +310,13 @@
304310
</item>
305311
</layout>
306312
</widget>
313+
<customwidgets>
314+
<customwidget>
315+
<class>lay::LayerSelectionComboBox</class>
316+
<extends>QComboBox</extends>
317+
<header>layWidgets.h</header>
318+
</customwidget>
319+
</customwidgets>
307320
<tabstops>
308321
<tabstop>width_le</tabstop>
309322
<tabstop>ptlist_le</tabstop>

src/edt/edt/PointPropertiesPage.ui

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,10 @@
5353
</widget>
5454
</item>
5555
<item>
56-
<widget class="QLabel" name="layer_lbl">
56+
<widget class="QLabel" name="cell_lbl">
5757
<property name="sizePolicy">
58-
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
59-
<horstretch>0</horstretch>
58+
<sizepolicy hsizetype="Ignored" vsizetype="Preferred">
59+
<horstretch>1</horstretch>
6060
<verstretch>0</verstretch>
6161
</sizepolicy>
6262
</property>
@@ -68,6 +68,13 @@
6868
</property>
6969
</widget>
7070
</item>
71+
<item>
72+
<widget class="lay::LayerSelectionComboBox" name="layer_cbx">
73+
<property name="sizeAdjustPolicy">
74+
<enum>QComboBox::AdjustToContents</enum>
75+
</property>
76+
</widget>
77+
</item>
7178
</layout>
7279
</widget>
7380
</item>
@@ -271,6 +278,13 @@
271278
</item>
272279
</layout>
273280
</widget>
281+
<customwidgets>
282+
<customwidget>
283+
<class>lay::LayerSelectionComboBox</class>
284+
<extends>QComboBox</extends>
285+
<header>layWidgets.h</header>
286+
</customwidget>
287+
</customwidgets>
274288
<tabstops>
275289
<tabstop>x_le</tabstop>
276290
<tabstop>y_le</tabstop>

src/edt/edt/PolygonPropertiesPage.ui

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,6 @@
109109
<font>
110110
<family>Sans Serif</family>
111111
<pointsize>12</pointsize>
112-
<weight>75</weight>
113112
<italic>false</italic>
114113
<bold>true</bold>
115114
<underline>false</underline>
@@ -122,10 +121,10 @@
122121
</widget>
123122
</item>
124123
<item>
125-
<widget class="QLabel" name="layer_lbl">
124+
<widget class="QLabel" name="cell_lbl">
126125
<property name="sizePolicy">
127-
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
128-
<horstretch>0</horstretch>
126+
<sizepolicy hsizetype="Ignored" vsizetype="Preferred">
127+
<horstretch>1</horstretch>
129128
<verstretch>0</verstretch>
130129
</sizepolicy>
131130
</property>
@@ -137,6 +136,13 @@
137136
</property>
138137
</widget>
139138
</item>
139+
<item>
140+
<widget class="lay::LayerSelectionComboBox" name="layer_cbx">
141+
<property name="sizeAdjustPolicy">
142+
<enum>QComboBox::AdjustToContents</enum>
143+
</property>
144+
</widget>
145+
</item>
140146
</layout>
141147
</widget>
142148
</item>
@@ -225,6 +231,13 @@
225231
</item>
226232
</layout>
227233
</widget>
234+
<customwidgets>
235+
<customwidget>
236+
<class>lay::LayerSelectionComboBox</class>
237+
<extends>QComboBox</extends>
238+
<header>layWidgets.h</header>
239+
</customwidget>
240+
</customwidgets>
228241
<tabstops>
229242
<tabstop>pointListEdit</tabstop>
230243
<tabstop>dbu_cb</tabstop>

0 commit comments

Comments
 (0)