]> git.lyx.org Git - lyx.git/blob - src/frontends/qt2/QDocumentDialog.C
Some string(widget->text()) fixes. Weirdness
[lyx.git] / src / frontends / qt2 / QDocumentDialog.C
1 /**
2  * \file QDocumentDialog.C
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author Edwin Leuven
7  *
8  * Full author contact details are available in file CREDITS
9  */
10
11 #include <config.h>
12 #include "gettext.h"
13
14 #include "ControlDocument.h"
15 #include "QDocument.h"
16
17 #ifdef __GNUG__
18 #pragma implementation
19 #endif
20
21 #include "QDocumentDialog.h"
22
23 #include "ui/ClassModuleBase.h"
24 #include "ui/PackagesModuleBase.h"
25 #include "ui/PaperModuleBase.h"
26 #include "ui/LanguageModuleBase.h"
27 #include "ui/BulletsModuleBase.h"
28 #include "BulletsModule.h"
29 #include "ui/BiblioModuleBase.h"
30 #include "ui/NumberingModuleBase.h"
31 #include "ui/MarginsModuleBase.h"
32 #include "ui/PreambleModuleBase.h"
33
34 #include "Spacing.h"
35 #include "support/lstrings.h"
36 #include "lyxrc.h"
37 #include "buffer.h"
38
39 #include <qwidgetstack.h>
40 #include <qlistbox.h>
41 #include <qlabel.h>
42 #include <qmultilineedit.h>
43 #include <qlineedit.h>
44 #include <qpushbutton.h>
45 #include <qcombobox.h>
46 #include <qradiobutton.h>
47 #include <qcheckbox.h>
48 #include <qspinbox.h>
49 #include "lengthcombo.h"
50
51
52 QDocumentDialog::QDocumentDialog(QDocument * form)
53         : QDocumentDialogBase(0, 0, false, 0), form_(form)
54 {
55         connect(okPB, SIGNAL(clicked()),
56                 form, SLOT(slotOK()));
57         connect(applyPB, SIGNAL(clicked()),
58                 form, SLOT(slotApply()));
59         connect(closePB, SIGNAL(clicked()),
60                 form, SLOT(slotClose()));
61         connect(restorePB, SIGNAL(clicked()),
62                 form, SLOT(slotRestore()));
63
64         moduleLB->clear();
65         moduleLB->insertItem(_("Layout"), LAYOUT);
66         moduleLB->insertItem(_("Packages"), PACKAGES);
67         moduleLB->insertItem(_("Paper"), PAPER);
68         moduleLB->insertItem(_("Margins"), MARGINS);
69         moduleLB->insertItem(_("Language"), LANGUAGE);
70         moduleLB->insertItem(_("Bullets"), BULLETS);
71         moduleLB->insertItem(_("Numbering"), NUMBERING);
72         moduleLB->insertItem(_("Bibliography"), BIBLIOGRAPHY);
73         moduleLB->insertItem(_("Preamble"), PREAMBLE);
74         moduleLB->setCurrentItem(LAYOUT);
75         moduleLB->setMinimumSize(moduleLB->sizeHint()); 
76
77         layoutModule = new ClassModuleBase(this);
78         paperModule = new PaperModuleBase(this);
79         marginsModule = new MarginsModuleBase(this);
80         packagesModule = new PackagesModuleBase(this);
81         langModule = new LanguageModuleBase(this);
82         bulletsModule = new BulletsModule(this);
83         numberingModule = new NumberingModuleBase(this);
84         biblioModule = new BiblioModuleBase(this);
85         preambleModule = new PreambleModuleBase(this);
86
87         moduleStack->addWidget(layoutModule, LAYOUT);
88         moduleStack->addWidget(paperModule, PAPER);
89         moduleStack->addWidget(marginsModule, MARGINS);
90         moduleStack->addWidget(packagesModule, PACKAGES);
91         moduleStack->addWidget(langModule, LANGUAGE);
92         moduleStack->addWidget(bulletsModule, BULLETS);
93         moduleStack->addWidget(numberingModule, NUMBERING);
94         moduleStack->addWidget(biblioModule, BIBLIOGRAPHY);
95         moduleStack->addWidget(preambleModule, PREAMBLE);
96
97         moduleStack->raiseWidget(LAYOUT);
98         
99
100         // take care of title
101         QFont f = titleL->font();
102         f.setWeight(QFont::Bold);
103         titleL->setFont(f);
104         setTitle(LAYOUT);
105
106         // preamble 
107         connect(preambleModule->preambleMLE, SIGNAL(textChanged()),
108                  this , SLOT(change_adaptor()));
109         // biblio 
110         connect(biblioModule->natbibCB, SIGNAL(toggled(bool)),
111                  this , SLOT(change_adaptor()));
112         connect(biblioModule->citeStyleCO, SIGNAL(activated(int)),
113                  this , SLOT(change_adaptor()));
114         // language & quote 
115         connect(langModule->singleQuoteRB, SIGNAL(toggled(bool)),
116                  this , SLOT(change_adaptor()));
117         connect(langModule->doubleQuoteRB, SIGNAL(toggled(bool)),
118                  this , SLOT(change_adaptor()));
119         connect(langModule->languageCO, SIGNAL(activated(int)),
120                  this , SLOT(change_adaptor()));
121         connect(langModule->quoteStyleCO, SIGNAL(activated(int)),
122                  this , SLOT(change_adaptor()));
123         // numbering 
124         connect(numberingModule->sectionnrDepthSB,
125                  SIGNAL(valueChanged(int)),
126                  this , SLOT(change_adaptor()));
127         connect(numberingModule->tocDepthSB,
128                  SIGNAL(valueChanged(int)),
129                  this , SLOT(change_adaptor()));
130         // packages 
131         connect(packagesModule->lspacingCO, SIGNAL(activated(int)),
132                  this , SLOT(change_adaptor()));
133         connect(packagesModule->lspacingCO, SIGNAL(activated(int)),
134                  this , SLOT(setLSpacing(int)));
135         connect(packagesModule->lspacingLE,
136                  SIGNAL(textChanged(const QString&)),
137                  this , SLOT(change_adaptor()));
138         connect(packagesModule->encodingCO, SIGNAL(activated(int)),
139                  this , SLOT(change_adaptor()));
140         connect(packagesModule->amsCB, SIGNAL(toggled(bool)),
141                  this , SLOT(change_adaptor()));
142         connect(packagesModule->psdriverCO, SIGNAL(activated(int)),
143                  this , SLOT(change_adaptor()));
144         // layout 
145         connect(layoutModule->classCO, SIGNAL(activated(int)),
146                  this , SLOT(change_adaptor()));
147         connect(layoutModule->optionsLE,
148                  SIGNAL(textChanged(const QString&)),
149                  this , SLOT(change_adaptor()));
150         connect(layoutModule->pagestyleCO, SIGNAL(activated(int)),
151                  this , SLOT(change_adaptor()));
152         connect(layoutModule->fontsCO, SIGNAL(activated(int)),
153                  this , SLOT(change_adaptor()));
154         connect(layoutModule->fontsizeCO, SIGNAL(activated(int)),
155                  this , SLOT(change_adaptor()));
156         connect(layoutModule->floatPlacementLE,
157                  SIGNAL(textChanged(const QString&)),
158                  this , SLOT(change_adaptor()));
159         connect(layoutModule->skipRB, SIGNAL(toggled(bool)),
160                  this , SLOT(change_adaptor()));
161         connect(layoutModule->indentRB, SIGNAL(toggled(bool)),
162                  this , SLOT(change_adaptor()));
163         connect(layoutModule->skipCO, SIGNAL(activated(int)),
164                  this , SLOT(change_adaptor()));
165         connect(layoutModule->skipLE,
166                  SIGNAL(textChanged(const QString&)),
167                  this , SLOT(change_adaptor()));
168         connect(layoutModule->skipLengthCO, SIGNAL(activated(int)),
169                  this , SLOT(change_adaptor()));
170
171         connect(layoutModule->classCO, SIGNAL(activated(int)),
172                  this , SLOT(classChanged()));
173         connect(layoutModule->skipCO, SIGNAL(activated(int)),
174                  this , SLOT(setSkip(int)));
175         connect(layoutModule->skipRB, SIGNAL(toggled(bool)),
176                  this , SLOT(enableSkip(bool)));
177
178         // margins 
179         connect(marginsModule->marginCO, SIGNAL(activated(int)),
180                  this , SLOT(setCustomMargins(int)));
181
182         connect(marginsModule->marginCO, SIGNAL(activated(int)),
183                  this , SLOT(change_adaptor()));
184         connect(marginsModule->topLE, SIGNAL(textChanged(const QString&)),
185                  this , SLOT(change_adaptor()));
186         connect(marginsModule->topUnit, SIGNAL(activated(int)),
187                  this , SLOT(change_adaptor()));
188         connect(marginsModule->bottomLE, SIGNAL(textChanged(const QString&)),
189                  this , SLOT(change_adaptor()));
190         connect(marginsModule->bottomUnit, SIGNAL(activated(int)),
191                  this , SLOT(change_adaptor()));
192         connect(marginsModule->innerLE, SIGNAL(textChanged(const QString&)),
193                  this , SLOT(change_adaptor()));
194         connect(marginsModule->innerUnit, SIGNAL(activated(int)),
195                  this , SLOT(change_adaptor()));
196         connect(marginsModule->outerLE, SIGNAL(textChanged(const QString&)),
197                  this , SLOT(change_adaptor()));
198         connect(marginsModule->outerUnit, SIGNAL(activated(int)),
199                  this , SLOT(change_adaptor()));
200         connect(marginsModule->headheightLE, SIGNAL(textChanged(const QString&)),
201                  this , SLOT(change_adaptor()));
202         connect(marginsModule->headheightUnit, SIGNAL(activated(int)),
203                  this , SLOT(change_adaptor()));
204         connect(marginsModule->headsepLE, SIGNAL(textChanged(const QString&)),
205                  this , SLOT(change_adaptor()));
206         connect(marginsModule->headsepUnit, SIGNAL(activated(int)),
207                  this , SLOT(change_adaptor()));
208         connect(marginsModule->footskipLE, SIGNAL(textChanged(const QString&)),
209                  this , SLOT(change_adaptor()));
210         connect(marginsModule->footskipUnit, SIGNAL(activated(int)),
211                  this , SLOT(change_adaptor()));
212
213         // paper 
214         connect(paperModule->papersizeCO, SIGNAL(activated(int)),
215                  this , SLOT(setMargins(int)));
216         connect(paperModule->papersizeCO, SIGNAL(activated(int)),
217                  this , SLOT(setCustomPapersize(int)));
218         connect(paperModule->papersizeCO, SIGNAL(activated(int)),
219                  this , SLOT(setCustomPapersize(int)));
220
221         connect(paperModule->papersizeCO, SIGNAL(activated(int)),
222                  this , SLOT(change_adaptor()));
223         connect(paperModule->paperheightLE, SIGNAL(textChanged(const QString&)),
224                  this , SLOT(change_adaptor()));
225         connect(paperModule->paperwidthLE, SIGNAL(textChanged(const QString&)),
226                  this , SLOT(change_adaptor()));
227         connect(paperModule->paperwidthUnitCO, SIGNAL(activated(int)),
228                  this , SLOT(change_adaptor()));
229         connect(paperModule->paperheightUnitCO, SIGNAL(activated(int)),
230                  this , SLOT(change_adaptor()));
231         connect(paperModule->portraitRB, SIGNAL(toggled(bool)),
232                  this , SLOT(change_adaptor()));
233         connect(paperModule->landscapeRB, SIGNAL(toggled(bool)),
234                  this , SLOT(change_adaptor()));
235         connect(paperModule->twoColumnCB, SIGNAL(toggled(bool)),
236                  this , SLOT(change_adaptor()));
237         connect(paperModule->facingPagesCB, SIGNAL(toggled(bool)),
238                  this , SLOT(change_adaptor()));
239
240         // bullets 
241         connect(bulletsModule->bullet1LE, SIGNAL(textChanged(const QString&)),
242                  this , SLOT(change_adaptor()));
243         connect(bulletsModule->bulletsize1CO, SIGNAL(activated(int)),
244                  this , SLOT(change_adaptor()));
245         connect(bulletsModule->bullet2LE, SIGNAL(textChanged(const QString&)),
246                  this , SLOT(change_adaptor()));
247         connect(bulletsModule->bulletsize2CO, SIGNAL(activated(int)),
248                  this , SLOT(change_adaptor()));
249         connect(bulletsModule->bullet3LE, SIGNAL(textChanged(const QString&)),
250                  this , SLOT(change_adaptor()));
251         connect(bulletsModule->bulletsize3CO, SIGNAL(activated(int)),
252                  this , SLOT(change_adaptor()));
253         connect(bulletsModule->bullet4LE, SIGNAL(textChanged(const QString&)),
254                  this , SLOT(change_adaptor()));
255         connect(bulletsModule->bulletsize4CO, SIGNAL(activated(int)),
256                  this , SLOT(change_adaptor()));
257
258 }
259
260
261 QDocumentDialog::~QDocumentDialog()
262 {
263 }
264
265
266 void QDocumentDialog::setTitle(int item)
267 {
268         switch(item) {
269         case LAYOUT:
270                 titleL->setText(_("Document Style"));
271                 break;
272         case PACKAGES:
273                 titleL->setText(_("LaTeX Packages"));
274                 break;
275         case PAPER:
276                 titleL->setText(_("Papersize and Orientation"));
277                 break;
278         case MARGINS:
279                 titleL->setText(_("Margins"));
280                 break;
281         case LANGUAGE:
282                 titleL->setText(_("Language Settings and Quote Style"));
283                 break;
284         case BULLETS:
285                 titleL->setText(_("Bullet Types"));
286                 break;
287         case NUMBERING:
288                 titleL->setText(_("Numbering"));
289                 break;
290         case BIBLIOGRAPHY:
291                 titleL->setText(_("Bibliography Settings"));
292                 break;
293         case PREAMBLE:
294                 titleL->setText(_("LaTeX Preamble"));
295                 break;
296         }
297 }
298
299
300 void QDocumentDialog::saveDefaultClicked()
301 {
302         form_->saveDocDefault();
303 }
304
305
306 void QDocumentDialog::useDefaultsClicked()
307 {
308     form_->useClassDefaults();
309 }
310
311
312 void QDocumentDialog::change_adaptor()
313 {
314         form_->changed();
315 }
316
317
318 void QDocumentDialog::closeEvent(QCloseEvent * e)
319 {
320         form_->slotWMHide();
321         e->accept();
322 }
323
324
325 void QDocumentDialog::setLSpacing(int item)
326 {
327         packagesModule->lspacingLE->setEnabled(item == 3);
328 }
329
330
331 void QDocumentDialog::setSkip(int item)
332 {
333         bool const enable = (item == 3);
334         layoutModule->skipLE->setEnabled(enable);
335         layoutModule->skipLengthCO->setEnabled(enable);
336 }
337
338
339 void QDocumentDialog::enableSkip(bool skip)
340 {
341         layoutModule->skipCO->setEnabled(skip);
342         layoutModule->skipLE->setEnabled(skip);
343         layoutModule->skipLengthCO->setEnabled(skip);
344         if (skip)
345                 setSkip(layoutModule->skipCO->currentItem());
346 }
347
348
349 void QDocumentDialog::setMargins(int papersize)
350 {
351         char const * a4only[] = {
352                 _("Small Margins"), _("Very small Margins"),
353                 _("Very wide Margins "), 0 };
354         char const * normal[] = {
355                 _("Default"), _("Custom"), 0 };
356  
357         int olditem = marginsModule->marginCO->currentItem();
358         marginsModule->marginCO->clear();
359         marginsModule->marginCO->insertStrList(normal);
360         if (papersize==6) {
361                 marginsModule->marginCO->insertStrList(a4only);
362         }
363         marginsModule->marginCO->setCurrentItem(olditem);
364         setCustomMargins(olditem);
365 }
366
367
368 void QDocumentDialog::setCustomPapersize(int papersize)
369 {
370         bool const custom = (papersize == 1);
371
372         paperModule->paperwidthL->setEnabled(custom);
373         paperModule->paperwidthLE->setEnabled(custom);
374         paperModule->paperwidthUnitCO->setEnabled(custom);
375         paperModule->paperheightL->setEnabled(custom);
376         paperModule->paperheightLE->setEnabled(custom);
377         paperModule->paperheightLE->setFocus();
378         paperModule->paperheightUnitCO->setEnabled(custom);
379 }
380
381
382 void QDocumentDialog::setCustomMargins(int margin)
383 {
384         bool const custom = (margin == 1);
385
386         marginsModule->topL->setEnabled(custom);
387         marginsModule->topLE->setEnabled(custom);
388         marginsModule->topUnit->setEnabled(custom);
389
390         marginsModule->bottomL->setEnabled(custom);
391         marginsModule->bottomLE->setEnabled(custom);
392         marginsModule->bottomUnit->setEnabled(custom);
393
394         marginsModule->innerL->setEnabled(custom);
395         marginsModule->innerLE->setEnabled(custom);
396         marginsModule->innerUnit->setEnabled(custom);
397
398         marginsModule->outerL->setEnabled(custom);
399         marginsModule->outerLE->setEnabled(custom);
400         marginsModule->outerUnit->setEnabled(custom);
401
402         marginsModule->headheightL->setEnabled(custom);
403         marginsModule->headheightLE->setEnabled(custom);
404         marginsModule->headheightUnit->setEnabled(custom);
405
406         marginsModule->headsepL->setEnabled(custom);
407         marginsModule->headsepLE->setEnabled(custom);
408         marginsModule->headsepUnit->setEnabled(custom);
409
410         marginsModule->footskipL->setEnabled(custom);
411         marginsModule->footskipLE->setEnabled(custom);
412         marginsModule->footskipUnit->setEnabled(custom);
413
414 }
415
416
417 void QDocumentDialog::updateFontsize(string const & items, string const & sel)
418 {
419         layoutModule->fontsizeCO->clear();
420         layoutModule->fontsizeCO->insertItem("default");
421
422         for (int n=0; !token(items,'|',n).empty(); ++n)
423                 layoutModule->fontsizeCO->
424                         insertItem(token(items,'|',n).c_str());
425
426         for (int n = 0; n<layoutModule->fontsizeCO->count(); ++n) {
427                 if (layoutModule->fontsizeCO->text(n).latin1()==sel) {
428                         layoutModule->fontsizeCO->setCurrentItem(n);
429                         break;
430                 }
431         }
432 }
433
434
435 void QDocumentDialog::updatePagestyle(string const & items, string const & sel)
436 {
437         layoutModule->pagestyleCO->clear();
438         layoutModule->pagestyleCO->insertItem("default");
439
440         for (int n=0; !token(items,'|',n).empty(); ++n)
441                 layoutModule->pagestyleCO->
442                         insertItem(token(items,'|',n).c_str());
443
444         for (int n = 0; n<layoutModule->pagestyleCO->count(); ++n) {
445                 if (layoutModule->pagestyleCO->text(n).latin1()==sel) {
446                         layoutModule->pagestyleCO->setCurrentItem(n);
447                         break;
448                 }
449         }
450 }
451
452
453 void QDocumentDialog::classChanged()
454 {
455         ControlDocument & cntrl = form_->controller();
456         BufferParams & params = cntrl.params();
457
458         lyx::textclass_type const tc = layoutModule->classCO->currentItem();
459
460         if (form_->controller().loadTextclass(tc)) {
461                 params.textclass = tc;
462
463                 if (lyxrc.auto_reset_options) {
464                         params.useClassDefaults();
465                         form_->update_contents();
466                 } else {
467                         updateFontsize(cntrl.textClass().opt_fontsize(),
468                                        params.fontsize);
469
470                         updatePagestyle(cntrl.textClass().opt_pagestyle(),
471                                         params.pagestyle);
472                 }
473         } else {
474                 for (int n = 0; n<layoutModule->classCO->count(); ++n) {
475                         if (layoutModule->classCO->text(n) ==
476                             cntrl.textClass().description().c_str()) {
477                                 layoutModule->classCO->setCurrentItem(n);
478                                 break;
479                         }
480                 }
481         }
482 }