]> Shamusworld >> Repos - architektonas/blob - src/forms/linerelangleoptions.cpp
df93bb998c533b730530367e6a5deeb191bb4641
[architektonas] / src / forms / linerelangleoptions.cpp
1 // linerelangleoptions.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 // (C) 2010 Underground Software
7 //
8 // JLH = James L. Hammons <jlhamm@acm.org>
9 //
10 // Who  When        What
11 // ---  ----------  -----------------------------------------------------------
12 // JLH  06/10/2010  Created this file. :-)
13 //
14
15 #include "linerelangleoptions.h"
16
17 #include "actiondrawlinerelangle.h"
18 #include "settings.h"
19
20 LineRelAngleOptions::LineRelAngleOptions(QToolBar * parent/*= 0*/, Qt::WindowFlags flags/*= 0*/):
21         QWidget(parent, flags),
22         lAngle(new QLabel(tr("Angle:"))),
23         leAngle(new QLineEdit(this)),
24         lLength(new QLabel(tr("Length:"))),
25         leLength(new QLineEdit(this))
26 {
27         QHBoxLayout * layout = new QHBoxLayout(this);
28         layout->setContentsMargins(0, 0, 0, 0);
29
30         leAngle->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Ignored));
31         leLength->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Ignored));
32
33         layout->addWidget(lAngle);
34         layout->addWidget(leAngle);
35         layout->addWidget(lLength);
36         layout->addWidget(leLength);
37
38         connect(leAngle, SIGNAL(textChanged(QString)), this, SLOT(updateAngle(QString)));
39         connect(leLength, SIGNAL(textChanged(QString)), this, SLOT(updateLength(QString)));
40
41         // We need to add the widget (this thing) to the toolbar passed in. Otherwise,
42         // nothing will show up on the screen. :-)
43         if (parent)
44                 parent->addWidget(this);
45 }
46
47 LineRelAngleOptions::~LineRelAngleOptions()
48 {
49         if (action != NULL)
50         {
51                 settings.beginGroup("Draw");
52
53                 if (!action->hasFixedAngle())
54                         settings.value("LineRelAngleAngle", RS_Math::rad2deg(action->getAngle()));
55
56                 settings.value("LineRelAngleLength", action->getLength());
57                 settings.endGroup();
58         }
59 }
60
61 void LineRelAngleOptions::setAction(ActionInterface * a, bool update)
62 {
63         if (a != NULL && a->rtti() == RS2::ActionDrawLineRelAngle)
64         {
65                 action = (ActionDrawLineRelAngle *)a;
66
67                 if (action->hasFixedAngle())
68                 {
69                         lAngle->setDisabled(true);
70                         leAngle->setDisabled(true);
71                 }
72
73                 QString sa;
74                 QString sl;
75
76                 // settings from action:
77                 if (update)
78                 {
79                         sa = QString("%1").arg(RS_Math::rad2deg(action->getAngle()));
80                         sl = QString("%1").arg(action->getLength());
81                 }
82                 // settings from config file:
83                 else
84                 {
85                         settings.beginGroup("Draw");
86
87                         if (!action->hasFixedAngle())
88                                 sa = settings.value("LineRelAngleAngle", "30.0").toString();
89                         else
90                                 sa = QString("%1").arg(RS_Math::rad2deg(action->getAngle()));
91
92                         sl = settings.value("LineRelAngleLength", "10.0").toString();
93                         settings.endGroup();
94                 }
95
96                 leAngle->setText(sa);
97                 leLength->setText(sl);
98         }
99         else
100         {
101                 RS_DEBUG->print(RS_Debug::D_ERROR,
102                         "LineRelAngleOptions::setAction: wrong action type");
103                 this->action = NULL;
104         }
105 }
106
107 void LineRelAngleOptions::updateAngle(const QString & a)
108 {
109         if (action != NULL && !action->hasFixedAngle())
110                 action->setAngle(RS_Math::deg2rad(RS_Math::eval(a)));
111 }
112
113 void LineRelAngleOptions::updateLength(const QString & l)
114 {
115         if (action != NULL)
116                 action->setLength(RS_Math::eval(l));
117 }