4 * John Levon, moz@compsoc.man.ac.uk
7 /***************************************************************************
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
14 ***************************************************************************/
17 #include "support/lstrings.h"
26 ParaDialog::ParaDialog(FormParagraph *form, QWidget *parent, const char *name, bool, WFlags)
27 : ParaDialogData(parent,name), form_(form)
31 generalpage = new ParaGeneralDialog(this, "generalpage");
32 extrapage = new ParaExtraDialog(this, "extrapage");
34 tabstack->addTabPage(generalpage, _("&General"));
35 tabstack->addTabPage(extrapage, _("&Extra"));
38 ParaDialog::~ParaDialog()
42 void ParaDialog::closeEvent(QCloseEvent *e)
48 void ParaDialog::setReadOnly(bool readonly)
50 generalpage->alignment->setEnabled(!readonly);
51 generalpage->lineabove->setEnabled(!readonly);
52 generalpage->linebelow->setEnabled(!readonly);
53 generalpage->abovepage->pagebreakabove->setEnabled(!readonly);
54 generalpage->belowpage->pagebreakbelow->setEnabled(!readonly);
55 generalpage->abovepage->keepabove->setEnabled(!readonly);
56 generalpage->belowpage->keepbelow->setEnabled(!readonly);
57 generalpage->noindent->setEnabled(!readonly);
58 generalpage->abovepage->spaceabove->setEnabled(!readonly);
59 generalpage->belowpage->spacebelow->setEnabled(!readonly);
60 generalpage->abovepage->spaceabovevalue->setEnabled(!readonly);
61 generalpage->belowpage->spacebelowvalue->setEnabled(!readonly);
62 generalpage->abovepage->spaceabovevalueunits->setEnabled(!readonly);
63 generalpage->belowpage->spacebelowvalueunits->setEnabled(!readonly);
64 generalpage->abovepage->spaceaboveplus->setEnabled(!readonly);
65 generalpage->belowpage->spacebelowplus->setEnabled(!readonly);
66 generalpage->abovepage->spaceaboveplusunits->setEnabled(!readonly);
67 generalpage->belowpage->spacebelowplusunits->setEnabled(!readonly);
68 generalpage->abovepage->spaceaboveminus->setEnabled(!readonly);
69 generalpage->belowpage->spacebelowminus->setEnabled(!readonly);
70 generalpage->abovepage->spaceaboveminusunits->setEnabled(!readonly);
71 generalpage->belowpage->spacebelowminusunits->setEnabled(!readonly);
72 generalpage->block->setEnabled(!readonly);
73 generalpage->left->setEnabled(!readonly);
74 generalpage->right->setEnabled(!readonly);
75 generalpage->center->setEnabled(!readonly);
76 generalpage->labelwidth->setEnabled(!readonly);
77 extrapage->specialalignment->setEnabled(!readonly);
78 extrapage->type->setEnabled(!readonly);
79 extrapage->widthvalue->setEnabled(!readonly);
80 extrapage->widthvalueunits->setEnabled(!readonly);
81 extrapage->hfillbetween->setEnabled(!readonly);
82 extrapage->startnewminipage->setEnabled(!readonly);
83 extrapage->top->setEnabled(!readonly);
84 extrapage->middle->setEnabled(!readonly);
85 extrapage->bottom->setEnabled(!readonly);
86 ok->setEnabled(!readonly);
87 apply->setEnabled(!readonly);
88 restore->setEnabled(!readonly);
89 cancel->setText(readonly ? _("&Close") : _("&Cancel"));
92 void ParaDialog::setLabelWidth(const char *text)
94 // FIXME: should be cleverer here
95 if (!strcmp(_("Senseless with this layout!"),text)) {
96 generalpage->labelwidth->setText("");
97 generalpage->labelwidth->setEnabled(false);
99 generalpage->labelwidth->setText(text);
100 generalpage->labelwidth->setEnabled(true);
104 void ParaDialog::setAlign(int type)
107 case LYX_ALIGN_RIGHT:
108 generalpage->right->setChecked(true);
111 generalpage->left->setChecked(true);
113 case LYX_ALIGN_CENTER:
114 generalpage->center->setChecked(true);
117 generalpage->block->setChecked(true);
122 void ParaDialog::setChecks(bool labove, bool lbelow, bool pabove, bool pbelow, bool noindent)
124 generalpage->lineabove->setChecked(labove);
125 generalpage->linebelow->setChecked(lbelow);
126 generalpage->abovepage->pagebreakabove->setChecked(pabove);
127 generalpage->belowpage->pagebreakbelow->setChecked(pbelow);
128 generalpage->noindent->setChecked(noindent);
131 void ParaDialog::setSpace(VSpace::vspace_kind kindabove, VSpace::vspace_kind kindbelow, bool keepabove, bool keepbelow)
136 case VSpace::NONE: item = 0; break;
137 case VSpace::DEFSKIP: item = 1; break;
138 case VSpace::SMALLSKIP: item = 2; break;
139 case VSpace::MEDSKIP: item = 3; break;
140 case VSpace::BIGSKIP: item = 4; break;
141 case VSpace::VFILL: item = 5; break;
142 case VSpace::LENGTH: item = 6; break;
144 generalpage->abovepage->spaceabove->setCurrentItem(item);
147 case VSpace::NONE: item = 0; break;
148 case VSpace::DEFSKIP: item = 1; break;
149 case VSpace::SMALLSKIP: item = 2; break;
150 case VSpace::MEDSKIP: item = 3; break;
151 case VSpace::BIGSKIP: item = 4; break;
152 case VSpace::VFILL: item = 5; break;
153 case VSpace::LENGTH: item = 6; break;
155 generalpage->belowpage->spacebelow->setCurrentItem(item);
157 generalpage->abovepage->spaceabovevalue->setEnabled(kindabove == VSpace::LENGTH);
158 generalpage->abovepage->spaceabovevalueunits->setEnabled(kindabove == VSpace::LENGTH);
159 generalpage->abovepage->spaceaboveplus->setEnabled(kindabove == VSpace::LENGTH);
160 generalpage->abovepage->spaceaboveplusunits->setEnabled(kindabove == VSpace::LENGTH);
161 generalpage->abovepage->spaceaboveminus->setEnabled(kindabove == VSpace::LENGTH);
162 generalpage->abovepage->spaceaboveminusunits->setEnabled(kindabove == VSpace::LENGTH);
163 generalpage->belowpage->spacebelowvalue->setEnabled(kindbelow == VSpace::LENGTH);
164 generalpage->belowpage->spacebelowvalueunits->setEnabled(kindbelow == VSpace::LENGTH);
165 generalpage->belowpage->spacebelowplus->setEnabled(kindbelow == VSpace::LENGTH);
166 generalpage->belowpage->spacebelowplusunits->setEnabled(kindbelow == VSpace::LENGTH);
167 generalpage->belowpage->spacebelowminus->setEnabled(kindbelow == VSpace::LENGTH);
168 generalpage->belowpage->spacebelowminusunits->setEnabled(kindbelow == VSpace::LENGTH);
170 generalpage->abovepage->keepabove->setChecked(keepabove);
171 generalpage->belowpage->keepbelow->setChecked(keepbelow);
174 void ParaDialog::setUnits(QComboBox *box, LyXLength::UNIT unit)
177 case LyXLength::CM: box->setCurrentItem(0); break;
178 case LyXLength::IN: box->setCurrentItem(1); break;
179 case LyXLength::PT: box->setCurrentItem(2); break;
180 case LyXLength::MM: box->setCurrentItem(3); break;
181 case LyXLength::PC: box->setCurrentItem(4); break;
182 case LyXLength::EX: box->setCurrentItem(5); break;
183 case LyXLength::EM: box->setCurrentItem(6); break;
184 case LyXLength::SP: box->setCurrentItem(7); break;
185 case LyXLength::BP: box->setCurrentItem(8); break;
186 case LyXLength::DD: box->setCurrentItem(9); break;
187 case LyXLength::CC: box->setCurrentItem(10); break;
188 case LyXLength::MU: box->setCurrentItem(0); break;
189 case LyXLength::UNIT_NONE: box->setCurrentItem(0); break;
191 lyxerr[Debug::GUI] << "Unknown unit " << long(unit) << endl;
195 void ParaDialog::setAboveLength(float val, float plus, float minus,
196 LyXLength::UNIT vunit, LyXLength::UNIT punit, LyXLength::UNIT munit)
198 if (vunit==LyXLength::UNIT_NONE) {
199 generalpage->abovepage->spaceabovevalue->setText("");
200 generalpage->abovepage->spaceaboveplus->setText("");
201 generalpage->abovepage->spaceaboveminus->setText("");
202 setUnits(generalpage->abovepage->spaceabovevalueunits, LyXLength::CM);
203 setUnits(generalpage->abovepage->spaceaboveplusunits, LyXLength::CM);
204 setUnits(generalpage->abovepage->spaceaboveminusunits, LyXLength::CM);
208 generalpage->abovepage->spaceabovevalue->setText(tostr(val).c_str());
209 generalpage->abovepage->spaceaboveplus->setText(tostr(plus).c_str());
210 generalpage->abovepage->spaceaboveminus->setText(tostr(minus).c_str());
211 setUnits(generalpage->abovepage->spaceabovevalueunits, vunit);
212 setUnits(generalpage->abovepage->spaceaboveplusunits, punit);
213 setUnits(generalpage->abovepage->spaceaboveminusunits, munit);
216 void ParaDialog::setBelowLength(float val, float plus, float minus,
217 LyXLength::UNIT vunit, LyXLength::UNIT punit, LyXLength::UNIT munit)
219 if (vunit==LyXLength::UNIT_NONE) {
220 generalpage->belowpage->spacebelowvalue->setText("");
221 generalpage->belowpage->spacebelowplus->setText("");
222 generalpage->belowpage->spacebelowminus->setText("");
223 setUnits(generalpage->belowpage->spacebelowvalueunits, LyXLength::CM);
224 setUnits(generalpage->belowpage->spacebelowplusunits, LyXLength::CM);
225 setUnits(generalpage->belowpage->spacebelowminusunits, LyXLength::CM);
229 generalpage->belowpage->spacebelowvalue->setText(tostr(val).c_str());
230 generalpage->belowpage->spacebelowplus->setText(tostr(plus).c_str());
231 generalpage->belowpage->spacebelowminus->setText(tostr(minus).c_str());
232 setUnits(generalpage->belowpage->spacebelowvalueunits, vunit);
233 setUnits(generalpage->belowpage->spacebelowplusunits, punit);
234 setUnits(generalpage->belowpage->spacebelowminusunits, munit);
237 void ParaDialog::setExtra(float widthval, LyXLength::UNIT units, const string percent, int align,
238 bool hfill, bool startminipage, LyXParagraph::PEXTRA_TYPE type)
241 if (type!=LyXParagraph::PEXTRA_NONE) {
242 lyxerr[Debug::GUI] << "percent : $" << percent << "$ widthval " << widthval << " unit " << long(units) << endl;
244 extrapage->widthvalue->setText(percent.c_str());
245 extrapage->widthvalueunits->setCurrentItem(12);
247 extrapage->widthvalue->setText(tostr(widthval).c_str());
248 setUnits(extrapage->widthvalueunits,units);
251 extrapage->widthvalue->setText("");
254 case LyXParagraph::MINIPAGE_ALIGN_TOP:
255 extrapage->top->setChecked(true);
257 case LyXParagraph::MINIPAGE_ALIGN_MIDDLE:
258 extrapage->middle->setChecked(true);
260 case LyXParagraph::MINIPAGE_ALIGN_BOTTOM:
261 extrapage->bottom->setChecked(true);
265 extrapage->hfillbetween->setChecked(hfill);
266 extrapage->startnewminipage->setChecked(startminipage);
268 extrapage->specialalignment->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
269 extrapage->top->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
270 extrapage->middle->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
271 extrapage->bottom->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
272 extrapage->widthvalue->setEnabled(type!=LyXParagraph::PEXTRA_NONE);
273 extrapage->widthvalueunits->setEnabled(type!=LyXParagraph::PEXTRA_NONE);
274 extrapage->hfillbetween->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
275 extrapage->startnewminipage->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
278 case LyXParagraph::PEXTRA_NONE:
279 extrapage->type->setCurrentItem(0);
281 case LyXParagraph::PEXTRA_INDENT:
282 extrapage->type->setCurrentItem(1);
284 case LyXParagraph::PEXTRA_MINIPAGE:
285 extrapage->type->setCurrentItem(2);
287 case LyXParagraph::PEXTRA_FLOATFLT:
288 extrapage->type->setCurrentItem(3);
293 LyXLength::UNIT ParaDialog::getUnits(QComboBox *box) const
295 switch (box->currentItem()) {
296 case 0: return LyXLength::CM;
297 case 1: return LyXLength::IN;
298 case 2: return LyXLength::PT;
299 case 3: return LyXLength::MM;
300 case 4: return LyXLength::PC;
301 case 5: return LyXLength::EX;
302 case 6: return LyXLength::EM;
303 case 7: return LyXLength::SP;
304 case 8: return LyXLength::BP;
305 case 9: return LyXLength::DD;
306 case 10: return LyXLength::CC;
308 lyxerr[Debug::GUI] << "Unknown combo choice " << box->currentItem() << endl;
310 return LyXLength::UNIT_NONE;
313 LyXGlueLength ParaDialog::getAboveLength() const
316 strToDbl(generalpage->abovepage->spaceabovevalue->text()),
317 getUnits(generalpage->abovepage->spaceabovevalueunits),
318 strToDbl(generalpage->abovepage->spaceaboveplus->text()),
319 getUnits(generalpage->abovepage->spaceaboveplusunits),
320 strToDbl(generalpage->abovepage->spaceaboveminus->text()),
321 getUnits(generalpage->abovepage->spaceaboveminusunits)
327 LyXGlueLength ParaDialog::getBelowLength() const
330 strToDbl(generalpage->belowpage->spacebelowvalue->text()),
331 getUnits(generalpage->belowpage->spacebelowvalueunits),
332 strToDbl(generalpage->belowpage->spacebelowplus->text()),
333 getUnits(generalpage->belowpage->spacebelowplusunits),
334 strToDbl(generalpage->belowpage->spacebelowminus->text()),
335 getUnits(generalpage->belowpage->spacebelowminusunits)
341 LyXLength ParaDialog::getExtraWidth() const
344 if (extrapage->widthvalueunits->currentItem()!=11) {
345 LyXLength len(strToDbl(extrapage->widthvalue->text()), getUnits(extrapage->widthvalueunits));
348 LyXLength len(0.0, LyXLength::UNIT_NONE);
353 string ParaDialog::getExtraWidthPercent() const
355 double val = strToDbl(extrapage->widthvalue->text());