perfmon/ui/hb/app/src/settingsview.cpp
branchRCL_3
changeset 19 b3cee849fa46
equal deleted inserted replaced
18:48060abbbeaf 19:b3cee849fa46
       
     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 }