]> git.lyx.org Git - lyx.git/blob - src/frontends/qt2/QParagraphDialog.C
fix typo that put too many include paths for most people
[lyx.git] / src / frontends / qt2 / QParagraphDialog.C
1 /**
2  * \file QParagraphDialog.C
3  * Copyright 2001 LyX Team
4  * see the file COPYING
5  *
6  * \author John Levon, moz@compsoc.man.ac.uk
7  * \author Edwin Leuven, leuven@fee.uva.nl
8  */
9
10 #include <config.h>
11 #include <gettext.h>
12 #include <string>
13
14 #include "QParagraphDialog.h"
15 #include "QParagraph.h"
16 #include "support/lstrings.h"
17 #include "debug.h"
18
19 #include <qlineedit.h>
20 #include <qcombobox.h>
21 #include <qcheckbox.h>
22 #include <qpushbutton.h>
23 #include <qtabwidget.h>
24 #include <qlabel.h>
25 #include <qgroupbox.h>
26
27 using std::endl;
28
29 QParagraphDialog::QParagraphDialog(QParagraph * form, QWidget * parent,
30                                    char const * name, bool modal, WFlags fl)
31         : QParagraphDialogBase(parent, name, modal, fl),
32           form_(form)
33 {
34         setCaption(name);
35 }
36
37
38 QParagraphDialog::~QParagraphDialog()
39 {
40 }
41
42
43 void QParagraphDialog::setReadOnly(bool readonly)
44 {
45         TabsParagraph->setEnabled(!readonly);
46         okPB->setEnabled(!readonly);
47         applyPB->setEnabled(!readonly);
48         defaultsPB->setEnabled(!readonly);
49         cancelPB->setText(readonly ? _("&Close") : _("&Cancel"));
50 }
51
52
53 void QParagraphDialog::setLabelWidth(char const * text)
54 {
55         // FIXME: should be cleverer here
56         if (!strcmp(_("Senseless with this layout!"),text)) {
57                 listOptions->setEnabled(false);
58                 labelWidth->setText("");
59         } else {
60                 listOptions->setEnabled(true);
61                 labelWidth->setText(text);
62         }
63 }
64
65
66 void QParagraphDialog::setAlign(int type)
67 {
68         int item = 0;
69         switch (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;
74                 default:
75                         item = 0;
76                         break;
77         }
78         alignment->setCurrentItem(item);
79 }
80
81
82 void QParagraphDialog::setChecks(bool labove, bool lbelow, bool pabove,
83                                  bool pbelow, bool noindent)
84 {
85         lineAbove->setChecked(labove);
86         lineBelow->setChecked(lbelow);
87         pagebreakAbove->setChecked(pabove);
88         pagebreakBelow->setChecked(pbelow);
89         noIndent->setChecked(noindent);
90 }
91
92
93 void QParagraphDialog::setSpace(VSpace::vspace_kind kindabove,
94                                 VSpace::vspace_kind kindbelow,
95                                 bool keepabove, bool keepbelow)
96 {
97         int item = 0;
98
99         switch (kindabove) {
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;
107         }
108         spacingAbove->setCurrentItem(item);
109
110         switch (kindbelow) {
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;
118         }
119         spacingBelow->setCurrentItem(item);
120
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);
127
128         spacingAboveKeep->setChecked(keepabove);
129         spacingBelowKeep->setChecked(keepbelow);
130 }
131
132
133 void QParagraphDialog::setAboveLength(float val, float plus, float minus,
134                                       LyXLength::UNIT vunit,
135                                       LyXLength::UNIT punit,
136                                       LyXLength::UNIT munit)
137 {
138         if (vunit == LyXLength::UNIT_NONE) {
139                 spacingAboveValue->setText("");
140                 spacingAbovePlus->setText("");
141                 spacingAboveMinus->setText("");
142         } else {
143                 spacingAboveValue->setText(tostr(val).c_str());
144                 spacingAbovePlus->setText(tostr(plus).c_str());
145                 spacingAboveMinus->setText(tostr(minus).c_str());
146         }
147
148         spacingAboveValueUnit->setCurrentItem(getItem(vunit));
149         spacingAbovePlusUnit->setCurrentItem(getItem(punit));
150         spacingAboveMinusUnit->setCurrentItem(getItem(munit));
151
152 }
153
154
155 void QParagraphDialog::setBelowLength(float val, float plus, float minus,
156                                       LyXLength::UNIT vunit,
157                                       LyXLength::UNIT punit,
158                                       LyXLength::UNIT munit)
159 {
160         if (vunit == LyXLength::UNIT_NONE) {
161                 spacingBelowValue->setText("");
162                 spacingBelowPlus->setText("");
163                 spacingBelowMinus->setText("");
164         } else {
165                 spacingBelowValue->setText(tostr(val).c_str());
166                 spacingBelowPlus->setText(tostr(plus).c_str());
167                 spacingBelowMinus->setText(tostr(minus).c_str());
168         }
169
170         spacingBelowValueUnit->setCurrentItem(getItem(vunit));
171         spacingBelowPlusUnit->setCurrentItem(getItem(punit));
172         spacingBelowMinusUnit->setCurrentItem(getItem(munit));
173 }
174
175
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)
180 {
181         if (type != Paragraph::PEXTRA_NONE) {
182                 lyxerr[Debug::GUI] << "percent : $" << percent << "$ widthval "
183                                    << widthval << " unit " << long(units)
184                                    << endl;
185                 if (percent != "") {
186                         extraWidth->setText(percent.c_str());
187                         extraUnit->setCurrentItem(11);
188                 } else {
189                         extraWidth->setText(tostr(widthval).c_str());
190                         extraUnit->setCurrentItem(getItem(units));
191                 }
192         } else
193                 extraWidth->setText("");
194
195         switch (type) {
196                 case Paragraph::PEXTRA_NONE:
197                         extraType->setCurrentItem(0);
198                         break;
199                 case Paragraph::PEXTRA_MINIPAGE:
200                         extraType->setCurrentItem(1);
201                         enable_extraOptions(1);
202                         enable_minipageOptions(1);
203                         break;
204                 case Paragraph::PEXTRA_FLOATFLT:
205                         extraType->setCurrentItem(2);
206                         enable_extraOptions(2);
207                         break;
208                 case Paragraph::PEXTRA_INDENT:
209                         extraType->setCurrentItem(3);
210                         enable_extraOptions(3);
211                         break;
212         }
213
214         switch (align) {
215                 case Paragraph::MINIPAGE_ALIGN_TOP:
216                         minipageValign->setCurrentItem(0);
217                         break;
218                 case Paragraph::MINIPAGE_ALIGN_MIDDLE:
219                         minipageValign->setCurrentItem(1);
220                         break;
221                 case Paragraph::MINIPAGE_ALIGN_BOTTOM:
222                         minipageValign->setCurrentItem(2);
223                         break;
224         }
225
226         minipageHfill->setChecked(hfill);
227         minipageStart->setChecked(startminipage);
228 }
229
230
231 LyXGlueLength QParagraphDialog::getAboveLength() const
232 {
233         LyXGlueLength len(
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()))
240                 );
241         return len;
242 }
243
244
245 LyXGlueLength QParagraphDialog::getBelowLength() const
246 {
247         LyXGlueLength len(
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()))
254                 );
255         return len;
256 }
257
258
259 LyXLength QParagraphDialog::getExtraWidth() const
260 {
261         if (extraUnit->currentItem() != 11) {
262                 LyXLength len(
263                          (extraWidth->text()).toDouble(),
264                          getLyXLength(extraUnit->currentItem())
265                          );
266                 return len;
267         } else {
268                 LyXLength len(0.0, LyXLength::UNIT_NONE);
269                 return len;
270         }
271 }
272
273
274 string QParagraphDialog::getExtraWidthPercent() const
275 {
276         double val = (extraWidth->text()).toDouble();
277         if (val > 100.0)
278                 val = 100.0;
279         if (val < 0.0)
280                 val = 0.0;
281         return tostr(val);
282 }
283
284
285 char const * QParagraphDialog::getLabelWidth() const
286 {
287         return labelWidth->text();
288 }
289
290
291 LyXAlignment QParagraphDialog::getAlign() const
292 {
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;
299         }
300 }
301
302
303 bool QParagraphDialog::getAboveKeep() const
304 {
305         return spacingAboveKeep->isChecked();
306 }
307
308
309 bool QParagraphDialog::getBelowKeep() const
310 {
311         return spacingBelowKeep->isChecked();
312 }
313
314
315 bool QParagraphDialog::getLineAbove() const
316 {
317         return lineAbove->isChecked();
318 }
319
320
321 bool QParagraphDialog::getLineBelow() const
322 {
323         return lineBelow->isChecked();
324 }
325
326
327 bool QParagraphDialog::getPagebreakAbove() const
328 {
329         return pagebreakAbove->isChecked();
330 }
331
332
333 bool QParagraphDialog::getPagebreakBelow() const
334 {
335         return pagebreakBelow->isChecked();
336 }
337
338
339 bool QParagraphDialog::getNoIndent() const
340 {
341         return noIndent->isChecked();
342 }
343
344
345 VSpace::vspace_kind QParagraphDialog::getSpaceAboveKind() const
346 {
347         return getSpaceKind(spacingAbove->currentItem());
348 }
349
350
351 VSpace::vspace_kind QParagraphDialog::getSpaceBelowKind() const
352 {
353         return getSpaceKind(spacingBelow->currentItem());
354 }
355
356
357 Paragraph::PEXTRA_TYPE QParagraphDialog::getExtraType() const
358 {
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;
364         }
365         return Paragraph::PEXTRA_NONE;
366 }
367
368
369 Paragraph::MINIPAGE_ALIGNMENT QParagraphDialog::getExtraAlign() const
370 {
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;
376         }
377 }
378
379
380 bool QParagraphDialog::getHfillBetween() const
381 {
382         return minipageHfill->isChecked();
383 }
384
385
386 bool QParagraphDialog::getStartNewMinipage() const
387 {
388         return minipageStart->isChecked();
389 }
390
391
392 VSpace::vspace_kind QParagraphDialog::getSpaceKind(int val) const
393 {
394         switch (val) {
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;
402                 default:
403                         lyxerr[Debug::GUI] << "Unknown kind combo entry "
404                                            << val << std::endl;
405                 }
406         return VSpace::NONE;
407 }
408
409
410 LyXLength::UNIT QParagraphDialog::getLyXLength(int val) const
411 {
412         switch (val) {
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;
424                 default:
425                         lyxerr[Debug::GUI] << "Unknown kind combo entry "
426                                            << val << std::endl;
427         }
428         return LyXLength::UNIT_NONE;
429 }
430
431
432 int QParagraphDialog::getItem(LyXLength::UNIT unit) const
433 {
434         int item = 0;
435         switch (unit) {
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;
449                 default:
450                         lyxerr[Debug::GUI] << "Unknown unit " << long(unit)
451                                            << endl;
452         }
453         return item;
454 }
455
456
457 void QParagraphDialog::enable_extraOptions(int item)
458 {
459         bool const enable = (item != 0);
460         extraWidth->setEnabled(enable);
461         extraWidthL->setEnabled(enable);
462         extraUnit->setEnabled(enable);
463         extraUnitL->setEnabled(enable);
464 }
465
466
467 void QParagraphDialog::enable_minipageOptions(int item)
468 {
469         minipageOptions->setEnabled( item == 1 );
470 }
471
472
473 void QParagraphDialog::enable_spacingAbove(int item)
474 {
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);
487 }
488
489
490 void QParagraphDialog::enable_spacingBelow(int item)
491 {
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);
504 }
505
506
507 void QParagraphDialog::closeEvent(QCloseEvent * e)
508 {
509         form_->close();
510         e->accept();
511 }
512
513
514 void QParagraphDialog::apply_adaptor()
515 {
516         form_->apply();
517 }
518
519
520 void QParagraphDialog::cancel_adaptor()
521 {
522         form_->close();
523         hide();
524 }
525
526
527 void QParagraphDialog::ok_adaptor()
528 {
529         apply_adaptor();
530         form_->close();
531         hide();
532 }
533
534
535 void QParagraphDialog::restore_adaptor()
536 {
537         form_->update();
538 }