]> Shamusworld >> Repos - architektonas/blob - src/objectwidget.cpp
Added ability to manipulate Text objects.
[architektonas] / src / objectwidget.cpp
1 // objectwidget.cpp: Object tweaking widget
2 //
3 // Part of the Architektonas Project
4 // (C) 2016 Underground Software
5 // See the README and GPLv3 files for licensing and warranty information
6 //
7 // JLH = James Hammons <jlhamm@acm.org>
8 //
9 // WHO  WHEN        WHAT
10 // ---  ----------  ------------------------------------------------------------
11 // JLH  11/07/2016  Created this file
12 //
13
14 #include "objectwidget.h"
15 #include "mathconstants.h"
16
17
18 ObjectWidget::ObjectWidget(void): QWidget()
19 {
20 #if 0
21         QListWidget * qlw = new QListWidget;
22         QListWidgetItem * qli1 = new QListWidgetItem(qlw);
23         QListWidgetItem * qli2 = new QListWidgetItem(qlw);
24         QListWidgetItem * qli3 = new QListWidgetItem(qlw);
25         QListWidgetItem * qli4 = new QListWidgetItem(qlw);
26         QListWidgetItem * qli5 = new QListWidgetItem(qlw);
27 #endif
28         label = new QLabel;
29
30 #if 0
31         QPushButton * pb1 = new QPushButton("+");
32         QPushButton * pb2 = new QPushButton("-");
33         QPushButton * pb3 = new QPushButton("Edit");
34         QPushButton * pb4 = new QPushButton("Import");
35 #else
36         QToolButton * pb1 = new QToolButton;
37         QToolButton * pb2 = new QToolButton;
38         QToolButton * pb3 = new QToolButton;
39         QToolButton * pb4 = new QToolButton;
40
41         pb1->setIcon(QIcon(":/res/layer-add.png"));
42         pb2->setIcon(QIcon(":/res/layer-delete.png"));
43         pb3->setIcon(QIcon(":/res/layer-edit.png"));
44         pb4->setIcon(QIcon(":/res/block-import.png"));
45
46         pb1->setToolTip(tr("Add block"));
47         pb2->setToolTip(tr("Remove block"));
48         pb3->setToolTip(tr("Edit block"));
49         pb4->setToolTip(tr("Import block"));
50 #endif
51
52         QHBoxLayout * hbox1 = new QHBoxLayout;
53         hbox1->addWidget(pb1);
54         hbox1->addWidget(pb2);
55         hbox1->addWidget(pb3);
56         hbox1->addWidget(pb4);
57         hbox1->addStretch();
58
59         QVBoxLayout * mainLayout = new QVBoxLayout;
60         mainLayout->addWidget(label);
61         mainLayout->addLayout(hbox1);
62
63         setLayout(mainLayout);
64 }
65
66
67 ObjectWidget::~ObjectWidget()
68 {
69 }
70
71
72 void ObjectWidget::ShowInfo(Object * obj)
73 {
74         const char objName[OTCount][16] = {
75                 "None", "Line", "Circle", "Ellipse", "Arc", "Polygon", "Dimension", "Spline", "Text", "Container"
76         };
77         const char dimName[DTCount][32] = {
78                 "Linear", "Vertical", "Horizontal", "Radial", "Diametric",
79                 "Circumferential", "Angular", "Leader"
80         };
81
82         // Sanity check
83         if (obj == NULL)
84                 return;
85
86         QString s = QString("%1<br><br>").arg(QString(objName[obj->type]));
87
88         switch (obj->type)
89         {
90         case OTLine:
91         {
92                 Vector line(obj->p[0], obj->p[1]);
93                 s += QString("&lt;%1, %2&gt; to &lt;%3, %4&gt;<br>Length: %5<br>Angle: %6&#x00B0;<br>").arg(obj->p[0].x).arg(obj->p[0].y).arg(obj->p[1].x).arg(obj->p[1].y).arg(line.Magnitude()).arg(line.Angle() * RADIANS_TO_DEGREES);
94                 break;
95         }
96
97         case OTCircle:
98                 s += QString("Center: &lt;%1, %2&gt;<br>Radius: %3<br>").arg(obj->p[0].x).arg(obj->p[0].y).arg(obj->radius[0]);
99                 break;
100
101         case OTEllipse:
102                 break;
103
104         case OTArc:
105                 s += QString("Center: &lt;%1, %2&gt;<br>Radius: %3<br>Start: %4&#x00B0;<br>End: %5&#x00B0;<br>").arg(obj->p[0].x).arg(obj->p[0].y).arg(obj->radius[0]).arg(obj->angle[0] * RADIANS_TO_DEGREES).arg(obj->angle[1] * RADIANS_TO_DEGREES);
106                 break;
107                 break;
108
109         case OTPolygon:
110                 break;
111
112         case OTDimension:
113                 break;
114
115         case OTSpline:
116                 break;
117
118         case OTText:
119         {
120                 Text * t = (Text *)obj;
121                 s += QString("&lt;%1, %2&gt;<br>Width/Height: %3/%4<br>Angle: %5&#x00B0;<br>").arg(t->p[0].x).arg(t->p[0].y).arg(t->extents.Width()).arg(t->extents.Height()).arg(obj->angle[0] * RADIANS_TO_DEGREES);
122                 break;
123         }
124
125         case OTContainer:
126                 break;
127
128         default:
129                 break;
130         }
131
132         label->setText(s);
133 }
134