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