--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/searchui/stateproviders/searchstateprovider/src/settingswidget.cpp Mon Apr 19 14:40:05 2010 +0300
@@ -0,0 +1,451 @@
+/*
+ * Copyright (c) 2009 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: Implementation of the settings widget
+ *
+ */
+#include "settingswidget.h"
+#include <hbdialog.h>
+#include <hbcheckbox.h>
+#include <qgraphicslinearlayout.h>
+#include <hbaction.h>
+#include <hblabel.h>
+#include <qsignalmapper.h>
+#include <hbtooltip.h>
+#include <qsettings.h>
+#include <hbinputdialog.h>
+#include<hbscrollarea.h>
+#include <qgraphicswidget.h>
+#include <hbglobal.h>
+
+//----------------------------------------------------------------------------------------------------------------------------
+//SettingsWidget::SettingsWidget()
+//
+//----------------------------------------------------------------------------------------------------------------------------
+SettingsWidget::SettingsWidget() :
+ HbWidget()
+ {
+ deviceCategoryList = (QStringList() << hbTrId("txt_search_list_device")
+ << hbTrId("txt_search_list_contatcs") << hbTrId(
+ "txt_search_list_media") << hbTrId("txt_search_list_messagemail")
+ << hbTrId("txt_search_list_calendarnotes") << hbTrId(
+ "txt_search_list_applications") << hbTrId(
+ "txt_search_list_all_other_files"));
+ internetCategoryList = (QStringList() << hbTrId(
+ "txt_search_list_internet") << "Google" << "Bing");
+
+ QGraphicsLinearLayout *linearLayout = new QGraphicsLinearLayout(
+ Qt::Vertical);
+
+ setLayout(linearLayout);
+
+ popup = new HbDialog();
+ popup->setDismissPolicy(HbDialog::NoDismiss);
+
+ popup->setTimeout(HbDialog::NoTimeout);
+
+ HbAction * action = new HbAction(hbTrId("txt_common_button_ok"), popup);
+ connect(action, SIGNAL(triggered()), this, SLOT(checkBoxOkEvent()));
+ popup->setPrimaryAction(action);
+
+ action = new HbAction(hbTrId("txt_common_button_cancel"), popup);
+ connect(action, SIGNAL(triggered()), this, SLOT(checkBoxCancelEvent()));
+ popup->setSecondaryAction(action);
+
+ //device category creation
+
+ HbCheckBox *checkboxitem = NULL;
+
+ signalMapper = new QSignalMapper(this);
+
+ for (int i = 0; i < deviceCategoryList.count(); i++)
+ {
+ checkboxitem = new HbCheckBox(deviceCategoryList.at(i));
+
+ mDeviceCheckBoxList.append(checkboxitem);
+
+ signalMapper->setMapping(mDeviceCheckBoxList.at(i), i);
+
+ connect(mDeviceCheckBoxList.at(i), SIGNAL(stateChanged(int)),
+ signalMapper, SLOT(map()));
+
+ if (i == 0)
+ {
+ //arrange device search &internet search
+ linearLayout->addItem(mDeviceCheckBoxList.at(i));
+ }
+ else
+ {
+ //arrange other subcategoriess
+ mDeviceCheckBoxList.at(i)->setContentsMargins(20, 0, 0, 0);
+ linearLayout->addItem(mDeviceCheckBoxList.at(i));
+ }
+ }
+ int j = 0;
+ for (int i = deviceCategoryList.count(); i < internetCategoryList.count()
+ + deviceCategoryList.count(); i++)
+ {
+
+ checkboxitem = new HbCheckBox(internetCategoryList.at(j));
+
+ mInternetCheckBoxList.append(checkboxitem);
+
+ signalMapper->setMapping(mInternetCheckBoxList.at(j), i);
+
+ connect(mInternetCheckBoxList.at(j), SIGNAL(stateChanged(int)),
+ signalMapper, SLOT(map()));
+
+ if (i == deviceCategoryList.count())
+ {
+ //arrange device search &internet search
+ linearLayout->addItem(mInternetCheckBoxList.at(j));
+ }
+ else
+ {
+ //arrange other subcategoriess
+ mInternetCheckBoxList.at(j)->setContentsMargins(20, 0, 0, 0);
+ linearLayout->addItem(mInternetCheckBoxList.at(j));
+
+ }
+ j++;
+ }
+
+ connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(itemChecked(int)));
+
+ //Heading label
+
+ HbLabel *label = new HbLabel(hbTrId(
+ "txt_search_qtl_dialog_pri_heading_delimiter"));
+ popup->setHeadingWidget(label);
+
+ HbScrollArea* scrollArea = new HbScrollArea(popup);
+ scrollArea->setScrollDirections(Qt::Vertical);
+ scrollArea->setFlag(QGraphicsItem::ItemClipsChildrenToShape, true);
+ scrollArea->setContentWidget(this);
+ popup->setContentWidget(scrollArea);
+
+ // loadSettingsFrominiFile();
+ }
+//----------------------------------------------------------------------------------------------------------------------------
+//SettingsWidget::~SettingsWidget()
+//
+//----------------------------------------------------------------------------------------------------------------------------
+SettingsWidget::~SettingsWidget()
+ {
+ delete signalMapper;
+ //delete popup;
+ }
+//----------------------------------------------------------------------------------------------------------------------------
+//SettingsWidget::launchSettingWidget()
+//
+//----------------------------------------------------------------------------------------------------------------------------
+void SettingsWidget::launchSettingWidget()
+ {
+ loadSettingsFrominiFile();
+ setActionVisibility();
+ popup->show();
+ }
+//----------------------------------------------------------------------------------------------------------------------------
+//SettingsWidget::setActionVisibility()
+//
+//----------------------------------------------------------------------------------------------------------------------------
+void SettingsWidget::setActionVisibility()
+ {
+ bool noItemSelected = true;
+ for (int i = 0; i < mDeviceCheckBoxList.count(); i++)
+ {
+ if (mDeviceCheckBoxList.at(i)->checkState() == Qt::Checked)
+ {
+ noItemSelected = false;
+ }
+ }
+ for (int i = 0; i < mInternetCheckBoxList.count(); i++)
+ {
+ if (mInternetCheckBoxList.at(i)->checkState() == Qt::Checked)
+ {
+ noItemSelected = false;
+ }
+ }
+ if (!noItemSelected)
+ {
+ popup->primaryAction()->setVisible(true);
+ }
+ else
+ {
+ popup->primaryAction()->setVisible(false);
+ }
+ }
+//----------------------------------------------------------------------------------------------------------------------------
+//SettingsWidget::itemChecked( int selectedIndex)
+//
+//----------------------------------------------------------------------------------------------------------------------------
+void SettingsWidget::itemChecked(int selectedIndex)
+ {
+ int totalcount = deviceCategoryList.count()
+ + internetCategoryList.count();
+
+ if (selectedIndex == 0) // validating the parent category "devices"
+ {
+ if ((mDeviceCheckBoxList.at(selectedIndex)->checkState()
+ == Qt::Checked))
+ {
+ isInternetSelected = false;
+ checkSubCategories(0);
+ unCheckSubCategories(0);
+ }
+ else
+ {
+ unCheckSubCategories(1);
+ }
+ setActionVisibility();
+ return;
+ }
+ else if (selectedIndex == deviceCategoryList.count())// validating the parent category "internet"
+ {
+ if (mInternetCheckBoxList.at(selectedIndex
+ - deviceCategoryList.count())->checkState() == Qt::Checked)
+ {
+ isInternetSelected = true;
+ checkSubCategories(1);
+ unCheckSubCategories(1);
+ }
+ else
+ {
+ unCheckSubCategories(0);
+ }
+ setActionVisibility();
+ return;
+ }
+ if (selectedIndex < deviceCategoryList.count())// validating the sub categories under "devices"
+ {
+ if (mDeviceCheckBoxList.at(selectedIndex)->checkState()
+ == Qt::Checked)
+ {
+ isInternetSelected = false;
+ unCheckSubCategories(0);
+
+ }
+ }
+ else // validating the sub categories under "internet"
+ {
+ int curentindex = (selectedIndex + internetCategoryList.count())
+ - (deviceCategoryList.count() + internetCategoryList.count());
+
+ if (mInternetCheckBoxList.at(curentindex)->checkState()
+ == Qt::Checked)
+ {
+ isInternetSelected = true;
+ unCheckSubCategories(1);
+ //return;
+ }
+ }
+ setActionVisibility();
+ }
+//----------------------------------------------------------------------------------------------------------------------------
+//SettingsWidget::check(int checkSubCategory)
+//
+//----------------------------------------------------------------------------------------------------------------------------
+void SettingsWidget::checkSubCategories(int checkSubCategory)
+ {
+ if (checkSubCategory == 0)
+ {
+ for (int i = 0; i < mDeviceCheckBoxList.count(); i++)
+ {
+ mDeviceCheckBoxList.at(i)->setCheckState(Qt::Checked);
+ }
+ }
+ else
+ {
+ for (int i = 0; i < mInternetCheckBoxList.count(); i++)
+ {
+ mInternetCheckBoxList.at(i)->setCheckState(Qt::Checked);
+ }
+ }
+ }
+//----------------------------------------------------------------------------------------------------------------------------
+//SettingsWidget::unCheckSubCategories(int unCheckSubCategory)
+//
+//----------------------------------------------------------------------------------------------------------------------------
+void SettingsWidget::unCheckSubCategories(int unCheckSubCategory)
+ {
+ if (unCheckSubCategory == 0)
+ {
+ for (int i = 0; i < mInternetCheckBoxList.count(); i++)
+ {
+ mInternetCheckBoxList.at(i)->setCheckState(Qt::Unchecked);
+ }
+ }
+ else
+ {
+ for (int i = 0; i < mDeviceCheckBoxList.count(); i++)
+ {
+ mDeviceCheckBoxList.at(i)->setCheckState(Qt::Unchecked);
+ }
+ }
+ }
+//----------------------------------------------------------------------------------------------------------------------------
+//SettingsWidget::checkBoxCancelEvent()
+//
+//----------------------------------------------------------------------------------------------------------------------------
+void SettingsWidget::checkBoxCancelEvent()
+ {
+ loadSettingsFrominiFile();//bug fix for cancel event selection should not reflect "go" button
+ emit settingsEvent(false);
+ }
+//----------------------------------------------------------------------------------------------------------------------------
+//void SettingsWidget::checkBoxOkEvent()
+//
+//----------------------------------------------------------------------------------------------------------------------------
+
+void SettingsWidget::checkBoxOkEvent()
+ {
+ storeSettingsToiniFile();
+ emit settingsEvent(true);
+ }
+//----------------------------------------------------------------------------------------------------------------------------
+//void SettingsWidget::storeSettingsToiniFile()
+//
+//----------------------------------------------------------------------------------------------------------------------------
+
+void SettingsWidget::storeSettingsToiniFile()
+ {
+ QSettings appSettings("Search.ini", QSettings::IniFormat);
+
+ appSettings.setValue("DeviceCount", mDeviceCheckBoxList.count());
+ for (int i = 0; i < mDeviceCheckBoxList.count(); i++)
+ {
+ if (mDeviceCheckBoxList.at(i)->checkState() == Qt::Checked)
+ {
+ appSettings.setValue(mDeviceCheckBoxList.at(i)->text(), 1);
+ emit selectedItemCategory(i, true);
+ }
+ else
+ {
+ appSettings.setValue(mDeviceCheckBoxList.at(i)->text(), 0);
+ emit selectedItemCategory(i, false);
+ }
+ }
+ // int totalcount = i;
+ appSettings.setValue("InternetCount", mInternetCheckBoxList.count());
+ for (int i = 0; i < mInternetCheckBoxList.count(); i++)
+ {
+ if (mInternetCheckBoxList.at(i)->checkState() == Qt::Checked)
+ {
+ appSettings.setValue(mInternetCheckBoxList.at(i)->text(), 1);
+ // emit selectedcategory(totalcount,true);
+ }
+ else
+ {
+ appSettings.setValue(mInternetCheckBoxList.at(i)->text(), 0);
+ //emit selectedcategory(totalcount,false);
+ }
+ // totalcount++;
+ }
+ }
+
+//----------------------------------------------------------------------------------------------------------------------------
+//void SettingsWidget::loadSettingsFrominiFile()
+//
+//----------------------------------------------------------------------------------------------------------------------------
+
+void SettingsWidget::loadSettingsFrominiFile()
+ {
+ enableDefaultSettings();
+ isInternetSelected = false;
+ QSettings appSettings("Search.ini", QSettings::IniFormat);
+ int ret = 0;
+ for (int i = 0; i < mDeviceCheckBoxList.count(); i++)
+ {
+ ret = appSettings.value(mDeviceCheckBoxList.at(i)->text()).toInt();
+ if (ret)
+ {
+ mDeviceCheckBoxList.at(i)->setCheckState(Qt::Checked);
+ emit selectedItemCategory(i, true);
+ }
+ else
+ {
+ mDeviceCheckBoxList.at(i)->setCheckState(Qt::Unchecked);
+ emit selectedItemCategory(i, false);
+ }
+ }
+ for (int i = 0; i < mInternetCheckBoxList.count(); i++)
+ {
+
+ ret = appSettings.value(mInternetCheckBoxList.at(i)->text()).toInt();
+ if (ret)
+ {
+ isInternetSelected = true;
+ mInternetCheckBoxList.at(i)->setCheckState(Qt::Checked);
+ // emit selectedcategory(mInternetCheckBoxList.at(i)->text(),true);
+ }
+ else
+ {
+ mInternetCheckBoxList.at(i)->setCheckState(Qt::Unchecked);
+ // emit selectedcategory(mInternetCheckBoxList.at(i)->text(),false);
+ }
+ }
+
+ }
+//----------------------------------------------------------------------------------------------------------------------------
+//SettingsWidget::isInternetSearchOptionSelected()
+//
+//----------------------------------------------------------------------------------------------------------------------------
+bool SettingsWidget::isInternetSearchOptionSelected()
+ {
+ return isInternetSelected;
+ }
+//----------------------------------------------------------------------------------------------------------------------------
+//void SettingsWidget::changeDeviceInternetCheck()
+//
+//----------------------------------------------------------------------------------------------------------------------------
+void SettingsWidget::changeDeviceInternetCheck()
+ {
+ if (isInternetSearchOptionSelected() == true)
+ {
+ mDeviceCheckBoxList.at(0)->setCheckState(Qt::Checked);
+
+ }
+ else
+
+ {
+
+ mInternetCheckBoxList.at(0)->setCheckState(Qt::Checked);
+
+ }
+
+ emit settingsChanged();
+ }
+//----------------------------------------------------------------------------------------------------------------------------
+//void SettingsWidget::enableDefaultSettings()
+//
+//----------------------------------------------------------------------------------------------------------------------------
+void SettingsWidget::enableDefaultSettings()
+ {
+ QSettings appSettings("Search.ini", QSettings::IniFormat);
+ if (!appSettings.contains("DeviceCount")) // change the settings for the first time only
+ {
+ appSettings.setValue("DeviceCount", mDeviceCheckBoxList.count());
+ for (int i = 0; i < mDeviceCheckBoxList.count(); i++)
+ {
+ // mDeviceCheckBoxList.at(i)->setCheckState(Qt::Checked);
+ appSettings.setValue(mDeviceCheckBoxList.at(i)->text(), 1);
+ }
+ for (int i = 0; i < mInternetCheckBoxList.count(); i++)
+ {
+ //mInternetCheckBoxList.at(i)->setCheckState(Qt::Unchecked);
+ appSettings.setValue(mInternetCheckBoxList.at(i)->text(), 0);
+ }
+ // storeSettingsToiniFile();
+ }
+
+ }