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