]> git.lyx.org Git - lyx.git/blob - src/frontends/kde/dlg/lengthentry.C
FormDocument and various fixes.
[lyx.git] / src / frontends / kde / dlg / lengthentry.C
1 /*
2  * lengthentry.C
3  * (C) 2001 LyX Team
4  * John Levon, moz@compsoc.man.ac.uk
5  */
6
7 #include "lengthentry.h"
8
9 #include <qlayout.h>
10 #include <krestrictedline.h>
11 #include <qcombobox.h>
12
13 #include "support/lstrings.h"
14
15 #include <config.h>
16 #include <gettext.h>
17
18 #include "debug.h"
19
20 /**
21  * Allows editing of LyXLengths
22  */
23
24 using std::endl;
25
26 LengthEntry::LengthEntry(QWidget * parent, const char * name)
27         : QWidget(parent,name), value(0), box(0), topLayout(0)
28 {
29         value = new KRestrictedLine(this, "value");
30         value->setMinimumSize(value->sizeHint());
31         value->setMaximumHeight(value->sizeHint().height());
32         value->setValidChars("0123456789.,");
33
34         box = new QComboBox(this, "box");
35         box->insertItem(_("Centimetres"));
36         box->insertItem(_("Inches"));
37         box->insertItem(_("Points"));
38         box->insertItem(_("Millimetres"));
39         box->insertItem(_("Picas"));
40         box->insertItem(_("ex units"));
41         box->insertItem(_("em units"));
42         box->insertItem(_("Scaled points"));
43         box->insertItem(_("Big/PS points"));
44         box->insertItem(_("Didot points"));
45         box->insertItem(_("Cicero points"));
46         box->setMinimumSize(box->sizeHint());
47         box->setMaximumHeight(box->sizeHint().height());
48
49         topLayout = new QVBoxLayout(this, 10);
50         QHBoxLayout *tmp = new QHBoxLayout();
51         topLayout->addLayout(tmp);
52
53         tmp->addStretch(1);
54         tmp->addWidget(value, 1);
55         tmp->addStretch(1);
56         tmp->addSpacing(5); 
57         tmp->addWidget(box, 2);
58         tmp->addStretch(1);
59 }
60
61 LengthEntry::~LengthEntry()
62 {
63 }
64
65 const string LengthEntry::getLengthStr() const
66 {
67         if (value->text() == "")
68                 return string("");
69
70         double val = getValue();
71
72         return tostr(val) + getStrUnits();
73 }
74
75 double LengthEntry::getValue() const
76 {
77         return strToDbl(value->text());
78 }
79
80 const string LengthEntry::getStrUnits() const
81 {
82         switch (box->currentItem()) {
83                 case 0: return string("cm");
84                 case 1: return string("in");
85                 case 2: return string("pt");
86                 case 3: return string("mm");
87                 case 4: return string("pc");
88                 case 5: return string("ex");
89                 case 6: return string("em");
90                 case 7: return string("sp");
91                 case 8: return string("bp");
92                 case 9: return string("dd");
93                 case 10: return string("cc");
94                 default:
95                         lyxerr[Debug::GUI] <<
96                                 "LengthEntry: Unknown combo choice " << box->currentItem() << endl;
97         }
98         return string("");
99 }
100         
101 LyXLength::UNIT LengthEntry::getUnits() const
102 {
103         switch (box->currentItem()) {
104                 case 0: return LyXLength::CM;
105                 case 1: return LyXLength::IN;
106                 case 2: return LyXLength::PT;
107                 case 3: return LyXLength::MM;
108                 case 4: return LyXLength::PC;
109                 case 5: return LyXLength::EX;
110                 case 6: return LyXLength::EM;
111                 case 7: return LyXLength::SP;
112                 case 8: return LyXLength::BP;
113                 case 9: return LyXLength::DD;
114                 case 10: return LyXLength::CC;
115                 default:
116                         lyxerr[Debug::GUI] <<
117                                 "LengthEntry: Unknown combo choice " << box->currentItem() << endl;
118         }
119         return LyXLength::UNIT_NONE;
120 }
121
122 bool LengthEntry::setFromLengthStr(const string & str)
123 {
124         string units;
125         string val;
126
127         lyxerr[Debug::GUI] << "setFromLengthStr: " << str << endl;
128         
129         string::size_type i = str.find_first_not_of("0123456789.,");
130
131         setValue(strToDbl(str.substr(0, i)));
132
133         if (i == string::npos)
134                 return true;
135
136         return setUnits(str.substr(i));
137 }
138
139 void LengthEntry::setValue(double val)
140 {
141         value->setText(tostr(val).c_str());
142 }
143
144 void LengthEntry::setValue(const string & str)
145 {
146         value->setText(str.c_str());
147 }
148
149 bool LengthEntry::setUnits(const string & str)
150 {
151         if (str == "cm") { setUnits(LyXLength::CM);
152         } else if (str == "in") { setUnits(LyXLength::IN);
153         } else if (str == "pt") { setUnits(LyXLength::PT);
154         } else if (str == "mm") { setUnits(LyXLength::MM);
155         } else if (str == "pc") { setUnits(LyXLength::PC);
156         } else if (str == "ex") { setUnits(LyXLength::EX);
157         } else if (str == "em") { setUnits(LyXLength::EM);
158         } else if (str == "sp") { setUnits(LyXLength::SP);
159         } else if (str == "bp") { setUnits(LyXLength::BP);
160         } else if (str == "dd") { setUnits(LyXLength::DD);
161         } else if (str == "cc") { setUnits(LyXLength::CC);
162         } else {
163                 lyxerr[Debug::GUI] <<
164                         "LengthEntry: Unknown unit " << str << endl;
165                 box->setCurrentItem(0);
166                 return false;
167         }
168         return true;
169 }
170
171 bool LengthEntry::setUnits(LyXLength::UNIT unit)
172 {
173         switch (unit) {
174                 case LyXLength::CM: box->setCurrentItem(0); break;
175                 case LyXLength::IN: box->setCurrentItem(1); break;
176                 case LyXLength::PT: box->setCurrentItem(2); break;
177                 case LyXLength::MM: box->setCurrentItem(3); break;
178                 case LyXLength::PC: box->setCurrentItem(4); break;
179                 case LyXLength::EX: box->setCurrentItem(5); break;
180                 case LyXLength::EM: box->setCurrentItem(6); break;
181                 case LyXLength::SP: box->setCurrentItem(7); break;
182                 case LyXLength::BP: box->setCurrentItem(8); break;
183                 case LyXLength::DD: box->setCurrentItem(9); break;
184                 case LyXLength::CC: box->setCurrentItem(10); break;
185                 case LyXLength::MU: box->setCurrentItem(0); break;
186                 case LyXLength::UNIT_NONE: box->setCurrentItem(0); break;
187                 default:
188                         lyxerr[Debug::GUI] << "Unknown unit " << long(unit) << endl;
189                         return false;
190         }
191         return true;
192 }
193
194 void LengthEntry::setEnabled(bool enable)
195 {
196         box->setEnabled(enable);
197         value->setEnabled(enable);
198 }