2 * \file QParagraphDialog.C
3 * Copyright 2001 LyX Team
6 * \author John Levon, moz@compsoc.man.ac.uk
7 * \author Edwin Leuven, leuven@fee.uva.nl
14 #include "QParagraphDialog.h"
15 #include "QParagraph.h"
16 #include "support/lstrings.h"
19 #include <qlineedit.h>
20 #include <qcombobox.h>
21 #include <qcheckbox.h>
22 #include <qpushbutton.h>
23 #include <qtabwidget.h>
25 #include <qgroupbox.h>
29 QParagraphDialog::QParagraphDialog(QParagraph * form, QWidget * parent, const char * name, bool modal, WFlags fl)
30 : QParagraphDialogBase(parent, name, modal, fl),
37 QParagraphDialog::~QParagraphDialog()
42 void QParagraphDialog::setReadOnly(bool readonly)
44 TabsParagraph->setEnabled(!readonly);
45 okPB->setEnabled(!readonly);
46 applyPB->setEnabled(!readonly);
47 defaultsPB->setEnabled(!readonly);
48 cancelPB->setText(readonly ? _("&Close") : _("&Cancel"));
52 void QParagraphDialog::setLabelWidth(const char *text)
54 // FIXME: should be cleverer here
55 if (!strcmp(_("Senseless with this layout!"),text)) {
56 listOptions->setEnabled(false);
57 labelWidth->setText("");
59 listOptions->setEnabled(true);
60 labelWidth->setText(text);
65 void QParagraphDialog::setAlign(int type)
69 case LYX_ALIGN_BLOCK : item=0; break;
70 case LYX_ALIGN_LEFT : item=1; break;
71 case LYX_ALIGN_RIGHT : item=2; break;
72 case LYX_ALIGN_CENTER : item=3; break;
76 alignment->setCurrentItem(item);
80 void QParagraphDialog::setChecks(bool labove, bool lbelow, bool pabove, bool pbelow, bool noindent)
82 lineAbove->setChecked(labove);
83 lineBelow->setChecked(lbelow);
84 pagebreakAbove->setChecked(pabove);
85 pagebreakBelow->setChecked(pbelow);
86 noIndent->setChecked(noindent);
90 void QParagraphDialog::setSpace(VSpace::vspace_kind kindabove, VSpace::vspace_kind kindbelow, bool keepabove, bool keepbelow)
95 case VSpace::NONE: item = 0; break;
96 case VSpace::DEFSKIP: item = 1; break;
97 case VSpace::SMALLSKIP: item = 2; break;
98 case VSpace::MEDSKIP: item = 3; break;
99 case VSpace::BIGSKIP: item = 4; break;
100 case VSpace::VFILL: item = 5; break;
101 case VSpace::LENGTH: item = 6; break;
103 spacingAbove->setCurrentItem(item);
106 case VSpace::NONE: item = 0; break;
107 case VSpace::DEFSKIP: item = 1; break;
108 case VSpace::SMALLSKIP: item = 2; break;
109 case VSpace::MEDSKIP: item = 3; break;
110 case VSpace::BIGSKIP: item = 4; break;
111 case VSpace::VFILL: item = 5; break;
112 case VSpace::LENGTH: item = 6; break;
114 spacingBelow->setCurrentItem(item);
116 spacingAboveValue->setEnabled(kindabove == VSpace::LENGTH);
117 spacingAbovePlus->setEnabled(kindabove == VSpace::LENGTH);
118 spacingAboveMinus->setEnabled(kindabove == VSpace::LENGTH);
119 spacingBelowValue->setEnabled(kindbelow == VSpace::LENGTH);
120 spacingBelowPlus->setEnabled(kindbelow == VSpace::LENGTH);
121 spacingBelowMinus->setEnabled(kindbelow == VSpace::LENGTH);
123 spacingAboveKeep->setChecked(keepabove);
124 spacingBelowKeep->setChecked(keepbelow);
128 void QParagraphDialog::setAboveLength(float val, float plus, float minus,
129 LyXLength::UNIT vunit, LyXLength::UNIT punit, LyXLength::UNIT munit)
131 if (vunit==LyXLength::UNIT_NONE) {
132 spacingAboveValue->setText("");
133 spacingAbovePlus->setText("");
134 spacingAboveMinus->setText("");
136 spacingAboveValue->setText(tostr(val).c_str());
137 spacingAbovePlus->setText(tostr(plus).c_str());
138 spacingAboveMinus->setText(tostr(minus).c_str());
141 spacingAboveValueUnit->setCurrentItem(getItem(vunit));
142 spacingAbovePlusUnit->setCurrentItem(getItem(punit));
143 spacingAboveMinusUnit->setCurrentItem(getItem(munit));
148 void QParagraphDialog::setBelowLength(float val, float plus, float minus,
149 LyXLength::UNIT vunit, LyXLength::UNIT punit, LyXLength::UNIT munit)
151 if (vunit==LyXLength::UNIT_NONE) {
152 spacingBelowValue->setText("");
153 spacingBelowPlus->setText("");
154 spacingBelowMinus->setText("");
156 spacingBelowValue->setText(tostr(val).c_str());
157 spacingBelowPlus->setText(tostr(plus).c_str());
158 spacingBelowMinus->setText(tostr(minus).c_str());
161 spacingBelowValueUnit->setCurrentItem(getItem(vunit));
162 spacingBelowPlusUnit->setCurrentItem(getItem(punit));
163 spacingBelowMinusUnit->setCurrentItem(getItem(munit));
167 void QParagraphDialog::setExtra(float widthval, LyXLength::UNIT units, const string percent, int align,
168 bool hfill, bool startminipage, Paragraph::PEXTRA_TYPE type)
170 if (type!=Paragraph::PEXTRA_NONE) {
171 lyxerr[Debug::GUI] << "percent : $" << percent << "$ widthval " << widthval << " unit " << long(units) << endl;
173 extraWidth->setText(percent.c_str());
174 extraUnit->setCurrentItem(11);
176 extraWidth->setText(tostr(widthval).c_str());
177 extraUnit->setCurrentItem(getItem(units));
180 extraWidth->setText("");
183 case Paragraph::PEXTRA_NONE:
184 extraType->setCurrentItem(0);
186 case Paragraph::PEXTRA_MINIPAGE:
187 extraType->setCurrentItem(1);
188 enable_extraOptions(1);
189 enable_minipageOptions(1);
191 case Paragraph::PEXTRA_FLOATFLT:
192 extraType->setCurrentItem(2);
193 enable_extraOptions(2);
195 case Paragraph::PEXTRA_INDENT:
196 extraType->setCurrentItem(3);
197 enable_extraOptions(3);
202 case Paragraph::MINIPAGE_ALIGN_TOP:
203 minipageValign->setCurrentItem(0);
205 case Paragraph::MINIPAGE_ALIGN_MIDDLE:
206 minipageValign->setCurrentItem(1);
208 case Paragraph::MINIPAGE_ALIGN_BOTTOM:
209 minipageValign->setCurrentItem(2);
213 minipageHfill->setChecked(hfill);
214 minipageStart->setChecked(startminipage);
218 LyXGlueLength QParagraphDialog::getAboveLength() const
221 spacingAboveValue->text().toFloat(),
222 getLyXLength( spacingAboveValueUnit->currentItem() ),
223 spacingAbovePlus->text().toFloat(),
224 getLyXLength( spacingAbovePlusUnit->currentItem() ),
225 spacingAboveMinus->text().toFloat(),
226 getLyXLength( spacingAboveMinusUnit->currentItem() )
232 LyXGlueLength QParagraphDialog::getBelowLength() const
235 spacingBelowValue->text().toFloat(),
236 getLyXLength( spacingBelowValueUnit->currentItem() ),
237 spacingBelowPlus->text().toFloat(),
238 getLyXLength( spacingBelowPlusUnit->currentItem() ),
239 spacingBelowMinus->text().toFloat(),
240 getLyXLength( spacingBelowMinusUnit->currentItem() )
246 LyXLength QParagraphDialog::getExtraWidth() const
248 if (extraUnit->currentItem()!=11) {
250 (extraWidth->text()).toDouble(),
251 getLyXLength(extraUnit->currentItem())
255 LyXLength len(0.0, LyXLength::UNIT_NONE);
261 string QParagraphDialog::getExtraWidthPercent() const
263 double val = (extraWidth->text()).toDouble();
272 const char * QParagraphDialog::getLabelWidth() const
274 return labelWidth->text();
278 LyXAlignment QParagraphDialog::getAlign() const
280 switch (alignment->currentItem()) {
281 case 0: return LYX_ALIGN_BLOCK;
282 case 1: return LYX_ALIGN_LEFT;
283 case 2: return LYX_ALIGN_RIGHT;
284 case 3: return LYX_ALIGN_CENTER;
285 default: return LYX_ALIGN_CENTER;
290 bool QParagraphDialog::getAboveKeep() const
292 return spacingAboveKeep->isChecked();
296 bool QParagraphDialog::getBelowKeep() const
298 return spacingBelowKeep->isChecked();
302 bool QParagraphDialog::getLineAbove() const
304 return lineAbove->isChecked();
308 bool QParagraphDialog::getLineBelow() const
310 return lineBelow->isChecked();
314 bool QParagraphDialog::getPagebreakAbove() const
316 return pagebreakAbove->isChecked();
320 bool QParagraphDialog::getPagebreakBelow() const
322 return pagebreakBelow->isChecked();
326 bool QParagraphDialog::getNoIndent() const
328 return noIndent->isChecked();
332 VSpace::vspace_kind QParagraphDialog::getSpaceAboveKind() const
334 return getSpaceKind(spacingAbove->currentItem());
338 VSpace::vspace_kind QParagraphDialog::getSpaceBelowKind() const
340 return getSpaceKind(spacingBelow->currentItem());
344 Paragraph::PEXTRA_TYPE QParagraphDialog::getExtraType() const
346 switch (extraType->currentItem()) {
347 case 0: return Paragraph::PEXTRA_NONE;
348 case 1: return Paragraph::PEXTRA_MINIPAGE;
349 case 2: return Paragraph::PEXTRA_FLOATFLT;
350 case 3: return Paragraph::PEXTRA_INDENT;
352 return Paragraph::PEXTRA_NONE;
356 Paragraph::MINIPAGE_ALIGNMENT QParagraphDialog::getExtraAlign() const
358 switch (minipageValign->currentItem()) {
359 case 0: return Paragraph::MINIPAGE_ALIGN_TOP;
360 case 1: return Paragraph::MINIPAGE_ALIGN_MIDDLE;
361 case 2: return Paragraph::MINIPAGE_ALIGN_BOTTOM;
362 default: return Paragraph::MINIPAGE_ALIGN_BOTTOM;
367 bool QParagraphDialog::getHfillBetween() const
369 return minipageHfill->isChecked();
373 bool QParagraphDialog::getStartNewMinipage() const
375 return minipageStart->isChecked();
379 VSpace::vspace_kind QParagraphDialog::getSpaceKind(int val) const
382 case 0: return VSpace::NONE;
383 case 1: return VSpace::DEFSKIP;
384 case 2: return VSpace::SMALLSKIP;
385 case 3: return VSpace::MEDSKIP;
386 case 4: return VSpace::BIGSKIP;
387 case 5: return VSpace::VFILL;
388 case 6: return VSpace::LENGTH;
390 lyxerr[Debug::GUI] << "Unknown kind combo entry " << val << std::endl;
396 LyXLength::UNIT QParagraphDialog::getLyXLength(int val) const
399 case 0: return LyXLength::CM;
400 case 1: return LyXLength::IN;
401 case 2: return LyXLength::PT;
402 case 3: return LyXLength::MM;
403 case 4: return LyXLength::PC;
404 case 5: return LyXLength::EX;
405 case 6: return LyXLength::EM;
406 case 7: return LyXLength::SP;
407 case 8: return LyXLength::BP;
408 case 9: return LyXLength::DD;
409 case 10: return LyXLength::CC;
411 lyxerr[Debug::GUI] << "Unknown kind combo entry " << val << std::endl;
413 return LyXLength::UNIT_NONE;
417 int QParagraphDialog::getItem(LyXLength::UNIT unit) const
421 case LyXLength::CM: item = 0; break;
422 case LyXLength::IN: item = 1; break;
423 case LyXLength::PT: item = 2; break;
424 case LyXLength::MM: item = 3; break;
425 case LyXLength::PC: item = 4; break;
426 case LyXLength::EX: item = 5; break;
427 case LyXLength::EM: item = 6; break;
428 case LyXLength::SP: item = 7; break;
429 case LyXLength::BP: item = 8; break;
430 case LyXLength::DD: item = 9; break;
431 case LyXLength::CC: item = 10; break;
432 case LyXLength::MU: item = 0; break;
433 case LyXLength::UNIT_NONE: item = 0; break;
435 lyxerr[Debug::GUI] << "Unknown unit " << long(unit) << endl;
441 void QParagraphDialog::enable_extraOptions(int item)
443 bool const enable = (item!=0);
444 extraWidth->setEnabled(enable);
445 extraWidthL->setEnabled(enable);
446 extraUnit->setEnabled(enable);
447 extraUnitL->setEnabled(enable);
451 void QParagraphDialog::enable_minipageOptions(int item)
453 minipageOptions->setEnabled( item==1 );
457 void QParagraphDialog::enable_spacingAbove(int item)
459 bool const enable = (item==6);
460 spacingAboveValue->setEnabled(enable);
461 spacingAbovePlus->setEnabled(enable);
462 spacingAboveMinus->setEnabled(enable);
463 spacingAboveValueUnit->setEnabled(enable);
464 spacingAbovePlusUnit->setEnabled(enable);
465 spacingAboveMinusUnit->setEnabled(enable);
466 spacingAboveUnitsL->setEnabled(enable);
467 bool const enablel = ( (item==6) || (item!=6 && spacingBelow->currentItem()==6) );
468 spacingValueL->setEnabled(enablel);
469 spacingPlusL->setEnabled(enablel);
470 spacingMinusL->setEnabled(enablel);
474 void QParagraphDialog::enable_spacingBelow(int item)
476 bool const enable = (item==6);
477 spacingBelowValue->setEnabled(enable);
478 spacingBelowPlus->setEnabled(enable);
479 spacingBelowMinus->setEnabled(enable);
480 spacingBelowValueUnit->setEnabled(enable);
481 spacingBelowPlusUnit->setEnabled(enable);
482 spacingBelowMinusUnit->setEnabled(enable);
483 spacingBelowUnitsL->setEnabled(enable);
484 bool const enablel = ( (item==6) || (item!=6 && spacingAbove->currentItem()==6) );
485 spacingValueL->setEnabled(enablel);
486 spacingPlusL->setEnabled(enablel);
487 spacingMinusL->setEnabled(enablel);
491 void QParagraphDialog::closeEvent(QCloseEvent * e)
498 void QParagraphDialog::apply_adaptor()
504 void QParagraphDialog::cancel_adaptor()
511 void QParagraphDialog::ok_adaptor()
519 void QParagraphDialog::restore_adaptor()