2 * \file paragraphdlgimpl.C
3 * Copyright 2001 LyX Team
6 * \author John Levon, moz@compsoc.man.ac.uk
7 * \author Edwin Leuven, leuven@fee.uva.nl
10 #include "paragraphdlg.h"
16 #include "paragraphdlgimpl.h"
17 #include "FormParagraph.h"
18 #include "support/lstrings.h"
21 #include "qlineedit.h"
22 #include "qcombobox.h"
23 #include "qcheckbox.h"
24 #include "qpushbutton.h"
25 #include "qtabwidget.h"
27 #include "qgroupbox.h"
31 ParagraphDlgImpl::ParagraphDlgImpl(FormParagraph *form, QWidget* parent, const char* name, bool modal, WFlags fl )
32 : ParagraphDlg( parent, name, modal, fl ), form_(form)
38 ParagraphDlgImpl::~ParagraphDlgImpl()
43 void ParagraphDlgImpl::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 ParagraphDlgImpl::setLabelWidth(const char *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 ParagraphDlgImpl::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;
77 alignment->setCurrentItem(item);
81 void ParagraphDlgImpl::setChecks(bool labove, bool lbelow, bool pabove, bool pbelow, bool noindent)
83 lineAbove->setChecked(labove);
84 lineBelow->setChecked(lbelow);
85 pagebreakAbove->setChecked(pabove);
86 pagebreakBelow->setChecked(pbelow);
87 noIndent->setChecked(noindent);
91 void ParagraphDlgImpl::setSpace(VSpace::vspace_kind kindabove, VSpace::vspace_kind kindbelow, bool keepabove, bool keepbelow)
96 case VSpace::NONE: item = 0; break;
97 case VSpace::DEFSKIP: item = 1; break;
98 case VSpace::SMALLSKIP: item = 2; break;
99 case VSpace::MEDSKIP: item = 3; break;
100 case VSpace::BIGSKIP: item = 4; break;
101 case VSpace::VFILL: item = 5; break;
102 case VSpace::LENGTH: item = 6; break;
104 spacingAbove->setCurrentItem(item);
107 case VSpace::NONE: item = 0; break;
108 case VSpace::DEFSKIP: item = 1; break;
109 case VSpace::SMALLSKIP: item = 2; break;
110 case VSpace::MEDSKIP: item = 3; break;
111 case VSpace::BIGSKIP: item = 4; break;
112 case VSpace::VFILL: item = 5; break;
113 case VSpace::LENGTH: item = 6; break;
115 spacingBelow->setCurrentItem(item);
117 spacingAboveValue->setEnabled(kindabove == VSpace::LENGTH);
118 spacingAbovePlus->setEnabled(kindabove == VSpace::LENGTH);
119 spacingAboveMinus->setEnabled(kindabove == VSpace::LENGTH);
120 spacingBelowValue->setEnabled(kindbelow == VSpace::LENGTH);
121 spacingBelowPlus->setEnabled(kindbelow == VSpace::LENGTH);
122 spacingBelowMinus->setEnabled(kindbelow == VSpace::LENGTH);
124 spacingAboveKeep->setChecked(keepabove);
125 spacingBelowKeep->setChecked(keepbelow);
129 void ParagraphDlgImpl::setAboveLength(float val, float plus, float minus,
130 LyXLength::UNIT vunit, LyXLength::UNIT punit, LyXLength::UNIT munit)
132 if (vunit==LyXLength::UNIT_NONE) {
133 spacingAboveValue->setText("");
134 spacingAbovePlus->setText("");
135 spacingAboveMinus->setText("");
137 spacingAboveValue->setText(tostr(val).c_str());
138 spacingAbovePlus->setText(tostr(plus).c_str());
139 spacingAboveMinus->setText(tostr(minus).c_str());
142 spacingAboveValueUnit->setCurrentItem(getItem(vunit));
143 spacingAbovePlusUnit->setCurrentItem(getItem(punit));
144 spacingAboveMinusUnit->setCurrentItem(getItem(munit));
149 void ParagraphDlgImpl::setBelowLength(float val, float plus, float minus,
150 LyXLength::UNIT vunit, LyXLength::UNIT punit, LyXLength::UNIT munit)
152 if (vunit==LyXLength::UNIT_NONE) {
153 spacingBelowValue->setText("");
154 spacingBelowPlus->setText("");
155 spacingBelowMinus->setText("");
157 spacingBelowValue->setText(tostr(val).c_str());
158 spacingBelowPlus->setText(tostr(plus).c_str());
159 spacingBelowMinus->setText(tostr(minus).c_str());
162 spacingBelowValueUnit->setCurrentItem(getItem(vunit));
163 spacingBelowPlusUnit->setCurrentItem(getItem(punit));
164 spacingBelowMinusUnit->setCurrentItem(getItem(munit));
168 void ParagraphDlgImpl::setExtra(float widthval, LyXLength::UNIT units, const string percent, int align,
169 bool hfill, bool startminipage, LyXParagraph::PEXTRA_TYPE type)
171 if (type!=LyXParagraph::PEXTRA_NONE) {
172 lyxerr[Debug::GUI] << "percent : $" << percent << "$ widthval " << widthval << " unit " << long(units) << endl;
174 extraWidth->setText(percent.c_str());
175 extraUnit->setCurrentItem(11);
177 extraWidth->setText(tostr(widthval).c_str());
178 extraUnit->setCurrentItem(getItem(units));
181 extraWidth->setText("");
184 case LyXParagraph::PEXTRA_NONE:
185 extraType->setCurrentItem(0);
187 case LyXParagraph::PEXTRA_MINIPAGE:
188 extraType->setCurrentItem(1);
189 enable_extraOptions(1);
190 enable_minipageOptions(1);
192 case LyXParagraph::PEXTRA_FLOATFLT:
193 extraType->setCurrentItem(2);
194 enable_extraOptions(2);
196 case LyXParagraph::PEXTRA_INDENT:
197 extraType->setCurrentItem(3);
198 enable_extraOptions(3);
203 case LyXParagraph::MINIPAGE_ALIGN_TOP:
204 minipageValign->setCurrentItem(0);
206 case LyXParagraph::MINIPAGE_ALIGN_MIDDLE:
207 minipageValign->setCurrentItem(1);
209 case LyXParagraph::MINIPAGE_ALIGN_BOTTOM:
210 minipageValign->setCurrentItem(2);
214 minipageHfill->setChecked(hfill);
215 minipageStart->setChecked(startminipage);
219 LyXGlueLength ParagraphDlgImpl::getAboveLength() const
222 spacingAboveValue->text().toFloat(),
223 getLyXLength( spacingAboveValueUnit->currentItem() ),
224 spacingAbovePlus->text().toFloat(),
225 getLyXLength( spacingAbovePlusUnit->currentItem() ),
226 spacingAboveMinus->text().toFloat(),
227 getLyXLength( spacingAboveMinusUnit->currentItem() )
233 LyXGlueLength ParagraphDlgImpl::getBelowLength() const
236 spacingBelowValue->text().toFloat(),
237 getLyXLength( spacingBelowValueUnit->currentItem() ),
238 spacingBelowPlus->text().toFloat(),
239 getLyXLength( spacingBelowPlusUnit->currentItem() ),
240 spacingBelowMinus->text().toFloat(),
241 getLyXLength( spacingBelowMinusUnit->currentItem() )
247 LyXLength ParagraphDlgImpl::getExtraWidth() const
249 if (extraUnit->currentItem()!=11) {
251 (extraWidth->text()).toDouble(),
252 getLyXLength(extraUnit->currentItem())
256 LyXLength len(0.0, LyXLength::UNIT_NONE);
262 string ParagraphDlgImpl::getExtraWidthPercent() const
264 double val = (extraWidth->text()).toDouble();
273 const char * ParagraphDlgImpl::getLabelWidth() const {
274 return labelWidth->text();
278 LyXAlignment ParagraphDlgImpl::getAlign() const {
279 switch (alignment->currentItem()) {
280 case 0: return LYX_ALIGN_BLOCK;
281 case 1: return LYX_ALIGN_LEFT;
282 case 2: return LYX_ALIGN_RIGHT;
283 case 3: return LYX_ALIGN_CENTER;
284 default: return LYX_ALIGN_CENTER;
289 bool ParagraphDlgImpl::getAboveKeep() const {
290 return spacingAboveKeep->isChecked();
294 bool ParagraphDlgImpl::getBelowKeep() const {
295 return spacingBelowKeep->isChecked();
299 bool ParagraphDlgImpl::getLineAbove() const {
300 return lineAbove->isChecked();
304 bool ParagraphDlgImpl::getLineBelow() const {
305 return lineBelow->isChecked();
309 bool ParagraphDlgImpl::getPagebreakAbove() const {
310 return pagebreakAbove->isChecked();
314 bool ParagraphDlgImpl::getPagebreakBelow() const {
315 return pagebreakBelow->isChecked();
319 bool ParagraphDlgImpl::getNoIndent() const {
320 return noIndent->isChecked();
324 VSpace::vspace_kind ParagraphDlgImpl::getSpaceAboveKind() const {
325 return getSpaceKind(spacingAbove->currentItem());
329 VSpace::vspace_kind ParagraphDlgImpl::getSpaceBelowKind() const {
330 return getSpaceKind(spacingBelow->currentItem());
334 LyXParagraph::PEXTRA_TYPE ParagraphDlgImpl::getExtraType() const {
335 switch (extraType->currentItem()) {
336 case 0: return LyXParagraph::PEXTRA_NONE;
337 case 1: return LyXParagraph::PEXTRA_MINIPAGE;
338 case 2: return LyXParagraph::PEXTRA_FLOATFLT;
339 case 3: return LyXParagraph::PEXTRA_INDENT;
341 return LyXParagraph::PEXTRA_NONE;
345 LyXParagraph::MINIPAGE_ALIGNMENT ParagraphDlgImpl::getExtraAlign() const {
346 switch (minipageValign->currentItem()) {
347 case 0: return LyXParagraph::MINIPAGE_ALIGN_TOP;
348 case 1: return LyXParagraph::MINIPAGE_ALIGN_MIDDLE;
349 case 2: return LyXParagraph::MINIPAGE_ALIGN_BOTTOM;
350 default: return LyXParagraph::MINIPAGE_ALIGN_BOTTOM;
355 bool ParagraphDlgImpl::getHfillBetween() const {
356 return minipageHfill->isChecked();
360 bool ParagraphDlgImpl::getStartNewMinipage() const {
361 return minipageStart->isChecked();
365 VSpace::vspace_kind ParagraphDlgImpl::getSpaceKind(int val) const {
367 case 0: return VSpace::NONE;
368 case 1: return VSpace::DEFSKIP;
369 case 2: return VSpace::SMALLSKIP;
370 case 3: return VSpace::MEDSKIP;
371 case 4: return VSpace::BIGSKIP;
372 case 5: return VSpace::VFILL;
373 case 6: return VSpace::LENGTH;
375 lyxerr[Debug::GUI] << "Unknown kind combo entry " << val << std::endl;
381 LyXLength::UNIT ParagraphDlgImpl::getLyXLength(int val) const {
383 case 0: return LyXLength::CM;
384 case 1: return LyXLength::IN;
385 case 2: return LyXLength::PT;
386 case 3: return LyXLength::MM;
387 case 4: return LyXLength::PC;
388 case 5: return LyXLength::EX;
389 case 6: return LyXLength::EM;
390 case 7: return LyXLength::SP;
391 case 8: return LyXLength::BP;
392 case 9: return LyXLength::DD;
393 case 10: return LyXLength::CC;
395 lyxerr[Debug::GUI] << "Unknown kind combo entry " << val << std::endl;
397 return LyXLength::UNIT_NONE;
401 int ParagraphDlgImpl::getItem(LyXLength::UNIT unit) const {
404 case LyXLength::CM: item = 0; break;
405 case LyXLength::IN: item = 1; break;
406 case LyXLength::PT: item = 2; break;
407 case LyXLength::MM: item = 3; break;
408 case LyXLength::PC: item = 4; break;
409 case LyXLength::EX: item = 5; break;
410 case LyXLength::EM: item = 6; break;
411 case LyXLength::SP: item = 7; break;
412 case LyXLength::BP: item = 8; break;
413 case LyXLength::DD: item = 9; break;
414 case LyXLength::CC: item = 10; break;
415 case LyXLength::MU: item = 0; break;
416 case LyXLength::UNIT_NONE: item = 0; break;
418 lyxerr[Debug::GUI] << "Unknown unit " << long(unit) << endl;
424 void ParagraphDlgImpl::enable_extraOptions(int item)
426 bool enable = (item!=0);
427 extraWidth->setEnabled(enable);
428 extraWidthL->setEnabled(enable);
429 extraUnit->setEnabled(enable);
430 extraUnitL->setEnabled(enable);
434 void ParagraphDlgImpl::enable_minipageOptions(int item)
436 minipageOptions->setEnabled( item==1 );
440 void ParagraphDlgImpl::enable_spacingAbove(int item)
442 bool enable = (item==6);
443 spacingAboveValue->setEnabled(enable);
444 spacingAbovePlus->setEnabled(enable);
445 spacingAboveMinus->setEnabled(enable);
446 spacingAboveValueUnit->setEnabled(enable);
447 spacingAbovePlusUnit->setEnabled(enable);
448 spacingAboveMinusUnit->setEnabled(enable);
449 spacingAboveUnitsL->setEnabled(enable);
450 bool enablel = ( (item==6) || (item!=6 && spacingBelow->currentItem()==6) );
451 spacingValueL->setEnabled(enablel);
452 spacingPlusL->setEnabled(enablel);
453 spacingMinusL->setEnabled(enablel);
457 void ParagraphDlgImpl::enable_spacingBelow(int item)
459 bool enable = (item==6);
460 spacingBelowValue->setEnabled(enable);
461 spacingBelowPlus->setEnabled(enable);
462 spacingBelowMinus->setEnabled(enable);
463 spacingBelowValueUnit->setEnabled(enable);
464 spacingBelowPlusUnit->setEnabled(enable);
465 spacingBelowMinusUnit->setEnabled(enable);
466 spacingBelowUnitsL->setEnabled(enable);
467 bool enablel = ( (item==6) || (item!=6 && spacingAbove->currentItem()==6) );
468 spacingValueL->setEnabled(enablel);
469 spacingPlusL->setEnabled(enablel);
470 spacingMinusL->setEnabled(enablel);
474 void ParagraphDlgImpl::closeEvent(QCloseEvent * e)
481 void ParagraphDlgImpl::apply_adaptor()
487 void ParagraphDlgImpl::cancel_adaptor()
494 void ParagraphDlgImpl::ok_adaptor()
502 void ParagraphDlgImpl::restore_adaptor()