--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsergpsplugin/src/GpsPlugin.cpp Mon Mar 30 12:49:49 2009 +0300
@@ -0,0 +1,259 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: Interface to Browser for handling embedded Gps requests.
+*
+*/
+
+
+// INCLUDE FILES
+#include <e32std.h>
+#include <npupp.h>
+#include <E32HAL.H>
+#include "GpsPlugin.h"
+#include "GpsObserver.h"
+#include <CSatelliteInfoUI.h>
+
+
+// CONSTANTS
+
+enum TIdentifiersNames {
+ EIdLatitude,
+ EIdLongitude,
+ EIdAlt,
+ EIdHorizontalAccuracy,
+ EIdVerticalAccuracy,
+ EIdOnGps,
+ EIdSatelliteStatus,
+ EIdTickCount,
+ EIdLast
+ };
+
+const NPUTF8 *GpsPluginIdentifierNames[EIdLast]
+= { "latitude", // 0
+ "longitude", // 1
+ "altitude", // 2
+ "horizontalaccuracy", // 3
+ "verticalaccuracy", // 4
+ "ongps", // 5
+ "showsatellitestatus", // 6
+ "tickcount", // 7
+ };
+
+const TBool IsMethod[] = {
+ EFalse, // latitude,
+ EFalse, // longitude,
+ EFalse, // altitude
+ EFalse, // horizontalaccuracy
+ EFalse, // verticalaccuracy
+ EFalse, // ongps
+ ETrue, // showSatelliteStatus
+ EFalse, // tickcount
+ };
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ----------------------------------------------------------------------------
+// CGpsPlugin::CGpsPlugin
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ----------------------------------------------------------------------------
+CGpsPlugin::CGpsPlugin()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CGpsPlugin::NewL
+// Two-phased constructor.
+// ----------------------------------------------------------------------------
+CGpsPlugin* CGpsPlugin::NewL()
+ {
+ CGpsPlugin* self = new (ELeave) CGpsPlugin;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CGpsPlugin::ConstructL
+// Symbian 2nd phase constructor can leave.
+// ----------------------------------------------------------------------------
+void CGpsPlugin::ConstructL()
+ {
+ iGpsPluginIdentifiers = new (ELeave) NPIdentifier[EIdLast];
+ NPN_GetStringIdentifiers( GpsPluginIdentifierNames, EIdLast,
+ iGpsPluginIdentifiers );
+
+ iGpsObserver = CGpsObserver::NewL( this );
+ }
+
+// ----------------------------------------------------------------------------
+// CGpsPlugin::Destructor
+// ----------------------------------------------------------------------------
+CGpsPlugin::~CGpsPlugin()
+ {
+ delete [] iGpsPluginIdentifiers;
+ delete iGpsObserver;
+ }
+
+// ----------------------------------------------------------------------------
+// CGpsPlugin::Deallocate
+// ----------------------------------------------------------------------------
+void CGpsPlugin::Deallocate ()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CGpsPlugin::InvokeCallback
+// ----------------------------------------------------------------------------
+bool CGpsPlugin::InvokeCallback( TDesC8& name,
+ const NPVariant *args, uint32_t argCount )
+ {
+ CGpsPluginEcomMain* lGpsPPluginEcomMain = (CGpsPluginEcomMain*) Dll::Tls();
+ NPNetscapeFuncs* lNetscapeFuncs = lGpsPPluginEcomMain->Funcs();
+ if (lNetscapeFuncs && iInstanceHandle)
+ {
+ void* value = 0;
+ NPError npErr
+ = lNetscapeFuncs->getvalue( iInstanceHandle, NPNVWindowNPObject,
+ (void*)&value );
+ if (npErr == NPERR_NO_ERROR)
+ {
+ NPVariant resultVariant;
+ VOID_TO_NPVARIANT( resultVariant );
+ NPIdentifier ident
+ = NPN_GetStringIdentifier( (const NPUTF8 *)(name.Ptr()) );
+ return NPN_Invoke( iInstanceHandle, (NPObject*)value,
+ ident, args, argCount, &resultVariant );
+ }
+ }
+ return false;
+ }
+
+// ----------------------------------------------------------------------------
+// CWidgetManagerPlugin::HasMethod
+// ----------------------------------------------------------------------------
+
+bool CGpsPlugin::HasMethod( NPIdentifier name )
+ {
+ for ( TInt i= 0; i < EIdLast; i++ )
+ {
+ if ( name == iGpsPluginIdentifiers[i] )
+ {
+ return IsMethod[i];
+ }
+ }
+ return false;
+ }
+
+// ----------------------------------------------------------------------------
+// CGpsPlugin::HasProperty
+// ----------------------------------------------------------------------------
+bool CGpsPlugin::HasProperty( NPIdentifier name )
+ {
+ for ( TInt i= 0; i < EIdLast; i++ )
+ {
+ if ( name == iGpsPluginIdentifiers[i] )
+ {
+ return !IsMethod[i];
+ }
+ }
+ return false;
+ }
+
+// ----------------------------------------------------------------------------
+// CGpsPlugin::GetProperty
+// ----------------------------------------------------------------------------
+bool CGpsPlugin::GetProperty( NPIdentifier name, NPVariant *variant )
+ {
+ // default variant value maps to javascript undefined
+ VOID_TO_NPVARIANT( *variant );
+ if ( name == iGpsPluginIdentifiers[EIdLatitude] )
+ {
+ DOUBLE_TO_NPVARIANT( iGpsObserver->Latitude(), *variant );
+ }
+ else if ( name == iGpsPluginIdentifiers[EIdLongitude] )
+ {
+ DOUBLE_TO_NPVARIANT( iGpsObserver->Longitude(), *variant );
+ }
+ else if ( name == iGpsPluginIdentifiers[EIdAlt] )
+ {
+ DOUBLE_TO_NPVARIANT( iGpsObserver->Altitude(), *variant );
+ }
+ else if ( name == iGpsPluginIdentifiers[EIdHorizontalAccuracy] )
+ {
+ DOUBLE_TO_NPVARIANT( iGpsObserver->HorizontalAccuracy(), *variant );
+ }
+ else if ( name == iGpsPluginIdentifiers[EIdVerticalAccuracy] )
+ {
+ DOUBLE_TO_NPVARIANT( iGpsObserver->VerticalAccuracy(), *variant );
+ }
+ else if ( name == iGpsPluginIdentifiers[EIdTickCount] )
+ {
+ INT32_TO_NPVARIANT( iGpsObserver->TickCount(), *variant );
+ }
+ else
+ {
+ return EFalse;
+ }
+ return ETrue;
+ }
+
+// ----------------------------------------------------------------------------
+// CGpsPlugin::Invoke
+// ----------------------------------------------------------------------------
+bool CGpsPlugin::Invoke( NPIdentifier name,
+ NPVariant* /*args*/,
+ uint32_t /*argCount*/,
+ NPVariant *result )
+ {
+ VOID_TO_NPVARIANT( *result );
+ if ( name == iGpsPluginIdentifiers[EIdSatelliteStatus] )
+ {
+ TRAP_IGNORE(
+ CSatelliteInfoUI* satelliteUI = CSatelliteInfoUI::NewL();
+ (void) satelliteUI->ExecuteLD( _L("BrowserGpsPlugin") ) );
+ }
+ return true;
+ }
+
+// ----------------------------------------------------------------------------
+// CGpsPlugin::SetPropertyL
+// ----------------------------------------------------------------------------
+bool CGpsPlugin::SetPropertyL( NPIdentifier name, NPVariant *variant )
+ {
+ if ( name == iGpsPluginIdentifiers[EIdOnGps] )
+ {
+ NPString str = NPVARIANT_TO_STRING( *variant );
+ iGpsObserver->RequestNotificationL(str);
+ }
+ else
+ {
+ return EFalse;
+ }
+ return ETrue;
+ }
+
+// ----------------------------------------------------------------------------
+// CBAPPlugin::SetWindowL
+// Called by Browser for window creation.
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+void CGpsPlugin::SetWindowL(
+ MPluginAdapter* /*aPluginAdapter*/, // Allows callback to Browser
+ const TRect& /*aRect*/) // Window information
+ {
+ }
+// End of File