source: tspsg/src/settingsdialog.cpp @ 31694c8b58

appveyorimgbotreadme
Last change on this file since 31694c8b58 was 31694c8b58, checked in by Oleksii Serdiuk, 12 years ago

Fixed wrong placement of tspsg.ini on Windows Mobile.

Also, Main Window stopped showing maximized on Windows Mobile. Made a
workaround for this.

Closes #15 - Try to fix wrong placement of tspsg.ini.

  • Property mode set to 100644
File size: 22.9 KB
RevLine 
[1babbd6ba3]1/*
2 *  TSPSG: TSP Solver and Generator
[0af510a462]3 *  Copyright (C) 2007-2012 Oleksii Serdiuk <contacts[at]oleksii[dot]name>
[1babbd6ba3]4 *
[7ba743d983]5 *  $Id: $Format:%h %ai %an$ $
6 *  $URL: http://tspsg.info/ $
[1babbd6ba3]7 *
8 *  This file is part of TSPSG.
9 *
10 *  TSPSG is free software: you can redistribute it and/or modify
11 *  it under the terms of the GNU General Public License as published by
12 *  the Free Software Foundation, either version 3 of the License, or
13 *  (at your option) any later version.
14 *
15 *  TSPSG is distributed in the hope that it will be useful,
16 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
17 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 *  GNU General Public License for more details.
19 *
20 *  You should have received a copy of the GNU General Public License
21 *  along with TSPSG.  If not, see <http://www.gnu.org/licenses/>.
22 */
23
24#include "settingsdialog.h"
25
26/*!
27 * \brief Class constructor.
28 * \param parent Settings Dialog parent widget.
29 *
30 * Initializes Settings Dialog and creates its layout based on target OS.
31 */
32SettingsDialog::SettingsDialog(QWidget *parent)
[a09f31733a]33    : QDialog(parent), _fontChanged(false), _colorChanged(false), _translucency(0)
[1babbd6ba3]34{
[9eb63a1598]35    setupUi(this);
[1babbd6ba3]36
[9eb63a1598]37    setWindowIcon(GET_ICON("preferences-system"));
[3cadf24d00]38
[9eb63a1598]39    buttonBox->button(QDialogButtonBox::Ok)->setIcon(GET_ICON("dialog-ok"));
[9adbc413c7]40#ifndef QT_NO_STATUSTIP
[9eb63a1598]41    buttonBox->button(QDialogButtonBox::Ok)->setStatusTip(tr("Save new preferences"));
[9adbc413c7]42#endif
[9eb63a1598]43    buttonBox->button(QDialogButtonBox::Ok)->setCursor(QCursor(Qt::PointingHandCursor));
44    buttonBox->button(QDialogButtonBox::Cancel)->setIcon(GET_ICON("dialog-cancel"));
[9adbc413c7]45#ifndef QT_NO_STATUSTIP
[9eb63a1598]46    buttonBox->button(QDialogButtonBox::Cancel)->setStatusTip(tr("Close without saving preferences"));
[9adbc413c7]47#endif
[9eb63a1598]48    buttonBox->button(QDialogButtonBox::Cancel)->setCursor(QCursor(Qt::PointingHandCursor));
[1babbd6ba3]49
[a09f31733a]50    buttonTextColor->setIcon(GET_ICON("format-text-color"));
51    buttonSelectedColor->setIcon(GET_ICON("format-text-color"));
52    buttonAlternateColor->setIcon(GET_ICON("format-text-color"));
53    buttonBorderColor->setIcon(GET_ICON("format-stroke-color"));
[c8ed26ddf1]54//    buttonBgColor->setIcon(GET_ICON("format-fill-color"));
[9eb63a1598]55    buttonFont->setIcon(GET_ICON("preferences-desktop-font"));
56    buttonHelp->setIcon(GET_ICON("help-hint"));
[3cadf24d00]57
[317ba0432e]58QPalette p = bgWhite->palette();
[9eb63a1598]59    p.setColor(QPalette::Window, p.color(QPalette::Base));
60    bgWhite->setPalette(p);
[317ba0432e]61
[9eb63a1598]62    p = lineHorizontal->palette();
63    p.setColor(QPalette::Window, p.color(QPalette::Text));
64    lineHorizontal->setPalette(p);
[317ba0432e]65
[0007f69c46]66// Layout helpers
67QBoxLayout *box;
68QHBoxLayout *hbox;
[e26679937d]69#ifndef QT_NO_PRINTER
[9eb63a1598]70    cbHQGraph = new QCheckBox(bgWhite);
71    cbHQGraph->setObjectName("cbHQGraph");
[e26679937d]72#ifndef QT_NO_STATUSTIP
[9eb63a1598]73    cbHQGraph->setStatusTip(tr("Higher quality graph looks much better when printing but uglier on the screen"));
[e26679937d]74#endif // QT_NO_STATUSTIP
[9eb63a1598]75    cbHQGraph->setText(tr("Draw solution graph in higher quality"));
76    cbHQGraph->setCursor(QCursor(Qt::PointingHandCursor));
77
[ff8d0488a0]78    box = static_cast<QBoxLayout *>(tabOutputGeneral->layout());
[9eb63a1598]79    hbox = new QHBoxLayout();
80    hbox->addSpacing(10);
81    hbox->addWidget(cbHQGraph);
[6652ac66a4]82    box->insertLayout(box->indexOf(cbGenerateGraph) + 3, hbox);
[8f2427aaf0]83    connect(cbGenerateGraph, SIGNAL(toggled(bool)), cbHQGraph, SLOT(setEnabled(bool)));
[e26679937d]84#endif
85
[9eb63a1598]86    if (hasUpdater()) {
87        cbCheck4Updates = new QCheckBox(bgWhite);
88        cbCheck4Updates->setObjectName("cbCheck4Updates");
[f5c945d7ac]89#ifndef QT_NO_STATUSTIP
[9eb63a1598]90        cbCheck4Updates->setStatusTip(tr("Automatically check for updates at the given interval"));
[f5c945d7ac]91#endif // QT_NO_STATUSTIP
[9eb63a1598]92        cbCheck4Updates->setText(tr("Check for updates every"));
93        cbCheck4Updates->setCursor(QCursor(Qt::PointingHandCursor));
[f5c945d7ac]94
[9eb63a1598]95        spinUpdateCheckInterval = new QSpinBox(bgWhite);
96        spinUpdateCheckInterval->setObjectName("spinUpdateCheckInterval");
[f5c945d7ac]97#ifndef QT_NO_STATUSTIP
[9eb63a1598]98        spinUpdateCheckInterval->setStatusTip(tr("Minimal interval at which to check for updates"));
[f5c945d7ac]99#endif // QT_NO_STATUSTIP
[9eb63a1598]100        spinUpdateCheckInterval->setSuffix(tr(" days", "Don't forget a space at the beginning!"));
101        spinUpdateCheckInterval->setRange(1, 365);
102        spinUpdateCheckInterval->setCursor(QCursor(Qt::PointingHandCursor));
103
104        connect(cbCheck4Updates, SIGNAL(toggled(bool)), spinUpdateCheckInterval, SLOT(setEnabled(bool)));
105
106        box = static_cast<QBoxLayout *>(tabGeneral->layout());
107        hbox = new QHBoxLayout();
108        hbox->setSpacing(0);
109        hbox->addWidget(cbCheck4Updates);
110        hbox->addWidget(spinUpdateCheckInterval);
111        hbox->addStretch();
112        box->insertLayout(box->indexOf(cbUseNativeDialogs) + 1, hbox);
113    } else
114        cbCheck4Updates = NULL;
[f5c945d7ac]115
[1babbd6ba3]116#ifdef HANDHELD
117QVBoxLayout *vbox1; // Layout helper
118
[9eb63a1598]119    // On screens with small height when SIP is shown and the window is resized
120    // there is not enought space for all elements.
121    // So we show the scrollbars to be able to access them.
[1babbd6ba3]122QScrollArea *scrollArea = new QScrollArea(this);
[9eb63a1598]123    scrollArea->setFrameShape(QFrame::NoFrame);
124    scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
125    scrollArea->setWidgetResizable(true);
126    scrollArea->setWidget(bgWhite);
[1babbd6ba3]127
[9eb63a1598]128    bgWhite->layout()->setMargin(0);
[1babbd6ba3]129
[89e5214692]130#ifdef Q_OS_SYMBIAN
[bf92f16303]131    // On Symbian buttons are moved to a native bar so Help button is
132    // left alone. This causes it to be more to the middle instead of
133    // to the left. Adding a stretch fixes this issue.
134    buttons->insertStretch(buttons->indexOf(buttonHelp) + 1);
135#endif
136
[9eb63a1598]137    // Central layout
138    vbox1 = new QVBoxLayout(this);
139    vbox1->setMargin(0);
140    vbox1->setSpacing(0);
141    vbox1->addWidget(scrollArea);
142    vbox1->addWidget(bgGrey);
143    setLayout(vbox1);
[1babbd6ba3]144#else // HANDHELD
[0007f69c46]145QVBoxLayout *vbox; // Layout helper
[1babbd6ba3]146
[b8a2a118c4]147#ifndef HANDHELD
[9eb63a1598]148    if (QtWin::isCompositionEnabled()) {
149        cbUseTranslucency = new QCheckBox(bgWhite);
150        cbUseTranslucency->setObjectName("cbUseTranslucency");
[1babbd6ba3]151#ifndef QT_NO_STATUSTIP
[8f2427aaf0]152        cbUseTranslucency->setStatusTip(tr("Make Main Window background translucent"));
[1babbd6ba3]153#endif // QT_NO_STATUSTIP
[9eb63a1598]154        cbUseTranslucency->setText(tr("Use translucency effects"));
155        cbUseTranslucency->setCursor(QCursor(Qt::PointingHandCursor));
156    }
[b8a2a118c4]157#endif // HANDHELD
[1babbd6ba3]158
[9eb63a1598]159    cbSaveState = new QCheckBox(bgWhite);
160    cbSaveState->setObjectName("cbSaveState");
[1babbd6ba3]161#ifndef QT_NO_STATUSTIP
[9eb63a1598]162    cbSaveState->setStatusTip(tr("Restore main window state and position on application restart"));
[1babbd6ba3]163#endif // QT_NO_STATUSTIP
[9eb63a1598]164    cbSaveState->setText(tr("Save main window state and position"));
165    cbSaveState->setCursor(QCursor(Qt::PointingHandCursor));
166
167    imgIcon = new QLabel(this);
168    imgIcon->setObjectName("imgIcon");
169    imgIcon->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Expanding);
170    imgIcon->setFrameShape(QFrame::NoFrame);
171    imgIcon->setPixmap(GET_ICON("preferences-system").pixmap(128, 128));
172    imgIcon->setStyleSheet("background-color: #0080C0; padding-top: 11px;");
173    imgIcon->setAlignment(Qt::AlignTop | Qt::AlignHCenter);
174    imgIcon->setMinimumWidth(150);
175
176    labelHint = new QLabel(bgGrey);
177    labelHint->setObjectName("labelHint");
178    labelHint->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred);
[8f2427aaf0]179    labelHint->setMinimumSize(QSize(250, 28));
180    labelHint->setMaximumSize(QSize(QWIDGETSIZE_MAX, 28));
[9eb63a1598]181    labelHint->setTextFormat(Qt::PlainText);
[1babbd6ba3]182//      labelHint->setAlignment(Qt::AlignLeft | Qt::AlignTop);
[9eb63a1598]183    labelHint->setWordWrap(true);
[1babbd6ba3]184#ifndef QT_NO_STATUSTIP
[9eb63a1598]185    labelHint->setStatusTip(tr("Hover mouse pointer over dialog elements to get additional help"));
[1babbd6ba3]186#endif // QT_NO_STATUSTIP
187
[9eb63a1598]188    lineVertical = new QFrame(this);
189    lineVertical->setObjectName("lineVertical");
190    lineVertical->setFrameShadow(QFrame::Plain);
191    lineVertical->setFrameShape(QFrame::VLine);
192    lineVertical->setLineWidth(2);
[1babbd6ba3]193
[9eb63a1598]194    // Top line
195    hbox = new QHBoxLayout();
196    hbox->addWidget(imgIcon);
197    hbox->addWidget(lineVertical);
198    hbox->addWidget(bgWhite);
[e26679937d]199
[9eb63a1598]200    box = static_cast<QBoxLayout *>(tabGeneral->layout());
201    box->insertWidget(box->indexOf(cbUseNativeDialogs) + 1, cbSaveState);
[b8a2a118c4]202#ifndef HANDHELD
[9eb63a1598]203    if (QtWin::isCompositionEnabled())
204        box->insertWidget(box->indexOf(cbUseNativeDialogs) + 1, cbUseTranslucency);
[b8a2a118c4]205#endif // HANDHELD
[1babbd6ba3]206
[9eb63a1598]207    // Inserting label for hints to the bottom part (with grey bg)
208    buttons->insertWidget(buttons->indexOf(buttonHelp) + 1, labelHint, 1);
[1babbd6ba3]209
[9eb63a1598]210    // Central layout
211    vbox = new QVBoxLayout(this);
212    vbox->setMargin(0);
213    vbox->setSpacing(0);
214    vbox->addLayout(hbox);
215    vbox->addWidget(bgGrey);
216    setLayout(vbox);
[1babbd6ba3]217#endif // HANDHELD
218
[89e5214692]219#ifdef Q_OS_WINCE_WM
[9eb63a1598]220    // We need to react to SIP show/hide and resize the window appropriately
221    connect(QApplication::desktop(), SIGNAL(workAreaResized(int)), SLOT(desktopResized(int)));
[89e5214692]222#endif // Q_OS_WINCE_WM
[9eb63a1598]223    connect(spinRandMin, SIGNAL(valueChanged(int)), SLOT(spinRandMinValueChanged(int)));
224    connect(buttonFont, SIGNAL(clicked()), SLOT(buttonFontClicked()));
[a09f31733a]225    connect(buttonTextColor, SIGNAL(clicked()), SLOT(buttonTextColorClicked()));
[c8ed26ddf1]226    connect(buttonSelectedColor, SIGNAL(clicked()), SLOT(buttonSelectedColorClicked()));
227    connect(buttonAlternateColor, SIGNAL(clicked()), SLOT(buttonAlternateColorClicked()));
228    connect(buttonBorderColor, SIGNAL(clicked()), SLOT(buttonBorderColorClicked()));
229//    connect(buttonBgColor, SIGNAL(clicked()), SLOT(buttonBgColorClicked()));
[9eb63a1598]230    setWindowFlags(windowFlags() ^ Qt::WindowContextHelpButtonHint);
[9adbc413c7]231#if !defined(QT_NO_STATUSTIP) && !defined(HANDHELD)
[9eb63a1598]232    // Setting initial text of dialog hint label to own status tip text.
233    labelHint->setText(labelHint->statusTip());
[1babbd6ba3]234#endif // HANDHELD
235
[31694c8b58]236    settings = initSettings(this);
[9eb63a1598]237    settings->remove("SettingsReset");
[1babbd6ba3]238
[9eb63a1598]239    cbAutosize->setChecked(settings->value("Autosize", DEF_AUTOSIZE).toBool());
240    cbSaveLastUsed->setChecked(settings->value("SaveLastUsed", DEF_SAVE_LAST_USED).toBool());
241    cbUseNativeDialogs->setChecked(settings->value("UseNativeDialogs", DEF_USE_NATIVE_DIALOGS).toBool());
[b8a2a118c4]242#ifndef HANDHELD
[9eb63a1598]243    if (QtWin::isCompositionEnabled())
244        cbUseTranslucency->setChecked(settings->value("UseTranslucency", DEF_USE_TRANSLUCENCY).toBool());
[b8a2a118c4]245#endif // HANDHELD
[1babbd6ba3]246#ifndef HANDHELD
[9eb63a1598]247    cbSaveState->setChecked(settings->value("SavePos", DEF_SAVEPOS).toBool());
[1babbd6ba3]248#endif // HANDHELD
[9eb63a1598]249    if (cbCheck4Updates != NULL) {
250        settings->beginGroup("Check4Updates");
251        cbCheck4Updates->setChecked(settings->value("Enabled", DEF_CHECK_FOR_UPDATES).toBool());
252        spinUpdateCheckInterval->setValue(settings->value("Interval", DEF_UPDATE_CHECK_INTERVAL).toInt());
253        settings->endGroup();
254        spinUpdateCheckInterval->setEnabled(cbCheck4Updates->isChecked());
255    }
256
257    settings->beginGroup("Task");
258    cbSymmetricMode->setChecked(settings->value("SymmetricMode", DEF_SYMMETRIC_MODE).toBool());
259    spinFractionalAccuracy->setValue(settings->value("FractionalAccuracy", DEF_FRACTIONAL_ACCURACY).toInt());
260    spinRandMin->setMaximum(MAX_RAND_VALUE);
261    spinRandMin->setValue(settings->value("RandMin",DEF_RAND_MIN).toInt());
262    spinRandMax->setMaximum(MAX_RAND_VALUE);
263    spinRandMax->setValue(settings->value("RandMax",DEF_RAND_MAX).toInt());
264    cbFractionalRandom->setChecked(settings->value("FractionalRandom", DEF_FRACTIONAL_RANDOM).toBool());
265    settings->endGroup();
266
267    settings->beginGroup("Output");
[8f2427aaf0]268    cbGenerateGraph->setChecked(settings->value("GenerateGraph", DEF_GENERATE_GRAPH).toBool());
[20015b41e7]269
[6652ac66a4]270    spinGraphWidth->setEnabled(cbGenerateGraph->isChecked());
271    spinGraphWidth->setValue(settings->value("GraphWidth", DEF_GRAPH_WIDTH).toDouble());
[e26679937d]272
[356169a3d3]273#if !defined(NOSVG) && (QT_VERSION >= QT_VERSION_CHECK(4,5,0))
[9eb63a1598]274    comboGraphImageFormat->addItem("svg");
[356169a3d3]275#endif
[9eb63a1598]276    // We create whitelist of formats, supported by the most popular web browsers according to
277    //  http://en.wikipedia.org/wiki/Comparison_of_web_browsers#Image_format_support
278    //  + TIFF format (there are plugins to support it).
[20015b41e7]279QStringList whitelist;
[9eb63a1598]280    whitelist << "bmp" << "jpeg" << "png" << "tiff" << "xbm";
281    foreach (QByteArray format, QImageWriter::supportedImageFormats()) {
282        if (whitelist.contains(format))
283            comboGraphImageFormat->addItem(format);
284    }
285    comboGraphImageFormat->model()->sort(0);
286    comboGraphImageFormat->setCurrentIndex(comboGraphImageFormat->findText(settings->value("GraphImageFormat", DEF_GRAPH_IMAGE_FORMAT).toString(), Qt::MatchFixedString));
287    if (comboGraphImageFormat->currentIndex() < 0)
288        comboGraphImageFormat->setCurrentIndex(comboGraphImageFormat->findText(DEF_GRAPH_IMAGE_FORMAT, Qt::MatchFixedString));
[8f2427aaf0]289    labelGraphImageFormat->setEnabled(cbGenerateGraph->isChecked());
290    comboGraphImageFormat->setEnabled(cbGenerateGraph->isChecked());
[6652ac66a4]291
292#ifndef QT_NO_PRINTER
293    cbHQGraph->setEnabled(cbGenerateGraph->isChecked());
294    cbHQGraph->setChecked(settings->value("HQGraph", DEF_HQ_GRAPH).toBool());
295#endif
296
297    labelGraphWidth->setEnabled(cbGenerateGraph->isChecked());
[8f2427aaf0]298    cbEmbedGraphIntoHTML->setEnabled(cbGenerateGraph->isChecked());
[6652ac66a4]299    cbEmbedGraphIntoHTML->setChecked(settings->value("EmbedGraphIntoHTML", DEF_EMBED_GRAPH_INTO_HTML).toBool());
[9eb63a1598]300
301    cbShowMatrix->setChecked(settings->value("ShowMatrix", DEF_SHOW_MATRIX).toBool());
302    cbCitiesLimit->setEnabled(cbShowMatrix->isChecked());
303    cbCitiesLimit->setChecked(settings->value("UseShowMatrixLimit", DEF_USE_SHOW_MATRIX_LIMIT && cbShowMatrix->isChecked()).toBool());
304    spinCitiesLimit->setEnabled(cbShowMatrix->isChecked() && cbCitiesLimit->isChecked());
305    spinCitiesLimit->setValue(settings->value("ShowMatrixLimit", DEF_SHOW_MATRIX_LIMIT).toInt());
306    spinCitiesLimit->setMaximum(MAX_NUM_CITIES);
307    cbScrollToEnd->setChecked(settings->value("ScrollToEnd", DEF_SCROLL_TO_END).toBool());
308
309    font = qvariant_cast<QFont>(settings->value("Font", QFont(DEF_FONT_FACE, DEF_FONT_SIZE)));
[a09f31733a]310    textColor = QColor(settings->value("Colors/Text", DEF_TEXT_COLOR).toString());
311    selColor = QColor(settings->value("Colors/Selected", DEF_SELECTED_COLOR).toString());
312    altColor = QColor(settings->value("Colors/Alternate", DEF_ALTERNATE_COLOR).toString());
[c8ed26ddf1]313    borderColor = QColor(settings->value("Colors/TableBorder", DEF_TABLE_COLOR).toString());
314//    bgColor = QColor(settings->value("Colors/Background", DEF_BACKGROUND_COLOR).toString());
[9eb63a1598]315    settings->endGroup();
[1babbd6ba3]316
[a09f31733a]317    QFont f = font;
318    f.setPointSize(labelFontExample->font().pointSize());
319    labelFontExample->setFont(f);
320    labelFontExample->setText(font.family());
321
[c8ed26ddf1]322    setBgColor(boxTextColor, textColor);
323    setBgColor(boxSelectedColor, selColor);
324    setBgColor(boxAlternateColor, altColor);
325    setBgColor(boxBorderColor, borderColor);
326//    setBgColor(boxBgColor, bgColor);
[a09f31733a]327
[e51c78af27]328#ifdef HANDHELD
[9eb63a1598]329    setWindowState(Qt::WindowMaximized);
[e51c78af27]330#else
[9eb63a1598]331    adjustSize();
[89e5214692]332#endif // Q_OS_WINCE_WM
[1babbd6ba3]333}
334
335/*!
336 * \brief Indicates whether or not the font color has been changed.
337 * \return \c true if font color changed, otherwise \c false.
338 */
339bool SettingsDialog::colorChanged() const
340{
[a09f31733a]341    return _colorChanged;
[1babbd6ba3]342}
343
344/*!
345 * \brief Indicates whether or not the font properties have been changed.
346 * \return \c true if font properties changed, otherwise \c false.
347 */
348bool SettingsDialog::fontChanged() const
349{
[a09f31733a]350    return _fontChanged;
[1babbd6ba3]351}
352
353/*!
354 * \brief Indicates whether and how the translucency setting was changed
355 * \retval -1 the translucency was \em disabled.
[8f2427aaf0]356 * \retval  0 the translucency <em>didn't change</em>.
[1babbd6ba3]357 * \retval  1 the translucency was \em enabled.
358 */
359qint8 SettingsDialog::translucencyChanged() const
360{
[9eb63a1598]361    return _translucency;
[1babbd6ba3]362}
363
364/* Privates **********************************************************/
365
366void SettingsDialog::accept()
367{
[9eb63a1598]368    if (QApplication::keyboardModifiers() & Qt::ShiftModifier) {
369        if (QMessageBox::question(this, tr("Settings Reset"), tr("Do you really want to <b>reset all application settings to their defaults</b>?"), QMessageBox::RestoreDefaults | QMessageBox::Cancel) == QMessageBox::RestoreDefaults) {
[a09f31733a]370            _fontChanged = (font != QFont(DEF_FONT_FACE, DEF_FONT_SIZE));
371            _colorChanged = (textColor != DEF_TEXT_COLOR);
[9eb63a1598]372            settings->remove("");
373            settings->setValue("SettingsReset", true);
374            QDialog::accept();
375            QMessageBox::information(this->parentWidget(), tr("Settings Reset"), tr("All settings where successfully reset to their defaults.\nIt is recommended to restart the application now."));
376            return;
377        } else
378            return;
379    }
380    settings->setValue("Autosize", cbAutosize->isChecked());
381    settings->setValue("SaveLastUsed", cbSaveLastUsed->isChecked());
382    settings->setValue("UseNativeDialogs", cbUseNativeDialogs->isChecked());
[b8a2a118c4]383#ifndef HANDHELD
[9eb63a1598]384    if (QtWin::isCompositionEnabled()) {
[1babbd6ba3]385bool old = settings->value("UseTranslucency", DEF_USE_TRANSLUCENCY).toBool();
[9eb63a1598]386        if ((!old && cbUseTranslucency->isChecked()) || (old && !cbUseTranslucency->isChecked())) {
387            _translucency = old ? -1 : 1;
388        } else
389            _translucency = 0;
390        settings->setValue("UseTranslucency", cbUseTranslucency->isChecked());
391    }
392    settings->setValue("SavePos", cbSaveState->isChecked());
[ac76a6a753]393#endif // HANDHELD
[9eb63a1598]394    if (cbCheck4Updates != NULL) {
395        settings->beginGroup("Check4Updates");
396        settings->setValue("Enabled", cbCheck4Updates->isChecked());
397        if (cbCheck4Updates->isChecked())
398            settings->setValue("Interval", spinUpdateCheckInterval->value());
399        settings->endGroup();
400    }
401
402    settings->beginGroup("Task");
403    settings->setValue("SymmetricMode", cbSymmetricMode->isChecked());
404    settings->setValue("FractionalAccuracy", spinFractionalAccuracy->value());
405    settings->setValue("RandMin", spinRandMin->value());
406    settings->setValue("RandMax", spinRandMax->value());
407    settings->setValue("FractionalRandom", cbFractionalRandom->isChecked());
408    settings->endGroup();
409
410    settings->beginGroup("Output");
[8f2427aaf0]411    settings->setValue("GenerateGraph", cbGenerateGraph->isChecked());
412    if (cbGenerateGraph->isChecked()) {
[6652ac66a4]413        settings->setValue("GraphWidth", spinGraphWidth->value());
[8f2427aaf0]414        if (cbGenerateGraph->isChecked()) {
415            if (comboGraphImageFormat->currentIndex() >= 0)
416                settings->setValue("GraphImageFormat", comboGraphImageFormat->currentText());
417            else
418                settings->setValue("GraphImageFormat", DEF_GRAPH_IMAGE_FORMAT);
419        }
[6652ac66a4]420#ifndef QT_NO_PRINTER
421        settings->setValue("HQGraph", cbHQGraph->isChecked());
422#endif
[8f2427aaf0]423        settings->setValue("EmbedGraphIntoHTML", cbEmbedGraphIntoHTML->isChecked());
[9eb63a1598]424    }
425    settings->setValue("ShowMatrix", cbShowMatrix->isChecked());
426    settings->setValue("UseShowMatrixLimit", cbShowMatrix->isChecked() && cbCitiesLimit->isChecked());
427    if (cbCitiesLimit->isChecked())
428        settings->setValue("ShowMatrixLimit", spinCitiesLimit->value());
429    settings->setValue("ScrollToEnd", cbScrollToEnd->isChecked());
[a09f31733a]430    if (_fontChanged)
[9eb63a1598]431        settings->setValue("Font", font);
[c8ed26ddf1]432    if (_colorChanged) {
433        settings->beginGroup("Colors");
434        if (textColor != DEF_TEXT_COLOR)
435            settings->setValue("Text", textColor.name());
436        else
437            settings->remove("Text");
438        if (selColor != QColor(DEF_SELECTED_COLOR))
439            settings->setValue("Selected", selColor.name());
440        else
441            settings->remove("Selected");
442        if (altColor != DEF_ALTERNATE_COLOR)
443            settings->setValue("Alternate",altColor.name());
444        else
445            settings->remove("Alternate");
446        if (borderColor != DEF_TABLE_COLOR)
447            settings->setValue("TableBorder", borderColor.name());
448        else
449            settings->remove("TableColor");
450//        if (bgColor != DEF_BACKGROUND_COLOR)
451//            settings->setValue("Background", bgColor.name());
452//        else
453//            settings->remove("Background");
454        settings->endGroup();
455    }
[9eb63a1598]456    settings->endGroup();
457    QDialog::accept();
[1babbd6ba3]458}
459
[c8ed26ddf1]460void SettingsDialog::pickColor(QColor &where)
[1babbd6ba3]461{
[c8ed26ddf1]462    QColor color = QColorDialog::getColor(where, this);
463    if (color.isValid() && (where != color)) {
464        where = color;
[a09f31733a]465        _colorChanged = true;
[9eb63a1598]466    }
[1babbd6ba3]467}
468
[c8ed26ddf1]469void SettingsDialog::setBgColor(QWidget *widget, const QColor &color)
470{
471    QPalette p = widget->palette();
472    p.setColor(QPalette::Window, color);
473    widget->setPalette(p);
474}
475
476void SettingsDialog::buttonTextColorClicked()
477{
478    pickColor(textColor);
479    setBgColor(boxTextColor, textColor);
480}
481
482void SettingsDialog::buttonSelectedColorClicked()
483{
484    pickColor(selColor);
485    setBgColor(boxSelectedColor, selColor);
486}
487
488void SettingsDialog::buttonAlternateColorClicked()
489{
490    pickColor(altColor);
491    setBgColor(boxAlternateColor, altColor);
492}
493
494void SettingsDialog::buttonBorderColorClicked()
495{
496    pickColor(borderColor);
497    setBgColor(boxBorderColor, borderColor);
498}
499
500//void SettingsDialog::buttonBgColorClicked()
501//{
502//    pickColor(bgColor);
503//    setBgColor(boxBgColor, bgColor);
504//}
505
[1babbd6ba3]506void SettingsDialog::buttonFontClicked()
507{
508bool ok;
[a09f31733a]509QFont font = QFontDialog::getFont(&ok, this->font, this);
[9eb63a1598]510    if (ok && (this->font != font)) {
511        this->font = font;
[a09f31733a]512        QFont f = font;
513        f.setPointSize(labelFontExample->font().pointSize());
514        labelFontExample->setFont(f);
515        labelFontExample->setText(font.family());
516        _fontChanged = true;
[9eb63a1598]517    }
[1babbd6ba3]518}
519
[89e5214692]520#ifdef Q_OS_WINCE_WM
[1babbd6ba3]521void SettingsDialog::desktopResized(int screen)
522{
[9eb63a1598]523    if (screen != 0)
524        return;
[1babbd6ba3]525
526QRect availableGeometry = QApplication::desktop()->availableGeometry(0);
[9eb63a1598]527    if (currentGeometry != availableGeometry) {
528        QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
529        /*!
530         * \hack HACK: This hack checks whether \link QDesktopWidget::availableGeometry() availableGeometry()\endlink's \c top + \c hegiht = \link QDesktopWidget::screenGeometry() screenGeometry()\endlink's \c height.
531         *  If \c true, the window gets maximized. If we used \c setGeometry() in this case, the bottom of the
532         *  window would end up being behind the soft buttons. Is this a bug in Qt or Windows Mobile?
533         */
534        if ((availableGeometry.top() + availableGeometry.height()) == QApplication::desktop()->screenGeometry().height()) {
535            setWindowState(windowState() | Qt::WindowMaximized);
536        } else {
537            if (windowState() & Qt::WindowMaximized)
538                setWindowState(windowState() ^ Qt::WindowMaximized);
539            setGeometry(availableGeometry);
540        }
541        currentGeometry = availableGeometry;
542        QApplication::restoreOverrideCursor();
543    }
[1babbd6ba3]544}
545
546void SettingsDialog::showEvent(QShowEvent *ev)
547{
[9eb63a1598]548    desktopResized(0);
[1babbd6ba3]549
[9eb63a1598]550    QWidget::showEvent(ev);
[1babbd6ba3]551}
[89e5214692]552#endif // Q_OS_WINCE_WM
[1babbd6ba3]553
554void SettingsDialog::spinRandMinValueChanged(int val) {
[9eb63a1598]555    spinRandMax->setMinimum(val);
[1babbd6ba3]556}
557
[9adbc413c7]558#if !defined(QT_NO_STATUSTIP) && !defined(HANDHELD)
[1babbd6ba3]559bool SettingsDialog::event(QEvent *ev)
560{
[9eb63a1598]561    // Checking for StatusTip event and if tip text is not empty string
562    // setting it as text of the dialog hint label. Otherwise, setting
563    // dialog hint label text to own status tip text.
564    if (ev->type() == QEvent::StatusTip) {
[1babbd6ba3]565QString tip = static_cast<QStatusTipEvent *>(ev)->tip();
[9eb63a1598]566        if (tip.length() != 0)
567            labelHint->setText(tip);
568        else
569            labelHint->setText(labelHint->statusTip());
570        return true;
571    } else
572        return QDialog::event(ev);
[1babbd6ba3]573}
574#endif // HANDHELD
Note: See TracBrowser for help on using the repository browser.