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 ***************************************************************************/
16 #include "support/lstrings.h"
25 ParaDialog::ParaDialog(FormParagraph *form, QWidget *parent, const char *name, bool, WFlags)
26 : ParaDialogData(parent,name), form_(form)
30 generalpage = new ParaGeneralDialog(this, "generalpage");
31 extrapage = new ParaExtraDialog(this, "extrapage");
33 tabstack->addTabPage(generalpage, _("General"));
34 tabstack->addTabPage(extrapage, _("Extra"));
37 ParaDialog::~ParaDialog()
41 void ParaDialog::closeEvent(QCloseEvent *e)
47 void ParaDialog::setReadOnly(bool readonly)
49 generalpage->alignment->setEnabled(!readonly);
50 generalpage->lineabove->setEnabled(!readonly);
51 generalpage->linebelow->setEnabled(!readonly);
52 generalpage->abovepage->pagebreakabove->setEnabled(!readonly);
53 generalpage->belowpage->pagebreakbelow->setEnabled(!readonly);
54 generalpage->abovepage->keepabove->setEnabled(!readonly);
55 generalpage->belowpage->keepbelow->setEnabled(!readonly);
56 generalpage->noindent->setEnabled(!readonly);
57 generalpage->abovepage->spaceabove->setEnabled(!readonly);
58 generalpage->belowpage->spacebelow->setEnabled(!readonly);
59 generalpage->abovepage->spaceabovevalue->setEnabled(!readonly);
60 generalpage->belowpage->spacebelowvalue->setEnabled(!readonly);
61 generalpage->abovepage->spaceabovevalueunits->setEnabled(!readonly);
62 generalpage->belowpage->spacebelowvalueunits->setEnabled(!readonly);
63 generalpage->abovepage->spaceaboveplus->setEnabled(!readonly);
64 generalpage->belowpage->spacebelowplus->setEnabled(!readonly);
65 generalpage->abovepage->spaceaboveplusunits->setEnabled(!readonly);
66 generalpage->belowpage->spacebelowplusunits->setEnabled(!readonly);
67 generalpage->abovepage->spaceaboveminus->setEnabled(!readonly);
68 generalpage->belowpage->spacebelowminus->setEnabled(!readonly);
69 generalpage->abovepage->spaceaboveminusunits->setEnabled(!readonly);
70 generalpage->belowpage->spacebelowminusunits->setEnabled(!readonly);
71 generalpage->block->setEnabled(!readonly);
72 generalpage->left->setEnabled(!readonly);
73 generalpage->right->setEnabled(!readonly);
74 generalpage->center->setEnabled(!readonly);
75 generalpage->labelwidth->setEnabled(!readonly);
76 extrapage->specialalignment->setEnabled(!readonly);
77 extrapage->type->setEnabled(!readonly);
78 extrapage->widthvalue->setEnabled(!readonly);
79 extrapage->widthvalueunits->setEnabled(!readonly);
80 extrapage->hfillbetween->setEnabled(!readonly);
81 extrapage->startnewminipage->setEnabled(!readonly);
82 extrapage->top->setEnabled(!readonly);
83 extrapage->middle->setEnabled(!readonly);
84 extrapage->bottom->setEnabled(!readonly);
85 ok->setEnabled(!readonly);
86 apply->setEnabled(!readonly);
87 restore->setEnabled(!readonly);
88 cancel->setText(readonly ? _("Close") : _("Cancel"));
91 void ParaDialog::setLabelWidth(const char *text)
93 // FIXME: should be cleverer here
94 if (!strcmp(_("Senseless with this layout!"),text)) {
95 generalpage->labelwidth->setText("");
96 generalpage->labelwidth->setEnabled(false);
98 generalpage->labelwidth->setText(text);
99 generalpage->labelwidth->setEnabled(true);
103 void ParaDialog::setAlign(int type)
106 case LYX_ALIGN_RIGHT:
107 generalpage->right->setChecked(true);
110 generalpage->left->setChecked(true);
112 case LYX_ALIGN_CENTER:
113 generalpage->center->setChecked(true);
116 generalpage->block->setChecked(true);
121 void ParaDialog::setChecks(bool labove, bool lbelow, bool pabove, bool pbelow, bool noindent)
123 generalpage->lineabove->setChecked(labove);
124 generalpage->linebelow->setChecked(lbelow);
125 generalpage->abovepage->pagebreakabove->setChecked(pabove);
126 generalpage->belowpage->pagebreakbelow->setChecked(pbelow);
127 generalpage->noindent->setChecked(noindent);
130 void ParaDialog::setSpace(VSpace::vspace_kind kindabove, VSpace::vspace_kind kindbelow, bool keepabove, bool keepbelow)
134 generalpage->abovepage->spaceabove->setCurrentItem(0);
136 case VSpace::DEFSKIP:
137 generalpage->abovepage->spaceabove->setCurrentItem(1);
139 case VSpace::SMALLSKIP:
140 generalpage->abovepage->spaceabove->setCurrentItem(2);
142 case VSpace::MEDSKIP:
143 generalpage->abovepage->spaceabove->setCurrentItem(3);
145 case VSpace::BIGSKIP:
146 generalpage->abovepage->spaceabove->setCurrentItem(4);
149 generalpage->abovepage->spaceabove->setCurrentItem(5);
152 generalpage->abovepage->spaceabove->setCurrentItem(6);
157 generalpage->belowpage->spacebelow->setCurrentItem(0);
159 case VSpace::DEFSKIP:
160 generalpage->belowpage->spacebelow->setCurrentItem(1);
162 case VSpace::SMALLSKIP:
163 generalpage->belowpage->spacebelow->setCurrentItem(2);
165 case VSpace::MEDSKIP:
166 generalpage->belowpage->spacebelow->setCurrentItem(3);
168 case VSpace::BIGSKIP:
169 generalpage->belowpage->spacebelow->setCurrentItem(4);
172 generalpage->belowpage->spacebelow->setCurrentItem(5);
175 generalpage->belowpage->spacebelow->setCurrentItem(6);
179 generalpage->abovepage->spaceabovevalue->setEnabled(kindabove == VSpace::LENGTH);
180 generalpage->abovepage->spaceabovevalueunits->setEnabled(kindabove == VSpace::LENGTH);
181 generalpage->abovepage->spaceaboveplus->setEnabled(kindabove == VSpace::LENGTH);
182 generalpage->abovepage->spaceaboveplusunits->setEnabled(kindabove == VSpace::LENGTH);
183 generalpage->abovepage->spaceaboveminus->setEnabled(kindabove == VSpace::LENGTH);
184 generalpage->abovepage->spaceaboveminusunits->setEnabled(kindabove == VSpace::LENGTH);
185 generalpage->belowpage->spacebelowvalue->setEnabled(kindbelow == VSpace::LENGTH);
186 generalpage->belowpage->spacebelowvalueunits->setEnabled(kindbelow == VSpace::LENGTH);
187 generalpage->belowpage->spacebelowplus->setEnabled(kindbelow == VSpace::LENGTH);
188 generalpage->belowpage->spacebelowplusunits->setEnabled(kindbelow == VSpace::LENGTH);
189 generalpage->belowpage->spacebelowminus->setEnabled(kindbelow == VSpace::LENGTH);
190 generalpage->belowpage->spacebelowminusunits->setEnabled(kindbelow == VSpace::LENGTH);
192 generalpage->abovepage->keepabove->setChecked(keepabove);
193 generalpage->belowpage->keepbelow->setChecked(keepbelow);
196 void ParaDialog::setUnits(QComboBox *box, LyXLength::UNIT unit)
199 case LyXLength::CM: box->setCurrentItem(0); break;
200 case LyXLength::IN: box->setCurrentItem(1); break;
201 case LyXLength::PT: box->setCurrentItem(2); break;
202 case LyXLength::MM: box->setCurrentItem(3); break;
203 case LyXLength::PC: box->setCurrentItem(4); break;
204 case LyXLength::EX: box->setCurrentItem(5); break;
205 case LyXLength::EM: box->setCurrentItem(6); break;
206 case LyXLength::SP: box->setCurrentItem(7); break;
207 case LyXLength::BP: box->setCurrentItem(8); break;
208 case LyXLength::DD: box->setCurrentItem(9); break;
209 case LyXLength::CC: box->setCurrentItem(10); break;
210 case LyXLength::MU: box->setCurrentItem(0); break;
211 case LyXLength::UNIT_NONE: box->setCurrentItem(0); break;
213 lyxerr[Debug::GUI] << "Unknown unit " << long(unit) << endl;
217 void ParaDialog::setAboveLength(float val, float plus, float minus,
218 LyXLength::UNIT vunit, LyXLength::UNIT punit, LyXLength::UNIT munit)
220 if (vunit==LyXLength::UNIT_NONE) {
221 generalpage->abovepage->spaceabovevalue->setText("");
222 generalpage->abovepage->spaceaboveplus->setText("");
223 generalpage->abovepage->spaceaboveminus->setText("");
224 setUnits(generalpage->abovepage->spaceabovevalueunits, LyXLength::CM);
225 setUnits(generalpage->abovepage->spaceaboveplusunits, LyXLength::CM);
226 setUnits(generalpage->abovepage->spaceaboveminusunits, LyXLength::CM);
230 generalpage->abovepage->spaceabovevalue->setText(tostr(val).c_str());
231 generalpage->abovepage->spaceaboveplus->setText(tostr(plus).c_str());
232 generalpage->abovepage->spaceaboveminus->setText(tostr(minus).c_str());
233 setUnits(generalpage->abovepage->spaceabovevalueunits, vunit);
234 setUnits(generalpage->abovepage->spaceaboveplusunits, punit);
235 setUnits(generalpage->abovepage->spaceaboveminusunits, munit);
238 void ParaDialog::setBelowLength(float val, float plus, float minus,
239 LyXLength::UNIT vunit, LyXLength::UNIT punit, LyXLength::UNIT munit)
241 if (vunit==LyXLength::UNIT_NONE) {
242 generalpage->belowpage->spacebelowvalue->setText("");
243 generalpage->belowpage->spacebelowplus->setText("");
244 generalpage->belowpage->spacebelowminus->setText("");
245 setUnits(generalpage->belowpage->spacebelowvalueunits, LyXLength::CM);
246 setUnits(generalpage->belowpage->spacebelowplusunits, LyXLength::CM);
247 setUnits(generalpage->belowpage->spacebelowminusunits, LyXLength::CM);
251 generalpage->belowpage->spacebelowvalue->setText(tostr(val).c_str());
252 generalpage->belowpage->spacebelowplus->setText(tostr(plus).c_str());
253 generalpage->belowpage->spacebelowminus->setText(tostr(minus).c_str());
254 setUnits(generalpage->belowpage->spacebelowvalueunits, vunit);
255 setUnits(generalpage->belowpage->spacebelowplusunits, punit);
256 setUnits(generalpage->belowpage->spacebelowminusunits, munit);
259 void ParaDialog::setExtra(float widthval, LyXLength::UNIT units, const string percent, int align,
260 bool hfill, bool startminipage, LyXParagraph::PEXTRA_TYPE type)
263 if (type!=LyXParagraph::PEXTRA_NONE) {
264 lyxerr[Debug::GUI] << "percent : $" << percent << "$ widthval " << widthval << " unit " << long(units) << endl;
266 extrapage->widthvalue->setText(percent.c_str());
267 extrapage->widthvalueunits->setCurrentItem(12);
269 extrapage->widthvalue->setText(tostr(widthval).c_str());
270 setUnits(extrapage->widthvalueunits,units);
273 extrapage->widthvalue->setText("");
276 case LyXParagraph::MINIPAGE_ALIGN_TOP:
277 extrapage->top->setChecked(true);
279 case LyXParagraph::MINIPAGE_ALIGN_MIDDLE:
280 extrapage->middle->setChecked(true);
282 case LyXParagraph::MINIPAGE_ALIGN_BOTTOM:
283 extrapage->bottom->setChecked(true);
287 extrapage->hfillbetween->setChecked(hfill);
288 extrapage->startnewminipage->setChecked(startminipage);
290 extrapage->specialalignment->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
291 extrapage->top->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
292 extrapage->middle->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
293 extrapage->bottom->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
294 extrapage->widthvalue->setEnabled(type!=LyXParagraph::PEXTRA_NONE);
295 extrapage->widthvalueunits->setEnabled(type!=LyXParagraph::PEXTRA_NONE);
296 extrapage->hfillbetween->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
297 extrapage->startnewminipage->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
300 case LyXParagraph::PEXTRA_NONE:
301 extrapage->type->setCurrentItem(0);
303 case LyXParagraph::PEXTRA_INDENT:
304 extrapage->type->setCurrentItem(1);
306 case LyXParagraph::PEXTRA_MINIPAGE:
307 extrapage->type->setCurrentItem(2);
309 case LyXParagraph::PEXTRA_FLOATFLT:
310 extrapage->type->setCurrentItem(3);
315 LyXLength::UNIT ParaDialog::getUnits(QComboBox *box) const
317 switch (box->currentItem()) {
318 case 0: return LyXLength::CM;
319 case 1: return LyXLength::IN;
320 case 2: return LyXLength::PT;
321 case 3: return LyXLength::MM;
322 case 4: return LyXLength::PC;
323 case 5: return LyXLength::EX;
324 case 6: return LyXLength::EM;
325 case 7: return LyXLength::SP;
326 case 8: return LyXLength::BP;
327 case 9: return LyXLength::DD;
328 case 10: return LyXLength::CC;
330 lyxerr[Debug::GUI] << "Unknown combo choice " << box->currentItem() << endl;
332 return LyXLength::UNIT_NONE;
335 LyXGlueLength ParaDialog::getAboveLength() const
338 strToDbl(generalpage->abovepage->spaceabovevalue->text()),
339 getUnits(generalpage->abovepage->spaceabovevalueunits),
340 strToDbl(generalpage->abovepage->spaceaboveplus->text()),
341 getUnits(generalpage->abovepage->spaceaboveplusunits),
342 strToDbl(generalpage->abovepage->spaceaboveminus->text()),
343 getUnits(generalpage->abovepage->spaceaboveminusunits)
349 LyXGlueLength ParaDialog::getBelowLength() const
352 strToDbl(generalpage->belowpage->spacebelowvalue->text()),
353 getUnits(generalpage->belowpage->spacebelowvalueunits),
354 strToDbl(generalpage->belowpage->spacebelowplus->text()),
355 getUnits(generalpage->belowpage->spacebelowplusunits),
356 strToDbl(generalpage->belowpage->spacebelowminus->text()),
357 getUnits(generalpage->belowpage->spacebelowminusunits)
363 LyXLength ParaDialog::getExtraWidth() const
366 if (extrapage->widthvalueunits->currentItem()!=11) {
367 LyXLength len(strToDbl(extrapage->widthvalue->text()), getUnits(extrapage->widthvalueunits));
370 LyXLength len(0.0, LyXLength::UNIT_NONE);
375 string ParaDialog::getExtraWidthPercent() const
377 double val = strToDbl(extrapage->widthvalue->text());