4 * John Levon, moz@compsoc.man.ac.uk
7 #include "lengthentry.h"
10 #include <krestrictedline.h>
11 #include <qcombobox.h>
13 #include "support/lstrings.h"
21 * Allows editing of LyXLengths
26 LengthEntry::LengthEntry(QWidget * parent, const char * name)
27 : QWidget(parent,name), value(0), box(0), topLayout(0)
29 value = new KRestrictedLine(this, "value");
30 value->setMinimumSize(value->sizeHint());
31 value->setMaximumHeight(value->sizeHint().height());
32 value->setValidChars("0123456789.,");
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());
49 topLayout = new QVBoxLayout(this, 10);
50 QHBoxLayout *tmp = new QHBoxLayout();
51 topLayout->addLayout(tmp);
54 tmp->addWidget(value, 1);
57 tmp->addWidget(box, 2);
61 LengthEntry::~LengthEntry()
65 const string LengthEntry::getLengthStr() const
67 if (value->text() == "")
70 double val = getValue();
72 return tostr(val) + getStrUnits();
75 double LengthEntry::getValue() const
77 return strToDbl(value->text());
80 const string LengthEntry::getStrUnits() const
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");
96 "LengthEntry: Unknown combo choice " << box->currentItem() << endl;
101 LyXLength::UNIT LengthEntry::getUnits() const
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;
116 lyxerr[Debug::GUI] <<
117 "LengthEntry: Unknown combo choice " << box->currentItem() << endl;
119 return LyXLength::UNIT_NONE;
122 bool LengthEntry::setFromLengthStr(const string & str)
127 lyxerr[Debug::GUI] << "setFromLengthStr: " << str << endl;
129 string::size_type i = str.find_first_not_of("0123456789.,");
131 setValue(strToDbl(str.substr(0, i)));
133 if (i == string::npos)
136 return setUnits(str.substr(i));
139 void LengthEntry::setValue(double val)
141 value->setText(tostr(val).c_str());
144 void LengthEntry::setValue(const string & str)
146 value->setText(str.c_str());
149 bool LengthEntry::setUnits(const string & str)
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);
163 lyxerr[Debug::GUI] <<
164 "LengthEntry: Unknown unit " << str << endl;
165 box->setCurrentItem(0);
171 bool LengthEntry::setUnits(LyXLength::UNIT 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;
188 lyxerr[Debug::GUI] << "Unknown unit " << long(unit) << endl;
194 void LengthEntry::setEnabled(bool enable)
196 box->setEnabled(enable);
197 value->setEnabled(enable);