diff options
Diffstat (limited to 'src/s60main')
-rw-r--r-- | src/s60main/qts60main.cpp | 62 | ||||
-rw-r--r-- | src/s60main/qts60main_mcrt0.cpp | 111 | ||||
-rw-r--r-- | src/s60main/qts60mainapplication.cpp | 91 | ||||
-rw-r--r-- | src/s60main/qts60mainapplication_p.h | 104 | ||||
-rw-r--r-- | src/s60main/qts60mainappui.cpp | 213 | ||||
-rw-r--r-- | src/s60main/qts60mainappui_p.h | 146 | ||||
-rw-r--r-- | src/s60main/qts60maindocument.cpp | 117 | ||||
-rw-r--r-- | src/s60main/qts60maindocument_p.h | 133 | ||||
-rw-r--r-- | src/s60main/s60main.pro | 55 | ||||
-rw-r--r-- | src/s60main/s60main.rss | 85 |
10 files changed, 1117 insertions, 0 deletions
diff --git a/src/s60main/qts60main.cpp b/src/s60main/qts60main.cpp new file mode 100644 index 0000000..e3ab46d --- /dev/null +++ b/src/s60main/qts60main.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Symbian application wrapper of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// INCLUDE FILES +#include <exception> +#include <eikstart.h> +#include "qts60mainapplication_p.h" + +/** + * factory function to create the QtS60Main application class + */ +LOCAL_C CApaApplication* NewApplication() +{ + return new CQtS60MainApplication; +} + +/** + * A normal Symbian OS executable provides an E32Main() function which is + * called by the operating system to start the program. + */ +GLDEF_C TInt E32Main() +{ + return EikStart::RunApplication(NewApplication); +} diff --git a/src/s60main/qts60main_mcrt0.cpp b/src/s60main/qts60main_mcrt0.cpp new file mode 100644 index 0000000..ae29260 --- /dev/null +++ b/src/s60main/qts60main_mcrt0.cpp @@ -0,0 +1,111 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Symbian application wrapper of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// MCRT0.CPP +// +// © Portions copyright (c) 2005-2006 Nokia Corporation. All rights reserved. +// Copyright (c) Symbian Software Ltd 1997-2004. All rights reserved. +// + +// EPOC32 version of crt0.c for C programs which always want multi-threaded support + +#include <e32std.h> +#include <e32base.h> +#include "estlib.h" + +#ifdef __ARMCC__ +__asm int CallMain(int argc, char *argv[], char *envp[]) +{ + import main + code32 + b main +} +#define CALLMAIN(argc, argv, envp) CallMain(argc, argv, envp) +#else +extern "C" int main(int argc, char *argv[], char *envp[]); +#define CALLMAIN(argc, argv, envp) main(argc, argv, envp) +#endif + +// Dummy function to handle GCCE toolchain problem +extern "C" GLDEF_C int __GccGlueInit() +{ + return 0; +} + +extern "C" IMPORT_C void exit(int ret); + +GLDEF_C TInt QtMainWrapper() +{ + int argc = 0; + char **argv = 0; + char **envp = 0; + // get args & environment + __crt0(argc, argv, envp); + CleanupArrayDelete<char*>::PushL(argv); + CleanupArrayDelete<char*>::PushL(envp); + //Call user(application)'s main + int ret = 0; + QT_TRYCATCH_LEAVING(ret = CALLMAIN(argc, argv, envp);); + CleanupStack::PopAndDestroy(2, argv); + return ret; +} + + +#ifdef __GCC32__ + +/* stub function inserted into main() by GCC */ +extern "C" void __gccmain(void) {} + +/* Default GCC entrypoint */ +extern "C" TInt _mainCRTStartup(void) +{ + extern TInt _E32Startup(); + return _E32Startup(); +} + +#endif /* __GCC32__ */ + +#ifdef __EABI__ + +// standard entrypoint for C runtime, expected by some linkers +// Symbian OS does not currently use this function +extern "C" void __main() {} +#endif diff --git a/src/s60main/qts60mainapplication.cpp b/src/s60main/qts60mainapplication.cpp new file mode 100644 index 0000000..52b15d6 --- /dev/null +++ b/src/s60main/qts60mainapplication.cpp @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Symbian application wrapper of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// INCLUDE FILES +#include <exception> +#include "qts60maindocument_p.h" +#include "qts60mainapplication_p.h" +#include <bautils.h> +#include <coemain.h> + +// ============================ MEMBER FUNCTIONS =============================== + + +_LIT(KQtWrapperResourceFile, "\\resource\\apps\\s60main.rsc"); + +// ----------------------------------------------------------------------------- +// CQtS60MainApplication::CreateDocumentL() +// Creates CApaDocument object +// ----------------------------------------------------------------------------- +// +CApaDocument* CQtS60MainApplication::CreateDocumentL() +{ + // Create an QtS60Main document, and return a pointer to it + return (static_cast<CApaDocument*>(CQtS60MainDocument::NewL(*this))); +} + +// ----------------------------------------------------------------------------- +// CQtS60MainApplication::AppDllUid() +// Returns application UID +// ----------------------------------------------------------------------------- +// +TUid CQtS60MainApplication::AppDllUid() const +{ + // Return the UID for the QtS60Main application + return ProcessUid(); +} + +// ----------------------------------------------------------------------------- +// CQtS60MainApplication::ResourceFileName() +// Returns application resource filename +// ----------------------------------------------------------------------------- +// +TFileName CQtS60MainApplication::ResourceFileName() const +{ + TFindFile finder(iCoeEnv->FsSession()); + TInt err = finder.FindByDir(KQtWrapperResourceFile, KNullDesC); + if (err == KErrNone) + return finder.File(); + return KNullDesC(); +} + + +// End of File diff --git a/src/s60main/qts60mainapplication_p.h b/src/s60main/qts60mainapplication_p.h new file mode 100644 index 0000000..b35b38e --- /dev/null +++ b/src/s60main/qts60mainapplication_p.h @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Symbian application wrapper of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef __QtS60MainAPPLICATION_H__ +#define __QtS60MainAPPLICATION_H__ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +// INCLUDES +#include <aknapp.h> + +// CLASS DECLARATION + +static TUid ProcessUid() + { + RProcess me; + TSecureId securId = me.SecureId(); + me.Close(); + return securId.operator TUid(); + } + +/** +* CQtS60MainApplication application class. +* Provides factory to create concrete document object. +* An instance of CQtS60MainApplication is the application part of the +* AVKON application framework for the QtS60Main example application. +*/ +class CQtS60MainApplication : public CAknApplication + { + public: // Functions from base classes + + /** + * From CApaApplication, AppDllUid. + * @return Application's UID (KUidQtS60MainApp). + */ + TUid AppDllUid() const; + + /** + * From CApaApplication, ResourceFileName + * @return Application's resource filename (KUidQtS60MainApp). + */ + TFileName ResourceFileName() const; + + protected: // Functions from base classes + + /** + * From CApaApplication, CreateDocumentL. + * Creates CQtS60MainDocument document object. The returned + * pointer in not owned by the CQtS60MainApplication object. + * @return A pointer to the created document object. + */ + CApaDocument* CreateDocumentL(); + }; + +#endif // __QtS60MainAPPLICATION_H__ + +// End of File diff --git a/src/s60main/qts60mainappui.cpp b/src/s60main/qts60mainappui.cpp new file mode 100644 index 0000000..4567350 --- /dev/null +++ b/src/s60main/qts60mainappui.cpp @@ -0,0 +1,213 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Symbian application wrapper of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// INCLUDE FILES +#include <exception> +#include <avkon.hrh> +#include <eikmenub.h> +#include <eikmenup.h> +#include <barsread.h> +#include <s60main.rsg> +#include <avkon.rsg> + +#include "qts60mainappui_p.h" +#include <QtGui/qapplication.h> +#include <QtGui/qmenu.h> +#include <QtGui/private/qt_s60_p.h> + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// CQtS60MainAppUi::ConstructL() +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CQtS60MainAppUi::ConstructL() +{ + // Cone's heap and handle checks on app destruction are not suitable for Qt apps, as many + // objects can still exist in static data at that point. Instead we will print relevant information + // so that comparative checks may be made for memory leaks, using ~SPrintExitInfo in corelib. + iEikonEnv->DisableExitChecks(ETrue); + + // Initialise app UI with standard value. + // ENoAppResourceFile and ENonStandardResourceFile makes UI to work without + // resource files in most SDKs. S60 3rd FP1 public seems to require resource file + // even these flags are defined + BaseConstructL(CAknAppUi::EAknEnableSkin); + + CEikButtonGroupContainer* nativeContainer = Cba(); + nativeContainer->SetCommandSetL(R_AVKON_SOFTKEYS_EMPTY_WITH_IDS); + + // Create async callback to call Qt main, + // this is required to give S60 app FW to finish starting correctly + TCallBack callBack(OpenCMainStaticCallBack, this); + iAsyncCallBack = new(ELeave) CAsyncCallBack(callBack, CActive::EPriorityIdle); + iAsyncCallBack->Call(); +} + +// ----------------------------------------------------------------------------- +// CQtS60MainAppUi::CQtS60MainAppUi() +// C++ default constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CQtS60MainAppUi::CQtS60MainAppUi() +{ + // No implementation required +} + +// ----------------------------------------------------------------------------- +// CQtS60MainAppUi::~CQtS60MainAppUi() +// Destructor. +// ----------------------------------------------------------------------------- +// +CQtS60MainAppUi::~CQtS60MainAppUi() +{ + delete iAsyncCallBack; +} + +// ----------------------------------------------------------------------------- +// CQtS60MainAppUi::HandleCommandL() +// Takes care of command handling. +// ----------------------------------------------------------------------------- +// +void CQtS60MainAppUi::HandleCommandL(TInt aCommand) +{ + if (qApp) + qApp->symbianHandleCommand(aCommand); +} + +// ----------------------------------------------------------------------------- +// CQtS60MainAppUi::HandleResourceChangeL() +// Takes care of event handling. +// ----------------------------------------------------------------------------- +// +void CQtS60MainAppUi::HandleResourceChangeL(TInt aType) +{ + CAknAppUi::HandleResourceChangeL(aType); + + if (qApp) + qApp->symbianResourceChange(aType); +} + +void CQtS60MainAppUi::HandleWsEventL(const TWsEvent& aEvent, CCoeControl *control) +{ + int result = 0; + if (qApp) + QT_TRYCATCH_LEAVING( + result = qApp->s60ProcessEvent(const_cast<TWsEvent*>(&aEvent)) + ); + + if (result <= 0) + CAknAppUi::HandleWsEventL(aEvent, control); +} + + +// ----------------------------------------------------------------------------- +// Called by the framework when the application status pane +// size is changed. Passes the new client rectangle to the +// AppView +// ----------------------------------------------------------------------------- +// +void CQtS60MainAppUi::HandleStatusPaneSizeChange() +{ + HandleResourceChangeL(KInternalStatusPaneChange); + HandleStackedControlsResourceChange(KInternalStatusPaneChange); +} + +// ----------------------------------------------------------------------------- +// Called asynchronously from ConstructL() - passes call to nan static method +// ----------------------------------------------------------------------------- +// +TInt CQtS60MainAppUi::OpenCMainStaticCallBack(TAny* aObject) +{ + CQtS60MainAppUi* myObj = static_cast<CQtS60MainAppUi*>(aObject); + myObj->OpenCMainCallBack(); + return 0; +} + +#include "qtS60main_mcrt0.cpp" + +// ----------------------------------------------------------------------------- +// Invokes Qt main, the Qt main will block and when we return from there +// application should be closed. -> Call Exit(); +// ----------------------------------------------------------------------------- +// +void CQtS60MainAppUi::OpenCMainCallBack() +{ + TInt ret; + TRAPD(err, ret = QtMainWrapper()); + Q_UNUSED(ret); + Q_UNUSED(err); + Exit(); +} + +void CQtS60MainAppUi::DynInitMenuBarL(TInt, CEikMenuBar *) +{ +} + +void CQtS60MainAppUi::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane *aMenuPane) +{ + if (aResourceId == R_QT_WRAPPERAPP_MENU) { + if (aMenuPane->NumberOfItemsInPane() <= 1) + qt_symbian_show_toplevel(aMenuPane); + + } else if (aResourceId != R_AVKON_MENUPANE_FEP_DEFAULT && aResourceId != R_AVKON_MENUPANE_EDITTEXT_DEFAULT && aResourceId != R_AVKON_MENUPANE_LANGUAGE_DEFAULT) { + qt_symbian_show_submenu(aMenuPane, aResourceId); + } +} + +void CQtS60MainAppUi::RestoreMenuL(CCoeControl* aMenuWindow, TInt aMenuId, TMenuType aMenuType) +{ + if ((aMenuId == R_QT_WRAPPERAPP_MENUBAR) || (aMenuId == R_AVKON_MENUPANE_FEP_DEFAULT)) { + TResourceReader reader; + iCoeEnv->CreateResourceReaderLC(reader, aMenuId); + aMenuWindow->ConstructFromResourceL(reader); + CleanupStack::PopAndDestroy(); + } + + if (aMenuType == EMenuPane) + DynInitMenuPaneL(aMenuId, (CEikMenuPane*)aMenuWindow); + else + DynInitMenuBarL(aMenuId, (CEikMenuBar*)aMenuWindow); +} + +// End of File diff --git a/src/s60main/qts60mainappui_p.h b/src/s60main/qts60mainappui_p.h new file mode 100644 index 0000000..943d61d --- /dev/null +++ b/src/s60main/qts60mainappui_p.h @@ -0,0 +1,146 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Symbian application wrapper of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef __QtS60MainAPPUI_H__ +#define __QtS60MainAPPUI_H__ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +// INCLUDES +#include <aknappui.h> + +// FORWARD DECLARATIONS + +// CLASS DECLARATION +/** +* CQtS60MainAppUi application UI class. +* Interacts with the user through the UI and request message processing +* from the handler class +*/ +class CQtS60MainAppUi : public CAknAppUi + { + public: // Constructors and destructor + + /** + * ConstructL. + * 2nd phase constructor. + */ + void ConstructL(); + + /** + * CQtS60MainAppUi. + * C++ default constructor. This needs to be public due to + * the way the framework constructs the AppUi + */ + CQtS60MainAppUi(); + + /** + * ~CQtS60MainAppUi. + * Virtual Destructor. + */ + virtual ~CQtS60MainAppUi(); + + protected: + void RestoreMenuL(CCoeControl* aMenuWindow,TInt aMenuId,TMenuType aMenuType); + void DynInitMenuBarL(TInt aResourceId, CEikMenuBar *aMenuBar); + void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane *aMenuPane); + + private: // Functions from base classes + + /** + * From CEikAppUi, HandleCommandL. + * Takes care of command handling. + * @param aCommand Command to be handled. + */ + void HandleCommandL( TInt aCommand ); + + /** + * From CAknAppUi, HandleResourceChangeL + * Handles resource change events such as layout switches in global level. + * @param aType event type. + */ + void HandleResourceChangeL(TInt aType); + + /** + * HandleStatusPaneSizeChange. + * Called by the framework when the application status pane + * size is changed. + */ + void HandleStatusPaneSizeChange(); + + /** + * Static callback method for invoking Qt main. + * Called asynchronously from ConstructL() - passes call to non static method. + */ + static TInt OpenCMainStaticCallBack( TAny* aObject ); + + /** + * Callback method for invoking Qt main. + * Called from static OpenCMainStaticCallBack. + */ + void OpenCMainCallBack(); + + protected: + void HandleWsEventL(const TWsEvent& aEvent, CCoeControl* aDestination); + + + private: // Data + + /** + * Async callback object to call Qt main + * Owned by CQtS60MainAppUi + */ + CAsyncCallBack* iAsyncCallBack; + + }; + +#endif // __QtS60MainAPPUI_H__ + +// End of File diff --git a/src/s60main/qts60maindocument.cpp b/src/s60main/qts60maindocument.cpp new file mode 100644 index 0000000..1fd3e3e --- /dev/null +++ b/src/s60main/qts60maindocument.cpp @@ -0,0 +1,117 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Symbian application wrapper of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// INCLUDE FILES +#include <exception> +#include "qts60mainappui_p.h" +#include "qts60maindocument_p.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CQtS60MainDocument::NewL() +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CQtS60MainDocument* CQtS60MainDocument::NewL(CEikApplication& aApp) +{ + CQtS60MainDocument* self = NewLC(aApp); + CleanupStack::Pop(self); + return self; +} + +// ----------------------------------------------------------------------------- +// CQtS60MainDocument::NewLC() +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CQtS60MainDocument* CQtS60MainDocument::NewLC(CEikApplication& aApp) +{ + CQtS60MainDocument* self = new(ELeave) CQtS60MainDocument(aApp); + CleanupStack::PushL(self); + self->ConstructL(); + return self; +} + +// ----------------------------------------------------------------------------- +// CQtS60MainDocument::ConstructL() +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CQtS60MainDocument::ConstructL() +{ + // No implementation required +} + +// ----------------------------------------------------------------------------- +// CQtS60MainDocument::CQtS60MainDocument() +// C++ default constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CQtS60MainDocument::CQtS60MainDocument(CEikApplication& aApp) + : CAknDocument(aApp) +{ + // No implementation required +} + +// --------------------------------------------------------------------------- +// CQtS60MainDocument::~CQtS60MainDocument() +// Destructor. +// --------------------------------------------------------------------------- +// +CQtS60MainDocument::~CQtS60MainDocument() +{ + // No implementation required +} + +// --------------------------------------------------------------------------- +// CQtS60MainDocument::CreateAppUiL() +// Constructs CreateAppUi. +// --------------------------------------------------------------------------- +// +CEikAppUi* CQtS60MainDocument::CreateAppUiL() +{ + // Create the application user interface, and return a pointer to it; + // the framework takes ownership of this object + return (static_cast <CEikAppUi*>(new(ELeave)CQtS60MainAppUi)); +} + +// End of File diff --git a/src/s60main/qts60maindocument_p.h b/src/s60main/qts60maindocument_p.h new file mode 100644 index 0000000..a7e1fd2 --- /dev/null +++ b/src/s60main/qts60maindocument_p.h @@ -0,0 +1,133 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Symbian application wrapper of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef __QTS60MAINDOCUMENT_H__ +#define __QTS60MAINDOCUMENT_H__ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +// INCLUDES +#include <akndoc.h> + +// FORWARD DECLARATIONS +class CQtS60MainAppUi; +class CEikApplication; + + +// CLASS DECLARATION + +/** +* CQtS60MainDocument application class. +* An instance of class CQtS60MainDocument is the Document part of the +* AVKON application framework for the QtS60Main application. +*/ +class CQtS60MainDocument : public CAknDocument + { + public: // Constructors and destructor + + /** + * NewL. + * Two-phased constructor. + * Construct a CQtS60MainDocument for the AVKON application aApp + * using two phase construction, and return a pointer + * to the created object. + * @param aApp Application creating this document. + * @return A pointer to the created instance of CQtS60MainDocument. + */ + static CQtS60MainDocument* NewL( CEikApplication& aApp ); + + /** + * NewLC. + * Two-phased constructor. + * Construct a CQtS60MainDocument for the AVKON application aApp + * using two phase construction, and return a pointer + * to the created object. + * @param aApp Application creating this document. + * @return A pointer to the created instance of CQtS60MainDocument. + */ + static CQtS60MainDocument* NewLC( CEikApplication& aApp ); + + /** + * ~CQtS60MainDocument + * Virtual Destructor. + */ + virtual ~CQtS60MainDocument(); + + public: // Functions from base classes + + /** + * CreateAppUiL + * From CEikDocument, CreateAppUiL. + * Create a CQtS60MainAppUi object and return a pointer to it. + * The object returned is owned by the Uikon framework. + * @return Pointer to created instance of AppUi. + */ + CEikAppUi* CreateAppUiL(); + + private: // Constructors + + /** + * ConstructL + * 2nd phase constructor. + */ + void ConstructL(); + + /** + * CQtS60MainDocument. + * C++ default constructor. + * @param aApp Application creating this document. + */ + CQtS60MainDocument( CEikApplication& aApp ); + + }; + +#endif // __QTS60MAINDOCUMENT_H__ + +// End of File diff --git a/src/s60main/s60main.pro b/src/s60main/s60main.pro new file mode 100644 index 0000000..a4833af --- /dev/null +++ b/src/s60main/s60main.pro @@ -0,0 +1,55 @@ +# Additional Qt project file for qtmain lib on Symbian +TEMPLATE = lib +TARGET = qtmain +DESTDIR = $$QMAKE_LIBDIR_QT +QT = + +CONFIG += staticlib warn_on +CONFIG -= qt shared + +symbian { + # Note: UID only needed for ensuring that no filename generation conflicts occur + TARGET.UID3 = 0x2001E61F + CONFIG += png zlib + CONFIG -= jpeg + INCLUDEPATH += tmp $$QMAKE_INCDIR_QT/QtCore $$MW_LAYER_SYSTEMINCLUDE + SOURCES = qts60main.cpp \ + qts60mainapplication.cpp \ + qts60mainappui.cpp \ + qts60maindocument.cpp + + HEADERS = qts60mainapplication_p.h \ + qts60mainappui_p.h \ + qts60maindocument_p.h + + # This block serves the minimalistic resource file for S60 3.1 platforms. + # Note there is no way to ifdef S60 version in mmp file, that is why the resource + # file is always compiled for WINSCW + minimalAppResource31 = \ + "START RESOURCE s60main.rss" \ + "HEADER" \ + "TARGETPATH resource\apps" \ + "END" + MMP_RULES += minimalAppResource31 + + # s60main needs to be built in ARM mode for GCCE to work. + MMP_RULES+="ALWAYS_BUILD_AS_ARM" + + # staticlib should not have any lib depencies in s60 + # This seems not to work, some hard coded libs are still added as dependency + LIBS = +} else { + error("$$_FILE_ is intended only for Symbian!") +} + +symbian-abld: { + # abld build commands generated resources after the static library is built, and + # we have dependency to resource from static lib -> resources need to be generated + # explicitly before library + rsgFix2.commands = "-$(DEL_FILE) $(EPOCROOT)Epoc32\Data\z\resource\apps\s60main.rsc >NUL 2>&1" + rsgFix.commands = "-$(ABLD) resource $(PLATFORM) $(CFG) 2>NUL" + QMAKE_EXTRA_TARGETS += rsgFix rsgFix2 + PRE_TARGETDEPS += rsgFix rsgFix2 +} + +include(../qbase.pri) diff --git a/src/s60main/s60main.rss b/src/s60main/s60main.rss new file mode 100644 index 0000000..b2998ac --- /dev/null +++ b/src/s60main/s60main.rss @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Symbian application wrapper of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// Even S60 application have ENoAppResourceFile and ENonStandardResourceFile +// flags set, the S60 3rd Edition FP1 emulator requires applications to have +// very minimalistic application resource file, otherwise apps refures to start +// This file serves the minimalistic resource file for S60 3.1 platforms. + +// RESOURCE IDENTIFIER +NAME QTMA // 4 letter ID + +// INCLUDES +//#include <eikon.rh> +#include <appinfo.rh> +#include <eikon.rh> +#include <avkon.rsg> +#include <avkon.rh> +#include <avkon.mbg> + +// RESOURCE DEFINITIONS +RESOURCE RSS_SIGNATURE + { + } + +RESOURCE TBUF r_default_document_name + { + buf="QTMA"; + } + +RESOURCE EIK_APP_INFO + { + menubar = r_qt_wrapperapp_menubar; + cba = R_AVKON_SOFTKEYS_EXIT; + } + +RESOURCE MENU_BAR r_qt_wrapperapp_menubar + { + titles = + { + MENU_TITLE { menu_pane = r_qt_wrapperapp_menu; } + }; + } + +RESOURCE MENU_PANE r_qt_wrapperapp_menu + { + } +// End of File |