wlanutilities/wlansniffer/wlansnifferapplication/src/wlansniffermainwindow.cpp
branchRCL_3
changeset 24 63be7eb3fc78
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wlanutilities/wlansniffer/wlansnifferapplication/src/wlansniffermainwindow.cpp	Tue Aug 31 16:18:40 2010 +0300
@@ -0,0 +1,231 @@
+/*
+* Copyright (c) 2009-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:
+* WLAN Sniffer main window. 
+*/
+
+// System includes
+
+// User includes
+
+#include "wlanqtutils.h"
+#include "wlanqtutilsap.h"
+
+#include "wlanwizard.h"
+
+#include "wlansnifferengine.h"
+#include "wlansnifferlistview.h"
+#include "wlansniffermainwindow.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "wlansniffermainwindowTraces.h"
+#endif
+
+/*!
+    \class WlanSnifferMainWindow
+    \brief WLAN Sniffer main window. 
+*/
+
+// External function prototypes
+
+// Local constants
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+/*!
+    Constructor.
+    
+    @param [in] engine WLAN Sniffer application engine.
+ */
+
+WlanSnifferMainWindow::WlanSnifferMainWindow(WlanSnifferEngine *engine) :
+    mWizard(0),
+    mListView(0),
+    mEngine(engine)
+{
+    OstTraceFunctionEntry0(WLANSNIFFERMAINWINDOW_WLANSNIFFERMAINWINDOW_ENTRY);
+
+    // Add the list view to the main window
+    addListView();
+    bool connectStatus = connect(
+        mEngine,
+        SIGNAL(toListView(QString)),
+        this,
+        SLOT(toListView(QString)));
+    Q_ASSERT(connectStatus == true);
+    
+    // When using WLAN Sniffer service, the view show is called after the service
+    // request arrives.
+    if (!mEngine->isEmbedded()) {
+        // Show the list view
+        toListView(hbTrId("txt_occ_title_wireless_lan"));
+    }
+
+    OstTraceFunctionExit0(WLANSNIFFERMAINWINDOW_WLANSNIFFERMAINWINDOW_EXIT);
+}
+
+/*!
+    Destructor.
+ */
+
+WlanSnifferMainWindow::~WlanSnifferMainWindow()
+{
+    OstTraceFunctionEntry0(WLANSNIFFERMAINWINDOW_WLANSNIFFERMAINWINDOWDESTR_ENTRY);
+    OstTraceFunctionExit0(WLANSNIFFERMAINWINDOW_WLANSNIFFERMAINWINDOWDESTR_EXIT);
+}
+
+/*!
+    Shows the WLAN Sniffer list view.
+    
+    @param [in] title View title.
+ */
+
+void WlanSnifferMainWindow::toListView(const QString &title)
+{
+    OstTraceFunctionEntry0(WLANSNIFFERMAINWINDOW_TOLISTVIEW_ENTRY);
+    
+    // Show the list view
+    mListView->setTitle(title);
+    setCurrentView(mListView);
+    show();
+
+    OstTraceFunctionExit0(WLANSNIFFERMAINWINDOW_TOLISTVIEW_EXIT);
+}
+
+/*!
+    Creates and adds the WLAN List View to main window.
+ */
+
+void WlanSnifferMainWindow::addListView()
+{
+    OstTraceFunctionEntry0(WLANSNIFFERMAINWINDOW_ADDLISTVIEW_ENTRY);
+    
+    mListView = new WlanSnifferListView(mEngine, this);
+    addView(mListView);
+
+    bool connectStatus = connect(
+        mListView,
+        SIGNAL(wizardTriggered(const WlanQtUtilsAp *)),
+        this,
+        SLOT(startWlanWizard(const WlanQtUtilsAp *)));
+    
+    OstTraceFunctionExit0(WLANSNIFFERMAINWINDOW_ADDLISTVIEW_EXIT);
+}
+
+/*!
+    Starts WLAN Wizard for new WLAN IAP creation.
+    
+    @param [in] ap WLAN Access Point to create, or NULL for adding WLAN manually.
+ */
+
+void WlanSnifferMainWindow::startWlanWizard(const WlanQtUtilsAp *ap)
+{
+    OstTraceFunctionEntry0(WLANSNIFFERMAINWINDOW_STARTWLANWIZARD_ENTRY);
+    
+    Q_ASSERT(mWizard == NULL);
+
+    // Stop WLAN scanning for the duration of WLAN Wizard
+    mEngine->stopWlanScanning();
+    
+    mWizard = QSharedPointer<WlanWizard>(new WlanWizard(this));
+    bool connectStatus = connect(
+        mWizard.data(),
+        SIGNAL(finished(int,bool)),
+        this,
+        SLOT(handleWlanWizardComplete(int,bool)),
+        Qt::QueuedConnection);
+    Q_ASSERT(connectStatus == true);
+    
+    connectStatus = connect(
+        mWizard.data(),
+        SIGNAL(cancelled()),
+        this,
+        SLOT(handleWlanWizardCancelled()),
+        Qt::QueuedConnection);
+    Q_ASSERT(connectStatus == true);
+    
+    // Create an IAP for a specific AP
+    if (ap) {
+        mWizard->setParameters(
+            ap->value(WlanQtUtilsAp::ConfIdSsid).toString(),
+            ap->value(WlanQtUtilsAp::ConfIdConnectionMode).toInt(),
+            ap->value(WlanQtUtilsAp::ConfIdSecurityMode).toInt(),
+            ap->value(WlanQtUtilsAp::ConfIdWpaPskUse).toInt(),
+            ap->value(WlanQtUtilsAp::ConfIdWpsSupported).toBool());
+    }
+    // else: Add WLAN IAP manually
+    
+    mWizard->show();
+
+    OstTraceFunctionExit0(WLANSNIFFERMAINWINDOW_STARTWLANWIZARD_EXIT);
+}
+
+/*!
+    WLAN Wizard successful completion handler.
+    
+    @param [in] iapId IAP ID of the new WLAN IAP.
+    @param [in] connected TRUE if connected.  
+ */
+
+void WlanSnifferMainWindow::handleWlanWizardComplete(
+    int iapId,
+    bool connected)
+{
+    OstTraceFunctionEntry0(WLANSNIFFERMAINWINDOW_HANDLEWLANWIZARDCOMPLETE_ENTRY);
+
+    // The wizard must exist
+    Q_ASSERT(mWizard);
+    
+    // Enable scanning again
+    mEngine->startWlanScanning();
+
+    if (connected) {
+        // The IAP ID must be valid
+        Q_ASSERT(iapId != WlanQtUtils::IapIdNone);
+        
+        // Connect (share) the new IAP in order to keep the connection open when
+        // deleting Wizard.
+        mEngine->wlanQtUtils()->connectIap(iapId, false);
+    }
+    // else: created IAP not connected at all, or already dropped
+    // (probably due to being out of coverage) so don't try to share it
+    
+    // Delete the Wizard instance. This is OK since the connect is Qt::QueuedConnection.
+    mWizard.clear();
+    
+    OstTraceFunctionExit0(WLANSNIFFERMAINWINDOW_HANDLEWLANWIZARDCOMPLETE_EXIT);
+}
+
+/*!
+    WLAN Wizard cancellation handler.
+ */
+
+void WlanSnifferMainWindow::handleWlanWizardCancelled()
+{
+    OstTraceFunctionEntry0(WLANSNIFFERMAINWINDOW_HANDLEWLANWIZARDCANCELLED_ENTRY);
+
+    // The wizard must exist
+    Q_ASSERT(mWizard);
+    
+    // Enable scanning again
+    mEngine->startWlanScanning();
+    
+    // Delete the Wizard instance. This is OK since the connect is Qt::QueuedConnection.
+    mWizard.clear();
+    
+    OstTraceFunctionExit0(WLANSNIFFERMAINWINDOW_HANDLEWLANWIZARDCANCELLED_EXIT);
+}