testfwuis/symbianunittestui/qt/dialogsettings.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 17 Sep 2010 08:58:49 +0300
changeset 2 453d490c84a5
permissions -rw-r--r--
Revision: 201037

/*
 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
 * which accompanies this distribution, and is available
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
 *
 * Initial Contributors:
 * Nokia Corporation - initial contribution.
 *
 * Contributors:
 *
 * Description: Dialog class to set options when running tests.
 *
 */

#include <QCheckBox>
#include <QLabel>
#include <QLineEdit>
#include <QComboBox>
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include "dialogsettings.h"
#include "settings.h"

static const QString FORMAT_HTML = "html";
static const QString FORMAT_XML = "xml";
static const QString FORMAT_TEXT = "txt";

static const QString WIN_TITLE = "Settings";

static const QString TXT_TIMEOUT = "Timeout";
static const QString TXT_TIMEOUTUNIT = "second(s)";
static const int DEFAULT_TIMEOUT = 30;

static const QString TXT_FORMAT = "Output Format";

static const QString TXT_MEMSIM = "Simulate Mem Allocation Failure";

static const QString TXT_SAVE = "Save";
static const QString TXT_CANCEL = "Cancel";

DialogSettings::DialogSettings(QWidget* parent) :
    QDialog(parent)
    {
    setContextMenuPolicy(Qt::NoContextMenu);
    setWindowTitle(WIN_TITLE);
    savedSettings = new Settings(DEFAULT_TIMEOUT, false, FORMAT_HTML);
    load();
    }

DialogSettings::~DialogSettings()
    {
    }

void DialogSettings::restoreSettings()
    {
    bool timoutChanged = savedSettings->timeout != DEFAULT_TIMEOUT;
    chkBoxTimeout->setChecked(timoutChanged);
    lineEditTimeout->setEnabled(timoutChanged);
    lineEditTimeout->setText(tr("%1").arg(savedSettings->timeout));
    bool outputFormatChanged =
            savedSettings->outputFormat.compare(FORMAT_HTML) != 0;
    chkBoxOutputFormat->setChecked(outputFormatChanged);
    comboBoxOutputFormat->setEnabled(outputFormatChanged);
    comboBoxOutputFormat->setCurrentIndex(listFormats.indexOf(
            savedSettings->outputFormat));
    chkBoxMemAllocFailureSim->setChecked(savedSettings->memAllocFailureSim);
    btnSave->setEnabled(false);
    }

void DialogSettings::createTimeoutSettings()
    {
    chkBoxTimeout = new QCheckBox(TXT_TIMEOUT, this);
    lineEditTimeout = new QLineEdit(tr("%1").arg(DEFAULT_TIMEOUT), this);
    lineEditTimeout->setEnabled(false);
    labelTimeoutUnit = new QLabel(TXT_TIMEOUTUNIT, this);
    }

void DialogSettings::setupTimeoutSettingsEventHandlers()
    {
    connect(chkBoxTimeout, SIGNAL(stateChanged(int)), this,
            SLOT(setLineEditTimeoutEnabled(int)));
    connect(lineEditTimeout, SIGNAL(textChanged(const QString&)), this,
            SLOT(changeText(const QString&)));
    }

void DialogSettings::createOutputFormatSettings()
    {
    chkBoxOutputFormat = new QCheckBox(TXT_FORMAT, this);
    comboBoxOutputFormat = new QComboBox(this);
    listFormats << FORMAT_HTML << FORMAT_XML << FORMAT_TEXT;
    comboBoxOutputFormat->addItems(listFormats);
    comboBoxOutputFormat->setEnabled(false);
    }

void DialogSettings::setupOutputFormatSettingsEventHandlers()
    {
    connect(chkBoxOutputFormat, SIGNAL(stateChanged(int)), this,
            SLOT(setComboxFormatEnabled(int)));
    connect(comboBoxOutputFormat, SIGNAL(currentIndexChanged(int)), this, SLOT(changeIndex(int)));
    }

void DialogSettings::createMemSimSettings()
    {
    chkBoxMemAllocFailureSim = new QCheckBox(TXT_MEMSIM, this);
    }

void DialogSettings::setupMemSimSettingsEventHandlers()
    {
    connect(chkBoxMemAllocFailureSim, SIGNAL(stateChanged(int)), this,
            SLOT(setMemAllocFailureSim(int)));
    }

void DialogSettings::createButtons()
    {
    btnSave = new QPushButton(TXT_SAVE, this);
    btnCancel = new QPushButton(TXT_CANCEL, this);
    btnSave->setEnabled(false);
    }

void DialogSettings::setupButtonsEventHandlers()
    {
    connect(btnCancel, SIGNAL(clicked()), this, SLOT(close()));
    connect(btnSave, SIGNAL(clicked()), this, SLOT(saveSettings()));
    }

void DialogSettings::load()
    {
    createTimeoutSettings();
    setupTimeoutSettingsEventHandlers();
    createOutputFormatSettings();
    setupOutputFormatSettingsEventHandlers();
    createMemSimSettings();
    setupMemSimSettingsEventHandlers();
    createButtons();
    setupButtonsEventHandlers();

    setLayout();
    }

void DialogSettings::setLayout()
    {
    QVBoxLayout* mainLayout = new QVBoxLayout(this);
    // :( should check NULL pointer.
    mainLayout->addWidget(setTimeoutCtlsLayout());
    mainLayout->addWidget(setOutputCtlsLayout());
    mainLayout->addWidget(setMemAllocFailureSimCtrlLayout());
    mainLayout->addWidget(setButtonsLayout());
    }

QWidget* DialogSettings::setTimeoutCtlsLayout()
    {
    QWidget* timeoutLayoutWidget = new QWidget(this);
    QHBoxLayout* layout = new QHBoxLayout(timeoutLayoutWidget);
    layout->addWidget(chkBoxTimeout);
    layout->addWidget(lineEditTimeout);
    layout->addWidget(labelTimeoutUnit);
    timeoutLayoutWidget->setLayout(layout);
    return timeoutLayoutWidget;
    }

QWidget* DialogSettings::setOutputCtlsLayout()
    {
    QWidget* formatLayoutWidget = new QWidget(this);
    QHBoxLayout* layout = new QHBoxLayout(formatLayoutWidget);
    layout->addWidget(chkBoxOutputFormat);
    layout->addWidget(comboBoxOutputFormat);
    formatLayoutWidget->setLayout(layout);
    return formatLayoutWidget;
    }
QWidget* DialogSettings::setMemAllocFailureSimCtrlLayout()
    {
    QWidget* memSimLayoutWidget = new QWidget(this);
    QHBoxLayout* layout = new QHBoxLayout(memSimLayoutWidget);
    layout->addWidget(chkBoxMemAllocFailureSim);
    memSimLayoutWidget->setLayout(layout);
    return memSimLayoutWidget;
    }

QWidget* DialogSettings::setButtonsLayout()
    {
    QWidget* btnLayoutWidget = new QWidget(this);
    QHBoxLayout* layout = new QHBoxLayout(btnLayoutWidget);
    layout->addWidget(btnSave);
    layout->addWidget(btnCancel);
    btnLayoutWidget->setLayout(layout);
    return btnLayoutWidget;
    }

void DialogSettings::setBtnSaveEnabled()
    {
    int timeout;
    if (getTimeout(&timeout))
        {
        Settings curSettings(timeout,
                chkBoxMemAllocFailureSim->checkState() == Qt::Checked,
                comboBoxOutputFormat->currentText());

        btnSave->setEnabled(!savedSettings->isEqual(curSettings));
        }
    }

void DialogSettings::setLineEditTimeoutEnabled(int chkState)
    {
    lineEditTimeout->setEnabled(chkState == Qt::Checked);
    if (!lineEditTimeout->isEnabled())
        {
        lineEditTimeout->setText(tr("%1").arg(DEFAULT_TIMEOUT));
        }
    setBtnSaveEnabled();
    }

void DialogSettings::setComboxFormatEnabled(int chkState)
    {
    comboBoxOutputFormat->setEnabled(chkState == Qt::Checked);
    if (!comboBoxOutputFormat->isEnabled())
        {
        comboBoxOutputFormat->setCurrentIndex(
                listFormats.indexOf(FORMAT_HTML));
        }
    setBtnSaveEnabled();
    }

void DialogSettings::setMemAllocFailureSim(int /*chkState*/)
    {
    setBtnSaveEnabled();
    }

void DialogSettings::changeIndex(int /*index*/)
    {
    setBtnSaveEnabled();
    }

void DialogSettings::changeText(const QString& /*text*/)
    {
    setBtnSaveEnabled();
    }

void DialogSettings::saveSettings()
    {
    int timeout;
    if (getTimeout(&timeout))
        {
        savedSettings->timeout = timeout;
        savedSettings->memAllocFailureSim = chkBoxMemAllocFailureSim->checkState() == Qt::Checked;
        savedSettings->outputFormat = comboBoxOutputFormat->currentText();
        emit this->settingsSaved(savedSettings);
        }
    this->close();
    }

bool DialogSettings::getTimeout(int* timeout)
    {
    bool ok;
    *timeout = lineEditTimeout->text().toInt(&ok, 0);
    return ok;
    }