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,
30 char const * name, bool modal, WFlags fl)
31 : QParagraphDialogBase(parent, name, modal, fl),
38 QParagraphDialog::~QParagraphDialog()
43 void QParagraphDialog::setReadOnly(bool readonly)
45 TabsParagraph->setEnabled(!readonly);
46 okPB->setEnabled(!readonly);
47 applyPB->setEnabled(!readonly);
48 defaultsPB->setEnabled(!readonly);
49 cancelPB->setText(readonly ? _("&Close") : _("&Cancel"));
53 void QParagraphDialog::setLabelWidth(char const * text)
55 // FIXME: should be cleverer here
56 if (!strcmp(_("Senseless with this layout!"),text)) {
57 listOptions->setEnabled(false);
58 labelWidth->setText("");
60 listOptions->setEnabled(true);
61 labelWidth->setText(text);
66 void QParagraphDialog::setAlign(int type)
70 case LYX_ALIGN_BLOCK: item = 0; break;
71 case LYX_ALIGN_LEFT: item = 1; break;
72 case LYX_ALIGN_RIGHT: item = 2; break;
73 case LYX_ALIGN_CENTER: item = 3; break;
78 alignment->setCurrentItem(item);
82 void QParagraphDialog::setChecks(bool labove, bool lbelow, bool pabove,
83 bool pbelow, bool noindent)
85 lineAbove->setChecked(labove);
86 lineBelow->setChecked(lbelow);
87 pagebreakAbove->setChecked(pabove);
88 pagebreakBelow->setChecked(pbelow);
89 noIndent->setChecked(noindent);
93 void QParagraphDialog::setSpace(VSpace::vspace_kind kindabove,
94 VSpace::vspace_kind kindbelow,
95 bool keepabove, bool keepbelow)
100 case VSpace::NONE: item = 0; break;
101 case VSpace::DEFSKIP: item = 1; break;
102 case VSpace::SMALLSKIP: item = 2; break;
103 case VSpace::MEDSKIP: item = 3; break;
104 case VSpace::BIGSKIP: item = 4; break;
105 case VSpace::VFILL: item = 5; break;
106 case VSpace::LENGTH: item = 6; break;
108 spacingAbove->setCurrentItem(item);
111 case VSpace::NONE: item = 0; break;
112 case VSpace::DEFSKIP: item = 1; break;
113 case VSpace::SMALLSKIP: item = 2; break;
114 case VSpace::MEDSKIP: item = 3; break;
115 case VSpace::BIGSKIP: item = 4; break;
116 case VSpace::VFILL: item = 5; break;
117 case VSpace::LENGTH: item = 6; break;
119 spacingBelow->setCurrentItem(item);
121 spacingAboveValue->setEnabled(kindabove == VSpace::LENGTH);
122 spacingAbovePlus->setEnabled(kindabove == VSpace::LENGTH);
123 spacingAboveMinus->setEnabled(kindabove == VSpace::LENGTH);
124 spacingBelowValue->setEnabled(kindbelow == VSpace::LENGTH);
125 spacingBelowPlus->setEnabled(kindbelow == VSpace::LENGTH);
126 spacingBelowMinus->setEnabled(kindbelow == VSpace::LENGTH);
128 spacingAboveKeep->setChecked(keepabove);
129 spacingBelowKeep->setChecked(keepbelow);
133 void QParagraphDialog::setAboveLength(float val, float plus, float minus,
134 LyXLength::UNIT vunit,
135 LyXLength::UNIT punit,
136 LyXLength::UNIT munit)
138 if (vunit == LyXLength::UNIT_NONE) {
139 spacingAboveValue->setText("");
140 spacingAbovePlus->setText("");
141 spacingAboveMinus->setText("");
143 spacingAboveValue->setText(tostr(val).c_str());
144 spacingAbovePlus->setText(tostr(plus).c_str());
145 spacingAboveMinus->setText(tostr(minus).c_str());
148 spacingAboveValueUnit->setCurrentItem(getItem(vunit));
149 spacingAbovePlusUnit->setCurrentItem(getItem(punit));
150 spacingAboveMinusUnit->setCurrentItem(getItem(munit));
155 void QParagraphDialog::setBelowLength(float val, float plus, float minus,
156 LyXLength::UNIT vunit,
157 LyXLength::UNIT punit,
158 LyXLength::UNIT munit)
160 if (vunit == LyXLength::UNIT_NONE) {
161 spacingBelowValue->setText("");
162 spacingBelowPlus->setText("");
163 spacingBelowMinus->setText("");
165 spacingBelowValue->setText(tostr(val).c_str());
166 spacingBelowPlus->setText(tostr(plus).c_str());
167 spacingBelowMinus->setText(tostr(minus).c_str());
170 spacingBelowValueUnit->setCurrentItem(getItem(vunit));
171 spacingBelowPlusUnit->setCurrentItem(getItem(punit));
172 spacingBelowMinusUnit->setCurrentItem(getItem(munit));
176 void QParagraphDialog::setExtra(float widthval, LyXLength::UNIT units,
177 string const & percent, int align,
178 bool hfill, bool startminipage,
179 Paragraph::PEXTRA_TYPE type)
181 if (type != Paragraph::PEXTRA_NONE) {
182 lyxerr[Debug::GUI] << "percent : $" << percent << "$ widthval "
183 << widthval << " unit " << long(units)
186 extraWidth->setText(percent.c_str());
187 extraUnit->setCurrentItem(11);
189 extraWidth->setText(tostr(widthval).c_str());
190 extraUnit->setCurrentItem(getItem(units));
193 extraWidth->setText("");
196 case Paragraph::PEXTRA_NONE:
197 extraType->setCurrentItem(0);
199 case Paragraph::PEXTRA_MINIPAGE:
200 extraType->setCurrentItem(1);
201 enable_extraOptions(1);
202 enable_minipageOptions(1);
204 case Paragraph::PEXTRA_FLOATFLT:
205 extraType->setCurrentItem(2);
206 enable_extraOptions(2);
208 case Paragraph::PEXTRA_INDENT:
209 extraType->setCurrentItem(3);
210 enable_extraOptions(3);
215 case Paragraph::MINIPAGE_ALIGN_TOP:
216 minipageValign->setCurrentItem(0);
218 case Paragraph::MINIPAGE_ALIGN_MIDDLE:
219 minipageValign->setCurrentItem(1);
221 case Paragraph::MINIPAGE_ALIGN_BOTTOM:
222 minipageValign->setCurrentItem(2);
226 minipageHfill->setChecked(hfill);
227 minipageStart->setChecked(startminipage);
231 LyXGlueLength QParagraphDialog::getAboveLength() const
234 LyXLength(spacingAboveValue->text().toFloat(),
235 getLyXLength(spacingAboveValueUnit->currentItem())),
236 LyXLength(spacingAbovePlus->text().toFloat(),
237 getLyXLength(spacingAbovePlusUnit->currentItem())),
238 LyXLength(spacingAboveMinus->text().toFloat(),
239 getLyXLength(spacingAboveMinusUnit->currentItem()))
245 LyXGlueLength QParagraphDialog::getBelowLength() const
248 LyXLength(spacingBelowValue->text().toFloat(),
249 getLyXLength(spacingBelowValueUnit->currentItem())),
250 LyXLength(spacingBelowPlus->text().toFloat(),
251 getLyXLength(spacingBelowPlusUnit->currentItem())),
252 LyXLength(spacingBelowMinus->text().toFloat(),
253 getLyXLength(spacingBelowMinusUnit->currentItem()))
259 LyXLength QParagraphDialog::getExtraWidth() const
261 if (extraUnit->currentItem() != 11) {
263 (extraWidth->text()).toDouble(),
264 getLyXLength(extraUnit->currentItem())
268 LyXLength len(0.0, LyXLength::UNIT_NONE);
274 string QParagraphDialog::getExtraWidthPercent() const
276 double val = (extraWidth->text()).toDouble();
285 char const * QParagraphDialog::getLabelWidth() const
287 return labelWidth->text();
291 LyXAlignment QParagraphDialog::getAlign() const
293 switch (alignment->currentItem()) {
294 case 0: return LYX_ALIGN_BLOCK;
295 case 1: return LYX_ALIGN_LEFT;
296 case 2: return LYX_ALIGN_RIGHT;
297 case 3: return LYX_ALIGN_CENTER;
298 default: return LYX_ALIGN_CENTER;
303 bool QParagraphDialog::getAboveKeep() const
305 return spacingAboveKeep->isChecked();
309 bool QParagraphDialog::getBelowKeep() const
311 return spacingBelowKeep->isChecked();
315 bool QParagraphDialog::getLineAbove() const
317 return lineAbove->isChecked();
321 bool QParagraphDialog::getLineBelow() const
323 return lineBelow->isChecked();
327 bool QParagraphDialog::getPagebreakAbove() const
329 return pagebreakAbove->isChecked();
333 bool QParagraphDialog::getPagebreakBelow() const
335 return pagebreakBelow->isChecked();
339 bool QParagraphDialog::getNoIndent() const
341 return noIndent->isChecked();
345 VSpace::vspace_kind QParagraphDialog::getSpaceAboveKind() const
347 return getSpaceKind(spacingAbove->currentItem());
351 VSpace::vspace_kind QParagraphDialog::getSpaceBelowKind() const
353 return getSpaceKind(spacingBelow->currentItem());
357 Paragraph::PEXTRA_TYPE QParagraphDialog::getExtraType() const
359 switch (extraType->currentItem()) {
360 case 0: return Paragraph::PEXTRA_NONE;
361 case 1: return Paragraph::PEXTRA_MINIPAGE;
362 case 2: return Paragraph::PEXTRA_FLOATFLT;
363 case 3: return Paragraph::PEXTRA_INDENT;
365 return Paragraph::PEXTRA_NONE;
369 Paragraph::MINIPAGE_ALIGNMENT QParagraphDialog::getExtraAlign() const
371 switch (minipageValign->currentItem()) {
372 case 0: return Paragraph::MINIPAGE_ALIGN_TOP;
373 case 1: return Paragraph::MINIPAGE_ALIGN_MIDDLE;
374 case 2: return Paragraph::MINIPAGE_ALIGN_BOTTOM;
375 default: return Paragraph::MINIPAGE_ALIGN_BOTTOM;
380 bool QParagraphDialog::getHfillBetween() const
382 return minipageHfill->isChecked();
386 bool QParagraphDialog::getStartNewMinipage() const
388 return minipageStart->isChecked();
392 VSpace::vspace_kind QParagraphDialog::getSpaceKind(int val) const
395 case 0: return VSpace::NONE;
396 case 1: return VSpace::DEFSKIP;
397 case 2: return VSpace::SMALLSKIP;
398 case 3: return VSpace::MEDSKIP;
399 case 4: return VSpace::BIGSKIP;
400 case 5: return VSpace::VFILL;
401 case 6: return VSpace::LENGTH;
403 lyxerr[Debug::GUI] << "Unknown kind combo entry "
410 LyXLength::UNIT QParagraphDialog::getLyXLength(int val) const
413 case 0: return LyXLength::CM;
414 case 1: return LyXLength::IN;
415 case 2: return LyXLength::PT;
416 case 3: return LyXLength::MM;
417 case 4: return LyXLength::PC;
418 case 5: return LyXLength::EX;
419 case 6: return LyXLength::EM;
420 case 7: return LyXLength::SP;
421 case 8: return LyXLength::BP;
422 case 9: return LyXLength::DD;
423 case 10: return LyXLength::CC;
425 lyxerr[Debug::GUI] << "Unknown kind combo entry "
428 return LyXLength::UNIT_NONE;
432 int QParagraphDialog::getItem(LyXLength::UNIT unit) const
436 case LyXLength::CM: item = 0; break;
437 case LyXLength::IN: item = 1; break;
438 case LyXLength::PT: item = 2; break;
439 case LyXLength::MM: item = 3; break;
440 case LyXLength::PC: item = 4; break;
441 case LyXLength::EX: item = 5; break;
442 case LyXLength::EM: item = 6; break;
443 case LyXLength::SP: item = 7; break;
444 case LyXLength::BP: item = 8; break;
445 case LyXLength::DD: item = 9; break;
446 case LyXLength::CC: item = 10; break;
447 case LyXLength::MU: item = 0; break;
448 case LyXLength::UNIT_NONE: item = 0; break;
450 lyxerr[Debug::GUI] << "Unknown unit " << long(unit)
457 void QParagraphDialog::enable_extraOptions(int item)
459 bool const enable = (item != 0);
460 extraWidth->setEnabled(enable);
461 extraWidthL->setEnabled(enable);
462 extraUnit->setEnabled(enable);
463 extraUnitL->setEnabled(enable);
467 void QParagraphDialog::enable_minipageOptions(int item)
469 minipageOptions->setEnabled( item == 1 );
473 void QParagraphDialog::enable_spacingAbove(int item)
475 bool const enable = (item == 6);
476 spacingAboveValue->setEnabled(enable);
477 spacingAbovePlus->setEnabled(enable);
478 spacingAboveMinus->setEnabled(enable);
479 spacingAboveValueUnit->setEnabled(enable);
480 spacingAbovePlusUnit->setEnabled(enable);
481 spacingAboveMinusUnit->setEnabled(enable);
482 spacingAboveUnitsL->setEnabled(enable);
483 bool const enablel = ( (item == 6) || (item != 6 && spacingBelow->currentItem() == 6) );
484 spacingValueL->setEnabled(enablel);
485 spacingPlusL->setEnabled(enablel);
486 spacingMinusL->setEnabled(enablel);
490 void QParagraphDialog::enable_spacingBelow(int item)
492 bool const enable = (item == 6);
493 spacingBelowValue->setEnabled(enable);
494 spacingBelowPlus->setEnabled(enable);
495 spacingBelowMinus->setEnabled(enable);
496 spacingBelowValueUnit->setEnabled(enable);
497 spacingBelowPlusUnit->setEnabled(enable);
498 spacingBelowMinusUnit->setEnabled(enable);
499 spacingBelowUnitsL->setEnabled(enable);
500 bool const enablel = ( (item == 6) || (item!=6 && spacingAbove->currentItem() == 6) );
501 spacingValueL->setEnabled(enablel);
502 spacingPlusL->setEnabled(enablel);
503 spacingMinusL->setEnabled(enablel);
507 void QParagraphDialog::closeEvent(QCloseEvent * e)
514 void QParagraphDialog::apply_adaptor()
520 void QParagraphDialog::cancel_adaptor()
527 void QParagraphDialog::ok_adaptor()
535 void QParagraphDialog::restore_adaptor()