|
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: |
|
15 * |
|
16 */ |
|
17 |
|
18 #include "settingsview.h" |
|
19 |
|
20 #include <HbAction> |
|
21 #include <HbToolBar> |
|
22 #include <HbDataForm> |
|
23 #include <HbDataFormModel> |
|
24 #include <HbDataFormModelItem> |
|
25 #include <HbDataFormViewItem> |
|
26 #include <HbLineEdit> |
|
27 #include <HbPushButton> |
|
28 |
|
29 #include "enginewrapper.h" |
|
30 |
|
31 const QStringList PRIORITY_ITEMS = QStringList() << SettingsView::tr("Much less") << |
|
32 SettingsView::tr("Less") << SettingsView::tr("Normal") << |
|
33 SettingsView::tr("More") << SettingsView::tr("Much more") << |
|
34 SettingsView::tr("Real time") << SettingsView::tr("Abs. very low") << |
|
35 SettingsView::tr("Abs. low") << SettingsView::tr("Abs background") << |
|
36 SettingsView::tr("Abs. foreground") << SettingsView::tr("Abs high"); |
|
37 |
|
38 const QStringList CPU_SAMPLING = QStringList() << SettingsView::tr("CPU Time") << |
|
39 SettingsView::tr("NOPs"); |
|
40 |
|
41 const QStringList POPUP_LOCATION = QStringList() << SettingsView::tr("Top right") << |
|
42 SettingsView::tr("Bottom middle"); |
|
43 |
|
44 const QStringList POPUP_VISIBILITY = QStringList() << SettingsView::tr("On") << |
|
45 SettingsView::tr("Backgr. only") << SettingsView::tr("Off"); |
|
46 |
|
47 const QStringList SOURCES = QStringList() << SettingsView::tr("CPU") << |
|
48 SettingsView::tr("Ram") << SettingsView::tr("C:") << SettingsView::tr("D:") << |
|
49 SettingsView::tr("E:") << SettingsView::tr("F:") << SettingsView::tr("G:") << |
|
50 SettingsView::tr("H:") << SettingsView::tr("I:"); |
|
51 |
|
52 const QStringList LOG_MODES = QStringList() << SettingsView::tr("RDebug") << |
|
53 SettingsView::tr("Log file") << SettingsView::tr("RDebug & log file"); |
|
54 |
|
55 |
|
56 SettingsView::SettingsView(EngineWrapper &engine) |
|
57 : mEngine(engine), mLogFilePathItem(0) |
|
58 { |
|
59 setTitle(tr("Settings")); |
|
60 |
|
61 //create toolbar showing launch popup |
|
62 HbToolBar *toolBar = this->toolBar(); |
|
63 HbAction *actionOk = new HbAction(tr("Ok"), toolBar); |
|
64 HbAction *actionCancel = new HbAction(tr("Cancel"), toolBar); |
|
65 |
|
66 toolBar->addAction(actionOk); |
|
67 toolBar->addAction(actionCancel); |
|
68 |
|
69 //create setting form |
|
70 mSettingsForm = new HbDataForm(); |
|
71 |
|
72 //create a model class |
|
73 mModel = new HbDataFormModel(this); |
|
74 createModel(*mModel); |
|
75 load(engine.settings()); |
|
76 |
|
77 connect(mSettingsForm, SIGNAL(itemShown(const QModelIndex)), |
|
78 this, SLOT(dataItemDisplayed(const QModelIndex))); |
|
79 |
|
80 // Set created model to form |
|
81 mSettingsForm->setModel(mModel); |
|
82 setWidget(mSettingsForm); |
|
83 |
|
84 |
|
85 connect(actionOk, SIGNAL(triggered()), this, SLOT(accept())); |
|
86 connect(actionCancel, SIGNAL(triggered()), this, SLOT(reject())); |
|
87 connect(this, SIGNAL(aboutToClose()), this, SLOT(accept())); |
|
88 |
|
89 } |
|
90 |
|
91 void SettingsView::createModel(HbDataFormModel &model) |
|
92 { |
|
93 // General page |
|
94 HbDataFormModelItem *generalPage = model.appendDataFormPage(tr("General")); |
|
95 |
|
96 mHeartBeatItem = model.appendDataFormItem( |
|
97 HbDataFormModelItem::TextItem, tr("Heart beat (ms)"), generalPage); |
|
98 mHeartBeatItem->setContentWidgetData("maximum", 99999); |
|
99 mHeartBeatItem->setContentWidgetData("minimum", 0); |
|
100 mHeartBeatItem->setContentWidgetData("inputMethodHints", Qt::ImhDigitsOnly); |
|
101 |
|
102 mMaxSamplesItem = model.appendDataFormItem( |
|
103 HbDataFormModelItem::TextItem, tr("Max samples"), generalPage); |
|
104 mMaxSamplesItem->setContentWidgetData("maximum", 9999); |
|
105 mMaxSamplesItem->setContentWidgetData("minimum", 0); |
|
106 mMaxSamplesItem->setContentWidgetData("inputMethodHints", Qt::ImhDigitsOnly); |
|
107 |
|
108 mPriorityItem = model.appendDataFormItem( |
|
109 HbDataFormModelItem::RadioButtonListItem, tr("Priority"), generalPage); |
|
110 mPriorityItem->setContentWidgetData("items", PRIORITY_ITEMS); |
|
111 |
|
112 mCpuSamplingItem = model.appendDataFormItem( |
|
113 HbDataFormModelItem::RadioButtonListItem, tr("CPU sampling mode"), generalPage); |
|
114 mCpuSamplingItem->setContentWidgetData("items", CPU_SAMPLING); |
|
115 |
|
116 mKeepBacklightItem = model.appendDataFormItem( |
|
117 HbDataFormModelItem::CheckBoxItem, tr("Backlight"), generalPage); |
|
118 mKeepBacklightItem->setContentWidgetData("text", tr("Keep backlight on")); |
|
119 |
|
120 // Data popup page |
|
121 HbDataFormModelItem *dataPopupPage = model.appendDataFormPage(tr("Data popup")); |
|
122 |
|
123 mPopupVisibilityItem = model.appendDataFormItem( |
|
124 HbDataFormModelItem::RadioButtonListItem, tr("Visibility"), |
|
125 dataPopupPage); |
|
126 mPopupVisibilityItem->setContentWidgetData("items", POPUP_VISIBILITY); |
|
127 |
|
128 mPopupLocationItem = model.appendDataFormItem( |
|
129 HbDataFormModelItem::RadioButtonListItem, tr("Location"), dataPopupPage); |
|
130 mPopupLocationItem->setContentWidgetData("items", POPUP_LOCATION); |
|
131 |
|
132 mPopupSourcesItem = model.appendDataFormItem( |
|
133 HbDataFormModelItem::MultiselectionItem, tr("Sources"), dataPopupPage); |
|
134 mPopupSourcesItem->setContentWidgetData("items", SOURCES); |
|
135 |
|
136 // Graphs page |
|
137 HbDataFormModelItem *graphsPage = model.appendDataFormPage(tr("Graphs")); |
|
138 |
|
139 mVerticalBarPeriodItem = model.appendDataFormItem( |
|
140 HbDataFormModelItem::TextItem, tr("Vertical bar period (s)"), graphsPage); |
|
141 mVerticalBarPeriodItem->setContentWidgetData("maximum", 999); |
|
142 mVerticalBarPeriodItem->setContentWidgetData("minimum", 0); |
|
143 mVerticalBarPeriodItem->setContentWidgetData("inputMethodHints", Qt::ImhDigitsOnly); |
|
144 |
|
145 mGraphSourcesItem = model.appendDataFormItem( |
|
146 HbDataFormModelItem::MultiselectionItem, tr("Sources"), graphsPage); |
|
147 mGraphSourcesItem->setContentWidgetData("items", SOURCES); |
|
148 |
|
149 // Logging page |
|
150 mLogPage = model.appendDataFormPage(tr("Logging")); |
|
151 |
|
152 mLogModeItem = model.appendDataFormItem( |
|
153 HbDataFormModelItem::RadioButtonListItem, tr("Mode"), mLogPage); |
|
154 mLogModeItem->setContentWidgetData("items", LOG_MODES); |
|
155 mSettingsForm->addConnection(mLogModeItem, SIGNAL(itemSelected(int)), |
|
156 this, SLOT(logModeChanged(int))); |
|
157 |
|
158 mLogSourcesItem = model.appendDataFormItem( |
|
159 HbDataFormModelItem::MultiselectionItem, tr("Sources"), mLogPage); |
|
160 mLogSourcesItem->setContentWidgetData("items", SOURCES); |
|
161 } |
|
162 |
|
163 void SettingsView::load(const PerfMonSettings& settings) |
|
164 { |
|
165 mHeartBeatItem->setContentWidgetData("text", settings.heartBeat()); |
|
166 mMaxSamplesItem->setContentWidgetData("text", settings.maxSamples()); |
|
167 mPriorityItem->setContentWidgetData("selected", settings.priority()); |
|
168 mCpuSamplingItem->setContentWidgetData("selected", settings.cpuMode()); |
|
169 mKeepBacklightItem->setContentWidgetData("checkState", settings.keepBacklightOn() ? Qt::Checked : Qt::Unchecked); |
|
170 |
|
171 mPopupVisibilityItem->setContentWidgetData("selected", settings.dataPopupVisibility()); |
|
172 mPopupLocationItem->setContentWidgetData("selected", settings.dataPopupLocation()); |
|
173 mPopupSourcesItem->setContentWidgetData("selectedItems", |
|
174 qVariantFromValue(settings.dataPopupSources().enabledIndexes())); |
|
175 |
|
176 mVerticalBarPeriodItem->setContentWidgetData("text", settings.graphVerticalBarPeriod()); |
|
177 mGraphSourcesItem->setContentWidgetData("selectedItems", |
|
178 qVariantFromValue(settings.graphSources().enabledIndexes())); |
|
179 |
|
180 mLogModeItem->setContentWidgetData("selected", settings.loggingMode()); |
|
181 mLogFilePath = settings.loggingFilePath(); |
|
182 if (settings.loggingMode() > ELoggingModeRDebug) |
|
183 createLogFilePathItem(); |
|
184 mLogSourcesItem->setContentWidgetData("selectedItems", |
|
185 qVariantFromValue(settings.loggingSources().enabledIndexes())); |
|
186 } |
|
187 |
|
188 void SettingsView::save(PerfMonSettings& settings) |
|
189 { |
|
190 settings.setHeartBeat(mHeartBeatItem->contentWidgetData("text").toInt()); |
|
191 settings.setMaxSamples(mMaxSamplesItem->contentWidgetData("text").toInt()); |
|
192 settings.setPriority(mPriorityItem->contentWidgetData("selected").toInt()); |
|
193 settings.setCpuMode(mCpuSamplingItem->contentWidgetData("selected").toInt()); |
|
194 settings.setKeepBacklightOn(mKeepBacklightItem->contentWidgetData("checkState").toInt() == Qt::Checked); |
|
195 |
|
196 settings.setDataPopupVisibility(mPopupVisibilityItem->contentWidgetData("selected").toInt()); |
|
197 settings.setDataPopupLocation(mPopupLocationItem->contentWidgetData("selected").toInt()); |
|
198 settings.dataPopupSources().setEnabledIndexes( |
|
199 qVariantValue<QList<QVariant> >(mPopupSourcesItem->contentWidgetData("selectedItems"))); |
|
200 |
|
201 settings.setGraphVerticalBarPeriod(mVerticalBarPeriodItem->contentWidgetData("text").toInt()); |
|
202 settings.graphSources().setEnabledIndexes( |
|
203 qVariantValue<QList<QVariant> >(mGraphSourcesItem->contentWidgetData("selectedItems"))); |
|
204 |
|
205 settings.setLoggingMode(mLogModeItem->contentWidgetData("selected").toInt()); |
|
206 |
|
207 if (mLogFilePathItem) |
|
208 settings.setLoggingFilePath(mLogFilePathItem->contentWidgetData("text").toString()); |
|
209 settings.loggingSources().setEnabledIndexes( |
|
210 qVariantValue<QList<QVariant> >(mLogSourcesItem->contentWidgetData("selectedItems"))); |
|
211 } |
|
212 |
|
213 void SettingsView::dataItemDisplayed(const QModelIndex &index) |
|
214 { |
|
215 HbDataFormModelItem* modelItem = mModel->itemFromIndex(index); |
|
216 HbDataFormViewItem *viewItem = static_cast<HbDataFormViewItem*>(mSettingsForm->itemByIndex(index)); |
|
217 HbWidget *dataContentWidget = viewItem->dataItemContentWidget(); |
|
218 |
|
219 // set input method hint for edits |
|
220 // TODO: remove once setContentWidgetData works with inputMethodHints |
|
221 if (modelItem == mHeartBeatItem || |
|
222 modelItem == mMaxSamplesItem || |
|
223 modelItem == mVerticalBarPeriodItem) |
|
224 { |
|
225 HbLineEdit *edit = static_cast<HbLineEdit*>(dataContentWidget); |
|
226 edit->setInputMethodHints(Qt::ImhDigitsOnly); |
|
227 } |
|
228 } |
|
229 |
|
230 void SettingsView::logModeChanged(int index) |
|
231 { |
|
232 if (index == ELoggingModeRDebug && mLogFilePathItem) { |
|
233 removeLogFilePathItem(); |
|
234 } |
|
235 else if (index != ELoggingModeRDebug && !mLogFilePathItem) { |
|
236 createLogFilePathItem(); |
|
237 } |
|
238 } |
|
239 |
|
240 void SettingsView::createLogFilePathItem() |
|
241 { |
|
242 mLogFilePathItem = mModel->insertDataFormItem(mLogPage->indexOf(mLogModeItem) + 1, |
|
243 HbDataFormModelItem::TextItem, tr("Log file path"), mLogPage); |
|
244 mLogFilePathItem->setContentWidgetData("text", mLogFilePath); |
|
245 } |
|
246 |
|
247 void SettingsView::removeLogFilePathItem() |
|
248 { |
|
249 // we need to store current text so that it is not lost when |
|
250 // user hides and then displays "Log file path" item again. |
|
251 mLogFilePath = mLogFilePathItem->contentWidgetData("text").toString(); |
|
252 mModel->removeItem(mLogFilePathItem); |
|
253 mLogFilePathItem = 0; |
|
254 } |
|
255 |
|
256 void SettingsView::accept() |
|
257 { |
|
258 save(mEngine.settings()); |
|
259 mEngine.updateSettings(); |
|
260 emit finished(true); |
|
261 } |
|
262 |
|
263 void SettingsView::reject() |
|
264 { |
|
265 emit finished(false); |
|
266 } |