]> git.lyx.org Git - lyx.git/blob - src/frontends/qt4/QPrefsDialog.C
Qt4 compilation speedup patch by Bo Peng and me.
[lyx.git] / src / frontends / qt4 / QPrefsDialog.C
1 /**
2  * \file QPrefsDialog.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  * \author Abdelrazak Younes
8  *
9  * Full author contact details are available in file CREDITS.
10  */
11
12 #include <config.h>
13 #include "debug.h"
14 #include "qt_helpers.h"
15
16 #include "lcolorcache.h"
17 #include "Qt2BC.h"
18 #include "qt_helpers.h"
19
20 #include "debug.h"
21 #include "session.h"
22 #include "LColor.h"
23 #include "lyxfont.h"
24
25 #include "support/lstrings.h"
26 #include "support/os.h"
27
28 #include "controllers/ControlPrefs.h"
29 #include "controllers/frnt_lang.h"
30 #include "controllers/helper_funcs.h"
31
32 #include "frontends/Alert.h"
33 #include "frontends/lyx_gui.h"
34
35 #include "QPrefsDialog.h"
36 #include "QPrefs.h"
37
38 #include "panelstack.h"
39 #include "qfontexample.h"
40
41 #include "ui/QPrefAsciiUi.h"
42 #include "ui/QPrefDateUi.h"
43 #include "ui/QPrefKeyboardUi.h"
44 #include "ui/QPrefLatexUi.h"
45 #include "ui/QPrefScreenFontsUi.h"
46 #include "ui/QPrefColorsUi.h"
47 #if defined(__CYGWIN__) || defined(__CYGWIN32__)
48 #include "ui/QPrefCygwinPathUi.h"
49 #endif
50 #include "ui/QPrefDisplayUi.h"
51 #include "ui/QPrefPathsUi.h"
52 #include "ui/QPrefSpellcheckerUi.h"
53 #include "ui/QPrefConvertersUi.h"
54 #include "ui/QPrefCopiersUi.h"
55 #include "ui/QPrefFileformatsUi.h"
56 #include "ui/QPrefLanguageUi.h"
57 #include "ui/QPrefPrinterUi.h"
58 #include "ui/QPrefUi.h"
59 #include "ui/QPrefIdentityUi.h"
60
61 #include "gettext.h"
62 #include "LColor.h"
63 #include "lcolorcache.h"
64
65 #include "controllers/ControlPrefs.h"
66
67 #include <QCheckBox>
68 #include <QColorDialog>
69 #include <QFontDatabase>
70 #include <QLineEdit>
71 #include <QPushButton>
72 #include <QSpinBox>
73 #include <QString>
74 #include <QValidator>
75 #include <QCloseEvent>
76
77 #include <boost/tuple/tuple.hpp>
78 #include <iomanip>
79 #include <sstream>
80
81 using lyx::support::compare_no_case;
82
83 using std::distance;
84 using std::endl;
85 using std::setfill;
86 using std::setw;
87 using std::string;
88 using std::ostringstream;
89 using std::pair;
90 using std::vector;
91
92
93 namespace lyx {
94 namespace frontend {
95
96 QPrefsDialog::QPrefsDialog(QPrefs * form)
97         : form_(form)
98 {
99         setupUi(this);
100         QDialog::setModal(true);
101
102         connect(savePB, SIGNAL(clicked()),
103                 form, SLOT(slotOK()));
104         connect(applyPB, SIGNAL(clicked()),
105                 form, SLOT(slotApply()));
106         connect(closePB, SIGNAL(clicked()),
107                 form, SLOT(slotClose()));
108         connect(restorePB, SIGNAL(clicked()),
109                 form, SLOT(slotRestore()));
110
111
112
113         asciiModule = new UiWidget<Ui::QPrefAsciiUi>;
114         connect(asciiModule->asciiLinelengthSB, SIGNAL(valueChanged(int)), this, SLOT(change_adaptor()));
115         connect(asciiModule->asciiRoffED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
116
117
118         dateModule = new UiWidget<Ui::QPrefDateUi>;
119         connect(dateModule->DateED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
120
121
122
123         keyboardModule = new UiWidget<Ui::QPrefKeyboardUi>;
124         connect( keyboardModule->keymapCB, SIGNAL( toggled(bool) ),
125                  keyboardModule->firstKeymapLA, SLOT( setEnabled(bool) ) );
126         connect( keyboardModule->keymapCB, SIGNAL( toggled(bool) ),
127                 keyboardModule->secondKeymapLA, SLOT( setEnabled(bool) ) );
128         connect( keyboardModule->keymapCB, SIGNAL( toggled(bool) ),
129                 keyboardModule->firstKeymapED, SLOT( setEnabled(bool) ) );
130         connect( keyboardModule->keymapCB, SIGNAL( toggled(bool) ),
131                 keyboardModule->secondKeymapED, SLOT( setEnabled(bool) ) );
132         connect( keyboardModule->keymapCB, SIGNAL( toggled(bool) ),
133                 keyboardModule->firstKeymapPB, SLOT( setEnabled(bool) ) );
134         connect( keyboardModule->keymapCB, SIGNAL( toggled(bool) ),
135                 keyboardModule->secondKeymapPB, SLOT( setEnabled(bool) ) );
136         connect(keyboardModule->firstKeymapPB, SIGNAL(clicked()), this, SLOT(select_keymap1()));
137         connect(keyboardModule->secondKeymapPB, SIGNAL(clicked()), this, SLOT(select_keymap2()));
138         connect(keyboardModule->keymapCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor()));
139         connect(keyboardModule->firstKeymapED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
140         connect(keyboardModule->secondKeymapED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
141
142
143
144         latexModule = new UiWidget<Ui::QPrefLatexUi>;
145         connect(latexModule->latexEncodingED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
146         connect(latexModule->latexChecktexED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
147         connect(latexModule->latexBibtexED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
148         connect(latexModule->latexIndexED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
149         connect(latexModule->latexAutoresetCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor()));
150         connect(latexModule->latexDviPaperED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
151         connect(latexModule->latexPaperSizeCO, SIGNAL(activated(int)), this, SLOT(change_adaptor()));
152
153
154
155
156         screenfontsModule = new UiWidget<Ui::QPrefScreenFontsUi>;
157         connect(screenfontsModule->screenRomanCO, SIGNAL(activated(const QString&)), this, SLOT(select_roman(const QString&)));
158         connect(screenfontsModule->screenSansCO, SIGNAL(activated(const QString&)), this, SLOT(select_sans(const QString&)));
159         connect(screenfontsModule->screenTypewriterCO, SIGNAL(activated(const QString&)), this, SLOT(select_typewriter(const QString&)));
160
161         QFontDatabase fontdb;
162         QStringList families(fontdb.families());
163         for (QStringList::Iterator it = families.begin(); it != families.end(); ++it) {
164                 screenfontsModule->screenRomanCO->insertItem(*it);
165                 screenfontsModule->screenSansCO->insertItem(*it);
166                 screenfontsModule->screenTypewriterCO->insertItem(*it);
167         }
168         connect(screenfontsModule->screenRomanCO, SIGNAL(activated(const QString&)), this, SLOT(change_adaptor()));
169         connect(screenfontsModule->screenSansCO, SIGNAL(activated(const QString&)), this, SLOT(change_adaptor()));
170         connect(screenfontsModule->screenTypewriterCO, SIGNAL(activated(const QString&)), this, SLOT(change_adaptor()));
171         connect(screenfontsModule->screenZoomSB, SIGNAL(valueChanged(int)), this, SLOT(change_adaptor()));
172         connect(screenfontsModule->screenDpiSB, SIGNAL(valueChanged(int)), this, SLOT(change_adaptor()));
173         connect(screenfontsModule->screenTinyED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
174         connect(screenfontsModule->screenSmallestED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
175         connect(screenfontsModule->screenSmallerED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
176         connect(screenfontsModule->screenSmallED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
177         connect(screenfontsModule->screenNormalED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
178         connect(screenfontsModule->screenLargeED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
179         connect(screenfontsModule->screenLargerED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
180         connect(screenfontsModule->screenLargestED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
181         connect(screenfontsModule->screenHugeED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
182         connect(screenfontsModule->screenHugerED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
183
184         screenfontsModule->screenTinyED->setValidator(new QDoubleValidator(
185                 screenfontsModule->screenTinyED));
186         screenfontsModule->screenSmallestED->setValidator(new QDoubleValidator(
187                 screenfontsModule->screenSmallestED));
188         screenfontsModule->screenSmallerED->setValidator(new QDoubleValidator(
189                 screenfontsModule->screenSmallerED));
190         screenfontsModule->screenSmallED->setValidator(new QDoubleValidator(
191                 screenfontsModule->screenSmallED));
192         screenfontsModule->screenNormalED->setValidator(new QDoubleValidator(
193                 screenfontsModule->screenNormalED));
194         screenfontsModule->screenLargeED->setValidator(new QDoubleValidator(
195                 screenfontsModule->screenLargeED));
196         screenfontsModule->screenLargerED->setValidator(new QDoubleValidator(
197                 screenfontsModule->screenLargerED));
198         screenfontsModule->screenLargestED->setValidator(new QDoubleValidator(
199                 screenfontsModule->screenLargestED));
200         screenfontsModule->screenHugeED->setValidator(new QDoubleValidator(
201                 screenfontsModule->screenHugeED));
202         screenfontsModule->screenHugerED->setValidator(new QDoubleValidator(
203                 screenfontsModule->screenHugerED));
204
205         // FIXME: put in controller
206         colorsModule = new UiWidget<Ui::QPrefColorsUi>;
207         for (int i = 0; i < LColor::ignore; ++i) {
208                 LColor::color lc = static_cast<LColor::color>(i);
209                 if (lc == LColor::none
210                         || lc == LColor::black
211                         || lc == LColor::white
212                         || lc == LColor::red
213                         || lc == LColor::green
214                         || lc == LColor::blue
215                         || lc == LColor::cyan
216                         || lc == LColor::magenta
217                         || lc == LColor::yellow
218                         || lc == LColor::inherit
219                         || lc == LColor::ignore) continue;
220
221                 lcolors_.push_back(lc);
222                 QColor color = QColor(lcolorcache.get(lc));
223                 prefcolors_.push_back(color.name());
224                 QPixmap coloritem(32, 32);
225                 coloritem.fill(color);
226                 QListWidgetItem * newItem = new QListWidgetItem(QIcon(coloritem),
227                         toqstr(lcolor.getGUIName(lc)), colorsModule->lyxObjectsLW);
228         }
229         newcolors_ = prefcolors_;
230
231         connect(colorsModule->colorChangePB, SIGNAL(clicked()), 
232                 this, SLOT(change_color()));
233         connect(colorsModule->lyxObjectsLW, SIGNAL(itemActivated(QListWidgetItem*)), 
234                 this, SLOT(change_color()));
235
236
237
238
239 #if defined(__CYGWIN__) || defined(__CYGWIN32__)
240         cygwinpathModule = new UiWidget<Ui::QPrefCygwinPathUi>;
241         connect(cygwinpathModule->pathCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor()));
242 #endif
243
244
245
246         displayModule = new UiWidget<Ui::QPrefDisplayUi>;
247         connect(displayModule->instantPreviewCO, SIGNAL(activated(int)), this, SLOT(change_adaptor()));
248         connect(displayModule->displayGraphicsCO, SIGNAL(activated(int)), this, SLOT(change_adaptor()));
249
250
251
252         pathsModule = new UiWidget<Ui::QPrefPathsUi>;
253         connect(pathsModule->templateDirPB, SIGNAL(clicked()), this, SLOT(select_templatedir()));
254         connect(pathsModule->tempDirPB, SIGNAL(clicked()), this, SLOT(select_tempdir()));
255         connect(pathsModule->backupDirPB, SIGNAL(clicked()), this, SLOT(select_backupdir()));
256         connect(pathsModule->workingDirPB, SIGNAL(clicked()), this, SLOT(select_workingdir()));
257         connect(pathsModule->lyxserverDirPB, SIGNAL(clicked()), this, SLOT(select_lyxpipe()));
258         connect(pathsModule->workingDirED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
259         connect(pathsModule->templateDirED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
260         connect(pathsModule->backupDirED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
261         connect(pathsModule->tempDirED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
262         connect(pathsModule->lyxserverDirED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
263         connect(pathsModule->pathPrefixED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
264
265
266
267         spellcheckerModule = new UiWidget<Ui::QPrefSpellcheckerUi>;
268         connect(spellcheckerModule->persDictionaryPB, SIGNAL(clicked()), this, SLOT(select_dict()));
269 #if defined (USE_ISPELL)
270         connect(spellcheckerModule->spellCommandCO, SIGNAL(activated(int)), this, SLOT(change_adaptor()));
271 #else
272         spellcheckerModule->spellCommandCO->setEnabled(false);
273 #endif
274         connect(spellcheckerModule->altLanguageED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
275         connect(spellcheckerModule->escapeCharactersED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
276         connect(spellcheckerModule->persDictionaryED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
277         connect(spellcheckerModule->compoundWordCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor()));
278         connect(spellcheckerModule->inputEncodingCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor()));
279         spellcheckerModule->spellCommandCO->insertItem(qt_("ispell"));
280         spellcheckerModule->spellCommandCO->insertItem(qt_("aspell"));
281         spellcheckerModule->spellCommandCO->insertItem(qt_("hspell"));
282 #ifdef USE_PSPELL
283         spellcheckerModule->spellCommandCO->insertItem(qt_("pspell (library)"));
284 #else
285 #ifdef USE_ASPELL
286         spellcheckerModule->spellCommandCO->insertItem(qt_("aspell (library)"));
287 #endif
288 #endif
289
290
291
292         convertersModule = new UiWidget<Ui::QPrefConvertersUi>;
293         connect(convertersModule->converterNewPB, SIGNAL(clicked()), 
294                 this, SLOT(new_converter()));
295         connect(convertersModule->converterRemovePB, SIGNAL(clicked()), 
296                 this, SLOT(remove_converter()));
297         connect(convertersModule->converterModifyPB, SIGNAL(clicked()), 
298                 this, SLOT(modify_converter()));
299         connect(convertersModule->convertersLW, SIGNAL(currentRowChanged(int)), 
300                 this, SLOT(switch_converter(int)));
301         connect(convertersModule->converterFromCO, SIGNAL(activated(const QString&)), 
302                 this, SLOT(converter_changed()));
303         connect(convertersModule->converterToCO, SIGNAL(activated(const QString&)), 
304                 this, SLOT(converter_changed()));
305         connect(convertersModule->converterED, SIGNAL(textChanged(const QString&)), 
306                 this, SLOT(converter_changed()));
307         connect(convertersModule->converterFlagED, SIGNAL(textChanged(const QString&)), 
308                 this, SLOT(converter_changed()));
309         connect(convertersModule->converterNewPB, SIGNAL(clicked()), 
310                 this, SLOT(change_adaptor()));
311         connect(convertersModule->converterRemovePB, SIGNAL(clicked()), 
312                 this, SLOT(change_adaptor()));
313         connect(convertersModule->converterModifyPB, SIGNAL(clicked()), 
314                 this, SLOT(change_adaptor()));
315
316
317
318         copiersModule = new UiWidget<Ui::QPrefCopiersUi>;
319         connect(copiersModule->copierNewPB, SIGNAL(clicked()), this, SLOT(new_copier()));
320         connect(copiersModule->copierRemovePB, SIGNAL(clicked()), this, SLOT(remove_copier()));
321         connect(copiersModule->copierModifyPB, SIGNAL(clicked()), this, SLOT(modify_copier()));
322         connect(copiersModule->AllCopiersLW, SIGNAL(currentRowChanged(int)), 
323                 this, SLOT(switch_copierLB(int)));
324         connect(copiersModule->copierFormatCO, SIGNAL(activated(int)), this, SLOT(switch_copierCO(int)));
325         connect(copiersModule->copierNewPB, SIGNAL(clicked()), this, SLOT(change_adaptor()));
326         connect(copiersModule->copierRemovePB, SIGNAL(clicked()), this, SLOT(change_adaptor()));
327         connect(copiersModule->copierModifyPB, SIGNAL(clicked()), this, SLOT(change_adaptor()));
328         connect(copiersModule->copierFormatCO, SIGNAL(activated(const QString&)), this, SLOT(copiers_changed()));
329         connect(copiersModule->copierED, SIGNAL(textChanged(const QString&)), this, SLOT(copiers_changed()));
330
331
332
333
334         fileformatsModule = new UiWidget<Ui::QPrefFileformatsUi>;
335         connect(fileformatsModule->formatNewPB, SIGNAL(clicked()), this, SLOT(new_format()));
336         connect(fileformatsModule->formatRemovePB, SIGNAL(clicked()), this, SLOT(remove_format()));
337         connect(fileformatsModule->formatModifyPB, SIGNAL(clicked()), this, SLOT(modify_format()));
338         connect(fileformatsModule->formatsLW, SIGNAL(currentRowChanged(int)), 
339                 this, SLOT(switch_format(int)));
340         connect(fileformatsModule->formatED, SIGNAL(textChanged(const QString&)), this, SLOT(fileformat_changed()));
341         connect(fileformatsModule->guiNameED, SIGNAL(textChanged(const QString&)), this, SLOT(fileformat_changed()));
342         connect(fileformatsModule->shortcutED, SIGNAL(textChanged(const QString&)), this, SLOT(fileformat_changed()));
343         connect(fileformatsModule->extensionED, SIGNAL(textChanged(const QString&)), this, SLOT(fileformat_changed()));
344         connect(fileformatsModule->viewerED, SIGNAL(textChanged(const QString&)), this, SLOT(fileformat_changed()));
345         connect(fileformatsModule->editorED, SIGNAL(textChanged(const QString&)), this, SLOT(fileformat_changed()));
346         connect(fileformatsModule->formatNewPB, SIGNAL(clicked()), this, SLOT(change_adaptor()));
347         connect(fileformatsModule->formatRemovePB, SIGNAL(clicked()), this, SLOT(change_adaptor()));
348         connect(fileformatsModule->formatModifyPB, SIGNAL(clicked()), this, SLOT(change_adaptor()));
349
350
351
352
353         languageModule = new UiWidget<Ui::QPrefLanguageUi>;
354         connect(languageModule->rtlCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor()));
355         connect(languageModule->markForeignCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor()));
356         connect(languageModule->autoBeginCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor()));
357         connect(languageModule->autoEndCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor()));
358         connect(languageModule->useBabelCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor()));
359         connect(languageModule->globalCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor()));
360         connect(languageModule->languagePackageED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
361         connect(languageModule->startCommandED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
362         connect(languageModule->endCommandED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
363         connect(languageModule->defaultLanguageCO, SIGNAL(activated(int)), this, SLOT(change_adaptor()));
364
365         languageModule->defaultLanguageCO->clear();
366
367         // store the lang identifiers for later
368         using lyx::frontend::LanguagePair;
369         std::vector<LanguagePair> const langs =
370                 lyx::frontend::getLanguageData(false);
371         lang_ = getSecond(langs);
372
373         std::vector<LanguagePair>::const_iterator lit  = langs.begin();
374         std::vector<LanguagePair>::const_iterator lend = langs.end();
375         for (; lit != lend; ++lit) {
376                 languageModule->defaultLanguageCO->insertItem(toqstr(lit->first));
377         }
378
379
380
381
382
383         printerModule = new UiWidget<Ui::QPrefPrinterUi>;
384         connect(printerModule->printerAdaptCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor()));
385         connect(printerModule->printerCommandED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
386         connect(printerModule->printerNameED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
387         connect(printerModule->printerPageRangeED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
388         connect(printerModule->printerCopiesED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
389         connect(printerModule->printerReverseED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
390         connect(printerModule->printerToPrinterED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
391         connect(printerModule->printerExtensionED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
392         connect(printerModule->printerSpoolCommandED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
393         connect(printerModule->printerPaperTypeED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
394         connect(printerModule->printerEvenED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
395         connect(printerModule->printerOddED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
396         connect(printerModule->printerCollatedED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
397         connect(printerModule->printerLandscapeED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
398         connect(printerModule->printerToFileED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
399         connect(printerModule->printerExtraED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
400         connect(printerModule->printerSpoolPrefixED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
401         connect(printerModule->printerPaperSizeED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
402
403
404
405
406         uiModule = new UiWidget<Ui::QPrefUi>;
407         connect(uiModule->autoSaveCB, SIGNAL( toggled(bool) ), uiModule->autoSaveLA, SLOT( setEnabled(bool) ) );
408         connect(uiModule->autoSaveCB, SIGNAL( toggled(bool) ), uiModule->autoSaveSB, SLOT( setEnabled(bool) ) );
409         connect(uiModule->autoSaveCB, SIGNAL( toggled(bool) ), uiModule->TextLabel1, SLOT( setEnabled(bool) ) );
410         connect(uiModule->uiFilePB, SIGNAL(clicked()), this, SLOT(select_ui()));
411         connect(uiModule->bindFilePB, SIGNAL(clicked()), this, SLOT(select_bind()));
412         connect(uiModule->uiFileED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
413         connect(uiModule->bindFileED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
414         connect(uiModule->restoreCursorCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor()));
415         connect(uiModule->loadSessionCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor()));
416         connect(uiModule->cursorFollowsCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor()));
417         connect(uiModule->autoSaveSB, SIGNAL(valueChanged(int)), this, SLOT(change_adaptor()));
418         connect(uiModule->autoSaveCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor()));
419         connect(uiModule->lastfilesSB, SIGNAL(valueChanged(int)), this, SLOT(change_adaptor()));
420         uiModule->lastfilesSB->setMaxValue(maxlastfiles);
421
422
423
424
425         identityModule = new UiWidget<Ui::QPrefIdentityUi>;
426         connect(identityModule->nameED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
427         connect(identityModule->emailED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
428
429
430         string const laf = _("Look and feel");
431         prefsPS->addCategory(laf);
432         prefsPS->addPanel(uiModule, _("User interface"), laf);
433         prefsPS->addPanel(screenfontsModule, _("Screen fonts"), laf);
434         prefsPS->addPanel(colorsModule, _("Colors"), laf);
435         prefsPS->addPanel(displayModule, _("Graphics"), laf);
436         prefsPS->addPanel(keyboardModule, _("Keyboard"), laf);
437
438         string const ls = _("Language settings");
439         prefsPS->addCategory(ls);
440         prefsPS->addPanel(languageModule, _("Language"), ls);
441         prefsPS->addPanel(spellcheckerModule, _("Spellchecker"), ls);
442
443         string const op = _("Outputs");
444         prefsPS->addCategory(op);
445         prefsPS->addPanel(asciiModule, _("Plain text"), op);
446         prefsPS->addPanel(dateModule, _("Date format"), op);
447         prefsPS->addPanel(latexModule, _("LaTeX"), op);
448 #if defined(__CYGWIN__) || defined(__CYGWIN32__)
449         prefsPS->addPanel(cygwinpathModule, _("Paths"), op);
450 #endif
451         prefsPS->addPanel(printerModule, _("Printer"), op);
452
453         prefsPS->addPanel(identityModule, _("Identity"));
454         prefsPS->addPanel(pathsModule, _("Paths"));
455         prefsPS->addPanel(fileformatsModule, _("File formats"));
456         prefsPS->addPanel(convertersModule, _("Converters"));
457         prefsPS->addPanel(copiersModule, _("Copiers"));
458
459         prefsPS->setCurrentPanel(_("User interface"));
460
461         form_->bcview().setOK(savePB);
462         form_->bcview().setApply(applyPB);
463         form_->bcview().setCancel(closePB);
464         form_->bcview().setRestore(restorePB);
465 }
466
467
468
469
470 QPrefsDialog::~QPrefsDialog()
471 {
472 }
473
474
475 void QPrefsDialog::closeEvent(QCloseEvent * e)
476 {
477         form_->slotWMHide();
478         e->accept();
479 }
480
481
482 void QPrefsDialog::change_adaptor()
483 {
484         form_->changed();
485 }
486
487
488 void QPrefsDialog::updateConverters()
489 {
490         Ui::QPrefConvertersUi* convertmod(convertersModule);
491
492         // save current selection
493         QString current = convertmod->converterFromCO->currentText()
494                 + " -> " + convertmod->converterToCO->currentText();
495
496         convertmod->converterFromCO->clear();
497         convertmod->converterToCO->clear();
498
499         Formats::const_iterator cit = form_->formats().begin();
500         Formats::const_iterator end = form_->formats().end();
501         for (; cit != end; ++cit) {
502                 convertmod->converterFromCO->insertItem(toqstr(cit->prettyname()));
503                 convertmod->converterToCO->insertItem(toqstr(cit->prettyname()));
504         }
505
506         convertmod->convertersLW->clear();
507
508         Converters::const_iterator ccit = form_->converters().begin();
509         Converters::const_iterator cend = form_->converters().end();
510         for (; ccit != cend; ++ccit) {
511                 std::string const name = ccit->From->prettyname() + " -> "
512                         + ccit->To->prettyname();
513                 convertmod->convertersLW->addItem(toqstr(name));
514         }
515         convertmod->convertersLW->sortItems(Qt::AscendingOrder);
516
517         // restore selection
518         if (!current.isEmpty()) {
519                 QList<QListWidgetItem *> const item = 
520                         convertmod->convertersLW->findItems(current, Qt::MatchExactly);
521                 if (item.size()>0)
522                         convertmod->convertersLW->setCurrentItem(item.at(0));
523         }
524         // select first element if restoring failed
525         if (convertmod->convertersLW->currentRow() == -1)
526                 convertmod->convertersLW->setCurrentRow(0);
527
528         updateConverterButtons();
529 }
530
531
532 void QPrefsDialog::switch_converter(int nr)
533 {
534         if (nr<0)
535                 return;
536
537         Converter const & c(form_->converters().get(nr));
538         convertersModule->converterFromCO->setCurrentIndex(form_->formats().getNumber(c.from));
539         convertersModule->converterToCO->setCurrentIndex(form_->formats().getNumber(c.to));
540         convertersModule->converterED->setText(toqstr(c.command));
541         convertersModule->converterFlagED->setText(toqstr(c.flags));
542
543         updateConverterButtons();
544 }
545
546
547 void QPrefsDialog::converter_changed()
548 {
549         updateConverterButtons();
550 }
551
552
553 void QPrefsDialog::updateConverterButtons()
554 {
555         Format const & from(form_->formats().get(
556                 convertersModule->converterFromCO->currentItem()));
557         Format const & to(form_->formats().get(
558                 convertersModule->converterToCO->currentItem()));
559         int const sel = form_->converters().getNumber(from.name(), to.name());
560         bool const known = !(sel < 0);
561         bool const valid = !(convertersModule->converterED->text().isEmpty()
562                 || from.name() == to.name());
563
564         Converter const & c(form_->converters().get(
565                 convertersModule->convertersLW->currentRow()));
566         string const old_command = c.command;
567         string const old_flag = c.flags;
568         string const new_command(fromqstr(convertersModule->converterED->text()));
569         string const new_flag(fromqstr(convertersModule->converterFlagED->text()));
570
571         bool modified = ((old_command != new_command) || (old_flag != new_flag));
572
573         convertersModule->converterModifyPB->setEnabled(valid && known && modified);
574         convertersModule->converterNewPB->setEnabled(valid && !known);
575         convertersModule->converterRemovePB->setEnabled(known);
576 }
577
578
579 // FIXME: user must
580 // specify unique from/to or it doesn't appear. This is really bad UI
581 void QPrefsDialog::new_converter()
582 {
583         Format const & from(form_->formats().get(convertersModule->converterFromCO->currentItem()));
584         Format const & to(form_->formats().get(convertersModule->converterToCO->currentItem()));
585         string const command(fromqstr(convertersModule->converterED->text()));
586         string const flags(fromqstr(convertersModule->converterFlagED->text()));
587
588         Converter const * old = form_->converters().getConverter(from.name(), to.name());
589         form_->converters().add(from.name(), to.name(), command, flags);
590         if (!old) {
591                 form_->converters().updateLast(form_->formats());
592         }
593         updateConverters();
594         convertersModule->convertersLW->setCurrentRow(convertersModule->convertersLW->count() - 1);
595 }
596
597
598 void QPrefsDialog::modify_converter()
599 {
600         QString const current_text =
601                 convertersModule->convertersLW->currentItem()->text();
602
603         Format const & from(form_->formats().get(convertersModule->converterFromCO->currentItem()));
604         Format const & to(form_->formats().get(convertersModule->converterToCO->currentItem()));
605         string flags(fromqstr(convertersModule->converterFlagED->text()));
606         string name(fromqstr(convertersModule->converterED->text()));
607
608         Converter const * old = form_->converters().getConverter(from.name(), to.name());
609         form_->converters().add(from.name(), to.name(), name, flags);
610         if (!old) {
611                 form_->converters().updateLast(form_->formats());
612         }
613         updateConverters();
614
615         QList<QListWidgetItem *> const item =
616                 convertersModule->convertersLW->findItems(current_text, Qt::MatchExactly);
617         if (item.size()>0)
618                 convertersModule->convertersLW->setCurrentItem(item.at(0));
619 }
620
621
622 void QPrefsDialog::remove_converter()
623 {
624         Format const & from(form_->formats().get(convertersModule->converterFromCO->currentItem()));
625         Format const & to(form_->formats().get(convertersModule->converterToCO->currentItem()));
626         form_->converters().erase(from.name(), to.name());
627         updateConverters();
628 }
629
630
631 void QPrefsDialog::updateCopiers()
632 {
633         // The choice widget
634         // save current selection
635         QString current = copiersModule->copierFormatCO->currentText();
636         copiersModule->copierFormatCO->clear();
637
638         for (Formats::const_iterator it = form_->formats().begin(),
639                      end = form_->formats().end();
640              it != end; ++it) {
641                 copiersModule->copierFormatCO->insertItem(toqstr(it->prettyname()));
642         }
643
644         // The browser widget
645         copiersModule->AllCopiersLW->clear();
646
647         for (Movers::iterator it = form_->movers().begin(),
648                      end = form_->movers().end();
649              it != end; ++it) {
650                 std::string const & command = it->second.command();
651                 if (command.empty())
652                         continue;
653                 QString const pretty = toqstr(form_->formats().prettyName(it->first));
654                 copiersModule->AllCopiersLW->addItem(pretty);
655         }
656         copiersModule->AllCopiersLW->sortItems(Qt::AscendingOrder);
657
658         // restore selection
659         if (!current.isEmpty()) {
660                 QList<QListWidgetItem *> item = 
661                         copiersModule->AllCopiersLW->findItems(current, Qt::MatchExactly);
662                 if (item.size()>0)
663                         copiersModule->AllCopiersLW->setCurrentItem(item.at(0));
664         }
665         // select first element if restoring failed
666         if (copiersModule->AllCopiersLW->currentRow() == -1)
667                 copiersModule->AllCopiersLW->setCurrentRow(0);
668 }
669
670
671 namespace {
672
673 class SamePrettyName {
674 public:
675         SamePrettyName(string const & n) : pretty_name_(n) {}
676
677         bool operator()(::Format const & fmt) const {
678                 return fmt.prettyname() == pretty_name_;
679         }
680
681 private:
682         string const pretty_name_;
683 };
684
685
686 Format const * getFormat(std::string const & prettyname)
687 {
688         Formats::const_iterator it = ::formats.begin();
689         Formats::const_iterator const end = ::formats.end();
690         it = std::find_if(it, end, SamePrettyName(prettyname));
691         return it == end ? 0 : &*it;
692 }
693
694 } // namespace anon
695
696
697 void QPrefsDialog::switch_copierLB(int row)
698 {
699         if (row<0)
700                 return;
701
702         std::string const browser_text =
703                 fromqstr(copiersModule->AllCopiersLW->currentItem()->text());
704         Format const * fmt = getFormat(browser_text);
705         if (fmt == 0)
706                 return;
707
708         QString const gui_name = toqstr(fmt->prettyname());
709         QString const command = toqstr(form_->movers().command(fmt->name()));
710
711         copiersModule->copierED->clear();
712         int const combo_size = copiersModule->copierFormatCO->count();
713         for (int i = 0; i < combo_size; ++i) {
714                 QString const text = copiersModule->copierFormatCO->text(i);
715                 if (text == gui_name) {
716                         copiersModule->copierFormatCO->setCurrentIndex(i);
717                         copiersModule->copierED->setText(command);
718                         break;
719                 }
720         }
721         updateCopierButtons();
722 }
723
724
725 void QPrefsDialog::switch_copierCO(int row)
726 {
727         if (row<0)
728                 return;
729
730         std::string const combo_text =
731                 fromqstr(copiersModule->copierFormatCO->currentText());
732         Format const * fmt = getFormat(combo_text);
733         if (fmt == 0)
734                 return;
735
736         QString const command = toqstr(form_->movers().command(fmt->name()));
737         copiersModule->copierED->setText(command);
738
739         QListWidgetItem * const index = copiersModule->AllCopiersLW->currentItem();
740         if (index >= 0)
741                 copiersModule->AllCopiersLW->setItemSelected(index, false);
742
743         QString const gui_name = toqstr(fmt->prettyname());
744         int const browser_size = copiersModule->AllCopiersLW->count();
745         for (int i = 0; i < browser_size; ++i) {
746                 QString const text = copiersModule->AllCopiersLW->item(i)->text();
747                 if (text == gui_name) {
748                         QListWidgetItem * item = copiersModule->AllCopiersLW->item(i);
749                         copiersModule->AllCopiersLW->setItemSelected(item, true);
750                         break;
751                 }
752         }
753 }
754
755
756 void QPrefsDialog::copiers_changed()
757 {
758         updateCopierButtons();
759 }
760
761
762 void QPrefsDialog::updateCopierButtons()
763 {
764         QString selected = copiersModule->copierFormatCO->currentText();
765
766         bool known = false;
767         for (unsigned int i = 0; i != copiersModule->AllCopiersLW->count(); i++) {
768                 if (copiersModule->AllCopiersLW->item(i)->text() == selected)
769                         known = true;
770         }
771
772         bool const valid = !copiersModule->copierED->text().isEmpty();
773
774         Format const * fmt = getFormat(fromqstr(selected));
775         string const old_command = form_->movers().command(fmt->name());
776         string const new_command(fromqstr(copiersModule->copierED->text()));
777
778         bool modified = (old_command != new_command);
779
780         copiersModule->copierModifyPB->setEnabled(valid && known && modified);
781         copiersModule->copierNewPB->setEnabled(valid && !known);
782         copiersModule->copierRemovePB->setEnabled(known);
783 }
784
785
786 void QPrefsDialog::new_copier()
787 {
788         std::string const combo_text =
789                 fromqstr(copiersModule->copierFormatCO->currentText());
790         Format const * fmt = getFormat(combo_text);
791         if (fmt == 0)
792                 return;
793
794         string const command = fromqstr(copiersModule->copierED->text());
795         if (command.empty())
796                 return;
797
798         form_->movers().set(fmt->name(), command);
799
800         updateCopiers();
801         int const last = copiersModule->AllCopiersLW->count() - 1;
802         copiersModule->AllCopiersLW->setCurrentRow(last);
803
804         updateCopierButtons();
805 }
806
807
808 void QPrefsDialog::modify_copier()
809 {
810         std::string const combo_text =
811                 fromqstr(copiersModule->copierFormatCO->currentText());
812         Format const * fmt = getFormat(combo_text);
813         if (fmt == 0)
814                 return;
815
816         string const command = fromqstr(copiersModule->copierED->text());
817         form_->movers().set(fmt->name(), command);
818
819         updateCopiers();
820         updateCopierButtons();
821 }
822
823
824 void QPrefsDialog::remove_copier()
825 {
826         std::string const combo_text =
827                 fromqstr(copiersModule->copierFormatCO->currentText());
828         Format const * fmt = getFormat(combo_text);
829         if (fmt == 0)
830                 return;
831
832         string const & fmt_name = fmt->name();
833         form_->movers().set(fmt_name, string());
834
835         updateCopiers();
836         updateCopierButtons();
837 }
838
839
840 void QPrefsDialog::updateFormats()
841 {
842         Ui::QPrefFileformatsUi * formatmod(fileformatsModule);
843
844         // save current selection
845         QString current = formatmod->guiNameED->text();
846
847         formatmod->formatsLW->clear();
848
849         Formats::const_iterator cit = form_->formats().begin();
850         Formats::const_iterator end = form_->formats().end();
851         for (; cit != end; ++cit) {
852                 formatmod->formatsLW->addItem(toqstr(cit->prettyname()));
853         }
854         formatmod->formatsLW->sortItems(Qt::AscendingOrder);
855
856         // restore selection
857         if (!current.isEmpty()) {
858                 QList<QListWidgetItem *>  item = formatmod->formatsLW->findItems(current, Qt::MatchExactly);
859                 if (item.size()>0)
860                         formatmod->formatsLW->setCurrentItem(item.at(0));
861         }
862         // select first element if restoring failed
863         if (formatmod->formatsLW->currentRow() == -1)
864                 formatmod->formatsLW->setCurrentRow(0);
865 }
866
867
868 void QPrefsDialog::switch_format(int nr)
869 {
870         if (nr<0)
871                 return;
872
873         Format const & f(form_->formats().get(nr));
874         fileformatsModule->formatED->setText(toqstr(f.name()));
875         fileformatsModule->guiNameED->setText(toqstr(f.prettyname()));
876         fileformatsModule->extensionED->setText(toqstr(f.extension()));
877         fileformatsModule->shortcutED->setText(toqstr(f.shortcut()));
878         fileformatsModule->viewerED->setText(toqstr(f.viewer()));
879         fileformatsModule->editorED->setText(toqstr(f.editor()));
880         fileformatsModule->formatRemovePB->setEnabled(
881                 !form_->converters().formatIsUsed(f.name()));
882
883         updateFormatsButtons();
884 }
885
886
887 void QPrefsDialog::fileformat_changed()
888 {
889         updateFormatsButtons();
890 }
891
892
893 void QPrefsDialog::updateFormatsButtons()
894 {
895         QString const format = fileformatsModule->formatED->text();
896         QString const gui_name = fileformatsModule->guiNameED->text();
897         int const sel = form_->formats().getNumber(fromqstr(format));
898         bool gui_name_known = false;
899         int where = sel;
900         for (unsigned int i = 0; i != fileformatsModule->formatsLW->count(); i++) {
901                 if (fileformatsModule->formatsLW->item(i)->text() == gui_name) {
902                         gui_name_known = true;
903                         where = i;
904                 }
905         }
906
907         // assure that a gui name cannot be chosen twice
908         bool const known_otherwise = gui_name_known && (where != sel);
909
910         bool const known = !(sel < 0);
911         bool const valid = (!fileformatsModule->formatED->text().isEmpty()
912                 && !fileformatsModule->guiNameED->text().isEmpty());
913
914         Format const & f(form_->formats().get(
915                 fileformatsModule->formatsLW->currentRow()));
916         string const old_pretty(f.prettyname());
917         string const old_shortcut(f.shortcut());
918         string const old_extension(f.extension());
919         string const old_viewer(f.viewer());
920         string const old_editor(f.editor());
921
922         string const new_pretty(fromqstr(gui_name));
923         string const new_shortcut(fromqstr(fileformatsModule->shortcutED->text()));
924         string const new_extension(fromqstr(fileformatsModule->extensionED->text()));
925         string const new_viewer(fromqstr(fileformatsModule->viewerED->text()));
926         string const new_editor(fromqstr(fileformatsModule->editorED->text()));
927
928         bool modified = ((old_pretty != new_pretty) || (old_shortcut != new_shortcut)
929                 || (old_extension != new_extension) || (old_viewer != new_viewer)
930                 || (old_editor != new_editor));
931
932         fileformatsModule->formatModifyPB->setEnabled(
933                 valid && known && modified && !known_otherwise);
934         fileformatsModule->formatNewPB->setEnabled(valid && !known && !gui_name_known);
935         fileformatsModule->formatRemovePB->setEnabled(known);
936 }
937
938
939 void QPrefsDialog::new_format()
940 {
941         string const name = fromqstr(fileformatsModule->formatED->text());
942         string const prettyname = fromqstr(fileformatsModule->guiNameED->text());
943         string const extension = fromqstr(fileformatsModule->extensionED->text());
944         string const shortcut = fromqstr(fileformatsModule->shortcutED->text());
945         string const viewer = fromqstr(fileformatsModule->viewerED->text());
946         string const editor = fromqstr(fileformatsModule->editorED->text());
947
948         form_->formats().add(name, extension, prettyname, shortcut, viewer, editor);
949         form_->formats().sort();
950         updateFormats();
951         fileformatsModule->formatsLW->setCurrentRow(form_->formats().getNumber(name));
952         form_->converters().update(form_->formats());
953
954         updateConverters();
955         updateFormatsButtons();
956 }
957
958
959 void QPrefsDialog::modify_format()
960 {
961         int const current_item = fileformatsModule->formatsLW->currentRow();
962         QString const current_text =
963                 fileformatsModule->formatsLW->currentItem()->text();
964
965         Format const & oldformat(form_->formats().get(current_item));
966         string const oldpretty(oldformat.prettyname());
967         string const name(fromqstr(fileformatsModule->formatED->text()));
968         form_->formats().erase(oldformat.name());
969
970         string const prettyname = fromqstr(fileformatsModule->guiNameED->text());
971         string const extension = fromqstr(fileformatsModule->extensionED->text());
972         string const shortcut = fromqstr(fileformatsModule->shortcutED->text());
973         string const viewer = fromqstr(fileformatsModule->viewerED->text());
974         string const editor = fromqstr(fileformatsModule->editorED->text());
975
976         form_->formats().add(name, extension, prettyname, shortcut, viewer, editor);
977         form_->formats().sort();
978
979         fileformatsModule->formatsLW->setUpdatesEnabled(false);
980         updateFormats();
981         fileformatsModule->formatsLW->setUpdatesEnabled(true);
982         fileformatsModule->formatsLW->update();
983
984         updateConverters();
985         updateFormatsButtons();
986
987         QList<QListWidgetItem *>  const item =
988                 fileformatsModule->formatsLW->findItems(current_text, Qt::MatchExactly);
989         if (item.size()>0)
990                 fileformatsModule->formatsLW->setCurrentItem(item.at(0));
991 }
992
993
994 void QPrefsDialog::remove_format()
995 {
996         int const nr(fileformatsModule->formatsLW->currentRow());
997         if (nr < 0)
998                 return;
999         string const current_text = form_->formats().get(nr).name();
1000         if (form_->converters().formatIsUsed(current_text)) {
1001                 Alert::error(_("Format in use"),
1002                                 _("Cannot remove a Format used by a Converter. "
1003                                       "Remove the converter first."));
1004                 return;
1005         }
1006         form_->formats().erase(current_text);
1007         updateFormats();
1008         form_->converters().update(form_->formats());
1009
1010         updateConverters();
1011         updateFormatsButtons();
1012 }
1013
1014
1015 void QPrefsDialog::change_color()
1016 {
1017         int const row = colorsModule->lyxObjectsLW->currentRow();
1018         QString color = newcolors_[row];
1019         QColor c(QColorDialog::getColor(QColor(color), 
1020                 qApp->focusWidget() ? qApp->focusWidget() : qApp->mainWidget()));
1021
1022         if (c.name()!=color) {
1023                 newcolors_[row] = c.name();
1024                 QPixmap coloritem(32, 32);
1025                 coloritem.fill(c);
1026                 colorsModule->lyxObjectsLW->currentItem()->setIcon(QIcon(coloritem));
1027                 change_adaptor();
1028         }
1029 }
1030
1031
1032 void QPrefsDialog::select_ui()
1033 {
1034         string file(form_->controller().browseUI(fromqstr(uiModule->uiFileED->text())));
1035         if (!file.empty())
1036                 uiModule->uiFileED->setText(toqstr(file));
1037 }
1038
1039
1040 void QPrefsDialog::select_bind()
1041 {
1042         string file(form_->controller().browsebind(fromqstr(uiModule->bindFileED->text())));
1043         if (!file.empty())
1044                 uiModule->bindFileED->setText(toqstr(file));
1045 }
1046
1047
1048 void QPrefsDialog::select_keymap1()
1049 {
1050         string file(form_->controller().browsekbmap(fromqstr(keyboardModule->firstKeymapED->text())));
1051         if (!file.empty())
1052                 keyboardModule->firstKeymapED->setText(toqstr(file));
1053 }
1054
1055
1056 void QPrefsDialog::select_keymap2()
1057 {
1058         string file(form_->controller().browsekbmap(fromqstr(keyboardModule->secondKeymapED->text())));
1059         if (!file.empty())
1060                 keyboardModule->secondKeymapED->setText(toqstr(file));
1061 }
1062
1063
1064 void QPrefsDialog::select_dict()
1065 {
1066         string file(form_->controller().browsedict(fromqstr(spellcheckerModule->persDictionaryED->text())));
1067         if (!file.empty())
1068                 spellcheckerModule->persDictionaryED->setText(toqstr(file));
1069 }
1070
1071
1072 // NB: the _() is OK here because it gets passed back and we toqstr() them
1073
1074 void QPrefsDialog::select_templatedir()
1075 {
1076         string file(form_->controller().browsedir(fromqstr(pathsModule->templateDirED->text()), _("Select a document templates directory")));
1077         if (!file.empty())
1078                 pathsModule->templateDirED->setText(toqstr(file));
1079 }
1080
1081
1082 void QPrefsDialog::select_tempdir()
1083 {
1084         string file(form_->controller().browsedir(fromqstr(pathsModule->tempDirED->text()), _("Select a temporary directory")));
1085         if (!file.empty())
1086                 pathsModule->tempDirED->setText(toqstr(file));
1087 }
1088
1089
1090 void QPrefsDialog::select_backupdir()
1091 {
1092         string file(form_->controller().browsedir(fromqstr(pathsModule->backupDirED->text()), _("Select a backups directory")));
1093         if (!file.empty())
1094                 pathsModule->backupDirED->setText(toqstr(file));
1095 }
1096
1097
1098 void QPrefsDialog::select_workingdir()
1099 {
1100         string file(form_->controller().browsedir(fromqstr(pathsModule->workingDirED->text()), _("Select a document directory")));
1101         if (!file.empty())
1102                 pathsModule->workingDirED->setText(toqstr(file));
1103 }
1104
1105
1106 void QPrefsDialog::select_lyxpipe()
1107 {
1108         string file(form_->controller().browse(fromqstr(pathsModule->lyxserverDirED->text()), _("Give a filename for the LyX server pipe")));
1109         if (!file.empty())
1110                 pathsModule->lyxserverDirED->setText(toqstr(file));
1111 }
1112
1113
1114 void QPrefsDialog::select_roman(const QString& name)
1115 {
1116         screenfontsModule->screenRomanFE->set(QFont(name), name);
1117 }
1118
1119
1120 void QPrefsDialog::select_sans(const QString& name)
1121 {
1122         screenfontsModule->screenSansFE->set(QFont(name), name);
1123 }
1124
1125
1126 void QPrefsDialog::select_typewriter(const QString& name)
1127 {
1128         screenfontsModule->screenTypewriterFE->set(QFont(name), name);
1129 }
1130
1131 namespace {
1132
1133 string const internal_path(QString const & input)
1134 {
1135         return lyx::support::os::internal_path(fromqstr(input));
1136 }
1137
1138 }
1139
1140 void QPrefsDialog::apply(LyXRC & rc) const
1141 {
1142         // FIXME: remove rtl_support bool
1143         rc.rtl_support = languageModule->rtlCB->isChecked();
1144         rc.mark_foreign_language = languageModule->markForeignCB->isChecked();
1145         rc.language_auto_begin = languageModule->autoBeginCB->isChecked();
1146         rc.language_auto_end = languageModule->autoEndCB->isChecked();
1147         rc.language_use_babel = languageModule->useBabelCB->isChecked();
1148         rc.language_global_options = languageModule->globalCB->isChecked();
1149         rc.language_package = fromqstr(languageModule->languagePackageED->text());
1150         rc.language_command_begin = fromqstr(languageModule->startCommandED->text());
1151         rc.language_command_end = fromqstr(languageModule->endCommandED->text());
1152         rc.default_language = lang_[languageModule->defaultLanguageCO->currentItem()];
1153
1154
1155         rc.ui_file = internal_path(uiModule->uiFileED->text());
1156         rc.bind_file = internal_path(uiModule->bindFileED->text());
1157         rc.use_lastfilepos = uiModule->restoreCursorCB->isChecked();
1158         rc.load_session = uiModule->loadSessionCB->isChecked();
1159         rc.cursor_follows_scrollbar = uiModule->cursorFollowsCB->isChecked();
1160         rc.autosave = uiModule->autoSaveSB->value() * 60;
1161         rc.make_backup = uiModule->autoSaveCB->isChecked();
1162         rc.num_lastfiles = uiModule->lastfilesSB->value();
1163
1164
1165         // FIXME: can derive CB from the two EDs
1166         rc.use_kbmap = keyboardModule->keymapCB->isChecked();
1167         rc.primary_kbmap = internal_path(keyboardModule->firstKeymapED->text());
1168         rc.secondary_kbmap = internal_path(keyboardModule->secondKeymapED->text());
1169
1170
1171         rc.ascii_linelen = asciiModule->asciiLinelengthSB->value();
1172         rc.ascii_roff_command = fromqstr(asciiModule->asciiRoffED->text());
1173
1174
1175         rc.date_insert_format = fromqstr(dateModule->DateED->text());
1176
1177
1178 #if defined(__CYGWIN__) || defined(__CYGWIN32__)
1179         rc.cygwin_path_fix = cygwinpathModule->pathCB->isChecked();
1180 #endif
1181
1182
1183         rc.fontenc = fromqstr(latexModule->latexEncodingED->text());
1184         rc.chktex_command = fromqstr(latexModule->latexChecktexED->text());
1185         rc.bibtex_command = fromqstr(latexModule->latexBibtexED->text());
1186         rc.index_command = fromqstr(latexModule->latexIndexED->text());
1187         rc.auto_reset_options = latexModule->latexAutoresetCB->isChecked();
1188         rc.view_dvi_paper_option = fromqstr(latexModule->latexDviPaperED->text());
1189         rc.default_papersize =
1190                 form_->controller().toPaperSize(latexModule->latexPaperSizeCO->currentItem());
1191
1192
1193         switch (displayModule->instantPreviewCO->currentItem()) {
1194         case 0: rc.preview = LyXRC::PREVIEW_OFF; break;
1195         case 1: rc.preview = LyXRC::PREVIEW_NO_MATH; break;
1196         case 2: rc.preview = LyXRC::PREVIEW_ON; break;
1197         }
1198
1199         lyx::graphics::DisplayType dtype;
1200         switch (displayModule->displayGraphicsCO->currentItem()) {
1201         case 3: dtype = lyx::graphics::NoDisplay; break;
1202         case 2: dtype = lyx::graphics::ColorDisplay; break;
1203         case 1: dtype = lyx::graphics::GrayscaleDisplay;        break;
1204         case 0: dtype = lyx::graphics::MonochromeDisplay; break;
1205         default: dtype = lyx::graphics::GrayscaleDisplay;
1206         }
1207         rc.display_graphics = dtype;
1208
1209 #ifdef WITH_WARNINGS
1210 #warning FIXME!! The graphics cache no longer has a changeDisplay method.
1211 #endif
1212 #if 0
1213         if (old_value != rc.display_graphics) {
1214                 lyx::graphics::GCache & gc = lyx::graphics::GCache::get();
1215                 gc.changeDisplay();
1216         }
1217 #endif
1218
1219
1220         rc.document_path = internal_path(pathsModule->workingDirED->text());
1221         rc.template_path = internal_path(pathsModule->templateDirED->text());
1222         rc.backupdir_path = internal_path(pathsModule->backupDirED->text());
1223         rc.tempdir_path = internal_path(pathsModule->tempDirED->text());
1224         rc.path_prefix = fromqstr(pathsModule->pathPrefixED->text());
1225         // FIXME: should be a checkbox only
1226         rc.lyxpipes = internal_path(pathsModule->lyxserverDirED->text());
1227
1228
1229         switch (spellcheckerModule->spellCommandCO->currentItem()) {
1230                 case 0:
1231                 case 1:
1232                 case 2:
1233                         rc.use_spell_lib = false;
1234                         rc.isp_command = fromqstr(spellcheckerModule->spellCommandCO->currentText());
1235                         break;
1236                 case 3:
1237                         rc.use_spell_lib = true;
1238                         break;
1239         }
1240
1241         // FIXME: remove isp_use_alt_lang
1242         rc.isp_alt_lang = fromqstr(spellcheckerModule->altLanguageED->text());
1243         rc.isp_use_alt_lang = !rc.isp_alt_lang.empty();
1244         // FIXME: remove isp_use_esc_chars
1245         rc.isp_esc_chars = fromqstr(spellcheckerModule->escapeCharactersED->text());
1246         rc.isp_use_esc_chars = !rc.isp_esc_chars.empty();
1247         // FIXME: remove isp_use_pers_dict
1248         rc.isp_pers_dict = internal_path(spellcheckerModule->persDictionaryED->text());
1249         rc.isp_use_pers_dict = !rc.isp_pers_dict.empty();
1250         rc.isp_accept_compound = spellcheckerModule->compoundWordCB->isChecked();
1251         rc.isp_use_input_encoding = spellcheckerModule->inputEncodingCB->isChecked();
1252
1253
1254
1255         rc.print_adapt_output = printerModule->printerAdaptCB->isChecked();
1256         rc.print_command = fromqstr(printerModule->printerCommandED->text());
1257         rc.printer = fromqstr(printerModule->printerNameED->text());
1258
1259         rc.print_pagerange_flag = fromqstr(printerModule->printerPageRangeED->text());
1260         rc.print_copies_flag = fromqstr(printerModule->printerCopiesED->text());
1261         rc.print_reverse_flag = fromqstr(printerModule->printerReverseED->text());
1262         rc.print_to_printer = fromqstr(printerModule->printerToPrinterED->text());
1263         rc.print_file_extension = fromqstr(printerModule->printerExtensionED->text());
1264         rc.print_spool_command = fromqstr(printerModule->printerSpoolCommandED->text());
1265         rc.print_paper_flag = fromqstr(printerModule->printerPaperTypeED->text());
1266         rc.print_evenpage_flag = fromqstr(printerModule->printerEvenED->text());
1267         rc.print_oddpage_flag = fromqstr(printerModule->printerOddED->text());
1268         rc.print_collcopies_flag = fromqstr(printerModule->printerCollatedED->text());
1269         rc.print_landscape_flag = fromqstr(printerModule->printerLandscapeED->text());
1270         rc.print_to_file = internal_path(printerModule->printerToFileED->text());
1271         rc.print_extra_options = fromqstr(printerModule->printerExtraED->text());
1272         rc.print_spool_printerprefix = fromqstr(printerModule->printerSpoolPrefixED->text());
1273         rc.print_paper_dimension_flag = fromqstr(printerModule->printerPaperSizeED->text());
1274
1275
1276
1277         rc.user_name = fromqstr(identityModule->nameED->text());
1278         rc.user_email = fromqstr(identityModule->emailED->text());
1279
1280
1281
1282         LyXRC const oldrc(rc);
1283
1284         boost::tie(rc.roman_font_name, rc.roman_font_foundry)
1285                 = parseFontName(fromqstr(screenfontsModule->screenRomanCO->currentText()));
1286         boost::tie(rc.sans_font_name, rc.sans_font_foundry) =
1287                 parseFontName(fromqstr(screenfontsModule->screenSansCO->currentText()));
1288         boost::tie(rc.typewriter_font_name, rc.typewriter_font_foundry) =
1289                 parseFontName(fromqstr(screenfontsModule->screenTypewriterCO->currentText()));
1290
1291         rc.zoom = screenfontsModule->screenZoomSB->value();
1292         rc.dpi = screenfontsModule->screenDpiSB->value();
1293         rc.font_sizes[LyXFont::SIZE_TINY] = fromqstr(screenfontsModule->screenTinyED->text());
1294         rc.font_sizes[LyXFont::SIZE_SCRIPT] = fromqstr(screenfontsModule->screenSmallestED->text());
1295         rc.font_sizes[LyXFont::SIZE_FOOTNOTE] = fromqstr(screenfontsModule->screenSmallerED->text());
1296         rc.font_sizes[LyXFont::SIZE_SMALL] = fromqstr(screenfontsModule->screenSmallED->text());
1297         rc.font_sizes[LyXFont::SIZE_NORMAL] = fromqstr(screenfontsModule->screenNormalED->text());
1298         rc.font_sizes[LyXFont::SIZE_LARGE] = fromqstr(screenfontsModule->screenLargeED->text());
1299         rc.font_sizes[LyXFont::SIZE_LARGER] = fromqstr(screenfontsModule->screenLargerED->text());
1300         rc.font_sizes[LyXFont::SIZE_LARGEST] = fromqstr(screenfontsModule->screenLargestED->text());
1301         rc.font_sizes[LyXFont::SIZE_HUGE] = fromqstr(screenfontsModule->screenHugeED->text());
1302         rc.font_sizes[LyXFont::SIZE_HUGER] = fromqstr(screenfontsModule->screenHugerED->text());
1303
1304         if (rc.font_sizes != oldrc.font_sizes
1305                 || rc.roman_font_name != oldrc.roman_font_name
1306                 || rc.sans_font_name != oldrc.sans_font_name
1307                 || rc.typewriter_font_name != oldrc.typewriter_font_name
1308                 || rc.zoom != oldrc.zoom || rc.dpi != oldrc.dpi) {
1309                 form_->controller().updateScreenFonts();
1310         }
1311
1312
1313         for (int i = 0; i < lcolors_.size(); ++i) {
1314                 if (prefcolors_[i]!=newcolors_[i])
1315                         form_->controller().setColor(lcolors_[i], fromqstr(newcolors_[i]));
1316         }
1317 }
1318
1319 // FIXME: move to helper_funcs.h
1320 namespace {
1321
1322 template<class A>
1323 typename std::vector<A>::size_type
1324 findPos(std::vector<A> const & vec, A const & val)
1325 {
1326         typedef typename std::vector<A>::const_iterator Cit;
1327
1328         Cit it = std::find(vec.begin(), vec.end(), val);
1329         if (it == vec.end())
1330                 return 0;
1331         return distance(vec.begin(), it);
1332 }
1333
1334 void setComboxFont(QComboBox * cb, string const & family, string const & foundry)
1335 {
1336         string const name = makeFontName(family, foundry);
1337         for (int i = 0; i < cb->count(); ++i) {
1338                 if (fromqstr(cb->text(i)) == name) {
1339                         cb->setCurrentItem(i);
1340                         return;
1341                 }
1342         }
1343
1344         // Try matching without foundry name
1345
1346         // We count in reverse in order to prefer the Xft foundry
1347         for (int i = cb->count() - 1; i >= 0; --i) {
1348                 pair<string, string> tmp = parseFontName(fromqstr(cb->text(i)));
1349                 if (compare_no_case(tmp.first, family) == 0) {
1350                         cb->setCurrentItem(i);
1351                         return;
1352                 }
1353         }
1354
1355         // family alone can contain e.g. "Helvetica [Adobe]"
1356         pair<string, string> tmpfam = parseFontName(family);
1357
1358         // We count in reverse in order to prefer the Xft foundry
1359         for (int i = cb->count() - 1; i >= 0; --i) {
1360                 pair<string, string> tmp = parseFontName(fromqstr(cb->text(i)));
1361                 if (compare_no_case(tmp.first, tmpfam.first) == 0) {
1362                         cb->setCurrentItem(i);
1363                         return;
1364                 }
1365         }
1366
1367         // Bleh, default fonts, and the names couldn't be found. Hack
1368         // for bug 1063. Qt makes baby Jesus cry.
1369
1370         QFont font;
1371
1372         if (family == lyx_gui::roman_font_name()) {
1373                 font.setStyleHint(QFont::Serif);
1374                 font.setFamily(family.c_str());
1375         } else if (family == lyx_gui::sans_font_name()) {
1376                 font.setStyleHint(QFont::SansSerif);
1377                 font.setFamily(family.c_str());
1378         } else if (family == lyx_gui::typewriter_font_name()) {
1379                 font.setStyleHint(QFont::TypeWriter);
1380                 font.setFamily(family.c_str());
1381         } else {
1382                 lyxerr << "FAILED to find the default font: '"
1383                        << foundry << "', '" << family << '\''<< endl;
1384                 return;
1385         }
1386
1387         QFontInfo info(font);
1388         pair<string, string> tmp = parseFontName(fromqstr(info.family()));
1389         string const & default_font_name = tmp.first;
1390         lyxerr << "Apparent font is " << default_font_name << endl;
1391
1392         for (int i = 0; i < cb->count(); ++i) {
1393                 lyxerr << "Looking at " << fromqstr(cb->text(i)) << endl;
1394                 if (compare_no_case(fromqstr(cb->text(i)),
1395                                     default_font_name) == 0) {
1396                         cb->setCurrentItem(i);
1397                         return;
1398                 }
1399         }
1400
1401         lyxerr << "FAILED to find the font: '"
1402                << foundry << "', '" << family << '\'' <<endl;
1403 }
1404
1405 } // end namespace anon
1406
1407 namespace {
1408
1409 QString const external_path(string const & input)
1410 {
1411         return toqstr(lyx::support::os::external_path(input));
1412 }
1413
1414 }
1415
1416 void QPrefsDialog::update(LyXRC const & rc)
1417 {
1418         // FIXME: remove rtl_support bool
1419         languageModule->rtlCB->setChecked(rc.rtl_support);
1420         languageModule->markForeignCB->setChecked(rc.mark_foreign_language);
1421         languageModule->autoBeginCB->setChecked(rc.language_auto_begin);
1422         languageModule->autoEndCB->setChecked(rc.language_auto_end);
1423         languageModule->useBabelCB->setChecked(rc.language_use_babel);
1424         languageModule->globalCB->setChecked(rc.language_global_options);
1425         languageModule->languagePackageED->setText(toqstr(rc.language_package));
1426         languageModule->startCommandED->setText(toqstr(rc.language_command_begin));
1427         languageModule->endCommandED->setText(toqstr(rc.language_command_end));
1428
1429         int const pos = int(findPos(lang_, rc.default_language));
1430         languageModule->defaultLanguageCO->setCurrentIndex(pos);
1431
1432         uiModule->uiFileED->setText(external_path(rc.ui_file));
1433         uiModule->bindFileED->setText(external_path(rc.bind_file));
1434         uiModule->restoreCursorCB->setChecked(rc.use_lastfilepos);
1435         uiModule->loadSessionCB->setChecked(rc.load_session);
1436         uiModule->cursorFollowsCB->setChecked(rc.cursor_follows_scrollbar);
1437         // convert to minutes
1438         int mins(rc.autosave / 60);
1439         if (rc.autosave && !mins)
1440                 mins = 1;
1441         uiModule->autoSaveSB->setValue(mins);
1442         uiModule->autoSaveCB->setChecked(rc.make_backup);
1443         uiModule->lastfilesSB->setValue(rc.num_lastfiles);
1444
1445
1446         identityModule->nameED->setText(toqstr(rc.user_name));
1447         identityModule->emailED->setText(toqstr(rc.user_email));
1448
1449
1450         // FIXME: can derive CB from the two EDs
1451         keyboardModule->keymapCB->setChecked(rc.use_kbmap);
1452         // no idea why we need these. Fscking Qt.
1453         keyboardModule->firstKeymapED->setEnabled(rc.use_kbmap);
1454         keyboardModule->firstKeymapPB->setEnabled(rc.use_kbmap);
1455         keyboardModule->firstKeymapLA->setEnabled(rc.use_kbmap);
1456         keyboardModule->secondKeymapED->setEnabled(rc.use_kbmap);
1457         keyboardModule->secondKeymapPB->setEnabled(rc.use_kbmap);
1458         keyboardModule->secondKeymapLA->setEnabled(rc.use_kbmap);
1459         keyboardModule->firstKeymapED->setText(external_path(rc.primary_kbmap));
1460         keyboardModule->secondKeymapED->setText(external_path(rc.secondary_kbmap));
1461
1462
1463
1464         asciiModule->asciiLinelengthSB->setValue(rc.ascii_linelen);
1465         asciiModule->asciiRoffED->setText(toqstr(rc.ascii_roff_command));
1466
1467
1468
1469         dateModule->DateED->setText(toqstr(rc.date_insert_format));
1470
1471
1472
1473 #if defined(__CYGWIN__) || defined(__CYGWIN32__)
1474         cygwinpathModule->pathCB->setChecked(rc.cygwin_path_fix);
1475 #endif
1476
1477
1478
1479         latexModule->latexEncodingED->setText(toqstr(rc.fontenc));
1480         latexModule->latexChecktexED->setText(toqstr(rc.chktex_command));
1481         latexModule->latexBibtexED->setText(toqstr(rc.bibtex_command));
1482         latexModule->latexIndexED->setText(toqstr(rc.index_command));
1483         latexModule->latexAutoresetCB->setChecked(rc.auto_reset_options);
1484         latexModule->latexDviPaperED->setText(toqstr(rc.view_dvi_paper_option));
1485         latexModule->latexPaperSizeCO->setCurrentIndex(
1486                 form_->controller().fromPaperSize(rc.default_papersize));
1487
1488
1489
1490         switch (rc.preview) {
1491         case LyXRC::PREVIEW_OFF:
1492                 displayModule->instantPreviewCO->setCurrentIndex(0);
1493                 break;
1494         case LyXRC::PREVIEW_NO_MATH :
1495                 displayModule->instantPreviewCO->setCurrentIndex(1);
1496                 break;
1497         case LyXRC::PREVIEW_ON :
1498                 displayModule->instantPreviewCO->setCurrentIndex(2);
1499                 break;
1500         }
1501
1502         int item = 2;
1503         switch (rc.display_graphics) {
1504                 case lyx::graphics::NoDisplay:          item = 3; break;
1505                 case lyx::graphics::ColorDisplay:       item = 2; break;
1506                 case lyx::graphics::GrayscaleDisplay:   item = 1; break;
1507                 case lyx::graphics::MonochromeDisplay:  item = 0; break;
1508                 default: break;
1509         }
1510         displayModule->displayGraphicsCO->setCurrentIndex(item);
1511
1512
1513
1514         pathsModule->workingDirED->setText(external_path(rc.document_path));
1515         pathsModule->templateDirED->setText(external_path(rc.template_path));
1516         pathsModule->backupDirED->setText(external_path(rc.backupdir_path));
1517         pathsModule->tempDirED->setText(external_path(rc.tempdir_path));
1518         pathsModule->pathPrefixED->setText(toqstr(rc.path_prefix));
1519         // FIXME: should be a checkbox only
1520         pathsModule->lyxserverDirED->setText(external_path(rc.lyxpipes));
1521
1522
1523
1524         spellcheckerModule->spellCommandCO->setCurrentIndex(0);
1525
1526         if (rc.isp_command == "ispell") {
1527                 spellcheckerModule->spellCommandCO->setCurrentIndex(0);
1528         } else if (rc.isp_command == "aspell") {
1529                 spellcheckerModule->spellCommandCO->setCurrentIndex(1);
1530         } else if (rc.isp_command == "hspell") {
1531                 spellcheckerModule->spellCommandCO->setCurrentIndex(2);
1532         }
1533
1534         if (rc.use_spell_lib) {
1535 #if defined(USE_ASPELL) || defined(USE_PSPELL)
1536                 spellcheckerModule->spellCommandCO->setCurrentIndex(3);
1537 #endif
1538         }
1539
1540         // FIXME: remove isp_use_alt_lang
1541         spellcheckerModule->altLanguageED->setText(toqstr(rc.isp_alt_lang));
1542         // FIXME: remove isp_use_esc_chars
1543         spellcheckerModule->escapeCharactersED->setText(toqstr(rc.isp_esc_chars));
1544         // FIXME: remove isp_use_pers_dict
1545         spellcheckerModule->persDictionaryED->setText(external_path(rc.isp_pers_dict));
1546         spellcheckerModule->compoundWordCB->setChecked(rc.isp_accept_compound);
1547         spellcheckerModule->inputEncodingCB->setChecked(rc.isp_use_input_encoding);
1548
1549
1550
1551
1552         printerModule->printerAdaptCB->setChecked(rc.print_adapt_output);
1553         printerModule->printerCommandED->setText(toqstr(rc.print_command));
1554         printerModule->printerNameED->setText(toqstr(rc.printer));
1555
1556         printerModule->printerPageRangeED->setText(toqstr(rc.print_pagerange_flag));
1557         printerModule->printerCopiesED->setText(toqstr(rc.print_copies_flag));
1558         printerModule->printerReverseED->setText(toqstr(rc.print_reverse_flag));
1559         printerModule->printerToPrinterED->setText(toqstr(rc.print_to_printer));
1560         printerModule->printerExtensionED->setText(toqstr(rc.print_file_extension));
1561         printerModule->printerSpoolCommandED->setText(toqstr(rc.print_spool_command));
1562         printerModule->printerPaperTypeED->setText(toqstr(rc.print_paper_flag));
1563         printerModule->printerEvenED->setText(toqstr(rc.print_evenpage_flag));
1564         printerModule->printerOddED->setText(toqstr(rc.print_oddpage_flag));
1565         printerModule->printerCollatedED->setText(toqstr(rc.print_collcopies_flag));
1566         printerModule->printerLandscapeED->setText(toqstr(rc.print_landscape_flag));
1567         printerModule->printerToFileED->setText(external_path(rc.print_to_file));
1568         printerModule->printerExtraED->setText(toqstr(rc.print_extra_options));
1569         printerModule->printerSpoolPrefixED->setText(toqstr(rc.print_spool_printerprefix));
1570         printerModule->printerPaperSizeED->setText(toqstr(rc.print_paper_dimension_flag));
1571
1572
1573
1574
1575         setComboxFont(screenfontsModule->screenRomanCO, rc.roman_font_name,
1576                         rc.roman_font_foundry);
1577         setComboxFont(screenfontsModule->screenSansCO, rc.sans_font_name,
1578                         rc.sans_font_foundry);
1579         setComboxFont(screenfontsModule->screenTypewriterCO, rc.typewriter_font_name,
1580                         rc.typewriter_font_foundry);
1581
1582         select_roman(screenfontsModule->screenRomanCO->currentText());
1583         select_sans(screenfontsModule->screenSansCO->currentText());
1584         select_typewriter(screenfontsModule->screenTypewriterCO->currentText());
1585
1586         screenfontsModule->screenZoomSB->setValue(rc.zoom);
1587         screenfontsModule->screenDpiSB->setValue(rc.dpi);
1588         screenfontsModule->screenTinyED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_TINY]));
1589         screenfontsModule->screenSmallestED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_SCRIPT]));
1590         screenfontsModule->screenSmallerED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_FOOTNOTE]));
1591         screenfontsModule->screenSmallED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_SMALL]));
1592         screenfontsModule->screenNormalED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_NORMAL]));
1593         screenfontsModule->screenLargeED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_LARGE]));
1594         screenfontsModule->screenLargerED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_LARGER]));
1595         screenfontsModule->screenLargestED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_LARGEST]));
1596         screenfontsModule->screenHugeED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_HUGE]));
1597         screenfontsModule->screenHugerED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_HUGER]));
1598
1599         updateFormats();
1600         updateConverters();
1601         updateCopiers();
1602
1603 }
1604
1605
1606 } // namespace frontend
1607 } // namespace lyx
1608
1609 #include "QPrefsDialog_moc.cpp"