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)
37 ParagraphDlgImpl::~ParagraphDlgImpl()
39 // no need to delete child widgets, Qt does it all for us
42 void ParagraphDlgImpl::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"));
51 void ParagraphDlgImpl::setLabelWidth(const char *text)
53 // FIXME: should be cleverer here
54 if (!strcmp(_("Senseless with this layout!"),text)) {
55 listOptions->setEnabled(false);
56 labelWidth->setText("");
58 listOptions->setEnabled(true);
59 labelWidth->setText(text);
63 void ParagraphDlgImpl::setAlign(int type)
67 case LYX_ALIGN_BLOCK : item=0; break;
68 case LYX_ALIGN_LEFT : item=1; break;
69 case LYX_ALIGN_RIGHT : item=2; break;
70 case LYX_ALIGN_CENTER : item=3; break;
74 alignment->setCurrentItem(item);
77 void ParagraphDlgImpl::setChecks(bool labove, bool lbelow, bool pabove, bool pbelow, bool noindent)
79 lineAbove->setChecked(labove);
80 lineBelow->setChecked(lbelow);
81 pagebreakAbove->setChecked(pabove);
82 pagebreakBelow->setChecked(pbelow);
83 noIndent->setChecked(noindent);
86 void ParagraphDlgImpl::setSpace(VSpace::vspace_kind kindabove, VSpace::vspace_kind kindbelow, bool keepabove, bool keepbelow)
91 case VSpace::NONE: item = 0; break;
92 case VSpace::DEFSKIP: item = 1; break;
93 case VSpace::SMALLSKIP: item = 2; break;
94 case VSpace::MEDSKIP: item = 3; break;
95 case VSpace::BIGSKIP: item = 4; break;
96 case VSpace::VFILL: item = 5; break;
97 case VSpace::LENGTH: item = 6; break;
99 spacingAbove->setCurrentItem(item);
102 case VSpace::NONE: item = 0; break;
103 case VSpace::DEFSKIP: item = 1; break;
104 case VSpace::SMALLSKIP: item = 2; break;
105 case VSpace::MEDSKIP: item = 3; break;
106 case VSpace::BIGSKIP: item = 4; break;
107 case VSpace::VFILL: item = 5; break;
108 case VSpace::LENGTH: item = 6; break;
110 spacingBelow->setCurrentItem(item);
112 spacingAboveValue->setEnabled(kindabove == VSpace::LENGTH);
113 spacingAbovePlus->setEnabled(kindabove == VSpace::LENGTH);
114 spacingAboveMinus->setEnabled(kindabove == VSpace::LENGTH);
115 spacingBelowValue->setEnabled(kindbelow == VSpace::LENGTH);
116 spacingBelowPlus->setEnabled(kindbelow == VSpace::LENGTH);
117 spacingBelowMinus->setEnabled(kindbelow == VSpace::LENGTH);
119 spacingAboveKeep->setChecked(keepabove);
120 spacingBelowKeep->setChecked(keepbelow);
123 void ParagraphDlgImpl::setAboveLength(float val, float plus, float minus,
124 LyXLength::UNIT vunit, LyXLength::UNIT punit, LyXLength::UNIT munit)
126 if (vunit==LyXLength::UNIT_NONE) {
127 spacingAboveValue->setText("");
128 spacingAbovePlus->setText("");
129 spacingAboveMinus->setText("");
131 spacingAboveValue->setText(tostr(val).c_str());
132 spacingAbovePlus->setText(tostr(plus).c_str());
133 spacingAboveMinus->setText(tostr(minus).c_str());
136 spacingAboveValueUnit->setCurrentItem(getItem(vunit));
137 spacingAbovePlusUnit->setCurrentItem(getItem(punit));
138 spacingAboveMinusUnit->setCurrentItem(getItem(munit));
142 void ParagraphDlgImpl::setBelowLength(float val, float plus, float minus,
143 LyXLength::UNIT vunit, LyXLength::UNIT punit, LyXLength::UNIT munit)
145 if (vunit==LyXLength::UNIT_NONE) {
146 spacingBelowValue->setText("");
147 spacingBelowPlus->setText("");
148 spacingBelowMinus->setText("");
150 spacingBelowValue->setText(tostr(val).c_str());
151 spacingBelowPlus->setText(tostr(plus).c_str());
152 spacingBelowMinus->setText(tostr(minus).c_str());
155 spacingBelowValueUnit->setCurrentItem(getItem(vunit));
156 spacingBelowPlusUnit->setCurrentItem(getItem(punit));
157 spacingBelowMinusUnit->setCurrentItem(getItem(munit));
161 void ParagraphDlgImpl::setExtra(float widthval, LyXLength::UNIT units, const string percent, int align,
162 bool hfill, bool startminipage, LyXParagraph::PEXTRA_TYPE type)
164 if (type!=LyXParagraph::PEXTRA_NONE) {
165 lyxerr[Debug::GUI] << "percent : $" << percent << "$ widthval " << widthval << " unit " << long(units) << endl;
167 extraWidth->setText(percent.c_str());
168 extraUnit->setCurrentItem(11);
170 extraWidth->setText(tostr(widthval).c_str());
171 extraUnit->setCurrentItem(getItem(units));
174 extraWidth->setText("");
177 case LyXParagraph::PEXTRA_NONE:
178 extraType->setCurrentItem(0);
180 case LyXParagraph::PEXTRA_MINIPAGE:
181 extraType->setCurrentItem(1);
182 enable_extraOptions(1);
183 enable_minipageOptions(1);
185 case LyXParagraph::PEXTRA_FLOATFLT:
186 extraType->setCurrentItem(2);
187 enable_extraOptions(2);
189 case LyXParagraph::PEXTRA_INDENT:
190 extraType->setCurrentItem(3);
191 enable_extraOptions(3);
196 case LyXParagraph::MINIPAGE_ALIGN_TOP:
197 minipageValign->setCurrentItem(0);
199 case LyXParagraph::MINIPAGE_ALIGN_MIDDLE:
200 minipageValign->setCurrentItem(1);
202 case LyXParagraph::MINIPAGE_ALIGN_BOTTOM:
203 minipageValign->setCurrentItem(2);
207 minipageHfill->setChecked(hfill);
208 minipageStart->setChecked(startminipage);
213 LyXGlueLength ParagraphDlgImpl::getAboveLength() const
216 spacingAboveValue->text().toFloat(),
217 getLyXLength( spacingAboveValueUnit->currentItem() ),
218 spacingAbovePlus->text().toFloat(),
219 getLyXLength( spacingAbovePlusUnit->currentItem() ),
220 spacingAboveMinus->text().toFloat(),
221 getLyXLength( spacingAboveMinusUnit->currentItem() )
226 LyXGlueLength ParagraphDlgImpl::getBelowLength() const
229 spacingBelowValue->text().toFloat(),
230 getLyXLength( spacingBelowValueUnit->currentItem() ),
231 spacingBelowPlus->text().toFloat(),
232 getLyXLength( spacingBelowPlusUnit->currentItem() ),
233 spacingBelowMinus->text().toFloat(),
234 getLyXLength( spacingBelowMinusUnit->currentItem() )
239 LyXLength ParagraphDlgImpl::getExtraWidth() const
241 if (extraUnit->currentItem()!=11) {
243 (extraWidth->text()).toDouble(),
244 getLyXLength(extraUnit->currentItem())
248 LyXLength len(0.0, LyXLength::UNIT_NONE);
253 string ParagraphDlgImpl::getExtraWidthPercent() const
255 double val = (extraWidth->text()).toDouble();
264 const char* ParagraphDlgImpl::getLabelWidth() const {
265 return labelWidth->text();
268 LyXAlignment ParagraphDlgImpl::getAlign() const {
269 switch (alignment->currentItem()) {
270 case 0: return LYX_ALIGN_BLOCK;
271 case 1: return LYX_ALIGN_LEFT;
272 case 2: return LYX_ALIGN_RIGHT;
273 case 3: return LYX_ALIGN_CENTER;
274 default: return LYX_ALIGN_CENTER;
279 bool ParagraphDlgImpl::getAboveKeep() const {
280 return spacingAboveKeep->isChecked();
283 bool ParagraphDlgImpl::getBelowKeep() const {
284 return spacingBelowKeep->isChecked();
287 bool ParagraphDlgImpl::getLineAbove() const {
288 return lineAbove->isChecked();
291 bool ParagraphDlgImpl::getLineBelow() const {
292 return lineBelow->isChecked();
295 bool ParagraphDlgImpl::getPagebreakAbove() const {
296 return pagebreakAbove->isChecked();
299 bool ParagraphDlgImpl::getPagebreakBelow() const {
300 return pagebreakBelow->isChecked();
303 bool ParagraphDlgImpl::getNoIndent() const {
304 return noIndent->isChecked();
307 VSpace::vspace_kind ParagraphDlgImpl::getSpaceAboveKind() const {
308 return getSpaceKind(spacingAbove->currentItem());
311 VSpace::vspace_kind ParagraphDlgImpl::getSpaceBelowKind() const {
312 return getSpaceKind(spacingBelow->currentItem());
316 LyXParagraph::PEXTRA_TYPE ParagraphDlgImpl::getExtraType() const {
317 switch (extraType->currentItem()) {
318 case 0: return LyXParagraph::PEXTRA_NONE;
319 case 1: return LyXParagraph::PEXTRA_MINIPAGE;
320 case 2: return LyXParagraph::PEXTRA_FLOATFLT;
321 case 3: return LyXParagraph::PEXTRA_INDENT;
323 return LyXParagraph::PEXTRA_NONE;
326 LyXParagraph::MINIPAGE_ALIGNMENT ParagraphDlgImpl::getExtraAlign() const {
327 switch (minipageValign->currentItem()) {
328 case 0: return LyXParagraph::MINIPAGE_ALIGN_TOP;
329 case 1: return LyXParagraph::MINIPAGE_ALIGN_MIDDLE;
330 case 2: return LyXParagraph::MINIPAGE_ALIGN_BOTTOM;
331 default: return LyXParagraph::MINIPAGE_ALIGN_BOTTOM;
335 bool ParagraphDlgImpl::getHfillBetween() const {
336 return minipageHfill->isChecked();
339 bool ParagraphDlgImpl::getStartNewMinipage() const {
340 return minipageStart->isChecked();
344 VSpace::vspace_kind ParagraphDlgImpl::getSpaceKind(int val) const {
346 case 0: return VSpace::NONE;
347 case 1: return VSpace::DEFSKIP;
348 case 2: return VSpace::SMALLSKIP;
349 case 3: return VSpace::MEDSKIP;
350 case 4: return VSpace::BIGSKIP;
351 case 5: return VSpace::VFILL;
352 case 6: return VSpace::LENGTH;
354 lyxerr[Debug::GUI] << "Unknown kind combo entry " << val << std::endl;
359 LyXLength::UNIT ParagraphDlgImpl::getLyXLength(int val) const {
361 case 0: return LyXLength::CM;
362 case 1: return LyXLength::IN;
363 case 2: return LyXLength::PT;
364 case 3: return LyXLength::MM;
365 case 4: return LyXLength::PC;
366 case 5: return LyXLength::EX;
367 case 6: return LyXLength::EM;
368 case 7: return LyXLength::SP;
369 case 8: return LyXLength::BP;
370 case 9: return LyXLength::DD;
371 case 10: return LyXLength::CC;
373 lyxerr[Debug::GUI] << "Unknown kind combo entry " << val << std::endl;
375 return LyXLength::UNIT_NONE;
378 int ParagraphDlgImpl::getItem(LyXLength::UNIT unit) const {
381 case LyXLength::CM: item = 0; break;
382 case LyXLength::IN: item = 1; break;
383 case LyXLength::PT: item = 2; break;
384 case LyXLength::MM: item = 3; break;
385 case LyXLength::PC: item = 4; break;
386 case LyXLength::EX: item = 5; break;
387 case LyXLength::EM: item = 6; break;
388 case LyXLength::SP: item = 7; break;
389 case LyXLength::BP: item = 8; break;
390 case LyXLength::DD: item = 9; break;
391 case LyXLength::CC: item = 10; break;
392 case LyXLength::MU: item = 0; break;
393 case LyXLength::UNIT_NONE: item = 0; break;
395 lyxerr[Debug::GUI] << "Unknown unit " << long(unit) << endl;
400 void ParagraphDlgImpl::enable_extraOptions(int item)
402 bool enable = (item!=0);
403 extraWidth->setEnabled(enable);
404 extraWidthL->setEnabled(enable);
405 extraUnit->setEnabled(enable);
406 extraUnitL->setEnabled(enable);
409 void ParagraphDlgImpl::enable_minipageOptions(int item)
411 minipageOptions->setEnabled( item==1 );
414 void ParagraphDlgImpl::enable_spacingAbove(int item)
416 bool enable = (item==6);
417 spacingAboveValue->setEnabled(enable);
418 spacingAbovePlus->setEnabled(enable);
419 spacingAboveMinus->setEnabled(enable);
420 spacingAboveValueUnit->setEnabled(enable);
421 spacingAbovePlusUnit->setEnabled(enable);
422 spacingAboveMinusUnit->setEnabled(enable);
423 spacingAboveUnitsL->setEnabled(enable);
424 bool enablel = ( (item==6) || (item!=6 && spacingBelow->currentItem()==6) );
425 spacingValueL->setEnabled(enablel);
426 spacingPlusL->setEnabled(enablel);
427 spacingMinusL->setEnabled(enablel);
430 void ParagraphDlgImpl::enable_spacingBelow(int item)
432 bool enable = (item==6);
433 spacingBelowValue->setEnabled(enable);
434 spacingBelowPlus->setEnabled(enable);
435 spacingBelowMinus->setEnabled(enable);
436 spacingBelowValueUnit->setEnabled(enable);
437 spacingBelowPlusUnit->setEnabled(enable);
438 spacingBelowMinusUnit->setEnabled(enable);
439 spacingBelowUnitsL->setEnabled(enable);
440 bool enablel = ( (item==6) || (item!=6 && spacingAbove->currentItem()==6) );
441 spacingValueL->setEnabled(enablel);
442 spacingPlusL->setEnabled(enablel);
443 spacingMinusL->setEnabled(enablel);
446 void ParagraphDlgImpl::closeEvent(QCloseEvent * e)
452 void ParagraphDlgImpl::apply_adaptor()
457 void ParagraphDlgImpl::cancel_adaptor()
463 void ParagraphDlgImpl::ok_adaptor()
470 void ParagraphDlgImpl::restore_adaptor()