]> git.lyx.org Git - lyx.git/blob - src/frontends/qt4/QPrefsDialog.C
make the formats/converters panels in the pref dialog set the correct parameters.
[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                 new QListWidgetItem(toqstr(name), convertmod->convertersLW,
514                                                         form_->converters().getNumber(ccit->From->name(), ccit->To->name()));
515         }
516         convertmod->convertersLW->sortItems(Qt::AscendingOrder);
517
518         // restore selection
519         if (!current.isEmpty()) {
520                 QList<QListWidgetItem *> const item = 
521                         convertmod->convertersLW->findItems(current, Qt::MatchExactly);
522                 if (item.size()>0)
523                         convertmod->convertersLW->setCurrentItem(item.at(0));
524         }
525         // select first element if restoring failed
526         if (convertmod->convertersLW->currentRow() == -1)
527                 convertmod->convertersLW->setCurrentRow(0);
528
529         updateConverterButtons();
530 }
531
532
533 void QPrefsDialog::switch_converter(int nr)
534 {
535         if (nr<0)
536                 return;
537
538         int const cnr = convertersModule->convertersLW->currentItem()->type();
539         Converter const & c(form_->converters().get(cnr));
540         convertersModule->converterFromCO->setCurrentIndex(form_->formats().getNumber(c.from));
541         convertersModule->converterToCO->setCurrentIndex(form_->formats().getNumber(c.to));
542         convertersModule->converterED->setText(toqstr(c.command));
543         convertersModule->converterFlagED->setText(toqstr(c.flags));
544
545         updateConverterButtons();
546 }
547
548
549 void QPrefsDialog::converter_changed()
550 {
551         updateConverterButtons();
552 }
553
554
555 void QPrefsDialog::updateConverterButtons()
556 {
557         Format const & from(form_->formats().get(
558                 convertersModule->converterFromCO->currentItem()));
559         Format const & to(form_->formats().get(
560                 convertersModule->converterToCO->currentItem()));
561         int const sel = form_->converters().getNumber(from.name(), to.name());
562         bool const known = !(sel < 0);
563         bool const valid = !(convertersModule->converterED->text().isEmpty()
564                 || from.name() == to.name());
565
566         int const cnr = convertersModule->convertersLW->currentItem()->type();
567         Converter const & c(form_->converters().get(cnr));
568         string const old_command = c.command;
569         string const old_flag = c.flags;
570         string const new_command(fromqstr(convertersModule->converterED->text()));
571         string const new_flag(fromqstr(convertersModule->converterFlagED->text()));
572
573         bool modified = ((old_command != new_command) || (old_flag != new_flag));
574
575         convertersModule->converterModifyPB->setEnabled(valid && known && modified);
576         convertersModule->converterNewPB->setEnabled(valid && !known);
577         convertersModule->converterRemovePB->setEnabled(known);
578 }
579
580
581 // FIXME: user must
582 // specify unique from/to or it doesn't appear. This is really bad UI
583 void QPrefsDialog::new_converter()
584 {
585         Format const & from(form_->formats().get(convertersModule->converterFromCO->currentItem()));
586         Format const & to(form_->formats().get(convertersModule->converterToCO->currentItem()));
587         string const command(fromqstr(convertersModule->converterED->text()));
588         string const flags(fromqstr(convertersModule->converterFlagED->text()));
589
590         Converter const * old = form_->converters().getConverter(from.name(), to.name());
591         form_->converters().add(from.name(), to.name(), command, flags);
592         if (!old) {
593                 form_->converters().updateLast(form_->formats());
594         }
595         updateConverters();
596
597         QString const name = toqstr(from.name() + " -> " + to.name());
598         QList<QListWidgetItem *> const item =
599                 convertersModule->convertersLW->findItems(name, Qt::MatchExactly);
600         if (item.size()>0)
601                 convertersModule->convertersLW->setCurrentItem(item.at(0));
602 }
603
604
605 void QPrefsDialog::modify_converter()
606 {
607         QString const current_text =
608                 convertersModule->convertersLW->currentItem()->text();
609
610         Format const & from(form_->formats().get(convertersModule->converterFromCO->currentItem()));
611         Format const & to(form_->formats().get(convertersModule->converterToCO->currentItem()));
612         string flags(fromqstr(convertersModule->converterFlagED->text()));
613         string name(fromqstr(convertersModule->converterED->text()));
614
615         Converter const * old = form_->converters().getConverter(from.name(), to.name());
616         form_->converters().add(from.name(), to.name(), name, flags);
617         if (!old) {
618                 form_->converters().updateLast(form_->formats());
619         }
620         updateConverters();
621
622         QList<QListWidgetItem *> const item =
623                 convertersModule->convertersLW->findItems(current_text, Qt::MatchExactly);
624         if (item.size()>0)
625                 convertersModule->convertersLW->setCurrentItem(item.at(0));
626 }
627
628
629 void QPrefsDialog::remove_converter()
630 {
631         Format const & from(form_->formats().get(convertersModule->converterFromCO->currentItem()));
632         Format const & to(form_->formats().get(convertersModule->converterToCO->currentItem()));
633         form_->converters().erase(from.name(), to.name());
634         updateConverters();
635 }
636
637
638 void QPrefsDialog::updateCopiers()
639 {
640         // The choice widget
641         // save current selection
642         QString current = copiersModule->copierFormatCO->currentText();
643         copiersModule->copierFormatCO->clear();
644
645         for (Formats::const_iterator it = form_->formats().begin(),
646                      end = form_->formats().end();
647              it != end; ++it) {
648                 copiersModule->copierFormatCO->insertItem(toqstr(it->prettyname()));
649         }
650
651         // The browser widget
652         copiersModule->AllCopiersLW->clear();
653
654         for (Movers::iterator it = form_->movers().begin(),
655                      end = form_->movers().end();
656              it != end; ++it) {
657                 std::string const & command = it->second.command();
658                 if (command.empty())
659                         continue;
660                 QString const pretty = toqstr(form_->formats().prettyName(it->first));
661                 copiersModule->AllCopiersLW->addItem(pretty);
662         }
663         copiersModule->AllCopiersLW->sortItems(Qt::AscendingOrder);
664
665         // restore selection
666         if (!current.isEmpty()) {
667                 QList<QListWidgetItem *> item = 
668                         copiersModule->AllCopiersLW->findItems(current, Qt::MatchExactly);
669                 if (item.size()>0)
670                         copiersModule->AllCopiersLW->setCurrentItem(item.at(0));
671         }
672         // select first element if restoring failed
673         if (copiersModule->AllCopiersLW->currentRow() == -1)
674                 copiersModule->AllCopiersLW->setCurrentRow(0);
675 }
676
677
678 namespace {
679
680 class SamePrettyName {
681 public:
682         SamePrettyName(string const & n) : pretty_name_(n) {}
683
684         bool operator()(::Format const & fmt) const {
685                 return fmt.prettyname() == pretty_name_;
686         }
687
688 private:
689         string const pretty_name_;
690 };
691
692
693 Format const * getFormat(std::string const & prettyname)
694 {
695         Formats::const_iterator it = ::formats.begin();
696         Formats::const_iterator const end = ::formats.end();
697         it = std::find_if(it, end, SamePrettyName(prettyname));
698         return it == end ? 0 : &*it;
699 }
700
701 } // namespace anon
702
703
704 void QPrefsDialog::switch_copierLB(int row)
705 {
706         if (row<0)
707                 return;
708
709         std::string const browser_text =
710                 fromqstr(copiersModule->AllCopiersLW->currentItem()->text());
711         Format const * fmt = getFormat(browser_text);
712         if (fmt == 0)
713                 return;
714
715         QString const gui_name = toqstr(fmt->prettyname());
716         QString const command = toqstr(form_->movers().command(fmt->name()));
717
718         copiersModule->copierED->clear();
719         int const combo_size = copiersModule->copierFormatCO->count();
720         for (int i = 0; i < combo_size; ++i) {
721                 QString const text = copiersModule->copierFormatCO->text(i);
722                 if (text == gui_name) {
723                         copiersModule->copierFormatCO->setCurrentIndex(i);
724                         copiersModule->copierED->setText(command);
725                         break;
726                 }
727         }
728         updateCopierButtons();
729 }
730
731
732 void QPrefsDialog::switch_copierCO(int row)
733 {
734         if (row<0)
735                 return;
736
737         std::string const combo_text =
738                 fromqstr(copiersModule->copierFormatCO->currentText());
739         Format const * fmt = getFormat(combo_text);
740         if (fmt == 0)
741                 return;
742
743         QString const command = toqstr(form_->movers().command(fmt->name()));
744         copiersModule->copierED->setText(command);
745
746         QListWidgetItem * const index = copiersModule->AllCopiersLW->currentItem();
747         if (index >= 0)
748                 copiersModule->AllCopiersLW->setItemSelected(index, false);
749
750         QString const gui_name = toqstr(fmt->prettyname());
751         int const browser_size = copiersModule->AllCopiersLW->count();
752         for (int i = 0; i < browser_size; ++i) {
753                 QString const text = copiersModule->AllCopiersLW->item(i)->text();
754                 if (text == gui_name) {
755                         QListWidgetItem * item = copiersModule->AllCopiersLW->item(i);
756                         copiersModule->AllCopiersLW->setItemSelected(item, true);
757                         break;
758                 }
759         }
760 }
761
762
763 void QPrefsDialog::copiers_changed()
764 {
765         updateCopierButtons();
766 }
767
768
769 void QPrefsDialog::updateCopierButtons()
770 {
771         QString selected = copiersModule->copierFormatCO->currentText();
772
773         bool known = false;
774         for (unsigned int i = 0; i != copiersModule->AllCopiersLW->count(); i++) {
775                 if (copiersModule->AllCopiersLW->item(i)->text() == selected)
776                         known = true;
777         }
778
779         bool const valid = !copiersModule->copierED->text().isEmpty();
780
781         Format const * fmt = getFormat(fromqstr(selected));
782         string const old_command = form_->movers().command(fmt->name());
783         string const new_command(fromqstr(copiersModule->copierED->text()));
784
785         bool modified = (old_command != new_command);
786
787         copiersModule->copierModifyPB->setEnabled(valid && known && modified);
788         copiersModule->copierNewPB->setEnabled(valid && !known);
789         copiersModule->copierRemovePB->setEnabled(known);
790 }
791
792
793 void QPrefsDialog::new_copier()
794 {
795         std::string const combo_text =
796                 fromqstr(copiersModule->copierFormatCO->currentText());
797         Format const * fmt = getFormat(combo_text);
798         if (fmt == 0)
799                 return;
800
801         string const command = fromqstr(copiersModule->copierED->text());
802         if (command.empty())
803                 return;
804
805         form_->movers().set(fmt->name(), command);
806
807         updateCopiers();
808         int const last = copiersModule->AllCopiersLW->count() - 1;
809         copiersModule->AllCopiersLW->setCurrentRow(last);
810
811         updateCopierButtons();
812 }
813
814
815 void QPrefsDialog::modify_copier()
816 {
817         std::string const combo_text =
818                 fromqstr(copiersModule->copierFormatCO->currentText());
819         Format const * fmt = getFormat(combo_text);
820         if (fmt == 0)
821                 return;
822
823         string const command = fromqstr(copiersModule->copierED->text());
824         form_->movers().set(fmt->name(), command);
825
826         updateCopiers();
827         updateCopierButtons();
828 }
829
830
831 void QPrefsDialog::remove_copier()
832 {
833         std::string const combo_text =
834                 fromqstr(copiersModule->copierFormatCO->currentText());
835         Format const * fmt = getFormat(combo_text);
836         if (fmt == 0)
837                 return;
838
839         string const & fmt_name = fmt->name();
840         form_->movers().set(fmt_name, string());
841
842         updateCopiers();
843         updateCopierButtons();
844 }
845
846
847 void QPrefsDialog::updateFormats()
848 {
849         Ui::QPrefFileformatsUi * formatmod(fileformatsModule);
850
851         // save current selection
852         QString current = formatmod->guiNameED->text();
853
854         formatmod->formatsLW->clear();
855
856         Formats::const_iterator cit = form_->formats().begin();
857         Formats::const_iterator end = form_->formats().end();
858         for (; cit != end; ++cit) {
859                 new QListWidgetItem(toqstr(cit->prettyname()),
860                                                         formatmod->formatsLW,
861                                                         form_->formats().getNumber(cit->name()) );
862         }
863         formatmod->formatsLW->sortItems(Qt::AscendingOrder);
864
865         // restore selection
866         if (!current.isEmpty()) {
867                 QList<QListWidgetItem *>  item = formatmod->formatsLW->findItems(current, Qt::MatchExactly);
868                 if (item.size()>0)
869                         formatmod->formatsLW->setCurrentItem(item.at(0));
870         }
871         // select first element if restoring failed
872         if (formatmod->formatsLW->currentRow() == -1)
873                 formatmod->formatsLW->setCurrentRow(0);
874 }
875
876
877 void QPrefsDialog::switch_format(int nr)
878 {
879         if (nr<0)
880                 return;
881
882         int const ftype = fileformatsModule->formatsLW->item(nr)->type();
883         Format const f(form_->formats().get(ftype));
884
885         fileformatsModule->formatED->setText(toqstr(f.name()));
886         fileformatsModule->guiNameED->setText(toqstr(f.prettyname()));
887         fileformatsModule->extensionED->setText(toqstr(f.extension()));
888         fileformatsModule->shortcutED->setText(toqstr(f.shortcut()));
889         fileformatsModule->viewerED->setText(toqstr(f.viewer()));
890         fileformatsModule->editorED->setText(toqstr(f.editor()));
891         fileformatsModule->formatRemovePB->setEnabled(
892                 !form_->converters().formatIsUsed(f.name()));
893
894         updateFormatsButtons();
895 }
896
897
898 void QPrefsDialog::fileformat_changed()
899 {
900         updateFormatsButtons();
901 }
902
903
904 void QPrefsDialog::updateFormatsButtons()
905 {
906         QString const format = fileformatsModule->formatED->text();
907         QString const gui_name = fileformatsModule->guiNameED->text();
908         int const sel = form_->formats().getNumber(fromqstr(format));
909         bool gui_name_known = false;
910         int where = sel;
911         for (unsigned int i = 0; i != fileformatsModule->formatsLW->count(); i++) {
912                 if (fileformatsModule->formatsLW->item(i)->text() == gui_name) {
913                         gui_name_known = true;
914                         where = fileformatsModule->formatsLW->item(i)->type();
915                 }
916         }
917
918         // assure that a gui name cannot be chosen twice
919         bool const known_otherwise = gui_name_known && (where != sel);
920
921         bool const known = !(sel < 0);
922         bool const valid = (!fileformatsModule->formatED->text().isEmpty()
923                 && !fileformatsModule->guiNameED->text().isEmpty());
924
925         int const ftype = fileformatsModule->formatsLW->currentItem()->type();
926         Format const & f(form_->formats().get(ftype));
927         string const old_pretty(f.prettyname());
928         string const old_shortcut(f.shortcut());
929         string const old_extension(f.extension());
930         string const old_viewer(f.viewer());
931         string const old_editor(f.editor());
932
933         string const new_pretty(fromqstr(gui_name));
934         string const new_shortcut(fromqstr(fileformatsModule->shortcutED->text()));
935         string const new_extension(fromqstr(fileformatsModule->extensionED->text()));
936         string const new_viewer(fromqstr(fileformatsModule->viewerED->text()));
937         string const new_editor(fromqstr(fileformatsModule->editorED->text()));
938
939         bool modified = ((old_pretty != new_pretty) || (old_shortcut != new_shortcut)
940                 || (old_extension != new_extension) || (old_viewer != new_viewer)
941                 || (old_editor != new_editor));
942
943         fileformatsModule->formatModifyPB->setEnabled(
944                 valid && known && modified && !known_otherwise);
945         fileformatsModule->formatNewPB->setEnabled(valid && !known && !gui_name_known);
946         fileformatsModule->formatRemovePB->setEnabled(known);
947 }
948
949
950 void QPrefsDialog::new_format()
951 {
952         string const name = fromqstr(fileformatsModule->formatED->text());
953         string const prettyname = fromqstr(fileformatsModule->guiNameED->text());
954         string const extension = fromqstr(fileformatsModule->extensionED->text());
955         string const shortcut = fromqstr(fileformatsModule->shortcutED->text());
956         string const viewer = fromqstr(fileformatsModule->viewerED->text());
957         string const editor = fromqstr(fileformatsModule->editorED->text());
958
959         form_->formats().add(name, extension, prettyname, shortcut, viewer, editor);
960         form_->formats().sort();
961         updateFormats();
962
963         QList<QListWidgetItem *>  const item =
964                 fileformatsModule->formatsLW->findItems(toqstr(prettyname), Qt::MatchExactly);
965         if (item.size()>0)
966                 fileformatsModule->formatsLW->setCurrentItem(item.at(0));
967
968         form_->converters().update(form_->formats());
969
970         updateConverters();
971         updateFormatsButtons();
972 }
973
974
975 void QPrefsDialog::modify_format()
976 {
977         int const current_item = fileformatsModule->formatsLW->currentItem()->type();
978         QString const current_text =
979                 fileformatsModule->formatsLW->currentItem()->text();
980
981         Format const & oldformat(form_->formats().get(current_item));
982         string const oldpretty(oldformat.prettyname());
983         string const name(fromqstr(fileformatsModule->formatED->text()));
984         form_->formats().erase(oldformat.name());
985
986         string const prettyname = fromqstr(fileformatsModule->guiNameED->text());
987         string const extension = fromqstr(fileformatsModule->extensionED->text());
988         string const shortcut = fromqstr(fileformatsModule->shortcutED->text());
989         string const viewer = fromqstr(fileformatsModule->viewerED->text());
990         string const editor = fromqstr(fileformatsModule->editorED->text());
991
992         form_->formats().add(name, extension, prettyname, shortcut, viewer, editor);
993         form_->formats().sort();
994
995         fileformatsModule->formatsLW->setUpdatesEnabled(false);
996         updateFormats();
997         fileformatsModule->formatsLW->setUpdatesEnabled(true);
998         fileformatsModule->formatsLW->update();
999
1000         updateConverters();
1001         updateFormatsButtons();
1002
1003         QList<QListWidgetItem *>  const item =
1004                 fileformatsModule->formatsLW->findItems(current_text, Qt::MatchExactly);
1005         if (item.size()>0)
1006                 fileformatsModule->formatsLW->setCurrentItem(item.at(0));
1007 }
1008
1009
1010 void QPrefsDialog::remove_format()
1011 {
1012         int const nr = fileformatsModule->formatsLW->currentItem()->type();
1013         if (nr < 0)
1014                 return;
1015         string const current_text = form_->formats().get(nr).name();
1016         if (form_->converters().formatIsUsed(current_text)) {
1017                 Alert::error(_("Format in use"),
1018                                 _("Cannot remove a Format used by a Converter. "
1019                                       "Remove the converter first."));
1020                 return;
1021         }
1022         form_->formats().erase(current_text);
1023         updateFormats();
1024         form_->converters().update(form_->formats());
1025
1026         updateConverters();
1027         updateFormatsButtons();
1028 }
1029
1030
1031 void QPrefsDialog::change_color()
1032 {
1033         int const row = colorsModule->lyxObjectsLW->currentRow();
1034         QString color = newcolors_[row];
1035         QColor c(QColorDialog::getColor(QColor(color), 
1036                 qApp->focusWidget() ? qApp->focusWidget() : qApp->mainWidget()));
1037
1038         if (c.name()!=color) {
1039                 newcolors_[row] = c.name();
1040                 QPixmap coloritem(32, 32);
1041                 coloritem.fill(c);
1042                 colorsModule->lyxObjectsLW->currentItem()->setIcon(QIcon(coloritem));
1043                 change_adaptor();
1044         }
1045 }
1046
1047
1048 void QPrefsDialog::select_ui()
1049 {
1050         string file(form_->controller().browseUI(fromqstr(uiModule->uiFileED->text())));
1051         if (!file.empty())
1052                 uiModule->uiFileED->setText(toqstr(file));
1053 }
1054
1055
1056 void QPrefsDialog::select_bind()
1057 {
1058         string file(form_->controller().browsebind(fromqstr(uiModule->bindFileED->text())));
1059         if (!file.empty())
1060                 uiModule->bindFileED->setText(toqstr(file));
1061 }
1062
1063
1064 void QPrefsDialog::select_keymap1()
1065 {
1066         string file(form_->controller().browsekbmap(fromqstr(keyboardModule->firstKeymapED->text())));
1067         if (!file.empty())
1068                 keyboardModule->firstKeymapED->setText(toqstr(file));
1069 }
1070
1071
1072 void QPrefsDialog::select_keymap2()
1073 {
1074         string file(form_->controller().browsekbmap(fromqstr(keyboardModule->secondKeymapED->text())));
1075         if (!file.empty())
1076                 keyboardModule->secondKeymapED->setText(toqstr(file));
1077 }
1078
1079
1080 void QPrefsDialog::select_dict()
1081 {
1082         string file(form_->controller().browsedict(fromqstr(spellcheckerModule->persDictionaryED->text())));
1083         if (!file.empty())
1084                 spellcheckerModule->persDictionaryED->setText(toqstr(file));
1085 }
1086
1087
1088 // NB: the _() is OK here because it gets passed back and we toqstr() them
1089
1090 void QPrefsDialog::select_templatedir()
1091 {
1092         string file(form_->controller().browsedir(fromqstr(pathsModule->templateDirED->text()), _("Select a document templates directory")));
1093         if (!file.empty())
1094                 pathsModule->templateDirED->setText(toqstr(file));
1095 }
1096
1097
1098 void QPrefsDialog::select_tempdir()
1099 {
1100         string file(form_->controller().browsedir(fromqstr(pathsModule->tempDirED->text()), _("Select a temporary directory")));
1101         if (!file.empty())
1102                 pathsModule->tempDirED->setText(toqstr(file));
1103 }
1104
1105
1106 void QPrefsDialog::select_backupdir()
1107 {
1108         string file(form_->controller().browsedir(fromqstr(pathsModule->backupDirED->text()), _("Select a backups directory")));
1109         if (!file.empty())
1110                 pathsModule->backupDirED->setText(toqstr(file));
1111 }
1112
1113
1114 void QPrefsDialog::select_workingdir()
1115 {
1116         string file(form_->controller().browsedir(fromqstr(pathsModule->workingDirED->text()), _("Select a document directory")));
1117         if (!file.empty())
1118                 pathsModule->workingDirED->setText(toqstr(file));
1119 }
1120
1121
1122 void QPrefsDialog::select_lyxpipe()
1123 {
1124         string file(form_->controller().browse(fromqstr(pathsModule->lyxserverDirED->text()), _("Give a filename for the LyX server pipe")));
1125         if (!file.empty())
1126                 pathsModule->lyxserverDirED->setText(toqstr(file));
1127 }
1128
1129
1130 void QPrefsDialog::select_roman(const QString& name)
1131 {
1132         screenfontsModule->screenRomanFE->set(QFont(name), name);
1133 }
1134
1135
1136 void QPrefsDialog::select_sans(const QString& name)
1137 {
1138         screenfontsModule->screenSansFE->set(QFont(name), name);
1139 }
1140
1141
1142 void QPrefsDialog::select_typewriter(const QString& name)
1143 {
1144         screenfontsModule->screenTypewriterFE->set(QFont(name), name);
1145 }
1146
1147 namespace {
1148
1149 string const internal_path(QString const & input)
1150 {
1151         return lyx::support::os::internal_path(fromqstr(input));
1152 }
1153
1154 }
1155
1156 void QPrefsDialog::apply(LyXRC & rc) const
1157 {
1158         // FIXME: remove rtl_support bool
1159         rc.rtl_support = languageModule->rtlCB->isChecked();
1160         rc.mark_foreign_language = languageModule->markForeignCB->isChecked();
1161         rc.language_auto_begin = languageModule->autoBeginCB->isChecked();
1162         rc.language_auto_end = languageModule->autoEndCB->isChecked();
1163         rc.language_use_babel = languageModule->useBabelCB->isChecked();
1164         rc.language_global_options = languageModule->globalCB->isChecked();
1165         rc.language_package = fromqstr(languageModule->languagePackageED->text());
1166         rc.language_command_begin = fromqstr(languageModule->startCommandED->text());
1167         rc.language_command_end = fromqstr(languageModule->endCommandED->text());
1168         rc.default_language = lang_[languageModule->defaultLanguageCO->currentItem()];
1169
1170
1171         rc.ui_file = internal_path(uiModule->uiFileED->text());
1172         rc.bind_file = internal_path(uiModule->bindFileED->text());
1173         rc.use_lastfilepos = uiModule->restoreCursorCB->isChecked();
1174         rc.load_session = uiModule->loadSessionCB->isChecked();
1175         rc.cursor_follows_scrollbar = uiModule->cursorFollowsCB->isChecked();
1176         rc.autosave = uiModule->autoSaveSB->value() * 60;
1177         rc.make_backup = uiModule->autoSaveCB->isChecked();
1178         rc.num_lastfiles = uiModule->lastfilesSB->value();
1179
1180
1181         // FIXME: can derive CB from the two EDs
1182         rc.use_kbmap = keyboardModule->keymapCB->isChecked();
1183         rc.primary_kbmap = internal_path(keyboardModule->firstKeymapED->text());
1184         rc.secondary_kbmap = internal_path(keyboardModule->secondKeymapED->text());
1185
1186
1187         rc.ascii_linelen = asciiModule->asciiLinelengthSB->value();
1188         rc.ascii_roff_command = fromqstr(asciiModule->asciiRoffED->text());
1189
1190
1191         rc.date_insert_format = fromqstr(dateModule->DateED->text());
1192
1193
1194 #if defined(__CYGWIN__) || defined(__CYGWIN32__)
1195         rc.cygwin_path_fix = cygwinpathModule->pathCB->isChecked();
1196 #endif
1197
1198
1199         rc.fontenc = fromqstr(latexModule->latexEncodingED->text());
1200         rc.chktex_command = fromqstr(latexModule->latexChecktexED->text());
1201         rc.bibtex_command = fromqstr(latexModule->latexBibtexED->text());
1202         rc.index_command = fromqstr(latexModule->latexIndexED->text());
1203         rc.auto_reset_options = latexModule->latexAutoresetCB->isChecked();
1204         rc.view_dvi_paper_option = fromqstr(latexModule->latexDviPaperED->text());
1205         rc.default_papersize =
1206                 form_->controller().toPaperSize(latexModule->latexPaperSizeCO->currentItem());
1207
1208
1209         switch (displayModule->instantPreviewCO->currentItem()) {
1210         case 0: rc.preview = LyXRC::PREVIEW_OFF; break;
1211         case 1: rc.preview = LyXRC::PREVIEW_NO_MATH; break;
1212         case 2: rc.preview = LyXRC::PREVIEW_ON; break;
1213         }
1214
1215         lyx::graphics::DisplayType dtype;
1216         switch (displayModule->displayGraphicsCO->currentItem()) {
1217         case 3: dtype = lyx::graphics::NoDisplay; break;
1218         case 2: dtype = lyx::graphics::ColorDisplay; break;
1219         case 1: dtype = lyx::graphics::GrayscaleDisplay;        break;
1220         case 0: dtype = lyx::graphics::MonochromeDisplay; break;
1221         default: dtype = lyx::graphics::GrayscaleDisplay;
1222         }
1223         rc.display_graphics = dtype;
1224
1225 #ifdef WITH_WARNINGS
1226 #warning FIXME!! The graphics cache no longer has a changeDisplay method.
1227 #endif
1228 #if 0
1229         if (old_value != rc.display_graphics) {
1230                 lyx::graphics::GCache & gc = lyx::graphics::GCache::get();
1231                 gc.changeDisplay();
1232         }
1233 #endif
1234
1235
1236         rc.document_path = internal_path(pathsModule->workingDirED->text());
1237         rc.template_path = internal_path(pathsModule->templateDirED->text());
1238         rc.backupdir_path = internal_path(pathsModule->backupDirED->text());
1239         rc.tempdir_path = internal_path(pathsModule->tempDirED->text());
1240         rc.path_prefix = fromqstr(pathsModule->pathPrefixED->text());
1241         // FIXME: should be a checkbox only
1242         rc.lyxpipes = internal_path(pathsModule->lyxserverDirED->text());
1243
1244
1245         switch (spellcheckerModule->spellCommandCO->currentItem()) {
1246                 case 0:
1247                 case 1:
1248                 case 2:
1249                         rc.use_spell_lib = false;
1250                         rc.isp_command = fromqstr(spellcheckerModule->spellCommandCO->currentText());
1251                         break;
1252                 case 3:
1253                         rc.use_spell_lib = true;
1254                         break;
1255         }
1256
1257         // FIXME: remove isp_use_alt_lang
1258         rc.isp_alt_lang = fromqstr(spellcheckerModule->altLanguageED->text());
1259         rc.isp_use_alt_lang = !rc.isp_alt_lang.empty();
1260         // FIXME: remove isp_use_esc_chars
1261         rc.isp_esc_chars = fromqstr(spellcheckerModule->escapeCharactersED->text());
1262         rc.isp_use_esc_chars = !rc.isp_esc_chars.empty();
1263         // FIXME: remove isp_use_pers_dict
1264         rc.isp_pers_dict = internal_path(spellcheckerModule->persDictionaryED->text());
1265         rc.isp_use_pers_dict = !rc.isp_pers_dict.empty();
1266         rc.isp_accept_compound = spellcheckerModule->compoundWordCB->isChecked();
1267         rc.isp_use_input_encoding = spellcheckerModule->inputEncodingCB->isChecked();
1268
1269
1270
1271         rc.print_adapt_output = printerModule->printerAdaptCB->isChecked();
1272         rc.print_command = fromqstr(printerModule->printerCommandED->text());
1273         rc.printer = fromqstr(printerModule->printerNameED->text());
1274
1275         rc.print_pagerange_flag = fromqstr(printerModule->printerPageRangeED->text());
1276         rc.print_copies_flag = fromqstr(printerModule->printerCopiesED->text());
1277         rc.print_reverse_flag = fromqstr(printerModule->printerReverseED->text());
1278         rc.print_to_printer = fromqstr(printerModule->printerToPrinterED->text());
1279         rc.print_file_extension = fromqstr(printerModule->printerExtensionED->text());
1280         rc.print_spool_command = fromqstr(printerModule->printerSpoolCommandED->text());
1281         rc.print_paper_flag = fromqstr(printerModule->printerPaperTypeED->text());
1282         rc.print_evenpage_flag = fromqstr(printerModule->printerEvenED->text());
1283         rc.print_oddpage_flag = fromqstr(printerModule->printerOddED->text());
1284         rc.print_collcopies_flag = fromqstr(printerModule->printerCollatedED->text());
1285         rc.print_landscape_flag = fromqstr(printerModule->printerLandscapeED->text());
1286         rc.print_to_file = internal_path(printerModule->printerToFileED->text());
1287         rc.print_extra_options = fromqstr(printerModule->printerExtraED->text());
1288         rc.print_spool_printerprefix = fromqstr(printerModule->printerSpoolPrefixED->text());
1289         rc.print_paper_dimension_flag = fromqstr(printerModule->printerPaperSizeED->text());
1290
1291
1292
1293         rc.user_name = fromqstr(identityModule->nameED->text());
1294         rc.user_email = fromqstr(identityModule->emailED->text());
1295
1296
1297
1298         LyXRC const oldrc(rc);
1299
1300         boost::tie(rc.roman_font_name, rc.roman_font_foundry)
1301                 = parseFontName(fromqstr(screenfontsModule->screenRomanCO->currentText()));
1302         boost::tie(rc.sans_font_name, rc.sans_font_foundry) =
1303                 parseFontName(fromqstr(screenfontsModule->screenSansCO->currentText()));
1304         boost::tie(rc.typewriter_font_name, rc.typewriter_font_foundry) =
1305                 parseFontName(fromqstr(screenfontsModule->screenTypewriterCO->currentText()));
1306
1307         rc.zoom = screenfontsModule->screenZoomSB->value();
1308         rc.dpi = screenfontsModule->screenDpiSB->value();
1309         rc.font_sizes[LyXFont::SIZE_TINY] = fromqstr(screenfontsModule->screenTinyED->text());
1310         rc.font_sizes[LyXFont::SIZE_SCRIPT] = fromqstr(screenfontsModule->screenSmallestED->text());
1311         rc.font_sizes[LyXFont::SIZE_FOOTNOTE] = fromqstr(screenfontsModule->screenSmallerED->text());
1312         rc.font_sizes[LyXFont::SIZE_SMALL] = fromqstr(screenfontsModule->screenSmallED->text());
1313         rc.font_sizes[LyXFont::SIZE_NORMAL] = fromqstr(screenfontsModule->screenNormalED->text());
1314         rc.font_sizes[LyXFont::SIZE_LARGE] = fromqstr(screenfontsModule->screenLargeED->text());
1315         rc.font_sizes[LyXFont::SIZE_LARGER] = fromqstr(screenfontsModule->screenLargerED->text());
1316         rc.font_sizes[LyXFont::SIZE_LARGEST] = fromqstr(screenfontsModule->screenLargestED->text());
1317         rc.font_sizes[LyXFont::SIZE_HUGE] = fromqstr(screenfontsModule->screenHugeED->text());
1318         rc.font_sizes[LyXFont::SIZE_HUGER] = fromqstr(screenfontsModule->screenHugerED->text());
1319
1320         if (rc.font_sizes != oldrc.font_sizes
1321                 || rc.roman_font_name != oldrc.roman_font_name
1322                 || rc.sans_font_name != oldrc.sans_font_name
1323                 || rc.typewriter_font_name != oldrc.typewriter_font_name
1324                 || rc.zoom != oldrc.zoom || rc.dpi != oldrc.dpi) {
1325                 form_->controller().updateScreenFonts();
1326         }
1327
1328
1329         for (int i = 0; i < lcolors_.size(); ++i) {
1330                 if (prefcolors_[i]!=newcolors_[i])
1331                         form_->controller().setColor(lcolors_[i], fromqstr(newcolors_[i]));
1332         }
1333 }
1334
1335 // FIXME: move to helper_funcs.h
1336 namespace {
1337
1338 template<class A>
1339 typename std::vector<A>::size_type
1340 findPos(std::vector<A> const & vec, A const & val)
1341 {
1342         typedef typename std::vector<A>::const_iterator Cit;
1343
1344         Cit it = std::find(vec.begin(), vec.end(), val);
1345         if (it == vec.end())
1346                 return 0;
1347         return distance(vec.begin(), it);
1348 }
1349
1350 void setComboxFont(QComboBox * cb, string const & family, string const & foundry)
1351 {
1352         string const name = makeFontName(family, foundry);
1353         for (int i = 0; i < cb->count(); ++i) {
1354                 if (fromqstr(cb->text(i)) == name) {
1355                         cb->setCurrentItem(i);
1356                         return;
1357                 }
1358         }
1359
1360         // Try matching without foundry name
1361
1362         // We count in reverse in order to prefer the Xft foundry
1363         for (int i = cb->count() - 1; i >= 0; --i) {
1364                 pair<string, string> tmp = parseFontName(fromqstr(cb->text(i)));
1365                 if (compare_no_case(tmp.first, family) == 0) {
1366                         cb->setCurrentItem(i);
1367                         return;
1368                 }
1369         }
1370
1371         // family alone can contain e.g. "Helvetica [Adobe]"
1372         pair<string, string> tmpfam = parseFontName(family);
1373
1374         // We count in reverse in order to prefer the Xft foundry
1375         for (int i = cb->count() - 1; i >= 0; --i) {
1376                 pair<string, string> tmp = parseFontName(fromqstr(cb->text(i)));
1377                 if (compare_no_case(tmp.first, tmpfam.first) == 0) {
1378                         cb->setCurrentItem(i);
1379                         return;
1380                 }
1381         }
1382
1383         // Bleh, default fonts, and the names couldn't be found. Hack
1384         // for bug 1063. Qt makes baby Jesus cry.
1385
1386         QFont font;
1387
1388         if (family == lyx_gui::roman_font_name()) {
1389                 font.setStyleHint(QFont::Serif);
1390                 font.setFamily(family.c_str());
1391         } else if (family == lyx_gui::sans_font_name()) {
1392                 font.setStyleHint(QFont::SansSerif);
1393                 font.setFamily(family.c_str());
1394         } else if (family == lyx_gui::typewriter_font_name()) {
1395                 font.setStyleHint(QFont::TypeWriter);
1396                 font.setFamily(family.c_str());
1397         } else {
1398                 lyxerr << "FAILED to find the default font: '"
1399                        << foundry << "', '" << family << '\''<< endl;
1400                 return;
1401         }
1402
1403         QFontInfo info(font);
1404         pair<string, string> tmp = parseFontName(fromqstr(info.family()));
1405         string const & default_font_name = tmp.first;
1406         lyxerr << "Apparent font is " << default_font_name << endl;
1407
1408         for (int i = 0; i < cb->count(); ++i) {
1409                 lyxerr << "Looking at " << fromqstr(cb->text(i)) << endl;
1410                 if (compare_no_case(fromqstr(cb->text(i)),
1411                                     default_font_name) == 0) {
1412                         cb->setCurrentItem(i);
1413                         return;
1414                 }
1415         }
1416
1417         lyxerr << "FAILED to find the font: '"
1418                << foundry << "', '" << family << '\'' <<endl;
1419 }
1420
1421 } // end namespace anon
1422
1423 namespace {
1424
1425 QString const external_path(string const & input)
1426 {
1427         return toqstr(lyx::support::os::external_path(input));
1428 }
1429
1430 }
1431
1432 void QPrefsDialog::update(LyXRC const & rc)
1433 {
1434         // FIXME: remove rtl_support bool
1435         languageModule->rtlCB->setChecked(rc.rtl_support);
1436         languageModule->markForeignCB->setChecked(rc.mark_foreign_language);
1437         languageModule->autoBeginCB->setChecked(rc.language_auto_begin);
1438         languageModule->autoEndCB->setChecked(rc.language_auto_end);
1439         languageModule->useBabelCB->setChecked(rc.language_use_babel);
1440         languageModule->globalCB->setChecked(rc.language_global_options);
1441         languageModule->languagePackageED->setText(toqstr(rc.language_package));
1442         languageModule->startCommandED->setText(toqstr(rc.language_command_begin));
1443         languageModule->endCommandED->setText(toqstr(rc.language_command_end));
1444
1445         int const pos = int(findPos(lang_, rc.default_language));
1446         languageModule->defaultLanguageCO->setCurrentIndex(pos);
1447
1448         uiModule->uiFileED->setText(external_path(rc.ui_file));
1449         uiModule->bindFileED->setText(external_path(rc.bind_file));
1450         uiModule->restoreCursorCB->setChecked(rc.use_lastfilepos);
1451         uiModule->loadSessionCB->setChecked(rc.load_session);
1452         uiModule->cursorFollowsCB->setChecked(rc.cursor_follows_scrollbar);
1453         // convert to minutes
1454         int mins(rc.autosave / 60);
1455         if (rc.autosave && !mins)
1456                 mins = 1;
1457         uiModule->autoSaveSB->setValue(mins);
1458         uiModule->autoSaveCB->setChecked(rc.make_backup);
1459         uiModule->lastfilesSB->setValue(rc.num_lastfiles);
1460
1461
1462         identityModule->nameED->setText(toqstr(rc.user_name));
1463         identityModule->emailED->setText(toqstr(rc.user_email));
1464
1465
1466         // FIXME: can derive CB from the two EDs
1467         keyboardModule->keymapCB->setChecked(rc.use_kbmap);
1468         // no idea why we need these. Fscking Qt.
1469         keyboardModule->firstKeymapED->setEnabled(rc.use_kbmap);
1470         keyboardModule->firstKeymapPB->setEnabled(rc.use_kbmap);
1471         keyboardModule->firstKeymapLA->setEnabled(rc.use_kbmap);
1472         keyboardModule->secondKeymapED->setEnabled(rc.use_kbmap);
1473         keyboardModule->secondKeymapPB->setEnabled(rc.use_kbmap);
1474         keyboardModule->secondKeymapLA->setEnabled(rc.use_kbmap);
1475         keyboardModule->firstKeymapED->setText(external_path(rc.primary_kbmap));
1476         keyboardModule->secondKeymapED->setText(external_path(rc.secondary_kbmap));
1477
1478
1479
1480         asciiModule->asciiLinelengthSB->setValue(rc.ascii_linelen);
1481         asciiModule->asciiRoffED->setText(toqstr(rc.ascii_roff_command));
1482
1483
1484
1485         dateModule->DateED->setText(toqstr(rc.date_insert_format));
1486
1487
1488
1489 #if defined(__CYGWIN__) || defined(__CYGWIN32__)
1490         cygwinpathModule->pathCB->setChecked(rc.cygwin_path_fix);
1491 #endif
1492
1493
1494
1495         latexModule->latexEncodingED->setText(toqstr(rc.fontenc));
1496         latexModule->latexChecktexED->setText(toqstr(rc.chktex_command));
1497         latexModule->latexBibtexED->setText(toqstr(rc.bibtex_command));
1498         latexModule->latexIndexED->setText(toqstr(rc.index_command));
1499         latexModule->latexAutoresetCB->setChecked(rc.auto_reset_options);
1500         latexModule->latexDviPaperED->setText(toqstr(rc.view_dvi_paper_option));
1501         latexModule->latexPaperSizeCO->setCurrentIndex(
1502                 form_->controller().fromPaperSize(rc.default_papersize));
1503
1504
1505
1506         switch (rc.preview) {
1507         case LyXRC::PREVIEW_OFF:
1508                 displayModule->instantPreviewCO->setCurrentIndex(0);
1509                 break;
1510         case LyXRC::PREVIEW_NO_MATH :
1511                 displayModule->instantPreviewCO->setCurrentIndex(1);
1512                 break;
1513         case LyXRC::PREVIEW_ON :
1514                 displayModule->instantPreviewCO->setCurrentIndex(2);
1515                 break;
1516         }
1517
1518         int item = 2;
1519         switch (rc.display_graphics) {
1520                 case lyx::graphics::NoDisplay:          item = 3; break;
1521                 case lyx::graphics::ColorDisplay:       item = 2; break;
1522                 case lyx::graphics::GrayscaleDisplay:   item = 1; break;
1523                 case lyx::graphics::MonochromeDisplay:  item = 0; break;
1524                 default: break;
1525         }
1526         displayModule->displayGraphicsCO->setCurrentIndex(item);
1527
1528
1529
1530         pathsModule->workingDirED->setText(external_path(rc.document_path));
1531         pathsModule->templateDirED->setText(external_path(rc.template_path));
1532         pathsModule->backupDirED->setText(external_path(rc.backupdir_path));
1533         pathsModule->tempDirED->setText(external_path(rc.tempdir_path));
1534         pathsModule->pathPrefixED->setText(toqstr(rc.path_prefix));
1535         // FIXME: should be a checkbox only
1536         pathsModule->lyxserverDirED->setText(external_path(rc.lyxpipes));
1537
1538
1539
1540         spellcheckerModule->spellCommandCO->setCurrentIndex(0);
1541
1542         if (rc.isp_command == "ispell") {
1543                 spellcheckerModule->spellCommandCO->setCurrentIndex(0);
1544         } else if (rc.isp_command == "aspell") {
1545                 spellcheckerModule->spellCommandCO->setCurrentIndex(1);
1546         } else if (rc.isp_command == "hspell") {
1547                 spellcheckerModule->spellCommandCO->setCurrentIndex(2);
1548         }
1549
1550         if (rc.use_spell_lib) {
1551 #if defined(USE_ASPELL) || defined(USE_PSPELL)
1552                 spellcheckerModule->spellCommandCO->setCurrentIndex(3);
1553 #endif
1554         }
1555
1556         // FIXME: remove isp_use_alt_lang
1557         spellcheckerModule->altLanguageED->setText(toqstr(rc.isp_alt_lang));
1558         // FIXME: remove isp_use_esc_chars
1559         spellcheckerModule->escapeCharactersED->setText(toqstr(rc.isp_esc_chars));
1560         // FIXME: remove isp_use_pers_dict
1561         spellcheckerModule->persDictionaryED->setText(external_path(rc.isp_pers_dict));
1562         spellcheckerModule->compoundWordCB->setChecked(rc.isp_accept_compound);
1563         spellcheckerModule->inputEncodingCB->setChecked(rc.isp_use_input_encoding);
1564
1565
1566
1567
1568         printerModule->printerAdaptCB->setChecked(rc.print_adapt_output);
1569         printerModule->printerCommandED->setText(toqstr(rc.print_command));
1570         printerModule->printerNameED->setText(toqstr(rc.printer));
1571
1572         printerModule->printerPageRangeED->setText(toqstr(rc.print_pagerange_flag));
1573         printerModule->printerCopiesED->setText(toqstr(rc.print_copies_flag));
1574         printerModule->printerReverseED->setText(toqstr(rc.print_reverse_flag));
1575         printerModule->printerToPrinterED->setText(toqstr(rc.print_to_printer));
1576         printerModule->printerExtensionED->setText(toqstr(rc.print_file_extension));
1577         printerModule->printerSpoolCommandED->setText(toqstr(rc.print_spool_command));
1578         printerModule->printerPaperTypeED->setText(toqstr(rc.print_paper_flag));
1579         printerModule->printerEvenED->setText(toqstr(rc.print_evenpage_flag));
1580         printerModule->printerOddED->setText(toqstr(rc.print_oddpage_flag));
1581         printerModule->printerCollatedED->setText(toqstr(rc.print_collcopies_flag));
1582         printerModule->printerLandscapeED->setText(toqstr(rc.print_landscape_flag));
1583         printerModule->printerToFileED->setText(external_path(rc.print_to_file));
1584         printerModule->printerExtraED->setText(toqstr(rc.print_extra_options));
1585         printerModule->printerSpoolPrefixED->setText(toqstr(rc.print_spool_printerprefix));
1586         printerModule->printerPaperSizeED->setText(toqstr(rc.print_paper_dimension_flag));
1587
1588
1589
1590
1591         setComboxFont(screenfontsModule->screenRomanCO, rc.roman_font_name,
1592                         rc.roman_font_foundry);
1593         setComboxFont(screenfontsModule->screenSansCO, rc.sans_font_name,
1594                         rc.sans_font_foundry);
1595         setComboxFont(screenfontsModule->screenTypewriterCO, rc.typewriter_font_name,
1596                         rc.typewriter_font_foundry);
1597
1598         select_roman(screenfontsModule->screenRomanCO->currentText());
1599         select_sans(screenfontsModule->screenSansCO->currentText());
1600         select_typewriter(screenfontsModule->screenTypewriterCO->currentText());
1601
1602         screenfontsModule->screenZoomSB->setValue(rc.zoom);
1603         screenfontsModule->screenDpiSB->setValue(rc.dpi);
1604         screenfontsModule->screenTinyED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_TINY]));
1605         screenfontsModule->screenSmallestED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_SCRIPT]));
1606         screenfontsModule->screenSmallerED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_FOOTNOTE]));
1607         screenfontsModule->screenSmallED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_SMALL]));
1608         screenfontsModule->screenNormalED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_NORMAL]));
1609         screenfontsModule->screenLargeED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_LARGE]));
1610         screenfontsModule->screenLargerED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_LARGER]));
1611         screenfontsModule->screenLargestED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_LARGEST]));
1612         screenfontsModule->screenHugeED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_HUGE]));
1613         screenfontsModule->screenHugerED->setText(toqstr(rc.font_sizes[LyXFont::SIZE_HUGER]));
1614
1615         updateFormats();
1616         updateConverters();
1617         updateCopiers();
1618
1619 }
1620
1621
1622 } // namespace frontend
1623 } // namespace lyx
1624
1625 #include "QPrefsDialog_moc.cpp"