]> Shamusworld >> Repos - architektonas/blob - src/widgets/linetypebox.cpp
Sanity check stage II: rename classes...
[architektonas] / src / widgets / linetypebox.cpp
1 // linetypebox.cpp
2 //
3 // Part of the Architektonas Project
4 // Originally part of QCad Community Edition by Andrew Mustun
5 // Extensively rewritten and refactored by James L. Hammons
6 // Portions copyright (C) 2001-2003 RibbonSoft
7 // Copyright (C) 2010 Underground Software
8 // See the README and GPLv2 files for licensing and warranty information
9 //
10 // JLH = James L. Hammons <jlhamm@acm.org>
11 //
12 // Who  When        What
13 // ---  ----------  -----------------------------------------------------------
14 // JLH  05/11/2010  Added this text. :-)
15 //
16
17 #include "linetypebox.h"
18
19 #include "rs_debug.h"
20
21 /**
22  * Default Constructor. You must call init manually if you choose
23  * to use this constructor.
24  */
25 LineTypeBox::LineTypeBox(QWidget * parent, const char */*name*/): QComboBox(parent)
26 {
27         showByLayer = false;
28         showUnchanged = false;
29         unchanged = false;
30 }
31
32 /**
33  * Constructor that calls init and provides a fully functional
34  * combobox for choosing linetypes.
35  *
36  * @param showByLayer true: Show attribute ByLayer, ByBlock.
37  */
38 LineTypeBox::LineTypeBox(bool showByLayer, bool showUnchanged, QWidget * parent,
39         const char */*name*/): QComboBox(parent)
40 {
41         unchanged = false;
42     init(showByLayer, showUnchanged);
43 }
44
45 /**
46  * Destructor
47  */
48 LineTypeBox::~LineTypeBox()
49 {
50 }
51
52 /**
53  * Initialisation (called from constructor or manually but only
54  * once).
55  *
56  * @param showByLayer true: Show attribute ByLayer, ByBlock.
57  */
58 void LineTypeBox::init(bool showByLayer, bool showUnchanged)
59 {
60         this->showByLayer = showByLayer;
61         this->showUnchanged = showUnchanged;
62
63         if (showUnchanged)
64 //              addItem(QIcon(linetype00_xpm), tr("- Unchanged -"));
65                 addItem(QIcon(":/res/linetype00.xpm"), tr("- Unchanged -"));
66
67         if (showByLayer)
68         {
69 //              addItem(QIcon(linetype00_xpm), tr("By Layer"));
70 //              addItem(QIcon(linetype00_xpm), tr("By Block"));
71                 addItem(QIcon(":/res/linetype00.xpm"), tr("By Layer"));
72                 addItem(QIcon(":/res/linetype00.xpm"), tr("By Block"));
73         }
74
75 /*      addItem(QIcon(linetype00_xpm), tr("No Pen"));
76         addItem(QIcon(linetype01_xpm), tr("Continuous"));
77         addItem(QIcon(linetype02_xpm), tr("Dot"));
78         addItem(QIcon(linetype02_xpm), tr("Dot (small)"));
79         addItem(QIcon(linetype02_xpm), tr("Dot (large)"));
80         addItem(QIcon(linetype03_xpm), tr("Dash"));
81         addItem(QIcon(linetype03_xpm), tr("Dash (small)"));
82         addItem(QIcon(linetype03_xpm), tr("Dash (large)"));
83         addItem(QIcon(linetype04_xpm), tr("Dash Dot"));
84         addItem(QIcon(linetype04_xpm), tr("Dash Dot (small)"));
85         addItem(QIcon(linetype04_xpm), tr("Dash Dot (large)"));
86         addItem(QIcon(linetype05_xpm), tr("Divide"));
87         addItem(QIcon(linetype05_xpm), tr("Divide (small)"));
88         addItem(QIcon(linetype05_xpm), tr("Divide (large)"));
89         addItem(QIcon(linetype06_xpm), tr("Center"));
90         addItem(QIcon(linetype06_xpm), tr("Center (small)"));
91         addItem(QIcon(linetype06_xpm), tr("Center (large)"));
92         addItem(QIcon(linetype07_xpm), tr("Border"));
93         addItem(QIcon(linetype07_xpm), tr("Border (small)"));
94         addItem(QIcon(linetype07_xpm), tr("Border (large)"));*/
95         addItem(QIcon(":/res/linetype00.xpm"), tr("No Pen"));
96         addItem(QIcon(":/res/linetype01.xpm"), tr("Continuous"));
97         addItem(QIcon(":/res/linetype02.xpm"), tr("Dot"));
98         addItem(QIcon(":/res/linetype02.xpm"), tr("Dot (small)"));
99         addItem(QIcon(":/res/linetype02.xpm"), tr("Dot (large)"));
100         addItem(QIcon(":/res/linetype03.xpm"), tr("Dash"));
101         addItem(QIcon(":/res/linetype03.xpm"), tr("Dash (small)"));
102         addItem(QIcon(":/res/linetype03.xpm"), tr("Dash (large)"));
103         addItem(QIcon(":/res/linetype04.xpm"), tr("Dash Dot"));
104         addItem(QIcon(":/res/linetype04.xpm"), tr("Dash Dot (small)"));
105         addItem(QIcon(":/res/linetype04.xpm"), tr("Dash Dot (large)"));
106         addItem(QIcon(":/res/linetype05.xpm"), tr("Divide"));
107         addItem(QIcon(":/res/linetype05.xpm"), tr("Divide (small)"));
108         addItem(QIcon(":/res/linetype05.xpm"), tr("Divide (large)"));
109         addItem(QIcon(":/res/linetype06.xpm"), tr("Center"));
110         addItem(QIcon(":/res/linetype06.xpm"), tr("Center (small)"));
111         addItem(QIcon(":/res/linetype06.xpm"), tr("Center (large)"));
112         addItem(QIcon(":/res/linetype07.xpm"), tr("Border"));
113         addItem(QIcon(":/res/linetype07.xpm"), tr("Border (small)"));
114         addItem(QIcon(":/res/linetype07.xpm"), tr("Border (large)"));
115
116         connect(this, SIGNAL(activated(int)), this, SLOT(slotLineTypeChanged(int)));
117
118         setCurrentIndex(0);
119         slotLineTypeChanged(currentIndex());
120 }
121
122 RS2::LineType LineTypeBox::getLineType()
123 {
124         return currentLineType;
125 }
126
127 /**
128  * Sets the currently selected linetype item to the given linetype.
129  */
130 void LineTypeBox::setLineType(RS2::LineType t)
131 {
132         RS_DEBUG->print("LineTypeBox::setLineType %d\n", (int)t);
133
134         int offset = (int)showByLayer * 2 + (int)showUnchanged;
135
136         switch (t)
137         {
138         case RS2::LineByLayer:
139                 if (showByLayer)
140                         setCurrentIndex(0 + (int)showUnchanged);
141                 else
142                         RS_DEBUG->print(RS_Debug::D_WARNING, "LineTypeBox::setLineType: "
143                                 "Combobox doesn't support linetype BYLAYER");
144                 break;
145         case RS2::LineByBlock:
146                 if (showByLayer)
147                         setCurrentIndex(1 + (int)showUnchanged);
148                 else
149                         RS_DEBUG->print(RS_Debug::D_WARNING, "LineTypeBox::setLineType: "
150                                 "Combobox doesn't support linetype BYBLOCK");
151                 break;
152
153         case RS2::SolidLine:
154                 setCurrentIndex(1 + offset);
155                 break;
156
157         case RS2::DotLine:
158                 setCurrentIndex(2 + offset);
159                 break;
160         case RS2::DotLine2:
161                 setCurrentIndex(3 + offset);
162                 break;
163         case RS2::DotLineX2:
164                 setCurrentIndex(4 + offset);
165                 break;
166
167         case RS2::DashLine:
168                 setCurrentIndex(5 + offset);
169                 break;
170         case RS2::DashLine2:
171                 setCurrentIndex(6 + offset);
172                 break;
173         case RS2::DashLineX2:
174                 setCurrentIndex(7 + offset);
175                 break;
176
177         case RS2::DashDotLine:
178                 setCurrentIndex(8 + offset);
179                 break;
180         case RS2::DashDotLine2:
181                 setCurrentIndex(9 + offset);
182                 break;
183         case RS2::DashDotLineX2:
184                 setCurrentIndex(10 + offset);
185                 break;
186
187         case RS2::DivideLine:
188                 setCurrentIndex(11 + offset);
189                 break;
190         case RS2::DivideLine2:
191                 setCurrentIndex(12 + offset);
192                 break;
193         case RS2::DivideLineX2:
194                 setCurrentIndex(13 + offset);
195                 break;
196
197         case RS2::CenterLine:
198                 setCurrentIndex(14 + offset);
199                 break;
200         case RS2::CenterLine2:
201                 setCurrentIndex(15 + offset);
202                 break;
203         case RS2::CenterLineX2:
204                 setCurrentIndex(16 + offset);
205                 break;
206
207         case RS2::BorderLine:
208                 setCurrentIndex(17 + offset);
209                 break;
210         case RS2::BorderLine2:
211                 setCurrentIndex(18 + offset);
212                 break;
213         case RS2::BorderLineX2:
214                 setCurrentIndex(19 + offset);
215                 break;
216
217         default:
218                 break;
219         }
220
221         slotLineTypeChanged(currentIndex());
222 }
223
224 /**
225  * Sets the pixmap showing the linetype of the "By Layer" item.
226  *
227  * @todo needs an update, but not used currently
228  */
229 void LineTypeBox::setLayerLineType(RS2::LineType t)
230 {
231         if (showByLayer)
232         {
233                 QPixmap pixmap;
234                 switch(t)
235                 {
236                 case RS2::NoPen:
237 //                      pixmap = QPixmap(linetype00_xpm);
238                         pixmap = QPixmap(":/res/linetype00.xpm");
239                         break;
240                 default:
241                 case RS2::SolidLine:
242 //                      pixmap = QPixmap(linetype01_xpm);
243                         pixmap = QPixmap(":/res/linetype01.xpm");
244                         break;
245                 case RS2::DashLine:
246 //                      pixmap = QPixmap(linetype02_xpm);
247                         pixmap = QPixmap(":/res/linetype02.xpm");
248                         break;
249                 case RS2::DotLine:
250 //                      pixmap = QPixmap(linetype03_xpm);
251                         pixmap = QPixmap(":/res/linetype03.xpm");
252                         break;
253                 case RS2::DashDotLine:
254 //                      pixmap = QPixmap(linetype04_xpm);
255                         pixmap = QPixmap(":/res/linetype04.xpm");
256                         break;
257                 case RS2::DivideLine:
258 //                      pixmap = QPixmap(linetype05_xpm);
259                         pixmap = QPixmap(":/res/linetype05.xpm");
260                         break;
261                 }
262
263 //              changeItem(pixmap, tr("By Layer"), 0);
264                 setItemIcon(0, QIcon(pixmap));
265                 setItemText(0, tr("By Layer"));
266
267                 // needed for the first time a layer is added:
268                 slotLineTypeChanged(currentIndex());
269         }
270 }
271
272 bool LineTypeBox::isUnchanged()
273 {
274         return unchanged;
275 }
276
277 /**
278  * Called when the linetype has changed. This method
279  * sets the current linetype to the value chosen or even
280  * offers a dialog to the user that allows him/ her to
281  * choose an individual linetype.
282  */
283 void LineTypeBox::slotLineTypeChanged(int index)
284 {
285         RS_DEBUG->print("LineTypeBox::slotLineTypeChanged %d\n", index);
286
287         unchanged = false;
288
289         if (showByLayer)
290         {
291                 switch (index)
292                 {
293                 case 0:
294                         if (showUnchanged)
295                                 unchanged = true;
296                         else
297                                 currentLineType = RS2::LineByLayer;
298                         break;
299
300                 case 1:
301                         if (showUnchanged)
302                                 currentLineType = RS2::LineByLayer;
303                         else
304                                 currentLineType = RS2::LineByBlock;
305                         break;
306
307                 default:
308                         currentLineType = (RS2::LineType)(index - 2 - (int)showUnchanged);
309                         break;
310                 }
311         }
312         else
313                 currentLineType = (RS2::LineType)(index - (int)showByLayer * 2 - (int)showUnchanged);
314
315         RS_DEBUG->print("Current linetype is (%d): %d\n", index, currentLineType);
316
317         emit lineTypeChanged(currentLineType);
318 }