diff -r 454d022d514b -r aefcba28a3e0 piprofilerui/ui/hb/src/pisettingsview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/piprofilerui/ui/hb/src/pisettingsview.cpp Tue May 25 12:43:15 2010 +0300 @@ -0,0 +1,434 @@ +/* + * 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: + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "pisettingsview.h" +#include "pimainview.h" +#include "notifications.h" +#include "piprofilerengine.h" +#include "pluginattributes.h" + +const QStringList OUTPUTMODES = (QStringList() << "Debug output" << "File system"); + +PISettingsView::PISettingsView(PIProfilerEngine *engine) : + mEngine(engine), mGeneralAttributes(), mPluginList(0), mSettingForm(0), mModel(0), + mGeneralSettingsGroup(0), mPluginSettingsGroup(0), mOutputItem(0), mFileLocation(0), + mPrefix(0), mSamplingPeriod(0) + +{ + this->setTitle("Settings"); + + //create setting form + mSettingForm = new HbDataForm(this); + + //create a model class + mModel = new HbDataFormModel(this); + + this->createGeneralSettingForms(); + + // Set created model model to form + mSettingForm->setModel(mModel); + + // Set widget into view + setWidget(mSettingForm); + + // load general settings into data form + loadGeneralSettings(); + + // Let us know when list is shown + connect(mSettingForm, SIGNAL(itemShown(const QModelIndex)), this, + SLOT(addTextValidators(const QModelIndex))); + + // Set general group as expanded. + /*HbDataFormViewItem *viewItem = mSettingForm->dataFormViewItem(mModel->indexFromItem( + mGeneralSettingsGroup)); + viewItem->setExpanded(true);*/ + +} + +// --------------------------------------------------------------------------- + +PISettingsView::~PISettingsView() +{ + if (mSettingForm != 0) { + delete mSettingForm; + mSettingForm = 0; + } + + if (mModel != 0) { + delete mModel; + mModel = 0; + } +} + +// --------------------------------------------------------------------------- + +void PISettingsView::addTextValidators(const QModelIndex index) +{ + HbDataFormModelItem *modelItem = mModel->itemFromIndex(index); + + // Check if item is integer text box + if (modelItem->contentWidgetData(QString("TextboxType")) == QString("integer")) { + + QString value = modelItem->contentWidgetData(QString("text")).toString(); + // Create validator that accepts only integer values. + HbValidator *validator = new HbValidator(this); + validator->addField(new QIntValidator(0, 10000, validator), "1"); + + // Line editor widget from form + HbDataFormViewItem *viewItem = qobject_cast (mSettingForm->itemByIndex(index)); + HbWidget *widget = viewItem->dataItemContentWidget(); + HbLineEdit *editor = static_cast (widget); + + if (editor != 0) { + // Create interface and attach lineEdit to it. + HbEditorInterface editInterface(editor); + // set editor as phone number editor so that inserting numbers is easier + editor->setInputMethodHints(Qt::ImhDigitsOnly); + editor->setValidator(validator); + } + modelItem->setContentWidgetData(QString("text"), value); + + } + +} + +// --------------------------------------------------------------------------- + +void PISettingsView::createGeneralSettingForms() +{ + + // Add data into setting model + + // General settings group + mGeneralSettingsGroup = mModel->appendDataFormGroup(QString("General settings"), + mModel->invisibleRootItem()); + + // Output drop down list + mOutputItem = mModel->appendDataFormItem(HbDataFormModelItem::ComboBoxItem, + QString("Output to"), mGeneralSettingsGroup); + mOutputItem->setContentWidgetData(QString("items"), OUTPUTMODES); + + // Data file location textbox + mFileLocation = mModel->appendDataFormItem(HbDataFormModelItem::TextItem, QString( + "Save file in"), mGeneralSettingsGroup); + mFileLocation->setContentWidgetData("maxLength", 64); + + // File name textbox + mPrefix = mModel->appendDataFormItem(HbDataFormModelItem::TextItem, QString("File prefix"), + mGeneralSettingsGroup); + mPrefix->setContentWidgetData("maxLength", 64); + + // Period that used when using timed progfiling + mSamplingPeriod = mModel->appendDataFormItem(HbDataFormModelItem::TextItem, QString( + "Sampling period(s)"), mGeneralSettingsGroup); + mSamplingPeriod->setContentWidgetData(QString("TextboxType"), QString("integer")); + mSamplingPeriod->setContentWidgetData("maxLength", 64); + +} + +// --------------------------------------------------------------------------- + +void PISettingsView::createPluginSpecificSettings() +{ + + // Create plug-in specific group + mPluginSettingsGroup = mModel->appendDataFormGroup(QString("Plug-in specific settings"), + mModel->invisibleRootItem()); + + if (mPluginList != 0) { + + for (int index = 0; index < mPluginList->size(); index++) { + + // create plug-in specific settings group for each plug-in which has own settings + if (mPluginList->at(index).mItemCount > 0 || mPluginList->at(index).mSampleRate != -1) { + + // Create settings group + HbDataFormModelItem *mPluginGroup = mModel->appendDataFormGroup(QString( + mPluginList->at(index).mName), mPluginSettingsGroup); + + + // get plugin attributes + PluginAttributes attributes = mPluginList->at(index); + + // Create sample rate item if it is needed + if (attributes.mSampleRate != -1) { + attributes.mFormItemSampleRate = mModel->appendDataFormItem( + HbDataFormModelItem::TextItem, "Sample rate (ms)", mPluginGroup); + attributes.mFormItemSampleRate->setContentWidgetData(QString("TextboxType"), QString( + "integer")); + + attributes.mFormItemSampleRate->setContentWidgetData("text", + attributes.mSampleRate); + } + + // create other setting items + attributes.mFormItemSettingItem1 = createPluginSettingItem( + &attributes.mSettingItem1, mPluginGroup); + attributes.mFormItemSettingItem2 = createPluginSettingItem( + &attributes.mSettingItem2, mPluginGroup); + attributes.mFormItemSettingItem3 = createPluginSettingItem( + &attributes.mSettingItem3, mPluginGroup); + attributes.mFormItemSettingItem4 = createPluginSettingItem( + &attributes.mSettingItem4, mPluginGroup); + attributes.mFormItemSettingItem5 = createPluginSettingItem( + &attributes.mSettingItem5, mPluginGroup); + attributes.mFormItemSettingItem6 = createPluginSettingItem( + &attributes.mSettingItem6, mPluginGroup); + mPluginList->replace(index, attributes); + } + } + } + +} + +// --------------------------------------------------------------------------- + +HbDataFormModelItem *PISettingsView::createPluginSettingItem(const SettingItem *item, + HbDataFormModelItem *parentGroup) +{ + // create individual plug-in setting item + + HbDataFormModelItem *settingItem = 0; + if (item->mSettingText != QString("")) { + switch (item->mType) { + case SettingItem::SettingItemTypeBool: + settingItem = mModel->appendDataFormItem(HbDataFormModelItem::CheckBoxItem, + item->mUIText, parentGroup); + bool value = false; + if (item->mValue == "true") { + value = true; + } + settingItem->setContentWidgetData("tristate", value); + + break; + case SettingItem::SettingItemTypeHex: + settingItem = mModel->appendDataFormItem(HbDataFormModelItem::TextItem, item->mUIText, + parentGroup); + settingItem->setContentWidgetData("text", item->mValue); + settingItem->setContentWidgetData("maxLength", 64); + + break; + + case SettingItem::SettingItemTypeInt: + settingItem = mModel->appendDataFormItem(HbDataFormModelItem::TextItem, item->mUIText, + parentGroup); + settingItem->setContentWidgetData("text", item->mValue); + settingItem->setContentWidgetData(QString("TextboxType"), QString("integer")); + settingItem->setContentWidgetData("maxLength", 64); + + break; + + case SettingItem::SettingItemTypeText: + HbDataFormModelItem *settingItem = mModel->appendDataFormItem( + HbDataFormModelItem::TextItem, item->mUIText, parentGroup); + settingItem->setContentWidgetData("text", item->mValue); + settingItem->setContentWidgetData("maxLength", 64); + + break; + + } + } + return settingItem; + +} + +// --------------------------------------------------------------------------- + +void PISettingsView::loadGeneralSettings() +{ + // load general settings from engine + mEngine->getGeneralSettings(mGeneralAttributes); + + // set output item correct + if (mGeneralAttributes.mTraceOutput == "file_system") { + mOutputItem->setContentWidgetData(QString("currentIndex"), OUTPUT_MODE_FILE); + } + else { + mOutputItem->setContentWidgetData(QString("currentIndex"), OUTPUT_MODE_DEBUG); + } + + mFileLocation->setContentWidgetData(QString("text"), mGeneralAttributes.mSaveFileDrive); + mPrefix->setContentWidgetData(QString("text"), mGeneralAttributes.mTraceFilePrefix); + mSamplingPeriod->setContentWidgetData(QString("text"), mGeneralAttributes.mTimedSamplingPeriod); + +} + +// --------------------------------------------------------------------------- + +GeneralAttributes &PISettingsView::getGeneralAttributes() +{ + // Read items from ui elements and save them into mGeneralAttributes + + + QString fileLocation = mFileLocation->contentWidgetData(QString("text")).toString(); + if (fileLocation.length() > 0 && mEngine->checkTraceLocationSanity(fileLocation)) { + mGeneralAttributes.mSaveFileDrive = fileLocation; + } + else { + Notifications::showErrorNote("Invalid path, check settings!"); + mFileLocation->setContentWidgetData(QString("text"), mGeneralAttributes.mSaveFileDrive); + } + bool ok = false; + mGeneralAttributes.mTimedSamplingPeriod + = mSamplingPeriod->contentWidgetData(QString("text")).toInt(&ok); + + if (!ok) { + // this should not happen because intvalidator is set into text box + qWarning("Unable to convert sampling period to integer"); + + } + mGeneralAttributes.mTraceFilePrefix = mPrefix->contentWidgetData(QString("text")).toString(); + + if (mOutputItem->contentWidgetData(QString("currentIndex")).toInt(&ok) == OUTPUT_MODE_FILE) { + mGeneralAttributes.mTraceOutput = QString("file_system"); + } + else { + mGeneralAttributes.mTraceOutput = QString("debug_output"); + } + + return mGeneralAttributes; + +} + +// --------------------------------------------------------------------------- + +void PISettingsView::setPluginSettings(QList *pluginList) +{ + mPluginList = pluginList; + createPluginSpecificSettings(); +} + +// --------------------------------------------------------------------------- + + +void PISettingsView::readPluginSettingItemValue(HbDataFormModelItem *dataFormItem, + SettingItem *settingItem) +{ + if (settingItem != 0 && dataFormItem != 0) { + // check if item type is bool, convert bool to string + if (settingItem->mType == SettingItem::SettingItemTypeBool) { + bool checkboxValue = true; + checkboxValue = dataFormItem->contentWidgetData(QString("tristate")).toBool(); + + if(checkboxValue){ + settingItem->mValue = QString("true"); + } + else{ + settingItem->mValue = QString("false"); + } + + } + // otherwise save text straight into settin item + else { + settingItem->mValue = dataFormItem->contentWidgetData("text").toString(); + } + } +} + +// --------------------------------------------------------------------------- + +void PISettingsView::readPluginSettings() +{ + // Read Plug-in setting item and save values into m + for (int index = 0; index < mPluginList->size(); index++) { + + PluginAttributes attributes = mPluginList->at(index); + + readPluginSettingItemValue(attributes.mFormItemSettingItem1, &attributes.mSettingItem1); + readPluginSettingItemValue(attributes.mFormItemSettingItem2, &attributes.mSettingItem2); + readPluginSettingItemValue(attributes.mFormItemSettingItem3, &attributes.mSettingItem3); + readPluginSettingItemValue(attributes.mFormItemSettingItem4, &attributes.mSettingItem4); + readPluginSettingItemValue(attributes.mFormItemSettingItem5, &attributes.mSettingItem5); + readPluginSettingItemValue(attributes.mFormItemSettingItem6, &attributes.mSettingItem6); + + if (attributes.mFormItemSampleRate != 0) { + bool ok = false; + attributes.mSampleRate + = attributes.mFormItemSampleRate->contentWidgetData("text").toInt(&ok); + if (!ok) { + // this should not happen because intvalidator is set into text box + qWarning("Unable to convert sample rate to integer"); + } + } + + mPluginList->replace(index, attributes); + + } + +} + +// --------------------------------------------------------------------------- + +void PISettingsView::expandPluginGroup(int uid) +{ + + // FIXME some of the methods is deprecating fix once new methods available. + //collapse all group items + /*HbDataFormViewItem *viewItem = 0; + viewItem = mSettingForm->dataFormViewItem(mModel->indexFromItem(mPluginSettingsGroup)); + if (viewItem != 0) { + viewItem->setExpanded(false); + } + viewItem = mSettingForm->dataFormViewItem(mModel->indexFromItem(mGeneralSettingsGroup)); + if (viewItem != 0) { + viewItem->setExpanded(false); + } + // Set plugin group as expanded. + viewItem = mSettingForm->dataFormViewItem(mModel->indexFromItem(mPluginSettingsGroup)); + if (viewItem != 0) { + viewItem->setExpanded(true); + } + // find group item which has same uid number + for (int index = 0; index < mPluginSettingsGroup->childCount(); index++) { + HbDataFormModelItem *item = mPluginSettingsGroup->childAt(index); + bool ok = false; + int groupUid = item->data(HbDataFormModelItem::KeyRole).toInt(&ok); + if (ok) { + if (uid == groupUid) { + // Set group as expanded + viewItem = mSettingForm->dataFormViewItem(mModel->indexFromItem(item)); + if (viewItem != 0) { + viewItem->setExpanded(true); + } + + // scroll view so that group is shown + mSettingForm->scrollTo(mModel->indexFromItem(item), + HbAbstractItemView::PositionAtTop); + break; + + } + } + + }*/ + +} + +// ---------------------------------------------------------------------------