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"
19 #include "dlg/helpers.h"
20 #include "dlg/lengthentry.h"
27 #ifdef CXX_WORKING_NAMESPACES
28 using kde_helpers::setSizeHint;
33 ParaDialog::ParaDialog(FormParagraph *form, QWidget *parent, const char *name, bool, WFlags)
34 : ParaDialogData(parent,name), form_(form)
38 generalpage = new ParaGeneralDialog(this, "generalpage");
39 extrapage = new ParaExtraDialog(this, "extrapage");
41 tabstack->addTabPage(generalpage, _("&General"));
42 tabstack->addTabPage(extrapage, _("&Extra"));
45 ParaDialog::~ParaDialog()
49 void ParaDialog::closeEvent(QCloseEvent *e)
55 void ParaDialog::setReadOnly(bool readonly)
57 generalpage->alignment->setEnabled(!readonly);
58 generalpage->lineabove->setEnabled(!readonly);
59 generalpage->linebelow->setEnabled(!readonly);
60 generalpage->abovepage->pagebreakabove->setEnabled(!readonly);
61 generalpage->belowpage->pagebreakbelow->setEnabled(!readonly);
62 generalpage->abovepage->keepabove->setEnabled(!readonly);
63 generalpage->belowpage->keepbelow->setEnabled(!readonly);
64 generalpage->noindent->setEnabled(!readonly);
65 generalpage->abovepage->spaceabove->setEnabled(!readonly);
66 generalpage->belowpage->spacebelow->setEnabled(!readonly);
67 generalpage->abovepage->spaceabovevalue->setEnabled(!readonly);
68 generalpage->belowpage->spacebelowvalue->setEnabled(!readonly);
69 generalpage->abovepage->spaceaboveplus->setEnabled(!readonly);
70 generalpage->belowpage->spacebelowplus->setEnabled(!readonly);
71 generalpage->abovepage->spaceaboveminus->setEnabled(!readonly);
72 generalpage->belowpage->spacebelowminus->setEnabled(!readonly);
73 generalpage->block->setEnabled(!readonly);
74 generalpage->left->setEnabled(!readonly);
75 generalpage->right->setEnabled(!readonly);
76 generalpage->center->setEnabled(!readonly);
77 generalpage->labelwidth->setEnabled(!readonly);
78 extrapage->specialalignment->setEnabled(!readonly);
79 extrapage->type->setEnabled(!readonly);
80 extrapage->widthvalue->setEnabled(!readonly);
81 extrapage->widthvalueunits->setEnabled(!readonly);
82 extrapage->hfillbetween->setEnabled(!readonly);
83 extrapage->startnewminipage->setEnabled(!readonly);
84 extrapage->top->setEnabled(!readonly);
85 extrapage->middle->setEnabled(!readonly);
86 extrapage->bottom->setEnabled(!readonly);
87 ok->setEnabled(!readonly);
88 apply->setEnabled(!readonly);
89 restore->setEnabled(!readonly);
90 cancel->setText(readonly ? _("&Close") : _("&Cancel"));
93 void ParaDialog::setLabelWidth(const char *text)
95 // FIXME: should be cleverer here
96 if (!strcmp(_("Senseless with this layout!"),text)) {
97 generalpage->labelwidth->setText("");
98 generalpage->labelwidth->setEnabled(false);
100 generalpage->labelwidth->setText(text);
101 generalpage->labelwidth->setEnabled(true);
105 void ParaDialog::setAlign(int type)
108 case LYX_ALIGN_RIGHT:
109 generalpage->right->setChecked(true);
112 generalpage->left->setChecked(true);
114 case LYX_ALIGN_CENTER:
115 generalpage->center->setChecked(true);
118 generalpage->block->setChecked(true);
123 void ParaDialog::setChecks(bool labove, bool lbelow, bool pabove, bool pbelow, bool noindent)
125 generalpage->lineabove->setChecked(labove);
126 generalpage->linebelow->setChecked(lbelow);
127 generalpage->abovepage->pagebreakabove->setChecked(pabove);
128 generalpage->belowpage->pagebreakbelow->setChecked(pbelow);
129 generalpage->noindent->setChecked(noindent);
132 void ParaDialog::setSpace(VSpace::vspace_kind kindabove, VSpace::vspace_kind kindbelow, bool keepabove, bool keepbelow)
137 case VSpace::NONE: item = 0; break;
138 case VSpace::DEFSKIP: item = 1; break;
139 case VSpace::SMALLSKIP: item = 2; break;
140 case VSpace::MEDSKIP: item = 3; break;
141 case VSpace::BIGSKIP: item = 4; break;
142 case VSpace::VFILL: item = 5; break;
143 case VSpace::LENGTH: item = 6; break;
145 generalpage->abovepage->spaceabove->setCurrentItem(item);
148 case VSpace::NONE: item = 0; break;
149 case VSpace::DEFSKIP: item = 1; break;
150 case VSpace::SMALLSKIP: item = 2; break;
151 case VSpace::MEDSKIP: item = 3; break;
152 case VSpace::BIGSKIP: item = 4; break;
153 case VSpace::VFILL: item = 5; break;
154 case VSpace::LENGTH: item = 6; break;
156 generalpage->belowpage->spacebelow->setCurrentItem(item);
158 generalpage->abovepage->spaceabovevalue->setEnabled(kindabove == VSpace::LENGTH);
159 generalpage->abovepage->spaceaboveplus->setEnabled(kindabove == VSpace::LENGTH);
160 generalpage->abovepage->spaceaboveminus->setEnabled(kindabove == VSpace::LENGTH);
161 generalpage->belowpage->spacebelowvalue->setEnabled(kindbelow == VSpace::LENGTH);
162 generalpage->belowpage->spacebelowplus->setEnabled(kindbelow == VSpace::LENGTH);
163 generalpage->belowpage->spacebelowminus->setEnabled(kindbelow == VSpace::LENGTH);
165 generalpage->abovepage->keepabove->setChecked(keepabove);
166 generalpage->belowpage->keepbelow->setChecked(keepbelow);
169 void ParaDialog::setAboveLength(float val, float plus, float minus,
170 LyXLength::UNIT vunit, LyXLength::UNIT punit, LyXLength::UNIT munit)
172 if (vunit==LyXLength::UNIT_NONE) {
173 generalpage->abovepage->spaceabovevalue->setValue("");
174 generalpage->abovepage->spaceaboveplus->setValue("");
175 generalpage->abovepage->spaceaboveminus->setValue("");
177 generalpage->abovepage->spaceabovevalue->setValue(tostr(val));
178 generalpage->abovepage->spaceaboveplus->setValue(tostr(plus));
179 generalpage->abovepage->spaceaboveminus->setValue(tostr(minus));
182 generalpage->abovepage->spaceabovevalue->setUnits(vunit);
183 generalpage->abovepage->spaceaboveplus->setUnits(punit);
184 generalpage->abovepage->spaceaboveminus->setUnits(munit);
187 void ParaDialog::setBelowLength(float val, float plus, float minus,
188 LyXLength::UNIT vunit, LyXLength::UNIT punit, LyXLength::UNIT munit)
190 if (vunit==LyXLength::UNIT_NONE) {
191 generalpage->belowpage->spacebelowvalue->setValue("");
192 generalpage->belowpage->spacebelowplus->setValue("");
193 generalpage->belowpage->spacebelowminus->setValue("");
195 generalpage->belowpage->spacebelowvalue->setValue(tostr(val));
196 generalpage->belowpage->spacebelowplus->setValue(tostr(plus));
197 generalpage->belowpage->spacebelowminus->setValue(tostr(minus));
200 generalpage->belowpage->spacebelowvalue->setUnits(vunit);
201 generalpage->belowpage->spacebelowplus->setUnits(punit);
202 generalpage->belowpage->spacebelowminus->setUnits(munit);
205 void ParaDialog::setExtra(float widthval, LyXLength::UNIT units, const string percent, int align,
206 bool hfill, bool startminipage, LyXParagraph::PEXTRA_TYPE type)
209 if (type!=LyXParagraph::PEXTRA_NONE) {
210 lyxerr[Debug::GUI] << "percent : $" << percent << "$ widthval " << widthval << " unit " << long(units) << endl;
212 extrapage->widthvalue->setText(percent.c_str());
213 extrapage->widthvalueunits->setCurrentItem(11);
216 extrapage->widthvalue->setText(tostr(widthval).c_str());
218 case LyXLength::CM: unit = 0; break;
219 case LyXLength::IN: unit = 1; break;
220 case LyXLength::PT: unit = 2; break;
221 case LyXLength::MM: unit = 3; break;
222 case LyXLength::PC: unit = 4; break;
223 case LyXLength::EX: unit = 5; break;
224 case LyXLength::EM: unit = 6; break;
225 case LyXLength::SP: unit = 7; break;
226 case LyXLength::BP: unit = 8; break;
227 case LyXLength::DD: unit = 9; break;
228 case LyXLength::CC: unit = 10; break;
229 case LyXLength::MU: unit = 0; break;
230 case LyXLength::UNIT_NONE: unit = 0; break;
232 lyxerr[Debug::GUI] << "Unknown unit " << long(units) << endl;
234 extrapage->widthvalueunits->setCurrentItem(unit);
237 extrapage->widthvalue->setText("");
240 case LyXParagraph::MINIPAGE_ALIGN_TOP:
241 extrapage->top->setChecked(true);
243 case LyXParagraph::MINIPAGE_ALIGN_MIDDLE:
244 extrapage->middle->setChecked(true);
246 case LyXParagraph::MINIPAGE_ALIGN_BOTTOM:
247 extrapage->bottom->setChecked(true);
251 extrapage->hfillbetween->setChecked(hfill);
252 extrapage->startnewminipage->setChecked(startminipage);
254 extrapage->specialalignment->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
255 extrapage->top->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
256 extrapage->middle->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
257 extrapage->bottom->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
258 extrapage->widthvalue->setEnabled(type!=LyXParagraph::PEXTRA_NONE);
259 extrapage->widthvalueunits->setEnabled(type!=LyXParagraph::PEXTRA_NONE);
260 extrapage->hfillbetween->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
261 extrapage->startnewminipage->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
264 case LyXParagraph::PEXTRA_NONE:
265 extrapage->type->setCurrentItem(0);
267 case LyXParagraph::PEXTRA_INDENT:
268 extrapage->type->setCurrentItem(1);
270 case LyXParagraph::PEXTRA_MINIPAGE:
271 extrapage->type->setCurrentItem(2);
273 case LyXParagraph::PEXTRA_FLOATFLT:
274 extrapage->type->setCurrentItem(3);
279 LyXGlueLength ParaDialog::getAboveLength() const
282 generalpage->abovepage->spaceabovevalue->getValue(),
283 generalpage->abovepage->spaceabovevalue->getUnits(),
284 generalpage->abovepage->spaceaboveplus->getValue(),
285 generalpage->abovepage->spaceaboveplus->getUnits(),
286 generalpage->abovepage->spaceaboveminus->getValue(),
287 generalpage->abovepage->spaceaboveminus->getUnits()
293 LyXGlueLength ParaDialog::getBelowLength() const
296 generalpage->belowpage->spacebelowvalue->getValue(),
297 generalpage->belowpage->spacebelowvalue->getUnits(),
298 generalpage->belowpage->spacebelowplus->getValue(),
299 generalpage->belowpage->spacebelowplus->getUnits(),
300 generalpage->belowpage->spacebelowminus->getValue(),
301 generalpage->belowpage->spacebelowminus->getUnits()
307 LyXLength ParaDialog::getExtraWidth() const
310 if (extrapage->widthvalueunits->currentItem()!=11) {
311 LyXLength::UNIT unit = LyXLength::CM;
312 switch (extrapage->widthvalueunits->currentItem()) {
313 case 0: unit = LyXLength::CM; break;
314 case 1: unit = LyXLength::IN; break;
315 case 2: unit = LyXLength::PT; break;
316 case 3: unit = LyXLength::MM; break;
317 case 4: unit = LyXLength::PC; break;
318 case 5: unit = LyXLength::EX; break;
319 case 6: unit = LyXLength::EM; break;
320 case 7: unit = LyXLength::SP; break;
321 case 8: unit = LyXLength::BP; break;
322 case 9: unit = LyXLength::DD; break;
323 case 10: unit = LyXLength::CC; break;
324 case 11: unit = LyXLength::CM; break;
326 lyxerr[Debug::GUI] << "Unknown unit " << extrapage->widthvalueunits->currentItem() << endl;
328 LyXLength len(strToDbl(extrapage->widthvalue->text()), unit);
331 LyXLength len(0.0, LyXLength::UNIT_NONE);
336 string ParaDialog::getExtraWidthPercent() const
338 double val = strToDbl(extrapage->widthvalue->text());