--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/coreapplicationuis/SysAp/Src/hbdeviceinputdialogsymbian.cpp Fri Aug 20 13:36:26 2010 +0300
@@ -0,0 +1,250 @@
+/****************************************************************************
+**
+** Copyright (C) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (developer.feedback@nokia.com)
+**
+** This file is part of the HbWidgets module of the UI Extensions for Mobile.
+**
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this file.
+** Please review the following information to ensure the GNU Lesser General
+** Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at developer.feedback@nokia.com.
+**
+****************************************************************************/
+
+#include "hbdeviceinputdialogsymbian.h"
+
+#include <hbsymbianvariant.h>
+#include <hbdevicedialogsymbian.h>
+#include <coreapplicationuisdomainpskeys.h>
+
+#define ARG_UNUSED(x) (void)x;
+
+//_LIT(KDialogText, "text");
+
+enum TInputDialogPanic {
+ ELineEditPanic,
+ EPropertyPanic,
+ EButtonIdPanic
+};
+
+NONSHARABLE_CLASS(CHbDeviceInputDialogPrivate) : public CBase, public MHbDeviceDialogObserver
+{
+public:
+
+ void ConstructL(MHbDeviceInputDialogObserver *aObserver);
+ ~CHbDeviceInputDialogPrivate();
+
+ void SetButtonNull(CHbDeviceInputDialogSymbian::TButtonId aButtonId, bool aValue);
+ void SetButtonTextL(CHbDeviceInputDialogSymbian::TButtonId aButtonId, const TDesC &aValue);
+ void SendToServerL(bool aShow = false);
+ void Close();
+ bool WaitForClosed();
+ void AddVariantL(const TDesC& aKey, const TAny* aData,CHbSymbianVariant::TType aDataType, CHbSymbianVariantMap* map);
+
+public: // MHbDeviceDialogObserver
+ void DataReceived(CHbSymbianVariantMap& aData);
+ void DeviceDialogClosed(TInt aCompletionCode);
+
+public: // data
+
+ CHbDeviceInputDialogSymbian *q;
+ CHbDeviceDialogSymbian *mDeviceDialog;
+ bool mShowCalled;
+ CHbDeviceInputDialogSymbian::TButtonId mReceivedButton;
+ MHbDeviceInputDialogObserver *mObserver;
+ CHbSymbianVariantMap* iVariantMap;
+
+ bool *mDeleted;
+ CActiveSchedulerWait mActiveSchedulerWait;
+};
+
+
+void CHbDeviceInputDialogPrivate::ConstructL(MHbDeviceInputDialogObserver *aObserver)
+{
+ TRACES( RDebug::Print( _L("CHbDeviceInputDialogPrivate::ConstructL::Begin") ) );
+ mDeviceDialog = CHbDeviceDialogSymbian::NewL();
+ iVariantMap = CHbSymbianVariantMap::NewL();
+
+
+
+ mReceivedButton = CHbDeviceInputDialogSymbian::ERejectButton;
+ mObserver = aObserver;
+ TRACES( RDebug::Print( _L("CHbDeviceInputDialogPrivate::ConstructL::End") ) );
+}
+
+// Destructor
+CHbDeviceInputDialogPrivate::~CHbDeviceInputDialogPrivate()
+{
+ // If no observer, remove observer from device dialog. This leaves the
+ // dialog widget executing at server when client closes connection.
+ TRACES( RDebug::Print( _L("CHbDeviceInputDialogPrivate::Destructor::Begin") ) );
+ if (!mObserver) {
+ mDeviceDialog->SetObserver(0);
+ }
+
+ delete mDeviceDialog;
+ delete iVariantMap;
+
+ // Set object deleted flag
+ if (mDeleted) {
+ // Mark the object as deleted.
+ *mDeleted = true;
+ mDeleted = 0;
+ }
+ TRACES( RDebug::Print( _L("CHbDeviceInputDialogPrivate::Destructor::End") ) );
+}
+
+void CHbDeviceInputDialogPrivate::AddVariantL(const TDesC& aKey,const TAny* aData,CHbSymbianVariant::TType aDataType,CHbSymbianVariantMap* map )
+ {
+ CHbSymbianVariant *variant = CHbSymbianVariant::NewL(aData, aDataType);
+ CleanupStack::PushL(variant);
+ User::LeaveIfError(map->Add(aKey, variant));
+ CleanupStack::Pop(variant);
+ }
+
+// Send properties to server. Show or update.
+void CHbDeviceInputDialogPrivate::SendToServerL(bool /* aShow */)
+{
+ TRACES( RDebug::Print( _L("CHbDeviceInputDialogPrivate::SendToServerL::Begin") ) );
+ _LIT(KDeviceDialogType, "com.nokia.hb.deviceinputdialog/1.0");
+ TInt error;
+ mReceivedButton = CHbDeviceInputDialogSymbian::ERejectButton;
+ error = mDeviceDialog->Show(KDeviceDialogType, *iVariantMap, this);
+ User::LeaveIfError(error);
+ mShowCalled = true;
+ TRACES( RDebug::Print( _L("CHbDeviceInputDialogPrivate::SendToServerL::End") ) );
+}
+
+
+// Close input dialog
+void CHbDeviceInputDialogPrivate::Close()
+{
+ TRACES( RDebug::Print( _L("CHbDeviceInputDialogPrivate::Close::Begin") ) );
+ mDeviceDialog->Cancel();
+ TRACES( RDebug::Print( _L("CHbDeviceInputDialogPrivate::Close::End") ) );
+}
+
+// Wait for input dialog to close
+bool CHbDeviceInputDialogPrivate::WaitForClosed()
+{
+ // Returns true if object was not deleted during wait
+ if (!mShowCalled) {
+ return true;
+ }
+ return true;
+}
+
+// Observer, data received from device input dialog
+void CHbDeviceInputDialogPrivate::DataReceived(CHbSymbianVariantMap& aData)
+{
+ TRACES( RDebug::Print( _L("CHbDeviceInputDialogPrivate::DataReceived::Begin") ) );
+ mReceivedButton = CHbDeviceInputDialogSymbian::ERejectButton;
+ _LIT(KKeyOk, "ok");
+ _LIT(KKeyCancel, "cancel");
+ const CHbSymbianVariant* variantOk = aData.Get(KKeyOk);
+ const CHbSymbianVariant* variantCancel = aData.Get(KKeyCancel);
+ if (variantOk)
+ {
+ const TDesC *value = variantOk->Value<const TDesC>();
+ q->iPassword = *value;
+ mReceivedButton = CHbDeviceInputDialogSymbian::EAcceptButton;
+ RProperty::Set( KPSUidCoreApplicationUIs, KCoreAppUIsPowerMenuCustomDialogStatus, ECoreAppUIsMemoryCardCustomDialogOk );
+ }
+ else if(variantCancel)
+ {
+ const TDesC *value = variantCancel->Value<const TDesC>();
+ q->iPassword = *value;
+ mReceivedButton = CHbDeviceInputDialogSymbian::EAcceptButton;
+ RProperty::Set( KPSUidCoreApplicationUIs, KCoreAppUIsPowerMenuCustomDialogStatus, ECoreAppUIsMemoryCardCustomDialogCancel);
+ }
+
+ TRACES( RDebug::Print( _L("CHbDeviceInputDialogPrivate::DataReceived::End") ) );
+}
+
+// Observer, device input dialog closed
+void CHbDeviceInputDialogPrivate::DeviceDialogClosed(TInt aCompletionCode)
+{
+ ARG_UNUSED(aCompletionCode)
+ TRACES( RDebug::Print( _L("CHbDeviceInputDialogPrivate::DeviceDialogClosed::Begin") ) );
+
+ mShowCalled = false;
+
+
+ if (mObserver) {
+ mObserver->InputDialogClosed(q, mReceivedButton);
+ return; // observer callback deleted this object. Do not touch it anymore.
+ }
+ TRACES( RDebug::Print( _L("CHbDeviceInputDialogPrivate::DeviceDialogClosed::End") ) );
+}
+
+// Constructor
+CHbDeviceInputDialogSymbian::CHbDeviceInputDialogSymbian()
+{
+}
+
+// Destructor
+CHbDeviceInputDialogSymbian::~CHbDeviceInputDialogSymbian()
+{
+ delete d;
+}
+
+CHbDeviceInputDialogSymbian* CHbDeviceInputDialogSymbian::NewL(MHbDeviceInputDialogObserver *aObserver)
+{
+ TRACES( RDebug::Print( _L("CHbDeviceInputDialogSymbian::NewL::Begin") ) );
+ ARG_UNUSED(aObserver)
+ CHbDeviceInputDialogSymbian *inputDialog = new (ELeave) CHbDeviceInputDialogSymbian;
+ CleanupStack::PushL(inputDialog);
+ CHbDeviceInputDialogPrivate *idialogPrivate = new (ELeave) CHbDeviceInputDialogPrivate;
+ idialogPrivate->q = inputDialog;
+ CleanupStack::PushL(idialogPrivate);
+ idialogPrivate->ConstructL( aObserver);
+ inputDialog->d = idialogPrivate;
+ CleanupStack::Pop(2); // inputDialog, idialogPrivate
+ inputDialog->SetObserver(aObserver);
+ TRACES( RDebug::Print( _L("CHbDeviceInputDialogSymbian::NewL::End") ) );
+ return inputDialog;
+}
+
+
+void CHbDeviceInputDialogSymbian::ShowL()
+{
+ TRACES( RDebug::Print( _L("CHbDeviceInputDialogSymbian::ShowL::Begin") ) );
+ d->SendToServerL(true);
+ TRACES( RDebug::Print( _L("CHbDeviceInputDialogSymbian::ShowL::End") ) );
+}
+
+
+TPtrC CHbDeviceInputDialogSymbian::getTextL()
+{
+ TRACES( RDebug::Print( _L("CHbDeviceInputDialogSymbian::getTextL::Begin") ) );
+ TRACES( RDebug::Print(_L( "CHbDeviceInputDialogSymbian::getTextL::Begin %S" ),&iPassword));
+ HBufC* sample1 = HBufC::NewLC(iPassword.Length());
+ TPtrC aStringPointer = sample1->Des();
+ aStringPointer.Set(iPassword);
+ CleanupStack::PopAndDestroy();
+ TRACES( RDebug::Print( _L("CHbDeviceInputDialogSymbian::getTextL::End") ) );
+ return aStringPointer;
+}
+
+void CHbDeviceInputDialogSymbian::Close()
+{
+ TRACES( RDebug::Print( _L("CHbDeviceInputDialogSymbian::Close::Begin") ) );
+ d->Close();
+}
+
+void CHbDeviceInputDialogSymbian::SetObserver(MHbDeviceInputDialogObserver *aObserver)
+{
+ d->mObserver = aObserver;
+}