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