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
Line 
1/*
2 *  TSPSG: TSP Solver and Generator
3 *  Copyright (C) 2007-2012 Oleksii Serdiuk <contacts[at]oleksii[dot]name>
4 *
5 *  $Id: $Format:%h %ai %an$ $
6 *  $URL: http://tspsg.info/ $
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)
33    : QDialog(parent), _fontChanged(false), _colorChanged(false), _translucency(0)
34{
35    setupUi(this);
36
37    setWindowIcon(GET_ICON("preferences-system"));
38
39    buttonBox->button(QDialogButtonBox::Ok)->setIcon(GET_ICON("dialog-ok"));
40#ifndef QT_NO_STATUSTIP
41    buttonBox->button(QDialogButtonBox::Ok)->setStatusTip(tr("Save new preferences"));
42#endif
43    buttonBox->button(QDialogButtonBox::Ok)->setCursor(QCursor(Qt::PointingHandCursor));
44    buttonBox->button(QDialogButtonBox::Cancel)->setIcon(GET_ICON("dialog-cancel"));
45#ifndef QT_NO_STATUSTIP
46    buttonBox->button(QDialogButtonBox::Cancel)->setStatusTip(tr("Close without saving preferences"));
47#endif
48    buttonBox->button(QDialogButtonBox::Cancel)->setCursor(QCursor(Qt::PointingHandCursor));
49
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"));
55    buttonFont->setIcon(GET_ICON("preferences-desktop-font"));
56    buttonHelp->setIcon(GET_ICON("help-hint"));
57
58QPalette p = bgWhite->palette();
59    p.setColor(QPalette::Window, p.color(QPalette::Base));
60    bgWhite->setPalette(p);
61
62    p = lineHorizontal->palette();
63    p.setColor(QPalette::Window, p.color(QPalette::Text));
64    lineHorizontal->setPalette(p);
65
66// Layout helpers
67QBoxLayout *box;
68QHBoxLayout *hbox;
69#ifndef QT_NO_PRINTER
70    cbHQGraph = new QCheckBox(bgWhite);
71    cbHQGraph->setObjectName("cbHQGraph");
72#ifndef QT_NO_STATUSTIP
73    cbHQGraph->setStatusTip(tr("Higher quality graph looks much better when printing but uglier on the screen"));
74#endif // QT_NO_STATUSTIP
75    cbHQGraph->setText(tr("Draw solution graph in higher quality"));
76    cbHQGraph->setCursor(QCursor(Qt::PointingHandCursor));
77
78    box = static_cast<QBoxLayout *>(tabOutputGeneral->layout());
79    hbox = new QHBoxLayout();
80    hbox->addSpacing(10);
81    hbox->addWidget(cbHQGraph);
82    box->insertLayout(box->indexOf(cbGenerateGraph) + 3, hbox);
83    connect(cbGenerateGraph, SIGNAL(toggled(bool)), cbHQGraph, SLOT(setEnabled(bool)));
84#endif
85
86    if (hasUpdater()) {
87        cbCheck4Updates = new QCheckBox(bgWhite);
88        cbCheck4Updates->setObjectName("cbCheck4Updates");
89#ifndef QT_NO_STATUSTIP
90        cbCheck4Updates->setStatusTip(tr("Automatically check for updates at the given interval"));
91#endif // QT_NO_STATUSTIP
92        cbCheck4Updates->setText(tr("Check for updates every"));
93        cbCheck4Updates->setCursor(QCursor(Qt::PointingHandCursor));
94
95        spinUpdateCheckInterval = new QSpinBox(bgWhite);
96        spinUpdateCheckInterval->setObjectName("spinUpdateCheckInterval");
97#ifndef QT_NO_STATUSTIP
98        spinUpdateCheckInterval->setStatusTip(tr("Minimal interval at which to check for updates"));
99#endif // QT_NO_STATUSTIP
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;
115
116#ifdef HANDHELD
117QVBoxLayout *vbox1; // Layout helper
118
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.
122QScrollArea *scrollArea = new QScrollArea(this);
123    scrollArea->setFrameShape(QFrame::NoFrame);
124    scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
125    scrollArea->setWidgetResizable(true);
126    scrollArea->setWidget(bgWhite);
127
128    bgWhite->layout()->setMargin(0);
129
130#ifdef Q_OS_SYMBIAN
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
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);
144#else // HANDHELD
145QVBoxLayout *vbox; // Layout helper
146
147#ifndef HANDHELD
148    if (QtWin::isCompositionEnabled()) {
149        cbUseTranslucency = new QCheckBox(bgWhite);
150        cbUseTranslucency->setObjectName("cbUseTranslucency");
151#ifndef QT_NO_STATUSTIP
152        cbUseTranslucency->setStatusTip(tr("Make Main Window background translucent"));
153#endif // QT_NO_STATUSTIP
154        cbUseTranslucency->setText(tr("Use translucency effects"));
155        cbUseTranslucency->setCursor(QCursor(Qt::PointingHandCursor));
156    }
157#endif // HANDHELD
158
159    cbSaveState = new QCheckBox(bgWhite);
160    cbSaveState->setObjectName("cbSaveState");
161#ifndef QT_NO_STATUSTIP
162    cbSaveState->setStatusTip(tr("Restore main window state and position on application restart"));
163#endif // QT_NO_STATUSTIP
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);
179    labelHint->setMinimumSize(QSize(250, 28));
180    labelHint->setMaximumSize(QSize(QWIDGETSIZE_MAX, 28));
181    labelHint->setTextFormat(Qt::PlainText);
182//      labelHint->setAlignment(Qt::AlignLeft | Qt::AlignTop);
183    labelHint->setWordWrap(true);
184#ifndef QT_NO_STATUSTIP
185    labelHint->setStatusTip(tr("Hover mouse pointer over dialog elements to get additional help"));
186#endif // QT_NO_STATUSTIP
187
188    lineVertical = new QFrame(this);
189    lineVertical->setObjectName("lineVertical");
190    lineVertical->setFrameShadow(QFrame::Plain);
191    lineVertical->setFrameShape(QFrame::VLine);
192    lineVertical->setLineWidth(2);
193
194    // Top line
195    hbox = new QHBoxLayout();
196    hbox->addWidget(imgIcon);
197    hbox->addWidget(lineVertical);
198    hbox->addWidget(bgWhite);
199
200    box = static_cast<QBoxLayout *>(tabGeneral->layout());
201    box->insertWidget(box->indexOf(cbUseNativeDialogs) + 1, cbSaveState);
202#ifndef HANDHELD
203    if (QtWin::isCompositionEnabled())
204        box->insertWidget(box->indexOf(cbUseNativeDialogs) + 1, cbUseTranslucency);
205#endif // HANDHELD
206
207    // Inserting label for hints to the bottom part (with grey bg)
208    buttons->insertWidget(buttons->indexOf(buttonHelp) + 1, labelHint, 1);
209
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);
217#endif // HANDHELD
218
219#ifdef Q_OS_WINCE_WM
220    // We need to react to SIP show/hide and resize the window appropriately
221    connect(QApplication::desktop(), SIGNAL(workAreaResized(int)), SLOT(desktopResized(int)));
222#endif // Q_OS_WINCE_WM
223    connect(spinRandMin, SIGNAL(valueChanged(int)), SLOT(spinRandMinValueChanged(int)));
224    connect(buttonFont, SIGNAL(clicked()), SLOT(buttonFontClicked()));
225    connect(buttonTextColor, SIGNAL(clicked()), SLOT(buttonTextColorClicked()));
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()));
230    setWindowFlags(windowFlags() ^ Qt::WindowContextHelpButtonHint);
231#if !defined(QT_NO_STATUSTIP) && !defined(HANDHELD)
232    // Setting initial text of dialog hint label to own status tip text.
233    labelHint->setText(labelHint->statusTip());
234#endif // HANDHELD
235
236    settings = initSettings(this);
237    settings->remove("SettingsReset");
238
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());
242#ifndef HANDHELD
243    if (QtWin::isCompositionEnabled())
244        cbUseTranslucency->setChecked(settings->value("UseTranslucency", DEF_USE_TRANSLUCENCY).toBool());
245#endif // HANDHELD
246#ifndef HANDHELD
247    cbSaveState->setChecked(settings->value("SavePos", DEF_SAVEPOS).toBool());
248#endif // HANDHELD
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");
268    cbGenerateGraph->setChecked(settings->value("GenerateGraph", DEF_GENERATE_GRAPH).toBool());
269
270    spinGraphWidth->setEnabled(cbGenerateGraph->isChecked());
271    spinGraphWidth->setValue(settings->value("GraphWidth", DEF_GRAPH_WIDTH).toDouble());
272
273#if !defined(NOSVG) && (QT_VERSION >= QT_VERSION_CHECK(4,5,0))
274    comboGraphImageFormat->addItem("svg");
275#endif
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).
279QStringList whitelist;
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));
289    labelGraphImageFormat->setEnabled(cbGenerateGraph->isChecked());
290    comboGraphImageFormat->setEnabled(cbGenerateGraph->isChecked());
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());
298    cbEmbedGraphIntoHTML->setEnabled(cbGenerateGraph->isChecked());
299    cbEmbedGraphIntoHTML->setChecked(settings->value("EmbedGraphIntoHTML", DEF_EMBED_GRAPH_INTO_HTML).toBool());
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)));
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());
313    borderColor = QColor(settings->value("Colors/TableBorder", DEF_TABLE_COLOR).toString());
314//    bgColor = QColor(settings->value("Colors/Background", DEF_BACKGROUND_COLOR).toString());
315    settings->endGroup();
316
317    QFont f = font;
318    f.setPointSize(labelFontExample->font().pointSize());
319    labelFontExample->setFont(f);
320    labelFontExample->setText(font.family());
321
322    setBgColor(boxTextColor, textColor);
323    setBgColor(boxSelectedColor, selColor);
324    setBgColor(boxAlternateColor, altColor);
325    setBgColor(boxBorderColor, borderColor);
326//    setBgColor(boxBgColor, bgColor);
327
328#ifdef HANDHELD
329    setWindowState(Qt::WindowMaximized);
330#else
331    adjustSize();
332#endif // Q_OS_WINCE_WM
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{
341    return _colorChanged;
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{
350    return _fontChanged;
351}
352
353/*!
354 * \brief Indicates whether and how the translucency setting was changed
355 * \retval -1 the translucency was \em disabled.
356 * \retval  0 the translucency <em>didn't change</em>.
357 * \retval  1 the translucency was \em enabled.
358 */
359qint8 SettingsDialog::translucencyChanged() const
360{
361    return _translucency;
362}
363
364/* Privates **********************************************************/
365
366void SettingsDialog::accept()
367{
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) {
370            _fontChanged = (font != QFont(DEF_FONT_FACE, DEF_FONT_SIZE));
371            _colorChanged = (textColor != DEF_TEXT_COLOR);
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());
383#ifndef HANDHELD
384    if (QtWin::isCompositionEnabled()) {
385bool old = settings->value("UseTranslucency", DEF_USE_TRANSLUCENCY).toBool();
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());
393#endif // HANDHELD
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");
411    settings->setValue("GenerateGraph", cbGenerateGraph->isChecked());
412    if (cbGenerateGraph->isChecked()) {
413        settings->setValue("GraphWidth", spinGraphWidth->value());
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#ifndef QT_NO_PRINTER
421        settings->setValue("HQGraph", cbHQGraph->isChecked());
422#endif
423        settings->setValue("EmbedGraphIntoHTML", cbEmbedGraphIntoHTML->isChecked());
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());
430    if (_fontChanged)
431        settings->setValue("Font", font);
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    }
456    settings->endGroup();
457    QDialog::accept();
458}
459
460void SettingsDialog::pickColor(QColor &where)
461{
462    QColor color = QColorDialog::getColor(where, this);
463    if (color.isValid() && (where != color)) {
464        where = color;
465        _colorChanged = true;
466    }
467}
468
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
506void SettingsDialog::buttonFontClicked()
507{
508bool ok;
509QFont font = QFontDialog::getFont(&ok, this->font, this);
510    if (ok && (this->font != font)) {
511        this->font = font;
512        QFont f = font;
513        f.setPointSize(labelFontExample->font().pointSize());
514        labelFontExample->setFont(f);
515        labelFontExample->setText(font.family());
516        _fontChanged = true;
517    }
518}
519
520#ifdef Q_OS_WINCE_WM
521void SettingsDialog::desktopResized(int screen)
522{
523    if (screen != 0)
524        return;
525
526QRect availableGeometry = QApplication::desktop()->availableGeometry(0);
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    }
544}
545
546void SettingsDialog::showEvent(QShowEvent *ev)
547{
548    desktopResized(0);
549
550    QWidget::showEvent(ev);
551}
552#endif // Q_OS_WINCE_WM
553
554void SettingsDialog::spinRandMinValueChanged(int val) {
555    spinRandMax->setMinimum(val);
556}
557
558#if !defined(QT_NO_STATUSTIP) && !defined(HANDHELD)
559bool SettingsDialog::event(QEvent *ev)
560{
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) {
565QString tip = static_cast<QStatusTipEvent *>(ev)->tip();
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);
573}
574#endif // HANDHELD
Note: See TracBrowser for help on using the repository browser.