]> git.lyx.org Git - features.git/blob - src/frontends/kde/paradlg.C
The big KDE reorg + fi l10n update
[features.git] / src / frontends / kde / paradlg.C
1 /*
2  * paradlg.C
3  * (C) 2000 LyX Team
4  * John Levon, moz@compsoc.man.ac.uk
5  */
6
7 /***************************************************************************
8  *                                                                         *
9  *   This program is free software; you can redistribute it and/or modify  *
10  *   it under the terms of the GNU General Public License as published by  *
11  *   the Free Software Foundation; either version 2 of the License, or     *
12  *   (at your option) any later version.                                   *
13  *                                                                         *
14  ***************************************************************************/
15
16 #include "support/lstrings.h" 
17
18 #include "paradlg.h"
19
20 #include "gettext.h"
21 #include "debug.h"
22
23 using std::endl;
24
25 ParaDialog::ParaDialog(FormParagraph *form, QWidget *parent, const char *name, bool, WFlags)
26         : ParaDialogData(parent,name), form_(form)
27 {
28         setCaption(name);
29
30         generalpage = new ParaGeneralDialog(this, "generalpage");
31         extrapage = new ParaExtraDialog(this, "extrapage");
32         
33         tabstack->addTabPage(generalpage, _("General"));
34         tabstack->addTabPage(extrapage, _("Extra"));
35 }
36
37 ParaDialog::~ParaDialog()
38 {
39 }
40
41 void ParaDialog::closeEvent(QCloseEvent *e)
42 {
43         form_->close();
44         e->accept();
45 }
46
47 void ParaDialog::setReadOnly(bool readonly)
48 {
49         generalpage->alignment->setEnabled(!readonly);
50         generalpage->lineabove->setEnabled(!readonly);
51         generalpage->linebelow->setEnabled(!readonly);
52         generalpage->abovepage->pagebreakabove->setEnabled(!readonly);
53         generalpage->belowpage->pagebreakbelow->setEnabled(!readonly);
54         generalpage->abovepage->keepabove->setEnabled(!readonly);
55         generalpage->belowpage->keepbelow->setEnabled(!readonly);
56         generalpage->noindent->setEnabled(!readonly);
57         generalpage->abovepage->spaceabove->setEnabled(!readonly);
58         generalpage->belowpage->spacebelow->setEnabled(!readonly);
59         generalpage->abovepage->spaceabovevalue->setEnabled(!readonly);
60         generalpage->belowpage->spacebelowvalue->setEnabled(!readonly);
61         generalpage->abovepage->spaceabovevalueunits->setEnabled(!readonly);
62         generalpage->belowpage->spacebelowvalueunits->setEnabled(!readonly);
63         generalpage->abovepage->spaceaboveplus->setEnabled(!readonly);
64         generalpage->belowpage->spacebelowplus->setEnabled(!readonly);
65         generalpage->abovepage->spaceaboveplusunits->setEnabled(!readonly);
66         generalpage->belowpage->spacebelowplusunits->setEnabled(!readonly);
67         generalpage->abovepage->spaceaboveminus->setEnabled(!readonly);
68         generalpage->belowpage->spacebelowminus->setEnabled(!readonly);
69         generalpage->abovepage->spaceaboveminusunits->setEnabled(!readonly);
70         generalpage->belowpage->spacebelowminusunits->setEnabled(!readonly);
71         generalpage->block->setEnabled(!readonly);
72         generalpage->left->setEnabled(!readonly);
73         generalpage->right->setEnabled(!readonly);
74         generalpage->center->setEnabled(!readonly);
75         generalpage->labelwidth->setEnabled(!readonly);
76         extrapage->specialalignment->setEnabled(!readonly);
77         extrapage->type->setEnabled(!readonly);
78         extrapage->widthvalue->setEnabled(!readonly);
79         extrapage->widthvalueunits->setEnabled(!readonly);
80         extrapage->hfillbetween->setEnabled(!readonly);
81         extrapage->startnewminipage->setEnabled(!readonly);
82         extrapage->top->setEnabled(!readonly);
83         extrapage->middle->setEnabled(!readonly);
84         extrapage->bottom->setEnabled(!readonly);
85         ok->setEnabled(!readonly);
86         apply->setEnabled(!readonly);
87         restore->setEnabled(!readonly);
88         cancel->setText(readonly ? _("Close") : _("Cancel"));
89 }
90
91 void ParaDialog::setLabelWidth(const char *text)
92 {
93         // FIXME: should be cleverer here
94         if (!strcmp(_("Senseless with this layout!"),text)) {
95                 generalpage->labelwidth->setText("");
96                 generalpage->labelwidth->setEnabled(false);
97         } else {
98                 generalpage->labelwidth->setText(text);
99                 generalpage->labelwidth->setEnabled(true);
100         }
101 }
102
103 void ParaDialog::setAlign(int type)
104 {
105         switch (type) {
106                 case LYX_ALIGN_RIGHT:
107                         generalpage->right->setChecked(true);
108                         break;
109                 case LYX_ALIGN_LEFT:
110                         generalpage->left->setChecked(true);
111                         break;
112                 case LYX_ALIGN_CENTER:
113                         generalpage->center->setChecked(true);
114                         break;
115                 default: // ewww
116                         generalpage->block->setChecked(true);
117                         break;
118         }
119 }
120
121 void ParaDialog::setChecks(bool labove, bool lbelow, bool pabove, bool pbelow, bool noindent)
122 {
123         generalpage->lineabove->setChecked(labove);
124         generalpage->linebelow->setChecked(lbelow);
125         generalpage->abovepage->pagebreakabove->setChecked(pabove); 
126         generalpage->belowpage->pagebreakbelow->setChecked(pbelow); 
127         generalpage->noindent->setChecked(noindent);
128 }
129
130 void ParaDialog::setSpace(VSpace::vspace_kind kindabove, VSpace::vspace_kind kindbelow, bool keepabove, bool keepbelow)
131 {
132         switch (kindabove) {
133                 case VSpace::NONE:
134                         generalpage->abovepage->spaceabove->setCurrentItem(0);
135                         break;
136                 case VSpace::DEFSKIP:
137                         generalpage->abovepage->spaceabove->setCurrentItem(1);
138                         break;
139                 case VSpace::SMALLSKIP:
140                         generalpage->abovepage->spaceabove->setCurrentItem(2);
141                         break;
142                 case VSpace::MEDSKIP:
143                         generalpage->abovepage->spaceabove->setCurrentItem(3);
144                         break;
145                 case VSpace::BIGSKIP:
146                         generalpage->abovepage->spaceabove->setCurrentItem(4);
147                         break;
148                 case VSpace::VFILL:
149                         generalpage->abovepage->spaceabove->setCurrentItem(5);
150                         break;
151                 case VSpace::LENGTH:
152                         generalpage->abovepage->spaceabove->setCurrentItem(6);
153                         break;
154         }
155         switch (kindbelow) {
156                 case VSpace::NONE:
157                         generalpage->belowpage->spacebelow->setCurrentItem(0);
158                         break;
159                 case VSpace::DEFSKIP:
160                         generalpage->belowpage->spacebelow->setCurrentItem(1);
161                         break;
162                 case VSpace::SMALLSKIP:
163                         generalpage->belowpage->spacebelow->setCurrentItem(2);
164                         break;
165                 case VSpace::MEDSKIP:
166                         generalpage->belowpage->spacebelow->setCurrentItem(3);
167                         break;
168                 case VSpace::BIGSKIP:
169                         generalpage->belowpage->spacebelow->setCurrentItem(4);
170                         break;
171                 case VSpace::VFILL:
172                         generalpage->belowpage->spacebelow->setCurrentItem(5);
173                         break;
174                 case VSpace::LENGTH:
175                         generalpage->belowpage->spacebelow->setCurrentItem(6);
176                         break;
177         }
178
179         generalpage->abovepage->spaceabovevalue->setEnabled(kindabove == VSpace::LENGTH);
180         generalpage->abovepage->spaceabovevalueunits->setEnabled(kindabove == VSpace::LENGTH);
181         generalpage->abovepage->spaceaboveplus->setEnabled(kindabove == VSpace::LENGTH);
182         generalpage->abovepage->spaceaboveplusunits->setEnabled(kindabove == VSpace::LENGTH);
183         generalpage->abovepage->spaceaboveminus->setEnabled(kindabove == VSpace::LENGTH);
184         generalpage->abovepage->spaceaboveminusunits->setEnabled(kindabove == VSpace::LENGTH);
185         generalpage->belowpage->spacebelowvalue->setEnabled(kindbelow == VSpace::LENGTH);
186         generalpage->belowpage->spacebelowvalueunits->setEnabled(kindbelow == VSpace::LENGTH);
187         generalpage->belowpage->spacebelowplus->setEnabled(kindbelow == VSpace::LENGTH);
188         generalpage->belowpage->spacebelowplusunits->setEnabled(kindbelow == VSpace::LENGTH);
189         generalpage->belowpage->spacebelowminus->setEnabled(kindbelow == VSpace::LENGTH);
190         generalpage->belowpage->spacebelowminusunits->setEnabled(kindbelow == VSpace::LENGTH);
191
192         generalpage->abovepage->keepabove->setChecked(keepabove);
193         generalpage->belowpage->keepbelow->setChecked(keepbelow);
194 }
195
196 void ParaDialog::setUnits(QComboBox *box, LyXLength::UNIT unit)
197 {
198         switch (unit) {
199                 case LyXLength::CM: box->setCurrentItem(0); break;
200                 case LyXLength::IN: box->setCurrentItem(1); break;
201                 case LyXLength::PT: box->setCurrentItem(2); break;
202                 case LyXLength::MM: box->setCurrentItem(3); break;
203                 case LyXLength::PC: box->setCurrentItem(4); break;
204                 case LyXLength::EX: box->setCurrentItem(5); break;
205                 case LyXLength::EM: box->setCurrentItem(6); break;
206                 case LyXLength::SP: box->setCurrentItem(7); break;
207                 case LyXLength::BP: box->setCurrentItem(8); break;
208                 case LyXLength::DD: box->setCurrentItem(9); break;
209                 case LyXLength::CC: box->setCurrentItem(10); break;
210                 case LyXLength::MU: box->setCurrentItem(0); break;
211                 case LyXLength::UNIT_NONE: box->setCurrentItem(0); break;
212                 default:
213                         lyxerr[Debug::GUI] << "Unknown unit " << long(unit) << endl;
214         }
215 }
216
217 void ParaDialog::setAboveLength(float val, float plus, float minus, 
218         LyXLength::UNIT vunit, LyXLength::UNIT punit, LyXLength::UNIT munit)
219 {
220         if (vunit==LyXLength::UNIT_NONE) {
221                 generalpage->abovepage->spaceabovevalue->setText(""); 
222                 generalpage->abovepage->spaceaboveplus->setText(""); 
223                 generalpage->abovepage->spaceaboveminus->setText(""); 
224                 setUnits(generalpage->abovepage->spaceabovevalueunits, LyXLength::CM);
225                 setUnits(generalpage->abovepage->spaceaboveplusunits, LyXLength::CM);
226                 setUnits(generalpage->abovepage->spaceaboveminusunits, LyXLength::CM);
227                 return;
228         }
229
230         generalpage->abovepage->spaceabovevalue->setText(tostr(val).c_str());
231         generalpage->abovepage->spaceaboveplus->setText(tostr(plus).c_str());
232         generalpage->abovepage->spaceaboveminus->setText(tostr(minus).c_str());
233         setUnits(generalpage->abovepage->spaceabovevalueunits, vunit);
234         setUnits(generalpage->abovepage->spaceaboveplusunits, punit);
235         setUnits(generalpage->abovepage->spaceaboveminusunits, munit);
236 }
237
238 void ParaDialog::setBelowLength(float val, float plus, float minus, 
239         LyXLength::UNIT vunit, LyXLength::UNIT punit, LyXLength::UNIT munit)
240 {
241         if (vunit==LyXLength::UNIT_NONE) {
242                 generalpage->belowpage->spacebelowvalue->setText(""); 
243                 generalpage->belowpage->spacebelowplus->setText(""); 
244                 generalpage->belowpage->spacebelowminus->setText(""); 
245                 setUnits(generalpage->belowpage->spacebelowvalueunits, LyXLength::CM);
246                 setUnits(generalpage->belowpage->spacebelowplusunits, LyXLength::CM);
247                 setUnits(generalpage->belowpage->spacebelowminusunits, LyXLength::CM);
248                 return;
249         }
250
251         generalpage->belowpage->spacebelowvalue->setText(tostr(val).c_str());
252         generalpage->belowpage->spacebelowplus->setText(tostr(plus).c_str());
253         generalpage->belowpage->spacebelowminus->setText(tostr(minus).c_str());
254         setUnits(generalpage->belowpage->spacebelowvalueunits, vunit); 
255         setUnits(generalpage->belowpage->spacebelowplusunits, punit); 
256         setUnits(generalpage->belowpage->spacebelowminusunits, munit); 
257 }
258
259 void ParaDialog::setExtra(float widthval, LyXLength::UNIT units, const string percent, int align, 
260         bool hfill, bool startminipage, LyXParagraph::PEXTRA_TYPE type)
261 {
262
263         if (type!=LyXParagraph::PEXTRA_NONE) {
264                 lyxerr[Debug::GUI] << "percent : $" << percent << "$ widthval " << widthval << " unit " << long(units) << endl;
265                 if (percent != "") {
266                         extrapage->widthvalue->setText(percent.c_str());
267                         extrapage->widthvalueunits->setCurrentItem(12);
268                 } else {
269                         extrapage->widthvalue->setText(tostr(widthval).c_str());
270                         setUnits(extrapage->widthvalueunits,units);
271                 }
272         } else
273                 extrapage->widthvalue->setText("");
274
275         switch (align) {
276                 case LyXParagraph::MINIPAGE_ALIGN_TOP:
277                         extrapage->top->setChecked(true);
278                         break;
279                 case LyXParagraph::MINIPAGE_ALIGN_MIDDLE:
280                         extrapage->middle->setChecked(true);
281                         break;
282                 case LyXParagraph::MINIPAGE_ALIGN_BOTTOM:
283                         extrapage->bottom->setChecked(true);
284                         break;
285         }
286         
287         extrapage->hfillbetween->setChecked(hfill);
288         extrapage->startnewminipage->setChecked(startminipage);
289
290         extrapage->specialalignment->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
291         extrapage->top->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
292         extrapage->middle->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
293         extrapage->bottom->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
294         extrapage->widthvalue->setEnabled(type!=LyXParagraph::PEXTRA_NONE);
295         extrapage->widthvalueunits->setEnabled(type!=LyXParagraph::PEXTRA_NONE);
296         extrapage->hfillbetween->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
297         extrapage->startnewminipage->setEnabled(type==LyXParagraph::PEXTRA_MINIPAGE);
298
299         switch (type) {
300                 case LyXParagraph::PEXTRA_NONE:
301                         extrapage->type->setCurrentItem(0); 
302                         break;
303                 case LyXParagraph::PEXTRA_INDENT:
304                         extrapage->type->setCurrentItem(1); 
305                         break;
306                 case LyXParagraph::PEXTRA_MINIPAGE:
307                         extrapage->type->setCurrentItem(2); 
308                         break;
309                 case LyXParagraph::PEXTRA_FLOATFLT:
310                         extrapage->type->setCurrentItem(3); 
311                         break;
312         }
313 }
314
315 LyXLength::UNIT ParaDialog::getUnits(QComboBox *box) const
316 {
317         switch (box->currentItem()) {
318                 case 0: return LyXLength::CM;
319                 case 1: return LyXLength::IN;
320                 case 2: return LyXLength::PT;
321                 case 3: return LyXLength::MM;
322                 case 4: return LyXLength::PC;
323                 case 5: return LyXLength::EX;
324                 case 6: return LyXLength::EM;
325                 case 7: return LyXLength::SP;
326                 case 8: return LyXLength::BP;
327                 case 9: return LyXLength::DD;
328                 case 10: return LyXLength::CC;
329                 default:
330                         lyxerr[Debug::GUI] << "Unknown combo choice " << box->currentItem() << endl;
331         }
332         return LyXLength::UNIT_NONE;
333 }
334
335 LyXGlueLength ParaDialog::getAboveLength() const
336 {
337         LyXGlueLength len(
338                 strToDbl(generalpage->abovepage->spaceabovevalue->text()),
339                 getUnits(generalpage->abovepage->spaceabovevalueunits),
340                 strToDbl(generalpage->abovepage->spaceaboveplus->text()),
341                 getUnits(generalpage->abovepage->spaceaboveplusunits),
342                 strToDbl(generalpage->abovepage->spaceaboveminus->text()),
343                 getUnits(generalpage->abovepage->spaceaboveminusunits)
344                 );
345         
346         return len;
347 }
348
349 LyXGlueLength ParaDialog::getBelowLength() const
350 {
351         LyXGlueLength len(
352                 strToDbl(generalpage->belowpage->spacebelowvalue->text()),
353                 getUnits(generalpage->belowpage->spacebelowvalueunits),
354                 strToDbl(generalpage->belowpage->spacebelowplus->text()),
355                 getUnits(generalpage->belowpage->spacebelowplusunits),
356                 strToDbl(generalpage->belowpage->spacebelowminus->text()),
357                 getUnits(generalpage->belowpage->spacebelowminusunits)
358                 );
359         
360         return len;
361 }
362
363 LyXLength ParaDialog::getExtraWidth() const
364 {
365
366         if (extrapage->widthvalueunits->currentItem()!=11) {
367                 LyXLength len(strToDbl(extrapage->widthvalue->text()), getUnits(extrapage->widthvalueunits));
368                 return len;
369         } else {
370                 LyXLength len(0.0, LyXLength::UNIT_NONE);
371                 return len;
372         }
373 }
374
375 string ParaDialog::getExtraWidthPercent() const
376 {
377         double val = strToDbl(extrapage->widthvalue->text()); 
378         if (val > 100.0) 
379                 val = 100.0;
380         if (val < 0.0)
381                 val = 0.0;
382         return tostr(val);
383 }