--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mediasettings/videosettingsplugin/src/videosettingsgroup.cpp Tue Aug 31 15:15:55 2010 +0300
@@ -0,0 +1,363 @@
+/*
+ * 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:
+ *
+ */
+
+#include "mpxvideo_debug.h"
+#include "videosettingsgroup.h"
+#include "videosettingsaccesspointentry.h"
+#include <cpsettingformitemdata.h>
+#include <cpitemdatahelper.h>
+#include <hbdataformmodel.h>
+#include <hblineedit.h>
+#include <hbinputeditorinterface.h>
+#include <hbdataformviewitem.h>
+#include <hbinputstandardfilters.h>
+#include <hbvalidator.h>
+#include <hbpushbutton.h>
+#include <mpsettingsmodel.h>
+#include <MPSettEngPluginImplementationUIDs.hrh>
+#include <xqconversions.h>
+#include <qapplication.h>
+#include <hbapplication.h>
+
+const int PROXY_LOWEST_ACCEPTED_VALUE = 1;
+const int UDP_LOWEST_ACCEPTED_VALUE = 1024;
+const int PORT_HIGHEST_ACCEPTED_VALUE = 65535;
+
+void gValidatePortValues(int& value, int bottom, int top)
+{
+ if(value < bottom)
+ {
+ value = bottom;
+ }
+
+ if(value > top)
+ {
+ value = top;
+ }
+}
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+VideoSettingsGroup::VideoSettingsGroup(CpItemDataHelper &itemDataHelper) :
+ CpSettingFormItemData(HbDataFormModelItem::GroupItem, QString()),
+ mItemDataHelper(itemDataHelper),
+ mSettingsModel(0),
+ mAccessPointItem(0),
+ mLowestUDPPortItem(0),
+ mHighestUDPPortItem(0),
+ mUseProxyItem(0),
+ mProxyServerItem(0),
+ mProxyPortItem(0)
+{
+ MPX_ENTER_EXIT(_L("VideoSettingsGroup::VideoSettingsGroup()"));
+
+ // Load the translation file.
+ QString lang = QLocale::system().name();
+ bool loaded(false);
+
+ loaded = mTranslator.load( "videos_" + lang, QString("c:/resource/qt/translations") );
+
+ if (!loaded)
+ {
+ mTranslator.load("videos_" + lang, QString("z:/resource/qt/translations") );
+ }
+
+ // Install the translator
+ HbApplication* app = qobject_cast<HbApplication*>(qApp);
+ if(app)
+ {
+ app->installTranslator(&mTranslator);
+ }
+
+ this->setLabel(hbTrId("txt_videos_subhead_video_streaming_settings"));
+
+ TRAPD(err, InitSettingsModelL());
+ if(err != KErrNone)
+ {
+ delete mSettingsModel;
+ mSettingsModel = 0;
+ return;
+ }
+
+ itemDataHelper.connectToForm(SIGNAL(itemShown(const QModelIndex)), this, SLOT(itemShown(const QModelIndex)));
+
+ // Access point in use
+ mAccessPointItem = new VideoSettingsAccessPointEntry(itemDataHelper,
+ hbTrId("txt_videos_dblist_access_point"), this);
+
+ // Lowest UDP port
+ mLowestUDPPortItem = new CpSettingFormItemData(HbDataFormModelItem::TextItem,
+ hbTrId("txt_videos_dblist_min_udp_port"), this);
+ mLowestUDPPortItem->setContentWidgetData(QString("maxRows"), 1);
+ mItemDataHelper.addConnection(mLowestUDPPortItem, SIGNAL(editingFinished()),
+ this, SLOT(lowestUdpPortEditingFinished()));
+
+ // Highest UDP port
+ mHighestUDPPortItem = new CpSettingFormItemData(HbDataFormModelItem::TextItem,
+ hbTrId("txt_videos_dblist_max_udp_port"), this);
+ mHighestUDPPortItem->setContentWidgetData(QString("maxRows"), 1);
+ mItemDataHelper.addConnection(mHighestUDPPortItem, SIGNAL(editingFinished()),
+ this, SLOT(highestUdpPortEditingFinished()));
+
+ // Use proxy
+ mUseProxyItem = new CpSettingFormItemData(HbDataFormModelItem::CheckBoxItem, QString(), this);
+ mUseProxyItem->setContentWidgetData(QString("text"), hbTrId("txt_videos_formlabel_proxy_in_use"));
+
+ // Proxy server address
+ mProxyServerItem = new CpSettingFormItemData(HbDataFormModelItem::TextItem,
+ hbTrId("txt_videos_dblist_proxy_host_name"), this);
+ mProxyServerItem->setContentWidgetData(QString("maxRows"), 1);
+ mProxyServerItem->setContentWidgetData(QString("placeholderText"), hbTrId("txt_videos_dblist_none"));
+ mItemDataHelper.addConnection(mProxyServerItem, SIGNAL(editingFinished()),
+ this, SLOT(proxyServerEditingFinished()));
+
+ // Proxy port number
+ mProxyPortItem = new CpSettingFormItemData(HbDataFormModelItem::TextItem,
+ hbTrId("txt_videos_dblist_proxy_port"), this);
+ mProxyPortItem->setContentWidgetData(QString("maxRows"), 1);
+ mItemDataHelper.addConnection(mProxyPortItem, SIGNAL(editingFinished()),
+ this, SLOT(proxyPortEditingFinished()));
+
+ loadSettings();
+}
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+VideoSettingsGroup::~VideoSettingsGroup()
+{
+ MPX_ENTER_EXIT(_L("VideoSettingsGroup::~VideoSettingsGroup()"));
+
+ TRAP_IGNORE( mSettingsModel->StoreSettingsL() );
+
+ delete mSettingsModel;
+}
+
+// ---------------------------------------------------------------------------
+// getAccessPointId
+// ---------------------------------------------------------------------------
+//
+uint VideoSettingsGroup::getAccessPointId()
+{
+ MPX_ENTER_EXIT(_L("VideoSettingsGroup::getAccessPointId()"));
+
+ TUint32 defaultAp(0);
+ mSettingsModel->GetDefaultAp(defaultAp);
+
+ MPX_DEBUG(_L("Returned access point id = %i"), defaultAp);
+
+ return defaultAp;
+}
+
+// ---------------------------------------------------------------------------
+// setAccessPointId
+// ---------------------------------------------------------------------------
+//
+void VideoSettingsGroup::setAccessPointId(const uint& defaultAp)
+{
+ MPX_ENTER_EXIT(_L("VideoSettingsGroup::setAccessPointId()"),
+ _L("defaultAp = %i"), defaultAp);
+
+ uint oldAp = getAccessPointId();
+
+ if(oldAp != defaultAp)
+ {
+ mSettingsModel->SetDefaultAp(defaultAp);
+ mUseProxyItem->setContentWidgetData(QString("checked"), false);
+ }
+}
+
+// ---------------------------------------------------------------------------
+// lowestUdpPortValueChanged
+// ---------------------------------------------------------------------------
+//
+void VideoSettingsGroup::lowestUdpPortEditingFinished()
+{
+ MPX_ENTER_EXIT(_L("VideoSettingsGroup::lowestUdpPortValueChanged()"));
+
+ int minPort = mLowestUDPPortItem->contentWidgetData(QString("text")).toString().toInt();
+ int maxPort = mHighestUDPPortItem->contentWidgetData(QString("text")).toString().toInt();
+
+ MPX_DEBUG(_L("minudp = %i, maxudp = %i"), minPort, maxPort);
+
+ if(minPort > maxPort)
+ {
+ minPort = maxPort;
+ }
+
+ gValidatePortValues(minPort, UDP_LOWEST_ACCEPTED_VALUE, PORT_HIGHEST_ACCEPTED_VALUE);
+
+ mLowestUDPPortItem->setContentWidgetData(QString("text"), QString::number(minPort));
+
+ mSettingsModel->SetMinUDPPort(minPort);
+}
+
+// ---------------------------------------------------------------------------
+// highestUdpPortValueChanged
+// ---------------------------------------------------------------------------
+//
+void VideoSettingsGroup::highestUdpPortEditingFinished()
+{
+ MPX_ENTER_EXIT(_L("VideoSettingsGroup::highestUdpPortValueChanged()"));
+
+ int maxPort = mHighestUDPPortItem->contentWidgetData(QString("text")).toString().toInt();
+ int minPort = mLowestUDPPortItem->contentWidgetData(QString("text")).toString().toInt();
+
+ MPX_DEBUG(_L("minudp = %i, maxudp = %i"), minPort, maxPort);
+
+ if(maxPort < minPort)
+ {
+ maxPort = minPort;
+ }
+
+ gValidatePortValues(maxPort, UDP_LOWEST_ACCEPTED_VALUE, PORT_HIGHEST_ACCEPTED_VALUE);
+
+ mHighestUDPPortItem->setContentWidgetData(QString("text"), QString::number(maxPort));
+
+ mSettingsModel->SetMaxUDPPort(maxPort);
+}
+
+// ---------------------------------------------------------------------------
+// useProxyToggled
+// ---------------------------------------------------------------------------
+//
+void VideoSettingsGroup::useProxyToggled(int state)
+{
+ MPX_ENTER_EXIT(_L("VideoSettingsGroup::useProxyToggled()"),
+ _L("state = %i"), state);
+
+ mProxyServerItem->setEnabled(state == Qt::Checked);
+ mProxyPortItem->setEnabled(state == Qt::Checked);
+
+ mSettingsModel->SetProxyMode(state == Qt::Checked ? 1 : 0);
+}
+
+// ---------------------------------------------------------------------------
+// proxyServerValueChanged
+// ---------------------------------------------------------------------------
+//
+void VideoSettingsGroup::proxyServerEditingFinished()
+{
+ MPX_ENTER_EXIT(_L("VideoSettingsGroup::proxyServerValueChanged()"));
+
+ QString text = mProxyServerItem->contentWidgetData(QString("text")).toString();
+
+ MPX_DEBUG(_L("new proxy server = '%s'"), text.data());
+
+ HBufC* proxyServer = XQConversions::qStringToS60Desc(text);
+ TRAP_IGNORE( mSettingsModel->SetProxyHostNameL(*proxyServer) );
+ delete proxyServer;
+}
+
+// ---------------------------------------------------------------------------
+// proxyPortValueChanged
+// ---------------------------------------------------------------------------
+//
+void VideoSettingsGroup::proxyPortEditingFinished()
+{
+ MPX_ENTER_EXIT(_L("VideoSettingsGroup::proxyPortValueChanged()"));
+
+ int proxyPort = mProxyPortItem->contentWidgetData(QString("text")).toString().toInt();
+
+ MPX_DEBUG(_L("new proxy port = %i"), proxyPort);
+
+ gValidatePortValues(proxyPort, PROXY_LOWEST_ACCEPTED_VALUE, PORT_HIGHEST_ACCEPTED_VALUE);
+
+ mProxyPortItem->setContentWidgetData(QString("text"), QString::number(proxyPort));
+
+ mSettingsModel->SetProxyPort(proxyPort);
+}
+
+// ---------------------------------------------------------------------------
+// itemShown
+// ---------------------------------------------------------------------------
+//
+void VideoSettingsGroup::itemShown(const QModelIndex& index)
+{
+ MPX_ENTER_EXIT(_L("VideoSettingsGroup::itemShown()"),
+ _L("index row = %i"), index.row());
+
+ HbDataFormModelItem* modelItem = mItemDataHelper.modelItemFromModelIndex(index);
+
+ if(modelItem == mLowestUDPPortItem ||
+ modelItem == mHighestUDPPortItem ||
+ modelItem == mProxyPortItem )
+ {
+ HbLineEdit *editor = static_cast<HbLineEdit *>(mItemDataHelper.widgetFromModelIndex(index));
+
+ editor->setMaxLength(5);
+
+ HbEditorInterface editorIf(editor);
+ editorIf.setFilter(HbDigitsOnlyFilter::instance());
+ }
+
+ if(modelItem == mProxyServerItem)
+ {
+ mItemDataHelper.addConnection(mUseProxyItem, SIGNAL(stateChanged(int)), this, SLOT(useProxyToggled(int)));
+ HbEditorInterface editor(mItemDataHelper.widgetFromModelIndex(index));
+ editor.setFilter(HbUrlFilter::instance());
+ }
+}
+
+// ---------------------------------------------------------------------------
+// InitSettingsModelL
+// ---------------------------------------------------------------------------
+//
+void VideoSettingsGroup::InitSettingsModelL()
+{
+ MPX_ENTER_EXIT(_L("VideoSettingsGroup::InitSettingsModelL()"));
+
+ TUid settingsUid = {KMPSettEngImplUidROP};
+ mSettingsModel = CMPSettingsModel::NewL(settingsUid);
+ mSettingsModel->LoadSettingsL(EConfigUser);
+}
+
+// ---------------------------------------------------------------------------
+// loadSettings
+// ---------------------------------------------------------------------------
+//
+void VideoSettingsGroup::loadSettings()
+{
+ MPX_ENTER_EXIT(_L("VideoSettingsGroup::loadSettings()"));
+
+ int lowestUdpPort(0);
+ mSettingsModel->GetMinUDPPort(lowestUdpPort);
+ mLowestUDPPortItem->setContentWidgetData(QString("text"), QString::number(lowestUdpPort));
+
+ int highestUdpPort(0);
+ mSettingsModel->GetMaxUDPPort(highestUdpPort);
+ mHighestUDPPortItem->setContentWidgetData(QString("text"), QString::number(highestUdpPort));
+
+ int proxyMode(0);
+ mSettingsModel->GetProxyMode(proxyMode);
+ mUseProxyItem->setContentWidgetData(QString("checked"), proxyMode == 1);
+ useProxyToggled(proxyMode == 1 ? Qt::Checked : Qt::Unchecked);
+
+ TBuf<496> proxyServerBuf;
+ mSettingsModel->GetProxyHostName(proxyServerBuf);
+ QString proxyServer = XQConversions::s60DescToQString(proxyServerBuf);
+ mProxyServerItem->setContentWidgetData(QString("text"), proxyServer);
+
+ int proxyPort;
+ mSettingsModel->GetProxyPort(proxyPort);
+ mProxyPortItem->setContentWidgetData(QString("text"), QString::number(proxyPort));
+
+ mAccessPointItem->setIapId(getAccessPointId());
+}