wlanutilities/wlanentryplugin/src/cpwlanentryitemdata.cpp
changeset 61 e1d68407ed06
parent 60 822a45792fdd
--- a/wlanutilities/wlanentryplugin/src/cpwlanentryitemdata.cpp	Fri Sep 03 09:37:37 2010 +0300
+++ b/wlanutilities/wlanentryplugin/src/cpwlanentryitemdata.cpp	Thu Sep 16 12:52:33 2010 +0300
@@ -24,7 +24,6 @@
 #ifdef WLANENTRYPLUGIN_SERVICETRACES    
 #include <xqservicelog.h>
 #endif
-#include <xqappmgr.h>
 #include <xqaiwdecl.h>
 #include <xqaiwdeclplat.h>
 
@@ -63,7 +62,9 @@
 
 CpWlanEntryItemData::CpWlanEntryItemData(CpItemDataHelper &itemDataHelper) :
     CpSettingFormEntryItemData(itemDataHelper, hbTrId("txt_occ_dblist_wireless_lan")),
-    mWlanStatusInfo(new WlanStatusInfo(this))
+    mWlanStatusInfo(new WlanStatusInfo(this)),
+    mProcessing(false),
+    mRequest(0)
 {
     OstTraceFunctionEntry0(CPWLANENTRYITEMDATA_CPWLANENTRYITEMDATA_ENTRY);
     
@@ -88,9 +89,44 @@
 CpWlanEntryItemData::~CpWlanEntryItemData()
 {
     OstTraceFunctionEntry0(DUP1_CPWLANENTRYITEMDATA_CPWLANENTRYITEMDATA_ENTRY);
+    delete mRequest;
     OstTraceFunctionExit0(DUP1_CPWLANENTRYITEMDATA_CPWLANENTRYITEMDATA_EXIT);
 }
 
+void CpWlanEntryItemData::handleOk(const QVariant &result)
+{
+    OstTraceFunctionEntry0(CPWLANENTRYITEMDATA_HANDLEOK_ENTRY);
+    Q_UNUSED(result);
+    mProcessing = false;
+
+    delete mRequest;
+    mRequest = NULL;
+
+#ifdef WLANENTRYPLUGIN_SERVICETRACES    
+    XQSERVICE_DEBUG_PRINT("CpWlanEntryItemData::handleOk() service request completed OK");
+#endif    
+    OstTraceFunctionExit0(CPWLANENTRYITEMDATA_HANDLEOK_EXIT);
+}
+
+
+void CpWlanEntryItemData::handleError(int errorCode, const QString& errorMessage)
+{
+   OstTraceFunctionEntry0(CPWLANENTRYITEMDATA_HANDLEERROR_ENTRY);
+   TPtrC tmp(errorMessage.utf16(),errorMessage.length());
+   OstTraceExt2(TRACE_FLOW, CPWLANENTRYITEMDATA_HANDLEERROR, "CpWlanEntryItemData::handleError;errorCode=%d;errorMessage=%S", errorCode, tmp);
+   
+   mProcessing = false;
+   
+   delete mRequest;
+   mRequest = NULL;
+
+   #ifdef WLANENTRYPLUGIN_SERVICETRACES    
+    XQSERVICE_DEBUG_PRINT("CpWlanEntryItemData::handleOk() service request completed with error");
+#endif    
+   OstTraceFunctionExit0(CPWLANENTRYITEMDATA_HANDLEERROR_EXIT);
+}
+
+
 /*!
     Function for handling the entry item click.
 */
@@ -99,36 +135,43 @@
 {
     OstTraceFunctionEntry0(CPWLANENTRYITEMDATA_CREATESETTINGVIEW_ENTRY);
     
+    if (mProcessing) {
+        OstTrace0(TRACE_NORMAL, CPWLANENTRYITEMDATA_CREATESETTINGVIEW, "CpWlanEntryItemData::createSettingView:already processing, return");
+        return 0;
+    }
+    mProcessing = true;
+    
 #ifdef WLANENTRYPLUGIN_SERVICETRACES    
     qInstallMsgHandler(XQSERVICEMESSAGEHANDLER);
     XQSERVICE_DEBUG_PRINT("CpWlanEntryItemData::createSettingView requesting listView()");
 #endif
 
-    // Execute synchronous WLAN Sniffer list view
-    XQApplicationManager aiwMgr;
-    XQAiwRequest *request = aiwMgr.create(
+    // Execute asynchronous WLAN Sniffer list view
+    mRequest = mAiwMgr.create(
         "wlansniffer",
         XQI_WLAN_SNIFFER,
         XQOP_WLAN_SNIFFER,
         true);
 
     // The WLAN Sniffer service must always exist
-    Q_ASSERT(request);
+    Q_ASSERT(mRequest);
 
-    // The service is synchronous & embedded
-    request->setSynchronous(true);
+    // The service is asynchronous & embedded
+    mRequest->setSynchronous(false);
     
     // Window title needs to be set to "Control Panel"
     XQRequestInfo reqInfo;
     reqInfo.setInfo(XQINFO_KEY_WINDOW_TITLE, hbTrId("txt_cp_title_control_panel"));
-    request->setInfo(reqInfo);
+    mRequest->setInfo(reqInfo);
+
+    connect(mRequest, SIGNAL(requestOk(QVariant)), SLOT( handleOk(QVariant)), Qt::QueuedConnection);
+    connect(mRequest, SIGNAL(requestError(int, QString)), SLOT(handleError(int, QString)));
     
-    bool status = request->send();
+    bool status = mRequest->send();
 #ifdef WLANENTRYPLUGIN_SERVICETRACES    
-    XQSERVICE_DEBUG_PRINT("CpWlanEntryItemData::createSettingView listView() service request completed");
+    XQSERVICE_DEBUG_PRINT("CpWlanEntryItemData::createSettingView listView() service request sent");
 #endif    
     Q_ASSERT(status);
-    delete request;
 
     OstTraceFunctionExit0(CPWLANENTRYITEMDATA_CREATESETTINGVIEW_EXIT);
     return 0;