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));
160 void ParagraphDlgImpl::setExtra(float widthval, LyXLength::UNIT units, const string percent, int align,
161 bool hfill, bool startminipage, LyXParagraph::PEXTRA_TYPE type)
163 if (type!=LyXParagraph::PEXTRA_NONE) {
164 lyxerr[Debug::GUI] << "percent : $" << percent << "$ widthval " << widthval << " unit " << long(units) << endl;
166 extraWidth->setText(percent.c_str());
167 extraUnit->setCurrentItem(11);
169 extraWidth->setText(tostr(widthval).c_str());
170 extraUnit->setCurrentItem(getItem(units));
173 extraWidth->setText("");
176 case LyXParagraph::PEXTRA_NONE:
177 extraType->setCurrentItem(0);
179 case LyXParagraph::PEXTRA_MINIPAGE:
180 extraType->setCurrentItem(1);
181 enable_extraOptions(1);
182 enable_minipageOptions(1);
184 case LyXParagraph::PEXTRA_FLOATFLT:
185 extraType->setCurrentItem(2);
186 enable_extraOptions(2);
188 case LyXParagraph::PEXTRA_INDENT:
189 extraType->setCurrentItem(3);
190 enable_extraOptions(3);
195 case LyXParagraph::MINIPAGE_ALIGN_TOP:
196 minipageValign->setCurrentItem(0);
198 case LyXParagraph::MINIPAGE_ALIGN_MIDDLE:
199 minipageValign->setCurrentItem(1);
201 case LyXParagraph::MINIPAGE_ALIGN_BOTTOM:
202 minipageValign->setCurrentItem(2);
206 minipageHfill->setChecked(hfill);
207 minipageStart->setChecked(startminipage);
211 LyXGlueLength ParagraphDlgImpl::getAboveLength() const
214 spacingAboveValue->text().toFloat(),
215 getLyXLength( spacingAboveValueUnit->currentItem() ),
216 spacingAbovePlus->text().toFloat(),
217 getLyXLength( spacingAbovePlusUnit->currentItem() ),
218 spacingAboveMinus->text().toFloat(),
219 getLyXLength( spacingAboveMinusUnit->currentItem() )
224 LyXGlueLength ParagraphDlgImpl::getBelowLength() const
227 spacingBelowValue->text().toFloat(),
228 getLyXLength( spacingBelowValueUnit->currentItem() ),
229 spacingBelowPlus->text().toFloat(),
230 getLyXLength( spacingBelowPlusUnit->currentItem() ),
231 spacingBelowMinus->text().toFloat(),
232 getLyXLength( spacingBelowMinusUnit->currentItem() )
237 LyXLength ParagraphDlgImpl::getExtraWidth() const
239 if (extraUnit->currentItem()!=11) {
241 (extraWidth->text()).toDouble(),
242 getLyXLength(extraUnit->currentItem())
246 LyXLength len(0.0, LyXLength::UNIT_NONE);
251 string ParagraphDlgImpl::getExtraWidthPercent() const
253 double val = (extraWidth->text()).toDouble();
262 const char* ParagraphDlgImpl::getLabelWidth() const {
263 return labelWidth->text();
266 LyXAlignment ParagraphDlgImpl::getAlign() const {
267 switch (alignment->currentItem()) {
268 case 0: return LYX_ALIGN_BLOCK;
269 case 1: return LYX_ALIGN_LEFT;
270 case 2: return LYX_ALIGN_RIGHT;
271 case 3: return LYX_ALIGN_CENTER;
272 default: return LYX_ALIGN_CENTER;
277 bool ParagraphDlgImpl::getAboveKeep() const {
278 return spacingAboveKeep->isChecked();
281 bool ParagraphDlgImpl::getBelowKeep() const {
282 return spacingBelowKeep->isChecked();
285 bool ParagraphDlgImpl::getLineAbove() const {
286 return lineAbove->isChecked();
289 bool ParagraphDlgImpl::getLineBelow() const {
290 return lineBelow->isChecked();
293 bool ParagraphDlgImpl::getPagebreakAbove() const {
294 return pagebreakAbove->isChecked();
297 bool ParagraphDlgImpl::getPagebreakBelow() const {
298 return pagebreakBelow->isChecked();
301 bool ParagraphDlgImpl::getNoIndent() const {
302 return noIndent->isChecked();
305 VSpace::vspace_kind ParagraphDlgImpl::getSpaceAboveKind() const {
306 return getSpaceKind(spacingAbove->currentItem());
309 VSpace::vspace_kind ParagraphDlgImpl::getSpaceBelowKind() const {
310 return getSpaceKind(spacingBelow->currentItem());
313 LyXParagraph::PEXTRA_TYPE ParagraphDlgImpl::getExtraType() const {
314 switch (extraType->currentItem()) {
315 case 0: return LyXParagraph::PEXTRA_NONE;
316 case 1: return LyXParagraph::PEXTRA_MINIPAGE;
317 case 2: return LyXParagraph::PEXTRA_FLOATFLT;
318 case 3: return LyXParagraph::PEXTRA_INDENT;
320 return LyXParagraph::PEXTRA_NONE;
323 LyXParagraph::MINIPAGE_ALIGNMENT ParagraphDlgImpl::getExtraAlign() const {
324 switch (minipageValign->currentItem()) {
325 case 0: return LyXParagraph::MINIPAGE_ALIGN_TOP;
326 case 1: return LyXParagraph::MINIPAGE_ALIGN_MIDDLE;
327 case 2: return LyXParagraph::MINIPAGE_ALIGN_BOTTOM;
328 default: return LyXParagraph::MINIPAGE_ALIGN_BOTTOM;
332 bool ParagraphDlgImpl::getHfillBetween() const {
333 return minipageHfill->isChecked();
336 bool ParagraphDlgImpl::getStartNewMinipage() const {
337 return minipageStart->isChecked();
340 VSpace::vspace_kind ParagraphDlgImpl::getSpaceKind(int val) const {
342 case 0: return VSpace::NONE;
343 case 1: return VSpace::DEFSKIP;
344 case 2: return VSpace::SMALLSKIP;
345 case 3: return VSpace::MEDSKIP;
346 case 4: return VSpace::BIGSKIP;
347 case 5: return VSpace::VFILL;
348 case 6: return VSpace::LENGTH;
350 lyxerr[Debug::GUI] << "Unknown kind combo entry " << val << std::endl;
355 LyXLength::UNIT ParagraphDlgImpl::getLyXLength(int val) const {
357 case 0: return LyXLength::CM;
358 case 1: return LyXLength::IN;
359 case 2: return LyXLength::PT;
360 case 3: return LyXLength::MM;
361 case 4: return LyXLength::PC;
362 case 5: return LyXLength::EX;
363 case 6: return LyXLength::EM;
364 case 7: return LyXLength::SP;
365 case 8: return LyXLength::BP;
366 case 9: return LyXLength::DD;
367 case 10: return LyXLength::CC;
369 lyxerr[Debug::GUI] << "Unknown kind combo entry " << val << std::endl;
371 return LyXLength::UNIT_NONE;
374 int ParagraphDlgImpl::getItem(LyXLength::UNIT unit) const {
377 case LyXLength::CM: item = 0; break;
378 case LyXLength::IN: item = 1; break;
379 case LyXLength::PT: item = 2; break;
380 case LyXLength::MM: item = 3; break;
381 case LyXLength::PC: item = 4; break;
382 case LyXLength::EX: item = 5; break;
383 case LyXLength::EM: item = 6; break;
384 case LyXLength::SP: item = 7; break;
385 case LyXLength::BP: item = 8; break;
386 case LyXLength::DD: item = 9; break;
387 case LyXLength::CC: item = 10; break;
388 case LyXLength::MU: item = 0; break;
389 case LyXLength::UNIT_NONE: item = 0; break;
391 lyxerr[Debug::GUI] << "Unknown unit " << long(unit) << endl;
396 void ParagraphDlgImpl::enable_extraOptions(int item)
398 bool enable = (item!=0);
399 extraWidth->setEnabled(enable);
400 extraWidthL->setEnabled(enable);
401 extraUnit->setEnabled(enable);
402 extraUnitL->setEnabled(enable);
405 void ParagraphDlgImpl::enable_minipageOptions(int item)
407 minipageOptions->setEnabled( item==1 );
410 void ParagraphDlgImpl::enable_spacingAbove(int item)
412 bool enable = (item==6);
413 spacingAboveValue->setEnabled(enable);
414 spacingAbovePlus->setEnabled(enable);
415 spacingAboveMinus->setEnabled(enable);
416 spacingAboveValueUnit->setEnabled(enable);
417 spacingAbovePlusUnit->setEnabled(enable);
418 spacingAboveMinusUnit->setEnabled(enable);
419 spacingAboveUnitsL->setEnabled(enable);
420 bool enablel = ( (item==6) || (item!=6 && spacingBelow->currentItem()==6) );
421 spacingValueL->setEnabled(enablel);
422 spacingPlusL->setEnabled(enablel);
423 spacingMinusL->setEnabled(enablel);
426 void ParagraphDlgImpl::enable_spacingBelow(int item)
428 bool enable = (item==6);
429 spacingBelowValue->setEnabled(enable);
430 spacingBelowPlus->setEnabled(enable);
431 spacingBelowMinus->setEnabled(enable);
432 spacingBelowValueUnit->setEnabled(enable);
433 spacingBelowPlusUnit->setEnabled(enable);
434 spacingBelowMinusUnit->setEnabled(enable);
435 spacingBelowUnitsL->setEnabled(enable);
436 bool enablel = ( (item==6) || (item!=6 && spacingAbove->currentItem()==6) );
437 spacingValueL->setEnabled(enablel);
438 spacingPlusL->setEnabled(enablel);
439 spacingMinusL->setEnabled(enablel);
442 void ParagraphDlgImpl::closeEvent(QCloseEvent * e)
448 void ParagraphDlgImpl::apply_adaptor()
453 void ParagraphDlgImpl::cancel_adaptor()
459 void ParagraphDlgImpl::ok_adaptor()
466 void ParagraphDlgImpl::restore_adaptor()