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