camerauis/cameraxui/cxui/src/main.cpp
branchRCL_3
changeset 23 61bc0f252b2b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxui/src/main.cpp	Tue Aug 31 15:03:46 2010 +0300
@@ -0,0 +1,162 @@
+/*
+* 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:
+*
+*/
+
+#include <QApplication>
+#include <QGraphicsProxyWidget>
+// needed for localization
+#include <QLocale>
+#include <HbTranslator>
+#include <hbmainwindow.h>
+#include <xqserviceutil.h>
+
+#ifdef Q_OS_SYMBIAN
+#include <coemain.h>
+#include <eikenv.h>
+#endif // Q_OS_SYMBIAN
+
+#include "cxeengine.h"
+#include "cxecameradevicecontrol.h"
+#include "cxuiapplication.h"
+#include "cxuiviewmanager.h"
+#include "cxuiapplicationstate.h"
+#include "cxuienums.h"
+#include "cxutils.h"
+#include "cxuiserviceprovider.h"
+
+#ifdef Q_OS_SYMBIAN
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "mainTraces.h"
+#endif // OST_TRACE_COMPILER_IN_USE
+#endif // Q_OS_SYMBIAN
+
+using namespace Cxe;
+
+// CONSTANTS
+const QString TRANSLATIONS_PATH = "/resource/qt/translations/";
+const QString TRANSLATIONS_FILE = "camera";
+
+int main(int argc, char *argv[])
+{
+    CX_DEBUG(("CxUI: entering main()"));
+    OstTrace0( camerax_performance, _MAIN, "msg: e_CX_STARTUP 1" );
+
+    Q_INIT_RESOURCE(cxui);
+
+    // Use software rendering / raster graphics system to save graphics memory
+    CX_DEBUG(("CxUI: Take raster graphics system into use"));
+    QApplication::setGraphicsSystem("raster");
+
+    OstTrace0( camerax_performance, DUP1__MAIN, "msg: e_CX_HBAPP_CREATION 1" );
+    CxuiApplication app(argc, argv);
+    OstTrace0( camerax_performance, DUP2__MAIN, "msg: e_CX_HBAPP_CREATION 0" );
+
+    // Creating and initializing engine as early as possible.
+    // Reserve and power on can then proceed in parallel with
+    // ui construction.
+    OstTrace0( camerax_performance, DUP7__MAIN, "msg: e_CX_CREATE_ENGINE 1" );
+    CxeEngine *engine = CxeEngine::createEngine();
+    OstTrace0( camerax_performance, DUP8__MAIN, "msg: e_CX_CREATE_ENGINE 0" );
+
+    if (app.activateReason() == Hb::ActivationReasonService ||
+        // @todo: There's a bug in orbit and we never get Hb::ActivationReasonService as
+        // activation reason. Use XQServiceUtil to determine if starting service as
+        // a workaround for now
+        XQServiceUtil::isService()) {
+        CX_DEBUG(("CxUI: Camera started as service"));
+        // Embedded mode.  Engine is inited to correct mode
+        // by service provider when request arrives
+        CX_DEBUG(("CxUI: creating serviceprovider"));
+        CxuiServiceProvider::create(engine);
+        CX_DEBUG(("CxUI: done"));
+    } else if (app.activateReason() == Hb::ActivationReasonActivity) {
+        CX_DEBUG(("CxUI: Camera started as activity"));
+        Cxe::CameraMode mode = Cxe::ImageMode;
+        QString activityId = app.activateId();
+        if (activityId == CxuiActivityIds::VIDEO_PRECAPTURE_ACTIVITY ||
+            activityId == CxuiActivityIds::VIDEO_POSTCAPTURE_ACTIVITY) {
+            mode = Cxe::VideoMode;
+        }
+
+        if (activityId == CxuiActivityIds::STILL_PRECAPTURE_ACTIVITY ||
+            activityId == CxuiActivityIds::VIDEO_PRECAPTURE_ACTIVITY) {
+            // init engine only if going to pre-capture
+            engine->initMode(mode);
+        } else {
+            // in post-capture don't init but set the correct mode to engine
+            // so init can be done later
+            engine->setMode(mode);
+        }
+    } else {
+        CX_DEBUG(("CxUI: Camera started as normal app"));
+        // normal start
+        engine->initMode(engine->mode());
+    }
+
+    // Load language specific application localization file, e.g. "camera_en.qm"
+    // Translations need to be loaded before any widgets are created.
+    CX_DEBUG(("CxUI: Load translations.."));
+    OstTrace0( camerax_performance, DUP3__MAIN, "msg: e_CX_LOAD_TRANSLATIONS 1" );
+    HbTranslator translator(TRANSLATIONS_PATH, TRANSLATIONS_FILE);
+    // Load language specific common localization file
+    translator.loadCommon();
+    OstTrace0( camerax_performance, DUP4__MAIN, "msg: e_CX_LOAD_TRANSLATIONS 0" );
+    CX_DEBUG(("CxUI: ..translations loaded"));
+
+    // Create main window
+    OstTrace0( camerax_performance, DUP5__MAIN, "msg: e_CX_MAINWINDOW_CREATION 1" );
+    HbMainWindow mainWindow(0, Hb::WindowFlagTransparent | Hb::WindowFlagNoBackground);
+    mainWindow.setAttribute(Qt::WA_NoBackground);
+    OstTrace0( camerax_performance, DUP6__MAIN, "msg: e_CX_MAINWINDOW_CREATION 0" );
+
+    // Set main window to landscape and full screen
+    OstTrace0( camerax_performance, DUP13__MAIN, "msg: e_CX_MAINWINDOW_SETORIENTATION 1" );
+    mainWindow.setOrientation(Qt::Horizontal);
+    OstTrace0( camerax_performance, DUP14__MAIN, "msg: e_CX_MAINWINDOW_SETORIENTATION 0" );
+    OstTrace0( camerax_performance, DUP15__MAIN, "msg: e_CX_MAINWINDOW_FULLSCREEN 1" );
+
+#ifdef Q_OS_SYMBIAN
+    mainWindow.showFullScreen();
+#else
+    /*
+     * todo : check if this is an Orbit bug or if there's a better solution
+    */
+    mainWindow.resize(640, 360);
+    mainWindow.setOrientation(Qt::Vertical, false);
+    mainWindow.show();
+    mainWindow.setOrientation(Qt::Horizontal, false);
+#endif //Q_OS_SYMBIAN
+    OstTrace0( camerax_performance, DUP16__MAIN, "msg: e_CX_MAINWINDOW_FULLSCREEN 0" );
+
+    // Create view manager
+    OstTrace0( camerax_performance, DUP11__MAIN, "msg: e_CX_CREATE_VIEW_MANAGER 1" );
+    CxuiViewManager *viewManager = new CxuiViewManager(app, mainWindow, *engine);
+    OstTrace0( camerax_performance, DUP12__MAIN, "msg: e_CX_CREATE_VIEW_MANAGER 0" );
+
+    // Give main window id to engine for setting up viewfinder window behind it
+    OstTrace0( camerax_performance, DUP17__MAIN, "msg: e_CX_PREPAREWINDOW 1" );
+    engine->viewfinderControl().setWindow(mainWindow.effectiveWinId());
+    OstTrace0( camerax_performance, DUP18__MAIN, "msg: e_CX_PREPAREWINDOW 0" );
+
+    int returnValue = app.exec();
+
+    delete viewManager;
+    CxuiServiceProvider::destroy(); // delete service provider instance
+    delete engine;
+
+    return returnValue;
+}