source: tspsg/src/settingsdialog.cpp @ 7e8e1b444d

appveyorimgbotreadme
Last change on this file since 7e8e1b444d was a09f31733a, checked in by Oleksii Serdiuk, 12 years ago

Added all configurable colors to Settings Dialog.

Only display ATM. Editing and saving will follow soon...

  • Property mode set to 100644
File size: 20.8 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"));
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);
[8f2427aaf0]82    box->insertLayout(box->indexOf(cbGenerateGraph) + 2, hbox);
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
[9eb63a1598]130    // Central layout
131    vbox1 = new QVBoxLayout(this);
132    vbox1->setMargin(0);
133    vbox1->setSpacing(0);
134    vbox1->addWidget(scrollArea);
135    vbox1->addWidget(bgGrey);
136    setLayout(vbox1);
[1babbd6ba3]137#else // HANDHELD
[0007f69c46]138QVBoxLayout *vbox; // Layout helper
[1babbd6ba3]139
[b8a2a118c4]140#ifndef HANDHELD
[9eb63a1598]141    if (QtWin::isCompositionEnabled()) {
142        cbUseTranslucency = new QCheckBox(bgWhite);
143        cbUseTranslucency->setObjectName("cbUseTranslucency");
[1babbd6ba3]144#ifndef QT_NO_STATUSTIP
[8f2427aaf0]145        cbUseTranslucency->setStatusTip(tr("Make Main Window background translucent"));
[1babbd6ba3]146#endif // QT_NO_STATUSTIP
[9eb63a1598]147        cbUseTranslucency->setText(tr("Use translucency effects"));
148        cbUseTranslucency->setCursor(QCursor(Qt::PointingHandCursor));
149    }
[b8a2a118c4]150#endif // HANDHELD
[1babbd6ba3]151
[9eb63a1598]152    cbSaveState = new QCheckBox(bgWhite);
153    cbSaveState->setObjectName("cbSaveState");
[1babbd6ba3]154#ifndef QT_NO_STATUSTIP
[9eb63a1598]155    cbSaveState->setStatusTip(tr("Restore main window state and position on application restart"));
[1babbd6ba3]156#endif // QT_NO_STATUSTIP
[9eb63a1598]157    cbSaveState->setText(tr("Save main window state and position"));
158    cbSaveState->setCursor(QCursor(Qt::PointingHandCursor));
159
160    imgIcon = new QLabel(this);
161    imgIcon->setObjectName("imgIcon");
162    imgIcon->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Expanding);
163    imgIcon->setFrameShape(QFrame::NoFrame);
164    imgIcon->setPixmap(GET_ICON("preferences-system").pixmap(128, 128));
165    imgIcon->setStyleSheet("background-color: #0080C0; padding-top: 11px;");
166    imgIcon->setAlignment(Qt::AlignTop | Qt::AlignHCenter);
167    imgIcon->setMinimumWidth(150);
168
169    labelHint = new QLabel(bgGrey);
170    labelHint->setObjectName("labelHint");
171    labelHint->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred);
[8f2427aaf0]172    labelHint->setMinimumSize(QSize(250, 28));
173    labelHint->setMaximumSize(QSize(QWIDGETSIZE_MAX, 28));
[9eb63a1598]174    labelHint->setTextFormat(Qt::PlainText);
[1babbd6ba3]175//      labelHint->setAlignment(Qt::AlignLeft | Qt::AlignTop);
[9eb63a1598]176    labelHint->setWordWrap(true);
[1babbd6ba3]177#ifndef QT_NO_STATUSTIP
[9eb63a1598]178    labelHint->setStatusTip(tr("Hover mouse pointer over dialog elements to get additional help"));
[1babbd6ba3]179#endif // QT_NO_STATUSTIP
180
[9eb63a1598]181    lineVertical = new QFrame(this);
182    lineVertical->setObjectName("lineVertical");
183    lineVertical->setFrameShadow(QFrame::Plain);
184    lineVertical->setFrameShape(QFrame::VLine);
185    lineVertical->setLineWidth(2);
[1babbd6ba3]186
[9eb63a1598]187    // Top line
188    hbox = new QHBoxLayout();
189    hbox->addWidget(imgIcon);
190    hbox->addWidget(lineVertical);
191    hbox->addWidget(bgWhite);
[e26679937d]192
[9eb63a1598]193    box = static_cast<QBoxLayout *>(tabGeneral->layout());
194    box->insertWidget(box->indexOf(cbUseNativeDialogs) + 1, cbSaveState);
[b8a2a118c4]195#ifndef HANDHELD
[9eb63a1598]196    if (QtWin::isCompositionEnabled())
197        box->insertWidget(box->indexOf(cbUseNativeDialogs) + 1, cbUseTranslucency);
[b8a2a118c4]198#endif // HANDHELD
[1babbd6ba3]199
[9eb63a1598]200    // Inserting label for hints to the bottom part (with grey bg)
201    buttons->insertWidget(buttons->indexOf(buttonHelp) + 1, labelHint, 1);
[1babbd6ba3]202
[9eb63a1598]203    // Central layout
204    vbox = new QVBoxLayout(this);
205    vbox->setMargin(0);
206    vbox->setSpacing(0);
207    vbox->addLayout(hbox);
208    vbox->addWidget(bgGrey);
209    setLayout(vbox);
[1babbd6ba3]210#endif // HANDHELD
211
[97e90f9be6]212#ifdef Q_WS_WINCE_WM
[9eb63a1598]213    // We need to react to SIP show/hide and resize the window appropriately
214    connect(QApplication::desktop(), SIGNAL(workAreaResized(int)), SLOT(desktopResized(int)));
[97e90f9be6]215#endif // Q_WS_WINCE_WM
[9eb63a1598]216    connect(spinRandMin, SIGNAL(valueChanged(int)), SLOT(spinRandMinValueChanged(int)));
217    connect(buttonFont, SIGNAL(clicked()), SLOT(buttonFontClicked()));
[a09f31733a]218    connect(buttonTextColor, SIGNAL(clicked()), SLOT(buttonTextColorClicked()));
[9eb63a1598]219    setWindowFlags(windowFlags() ^ Qt::WindowContextHelpButtonHint);
[9adbc413c7]220#if !defined(QT_NO_STATUSTIP) && !defined(HANDHELD)
[9eb63a1598]221    // Setting initial text of dialog hint label to own status tip text.
222    labelHint->setText(labelHint->statusTip());
[1babbd6ba3]223#endif // HANDHELD
224
[9eb63a1598]225    settings = new QSettings(QSettings::IniFormat, QSettings::UserScope, "TSPSG", "tspsg", this);
226    settings->remove("SettingsReset");
[1babbd6ba3]227
[9eb63a1598]228    cbAutosize->setChecked(settings->value("Autosize", DEF_AUTOSIZE).toBool());
229    cbSaveLastUsed->setChecked(settings->value("SaveLastUsed", DEF_SAVE_LAST_USED).toBool());
230    cbUseNativeDialogs->setChecked(settings->value("UseNativeDialogs", DEF_USE_NATIVE_DIALOGS).toBool());
[b8a2a118c4]231#ifndef HANDHELD
[9eb63a1598]232    if (QtWin::isCompositionEnabled())
233        cbUseTranslucency->setChecked(settings->value("UseTranslucency", DEF_USE_TRANSLUCENCY).toBool());
[b8a2a118c4]234#endif // HANDHELD
[1babbd6ba3]235#ifndef HANDHELD
[9eb63a1598]236    cbSaveState->setChecked(settings->value("SavePos", DEF_SAVEPOS).toBool());
[1babbd6ba3]237#endif // HANDHELD
[9eb63a1598]238    if (cbCheck4Updates != NULL) {
239        settings->beginGroup("Check4Updates");
240        cbCheck4Updates->setChecked(settings->value("Enabled", DEF_CHECK_FOR_UPDATES).toBool());
241        spinUpdateCheckInterval->setValue(settings->value("Interval", DEF_UPDATE_CHECK_INTERVAL).toInt());
242        settings->endGroup();
243        spinUpdateCheckInterval->setEnabled(cbCheck4Updates->isChecked());
244    }
245
246    settings->beginGroup("Task");
247    cbSymmetricMode->setChecked(settings->value("SymmetricMode", DEF_SYMMETRIC_MODE).toBool());
248    spinFractionalAccuracy->setValue(settings->value("FractionalAccuracy", DEF_FRACTIONAL_ACCURACY).toInt());
249    spinRandMin->setMaximum(MAX_RAND_VALUE);
250    spinRandMin->setValue(settings->value("RandMin",DEF_RAND_MIN).toInt());
251    spinRandMax->setMaximum(MAX_RAND_VALUE);
252    spinRandMax->setValue(settings->value("RandMax",DEF_RAND_MAX).toInt());
253    cbFractionalRandom->setChecked(settings->value("FractionalRandom", DEF_FRACTIONAL_RANDOM).toBool());
254    settings->endGroup();
255
256    settings->beginGroup("Output");
[8f2427aaf0]257    cbGenerateGraph->setChecked(settings->value("GenerateGraph", DEF_GENERATE_GRAPH).toBool());
[20015b41e7]258
[e26679937d]259#ifndef QT_NO_PRINTER
[8f2427aaf0]260    cbHQGraph->setEnabled(cbGenerateGraph->isChecked());
261    cbHQGraph->setChecked(settings->value("HQGraph", DEF_HQ_GRAPH).toBool());
[e26679937d]262#endif
263
[356169a3d3]264#if !defined(NOSVG) && (QT_VERSION >= QT_VERSION_CHECK(4,5,0))
[9eb63a1598]265    comboGraphImageFormat->addItem("svg");
[356169a3d3]266#endif
[9eb63a1598]267    // We create whitelist of formats, supported by the most popular web browsers according to
268    //  http://en.wikipedia.org/wiki/Comparison_of_web_browsers#Image_format_support
269    //  + TIFF format (there are plugins to support it).
[20015b41e7]270QStringList whitelist;
[9eb63a1598]271    whitelist << "bmp" << "jpeg" << "png" << "tiff" << "xbm";
272    foreach (QByteArray format, QImageWriter::supportedImageFormats()) {
273        if (whitelist.contains(format))
274            comboGraphImageFormat->addItem(format);
275    }
276    comboGraphImageFormat->model()->sort(0);
277    comboGraphImageFormat->setCurrentIndex(comboGraphImageFormat->findText(settings->value("GraphImageFormat", DEF_GRAPH_IMAGE_FORMAT).toString(), Qt::MatchFixedString));
278    if (comboGraphImageFormat->currentIndex() < 0)
279        comboGraphImageFormat->setCurrentIndex(comboGraphImageFormat->findText(DEF_GRAPH_IMAGE_FORMAT, Qt::MatchFixedString));
[8f2427aaf0]280    labelGraphImageFormat->setEnabled(cbGenerateGraph->isChecked());
281    comboGraphImageFormat->setEnabled(cbGenerateGraph->isChecked());
282    cbEmbedGraphIntoHTML->setChecked(settings->value("EmbedGraphIntoHTML", DEF_EMBED_GRAPH_INTO_HTML).toBool());
283    cbEmbedGraphIntoHTML->setEnabled(cbGenerateGraph->isChecked());
[9eb63a1598]284
285    cbShowMatrix->setChecked(settings->value("ShowMatrix", DEF_SHOW_MATRIX).toBool());
286    cbCitiesLimit->setEnabled(cbShowMatrix->isChecked());
287    cbCitiesLimit->setChecked(settings->value("UseShowMatrixLimit", DEF_USE_SHOW_MATRIX_LIMIT && cbShowMatrix->isChecked()).toBool());
288    spinCitiesLimit->setEnabled(cbShowMatrix->isChecked() && cbCitiesLimit->isChecked());
289    spinCitiesLimit->setValue(settings->value("ShowMatrixLimit", DEF_SHOW_MATRIX_LIMIT).toInt());
290    spinCitiesLimit->setMaximum(MAX_NUM_CITIES);
291    cbScrollToEnd->setChecked(settings->value("ScrollToEnd", DEF_SCROLL_TO_END).toBool());
292
293    font = qvariant_cast<QFont>(settings->value("Font", QFont(DEF_FONT_FACE, DEF_FONT_SIZE)));
[a09f31733a]294    textColor = QColor(settings->value("Colors/Text", DEF_TEXT_COLOR).toString());
295    selColor = QColor(settings->value("Colors/Selected", DEF_SELECTED_COLOR).toString());
296    altColor = QColor(settings->value("Colors/Alternate", DEF_ALTERNATE_COLOR).toString());
297    borderColor = QColor(settings->value("Colors/Border", DEF_TABLE_COLOR).toString());
298    bgColor = QColor(settings->value("Colors/Background", DEF_BACKGROUND_COLOR).toString());
[9eb63a1598]299    settings->endGroup();
[1babbd6ba3]300
[a09f31733a]301    QFont f = font;
302    f.setPointSize(labelFontExample->font().pointSize());
303    labelFontExample->setFont(f);
304    labelFontExample->setText(font.family());
305
306    p = boxTextColor->palette();
307    p.setColor(QPalette::Window, textColor);
308    boxTextColor->setPalette(p);
309
310    p = boxSelectedColor->palette();
311    p.setColor(QPalette::Window, selColor);
312    boxSelectedColor->setPalette(p);
313
314    p = boxAlternateColor->palette();
315    p.setColor(QPalette::Window, altColor);
316    boxAlternateColor->setPalette(p);
317
318    p = boxBorderColor->palette();
319    p.setColor(QPalette::Window, borderColor);
320    boxBorderColor->setPalette(p);
321
322    p = boxBgColor->palette();
323    p.setColor(QPalette::Window, bgColor);
324    boxBgColor->setPalette(p);
325
[e51c78af27]326#ifdef HANDHELD
[9eb63a1598]327    setWindowState(Qt::WindowMaximized);
[e51c78af27]328#else
[9eb63a1598]329    adjustSize();
[97e90f9be6]330#endif // Q_WS_WINCE_WM
[1babbd6ba3]331}
332
333/*!
334 * \brief Indicates whether or not the font color has been changed.
335 * \return \c true if font color changed, otherwise \c false.
336 */
337bool SettingsDialog::colorChanged() const
338{
[a09f31733a]339    return _colorChanged;
[1babbd6ba3]340}
341
342/*!
343 * \brief Indicates whether or not the font properties have been changed.
344 * \return \c true if font properties changed, otherwise \c false.
345 */
346bool SettingsDialog::fontChanged() const
347{
[a09f31733a]348    return _fontChanged;
[1babbd6ba3]349}
350
351/*!
352 * \brief Indicates whether and how the translucency setting was changed
353 * \retval -1 the translucency was \em disabled.
[8f2427aaf0]354 * \retval  0 the translucency <em>didn't change</em>.
[1babbd6ba3]355 * \retval  1 the translucency was \em enabled.
356 */
357qint8 SettingsDialog::translucencyChanged() const
358{
[9eb63a1598]359    return _translucency;
[1babbd6ba3]360}
361
362/* Privates **********************************************************/
363
364void SettingsDialog::accept()
365{
[9eb63a1598]366    if (QApplication::keyboardModifiers() & Qt::ShiftModifier) {
367        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]368            _fontChanged = (font != QFont(DEF_FONT_FACE, DEF_FONT_SIZE));
369            _colorChanged = (textColor != DEF_TEXT_COLOR);
[9eb63a1598]370            settings->remove("");
371            settings->setValue("SettingsReset", true);
372            QDialog::accept();
373            QMessageBox::information(this->parentWidget(), tr("Settings Reset"), tr("All settings where successfully reset to their defaults.\nIt is recommended to restart the application now."));
374            return;
375        } else
376            return;
377    }
378    settings->setValue("Autosize", cbAutosize->isChecked());
379    settings->setValue("SaveLastUsed", cbSaveLastUsed->isChecked());
380    settings->setValue("UseNativeDialogs", cbUseNativeDialogs->isChecked());
[b8a2a118c4]381#ifndef HANDHELD
[9eb63a1598]382    if (QtWin::isCompositionEnabled()) {
[1babbd6ba3]383bool old = settings->value("UseTranslucency", DEF_USE_TRANSLUCENCY).toBool();
[9eb63a1598]384        if ((!old && cbUseTranslucency->isChecked()) || (old && !cbUseTranslucency->isChecked())) {
385            _translucency = old ? -1 : 1;
386        } else
387            _translucency = 0;
388        settings->setValue("UseTranslucency", cbUseTranslucency->isChecked());
389    }
390    settings->setValue("SavePos", cbSaveState->isChecked());
[ac76a6a753]391#endif // HANDHELD
[9eb63a1598]392    if (cbCheck4Updates != NULL) {
393        settings->beginGroup("Check4Updates");
394        settings->setValue("Enabled", cbCheck4Updates->isChecked());
395        if (cbCheck4Updates->isChecked())
396            settings->setValue("Interval", spinUpdateCheckInterval->value());
397        settings->endGroup();
398    }
399
400    settings->beginGroup("Task");
401    settings->setValue("SymmetricMode", cbSymmetricMode->isChecked());
402    settings->setValue("FractionalAccuracy", spinFractionalAccuracy->value());
403    settings->setValue("RandMin", spinRandMin->value());
404    settings->setValue("RandMax", spinRandMax->value());
405    settings->setValue("FractionalRandom", cbFractionalRandom->isChecked());
406    settings->endGroup();
407
408    settings->beginGroup("Output");
[8f2427aaf0]409    settings->setValue("GenerateGraph", cbGenerateGraph->isChecked());
410    if (cbGenerateGraph->isChecked()) {
[e26679937d]411#ifndef QT_NO_PRINTER
[8f2427aaf0]412        settings->setValue("HQGraph", cbHQGraph->isChecked());
[e26679937d]413#endif
[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        }
420        settings->setValue("EmbedGraphIntoHTML", cbEmbedGraphIntoHTML->isChecked());
[9eb63a1598]421    }
422    settings->setValue("ShowMatrix", cbShowMatrix->isChecked());
423    settings->setValue("UseShowMatrixLimit", cbShowMatrix->isChecked() && cbCitiesLimit->isChecked());
424    if (cbCitiesLimit->isChecked())
425        settings->setValue("ShowMatrixLimit", spinCitiesLimit->value());
426    settings->setValue("ScrollToEnd", cbScrollToEnd->isChecked());
[a09f31733a]427    if (_fontChanged)
[9eb63a1598]428        settings->setValue("Font", font);
[a09f31733a]429    if (_colorChanged)
430        settings->setValue("Colors/Text", textColor.name());
[9eb63a1598]431    settings->endGroup();
432    QDialog::accept();
[1babbd6ba3]433}
434
[a09f31733a]435void SettingsDialog::buttonTextColorClicked()
[1babbd6ba3]436{
[a09f31733a]437QColor color = QColorDialog::getColor(this->textColor,this);
438    if (color.isValid() && (this->textColor != color)) {
439        this->textColor = color;
440        _colorChanged = true;
[9eb63a1598]441    }
[1babbd6ba3]442}
443
444void SettingsDialog::buttonFontClicked()
445{
446bool ok;
[a09f31733a]447QFont font = QFontDialog::getFont(&ok, this->font, this);
[9eb63a1598]448    if (ok && (this->font != font)) {
449        this->font = font;
[a09f31733a]450        QFont f = font;
451        f.setPointSize(labelFontExample->font().pointSize());
452        labelFontExample->setFont(f);
453        labelFontExample->setText(font.family());
454        _fontChanged = true;
[9eb63a1598]455    }
[1babbd6ba3]456}
457
[97e90f9be6]458#ifdef Q_WS_WINCE_WM
[1babbd6ba3]459void SettingsDialog::desktopResized(int screen)
460{
[9eb63a1598]461    if (screen != 0)
462        return;
[1babbd6ba3]463
464QRect availableGeometry = QApplication::desktop()->availableGeometry(0);
[9eb63a1598]465    if (currentGeometry != availableGeometry) {
466        QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
467        /*!
468         * \hack HACK: This hack checks whether \link QDesktopWidget::availableGeometry() availableGeometry()\endlink's \c top + \c hegiht = \link QDesktopWidget::screenGeometry() screenGeometry()\endlink's \c height.
469         *  If \c true, the window gets maximized. If we used \c setGeometry() in this case, the bottom of the
470         *  window would end up being behind the soft buttons. Is this a bug in Qt or Windows Mobile?
471         */
472        if ((availableGeometry.top() + availableGeometry.height()) == QApplication::desktop()->screenGeometry().height()) {
473            setWindowState(windowState() | Qt::WindowMaximized);
474        } else {
475            if (windowState() & Qt::WindowMaximized)
476                setWindowState(windowState() ^ Qt::WindowMaximized);
477            setGeometry(availableGeometry);
478        }
479        currentGeometry = availableGeometry;
480        QApplication::restoreOverrideCursor();
481    }
[1babbd6ba3]482}
483
484void SettingsDialog::showEvent(QShowEvent *ev)
485{
[9eb63a1598]486    desktopResized(0);
[1babbd6ba3]487
[9eb63a1598]488    QWidget::showEvent(ev);
[1babbd6ba3]489}
[97e90f9be6]490#endif // Q_WS_WINCE_WM
[1babbd6ba3]491
492void SettingsDialog::spinRandMinValueChanged(int val) {
[9eb63a1598]493    spinRandMax->setMinimum(val);
[1babbd6ba3]494}
495
[9adbc413c7]496#if !defined(QT_NO_STATUSTIP) && !defined(HANDHELD)
[1babbd6ba3]497bool SettingsDialog::event(QEvent *ev)
498{
[9eb63a1598]499    // Checking for StatusTip event and if tip text is not empty string
500    // setting it as text of the dialog hint label. Otherwise, setting
501    // dialog hint label text to own status tip text.
502    if (ev->type() == QEvent::StatusTip) {
[1babbd6ba3]503QString tip = static_cast<QStatusTipEvent *>(ev)->tip();
[9eb63a1598]504        if (tip.length() != 0)
505            labelHint->setText(tip);
506        else
507            labelHint->setText(labelHint->statusTip());
508        return true;
509    } else
510        return QDialog::event(ev);
[1babbd6ba3]511}
512#endif // HANDHELD
Note: See TracBrowser for help on using the repository browser.