summaryrefslogtreecommitdiffstats
path: root/src/s60main
diff options
context:
space:
mode:
authoraxis <qt-info@nokia.com>2009-04-24 11:34:15 (GMT)
committeraxis <qt-info@nokia.com>2009-04-24 11:34:15 (GMT)
commit8f427b2b914d5b575a4a7c0ed65d2fb8f45acc76 (patch)
treea17e1a767a89542ab59907462206d7dcf2e504b2 /src/s60main
downloadQt-8f427b2b914d5b575a4a7c0ed65d2fb8f45acc76.zip
Qt-8f427b2b914d5b575a4a7c0ed65d2fb8f45acc76.tar.gz
Qt-8f427b2b914d5b575a4a7c0ed65d2fb8f45acc76.tar.bz2
Long live Qt for S60!
Diffstat (limited to 'src/s60main')
-rw-r--r--src/s60main/qts60main.cpp32
-rw-r--r--src/s60main/qts60main_mcrt0.cpp77
-rw-r--r--src/s60main/qts60mainapplication.cpp61
-rw-r--r--src/s60main/qts60mainapplication.h64
-rw-r--r--src/s60main/qts60mainappui.cpp169
-rw-r--r--src/s60main/qts60mainappui.h99
-rw-r--r--src/s60main/qts60maindocument.cpp87
-rw-r--r--src/s60main/qts60maindocument.h93
-rw-r--r--src/s60main/s60main.pro55
-rw-r--r--src/s60main/s60main.rss56
10 files changed, 793 insertions, 0 deletions
diff --git a/src/s60main/qts60main.cpp b/src/s60main/qts60main.cpp
new file mode 100644
index 0000000..1d19cc6
--- /dev/null
+++ b/src/s60main/qts60main.cpp
@@ -0,0 +1,32 @@
+/****************************************************************************
+**
+** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the $MODULE$ of the Qt Toolkit.
+**
+** $TROLLTECH_DUAL_EMBEDDED_LICENSE$
+**
+****************************************************************************/
+
+// INCLUDE FILES
+#include <eikstart.h>
+#include "qts60mainapplication.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..10a784a
--- /dev/null
+++ b/src/s60main/qts60main_mcrt0.cpp
@@ -0,0 +1,77 @@
+/****************************************************************************
+**
+** This file is part of the $MODULE$ of the Qt Toolkit.
+**
+** $TROLLTECH_3RDPARTY_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 = 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..807b5af
--- /dev/null
+++ b/src/s60main/qts60mainapplication.cpp
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the $MODULE$ of the Qt Toolkit.
+**
+** $TROLLTECH_DUAL_EMBEDDED_LICENSE$
+**
+****************************************************************************/
+
+// INCLUDE FILES
+#include "qts60maindocument.h"
+#include "qts60mainapplication.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.h b/src/s60main/qts60mainapplication.h
new file mode 100644
index 0000000..318f83b
--- /dev/null
+++ b/src/s60main/qts60mainapplication.h
@@ -0,0 +1,64 @@
+/****************************************************************************
+**
+** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the $MODULE$ of the Qt Toolkit.
+**
+** $TROLLTECH_DUAL_EMBEDDED_LICENSE$
+**
+****************************************************************************/
+
+#ifndef __QtS60MainAPPLICATION_H__
+#define __QtS60MainAPPLICATION_H__
+
+// 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..016d49b
--- /dev/null
+++ b/src/s60main/qts60mainappui.cpp
@@ -0,0 +1,169 @@
+/****************************************************************************
+**
+** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the $MODULE$ of the Qt Toolkit.
+**
+** $TROLLTECH_DUAL_EMBEDDED_LICENSE$
+**
+****************************************************************************/
+
+// INCLUDE FILES
+#include <avkon.hrh>
+#include <eikmenub.h>
+#include <eikmenup.h>
+#include <barsread.h>
+#include <s60main.rsg>
+#include <avkon.rsg>
+
+#include "qts60mainappui.h"
+#include <QtGui/qapplication.h>
+#include <QtGui/qmenu.h>
+#include <QtGui/qmenubar.h>
+#include <QtGui/private/qt_s60_p.h>
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+// -----------------------------------------------------------------------------
+// CQtS60MainAppUi::ConstructL()
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CQtS60MainAppUi::ConstructL()
+{
+ // 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);
+
+ // 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 )
+{
+ switch (aCommand) {
+ case EEikCmdExit:
+ case EAknSoftkeyBack:
+ case EAknSoftkeyExit:
+ if (qApp)
+ qApp->exit();
+ break;
+ default:
+ // For now assume all unknown menu items are Qt menu items
+ QMenuBar::symbianCommands(aCommand);
+ break;
+ }
+}
+
+void CQtS60MainAppUi::HandleWsEventL(const TWsEvent& aEvent, CCoeControl *control)
+{
+ int result = 0;
+ if (qApp)
+ 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 = QtMainWrapper();
+ 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.h b/src/s60main/qts60mainappui.h
new file mode 100644
index 0000000..3addb0c
--- /dev/null
+++ b/src/s60main/qts60mainappui.h
@@ -0,0 +1,99 @@
+/****************************************************************************
+**
+** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the $MODULE$ of the Qt Toolkit.
+**
+** $TROLLTECH_DUAL_EMBEDDED_LICENSE$
+**
+****************************************************************************/
+
+#ifndef __QtS60MainAPPUI_H__
+#define __QtS60MainAPPUI_H__
+
+// 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 );
+
+ /**
+ * 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..9ab426d
--- /dev/null
+++ b/src/s60main/qts60maindocument.cpp
@@ -0,0 +1,87 @@
+/****************************************************************************
+**
+** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the $MODULE$ of the Qt Toolkit.
+**
+** $TROLLTECH_DUAL_EMBEDDED_LICENSE$
+**
+****************************************************************************/
+
+// INCLUDE FILES
+#include "qts60mainappui.h"
+#include "qts60maindocument.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.h b/src/s60main/qts60maindocument.h
new file mode 100644
index 0000000..4979e7f
--- /dev/null
+++ b/src/s60main/qts60maindocument.h
@@ -0,0 +1,93 @@
+/****************************************************************************
+**
+** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the $MODULE$ of the Qt Toolkit.
+**
+** $TROLLTECH_DUAL_EMBEDDED_LICENSE$
+**
+****************************************************************************/
+
+#ifndef __QTS60MAINDOCUMENT_H__
+#define __QTS60MAINDOCUMENT_H__
+
+// 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..f74943f
--- /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.h \
+ qts60mainappui.h \
+ qts60maindocument.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..569f59e
--- /dev/null
+++ b/src/s60main/s60main.rss
@@ -0,0 +1,56 @@
+/****************************************************************************
+**
+** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the $MODULE$ of the Qt Toolkit.
+**
+** $TROLLTECH_DUAL_EMBEDDED_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
+