javauis/coreui/inc/javacoreui.h
changeset 21 2a9601315dfc
child 67 63b81d807542
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/coreui/inc/javacoreui.h	Mon May 03 12:27:20 2010 +0300
@@ -0,0 +1,164 @@
+/*
+* 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: Interface for creating and destroying the Core UI
+*
+*/
+
+#ifndef JAVACOREUI_H
+#define JAVACOREUI_H
+
+#include <memory>
+
+#include "dynamiclibloader.h"
+#include "javauid.h"
+#include "javacoreuiparams.h"
+
+namespace java // codescanner::namespace
+{
+namespace ui // codescanner::namespace
+{
+
+class CoreUi;
+
+typedef CoreUi& (*GetUiInstance)();
+typedef void (*ReleaseUi)();
+
+/**
+ *  CoreUi offers a static method for getting an object
+ *  implementing
+ *  the interface and loading the shared library containing the actual
+ *  implementation. The interface itself offers a way control the lifetime
+ *  of the UI.
+ */
+
+class CoreUi
+{
+public:
+
+    /**
+    * This method will ask the UI to start the main loop
+    * @param appUid The Uid of the application.
+    * @param uiParams Ui configuration parameters. If it
+    *        is null, the default arguments will be used.
+    * @throws java::util::ExceptionBase or std::exception in error cases.
+    */
+    virtual void start(const java::util::Uid& appUid,
+                       CoreUiParams* uiParams = 0) = 0;
+
+    //Destructor
+    virtual ~CoreUi();
+
+    /**
+    * This inline method will load the shared library of the core UI.
+    *
+    * It is important that the user of this method is aware that the
+    * implementation is available ONLY when the instance of
+    * DynamicLibLoader is not deleted. When the user is absolutely sure
+    * that no code is run from the loaded shared library, user should delete
+    * the instance of DynamicLibLoader. The deletion will lead to
+    * unloading the shared library.
+    *
+    * @param[out] loader User must store this argument as long as it needs
+    *                    to run any code in the shared library. No other
+                         APIs of the loader is needed to use.
+    * @return A reference to instance implementing CoreUi in
+    * success case.
+    * @throws java::util::ExceptionBase or std::exception in error cases.
+    */
+    static CoreUi&
+    getUiInstance(std::auto_ptr<java::util::DynamicLibLoader>& loader);
+
+    /**
+    * This inline method will close the core UI unless already closed and
+    * clean resources.
+    *
+    * @param[in] loader A loeader that was used to load the dll.
+    * @throws java::util::ExceptionBase or std::exception in error cases.
+    */
+    static void releaseUi(const std::auto_ptr<java::util::DynamicLibLoader>& loader);
+};
+
+#if defined RD_JAVA_UI_QT
+// This is an empty CoreUi impl for Java 3.0
+class CoreUiStub : public CoreUi
+{
+public:
+    CoreUiStub() {}
+    virtual ~CoreUiStub() {}
+    virtual void init(const java::util::Uid& /*midletUid*/,
+                      CoreUiParams* /*uiParams*/) {}
+
+    virtual void start(const java::util::Uid& appUid,
+                       CoreUiParams* uiParams = 0) {}
+};
+#endif // RD_JAVA_UI_QT
+
+} //end namespace ui
+} //end namespace java
+
+
+//START OF INLINE METHODS
+inline java::ui::CoreUi::~CoreUi() {}
+
+inline java::ui::CoreUi& java::ui::CoreUi::getUiInstance
+(std::auto_ptr<java::util::DynamicLibLoader>& loader)
+{
+#if defined RD_JAVA_UI_QT
+
+    // The stub impl leaks memory, but is ok, since this
+    // is not in use in MCL, but is for future development
+    // enabler.
+    CoreUiStub* stub = new CoreUiStub();
+    return *stub;
+
+#else // RD_JAVA_UI_QT
+
+    if (loader.get() == 0)
+    {
+        //Create an instance of DynamicLibLoader.
+        loader.reset(new java::util::DynamicLibLoader("javacoreui"));
+    }
+
+    //Load the javaui and locates method getUiInstance. If getFunction
+    //succeeds were are certain that createUiFunc points to valid method.
+    GetUiInstance getUiInstance =
+        reinterpret_cast<GetUiInstance>(loader->getFunction("getUiInstance",
+                                        true));
+
+    //Call the method which will create the UI.
+    return getUiInstance();
+
+#endif // RD_JAVA_UI_QT
+}
+
+inline void java::ui::CoreUi::releaseUi(
+    const  std::auto_ptr<java::util::DynamicLibLoader>& loader)
+{
+#ifndef RD_JAVA_UI_QT
+    //Load the javaui and locates method getUiInstance. If getFunction
+    //succeeds were are certain that createUiFunc points to valid method.
+    ReleaseUi releaseUi =
+        reinterpret_cast<ReleaseUi>(loader->getFunction("releaseUi", true));
+
+    //Call the method which will release UI resources.
+    releaseUi();
+
+#else // RD_JAVA_UI_QT
+
+    return;
+
+#endif // RD_JAVA_UI_QT
+}
+
+#endif // JAVACOREUI_H