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 } |
|