symbianunittestui/qt/dialogsettings.cpp
changeset 2 453d490c84a5
parent 1 753e33780645
child 3 6952856dc269
equal deleted inserted replaced
1:753e33780645 2:453d490c84a5
     1 /*
       
     2  * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
       
     3  * All rights reserved.
       
     4  * This component and the accompanying materials are made available
       
     5  * under the terms of "Eclipse Public License v1.0"
       
     6  * which accompanies this distribution, and is available
       
     7  * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8  *
       
     9  * Initial Contributors:
       
    10  * Nokia Corporation - initial contribution.
       
    11  *
       
    12  * Contributors:
       
    13  *
       
    14  * Description: Dialog class to set options when running tests.
       
    15  *
       
    16  */
       
    17 
       
    18 #include <QCheckBox>
       
    19 #include <QLabel>
       
    20 #include <QLineEdit>
       
    21 #include <QComboBox>
       
    22 #include <QPushButton>
       
    23 #include <QHBoxLayout>
       
    24 #include <QVBoxLayout>
       
    25 #include "dialogsettings.h"
       
    26 #include "settings.h"
       
    27 
       
    28 static const QString FORMAT_HTML = "html";
       
    29 static const QString FORMAT_XML = "xml";
       
    30 static const QString FORMAT_TEXT = "txt";
       
    31 
       
    32 static const QString WIN_TITLE = "Settings";
       
    33 
       
    34 static const QString TXT_TIMEOUT = "Timeout";
       
    35 static const QString TXT_TIMEOUTUNIT = "second(s)";
       
    36 static const int DEFAULT_TIMEOUT = 30;
       
    37 
       
    38 static const QString TXT_FORMAT = "Output Format";
       
    39 
       
    40 static const QString TXT_MEMSIM = "Simulate Mem Allocation Failure";
       
    41 
       
    42 static const QString TXT_SAVE = "Save";
       
    43 static const QString TXT_CANCEL = "Cancel";
       
    44 
       
    45 DialogSettings::DialogSettings(QWidget* parent) :
       
    46     QDialog(parent)
       
    47     {
       
    48     setContextMenuPolicy(Qt::NoContextMenu);
       
    49     setWindowTitle(WIN_TITLE);
       
    50     savedSettings = new Settings(DEFAULT_TIMEOUT, false, FORMAT_HTML);
       
    51     load();
       
    52     }
       
    53 
       
    54 DialogSettings::~DialogSettings()
       
    55     {
       
    56     }
       
    57 
       
    58 void DialogSettings::restoreSettings()
       
    59     {
       
    60     bool timoutChanged = savedSettings->timeout != DEFAULT_TIMEOUT;
       
    61     chkBoxTimeout->setChecked(timoutChanged);
       
    62     lineEditTimeout->setEnabled(timoutChanged);
       
    63     lineEditTimeout->setText(tr("%1").arg(savedSettings->timeout));
       
    64     bool outputFormatChanged =
       
    65             savedSettings->outputFormat.compare(FORMAT_HTML) != 0;
       
    66     chkBoxOutputFormat->setChecked(outputFormatChanged);
       
    67     comboBoxOutputFormat->setEnabled(outputFormatChanged);
       
    68     comboBoxOutputFormat->setCurrentIndex(listFormats.indexOf(
       
    69             savedSettings->outputFormat));
       
    70     chkBoxMemAllocFailureSim->setChecked(savedSettings->memAllocFailureSim);
       
    71     btnSave->setEnabled(false);
       
    72     }
       
    73 
       
    74 void DialogSettings::createTimeoutSettings()
       
    75     {
       
    76     chkBoxTimeout = new QCheckBox(TXT_TIMEOUT, this);
       
    77     lineEditTimeout = new QLineEdit(tr("%1").arg(DEFAULT_TIMEOUT), this);
       
    78     lineEditTimeout->setEnabled(false);
       
    79     labelTimeoutUnit = new QLabel(TXT_TIMEOUTUNIT, this);
       
    80     }
       
    81 
       
    82 void DialogSettings::setupTimeoutSettingsEventHandlers()
       
    83     {
       
    84     connect(chkBoxTimeout, SIGNAL(stateChanged(int)), this,
       
    85             SLOT(setLineEditTimeoutEnabled(int)));
       
    86     connect(lineEditTimeout, SIGNAL(textChanged(const QString&)), this,
       
    87             SLOT(changeText(const QString&)));
       
    88     }
       
    89 
       
    90 void DialogSettings::createOutputFormatSettings()
       
    91     {
       
    92     chkBoxOutputFormat = new QCheckBox(TXT_FORMAT, this);
       
    93     comboBoxOutputFormat = new QComboBox(this);
       
    94     listFormats << FORMAT_HTML << FORMAT_XML << FORMAT_TEXT;
       
    95     comboBoxOutputFormat->addItems(listFormats);
       
    96     comboBoxOutputFormat->setEnabled(false);
       
    97     }
       
    98 
       
    99 void DialogSettings::setupOutputFormatSettingsEventHandlers()
       
   100     {
       
   101     connect(chkBoxOutputFormat, SIGNAL(stateChanged(int)), this,
       
   102             SLOT(setComboxFormatEnabled(int)));
       
   103     connect(comboBoxOutputFormat, SIGNAL(currentIndexChanged(int)), this, SLOT(changeIndex(int)));
       
   104     }
       
   105 
       
   106 void DialogSettings::createMemSimSettings()
       
   107     {
       
   108     chkBoxMemAllocFailureSim = new QCheckBox(TXT_MEMSIM, this);
       
   109     }
       
   110 
       
   111 void DialogSettings::setupMemSimSettingsEventHandlers()
       
   112     {
       
   113     connect(chkBoxMemAllocFailureSim, SIGNAL(stateChanged(int)), this,
       
   114             SLOT(setMemAllocFailureSim(int)));
       
   115     }
       
   116 
       
   117 void DialogSettings::createButtons()
       
   118     {
       
   119     btnSave = new QPushButton(TXT_SAVE, this);
       
   120     btnCancel = new QPushButton(TXT_CANCEL, this);
       
   121     btnSave->setEnabled(false);
       
   122     }
       
   123 
       
   124 void DialogSettings::setupButtonsEventHandlers()
       
   125     {
       
   126     connect(btnCancel, SIGNAL(clicked()), this, SLOT(close()));
       
   127     connect(btnSave, SIGNAL(clicked()), this, SLOT(saveSettings()));
       
   128     }
       
   129 
       
   130 void DialogSettings::load()
       
   131     {
       
   132     createTimeoutSettings();
       
   133     setupTimeoutSettingsEventHandlers();
       
   134     createOutputFormatSettings();
       
   135     setupOutputFormatSettingsEventHandlers();
       
   136     createMemSimSettings();
       
   137     setupMemSimSettingsEventHandlers();
       
   138     createButtons();
       
   139     setupButtonsEventHandlers();
       
   140 
       
   141     setLayout();
       
   142     }
       
   143 
       
   144 void DialogSettings::setLayout()
       
   145     {
       
   146     QVBoxLayout* mainLayout = new QVBoxLayout(this);
       
   147     // :( should check NULL pointer.
       
   148     mainLayout->addWidget(setTimeoutCtlsLayout());
       
   149     mainLayout->addWidget(setOutputCtlsLayout());
       
   150     mainLayout->addWidget(setMemAllocFailureSimCtrlLayout());
       
   151     mainLayout->addWidget(setButtonsLayout());
       
   152     }
       
   153 
       
   154 QWidget* DialogSettings::setTimeoutCtlsLayout()
       
   155     {
       
   156     QWidget* timeoutLayoutWidget = new QWidget(this);
       
   157     QHBoxLayout* layout = new QHBoxLayout(timeoutLayoutWidget);
       
   158     layout->addWidget(chkBoxTimeout);
       
   159     layout->addWidget(lineEditTimeout);
       
   160     layout->addWidget(labelTimeoutUnit);
       
   161     timeoutLayoutWidget->setLayout(layout);
       
   162     return timeoutLayoutWidget;
       
   163     }
       
   164 
       
   165 QWidget* DialogSettings::setOutputCtlsLayout()
       
   166     {
       
   167     QWidget* formatLayoutWidget = new QWidget(this);
       
   168     QHBoxLayout* layout = new QHBoxLayout(formatLayoutWidget);
       
   169     layout->addWidget(chkBoxOutputFormat);
       
   170     layout->addWidget(comboBoxOutputFormat);
       
   171     formatLayoutWidget->setLayout(layout);
       
   172     return formatLayoutWidget;
       
   173     }
       
   174 QWidget* DialogSettings::setMemAllocFailureSimCtrlLayout()
       
   175     {
       
   176     QWidget* memSimLayoutWidget = new QWidget(this);
       
   177     QHBoxLayout* layout = new QHBoxLayout(memSimLayoutWidget);
       
   178     layout->addWidget(chkBoxMemAllocFailureSim);
       
   179     memSimLayoutWidget->setLayout(layout);
       
   180     return memSimLayoutWidget;
       
   181     }
       
   182 
       
   183 QWidget* DialogSettings::setButtonsLayout()
       
   184     {
       
   185     QWidget* btnLayoutWidget = new QWidget(this);
       
   186     QHBoxLayout* layout = new QHBoxLayout(btnLayoutWidget);
       
   187     layout->addWidget(btnSave);
       
   188     layout->addWidget(btnCancel);
       
   189     btnLayoutWidget->setLayout(layout);
       
   190     return btnLayoutWidget;
       
   191     }
       
   192 
       
   193 void DialogSettings::setBtnSaveEnabled()
       
   194     {
       
   195     int timeout;
       
   196     if (getTimeout(&timeout))
       
   197         {
       
   198         Settings curSettings(timeout,
       
   199                 chkBoxMemAllocFailureSim->checkState() == Qt::Checked,
       
   200                 comboBoxOutputFormat->currentText());
       
   201 
       
   202         btnSave->setEnabled(!savedSettings->isEqual(curSettings));
       
   203         }
       
   204     }
       
   205 
       
   206 void DialogSettings::setLineEditTimeoutEnabled(int chkState)
       
   207     {
       
   208     lineEditTimeout->setEnabled(chkState == Qt::Checked);
       
   209     if (!lineEditTimeout->isEnabled())
       
   210         {
       
   211         lineEditTimeout->setText(tr("%1").arg(DEFAULT_TIMEOUT));
       
   212         }
       
   213     setBtnSaveEnabled();
       
   214     }
       
   215 
       
   216 void DialogSettings::setComboxFormatEnabled(int chkState)
       
   217     {
       
   218     comboBoxOutputFormat->setEnabled(chkState == Qt::Checked);
       
   219     if (!comboBoxOutputFormat->isEnabled())
       
   220         {
       
   221         comboBoxOutputFormat->setCurrentIndex(
       
   222                 listFormats.indexOf(FORMAT_HTML));
       
   223         }
       
   224     setBtnSaveEnabled();
       
   225     }
       
   226 
       
   227 void DialogSettings::setMemAllocFailureSim(int /*chkState*/)
       
   228     {
       
   229     setBtnSaveEnabled();
       
   230     }
       
   231 
       
   232 void DialogSettings::changeIndex(int /*index*/)
       
   233     {
       
   234     setBtnSaveEnabled();
       
   235     }
       
   236 
       
   237 void DialogSettings::changeText(const QString& /*text*/)
       
   238     {
       
   239     setBtnSaveEnabled();
       
   240     }
       
   241 
       
   242 void DialogSettings::saveSettings()
       
   243     {
       
   244     int timeout;
       
   245     if (getTimeout(&timeout))
       
   246         {
       
   247         savedSettings->timeout = timeout;
       
   248         savedSettings->memAllocFailureSim = chkBoxMemAllocFailureSim->checkState() == Qt::Checked;
       
   249         savedSettings->outputFormat = comboBoxOutputFormat->currentText();
       
   250         emit this->settingsSaved(savedSettings);
       
   251         }
       
   252     this->close();
       
   253     }
       
   254 
       
   255 bool DialogSettings::getTimeout(int* timeout)
       
   256     {
       
   257     bool ok;
       
   258     *timeout = lineEditTimeout->text().toInt(&ok, 0);
       
   259     return ok;
       
   260     }