3 * Copyright 2001 the LyX Team
4 * Read the file COPYING
10 #include "support/lstrings.h"
12 #include "dlg/helpers.h"
13 #include "dlg/lengthentry.h"
20 using kde_helpers::setSizeHint;
23 ParaDialog::ParaDialog(FormParagraph * form, QWidget * parent, char const * name, bool, WFlags)
24 : ParaDialogData(parent,name), form_(form)
28 setUpdatesEnabled(false);
30 generalpage = new ParaGeneralDialog(this, "generalpage");
31 extrapage = new ParaExtraDialog(this, "extrapage");
33 tabstack->addTabPage(generalpage, _("&General"));
34 tabstack->addTabPage(extrapage, _("&Extra"));
36 setUpdatesEnabled(true);
41 ParaDialog::~ParaDialog()
46 void ParaDialog::closeEvent(QCloseEvent * e)
53 void ParaDialog::setReadOnly(bool readonly)
56 generalpage->combo_justification->setEnabled(!readonly);
57 generalpage->check_lineabove->setEnabled(!readonly);
58 generalpage->check_linebelow->setEnabled(!readonly);
59 generalpage->abovepage->pagebreakabove->setEnabled(!readonly);
60 generalpage->belowpage->pagebreakbelow->setEnabled(!readonly);
61 generalpage->abovepage->keepabove->setEnabled(!readonly);
62 generalpage->belowpage->keepbelow->setEnabled(!readonly);
63 generalpage->noindent->setEnabled(!readonly);
64 generalpage->abovepage->spaceabove->setEnabled(!readonly);
65 generalpage->belowpage->spacebelow->setEnabled(!readonly);
66 generalpage->abovepage->spaceabove->setEnabled(!readonly);
67 generalpage->belowpage->spacebelow->setEnabled(!readonly);
68 generalpage->abovepage->spaceaboveplus->setEnabled(!readonly);
69 generalpage->belowpage->spacebelowplus->setEnabled(!readonly);
70 generalpage->abovepage->spaceaboveminus->setEnabled(!readonly);
71 generalpage->belowpage->spacebelowminus->setEnabled(!readonly);
72 generalpage->labelwidth->setEnabled(!readonly);
73 extrapage->specialalignment->setEnabled(!readonly);
74 extrapage->type->setEnabled(!readonly);
75 extrapage->widthvalue->setEnabled(!readonly);
76 extrapage->widthvalueunits->setEnabled(!readonly);
77 extrapage->hfillbetween->setEnabled(!readonly);
78 extrapage->startnewminipage->setEnabled(!readonly);
79 extrapage->top->setEnabled(!readonly);
80 extrapage->middle->setEnabled(!readonly);
81 extrapage->bottom->setEnabled(!readonly);
82 ok->setEnabled(!readonly);
83 apply->setEnabled(!readonly);
84 restore->setEnabled(!readonly);
85 cancel->setText(readonly ? _("&Close") : _("&Cancel"));
90 void ParaDialog::setLabelWidth(char const * text)
92 // FIXME: should be cleverer here
93 if (!compare(_("Senseless with this layout!"), text)) {
94 generalpage->line_labelwidth->setText("");
95 generalpage->line_labelwidth->setEnabled(false);
97 generalpage->line_labelwidth->setText(text);
98 generalpage->line_labelwidth->setEnabled(true);
103 void ParaDialog::setAlign(int type)
106 case LYX_ALIGN_RIGHT: type = 3; break;
107 case LYX_ALIGN_LEFT: type = 2; break;
108 case LYX_ALIGN_CENTER: type = 1; break;
109 default: type = 0; break;
112 generalpage->combo_justification->setCurrentItem(type);
116 void ParaDialog::setChecks(bool labove, bool lbelow, bool pabove, bool pbelow, bool noindent)
118 generalpage->check_lineabove->setChecked(labove);
119 generalpage->check_linebelow->setChecked(lbelow);
120 generalpage->abovepage->check_pagebreakabove->setChecked(pabove);
121 generalpage->belowpage->check_pagebreakbelow->setChecked(pbelow);
122 generalpage->check_noindent->setChecked(noindent);
126 void ParaDialog::setSpace(VSpace::vspace_kind kindabove, VSpace::vspace_kind kindbelow, bool keepabove, bool keepbelow)
131 case VSpace::NONE: item = 0; break;
132 case VSpace::DEFSKIP: item = 1; break;
133 case VSpace::SMALLSKIP: item = 2; break;
134 case VSpace::MEDSKIP: item = 3; break;
135 case VSpace::BIGSKIP: item = 4; break;
136 case VSpace::VFILL: item = 5; break;
137 case VSpace::LENGTH: item = 6; break;
139 generalpage->abovepage->combo_spaceabove->setCurrentItem(item);
142 case VSpace::NONE: item = 0; break;
143 case VSpace::DEFSKIP: item = 1; break;
144 case VSpace::SMALLSKIP: item = 2; break;
145 case VSpace::MEDSKIP: item = 3; break;
146 case VSpace::BIGSKIP: item = 4; break;
147 case VSpace::VFILL: item = 5; break;
148 case VSpace::LENGTH: item = 6; break;
150 generalpage->belowpage->combo_spacebelow->setCurrentItem(item);
152 generalpage->abovepage->length_spaceabove->setEnabled(kindabove == VSpace::LENGTH);
153 generalpage->abovepage->length_spaceaboveplus->setEnabled(kindabove == VSpace::LENGTH);
154 generalpage->abovepage->length_spaceaboveminus->setEnabled(kindabove == VSpace::LENGTH);
155 generalpage->belowpage->length_spacebelow->setEnabled(kindbelow == VSpace::LENGTH);
156 generalpage->belowpage->length_spacebelowplus->setEnabled(kindbelow == VSpace::LENGTH);
157 generalpage->belowpage->length_spacebelowminus->setEnabled(kindbelow == VSpace::LENGTH);
159 generalpage->abovepage->check_keepabove->setChecked(keepabove);
160 generalpage->belowpage->check_keepbelow->setChecked(keepbelow);
164 void ParaDialog::setAboveLength(float val, float plus, float minus,
165 LyXLength::UNIT vunit, LyXLength::UNIT punit, LyXLength::UNIT munit)
167 if (vunit == LyXLength::UNIT_NONE) {
168 generalpage->abovepage->length_spaceabove->setValue("");
169 generalpage->abovepage->length_spaceaboveplus->setValue("");
170 generalpage->abovepage->length_spaceaboveminus->setValue("");
172 generalpage->abovepage->length_spaceabove->setValue(tostr(val));
173 generalpage->abovepage->length_spaceaboveplus->setValue(tostr(plus));
174 generalpage->abovepage->length_spaceaboveminus->setValue(tostr(minus));
177 generalpage->abovepage->length_spaceabove->setUnits(vunit);
178 generalpage->abovepage->length_spaceaboveplus->setUnits(punit);
179 generalpage->abovepage->length_spaceaboveminus->setUnits(munit);
183 void ParaDialog::setBelowLength(float val, float plus, float minus,
184 LyXLength::UNIT vunit, LyXLength::UNIT punit, LyXLength::UNIT munit)
186 if (vunit == LyXLength::UNIT_NONE) {
187 generalpage->belowpage->length_spacebelow->setValue("");
188 generalpage->belowpage->length_spacebelowplus->setValue("");
189 generalpage->belowpage->length_spacebelowminus->setValue("");
191 generalpage->belowpage->length_spacebelow->setValue(tostr(val));
192 generalpage->belowpage->length_spacebelowplus->setValue(tostr(plus));
193 generalpage->belowpage->length_spacebelowminus->setValue(tostr(minus));
196 generalpage->belowpage->length_spacebelow->setUnits(vunit);
197 generalpage->belowpage->length_spacebelowplus->setUnits(punit);
198 generalpage->belowpage->length_spacebelowminus->setUnits(munit);
202 void ParaDialog::setExtra(float widthval, LyXLength::UNIT units, const string percent, int align,
203 bool hfill, bool startminipage, LyXParagraph::PEXTRA_TYPE type)
205 if (type!=LyXParagraph::PEXTRA_NONE) {
206 lyxerr[Debug::GUI] << "percent : $" << percent << "$ widthval " << widthval << " unit " << long(units) << endl;
208 extrapage->line_widthvalue->setText(percent.c_str());
209 extrapage->combo_widthvalueunits->setCurrentItem(11);
212 extrapage->line_widthvalue->setText(tostr(widthval).c_str());
214 case LyXLength::CM: unit = 0; break;
215 case LyXLength::IN: unit = 1; break;
216 case LyXLength::PT: unit = 2; break;
217 case LyXLength::MM: unit = 3; break;
218 case LyXLength::PC: unit = 4; break;
219 case LyXLength::EX: unit = 5; break;
220 case LyXLength::EM: unit = 6; break;
221 case LyXLength::SP: unit = 7; break;
222 case LyXLength::BP: unit = 8; break;
223 case LyXLength::DD: unit = 9; break;
224 case LyXLength::CC: unit = 10; break;
225 case LyXLength::MU: unit = 0; break;
226 case LyXLength::UNIT_NONE: unit = 0; break;
228 lyxerr[Debug::GUI] << "Unknown unit " << long(units) << endl;
230 extrapage->combo_widthvalueunits->setCurrentItem(unit);
233 extrapage->line_widthvalue->setText("");
236 case LyXParagraph::MINIPAGE_ALIGN_TOP:
237 extrapage->radio_top->setChecked(true);
239 case LyXParagraph::MINIPAGE_ALIGN_MIDDLE:
240 extrapage->radio_middle->setChecked(true);
242 case LyXParagraph::MINIPAGE_ALIGN_BOTTOM:
243 extrapage->radio_bottom->setChecked(true);
247 extrapage->check_hfillbetween->setChecked(hfill);
248 extrapage->check_startnewminipage->setChecked(startminipage);
250 extrapage->specialalignment->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
251 extrapage->radio_top->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
252 extrapage->radio_middle->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
253 extrapage->radio_bottom->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
254 extrapage->line_widthvalue->setEnabled(type!=LyXParagraph::PEXTRA_NONE);
255 extrapage->combo_widthvalueunits->setEnabled(type!=LyXParagraph::PEXTRA_NONE);
256 extrapage->check_hfillbetween->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
257 extrapage->check_startnewminipage->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
260 case LyXParagraph::PEXTRA_NONE:
261 extrapage->combo_type->setCurrentItem(0);
263 case LyXParagraph::PEXTRA_INDENT:
264 extrapage->combo_type->setCurrentItem(1);
266 case LyXParagraph::PEXTRA_MINIPAGE:
267 extrapage->combo_type->setCurrentItem(2);
269 case LyXParagraph::PEXTRA_FLOATFLT:
270 extrapage->combo_type->setCurrentItem(3);
276 LyXGlueLength ParaDialog::getAboveLength() const
279 generalpage->abovepage->length_spaceabove->getValue(),
280 generalpage->abovepage->length_spaceabove->getUnits(),
281 generalpage->abovepage->length_spaceaboveplus->getValue(),
282 generalpage->abovepage->length_spaceaboveplus->getUnits(),
283 generalpage->abovepage->length_spaceaboveminus->getValue(),
284 generalpage->abovepage->length_spaceaboveminus->getUnits()
291 LyXGlueLength ParaDialog::getBelowLength() const
294 generalpage->belowpage->length_spacebelow->getValue(),
295 generalpage->belowpage->length_spacebelow->getUnits(),
296 generalpage->belowpage->length_spacebelowplus->getValue(),
297 generalpage->belowpage->length_spacebelowplus->getUnits(),
298 generalpage->belowpage->length_spacebelowminus->getValue(),
299 generalpage->belowpage->length_spacebelowminus->getUnits()
306 LyXLength ParaDialog::getExtraWidth() const
309 if (extrapage->combo_widthvalueunits->currentItem() != 11) {
310 LyXLength::UNIT unit = LyXLength::CM;
311 switch (extrapage->combo_widthvalueunits->currentItem()) {
312 case 0: unit = LyXLength::CM; break;
313 case 1: unit = LyXLength::IN; break;
314 case 2: unit = LyXLength::PT; break;
315 case 3: unit = LyXLength::MM; break;
316 case 4: unit = LyXLength::PC; break;
317 case 5: unit = LyXLength::EX; break;
318 case 6: unit = LyXLength::EM; break;
319 case 7: unit = LyXLength::SP; break;
320 case 8: unit = LyXLength::BP; break;
321 case 9: unit = LyXLength::DD; break;
322 case 10: unit = LyXLength::CC; break;
323 case 11: unit = LyXLength::CM; break;
325 lyxerr[Debug::GUI] << "Unknown unit " << extrapage->combo_widthvalueunits->currentItem() << endl;
327 LyXLength len(strToDbl(extrapage->line_widthvalue->text()), unit);
330 LyXLength len(0.0, LyXLength::UNIT_NONE);
336 string ParaDialog::getExtraWidthPercent() const
338 double val = strToDbl(extrapage->line_widthvalue->text());