mirror of https://github.com/cutefishos/appmotor
				
				
				
			Merge pull request #1 from special/master
Remove meegotouch dependency, mbooster, and prepare for out-of-tree pluginspull/1/head
						commit
						1294b75814
					
				@ -1,5 +0,0 @@
 | 
			
		||||
# Tell qmake to use pkg-config to get correct compiler and linker
 | 
			
		||||
# flags to make an application usable with applauncherd.
 | 
			
		||||
 | 
			
		||||
CONFIG += link_pkgconfig
 | 
			
		||||
PKGCONFIG += meegotouch-boostable
 | 
			
		||||
@ -1,3 +0,0 @@
 | 
			
		||||
Do not move meegotouch-boostable.pc unless you modify the CMakeLists.txt files of
 | 
			
		||||
the test applications accordingly. Building the test applications looks for the
 | 
			
		||||
.pc file in this directory to get correct linker flags.
 | 
			
		||||
@ -1,5 +0,0 @@
 | 
			
		||||
Name: meegotouch-boostable
 | 
			
		||||
Description: make application boostable by applauncherd
 | 
			
		||||
Version: 0.2.0
 | 
			
		||||
Libs: -pie -rdynamic 
 | 
			
		||||
Cflags: -fPIC -fvisibility=hidden -fvisibility-inlines-hidden
 | 
			
		||||
@ -1,149 +0,0 @@
 | 
			
		||||
/*! \page libmeegotouchboost Using the MeeGo Touch booster
 | 
			
		||||
 | 
			
		||||
This section describes how to use the MeeGo Touch booster. The
 | 
			
		||||
booster provides the application with the key libraries already
 | 
			
		||||
present in the process, and instances of \c MApplication and 
 | 
			
		||||
\c MApplicationWindow waiting in the cache.
 | 
			
		||||
 | 
			
		||||
\section mtboostprereq Prerequisites
 | 
			
		||||
 | 
			
		||||
The launcher can start an application if the following prerequisites are met:
 | 
			
		||||
 | 
			
		||||
\li MApplication and MApplicationWindow instances are taken into use from
 | 
			
		||||
MComponentCache
 | 
			
		||||
 | 
			
		||||
\li application is compiled and linked to a position-independent binary
 | 
			
		||||
(executable or library)
 | 
			
		||||
 | 
			
		||||
\li application is started with the \c invoker command instead of executing the
 | 
			
		||||
executable file
 | 
			
		||||
 | 
			
		||||
\section mtboostcompiling 1. Compiling and linking for launcher
 | 
			
		||||
 | 
			
		||||
If you intend to run a binary with \c applauncherd, compile it
 | 
			
		||||
with \c -fPIC option to produce position independent code. It is 
 | 
			
		||||
recommended to link them either as shared libraries, or, preferably, as 
 | 
			
		||||
position-independent executables, which can be executed both traditionally and
 | 
			
		||||
with the launcher. The \c -pie and \c -rdynamic linker flags
 | 
			
		||||
accomplish this.
 | 
			
		||||
 | 
			
		||||
To improve linking and loading times of shared object libraries, it is
 | 
			
		||||
recommended that you hide any unnecessary symbols from the resulting binary
 | 
			
		||||
by using \c -fvisibility=hidden and \c -fvisibility-inlines-hidden
 | 
			
		||||
flags as well.  However, \c applauncherd needs to find the entry point
 | 
			
		||||
for your application, so the symbol \c main needs to be explicitly made
 | 
			
		||||
visible. This can be done as follows:
 | 
			
		||||
 | 
			
		||||
\code
 | 
			
		||||
#include <MExport>
 | 
			
		||||
 | 
			
		||||
M_EXPORT int main(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
...
 | 
			
		||||
}
 | 
			
		||||
\endcode
 | 
			
		||||
 | 
			
		||||
If your application loads a plug-in that needs to access some symbols
 | 
			
		||||
in the main application, the symbols also need to be exported. In
 | 
			
		||||
addition, you must use the \c --global-syms invoker parameter, as
 | 
			
		||||
described in \ref invokerparameters "Advanced invoker command line parameters".
 | 
			
		||||
 | 
			
		||||
Normally you do not need to worry about the compiler and linker
 | 
			
		||||
flags, as the \c libmeegotouch-dev package provides configuration
 | 
			
		||||
options for \c qmake, \c CMake, and \c pkg-config. If you are building
 | 
			
		||||
a Debian package, make your package build-depend on \c
 | 
			
		||||
libmeegotouch-dev and your application binary package depend on 
 | 
			
		||||
\c applauncherd.
 | 
			
		||||
 | 
			
		||||
For details on how to get the compiler and linker flags, see 
 | 
			
		||||
\ref usingqmake "Using qmake", \ref usingcmake "Using CMake", or
 | 
			
		||||
\ref usingpkgconfig "Using pkg-config".
 | 
			
		||||
 | 
			
		||||
\section mtboostcache 2. Utilising the booster cache
 | 
			
		||||
 | 
			
		||||
Instantiating \c MApplication and \c MApplicationWindow is a relatively
 | 
			
		||||
expensive operation. The MeeGo Touch booster helps reduce application startup
 | 
			
		||||
latency by creating instances of the classes in \c MComponentCache.
 | 
			
		||||
 | 
			
		||||
MApplication instance must be taken from the MComponentCache. It is
 | 
			
		||||
recommended to take MApplicationWindow from the cache as well. Thus,
 | 
			
		||||
if the classes are instantiated in the application as follows:
 | 
			
		||||
 | 
			
		||||
\code
 | 
			
		||||
      MApplication application(argc, argv);
 | 
			
		||||
      MApplicationWindow window;
 | 
			
		||||
\endcode
 | 
			
		||||
 | 
			
		||||
Modify the code as follows:
 | 
			
		||||
 | 
			
		||||
\code
 | 
			
		||||
MApplication* application = MComponentCache::mApplication(argc, argv);
 | 
			
		||||
MApplicationWindow* window = MComponentCache::mApplicationWindow();
 | 
			
		||||
\endcode
 | 
			
		||||
 | 
			
		||||
The cache class works both with the booster and without it. In the
 | 
			
		||||
non-boosted case there are no pre-created instances, so the cache
 | 
			
		||||
class simply creates the instances on the fly.
 | 
			
		||||
 | 
			
		||||
The ownership of the instances is transferred from the cache to the
 | 
			
		||||
application code. The instances need to be deleted in the correct
 | 
			
		||||
order, deleting the \c MApplication instance before the \c
 | 
			
		||||
MApplicationWindow instance is known to cause crashes.
 | 
			
		||||
 | 
			
		||||
\section mtboostexit 3. Adapting application source code
 | 
			
		||||
 | 
			
		||||
Making use of the cache is typically the only modification that you need to
 | 
			
		||||
make in the application. However, if the application has explicit calls to \c
 | 
			
		||||
exit(), change these to use \c _exit() instead. The brief
 | 
			
		||||
explanation is that this prevents cleanup actions related to shared
 | 
			
		||||
libraries to be performed multiple times. For more details, see 
 | 
			
		||||
\ref limitations "Limitations and known issues".
 | 
			
		||||
 | 
			
		||||
\section mtboostinvoker 4. Launching the application
 | 
			
		||||
 | 
			
		||||
Now everything should be in place for launching the application. The
 | 
			
		||||
linker flags create a Position Independent Binary (PIE), so the
 | 
			
		||||
application can still be invoked from the command line. In order to
 | 
			
		||||
verify that the modifications done to the application and the build
 | 
			
		||||
scripts have not broken anything, it is a good idea at this point to
 | 
			
		||||
check that the application still starts and functions normally from
 | 
			
		||||
the command line:
 | 
			
		||||
 | 
			
		||||
\code
 | 
			
		||||
$ ./myApp
 | 
			
		||||
\endcode
 | 
			
		||||
 | 
			
		||||
The next step is to use the \c invoker to launch the application. In
 | 
			
		||||
order for this to work, you need to have \c applauncherd and \c
 | 
			
		||||
booster-m (the MeeGo Touch booster process) running. To check that this is the
 | 
			
		||||
case, you can do:
 | 
			
		||||
 | 
			
		||||
\code
 | 
			
		||||
$ ps ax | grep booster-m
 | 
			
		||||
\endcode
 | 
			
		||||
 | 
			
		||||
If you do not see the booster process, you need to start \c
 | 
			
		||||
applauncherd manually. In MeeGo 1.2 Harmattan, \c applauncherd should
 | 
			
		||||
be running as part of the UI session.
 | 
			
		||||
 | 
			
		||||
Once you have verified that the booster process is running, you can
 | 
			
		||||
use the following command line to ask the booster process to turn into
 | 
			
		||||
your application:
 | 
			
		||||
 | 
			
		||||
\code
 | 
			
		||||
invoker --type=m /usr/bin/myApp
 | 
			
		||||
\endcode
 | 
			
		||||
 | 
			
		||||
\section mtboostfinishingtouch 5. Finishing touches
 | 
			
		||||
 | 
			
		||||
The invoker can also provide single instance behaviour and a splash
 | 
			
		||||
screen for your application as follows. For more details, see 
 | 
			
		||||
\ref singleinstance "Enabling single instance support for an application" and 
 | 
			
		||||
\ref splash "Enabling a splash screen for an application".
 | 
			
		||||
 | 
			
		||||
\code
 | 
			
		||||
/usr/bin/invoker --single-instance --splash=/usr/share/myApp/splash.jpg --type=m /usr/bin/myApp
 | 
			
		||||
\endcode
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
@ -1,49 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applauncherd
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it 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.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifndef WHITELIST_H
 | 
			
		||||
#define WHITELIST_H
 | 
			
		||||
 | 
			
		||||
const char * const app_whitelist[] =
 | 
			
		||||
{
 | 
			
		||||
    "/usr/bin/conndlgs",
 | 
			
		||||
    "/usr/bin/call-ui",
 | 
			
		||||
    "/usr/bin/accounts-ui",
 | 
			
		||||
    "/usr/bin/grob",
 | 
			
		||||
    "/usr/bin/calc",
 | 
			
		||||
    "/usr/bin/organiser",
 | 
			
		||||
    "/usr/bin/call-history",
 | 
			
		||||
    "/usr/bin/camera-ui",
 | 
			
		||||
    "/usr/bin/contacts",
 | 
			
		||||
    "/usr/bin/duicontrolpanel.launch",
 | 
			
		||||
    "/usr/bin/gallery",
 | 
			
		||||
    "/usr/bin/fenix",
 | 
			
		||||
    "/usr/bin/mediaviewer",
 | 
			
		||||
    "/usr/bin/messaging-ui",
 | 
			
		||||
    "/usr/bin/music-suite",
 | 
			
		||||
    "/usr/bin/notes",
 | 
			
		||||
    "/usr/bin/office-tools",
 | 
			
		||||
    "/usr/bin/search",
 | 
			
		||||
    "/usr/bin/sync-ui",
 | 
			
		||||
    "/usr/bin/userguide",
 | 
			
		||||
    "/usr/bin/video-suite",
 | 
			
		||||
    "/usr/bin/videosheetplayer"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // WHITELIST_H
 | 
			
		||||
@ -1,28 +0,0 @@
 | 
			
		||||
# Qt support
 | 
			
		||||
include(${QT_USE_FILE})
 | 
			
		||||
 | 
			
		||||
set(LAUNCHER "${CMAKE_HOME_DIRECTORY}/src/launcherlib")
 | 
			
		||||
set(COMMON "${CMAKE_HOME_DIRECTORY}/src/common")
 | 
			
		||||
 | 
			
		||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${COMMON} ${LAUNCHER})
 | 
			
		||||
 | 
			
		||||
# Hide all symbols except the ones explicitly exported in the code (like main())
 | 
			
		||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
 | 
			
		||||
 | 
			
		||||
# Set sources
 | 
			
		||||
set(SRC mbooster.cpp pluginfactory.cpp ${LAUNCHER}/appdata.cpp ${LAUNCHER}/booster.cpp
 | 
			
		||||
${LAUNCHER}/connection.cpp ${LAUNCHER}/logger.cpp
 | 
			
		||||
${LAUNCHER}/singleinstance.cpp ${LAUNCHER}/socketmanager.cpp
 | 
			
		||||
${COMMON}/eventhandler.cpp)
 | 
			
		||||
 | 
			
		||||
set(MOC_HDRS ${COMMON}/eventhandler.h)
 | 
			
		||||
qt4_wrap_cpp(MOC_SRC ${MOC_HDRS})
 | 
			
		||||
 | 
			
		||||
# Set libraries to be linked.
 | 
			
		||||
link_libraries(${MEEGOTOUCH_LIBRARIES} ${LIBDL} ${QT_QTCORE_LIBRARY})
 | 
			
		||||
 | 
			
		||||
# Set executable
 | 
			
		||||
add_library(mbooster MODULE ${SRC} ${MOC_SRC})
 | 
			
		||||
 | 
			
		||||
# Add install rule
 | 
			
		||||
install(TARGETS mbooster DESTINATION /usr/lib/applauncherd/)
 | 
			
		||||
@ -1,123 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applauncherd
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it 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.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include "mbooster.h"
 | 
			
		||||
#include "logger.h"
 | 
			
		||||
#include "connection.h"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_MCOMPONENTCACHE
 | 
			
		||||
#include <mcomponentcache.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
const string MBooster::m_socketId  = "/tmp/boostm";
 | 
			
		||||
const string MBooster::m_temporaryProcessName = "booster-m";
 | 
			
		||||
 | 
			
		||||
const string & MBooster::socketId() const
 | 
			
		||||
{
 | 
			
		||||
    return m_socketId;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool MBooster::preload()
 | 
			
		||||
{
 | 
			
		||||
#ifdef HAVE_MCOMPONENTCACHE
 | 
			
		||||
    // Populate the cache (instantiates an MApplicationWindow and
 | 
			
		||||
    // an MApplication)
 | 
			
		||||
    MComponentCache::populateForMApplication();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const string & MBooster::socketName()
 | 
			
		||||
{
 | 
			
		||||
    return m_socketId;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const string & MBooster::temporaryProcessName()
 | 
			
		||||
{
 | 
			
		||||
    return m_temporaryProcessName;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const string & MBooster::boosterTemporaryProcessName() const
 | 
			
		||||
{
 | 
			
		||||
    return temporaryProcessName();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char MBooster::type()
 | 
			
		||||
{
 | 
			
		||||
    return 'm';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool MBooster::receiveDataFromInvoker(int socketFd)
 | 
			
		||||
{
 | 
			
		||||
    // Use the default implementation if in boot mode
 | 
			
		||||
    // (it won't require QApplication running).
 | 
			
		||||
 | 
			
		||||
    if (bootMode())
 | 
			
		||||
    {
 | 
			
		||||
        return Booster::receiveDataFromInvoker(socketFd);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        // Setup the conversation channel with the invoker.
 | 
			
		||||
        setConnection(new Connection(socketFd));
 | 
			
		||||
 | 
			
		||||
        EventHandler handler(this, EventHandler::MEventHandler);
 | 
			
		||||
        handler.runEventLoop();
 | 
			
		||||
 | 
			
		||||
        if (!connection()->connected())
 | 
			
		||||
        {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Receive application data from the invoker
 | 
			
		||||
        if(!connection()->receiveApplicationData(appData()))
 | 
			
		||||
        {
 | 
			
		||||
            connection()->close();
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Close the connection if exit status doesn't need
 | 
			
		||||
        // to be sent back to invoker
 | 
			
		||||
        if (!connection()->isReportAppExitStatusNeeded())
 | 
			
		||||
        {
 | 
			
		||||
            connection()->close();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MBooster::preinit()
 | 
			
		||||
{
 | 
			
		||||
    QString appName = QFileInfo(m_appData->argv()[0]).fileName();
 | 
			
		||||
 | 
			
		||||
    QString appClass = appName.left(1).toUpper();
 | 
			
		||||
    if (appName.length() > 1)
 | 
			
		||||
        appClass += appName.right(appName.length() - 1);
 | 
			
		||||
 | 
			
		||||
    // char* app_name = qstrdup(appName.toLatin1().data());
 | 
			
		||||
    // QApplication::setAppName(app_name);
 | 
			
		||||
 | 
			
		||||
    // char* app_class = qstrdup(appClass.toLatin1().data());
 | 
			
		||||
    // QApplication::setAppClass(app_class);
 | 
			
		||||
 | 
			
		||||
    // Set the magic attribute so that paths are reinitialized
 | 
			
		||||
    // QApplication::setAttribute(Qt::AA_LinuxReinitPathsFromArgv0, true);
 | 
			
		||||
}
 | 
			
		||||
@ -1,117 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applauncherd
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it 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.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifndef MBOOSTER_H
 | 
			
		||||
#define MBOOSTER_H
 | 
			
		||||
 | 
			
		||||
#include <QApplication>
 | 
			
		||||
#include "QFileInfo"
 | 
			
		||||
 | 
			
		||||
#include "eventhandler.h"
 | 
			
		||||
#include "booster.h"
 | 
			
		||||
 | 
			
		||||
#include <signal.h>
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
    \class MBooster
 | 
			
		||||
    \brief MeeGo Touch -specific version of the Booster.
 | 
			
		||||
 | 
			
		||||
    MBooster effectively fills MComponentCache with fresh objects.
 | 
			
		||||
    MeeGo Touch applications can then try to use already initialized objects 
 | 
			
		||||
    from MComponentCache. This can significantly reduce the startup time of a 
 | 
			
		||||
    MeeGo Touch application.
 | 
			
		||||
 */
 | 
			
		||||
class MBooster : public Booster
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
    //! \brief Constructor
 | 
			
		||||
    MBooster() {}
 | 
			
		||||
 | 
			
		||||
    //! \brief Destructor
 | 
			
		||||
    virtual ~MBooster() {}
 | 
			
		||||
 | 
			
		||||
    /*!
 | 
			
		||||
     * \brief Return the socket name common to all MBooster objects.
 | 
			
		||||
     * \return Path to the socket file.
 | 
			
		||||
     */
 | 
			
		||||
    static const string & socketName();
 | 
			
		||||
 | 
			
		||||
    //! Return the process name to be used when booster is not
 | 
			
		||||
    //! yet transformed into a running application
 | 
			
		||||
    static const string & temporaryProcessName();
 | 
			
		||||
 | 
			
		||||
    //! \reimp
 | 
			
		||||
    virtual const string & boosterTemporaryProcessName() const;
 | 
			
		||||
 | 
			
		||||
    //! \reimp
 | 
			
		||||
    virtual char boosterType() const { return type(); }
 | 
			
		||||
 | 
			
		||||
    /*!
 | 
			
		||||
     * \brief Return a unique character ('m') represtenting the type of MBoosters.
 | 
			
		||||
     * \return Type character.
 | 
			
		||||
     */
 | 
			
		||||
    static char type();
 | 
			
		||||
 | 
			
		||||
    //! \reimp
 | 
			
		||||
    virtual const string & socketId() const;
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
 | 
			
		||||
    //! \reimp
 | 
			
		||||
    virtual bool preload();
 | 
			
		||||
 | 
			
		||||
    //! \reimp
 | 
			
		||||
    virtual bool receiveDataFromInvoker(int socketFd);
 | 
			
		||||
 | 
			
		||||
    //! \reimp
 | 
			
		||||
    virtual void preinit();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
 | 
			
		||||
    //! Disable copy-constructor
 | 
			
		||||
    MBooster(const MBooster & r);
 | 
			
		||||
 | 
			
		||||
    //! Disable assignment operator
 | 
			
		||||
    MBooster & operator= (const MBooster & r);
 | 
			
		||||
 | 
			
		||||
    static const string m_socketId;
 | 
			
		||||
 | 
			
		||||
    //! Process name to be used when booster is not
 | 
			
		||||
    //! yet transformed into a running application
 | 
			
		||||
    static const string m_temporaryProcessName;
 | 
			
		||||
 | 
			
		||||
    //! wait for socket connection
 | 
			
		||||
    void accept();
 | 
			
		||||
 | 
			
		||||
private slots:
 | 
			
		||||
 | 
			
		||||
    //! Qt signal handler for SIGHUP.
 | 
			
		||||
    void handleSigHup();
 | 
			
		||||
 | 
			
		||||
    //! Qt signal handler for theme change
 | 
			
		||||
    void notifyThemeChange();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef UNIT_TEST
 | 
			
		||||
    friend class Ut_MBooster;
 | 
			
		||||
#endif
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // MBOOSTER_H
 | 
			
		||||
@ -1,45 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applauncherd
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it 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.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <QtCore>
 | 
			
		||||
#include "mbooster.h"
 | 
			
		||||
 | 
			
		||||
extern "C" 
 | 
			
		||||
{
 | 
			
		||||
    // Create a new plugin instance.
 | 
			
		||||
    Q_DECL_EXPORT void * create()
 | 
			
		||||
    {
 | 
			
		||||
        return new MBooster;
 | 
			
		||||
    }    
 | 
			
		||||
 | 
			
		||||
    Q_DECL_EXPORT char type()
 | 
			
		||||
    {
 | 
			
		||||
        return MBooster::type();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Q_DECL_EXPORT const char * socketName()
 | 
			
		||||
    {
 | 
			
		||||
        return MBooster::socketName().c_str();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Q_DECL_EXPORT const char * temporaryProcessName()
 | 
			
		||||
    {
 | 
			
		||||
        return MBooster::temporaryProcessName().c_str();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,31 +0,0 @@
 | 
			
		||||
# Set sources
 | 
			
		||||
set(SRC fala_exit.cpp)
 | 
			
		||||
 | 
			
		||||
link_libraries(${MEEGOTOUCH_LIBRARIES})
 | 
			
		||||
 | 
			
		||||
include(${QT_USE_FILE})
 | 
			
		||||
 | 
			
		||||
# Use the compiler and linker flags given in meegotouch-boostable.pc
 | 
			
		||||
# in the source tree.
 | 
			
		||||
execute_process(COMMAND "env" 
 | 
			
		||||
                         "PKG_CONFIG_PATH=${CMAKE_SOURCE_DIR}/data/pkgconfig" 
 | 
			
		||||
                         "/usr/bin/pkg-config" 
 | 
			
		||||
                         "--cflags" 
 | 
			
		||||
                         "meegotouch-boostable" 
 | 
			
		||||
                WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
 | 
			
		||||
                OUTPUT_VARIABLE booster_cflags 
 | 
			
		||||
                OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
			
		||||
execute_process(COMMAND "env" 
 | 
			
		||||
                        "PKG_CONFIG_PATH=${CMAKE_SOURCE_DIR}/data/pkgconfig" 
 | 
			
		||||
                        "/usr/bin/pkg-config" "--libs" 
 | 
			
		||||
                        "meegotouch-boostable" 
 | 
			
		||||
                WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
 | 
			
		||||
                OUTPUT_VARIABLE booster_libs 
 | 
			
		||||
                OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
			
		||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${booster_cflags}")
 | 
			
		||||
set(CMAKE_EXE_LINKER_FLAGS ${booster_libs})
 | 
			
		||||
 | 
			
		||||
add_executable(fala_exit ${SRC})
 | 
			
		||||
 | 
			
		||||
install(PROGRAMS fala_exit DESTINATION /usr/bin/)
 | 
			
		||||
 | 
			
		||||
@ -1,46 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applauncherd
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it 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.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <MApplication>
 | 
			
		||||
#include <MApplicationPage>
 | 
			
		||||
#include <MApplicationWindow>
 | 
			
		||||
#include <MLayout>
 | 
			
		||||
#include <QTimer>
 | 
			
		||||
#include <MLinearLayoutPolicy>
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_MCOMPONENTCACHE
 | 
			
		||||
#include <mcomponentcache.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
M_EXPORT int main(int argc, char ** argv)
 | 
			
		||||
{
 | 
			
		||||
#ifdef HAVE_MCOMPONENTCACHE
 | 
			
		||||
    MApplication *app = MComponentCache::mApplication(argc, argv);
 | 
			
		||||
    MApplicationWindow *window = MComponentCache::mApplicationWindow();
 | 
			
		||||
#else
 | 
			
		||||
    MApplication *app = new MApplication(argc, argv);
 | 
			
		||||
    MApplicationWindow *window = new MApplicationWindow;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    MApplicationPage *mainPage = new MApplicationPage;
 | 
			
		||||
    window->show();
 | 
			
		||||
    mainPage->appear(window);
 | 
			
		||||
    QTimer::singleShot(3000, app, SLOT(quit()));
 | 
			
		||||
    exit(app->exec());
 | 
			
		||||
}
 | 
			
		||||
@ -1,35 +0,0 @@
 | 
			
		||||
# Set sources
 | 
			
		||||
set(SRC fala_multi-instance.cpp mainpage.cpp mainwindow.cpp)
 | 
			
		||||
set(MOC_HDRS mainpage.h mainwindow.h)
 | 
			
		||||
qt4_wrap_cpp(MOC_SRC ${MOC_HDRS})
 | 
			
		||||
 | 
			
		||||
link_libraries(${MEEGOTOUCH_LIBRARIES})
 | 
			
		||||
 | 
			
		||||
# Use the compiler and linker flags given in meegotouch-boostable.pc
 | 
			
		||||
# in the source tree.
 | 
			
		||||
execute_process(COMMAND "env" 
 | 
			
		||||
                         "PKG_CONFIG_PATH=${CMAKE_SOURCE_DIR}/data/pkgconfig" 
 | 
			
		||||
                         "/usr/bin/pkg-config" 
 | 
			
		||||
                         "--cflags" 
 | 
			
		||||
                         "meegotouch-boostable" 
 | 
			
		||||
                WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
 | 
			
		||||
                OUTPUT_VARIABLE booster_cxxflags 
 | 
			
		||||
                OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
			
		||||
execute_process(COMMAND "env" 
 | 
			
		||||
                        "PKG_CONFIG_PATH=${CMAKE_SOURCE_DIR}/data/pkgconfig" 
 | 
			
		||||
                        "/usr/bin/pkg-config" "--libs" 
 | 
			
		||||
                        "meegotouch-boostable" 
 | 
			
		||||
                WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
 | 
			
		||||
                OUTPUT_VARIABLE booster_libs 
 | 
			
		||||
                OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
			
		||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${booster_cxxflags}")
 | 
			
		||||
set(CMAKE_EXE_LINKER_FLAGS ${booster_libs})
 | 
			
		||||
 | 
			
		||||
# Enable Qt-support
 | 
			
		||||
include(${QT_USE_FILE})
 | 
			
		||||
 | 
			
		||||
add_executable(fala_multi-instance ${SRC} ${MOC_SRC})
 | 
			
		||||
 | 
			
		||||
# Install
 | 
			
		||||
install(PROGRAMS fala_multi-instance DESTINATION /usr/bin/)
 | 
			
		||||
 | 
			
		||||
@ -1,26 +0,0 @@
 | 
			
		||||
#include <MApplication>
 | 
			
		||||
#include <MApplicationWindow>
 | 
			
		||||
#include <MApplicationService>
 | 
			
		||||
#include <MApplicationPage>
 | 
			
		||||
#include <MComponentCache>
 | 
			
		||||
#include <MExport>
 | 
			
		||||
#include "mainpage.h"
 | 
			
		||||
#include "mainwindow.h"
 | 
			
		||||
 | 
			
		||||
M_EXPORT int main(int argc, char ** argv)
 | 
			
		||||
{
 | 
			
		||||
    QString servicename(QString("com.nokia.multihello") + QString(argv[1]));
 | 
			
		||||
    QString title(QString("App ")+ QString(argv[1])); 
 | 
			
		||||
    MApplicationService *mService = new MApplicationService(servicename, 0);
 | 
			
		||||
    MApplication * app = MComponentCache::mApplication(argc, argv, "multihello", mService);
 | 
			
		||||
    MainWindow window;
 | 
			
		||||
    MainPage mainPage;
 | 
			
		||||
    mainPage.setName(title);
 | 
			
		||||
 | 
			
		||||
    window.show();
 | 
			
		||||
 | 
			
		||||
    mainPage.appear();
 | 
			
		||||
  
 | 
			
		||||
    _exit(app->exec());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,65 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of libmeegotouch.
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it 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.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <MLayout>
 | 
			
		||||
#include <MLabel>
 | 
			
		||||
#include <MGridLayoutPolicy>
 | 
			
		||||
#include <MApplicationWindow>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
#include "mainpage.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
MainPage::MainPage()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MainPage::~MainPage()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainPage::setName(QString name)
 | 
			
		||||
{
 | 
			
		||||
   myName = name;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainPage::createContent()
 | 
			
		||||
{
 | 
			
		||||
    MLayout *layout = new MLayout(centralWidget());
 | 
			
		||||
    MGridLayoutPolicy *policy = new MGridLayoutPolicy(layout);
 | 
			
		||||
    policy->setSpacing(20.0);
 | 
			
		||||
 | 
			
		||||
    MLabel *label1 = new MLabel(myName);
 | 
			
		||||
    label1->setAlignment(Qt::AlignCenter);
 | 
			
		||||
    policy->addItem(label1, 1, 1);
 | 
			
		||||
 | 
			
		||||
    layout->setLandscapePolicy(policy);
 | 
			
		||||
    layout->setPortraitPolicy(policy);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainPage::exitDisplayEvent()
 | 
			
		||||
{
 | 
			
		||||
    std::cerr << myName.toStdString() << " MainPage hidden" << std::endl;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainPage::enterDisplayEvent()
 | 
			
		||||
{
 | 
			
		||||
    std::cerr << myName.toStdString() << " MainPage visible" << std::endl;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,45 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of libmeegotouch.
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it 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.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifndef MAINPAGE_H
 | 
			
		||||
#define MAINPAGE_H
 | 
			
		||||
 | 
			
		||||
#include <MApplicationPage>
 | 
			
		||||
#include <QString>
 | 
			
		||||
 | 
			
		||||
class MainPage : public MApplicationPage
 | 
			
		||||
{
 | 
			
		||||
    Q_OBJECT
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
    MainPage();
 | 
			
		||||
    virtual ~MainPage();
 | 
			
		||||
    virtual void createContent();
 | 
			
		||||
    void setName(QString name);
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    //! Visibility re-imps
 | 
			
		||||
    virtual void exitDisplayEvent();
 | 
			
		||||
    virtual void enterDisplayEvent();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    QString myName;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // MAINPAGE_H
 | 
			
		||||
@ -1,76 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of libmeegotouch.
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it 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.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
#include "mainwindow.h"
 | 
			
		||||
 | 
			
		||||
#include <QFile>
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
 | 
			
		||||
void FANGORNLOG(const char* s)
 | 
			
		||||
{
 | 
			
		||||
    QFile f("/tmp/fala_multi-instance.log");
 | 
			
		||||
    f.open(QIODevice::Append);
 | 
			
		||||
    f.write(s, qstrlen(s));
 | 
			
		||||
    f.close();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void timestamp(const char *s)
 | 
			
		||||
{
 | 
			
		||||
    timeval tim;
 | 
			
		||||
    char msg[80];
 | 
			
		||||
    gettimeofday(&tim, NULL);
 | 
			
		||||
    snprintf(msg, 80, "%d%03d %s\n", 
 | 
			
		||||
             static_cast<int>(tim.tv_sec), static_cast<int>(tim.tv_usec/1000), s);
 | 
			
		||||
    FANGORNLOG(msg);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MainWindow::MainWindow()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MainWindow::~MainWindow()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool MainWindow::event(QEvent *event)
 | 
			
		||||
{
 | 
			
		||||
    bool retVal = MApplicationWindow::event(event);
 | 
			
		||||
    if (event->type() == QEvent::WindowStateChange)
 | 
			
		||||
    {
 | 
			
		||||
        char message[32];
 | 
			
		||||
        if (isMinimized()) 
 | 
			
		||||
        {
 | 
			
		||||
            std::cerr << "Minimized" << std::endl;
 | 
			
		||||
            snprintf(message, 32, "%i Minimized", getpid());
 | 
			
		||||
            timestamp(message);
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            std::cerr << "Maximized"  << std::endl;
 | 
			
		||||
            snprintf(message, 32, "%i Maximized", getpid());
 | 
			
		||||
            timestamp(message);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return retVal;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,39 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of libmeegotouch.
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it 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.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifndef MAINWINDOW_H
 | 
			
		||||
#define MAINWINDOW_H
 | 
			
		||||
 | 
			
		||||
#include <MApplicationWindow>
 | 
			
		||||
#include <QString>
 | 
			
		||||
#include <QEvent>
 | 
			
		||||
 | 
			
		||||
class MainWindow : public MApplicationWindow
 | 
			
		||||
{
 | 
			
		||||
    Q_OBJECT
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
    MainWindow();
 | 
			
		||||
    virtual ~MainWindow();
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    bool event(QEvent *event);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // MAINWINDOW_H
 | 
			
		||||
@ -1,43 +0,0 @@
 | 
			
		||||
# Set sources
 | 
			
		||||
set(SRC main.cpp mainpage.cpp multiwindowcontent.cpp)
 | 
			
		||||
 | 
			
		||||
# Set moc headers
 | 
			
		||||
set(MOC_HDRS mainpage.h multiwindowcontent.h)
 | 
			
		||||
qt4_wrap_cpp(MOC_SRC ${MOC_HDRS})
 | 
			
		||||
 | 
			
		||||
link_libraries(${MEEGOTOUCH_LIBRARIES})
 | 
			
		||||
 | 
			
		||||
# Use the compiler and linker flags given in meegotouch-boostable.pc
 | 
			
		||||
# in the source tree.
 | 
			
		||||
execute_process(COMMAND "env" 
 | 
			
		||||
                         "PKG_CONFIG_PATH=${CMAKE_SOURCE_DIR}/data/pkgconfig" 
 | 
			
		||||
                         "/usr/bin/pkg-config" 
 | 
			
		||||
                         "--cflags" 
 | 
			
		||||
                         "meegotouch-boostable" 
 | 
			
		||||
                WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
 | 
			
		||||
                OUTPUT_VARIABLE booster_cxxflags 
 | 
			
		||||
                OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
			
		||||
execute_process(COMMAND "env" 
 | 
			
		||||
                        "PKG_CONFIG_PATH=${CMAKE_SOURCE_DIR}/data/pkgconfig" 
 | 
			
		||||
                        "/usr/bin/pkg-config" "--libs" 
 | 
			
		||||
                        "meegotouch-boostable" 
 | 
			
		||||
                WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
 | 
			
		||||
                OUTPUT_VARIABLE booster_libs 
 | 
			
		||||
                OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
			
		||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${booster_cxxflags}")
 | 
			
		||||
set(CMAKE_EXE_LINKER_FLAGS ${booster_libs})
 | 
			
		||||
 | 
			
		||||
# Enable Qt-support
 | 
			
		||||
include(${QT_USE_FILE})
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Enable Qt-support
 | 
			
		||||
include(${QT_USE_FILE})
 | 
			
		||||
 | 
			
		||||
set(NAME fala_multi-window)
 | 
			
		||||
 | 
			
		||||
add_executable(${NAME} ${SRC} ${MOC_SRC})
 | 
			
		||||
 | 
			
		||||
# Install
 | 
			
		||||
install(PROGRAMS ${NAME} DESTINATION /usr/bin)
 | 
			
		||||
 | 
			
		||||
@ -1,12 +0,0 @@
 | 
			
		||||
README
 | 
			
		||||
------
 | 
			
		||||
 | 
			
		||||
Multiwindow test application. 
 | 
			
		||||
 | 
			
		||||
Command to launch application
 | 
			
		||||
 | 
			
		||||
invoker --test-mode --type=m /usr/bin/fala_multi-window [-window-not-from-cache]
 | 
			
		||||
 | 
			
		||||
Application can be started with the switch "-output-level debug" to get information what happens inside it.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,21 +0,0 @@
 | 
			
		||||
TEMPLATE     = app
 | 
			
		||||
TARGET       = fala_multi-window
 | 
			
		||||
target.path  = /usr/bin
 | 
			
		||||
OBJECTS_DIR  = ./.obj
 | 
			
		||||
MOC_DIR      = ./.moc
 | 
			
		||||
DEPENDPATH  += $$INCLUDEPATH
 | 
			
		||||
CONFIG      -= app_bundle
 | 
			
		||||
CONFIG      += meegotouch-boostable
 | 
			
		||||
 | 
			
		||||
SOURCES += main.cpp \
 | 
			
		||||
    mainpage.cpp \
 | 
			
		||||
    multiwindowcontent.cpp
 | 
			
		||||
 | 
			
		||||
HEADERS += mainpage.h \
 | 
			
		||||
    multiwindowcontent.h
 | 
			
		||||
 | 
			
		||||
# Install instructions
 | 
			
		||||
INSTALLS += target
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
DEFINES += HAVE_MCOMPONENTCACHE
 | 
			
		||||
@ -1,74 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applifed.
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it 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.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include "multiwindowcontent.h"
 | 
			
		||||
#include <QString>
 | 
			
		||||
#include <MApplication>
 | 
			
		||||
#include <exception>
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_MCOMPONENTCACHE
 | 
			
		||||
#include <mcomponentcache.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
M_EXPORT int main(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
    MApplication *app;
 | 
			
		||||
 | 
			
		||||
    try
 | 
			
		||||
    {
 | 
			
		||||
#ifdef HAVE_MCOMPONENTCACHE
 | 
			
		||||
        app = MComponentCache::mApplication(argc, argv);
 | 
			
		||||
 | 
			
		||||
        bool bWindowNotFromCache = false;
 | 
			
		||||
        const QString sWindowNotFromCache = "window-not-from-cache";
 | 
			
		||||
 | 
			
		||||
        for (int i = 1; i < argc; i++) {
 | 
			
		||||
            QString sArg = QString(argv[i]);
 | 
			
		||||
            if (sArg.contains(sWindowNotFromCache,Qt::CaseInsensitive)) {
 | 
			
		||||
                bWindowNotFromCache = true;
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (bWindowNotFromCache) {
 | 
			
		||||
            MultiWindowContent mwContent(false);
 | 
			
		||||
            mwContent.createWindows();
 | 
			
		||||
            mwContent.activateWindow(1);
 | 
			
		||||
        } else {
 | 
			
		||||
            MultiWindowContent mwContent(true);
 | 
			
		||||
            mwContent.createWindows();
 | 
			
		||||
            mwContent.activateWindow(1);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
        app = new MApplication(argc, argv);
 | 
			
		||||
        MultiWindowContent mwContent(false);
 | 
			
		||||
        mwContent.createWindows();
 | 
			
		||||
        mwContent.activateWindow(1);
 | 
			
		||||
#endif
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    catch(std::exception& e)
 | 
			
		||||
    {
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return app->exec();
 | 
			
		||||
}
 | 
			
		||||
@ -1,51 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applifed.
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it 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.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <MLayout>
 | 
			
		||||
#include <MLabel>
 | 
			
		||||
#include <MGridLayoutPolicy>
 | 
			
		||||
#include <MDebug>
 | 
			
		||||
 | 
			
		||||
#include "mainpage.h"
 | 
			
		||||
 | 
			
		||||
MainPage::MainPage(QString windowName) :
 | 
			
		||||
    m_windowName(windowName)
 | 
			
		||||
{
 | 
			
		||||
    setTitle(windowName);
 | 
			
		||||
 | 
			
		||||
    m_layout = new MLayout(centralWidget());
 | 
			
		||||
    m_policy = new MGridLayoutPolicy(m_layout);
 | 
			
		||||
    m_policy->setSpacing(20.0);
 | 
			
		||||
 | 
			
		||||
    m_label = new MLabel(m_windowName);
 | 
			
		||||
    m_label->setAlignment(Qt::AlignCenter);
 | 
			
		||||
    m_policy->addItem(m_label, 0, 0);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MainPage::~MainPage()
 | 
			
		||||
{
 | 
			
		||||
    delete m_policy;
 | 
			
		||||
    m_policy = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainPage::createContent()
 | 
			
		||||
{}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,46 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applifed.
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it 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.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifndef MAINPAGE_H
 | 
			
		||||
#define MAINPAGE_H
 | 
			
		||||
 | 
			
		||||
#include <MApplicationPage>
 | 
			
		||||
#include <QString>
 | 
			
		||||
 | 
			
		||||
class MLabel;
 | 
			
		||||
class MLayout;
 | 
			
		||||
class MGridLayoutPolicy;
 | 
			
		||||
 | 
			
		||||
class MainPage : public MApplicationPage
 | 
			
		||||
{
 | 
			
		||||
    Q_OBJECT
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
    MainPage(QString windowName);
 | 
			
		||||
    virtual ~MainPage();
 | 
			
		||||
    virtual void createContent();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    QString              m_windowName;
 | 
			
		||||
    MLabel             * m_label;
 | 
			
		||||
    MLayout            * m_layout;
 | 
			
		||||
    MGridLayoutPolicy  * m_policy;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // MAINPAGE_H
 | 
			
		||||
@ -1,72 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applifed.
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it 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.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include "multiwindowcontent.h"
 | 
			
		||||
#include "mainpage.h"
 | 
			
		||||
 | 
			
		||||
#include <MDebug>
 | 
			
		||||
#include <MApplicationWindow>
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_MCOMPONENTCACHE
 | 
			
		||||
#include <mcomponentcache.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
MultiWindowContent::MultiWindowContent(bool windowFromCache):
 | 
			
		||||
    m_windowFromCache(windowFromCache)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MultiWindowContent::createWindows()
 | 
			
		||||
{
 | 
			
		||||
    // Create windows
 | 
			
		||||
    for (int i = 0; i < NUM_WINDOWS; i++) {
 | 
			
		||||
#ifdef HAVE_MCOMPONENTCACHE
 | 
			
		||||
        m_window[i] = m_windowFromCache? MComponentCache::mApplicationWindow() : new MApplicationWindow;
 | 
			
		||||
#else
 | 
			
		||||
        m_window[i] = new MApplicationWindow;
 | 
			
		||||
#endif
 | 
			
		||||
        m_window[i]->setWindowTitle(QString("Window %1").arg(i + 1));
 | 
			
		||||
        m_window[i]->setObjectName(QString("Window %1").arg(i + 1));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Create pages
 | 
			
		||||
    for (int i = 0; i < NUM_WINDOWS; i++)
 | 
			
		||||
        m_mainPage[i] = new MainPage(QString("Window %1").arg(i + 1));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MultiWindowContent::activateWindow(int index)
 | 
			
		||||
{
 | 
			
		||||
    index--;
 | 
			
		||||
    if (index >= 0 && index < NUM_WINDOWS)  {
 | 
			
		||||
 | 
			
		||||
        // Show the desired window
 | 
			
		||||
        m_window[index]->show();
 | 
			
		||||
        m_window[index]->activateWindow();
 | 
			
		||||
        m_window[index]->raise();
 | 
			
		||||
 | 
			
		||||
        m_mainPage[index]->appear(m_window[index]);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
MultiWindowContent::~MultiWindowContent()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,44 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applifed.
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it 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.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifndef MULTIWINDOWCONTENT_H
 | 
			
		||||
#define MULTIWINDOWCONTENT_H
 | 
			
		||||
 | 
			
		||||
#include <MApplicationWindow>
 | 
			
		||||
 | 
			
		||||
#include "mainpage.h"
 | 
			
		||||
 | 
			
		||||
class MultiWindowContent
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    static const int NUM_WINDOWS = 3;
 | 
			
		||||
 | 
			
		||||
    MultiWindowContent(bool windowFromCache);
 | 
			
		||||
    virtual ~MultiWindowContent();
 | 
			
		||||
    void activateWindow(int index);
 | 
			
		||||
 | 
			
		||||
    void createWindows();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    MApplicationWindow *m_window[NUM_WINDOWS];
 | 
			
		||||
    MainPage *m_mainPage[NUM_WINDOWS];
 | 
			
		||||
    bool m_windowFromCache;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // MULTIWINDOWCONTENT_H
 | 
			
		||||
@ -1,33 +0,0 @@
 | 
			
		||||
# Set sources
 | 
			
		||||
set(SRC helloworld.cpp)
 | 
			
		||||
 | 
			
		||||
link_libraries(${MEEGOTOUCH_LIBRARIES})
 | 
			
		||||
 | 
			
		||||
include(${QT_USE_FILE})
 | 
			
		||||
 | 
			
		||||
# Use the compiler and linker flags given in meegotouch-boostable.pc
 | 
			
		||||
# in the source tree.
 | 
			
		||||
execute_process(COMMAND "env" 
 | 
			
		||||
                         "PKG_CONFIG_PATH=${CMAKE_SOURCE_DIR}/data/pkgconfig" 
 | 
			
		||||
                         "/usr/bin/pkg-config" 
 | 
			
		||||
                         "--cflags" 
 | 
			
		||||
                         "meegotouch-boostable" 
 | 
			
		||||
                WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
 | 
			
		||||
                OUTPUT_VARIABLE booster_cflags 
 | 
			
		||||
                OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
			
		||||
execute_process(COMMAND "env" 
 | 
			
		||||
                        "PKG_CONFIG_PATH=${CMAKE_SOURCE_DIR}/data/pkgconfig" 
 | 
			
		||||
                        "/usr/bin/pkg-config" "--libs" 
 | 
			
		||||
                        "meegotouch-boostable" 
 | 
			
		||||
                WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
 | 
			
		||||
                OUTPUT_VARIABLE booster_libs 
 | 
			
		||||
                OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
			
		||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${booster_cflags}")
 | 
			
		||||
set(CMAKE_EXE_LINKER_FLAGS ${booster_libs})
 | 
			
		||||
 | 
			
		||||
add_executable(fala_hello ${SRC})
 | 
			
		||||
 | 
			
		||||
install(PROGRAMS fala_hello DESTINATION /usr/bin/ RENAME fala_ft_hello)
 | 
			
		||||
install(PROGRAMS fala_hello DESTINATION /usr/share/fala_images)
 | 
			
		||||
install(SCRIPT scripts/create_links.cmake)
 | 
			
		||||
 | 
			
		||||
@ -1,136 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applauncherd
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it 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.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <MApplication>
 | 
			
		||||
#include <MApplicationPage>
 | 
			
		||||
#include <MApplicationWindow>
 | 
			
		||||
#include <QDebug>
 | 
			
		||||
#include <MExport>
 | 
			
		||||
#include <MButton>
 | 
			
		||||
#include <MLabel>
 | 
			
		||||
#include <QString>
 | 
			
		||||
#include <MSlider>
 | 
			
		||||
#include <MLayout>
 | 
			
		||||
#include <MLinearLayoutPolicy>
 | 
			
		||||
#include <QFile>
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
#include <exception>
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_MCOMPONENTCACHE
 | 
			
		||||
#include <mcomponentcache.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
QString log_file = "/tmp/fala_hello.log";
 | 
			
		||||
 | 
			
		||||
void FANGORNLOG(const char *s)
 | 
			
		||||
{
 | 
			
		||||
    QFile f(log_file);
 | 
			
		||||
    f.open(QIODevice::Append);
 | 
			
		||||
    f.write(s, qstrlen(s));
 | 
			
		||||
    f.write("\n", 1);
 | 
			
		||||
    f.close();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void timestamp(const char *s)
 | 
			
		||||
{
 | 
			
		||||
    timeval tim;
 | 
			
		||||
    char msg[80];
 | 
			
		||||
    gettimeofday(&tim, NULL);
 | 
			
		||||
    snprintf(msg, 80, "%d%03d %s", 
 | 
			
		||||
             static_cast<int>(tim.tv_sec), static_cast<int>(tim.tv_usec)/1000, s);
 | 
			
		||||
    FANGORNLOG(msg);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void timestamp(const QString& s)
 | 
			
		||||
{
 | 
			
		||||
    QByteArray ba = s.toLocal8Bit();
 | 
			
		||||
    char *p = new char[ba.size() + 1];
 | 
			
		||||
    strcpy(p, ba.data());
 | 
			
		||||
    timestamp(p);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
M_EXPORT int main(int argc, char ** argv)
 | 
			
		||||
{
 | 
			
		||||
    MApplication *app;
 | 
			
		||||
    try
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_MCOMPONENTCACHE
 | 
			
		||||
        app = MComponentCache::mApplication(argc, argv);
 | 
			
		||||
        MApplicationWindow *window = NULL;
 | 
			
		||||
 | 
			
		||||
        bool bWindowNotFromCache = false;
 | 
			
		||||
        const QString sWindowNotFromCache = "window-not-from-cache";
 | 
			
		||||
 | 
			
		||||
        for (int i = 1; i < argc; i++) {
 | 
			
		||||
            QString sArg = QString(argv[i]);
 | 
			
		||||
            if (sArg.contains(sWindowNotFromCache,Qt::CaseInsensitive)) {
 | 
			
		||||
		bWindowNotFromCache = true;
 | 
			
		||||
		break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
	
 | 
			
		||||
        if (bWindowNotFromCache) {
 | 
			
		||||
            window = new MApplicationWindow();
 | 
			
		||||
            timestamp("MApplicationWindow NOT from cache");
 | 
			
		||||
        } else {
 | 
			
		||||
            window = MComponentCache::mApplicationWindow();
 | 
			
		||||
            timestamp("MApplicationWindow from cache");
 | 
			
		||||
        }
 | 
			
		||||
#else
 | 
			
		||||
        app = new MApplication(argc, argv);
 | 
			
		||||
        MApplicationWindow *window = new MApplicationWindow;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
        timestamp(QString("applicationDirPath: ").append(QApplication::applicationDirPath()));
 | 
			
		||||
        timestamp(QString("applicationFilePath: ").append(QApplication::applicationFilePath()));
 | 
			
		||||
 | 
			
		||||
        MApplicationPage *mainPage = new MApplicationPage;
 | 
			
		||||
        mainPage->setTitle("Hello World! (Now supports Launcher)");
 | 
			
		||||
        mainPage->centralWidget()->setObjectName("centralWidget");
 | 
			
		||||
 | 
			
		||||
        MLayout *layout = new MLayout(mainPage->centralWidget());
 | 
			
		||||
        MLinearLayoutPolicy *linearPolicy = new MLinearLayoutPolicy(layout,
 | 
			
		||||
                                                                    Qt::Vertical);
 | 
			
		||||
 | 
			
		||||
        linearPolicy->addItem(new MLabel("I'm a label"));
 | 
			
		||||
        linearPolicy->addItem(new MButton("Click me!"));
 | 
			
		||||
        linearPolicy->addItem(new MSlider);
 | 
			
		||||
 | 
			
		||||
        window->show();
 | 
			
		||||
 | 
			
		||||
        const char *foobar = "foo!";
 | 
			
		||||
        for (int i = 0; i < argc; ++i)
 | 
			
		||||
        {
 | 
			
		||||
            if (QString(argv[i]) == "-segfault")
 | 
			
		||||
            {
 | 
			
		||||
                const_cast<char *>(foobar)[3] = 'z';
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Explicitly state where to appear, just to be sure :-)
 | 
			
		||||
        mainPage->appear(window);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    catch(std::exception& e)
 | 
			
		||||
    {
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
    _exit(app->exec());
 | 
			
		||||
}
 | 
			
		||||
@ -1,6 +0,0 @@
 | 
			
		||||
execute_process(COMMAND echo "Creating symlinks for fala_ft_hello..")
 | 
			
		||||
execute_process(COMMAND ln -v -s /usr/bin/fala_ft_hello $ENV{DESTDIR}/usr/bin/fala_ft_hello1)
 | 
			
		||||
execute_process(COMMAND ln -v -s /usr/bin/fala_e_helloworld $ENV{DESTDIR}/usr/bin/fala_e_helloworld1)
 | 
			
		||||
execute_process(COMMAND ln -v -s /usr/bin/fala_e_helloworld $ENV{DESTDIR}/usr/bin/fala_e_helloworld2)
 | 
			
		||||
execute_process(COMMAND ln -v -s /usr/bin/fala_ft_hello $ENV{DESTDIR}/usr/bin/fala_ft_hello2)
 | 
			
		||||
 | 
			
		||||
@ -1,5 +0,0 @@
 | 
			
		||||
add_subdirectory(src)
 | 
			
		||||
 | 
			
		||||
# Install themes
 | 
			
		||||
install(DIRECTORY themes/ DESTINATION /usr/share/themes/base/meegotouch/fala_ft_themetest)
 | 
			
		||||
 | 
			
		||||
@ -1,31 +0,0 @@
 | 
			
		||||
# Set sources
 | 
			
		||||
set(SRC themetest.cpp)
 | 
			
		||||
 | 
			
		||||
link_libraries(${MEEGOTOUCH_LIBRARIES})
 | 
			
		||||
 | 
			
		||||
include(${QT_USE_FILE})
 | 
			
		||||
 | 
			
		||||
# Use the compiler and linker flags given in meegotouch-boostable.pc
 | 
			
		||||
# in the source tree.
 | 
			
		||||
execute_process(COMMAND "env" 
 | 
			
		||||
                         "PKG_CONFIG_PATH=${CMAKE_SOURCE_DIR}/data/pkgconfig" 
 | 
			
		||||
                         "/usr/bin/pkg-config" 
 | 
			
		||||
                         "--cflags" 
 | 
			
		||||
                         "meegotouch-boostable" 
 | 
			
		||||
                WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
 | 
			
		||||
                OUTPUT_VARIABLE booster_cflags 
 | 
			
		||||
                OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
			
		||||
execute_process(COMMAND "env" 
 | 
			
		||||
                        "PKG_CONFIG_PATH=${CMAKE_SOURCE_DIR}/data/pkgconfig" 
 | 
			
		||||
                        "/usr/bin/pkg-config" "--libs" 
 | 
			
		||||
                        "meegotouch-boostable" 
 | 
			
		||||
                WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
 | 
			
		||||
                OUTPUT_VARIABLE booster_libs 
 | 
			
		||||
                OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
			
		||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${booster_cflags}")
 | 
			
		||||
set(CMAKE_EXE_LINKER_FLAGS ${booster_libs})
 | 
			
		||||
 | 
			
		||||
add_executable(fala_themetest ${SRC})
 | 
			
		||||
 | 
			
		||||
# Install
 | 
			
		||||
install(PROGRAMS fala_themetest DESTINATION /usr/bin/ RENAME fala_ft_themetest )
 | 
			
		||||
@ -1,68 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applauncherd
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it 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.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <MApplication>
 | 
			
		||||
#include <MApplicationPage>
 | 
			
		||||
#include <MApplicationWindow>
 | 
			
		||||
#include <MLabel>
 | 
			
		||||
#include <MButton>
 | 
			
		||||
#include <QDebug>
 | 
			
		||||
#include <MLinearLayoutPolicy>
 | 
			
		||||
#include <MLayout>
 | 
			
		||||
#include <MTheme>
 | 
			
		||||
#include <exception>
 | 
			
		||||
 | 
			
		||||
#include <mcomponentcache.h>
 | 
			
		||||
 | 
			
		||||
extern "C" __attribute__((visibility("default"))) int main(int, char**);
 | 
			
		||||
 | 
			
		||||
int main(int argc, char ** argv)
 | 
			
		||||
{
 | 
			
		||||
    MApplication *app;
 | 
			
		||||
    try
 | 
			
		||||
    {
 | 
			
		||||
        MApplication *app = MComponentCache::mApplication(argc, argv, "fala_ft_themetest");
 | 
			
		||||
        MApplicationWindow *window = MComponentCache::mApplicationWindow();
 | 
			
		||||
        MApplicationPage page;
 | 
			
		||||
        page.setTitle("fala_ft_themetest");
 | 
			
		||||
 | 
			
		||||
        MLayout *layout = new MLayout;
 | 
			
		||||
        MLinearLayoutPolicy *policy = new MLinearLayoutPolicy(layout, Qt::Vertical);
 | 
			
		||||
        policy->setSpacing(10);
 | 
			
		||||
 | 
			
		||||
        MLabel *label = new MLabel(QString("Hello, themed world!"));
 | 
			
		||||
        label->setObjectName("themedlabel");
 | 
			
		||||
        label->setAlignment(Qt::AlignCenter);
 | 
			
		||||
        policy->addItem(label);
 | 
			
		||||
 | 
			
		||||
        label = new MLabel(QString("With sheep"));
 | 
			
		||||
        label->setObjectName("themedlabelwithgraphics");
 | 
			
		||||
        label->setAlignment(Qt::AlignLeft);
 | 
			
		||||
        policy->addItem(label);
 | 
			
		||||
 | 
			
		||||
        page.centralWidget()->setLayout(layout);
 | 
			
		||||
        page.appear();
 | 
			
		||||
        window->show();
 | 
			
		||||
    }
 | 
			
		||||
    catch(std::exception& e)
 | 
			
		||||
    {
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
    _exit(app->exec());
 | 
			
		||||
}
 | 
			
		||||
@ -1,55 +0,0 @@
 | 
			
		||||
#themedlabel.Landscape {
 | 
			
		||||
    preferred-size: 300 79;
 | 
			
		||||
    minimum-size: 128 79;
 | 
			
		||||
    maximum-size: 300 79;
 | 
			
		||||
 | 
			
		||||
    text-color: $COLOR_INVERTED_FOREGROUND;
 | 
			
		||||
    background-color: #D4F5D0;
 | 
			
		||||
    font: $FONT_XLARGE;
 | 
			
		||||
    text-margin-left: 20px;
 | 
			
		||||
	margin-left: $MARGIN_DOUBLE;
 | 
			
		||||
	margin-top:$MARGIN_DOUBLE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#themedlabel.Portrait {
 | 
			
		||||
    preferred-size: 300 93;
 | 
			
		||||
    minimum-size: 105 93;
 | 
			
		||||
    maximum-size: 300 93;
 | 
			
		||||
 | 
			
		||||
    text-color: $COLOR_INVERTED_FOREGROUND;
 | 
			
		||||
    background-color: #D4F5D0;
 | 
			
		||||
    font: $FONT_XLARGE;
 | 
			
		||||
    text-margin-left: 20px;
 | 
			
		||||
 | 
			
		||||
	margin-left: $MARGIN_DOUBLE;
 | 
			
		||||
	margin-top:$MARGIN_DOUBLE;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#themedlabelwithgraphics.Landscape {
 | 
			
		||||
    preferred-size: 300 79;
 | 
			
		||||
    minimum-size: 128 79;
 | 
			
		||||
    maximum-size: 300 79;
 | 
			
		||||
 | 
			
		||||
    text-color: $COLOR_INVERTED_FOREGROUND;
 | 
			
		||||
    background-image: "baa";
 | 
			
		||||
    font: $FONT_XLARGE;
 | 
			
		||||
    text-margin-left: 20px;
 | 
			
		||||
	margin-left: $MARGIN_DOUBLE;
 | 
			
		||||
	margin-top:$MARGIN_DOUBLE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#themedlabelwithgraphics.Portrait {
 | 
			
		||||
    preferred-size: 300 93;
 | 
			
		||||
    minimum-size: 105 93;
 | 
			
		||||
    maximum-size: 300 93;
 | 
			
		||||
 | 
			
		||||
    text-color: $COLOR_INVERTED_FOREGROUND;
 | 
			
		||||
    background-image: "baa";
 | 
			
		||||
    font: $FONT_XLARGE;
 | 
			
		||||
    text-margin-left: 20px;
 | 
			
		||||
 | 
			
		||||
	margin-left: $MARGIN_DOUBLE;
 | 
			
		||||
	margin-top:$MARGIN_DOUBLE;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -1,711 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
			
		||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
 | 
			
		||||
 | 
			
		||||
<svg
 | 
			
		||||
   xmlns:dc="http://purl.org/dc/elements/1.1/"
 | 
			
		||||
   xmlns:cc="http://creativecommons.org/ns#"
 | 
			
		||||
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | 
			
		||||
   xmlns:svg="http://www.w3.org/2000/svg"
 | 
			
		||||
   xmlns="http://www.w3.org/2000/svg"
 | 
			
		||||
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
 | 
			
		||||
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
 | 
			
		||||
   width="48px"
 | 
			
		||||
   height="48px"
 | 
			
		||||
   id="svg3644"
 | 
			
		||||
   version="1.1"
 | 
			
		||||
   inkscape:version="0.47pre4 r22446"
 | 
			
		||||
   sodipodi:docname="sheep.svg">
 | 
			
		||||
  <defs
 | 
			
		||||
     id="defs3646">
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       sodipodi:type="inkscape:persp3d"
 | 
			
		||||
       inkscape:vp_x="0 : 24 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_z="48 : 24 : 1"
 | 
			
		||||
       inkscape:persp3d-origin="24 : 16 : 1"
 | 
			
		||||
       id="perspective3652" />
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       id="perspective3672"
 | 
			
		||||
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
 | 
			
		||||
       inkscape:vp_z="1 : 0.5 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_x="0 : 0.5 : 1"
 | 
			
		||||
       sodipodi:type="inkscape:persp3d" />
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       id="perspective3672-6"
 | 
			
		||||
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
 | 
			
		||||
       inkscape:vp_z="1 : 0.5 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_x="0 : 0.5 : 1"
 | 
			
		||||
       sodipodi:type="inkscape:persp3d" />
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       id="perspective3672-3"
 | 
			
		||||
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
 | 
			
		||||
       inkscape:vp_z="1 : 0.5 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_x="0 : 0.5 : 1"
 | 
			
		||||
       sodipodi:type="inkscape:persp3d" />
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       id="perspective3672-35"
 | 
			
		||||
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
 | 
			
		||||
       inkscape:vp_z="1 : 0.5 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_x="0 : 0.5 : 1"
 | 
			
		||||
       sodipodi:type="inkscape:persp3d" />
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       id="perspective3672-2"
 | 
			
		||||
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
 | 
			
		||||
       inkscape:vp_z="1 : 0.5 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_x="0 : 0.5 : 1"
 | 
			
		||||
       sodipodi:type="inkscape:persp3d" />
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       id="perspective3672-4"
 | 
			
		||||
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
 | 
			
		||||
       inkscape:vp_z="1 : 0.5 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_x="0 : 0.5 : 1"
 | 
			
		||||
       sodipodi:type="inkscape:persp3d" />
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       id="perspective3672-67"
 | 
			
		||||
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
 | 
			
		||||
       inkscape:vp_z="1 : 0.5 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_x="0 : 0.5 : 1"
 | 
			
		||||
       sodipodi:type="inkscape:persp3d" />
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       id="perspective3672-33"
 | 
			
		||||
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
 | 
			
		||||
       inkscape:vp_z="1 : 0.5 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_x="0 : 0.5 : 1"
 | 
			
		||||
       sodipodi:type="inkscape:persp3d" />
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       id="perspective3789"
 | 
			
		||||
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
 | 
			
		||||
       inkscape:vp_z="1 : 0.5 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_x="0 : 0.5 : 1"
 | 
			
		||||
       sodipodi:type="inkscape:persp3d" />
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       id="perspective3679"
 | 
			
		||||
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
 | 
			
		||||
       inkscape:vp_z="1 : 0.5 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_x="0 : 0.5 : 1"
 | 
			
		||||
       sodipodi:type="inkscape:persp3d" />
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       id="perspective3701"
 | 
			
		||||
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
 | 
			
		||||
       inkscape:vp_z="1 : 0.5 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_x="0 : 0.5 : 1"
 | 
			
		||||
       sodipodi:type="inkscape:persp3d" />
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       id="perspective3701-9"
 | 
			
		||||
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
 | 
			
		||||
       inkscape:vp_z="1 : 0.5 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_x="0 : 0.5 : 1"
 | 
			
		||||
       sodipodi:type="inkscape:persp3d" />
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       id="perspective3701-5"
 | 
			
		||||
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
 | 
			
		||||
       inkscape:vp_z="1 : 0.5 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_x="0 : 0.5 : 1"
 | 
			
		||||
       sodipodi:type="inkscape:persp3d" />
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       id="perspective3701-1"
 | 
			
		||||
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
 | 
			
		||||
       inkscape:vp_z="1 : 0.5 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_x="0 : 0.5 : 1"
 | 
			
		||||
       sodipodi:type="inkscape:persp3d" />
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       id="perspective3701-0"
 | 
			
		||||
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
 | 
			
		||||
       inkscape:vp_z="1 : 0.5 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_x="0 : 0.5 : 1"
 | 
			
		||||
       sodipodi:type="inkscape:persp3d" />
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       id="perspective3701-13"
 | 
			
		||||
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
 | 
			
		||||
       inkscape:vp_z="1 : 0.5 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_x="0 : 0.5 : 1"
 | 
			
		||||
       sodipodi:type="inkscape:persp3d" />
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       id="perspective3701-8"
 | 
			
		||||
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
 | 
			
		||||
       inkscape:vp_z="1 : 0.5 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_x="0 : 0.5 : 1"
 | 
			
		||||
       sodipodi:type="inkscape:persp3d" />
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       id="perspective3701-7"
 | 
			
		||||
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
 | 
			
		||||
       inkscape:vp_z="1 : 0.5 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_x="0 : 0.5 : 1"
 | 
			
		||||
       sodipodi:type="inkscape:persp3d" />
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       id="perspective3701-89"
 | 
			
		||||
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
 | 
			
		||||
       inkscape:vp_z="1 : 0.5 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_x="0 : 0.5 : 1"
 | 
			
		||||
       sodipodi:type="inkscape:persp3d" />
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       id="perspective3701-3"
 | 
			
		||||
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
 | 
			
		||||
       inkscape:vp_z="1 : 0.5 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_x="0 : 0.5 : 1"
 | 
			
		||||
       sodipodi:type="inkscape:persp3d" />
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       id="perspective3701-6"
 | 
			
		||||
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
 | 
			
		||||
       inkscape:vp_z="1 : 0.5 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_x="0 : 0.5 : 1"
 | 
			
		||||
       sodipodi:type="inkscape:persp3d" />
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       id="perspective3701-33"
 | 
			
		||||
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
 | 
			
		||||
       inkscape:vp_z="1 : 0.5 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_x="0 : 0.5 : 1"
 | 
			
		||||
       sodipodi:type="inkscape:persp3d" />
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       id="perspective3701-18"
 | 
			
		||||
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
 | 
			
		||||
       inkscape:vp_z="1 : 0.5 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_x="0 : 0.5 : 1"
 | 
			
		||||
       sodipodi:type="inkscape:persp3d" />
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       id="perspective3701-05"
 | 
			
		||||
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
 | 
			
		||||
       inkscape:vp_z="1 : 0.5 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_x="0 : 0.5 : 1"
 | 
			
		||||
       sodipodi:type="inkscape:persp3d" />
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       id="perspective3701-10"
 | 
			
		||||
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
 | 
			
		||||
       inkscape:vp_z="1 : 0.5 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_x="0 : 0.5 : 1"
 | 
			
		||||
       sodipodi:type="inkscape:persp3d" />
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       id="perspective3701-04"
 | 
			
		||||
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
 | 
			
		||||
       inkscape:vp_z="1 : 0.5 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_x="0 : 0.5 : 1"
 | 
			
		||||
       sodipodi:type="inkscape:persp3d" />
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       id="perspective3701-99"
 | 
			
		||||
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
 | 
			
		||||
       inkscape:vp_z="1 : 0.5 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_x="0 : 0.5 : 1"
 | 
			
		||||
       sodipodi:type="inkscape:persp3d" />
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       id="perspective3701-98"
 | 
			
		||||
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
 | 
			
		||||
       inkscape:vp_z="1 : 0.5 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_x="0 : 0.5 : 1"
 | 
			
		||||
       sodipodi:type="inkscape:persp3d" />
 | 
			
		||||
    <inkscape:perspective
 | 
			
		||||
       id="perspective3701-39"
 | 
			
		||||
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
 | 
			
		||||
       inkscape:vp_z="1 : 0.5 : 1"
 | 
			
		||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
			
		||||
       inkscape:vp_x="0 : 0.5 : 1"
 | 
			
		||||
       sodipodi:type="inkscape:persp3d" />
 | 
			
		||||
  </defs>
 | 
			
		||||
  <sodipodi:namedview
 | 
			
		||||
     id="base"
 | 
			
		||||
     pagecolor="#ffffff"
 | 
			
		||||
     bordercolor="#666666"
 | 
			
		||||
     borderopacity="1.0"
 | 
			
		||||
     inkscape:pageopacity="0.0"
 | 
			
		||||
     inkscape:pageshadow="2"
 | 
			
		||||
     inkscape:zoom="14"
 | 
			
		||||
     inkscape:cx="31.835131"
 | 
			
		||||
     inkscape:cy="24"
 | 
			
		||||
     inkscape:current-layer="layer1"
 | 
			
		||||
     showgrid="true"
 | 
			
		||||
     inkscape:grid-bbox="true"
 | 
			
		||||
     inkscape:document-units="px"
 | 
			
		||||
     inkscape:window-width="1680"
 | 
			
		||||
     inkscape:window-height="1026"
 | 
			
		||||
     inkscape:window-x="1440"
 | 
			
		||||
     inkscape:window-y="0"
 | 
			
		||||
     inkscape:window-maximized="1" />
 | 
			
		||||
  <metadata
 | 
			
		||||
     id="metadata3649">
 | 
			
		||||
    <rdf:RDF>
 | 
			
		||||
      <cc:Work
 | 
			
		||||
         rdf:about="">
 | 
			
		||||
        <dc:format>image/svg+xml</dc:format>
 | 
			
		||||
        <dc:type
 | 
			
		||||
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
 | 
			
		||||
        <dc:title />
 | 
			
		||||
      </cc:Work>
 | 
			
		||||
    </rdf:RDF>
 | 
			
		||||
  </metadata>
 | 
			
		||||
  <g
 | 
			
		||||
     id="baa"
 | 
			
		||||
     inkscape:label="Layer 1"
 | 
			
		||||
     inkscape:groupmode="layer">
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="arc"
 | 
			
		||||
       id="path3654"
 | 
			
		||||
       sodipodi:cx="9.6428576"
 | 
			
		||||
       sodipodi:cy="18.785715"
 | 
			
		||||
       sodipodi:rx="3.7857144"
 | 
			
		||||
       sodipodi:ry="1.9285715"
 | 
			
		||||
       d="m 13.428572,18.785715 a 3.7857144,1.9285715 0 1 1 -7.5714288,0 3.7857144,1.9285715 0 1 1 7.5714288,0 z"
 | 
			
		||||
       style="fill:#ff9955"
 | 
			
		||||
       transform="matrix(1.5420309,-0.25805364,0.26095121,1.8649676,-11.438222,-17.21116)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="arc"
 | 
			
		||||
       style="fill:#ff9955"
 | 
			
		||||
       id="path3656"
 | 
			
		||||
       sodipodi:cx="21.928572"
 | 
			
		||||
       sodipodi:cy="27.928572"
 | 
			
		||||
       sodipodi:rx="10.071428"
 | 
			
		||||
       sodipodi:ry="4.7857141"
 | 
			
		||||
       d="m 32,27.928572 a 10.071428,4.7857141 0 1 1 -20.142857,0 10.071428,4.7857141 0 1 1 20.142857,0 z"
 | 
			
		||||
       transform="matrix(1.3571374,0,0,1.4919304,-3.0082753,-18.979186)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="arc"
 | 
			
		||||
       style="fill:#ff9955"
 | 
			
		||||
       id="path3658"
 | 
			
		||||
       sodipodi:cx="24.357143"
 | 
			
		||||
       sodipodi:cy="16.071428"
 | 
			
		||||
       sodipodi:rx="4.9285712"
 | 
			
		||||
       sodipodi:ry="2.3571429"
 | 
			
		||||
       d="m 29.285715,16.071428 a 4.9285712,2.3571429 0 1 1 -9.857143,0 4.9285712,2.3571429 0 1 1 9.857143,0 z"
 | 
			
		||||
       transform="matrix(0.87235109,1.142885,-1.0396276,0.95899438,9.8040159,-24.611052)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="arc"
 | 
			
		||||
       style="fill:#552200"
 | 
			
		||||
       id="path3662"
 | 
			
		||||
       sodipodi:cx="7.9285712"
 | 
			
		||||
       sodipodi:cy="38.07143"
 | 
			
		||||
       sodipodi:rx="0.64285713"
 | 
			
		||||
       sodipodi:ry="2.5"
 | 
			
		||||
       d="m 8.5714284,38.07143 a 0.64285713,2.5 0 1 1 -1.2857143,0 0.64285713,2.5 0 1 1 1.2857143,0 z"
 | 
			
		||||
       transform="matrix(1.3365194,0.259071,-0.23566444,1.4692646,16.402748,-28.908781)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="arc"
 | 
			
		||||
       style="fill:#552200"
 | 
			
		||||
       id="path3662-7"
 | 
			
		||||
       sodipodi:cx="7.9285712"
 | 
			
		||||
       sodipodi:cy="38.07143"
 | 
			
		||||
       sodipodi:rx="0.64285713"
 | 
			
		||||
       sodipodi:ry="2.5"
 | 
			
		||||
       d="m 8.5714284,38.07143 a 0.64285713,2.5 0 1 1 -1.2857143,0 0.64285713,2.5 0 1 1 1.2857143,0 z"
 | 
			
		||||
       transform="matrix(1.3571374,0,0,1.4919304,6.7825021,-21.217084)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="arc"
 | 
			
		||||
       style="fill:#552200"
 | 
			
		||||
       id="path3662-0"
 | 
			
		||||
       sodipodi:cx="7.9285712"
 | 
			
		||||
       sodipodi:cy="38.07143"
 | 
			
		||||
       sodipodi:rx="0.64285713"
 | 
			
		||||
       sodipodi:ry="2.5"
 | 
			
		||||
       d="m 8.5714284,38.07143 a 0.64285713,2.5 0 1 1 -1.2857143,0 0.64285713,2.5 0 1 1 1.2857143,0 z"
 | 
			
		||||
       transform="matrix(1.275292,-0.51027027,0.46416834,1.401956,8.7597902,-19.287371)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="arc"
 | 
			
		||||
       style="fill:#552200"
 | 
			
		||||
       id="path3662-6"
 | 
			
		||||
       sodipodi:cx="7.9285712"
 | 
			
		||||
       sodipodi:cy="38.07143"
 | 
			
		||||
       sodipodi:rx="0.64285713"
 | 
			
		||||
       sodipodi:ry="2.5"
 | 
			
		||||
       d="m 8.5714284,38.07143 a 0.64285713,2.5 0 1 1 -1.2857143,0 0.64285713,2.5 0 1 1 1.2857143,0 z"
 | 
			
		||||
       transform="matrix(1.3365194,0.259071,-0.23566444,1.4692646,35.693487,-21.76883)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="arc"
 | 
			
		||||
       style="fill:#552200"
 | 
			
		||||
       id="path3662-4"
 | 
			
		||||
       sodipodi:cx="7.9285712"
 | 
			
		||||
       sodipodi:cy="38.07143"
 | 
			
		||||
       sodipodi:rx="0.64285713"
 | 
			
		||||
       sodipodi:ry="2.5"
 | 
			
		||||
       d="m 8.5714284,38.07143 a 0.64285713,2.5 0 1 1 -1.2857143,0 0.64285713,2.5 0 1 1 1.2857143,0 z"
 | 
			
		||||
       transform="matrix(-1.3954334,0.28264367,0.22527631,1.4734212,41.550185,-28.934224)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="arc"
 | 
			
		||||
       style="fill:#552200"
 | 
			
		||||
       id="path3662-06"
 | 
			
		||||
       sodipodi:cx="7.9285712"
 | 
			
		||||
       sodipodi:cy="38.07143"
 | 
			
		||||
       sodipodi:rx="0.64285713"
 | 
			
		||||
       sodipodi:ry="2.5"
 | 
			
		||||
       d="m 8.5714284,38.07143 a 0.64285713,2.5 0 1 1 -1.2857143,0 0.64285713,2.5 0 1 1 1.2857143,0 z"
 | 
			
		||||
       transform="matrix(1.3365194,0.259071,-0.23566444,1.4692646,38.213885,-22.195096)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="arc"
 | 
			
		||||
       style="fill:#ff9955"
 | 
			
		||||
       id="path3662-49"
 | 
			
		||||
       sodipodi:cx="7.9285712"
 | 
			
		||||
       sodipodi:cy="38.07143"
 | 
			
		||||
       sodipodi:rx="0.64285713"
 | 
			
		||||
       sodipodi:ry="2.5"
 | 
			
		||||
       d="m 8.5714284,38.07143 a 0.64285713,2.5 0 1 1 -1.2857143,0 0.64285713,2.5 0 1 1 1.2857143,0 z"
 | 
			
		||||
       transform="matrix(-0.23566447,-1.4692646,1.3365194,-0.25907103,-9.7578617,41.32338)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="arc"
 | 
			
		||||
       style="fill:#552200"
 | 
			
		||||
       id="path3662-3"
 | 
			
		||||
       sodipodi:cx="7.9285712"
 | 
			
		||||
       sodipodi:cy="38.07143"
 | 
			
		||||
       sodipodi:rx="0.64285713"
 | 
			
		||||
       sodipodi:ry="2.5"
 | 
			
		||||
       d="m 8.5714284,38.07143 a 0.64285713,2.5 0 1 1 -1.2857143,0 0.64285713,2.5 0 1 1 1.2857143,0 z"
 | 
			
		||||
       transform="matrix(1.3365194,0.259071,-0.23566444,1.4692646,19.601715,-28.37595)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="arc"
 | 
			
		||||
       style="fill:#552200"
 | 
			
		||||
       id="path3662-8"
 | 
			
		||||
       sodipodi:cx="7.9285712"
 | 
			
		||||
       sodipodi:cy="38.07143"
 | 
			
		||||
       sodipodi:rx="0.64285713"
 | 
			
		||||
       sodipodi:ry="2.5"
 | 
			
		||||
       d="m 8.5714284,38.07143 a 0.64285713,2.5 0 1 1 -1.2857143,0 0.64285713,2.5 0 1 1 1.2857143,0 z"
 | 
			
		||||
       transform="matrix(1.3365194,-0.259071,0.23566444,1.4692646,1.8514265,-18.300104)" />
 | 
			
		||||
    <rect
 | 
			
		||||
       style="fill:#000000"
 | 
			
		||||
       id="rect3770"
 | 
			
		||||
       width="1.6164445"
 | 
			
		||||
       height="3.9025185"
 | 
			
		||||
       x="-0.72986764"
 | 
			
		||||
       y="10.57036"
 | 
			
		||||
       transform="matrix(0.73503661,-0.67802742,0.60673898,0.79490113,0,0)" />
 | 
			
		||||
    <rect
 | 
			
		||||
       style="fill:#000000"
 | 
			
		||||
       id="rect3770-8"
 | 
			
		||||
       width="1.5909256"
 | 
			
		||||
       height="3.9612279"
 | 
			
		||||
       x="-15.635607"
 | 
			
		||||
       y="-4.541935"
 | 
			
		||||
       transform="matrix(-0.84429955,-0.53587151,0.46496422,-0.88532947,0,0)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="spiral"
 | 
			
		||||
       style="fill:#552200;stroke:#6e4e4e;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
 | 
			
		||||
       id="path3818"
 | 
			
		||||
       sodipodi:cx="-42.714287"
 | 
			
		||||
       sodipodi:cy="3"
 | 
			
		||||
       sodipodi:expansion="1"
 | 
			
		||||
       sodipodi:revolution="1.5"
 | 
			
		||||
       sodipodi:radius="2.236068"
 | 
			
		||||
       sodipodi:argument="-8.9611301"
 | 
			
		||||
       sodipodi:t0="0"
 | 
			
		||||
       d="m -42.714287,3 c -0.200553,-0.1002769 0.03623,-0.3198153 0.166667,-0.3333333 0.353489,-0.036633 0.546923,0.3673047 0.5,0.6666668 -0.08393,0.5354884 -0.679426,0.7934401 -1.166667,0.6666664 -0.715046,-0.1860455 -1.045363,-0.9950943 -0.833333,-1.6666669 0.282602,-0.8951006 1.311932,-1.2994739 2.166667,-0.9999995 1.075597,0.376858 1.554694,1.6293044 1.166666,2.6666669"
 | 
			
		||||
       transform="matrix(-2.5258969e-8,-1.4919304,1.3571374,-2.776773e-8,6.5752464,-48.260282)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="spiral"
 | 
			
		||||
       style="fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
 | 
			
		||||
       id="path3669"
 | 
			
		||||
       sodipodi:cx="-82.285713"
 | 
			
		||||
       sodipodi:cy="-4.7142859"
 | 
			
		||||
       sodipodi:expansion="1"
 | 
			
		||||
       sodipodi:revolution="3"
 | 
			
		||||
       sodipodi:radius="7.49966"
 | 
			
		||||
       sodipodi:argument="-17.983253"
 | 
			
		||||
       sodipodi:t0="0"
 | 
			
		||||
       d="m -82.285713,-4.7142859 c 0.243529,0.2865053 -0.266055,0.4696244 -0.476191,0.4047619 -0.569455,-0.1757733 -0.602452,-0.9261053 -0.333333,-1.357143 0.481391,-0.7710252 1.569661,-0.777685 2.238095,-0.2619043 0.980955,0.7569288 0.958927,2.2222408 0.190476,3.1190477 -1.024223,1.1953025 -2.878063,1.1427762 -4,0.1190469 -1.411843,-1.2882589 -1.327986,-3.5354404 -0.04762,-4.8809525 1.550697,-1.6295954 4.193695,-1.5139846 5.761905,0.023811 1.848081,1.8122383 1.700479,4.8524971 -0.09524,6.64285722 -2.073227,2.06704158 -5.511664,1.88730403 -7.523809,-0.16666802 -2.286327,-2.3338536 -2.074361,-6.1710887 0.238097,-8.404762 2.594227,-2.5058436 6.830699,-2.2615846 9.285714,0.3095254 2.725532,2.8544193 2.448934,7.4904516 -0.380954,10.1666669"
 | 
			
		||||
       transform="matrix(0.33768974,0,0,0.35259921,-58.444238,-7.3117593)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="spiral"
 | 
			
		||||
       style="fill:none;stroke:#000000;stroke-width:0.39123183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
 | 
			
		||||
       id="path3669-4"
 | 
			
		||||
       sodipodi:cx="-82.285713"
 | 
			
		||||
       sodipodi:cy="-4.7142859"
 | 
			
		||||
       sodipodi:expansion="1"
 | 
			
		||||
       sodipodi:revolution="3"
 | 
			
		||||
       sodipodi:radius="7.49966"
 | 
			
		||||
       sodipodi:argument="-17.983253"
 | 
			
		||||
       sodipodi:t0="0"
 | 
			
		||||
       d="m -82.285713,-4.7142859 c 0.243529,0.2865053 -0.266055,0.4696244 -0.476191,0.4047619 -0.569455,-0.1757733 -0.602452,-0.9261053 -0.333333,-1.357143 0.481391,-0.7710252 1.569661,-0.777685 2.238095,-0.2619043 0.980955,0.7569288 0.958927,2.2222408 0.190476,3.1190477 -1.024223,1.1953025 -2.878063,1.1427762 -4,0.1190469 -1.411843,-1.2882589 -1.327986,-3.5354404 -0.04762,-4.8809525 1.550697,-1.6295954 4.193695,-1.5139846 5.761905,0.023811 1.848081,1.8122383 1.700479,4.8524971 -0.09524,6.64285722 -2.073227,2.06704158 -5.511664,1.88730403 -7.523809,-0.16666802 -2.286327,-2.3338536 -2.074361,-6.1710887 0.238097,-8.404762 2.594227,-2.5058436 6.830699,-2.2615846 9.285714,0.3095254 2.725532,2.8544193 2.448934,7.4904516 -0.380954,10.1666669"
 | 
			
		||||
       transform="matrix(0.45829137,0,0,0.52605349,58.846237,29.748536)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="spiral"
 | 
			
		||||
       style="fill:none;stroke:#000000;stroke-width:0.39123183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
 | 
			
		||||
       id="path3669-4-4"
 | 
			
		||||
       sodipodi:cx="-82.285713"
 | 
			
		||||
       sodipodi:cy="-4.7142859"
 | 
			
		||||
       sodipodi:expansion="1"
 | 
			
		||||
       sodipodi:revolution="3"
 | 
			
		||||
       sodipodi:radius="7.49966"
 | 
			
		||||
       sodipodi:argument="-17.983253"
 | 
			
		||||
       sodipodi:t0="0"
 | 
			
		||||
       d="m -82.285713,-4.7142859 c 0.243529,0.2865053 -0.266055,0.4696244 -0.476191,0.4047619 -0.569455,-0.1757733 -0.602452,-0.9261053 -0.333333,-1.357143 0.481391,-0.7710252 1.569661,-0.777685 2.238095,-0.2619043 0.980955,0.7569288 0.958927,2.2222408 0.190476,3.1190477 -1.024223,1.1953025 -2.878063,1.1427762 -4,0.1190469 -1.411843,-1.2882589 -1.327986,-3.5354404 -0.04762,-4.8809525 1.550697,-1.6295954 4.193695,-1.5139846 5.761905,0.023811 1.848081,1.8122383 1.700479,4.8524971 -0.09524,6.64285722 -2.073227,2.06704158 -5.511664,1.88730403 -7.523809,-0.16666802 -2.286327,-2.3338536 -2.074361,-6.1710887 0.238097,-8.404762 2.594227,-2.5058436 6.830699,-2.2615846 9.285714,0.3095254 2.725532,2.8544193 2.448934,7.4904516 -0.380954,10.1666669"
 | 
			
		||||
       transform="matrix(0.45829137,0,0,0.52605349,67.182938,28.682871)"
 | 
			
		||||
       inkscape:transform-center-x="31.601913"
 | 
			
		||||
       inkscape:transform-center-y="-3.3177701" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="spiral"
 | 
			
		||||
       style="fill:none;stroke:#000000;stroke-width:0.39123183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
 | 
			
		||||
       id="path3669-4-9"
 | 
			
		||||
       sodipodi:cx="-82.285713"
 | 
			
		||||
       sodipodi:cy="-4.7142859"
 | 
			
		||||
       sodipodi:expansion="1"
 | 
			
		||||
       sodipodi:revolution="3"
 | 
			
		||||
       sodipodi:radius="7.49966"
 | 
			
		||||
       sodipodi:argument="-17.983253"
 | 
			
		||||
       sodipodi:t0="0"
 | 
			
		||||
       d="m -82.285713,-4.7142859 c 0.243529,0.2865053 -0.266055,0.4696244 -0.476191,0.4047619 -0.569455,-0.1757733 -0.602452,-0.9261053 -0.333333,-1.357143 0.481391,-0.7710252 1.569661,-0.777685 2.238095,-0.2619043 0.980955,0.7569288 0.958927,2.2222408 0.190476,3.1190477 -1.024223,1.1953025 -2.878063,1.1427762 -4,0.1190469 -1.411843,-1.2882589 -1.327986,-3.5354404 -0.04762,-4.8809525 1.550697,-1.6295954 4.193695,-1.5139846 5.761905,0.023811 1.848081,1.8122383 1.700479,4.8524971 -0.09524,6.64285722 -2.073227,2.06704158 -5.511664,1.88730403 -7.523809,-0.16666802 -2.286327,-2.3338536 -2.074361,-6.1710887 0.238097,-8.404762 2.594227,-2.5058436 6.830699,-2.2615846 9.285714,0.3095254 2.725532,2.8544193 2.448934,7.4904516 -0.380954,10.1666669"
 | 
			
		||||
       transform="matrix(0.45829137,0,0,0.52605349,56.519715,23.354547)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="spiral"
 | 
			
		||||
       style="fill:none;stroke:#000000;stroke-width:0.39123183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
 | 
			
		||||
       id="path3669-4-2"
 | 
			
		||||
       sodipodi:cx="-82.285713"
 | 
			
		||||
       sodipodi:cy="-4.7142859"
 | 
			
		||||
       sodipodi:expansion="1"
 | 
			
		||||
       sodipodi:revolution="3"
 | 
			
		||||
       sodipodi:radius="7.49966"
 | 
			
		||||
       sodipodi:argument="-17.983253"
 | 
			
		||||
       sodipodi:t0="0"
 | 
			
		||||
       d="m -82.285713,-4.7142859 c 0.243529,0.2865053 -0.266055,0.4696244 -0.476191,0.4047619 -0.569455,-0.1757733 -0.602452,-0.9261053 -0.333333,-1.357143 0.481391,-0.7710252 1.569661,-0.777685 2.238095,-0.2619043 0.980955,0.7569288 0.958927,2.2222408 0.190476,3.1190477 -1.024223,1.1953025 -2.878063,1.1427762 -4,0.1190469 -1.411843,-1.2882589 -1.327986,-3.5354404 -0.04762,-4.8809525 1.550697,-1.6295954 4.193695,-1.5139846 5.761905,0.023811 1.848081,1.8122383 1.700479,4.8524971 -0.09524,6.64285722 -2.073227,2.06704158 -5.511664,1.88730403 -7.523809,-0.16666802 -2.286327,-2.3338536 -2.074361,-6.1710887 0.238097,-8.404762 2.594227,-2.5058436 6.830699,-2.2615846 9.285714,0.3095254 2.725532,2.8544193 2.448934,7.4904516 -0.380954,10.1666669"
 | 
			
		||||
       transform="matrix(0.45829137,0,0,0.52605349,59.23399,21.436352)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="spiral"
 | 
			
		||||
       style="fill:none;stroke:#000000;stroke-width:0.39123183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
 | 
			
		||||
       id="path3669-4-3"
 | 
			
		||||
       sodipodi:cx="-82.285713"
 | 
			
		||||
       sodipodi:cy="-4.7142859"
 | 
			
		||||
       sodipodi:expansion="1"
 | 
			
		||||
       sodipodi:revolution="3"
 | 
			
		||||
       sodipodi:radius="7.49966"
 | 
			
		||||
       sodipodi:argument="-17.983253"
 | 
			
		||||
       sodipodi:t0="0"
 | 
			
		||||
       d="m -82.285713,-4.7142859 c 0.243529,0.2865053 -0.266055,0.4696244 -0.476191,0.4047619 -0.569455,-0.1757733 -0.602452,-0.9261053 -0.333333,-1.357143 0.481391,-0.7710252 1.569661,-0.777685 2.238095,-0.2619043 0.980955,0.7569288 0.958927,2.2222408 0.190476,3.1190477 -1.024223,1.1953025 -2.878063,1.1427762 -4,0.1190469 -1.411843,-1.2882589 -1.327986,-3.5354404 -0.04762,-4.8809525 1.550697,-1.6295954 4.193695,-1.5139846 5.761905,0.023811 1.848081,1.8122383 1.700479,4.8524971 -0.09524,6.64285722 -2.073227,2.06704158 -5.511664,1.88730403 -7.523809,-0.16666802 -2.286327,-2.3338536 -2.074361,-6.1710887 0.238097,-8.404762 2.594227,-2.5058436 6.830699,-2.2615846 9.285714,0.3095254 2.725532,2.8544193 2.448934,7.4904516 -0.380954,10.1666669"
 | 
			
		||||
       transform="matrix(0.45829137,0,0,0.52605349,71.448227,23.993947)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="spiral"
 | 
			
		||||
       style="fill:none;stroke:#000000;stroke-width:0.39123183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
 | 
			
		||||
       id="path3669-4-99"
 | 
			
		||||
       sodipodi:cx="-82.285713"
 | 
			
		||||
       sodipodi:cy="-4.7142859"
 | 
			
		||||
       sodipodi:expansion="1"
 | 
			
		||||
       sodipodi:revolution="3"
 | 
			
		||||
       sodipodi:radius="7.49966"
 | 
			
		||||
       sodipodi:argument="-17.983253"
 | 
			
		||||
       sodipodi:t0="0"
 | 
			
		||||
       d="m -82.285713,-4.7142859 c 0.243529,0.2865053 -0.266055,0.4696244 -0.476191,0.4047619 -0.569455,-0.1757733 -0.602452,-0.9261053 -0.333333,-1.357143 0.481391,-0.7710252 1.569661,-0.777685 2.238095,-0.2619043 0.980955,0.7569288 0.958927,2.2222408 0.190476,3.1190477 -1.024223,1.1953025 -2.878063,1.1427762 -4,0.1190469 -1.411843,-1.2882589 -1.327986,-3.5354404 -0.04762,-4.8809525 1.550697,-1.6295954 4.193695,-1.5139846 5.761905,0.023811 1.848081,1.8122383 1.700479,4.8524971 -0.09524,6.64285722 -2.073227,2.06704158 -5.511664,1.88730403 -7.523809,-0.16666802 -2.286327,-2.3338536 -2.074361,-6.1710887 0.238097,-8.404762 2.594227,-2.5058436 6.830699,-2.2615846 9.285714,0.3095254 2.725532,2.8544193 2.448934,7.4904516 -0.380954,10.1666669"
 | 
			
		||||
       transform="matrix(0.45829137,0,0,0.52605349,75.519639,25.272745)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="spiral"
 | 
			
		||||
       style="fill:none;stroke:#000000;stroke-width:0.39123183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
 | 
			
		||||
       id="path3669-4-45"
 | 
			
		||||
       sodipodi:cx="-82.285713"
 | 
			
		||||
       sodipodi:cy="-4.7142859"
 | 
			
		||||
       sodipodi:expansion="1"
 | 
			
		||||
       sodipodi:revolution="3"
 | 
			
		||||
       sodipodi:radius="7.49966"
 | 
			
		||||
       sodipodi:argument="-17.983253"
 | 
			
		||||
       sodipodi:t0="0"
 | 
			
		||||
       d="m -82.285713,-4.7142859 c 0.243529,0.2865053 -0.266055,0.4696244 -0.476191,0.4047619 -0.569455,-0.1757733 -0.602452,-0.9261053 -0.333333,-1.357143 0.481391,-0.7710252 1.569661,-0.777685 2.238095,-0.2619043 0.980955,0.7569288 0.958927,2.2222408 0.190476,3.1190477 -1.024223,1.1953025 -2.878063,1.1427762 -4,0.1190469 -1.411843,-1.2882589 -1.327986,-3.5354404 -0.04762,-4.8809525 1.550697,-1.6295954 4.193695,-1.5139846 5.761905,0.023811 1.848081,1.8122383 1.700479,4.8524971 -0.09524,6.64285722 -2.073227,2.06704158 -5.511664,1.88730403 -7.523809,-0.16666802 -2.286327,-2.3338536 -2.074361,-6.1710887 0.238097,-8.404762 2.594227,-2.5058436 6.830699,-2.2615846 9.285714,0.3095254 2.725532,2.8544193 2.448934,7.4904516 -0.380954,10.1666669"
 | 
			
		||||
       transform="matrix(0.45829137,0,0,0.52605349,63.887034,20.796953)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="spiral"
 | 
			
		||||
       style="fill:none;stroke:#000000;stroke-width:0.39123183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
 | 
			
		||||
       id="path3669-4-5"
 | 
			
		||||
       sodipodi:cx="-82.285713"
 | 
			
		||||
       sodipodi:cy="-4.7142859"
 | 
			
		||||
       sodipodi:expansion="1"
 | 
			
		||||
       sodipodi:revolution="3"
 | 
			
		||||
       sodipodi:radius="7.49966"
 | 
			
		||||
       sodipodi:argument="-17.983253"
 | 
			
		||||
       sodipodi:t0="0"
 | 
			
		||||
       d="m -82.285713,-4.7142859 c 0.243529,0.2865053 -0.266055,0.4696244 -0.476191,0.4047619 -0.569455,-0.1757733 -0.602452,-0.9261053 -0.333333,-1.357143 0.481391,-0.7710252 1.569661,-0.777685 2.238095,-0.2619043 0.980955,0.7569288 0.958927,2.2222408 0.190476,3.1190477 -1.024223,1.1953025 -2.878063,1.1427762 -4,0.1190469 -1.411843,-1.2882589 -1.327986,-3.5354404 -0.04762,-4.8809525 1.550697,-1.6295954 4.193695,-1.5139846 5.761905,0.023811 1.848081,1.8122383 1.700479,4.8524971 -0.09524,6.64285722 -2.073227,2.06704158 -5.511664,1.88730403 -7.523809,-0.16666802 -2.286327,-2.3338536 -2.074361,-6.1710887 0.238097,-8.404762 2.594227,-2.5058436 6.830699,-2.2615846 9.285714,0.3095254 2.725532,2.8544193 2.448934,7.4904516 -0.380954,10.1666669"
 | 
			
		||||
       transform="matrix(0.45829137,0,0,0.52605349,72.999241,22.502017)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="spiral"
 | 
			
		||||
       style="fill:none;stroke:#000000;stroke-width:0.39123183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
 | 
			
		||||
       id="path3669-4-33"
 | 
			
		||||
       sodipodi:cx="-82.285713"
 | 
			
		||||
       sodipodi:cy="-4.7142859"
 | 
			
		||||
       sodipodi:expansion="1"
 | 
			
		||||
       sodipodi:revolution="3"
 | 
			
		||||
       sodipodi:radius="7.49966"
 | 
			
		||||
       sodipodi:argument="-17.983253"
 | 
			
		||||
       sodipodi:t0="0"
 | 
			
		||||
       d="m -82.285713,-4.7142859 c 0.243529,0.2865053 -0.266055,0.4696244 -0.476191,0.4047619 -0.569455,-0.1757733 -0.602452,-0.9261053 -0.333333,-1.357143 0.481391,-0.7710252 1.569661,-0.777685 2.238095,-0.2619043 0.980955,0.7569288 0.958927,2.2222408 0.190476,3.1190477 -1.024223,1.1953025 -2.878063,1.1427762 -4,0.1190469 -1.411843,-1.2882589 -1.327986,-3.5354404 -0.04762,-4.8809525 1.550697,-1.6295954 4.193695,-1.5139846 5.761905,0.023811 1.848081,1.8122383 1.700479,4.8524971 -0.09524,6.64285722 -2.073227,2.06704158 -5.511664,1.88730403 -7.523809,-0.16666802 -2.286327,-2.3338536 -2.074361,-6.1710887 0.238097,-8.404762 2.594227,-2.5058436 6.830699,-2.2615846 9.285714,0.3095254 2.725532,2.8544193 2.448934,7.4904516 -0.380954,10.1666669"
 | 
			
		||||
       transform="matrix(0.45829137,0,0,0.52605349,71.642103,29.748536)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="spiral"
 | 
			
		||||
       style="fill:none;stroke:#000000;stroke-width:0.39123183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
 | 
			
		||||
       id="path3669-4-55"
 | 
			
		||||
       sodipodi:cx="-82.285713"
 | 
			
		||||
       sodipodi:cy="-4.7142859"
 | 
			
		||||
       sodipodi:expansion="1"
 | 
			
		||||
       sodipodi:revolution="3"
 | 
			
		||||
       sodipodi:radius="7.49966"
 | 
			
		||||
       sodipodi:argument="-17.983253"
 | 
			
		||||
       sodipodi:t0="0"
 | 
			
		||||
       d="m -82.285713,-4.7142859 c 0.243529,0.2865053 -0.266055,0.4696244 -0.476191,0.4047619 -0.569455,-0.1757733 -0.602452,-0.9261053 -0.333333,-1.357143 0.481391,-0.7710252 1.569661,-0.777685 2.238095,-0.2619043 0.980955,0.7569288 0.958927,2.2222408 0.190476,3.1190477 -1.024223,1.1953025 -2.878063,1.1427762 -4,0.1190469 -1.411843,-1.2882589 -1.327986,-3.5354404 -0.04762,-4.8809525 1.550697,-1.6295954 4.193695,-1.5139846 5.761905,0.023811 1.848081,1.8122383 1.700479,4.8524971 -0.09524,6.64285722 -2.073227,2.06704158 -5.511664,1.88730403 -7.523809,-0.16666802 -2.286327,-2.3338536 -2.074361,-6.1710887 0.238097,-8.404762 2.594227,-2.5058436 6.830699,-2.2615846 9.285714,0.3095254 2.725532,2.8544193 2.448934,7.4904516 -0.380954,10.1666669"
 | 
			
		||||
       transform="matrix(0.45829137,0,0,0.52605349,74.550255,28.896004)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="spiral"
 | 
			
		||||
       style="fill:none;stroke:#000000;stroke-width:0.39123183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
 | 
			
		||||
       id="path3669-4-8"
 | 
			
		||||
       sodipodi:cx="-82.285713"
 | 
			
		||||
       sodipodi:cy="-4.7142859"
 | 
			
		||||
       sodipodi:expansion="1"
 | 
			
		||||
       sodipodi:revolution="3"
 | 
			
		||||
       sodipodi:radius="7.49966"
 | 
			
		||||
       sodipodi:argument="-17.983253"
 | 
			
		||||
       sodipodi:t0="0"
 | 
			
		||||
       d="m -82.285713,-4.7142859 c 0.243529,0.2865053 -0.266055,0.4696244 -0.476191,0.4047619 -0.569455,-0.1757733 -0.602452,-0.9261053 -0.333333,-1.357143 0.481391,-0.7710252 1.569661,-0.777685 2.238095,-0.2619043 0.980955,0.7569288 0.958927,2.2222408 0.190476,3.1190477 -1.024223,1.1953025 -2.878063,1.1427762 -4,0.1190469 -1.411843,-1.2882589 -1.327986,-3.5354404 -0.04762,-4.8809525 1.550697,-1.6295954 4.193695,-1.5139846 5.761905,0.023811 1.848081,1.8122383 1.700479,4.8524971 -0.09524,6.64285722 -2.073227,2.06704158 -5.511664,1.88730403 -7.523809,-0.16666802 -2.286327,-2.3338536 -2.074361,-6.1710887 0.238097,-8.404762 2.594227,-2.5058436 6.830699,-2.2615846 9.285714,0.3095254 2.725532,2.8544193 2.448934,7.4904516 -0.380954,10.1666669"
 | 
			
		||||
       transform="matrix(0.45829137,0,0,0.52605349,68.733952,20.796953)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="spiral"
 | 
			
		||||
       style="fill:none;stroke:#000000;stroke-width:0.39123183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
 | 
			
		||||
       id="path3669-4-0"
 | 
			
		||||
       sodipodi:cx="-82.285713"
 | 
			
		||||
       sodipodi:cy="-4.7142859"
 | 
			
		||||
       sodipodi:expansion="1"
 | 
			
		||||
       sodipodi:revolution="3"
 | 
			
		||||
       sodipodi:radius="7.49966"
 | 
			
		||||
       sodipodi:argument="-17.983253"
 | 
			
		||||
       sodipodi:t0="0"
 | 
			
		||||
       d="m -82.285713,-4.7142859 c 0.243529,0.2865053 -0.266055,0.4696244 -0.476191,0.4047619 -0.569455,-0.1757733 -0.602452,-0.9261053 -0.333333,-1.357143 0.481391,-0.7710252 1.569661,-0.777685 2.238095,-0.2619043 0.980955,0.7569288 0.958927,2.2222408 0.190476,3.1190477 -1.024223,1.1953025 -2.878063,1.1427762 -4,0.1190469 -1.411843,-1.2882589 -1.327986,-3.5354404 -0.04762,-4.8809525 1.550697,-1.6295954 4.193695,-1.5139846 5.761905,0.023811 1.848081,1.8122383 1.700479,4.8524971 -0.09524,6.64285722 -2.073227,2.06704158 -5.511664,1.88730403 -7.523809,-0.16666802 -2.286327,-2.3338536 -2.074361,-6.1710887 0.238097,-8.404762 2.594227,-2.5058436 6.830699,-2.2615846 9.285714,0.3095254 2.725532,2.8544193 2.448934,7.4904516 -0.380954,10.1666669"
 | 
			
		||||
       transform="matrix(0.45829137,0,0,0.52605349,53.417688,19.731288)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="spiral"
 | 
			
		||||
       style="fill:none;stroke:#000000;stroke-width:0.39123183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
 | 
			
		||||
       id="path3669-4-6"
 | 
			
		||||
       sodipodi:cx="-82.285713"
 | 
			
		||||
       sodipodi:cy="-4.7142859"
 | 
			
		||||
       sodipodi:expansion="1"
 | 
			
		||||
       sodipodi:revolution="3"
 | 
			
		||||
       sodipodi:radius="7.49966"
 | 
			
		||||
       sodipodi:argument="-17.983253"
 | 
			
		||||
       sodipodi:t0="0"
 | 
			
		||||
       d="m -82.285713,-4.7142859 c 0.243529,0.2865053 -0.266055,0.4696244 -0.476191,0.4047619 -0.569455,-0.1757733 -0.602452,-0.9261053 -0.333333,-1.357143 0.481391,-0.7710252 1.569661,-0.777685 2.238095,-0.2619043 0.980955,0.7569288 0.958927,2.2222408 0.190476,3.1190477 -1.024223,1.1953025 -2.878063,1.1427762 -4,0.1190469 -1.411843,-1.2882589 -1.327986,-3.5354404 -0.04762,-4.8809525 1.550697,-1.6295954 4.193695,-1.5139846 5.761905,0.023811 1.848081,1.8122383 1.700479,4.8524971 -0.09524,6.64285722 -2.073227,2.06704158 -5.511664,1.88730403 -7.523809,-0.16666802 -2.286327,-2.3338536 -2.074361,-6.1710887 0.238097,-8.404762 2.594227,-2.5058436 6.830699,-2.2615846 9.285714,0.3095254 2.725532,2.8544193 2.448934,7.4904516 -0.380954,10.1666669"
 | 
			
		||||
       transform="matrix(0.45829137,0,0,0.52605349,52.06055,23.780814)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="spiral"
 | 
			
		||||
       style="fill:none;stroke:#000000;stroke-width:0.39123183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
 | 
			
		||||
       id="path3669-4-7"
 | 
			
		||||
       sodipodi:cx="-82.285713"
 | 
			
		||||
       sodipodi:cy="-4.7142859"
 | 
			
		||||
       sodipodi:expansion="1"
 | 
			
		||||
       sodipodi:revolution="3"
 | 
			
		||||
       sodipodi:radius="7.49966"
 | 
			
		||||
       sodipodi:argument="-17.983253"
 | 
			
		||||
       sodipodi:t0="0"
 | 
			
		||||
       d="m -82.285713,-4.7142859 c 0.243529,0.2865053 -0.266055,0.4696244 -0.476191,0.4047619 -0.569455,-0.1757733 -0.602452,-0.9261053 -0.333333,-1.357143 0.481391,-0.7710252 1.569661,-0.777685 2.238095,-0.2619043 0.980955,0.7569288 0.958927,2.2222408 0.190476,3.1190477 -1.024223,1.1953025 -2.878063,1.1427762 -4,0.1190469 -1.411843,-1.2882589 -1.327986,-3.5354404 -0.04762,-4.8809525 1.550697,-1.6295954 4.193695,-1.5139846 5.761905,0.023811 1.848081,1.8122383 1.700479,4.8524971 -0.09524,6.64285722 -2.073227,2.06704158 -5.511664,1.88730403 -7.523809,-0.16666802 -2.286327,-2.3338536 -2.074361,-6.1710887 0.238097,-8.404762 2.594227,-2.5058436 6.830699,-2.2615846 9.285714,0.3095254 2.725532,2.8544193 2.448934,7.4904516 -0.380954,10.1666669"
 | 
			
		||||
       transform="matrix(0.45829137,0,0,0.52605349,63.111526,30.601067)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="spiral"
 | 
			
		||||
       style="fill:none;stroke:#000000;stroke-width:0.39123183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
 | 
			
		||||
       id="path3669-4-1"
 | 
			
		||||
       sodipodi:cx="-82.285713"
 | 
			
		||||
       sodipodi:cy="-4.7142859"
 | 
			
		||||
       sodipodi:expansion="1"
 | 
			
		||||
       sodipodi:revolution="3"
 | 
			
		||||
       sodipodi:radius="7.49966"
 | 
			
		||||
       sodipodi:argument="-17.983253"
 | 
			
		||||
       sodipodi:t0="0"
 | 
			
		||||
       d="m -82.285713,-4.7142859 c 0.243529,0.2865053 -0.266055,0.4696244 -0.476191,0.4047619 -0.569455,-0.1757733 -0.602452,-0.9261053 -0.333333,-1.357143 0.481391,-0.7710252 1.569661,-0.777685 2.238095,-0.2619043 0.980955,0.7569288 0.958927,2.2222408 0.190476,3.1190477 -1.024223,1.1953025 -2.878063,1.1427762 -4,0.1190469 -1.411843,-1.2882589 -1.327986,-3.5354404 -0.04762,-4.8809525 1.550697,-1.6295954 4.193695,-1.5139846 5.761905,0.023811 1.848081,1.8122383 1.700479,4.8524971 -0.09524,6.64285722 -2.073227,2.06704158 -5.511664,1.88730403 -7.523809,-0.16666802 -2.286327,-2.3338536 -2.074361,-6.1710887 0.238097,-8.404762 2.594227,-2.5058436 6.830699,-2.2615846 9.285714,0.3095254 2.725532,2.8544193 2.448934,7.4904516 -0.380954,10.1666669"
 | 
			
		||||
       transform="matrix(0.45829137,0,0,0.52605349,65.631923,24.633345)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="spiral"
 | 
			
		||||
       style="fill:none;stroke:#000000;stroke-width:0.39123183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
 | 
			
		||||
       id="path3669-4-30"
 | 
			
		||||
       sodipodi:cx="-82.285713"
 | 
			
		||||
       sodipodi:cy="-4.7142859"
 | 
			
		||||
       sodipodi:expansion="1"
 | 
			
		||||
       sodipodi:revolution="3"
 | 
			
		||||
       sodipodi:radius="7.49966"
 | 
			
		||||
       sodipodi:argument="-17.983253"
 | 
			
		||||
       sodipodi:t0="0"
 | 
			
		||||
       d="m -82.285713,-4.7142859 c 0.243529,0.2865053 -0.266055,0.4696244 -0.476191,0.4047619 -0.569455,-0.1757733 -0.602452,-0.9261053 -0.333333,-1.357143 0.481391,-0.7710252 1.569661,-0.777685 2.238095,-0.2619043 0.980955,0.7569288 0.958927,2.2222408 0.190476,3.1190477 -1.024223,1.1953025 -2.878063,1.1427762 -4,0.1190469 -1.411843,-1.2882589 -1.327986,-3.5354404 -0.04762,-4.8809525 1.550697,-1.6295954 4.193695,-1.5139846 5.761905,0.023811 1.848081,1.8122383 1.700479,4.8524971 -0.09524,6.64285722 -2.073227,2.06704158 -5.511664,1.88730403 -7.523809,-0.16666802 -2.286327,-2.3338536 -2.074361,-6.1710887 0.238097,-8.404762 2.594227,-2.5058436 6.830699,-2.2615846 9.285714,0.3095254 2.725532,2.8544193 2.448934,7.4904516 -0.380954,10.1666669"
 | 
			
		||||
       transform="matrix(0.45829137,0,0,0.52605349,53.999316,27.83034)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="spiral"
 | 
			
		||||
       style="fill:none;stroke:#000000;stroke-width:0.39123183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
 | 
			
		||||
       id="path3669-4-54"
 | 
			
		||||
       sodipodi:cx="-82.285713"
 | 
			
		||||
       sodipodi:cy="-4.7142859"
 | 
			
		||||
       sodipodi:expansion="1"
 | 
			
		||||
       sodipodi:revolution="3"
 | 
			
		||||
       sodipodi:radius="7.49966"
 | 
			
		||||
       sodipodi:argument="-17.983253"
 | 
			
		||||
       sodipodi:t0="0"
 | 
			
		||||
       d="m -82.285713,-4.7142859 c 0.243529,0.2865053 -0.266055,0.4696244 -0.476191,0.4047619 -0.569455,-0.1757733 -0.602452,-0.9261053 -0.333333,-1.357143 0.481391,-0.7710252 1.569661,-0.777685 2.238095,-0.2619043 0.980955,0.7569288 0.958927,2.2222408 0.190476,3.1190477 -1.024223,1.1953025 -2.878063,1.1427762 -4,0.1190469 -1.411843,-1.2882589 -1.327986,-3.5354404 -0.04762,-4.8809525 1.550697,-1.6295954 4.193695,-1.5139846 5.761905,0.023811 1.848081,1.8122383 1.700479,4.8524971 -0.09524,6.64285722 -2.073227,2.06704158 -5.511664,1.88730403 -7.523809,-0.16666802 -2.286327,-2.3338536 -2.074361,-6.1710887 0.238097,-8.404762 2.594227,-2.5058436 6.830699,-2.2615846 9.285714,0.3095254 2.725532,2.8544193 2.448934,7.4904516 -0.380954,10.1666669"
 | 
			
		||||
       transform="matrix(0.45829137,0,0,0.52605349,60.978881,25.485877)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="spiral"
 | 
			
		||||
       style="fill:none;stroke:#000000;stroke-width:0.39123183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
 | 
			
		||||
       id="path3669-4-94"
 | 
			
		||||
       sodipodi:cx="-82.285713"
 | 
			
		||||
       sodipodi:cy="-4.7142859"
 | 
			
		||||
       sodipodi:expansion="1"
 | 
			
		||||
       sodipodi:revolution="3"
 | 
			
		||||
       sodipodi:radius="7.49966"
 | 
			
		||||
       sodipodi:argument="-17.983253"
 | 
			
		||||
       sodipodi:t0="0"
 | 
			
		||||
       d="m -82.285713,-4.7142859 c 0.243529,0.2865053 -0.266055,0.4696244 -0.476191,0.4047619 -0.569455,-0.1757733 -0.602452,-0.9261053 -0.333333,-1.357143 0.481391,-0.7710252 1.569661,-0.777685 2.238095,-0.2619043 0.980955,0.7569288 0.958927,2.2222408 0.190476,3.1190477 -1.024223,1.1953025 -2.878063,1.1427762 -4,0.1190469 -1.411843,-1.2882589 -1.327986,-3.5354404 -0.04762,-4.8809525 1.550697,-1.6295954 4.193695,-1.5139846 5.761905,0.023811 1.848081,1.8122383 1.700479,4.8524971 -0.09524,6.64285722 -2.073227,2.06704158 -5.511664,1.88730403 -7.523809,-0.16666802 -2.286327,-2.3338536 -2.074361,-6.1710887 0.238097,-8.404762 2.594227,-2.5058436 6.830699,-2.2615846 9.285714,0.3095254 2.725532,2.8544193 2.448934,7.4904516 -0.380954,10.1666669"
 | 
			
		||||
       transform="matrix(0.33768974,0,0,0.35259921,-66.85138,2.2322821)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="spiral"
 | 
			
		||||
       style="fill:none;stroke:#000000;stroke-width:0.39123183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
 | 
			
		||||
       id="path3669-4-16"
 | 
			
		||||
       sodipodi:cx="-82.285713"
 | 
			
		||||
       sodipodi:cy="-4.7142859"
 | 
			
		||||
       sodipodi:expansion="1"
 | 
			
		||||
       sodipodi:revolution="3"
 | 
			
		||||
       sodipodi:radius="7.49966"
 | 
			
		||||
       sodipodi:argument="-17.983253"
 | 
			
		||||
       sodipodi:t0="0"
 | 
			
		||||
       d="m -82.285713,-4.7142859 c 0.243529,0.2865053 -0.266055,0.4696244 -0.476191,0.4047619 -0.569455,-0.1757733 -0.602452,-0.9261053 -0.333333,-1.357143 0.481391,-0.7710252 1.569661,-0.777685 2.238095,-0.2619043 0.980955,0.7569288 0.958927,2.2222408 0.190476,3.1190477 -1.024223,1.1953025 -2.878063,1.1427762 -4,0.1190469 -1.411843,-1.2882589 -1.327986,-3.5354404 -0.04762,-4.8809525 1.550697,-1.6295954 4.193695,-1.5139846 5.761905,0.023811 1.848081,1.8122383 1.700479,4.8524971 -0.09524,6.64285722 -2.073227,2.06704158 -5.511664,1.88730403 -7.523809,-0.16666802 -2.286327,-2.3338536 -2.074361,-6.1710887 0.238097,-8.404762 2.594227,-2.5058436 6.830699,-2.2615846 9.285714,0.3095254 2.725532,2.8544193 2.448934,7.4904516 -0.380954,10.1666669"
 | 
			
		||||
       transform="matrix(0.33768974,0,0,0.35259921,-46.137094,18.660854)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="spiral"
 | 
			
		||||
       style="fill:none;stroke:#000000;stroke-width:0.39123183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
 | 
			
		||||
       id="path3669-4-334"
 | 
			
		||||
       sodipodi:cx="-82.285713"
 | 
			
		||||
       sodipodi:cy="-4.7142859"
 | 
			
		||||
       sodipodi:expansion="1"
 | 
			
		||||
       sodipodi:revolution="3"
 | 
			
		||||
       sodipodi:radius="7.49966"
 | 
			
		||||
       sodipodi:argument="-17.983253"
 | 
			
		||||
       sodipodi:t0="0"
 | 
			
		||||
       d="m -82.285713,-4.7142859 c 0.243529,0.2865053 -0.266055,0.4696244 -0.476191,0.4047619 -0.569455,-0.1757733 -0.602452,-0.9261053 -0.333333,-1.357143 0.481391,-0.7710252 1.569661,-0.777685 2.238095,-0.2619043 0.980955,0.7569288 0.958927,2.2222408 0.190476,3.1190477 -1.024223,1.1953025 -2.878063,1.1427762 -4,0.1190469 -1.411843,-1.2882589 -1.327986,-3.5354404 -0.04762,-4.8809525 1.550697,-1.6295954 4.193695,-1.5139846 5.761905,0.023811 1.848081,1.8122383 1.700479,4.8524971 -0.09524,6.64285722 -2.073227,2.06704158 -5.511664,1.88730403 -7.523809,-0.16666802 -2.286327,-2.3338536 -2.074361,-6.1710887 0.238097,-8.404762 2.594227,-2.5058436 6.830699,-2.2615846 9.285714,0.3095254 2.725532,2.8544193 2.448934,7.4904516 -0.380954,10.1666669"
 | 
			
		||||
       transform="matrix(0.45829137,0,0,0.52605349,50.703413,18.239358)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="arc"
 | 
			
		||||
       style="fill:#803300;stroke:#6e4e4e;stroke-width:0.13500001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
 | 
			
		||||
       id="path3879"
 | 
			
		||||
       sodipodi:cx="-11.142858"
 | 
			
		||||
       sodipodi:cy="18.214285"
 | 
			
		||||
       sodipodi:rx="0.5714286"
 | 
			
		||||
       sodipodi:ry="0.9285714"
 | 
			
		||||
       d="m -10.571429,18.214285 a 0.5714286,0.9285714 0 1 1 -1.142857,0 0.5714286,0.9285714 0 1 1 1.142857,0 z"
 | 
			
		||||
       transform="matrix(1.3571374,0,0,1.4919304,18.512047,-11.093268)" />
 | 
			
		||||
    <path
 | 
			
		||||
       sodipodi:type="arc"
 | 
			
		||||
       style="fill:#000000;stroke:#6e4e4e;stroke-width:0.13500001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
 | 
			
		||||
       id="path3881"
 | 
			
		||||
       sodipodi:cx="-7.7142859"
 | 
			
		||||
       sodipodi:cy="19.071428"
 | 
			
		||||
       sodipodi:rx="0.2857143"
 | 
			
		||||
       sodipodi:ry="0.2857143"
 | 
			
		||||
       d="m -7.4285716,19.071428 a 0.2857143,0.2857143 0 1 1 -0.5714285,0 0.2857143,0.2857143 0 1 1 0.5714285,0 z"
 | 
			
		||||
       transform="matrix(1.3571374,0,0,1.4919304,17.542663,-15.462494)" />
 | 
			
		||||
  </g>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 42 KiB  | 
@ -1,30 +0,0 @@
 | 
			
		||||
set(LAUNCHER ${CMAKE_HOME_DIRECTORY}/src/launcherlib)
 | 
			
		||||
 | 
			
		||||
# Set sources
 | 
			
		||||
set(SRC ut_boosterfactory.cpp ${LAUNCHER}/appdata.cpp ${LAUNCHER}/booster.cpp
 | 
			
		||||
${LAUNCHER}/boosterfactory.cpp ${LAUNCHER}/boosterpluginregistry.cpp
 | 
			
		||||
${LAUNCHER}/connection.cpp ${LAUNCHER}/logger.cpp
 | 
			
		||||
${LAUNCHER}/singleinstance.cpp ${LAUNCHER}/socketmanager.cpp)
 | 
			
		||||
 | 
			
		||||
# Set moc headers
 | 
			
		||||
set(MOC_HDRS ut_boosterfactory.h)
 | 
			
		||||
 | 
			
		||||
# Run moc
 | 
			
		||||
qt4_wrap_cpp(MOC_SRC ${MOC_HDRS})
 | 
			
		||||
 | 
			
		||||
# Enable test library
 | 
			
		||||
set(QT_USE_QTTEST TRUE)
 | 
			
		||||
 | 
			
		||||
# Set include paths
 | 
			
		||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_HOME_DIRECTORY}/src/common ${LAUNCHER})
 | 
			
		||||
 | 
			
		||||
link_libraries(${QT_QTCORE_LIBRARY} ${QT_QTTEST_LIBRARY} ${MEEGOTOUCH_LIBRARIES} ${X11_LIBRARIES} -ldl)
 | 
			
		||||
 | 
			
		||||
# Enable Qt (may not be needed, because already defined on higher level)
 | 
			
		||||
include(${QT_USE_FILE})
 | 
			
		||||
 | 
			
		||||
add_executable(ut_boosterfactory ${SRC} ${MOC_SRC})
 | 
			
		||||
 | 
			
		||||
# Install
 | 
			
		||||
install(PROGRAMS ut_boosterfactory DESTINATION /usr/share/applauncherd-tests/)
 | 
			
		||||
 | 
			
		||||
@ -1,30 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applauncherd
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it 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.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include "ut_boosterfactory.h"
 | 
			
		||||
#include "boosterfactory.h"
 | 
			
		||||
#include "booster.h"
 | 
			
		||||
 | 
			
		||||
void Ut_BoosterFactory::initTestCase()
 | 
			
		||||
{}
 | 
			
		||||
 | 
			
		||||
void Ut_BoosterFactory::cleanupTestCase()
 | 
			
		||||
{}
 | 
			
		||||
 | 
			
		||||
QTEST_APPLESS_MAIN(Ut_BoosterFactory);
 | 
			
		||||
@ -1,40 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applauncherd
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it 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.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifndef UT_BOOSTERFACTORY_H
 | 
			
		||||
#define UT_BOOSTERFACTORY_H
 | 
			
		||||
 | 
			
		||||
#include<QtTest/QtTest>
 | 
			
		||||
#include<QObject>
 | 
			
		||||
 | 
			
		||||
#define UNIT_TEST
 | 
			
		||||
 | 
			
		||||
class BoosterFactory;
 | 
			
		||||
 | 
			
		||||
class Ut_BoosterFactory : public QObject
 | 
			
		||||
{
 | 
			
		||||
    Q_OBJECT
 | 
			
		||||
 | 
			
		||||
private Q_SLOTS:
 | 
			
		||||
 | 
			
		||||
    void initTestCase();
 | 
			
		||||
    void cleanupTestCase();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // UT_BOOSTERFACTORY_H
 | 
			
		||||
@ -1,33 +0,0 @@
 | 
			
		||||
set(LAUNCHER ${CMAKE_HOME_DIRECTORY}/src/launcherlib)
 | 
			
		||||
set(MBOOSTER ${CMAKE_HOME_DIRECTORY}/src/mbooster)
 | 
			
		||||
set(COMMON "${CMAKE_HOME_DIRECTORY}/src/common")
 | 
			
		||||
 | 
			
		||||
# Set sources
 | 
			
		||||
set(SRC ut_mbooster.cpp ${LAUNCHER}/appdata.cpp ${LAUNCHER}/booster.cpp
 | 
			
		||||
${LAUNCHER}/connection.cpp
 | 
			
		||||
${LAUNCHER}/logger.cpp 
 | 
			
		||||
${MBOOSTER}/mbooster.cpp ${COMMON}/eventhandler.cpp
 | 
			
		||||
${LAUNCHER}/singleinstance.cpp ${LAUNCHER}/socketmanager.cpp)
 | 
			
		||||
 | 
			
		||||
# Set moc headers
 | 
			
		||||
set(MOC_HDRS ut_mbooster.h ${COMMON}/eventhandler.h)
 | 
			
		||||
 | 
			
		||||
# Run moc
 | 
			
		||||
qt4_wrap_cpp(MOC_SRC ${MOC_HDRS})
 | 
			
		||||
 | 
			
		||||
# Enable test library
 | 
			
		||||
set(QT_USE_QTTEST TRUE)
 | 
			
		||||
 | 
			
		||||
# Set include paths
 | 
			
		||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_HOME_DIRECTORY}/src/common ${LAUNCHER} ${MBOOSTER})
 | 
			
		||||
 | 
			
		||||
link_libraries(${QT_QTCORE_LIBRARY} ${QT_QTTEST_LIBRARY} ${MEEGOTOUCH_LIBRARIES} -ldl -lX11)
 | 
			
		||||
 | 
			
		||||
# Enable Qt (may not be needed, because already defined on higher level)
 | 
			
		||||
include(${QT_USE_FILE})
 | 
			
		||||
 | 
			
		||||
add_executable(ut_mbooster ${SRC} ${MOC_SRC} )
 | 
			
		||||
 | 
			
		||||
# Install
 | 
			
		||||
install(PROGRAMS ut_mbooster DESTINATION /usr/share/applauncherd-tests/)
 | 
			
		||||
 | 
			
		||||
@ -1,80 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applauncherd
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it 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.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include "ut_mbooster.h"
 | 
			
		||||
#include "mbooster.h"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_MCOMPONENTCACHE
 | 
			
		||||
#include <MComponentCache>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
Ut_MBooster::Ut_MBooster() :
 | 
			
		||||
    m_subject(new MBooster)
 | 
			
		||||
{}
 | 
			
		||||
 | 
			
		||||
Ut_MBooster::~Ut_MBooster()
 | 
			
		||||
{}
 | 
			
		||||
 | 
			
		||||
void Ut_MBooster::initTestCase()
 | 
			
		||||
{}
 | 
			
		||||
 | 
			
		||||
void Ut_MBooster::cleanupTestCase()
 | 
			
		||||
{}
 | 
			
		||||
 | 
			
		||||
void Ut_MBooster::testSocketName()
 | 
			
		||||
{
 | 
			
		||||
    QVERIFY(MBooster::socketName() == MBooster::m_socketId);
 | 
			
		||||
    QVERIFY(m_subject->socketId() == MBooster::m_socketId);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Ut_MBooster::testType()
 | 
			
		||||
{
 | 
			
		||||
    QVERIFY(MBooster::type() == 'm');
 | 
			
		||||
    QVERIFY(m_subject->boosterType() == 'm');
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Ut_MBooster::testPreload()
 | 
			
		||||
{
 | 
			
		||||
#ifdef HAVE_MCOMPONENTCACHE
 | 
			
		||||
 | 
			
		||||
    m_subject->preload();
 | 
			
		||||
 | 
			
		||||
    const char * argv[] = {"foo"};
 | 
			
		||||
    int argc = 1;
 | 
			
		||||
 | 
			
		||||
    QVERIFY(MComponentCache::mApplication(argc, const_cast<char **>(argv)));
 | 
			
		||||
    QVERIFY(MComponentCache::mApplicationWindow());
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Ut_MBooster::testTemporaryProcessName()
 | 
			
		||||
{
 | 
			
		||||
    QVERIFY(MBooster::temporaryProcessName() == MBooster::m_temporaryProcessName);
 | 
			
		||||
    QVERIFY(m_subject->temporaryProcessName() == MBooster::m_temporaryProcessName);
 | 
			
		||||
    QVERIFY(m_subject->boosterTemporaryProcessName() == MBooster::m_temporaryProcessName);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Ut_MBooster::testReceiveDataFromInvokerWithBadSocket()
 | 
			
		||||
{
 | 
			
		||||
   QVERIFY(m_subject->receiveDataFromInvoker(-100) == false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QTEST_APPLESS_MAIN(Ut_MBooster);
 | 
			
		||||
 | 
			
		||||
@ -1,53 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applauncherd
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it 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.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifndef UT_MBOOSTER_H
 | 
			
		||||
#define UT_MBOOSTER_H
 | 
			
		||||
 | 
			
		||||
#include<QtTest/QtTest>
 | 
			
		||||
#include<QObject>
 | 
			
		||||
 | 
			
		||||
#include <tr1/memory>
 | 
			
		||||
 | 
			
		||||
#define UNIT_TEST
 | 
			
		||||
 | 
			
		||||
class MBooster;
 | 
			
		||||
 | 
			
		||||
class Ut_MBooster : public QObject
 | 
			
		||||
{
 | 
			
		||||
    Q_OBJECT
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
    Ut_MBooster();
 | 
			
		||||
    virtual ~Ut_MBooster();
 | 
			
		||||
 | 
			
		||||
private Q_SLOTS:
 | 
			
		||||
    void initTestCase();
 | 
			
		||||
    void cleanupTestCase();
 | 
			
		||||
    void testSocketName();
 | 
			
		||||
    void testType();
 | 
			
		||||
    void testPreload();
 | 
			
		||||
    void testTemporaryProcessName();
 | 
			
		||||
    void testReceiveDataFromInvokerWithBadSocket();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    std::tr1::shared_ptr<MBooster> m_subject;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // UT_MBOOSTER_H
 | 
			
		||||
@ -1,267 +0,0 @@
 | 
			
		||||
#!/usr/bin/env python
 | 
			
		||||
#
 | 
			
		||||
# Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
# Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
#
 | 
			
		||||
# This file is part of applauncherd.
 | 
			
		||||
#
 | 
			
		||||
# If you have questions regarding the use of this file, please contact
 | 
			
		||||
# Nokia at directui@nokia.com.
 | 
			
		||||
#
 | 
			
		||||
# This library is free software; you can redistribute it and/or
 | 
			
		||||
# modify it 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.
 | 
			
		||||
 | 
			
		||||
"""
 | 
			
		||||
This program tests the startup time of the given application with and
 | 
			
		||||
without launcher.
 | 
			
		||||
 | 
			
		||||
Requirements:
 | 
			
		||||
1. DISPLAY environment variable must be set correctly.
 | 
			
		||||
2. DBus session bus must be running.
 | 
			
		||||
3. DBus session bus address must be stored in /tmp/session_bus_address.user.
 | 
			
		||||
4. Given application supports launcher with -launcher commandline argument.
 | 
			
		||||
5. waitforwindow application should be installed.
 | 
			
		||||
 | 
			
		||||
Usage:    test-perf-mbooster <launcherable application>
 | 
			
		||||
 | 
			
		||||
Example:  test-perf-mbooster /usr/bin/testapp
 | 
			
		||||
 | 
			
		||||
Authors: Nimika Keshri nimika.1.keshri@nokia.com 
 | 
			
		||||
"""
 | 
			
		||||
import os
 | 
			
		||||
import subprocess
 | 
			
		||||
import commands
 | 
			
		||||
import time
 | 
			
		||||
import sys
 | 
			
		||||
import unittest
 | 
			
		||||
 | 
			
		||||
TESTAPP = '/usr/bin/fala_testapp'
 | 
			
		||||
LOG_FILE = '/tmp/testapp.log'
 | 
			
		||||
DEV_NULL = file("/dev/null","w")
 | 
			
		||||
 | 
			
		||||
_start_time = 0
 | 
			
		||||
_end_time = 0
 | 
			
		||||
 | 
			
		||||
def debug(*msg):
 | 
			
		||||
    sys.stderr.write('[DEBUG %s] %s\n' % (time.time(), ' '.join([str(s) for s in msg]),))
 | 
			
		||||
 | 
			
		||||
def error(*msg):
 | 
			
		||||
    sys.stderr.write('ERROR %s\n' % (' '.join([str(s) for s in msg]),))
 | 
			
		||||
    sys.exit(1)
 | 
			
		||||
 | 
			
		||||
def basename(filepath):
 | 
			
		||||
    """
 | 
			
		||||
    return base name of a file
 | 
			
		||||
    """
 | 
			
		||||
    return os.path.basename(filepath) 
 | 
			
		||||
def is_executable_file(filename):
 | 
			
		||||
    return os.path.isfile(filename) and os.access(filename, os.X_OK)
 | 
			
		||||
    
 | 
			
		||||
def check_prerequisites():
 | 
			
		||||
    if os.getenv('DISPLAY') == None:
 | 
			
		||||
        error("DISPLAY is not set. Check the requirements.")
 | 
			
		||||
        
 | 
			
		||||
    if os.getenv('DBUS_SESSION_BUS_ADDRESS') == None:
 | 
			
		||||
        error("DBUS_SESSION_BUS_ADDRESS is not set.\n" +
 | 
			
		||||
              "You probably want to source /tmp/session_bus_address.user")
 | 
			
		||||
 | 
			
		||||
    if not is_executable_file(TESTAPP):
 | 
			
		||||
        error("'%s' is not an executable file\n" % (TESTAPP,) +
 | 
			
		||||
              "(should be an application that supports launcher)")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class launcher_perf_tests (unittest.TestCase):
 | 
			
		||||
    
 | 
			
		||||
    def setUp(self):
 | 
			
		||||
        print "Setup Executed"
 | 
			
		||||
 | 
			
		||||
    def tearDown(self):
 | 
			
		||||
        print "Teardown Executed"
 | 
			
		||||
 | 
			
		||||
    #Other functions
 | 
			
		||||
    def start_timer(self):
 | 
			
		||||
        global _start_time 
 | 
			
		||||
        _start_time = time.time()
 | 
			
		||||
 | 
			
		||||
    def run_without_launcher(self, appname):                                                       
 | 
			
		||||
        """starts the testapp without the launcher"""               
 | 
			
		||||
        os.system ('mcetool --set-tklock-mode=unlocked')
 | 
			
		||||
        if os.path.exists(LOG_FILE) and os.path.isfile(LOG_FILE):               
 | 
			
		||||
            os.system('rm %s' %LOG_FILE)                                                        
 | 
			
		||||
        self.start_timer()
 | 
			
		||||
        p = subprocess.Popen(appname,
 | 
			
		||||
                             shell=False,
 | 
			
		||||
                             stdout=DEV_NULL, stderr=DEV_NULL)
 | 
			
		||||
        debug("app", TESTAPP, "started without launcher")                                   
 | 
			
		||||
        time.sleep(5)
 | 
			
		||||
        self.read_log()
 | 
			
		||||
        app_time = self.app_start_time()
 | 
			
		||||
        self.kill_process(appname)
 | 
			
		||||
        return app_time
 | 
			
		||||
 | 
			
		||||
    def run_without_launcher_without_duihome(self, appname):                                                       
 | 
			
		||||
        """starts the testapp without launcher and without duihome"""               
 | 
			
		||||
        os.system ('mcetool --set-tklock-mode=unlocked')
 | 
			
		||||
        if os.path.exists(LOG_FILE) and os.path.isfile(LOG_FILE):               
 | 
			
		||||
            os.system('rm %s' %LOG_FILE)                                                        
 | 
			
		||||
        os.system('pkill -STOP duihome')
 | 
			
		||||
        os.system('pkill -STOP meegotouchhome')
 | 
			
		||||
        self.start_timer()
 | 
			
		||||
        p = subprocess.Popen(TESTAPP,
 | 
			
		||||
                             shell=False,
 | 
			
		||||
                             stdout=DEV_NULL, stderr=DEV_NULL)
 | 
			
		||||
        debug("app", TESTAPP, "started without launcher")                                   
 | 
			
		||||
        time.sleep(5)
 | 
			
		||||
        os.system('pkill -CONT duihome')
 | 
			
		||||
        os.system('pkill -CONT meegotouchhome')
 | 
			
		||||
        self.read_log()
 | 
			
		||||
        app_time = self.app_start_time()
 | 
			
		||||
        self.kill_process(appname)
 | 
			
		||||
        return app_time
 | 
			
		||||
 | 
			
		||||
    def run_with_launcher(self, appname):                                                       
 | 
			
		||||
        """starts the testapp with launcher and with duihome"""               
 | 
			
		||||
        os.system ('mcetool --set-tklock-mode=unlocked')
 | 
			
		||||
        if os.path.exists(LOG_FILE) and os.path.isfile(LOG_FILE):               
 | 
			
		||||
            os.system('rm %s' %LOG_FILE)                                                        
 | 
			
		||||
 | 
			
		||||
        self.start_timer()
 | 
			
		||||
        os.system('invoker --type=m --no-wait %s' %TESTAPP)
 | 
			
		||||
        debug("app", TESTAPP, "started with launcher")                                   
 | 
			
		||||
        time.sleep(5)
 | 
			
		||||
        self.read_log()
 | 
			
		||||
        app_time = self.app_start_time()
 | 
			
		||||
        self.kill_process(appname)
 | 
			
		||||
        return app_time
 | 
			
		||||
 | 
			
		||||
    def run_with_launcher_without_duihome(self, appname):                                                       
 | 
			
		||||
        """starts the testapp with launcher but without duihome"""               
 | 
			
		||||
        os.system ('mcetool --set-tklock-mode=unlocked')
 | 
			
		||||
        if os.path.exists(LOG_FILE) and os.path.isfile(LOG_FILE):               
 | 
			
		||||
            os.system('rm %s' %LOG_FILE)                                                        
 | 
			
		||||
        os.system('pkill -STOP duihome')
 | 
			
		||||
        os.system('pkill -STOP meegotouchhome')
 | 
			
		||||
        self.start_timer()
 | 
			
		||||
        os.system('invoker --type=m --no-wait %s' %TESTAPP)
 | 
			
		||||
        debug("app", TESTAPP, "started with launcher")                                   
 | 
			
		||||
        time.sleep(5)
 | 
			
		||||
        os.system('pkill -CONT duihome')
 | 
			
		||||
        os.system('pkill -CONT meegotouchhome')
 | 
			
		||||
        self.read_log()
 | 
			
		||||
        app_time = self.app_start_time()
 | 
			
		||||
        self.kill_process(appname)
 | 
			
		||||
        return app_time
 | 
			
		||||
 | 
			
		||||
    def read_log(self):
 | 
			
		||||
        """Reads the log file to get the startup time"""
 | 
			
		||||
        global _end_time
 | 
			
		||||
        fh = open(LOG_FILE, "r")
 | 
			
		||||
        lines = fh.readlines()
 | 
			
		||||
        lastline = lines[len(lines)-2]
 | 
			
		||||
        _end_time = lastline.split()[0]
 | 
			
		||||
        return _end_time
 | 
			
		||||
 | 
			
		||||
    def app_start_time(self):
 | 
			
		||||
        """Calculates the startup time for the testapp"""
 | 
			
		||||
        global _app_start_time
 | 
			
		||||
        _app_start_time = float(_end_time) - float(_start_time)
 | 
			
		||||
        return _app_start_time
 | 
			
		||||
 | 
			
		||||
    def kill_process(self, appname):
 | 
			
		||||
        """Kills the testapp"""
 | 
			
		||||
        commands.getoutput("pkill -9 %s" % (basename(appname)[:15],))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def perftest_with_launcher(self, appname):
 | 
			
		||||
        debug("run app with launcher without duihome")
 | 
			
		||||
        with_l_no_d = self.run_with_launcher_without_duihome(appname)
 | 
			
		||||
        time.sleep(5)
 | 
			
		||||
 | 
			
		||||
        debug("run app with launcher with duihome")
 | 
			
		||||
        with_l_with_d = self.run_with_launcher(appname)
 | 
			
		||||
        time.sleep(5)
 | 
			
		||||
 | 
			
		||||
        return with_l_with_d, with_l_no_d
 | 
			
		||||
 | 
			
		||||
    def perftest_without_launcher(self, appname):
 | 
			
		||||
        """Runs all the 4 scenarios with and without launcher"""
 | 
			
		||||
        debug("run app without launcher with duihome")
 | 
			
		||||
        no_l_with_d = self.run_without_launcher(appname)
 | 
			
		||||
        time.sleep(5)
 | 
			
		||||
 | 
			
		||||
        debug("run app without launcher without duihome")
 | 
			
		||||
        no_l_no_d = self.run_without_launcher_without_duihome(appname)
 | 
			
		||||
        time.sleep(5)
 | 
			
		||||
 | 
			
		||||
        return no_l_with_d, no_l_no_d
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def print_test_report(self, with_without_times, fileobj):
 | 
			
		||||
        """
 | 
			
		||||
        with_without_times is a list of pairs:
 | 
			
		||||
           (with_launcher_startup_time,
 | 
			
		||||
            without_launcher_startup_time)
 | 
			
		||||
        """
 | 
			
		||||
        def writeline(*msg):
 | 
			
		||||
            fileobj.write("%s\n" % ' '.join([str(s) for s in msg]))
 | 
			
		||||
        def fmtfloat(f):
 | 
			
		||||
            return "%.2f" % (f,)
 | 
			
		||||
        def filterstats(data, field):
 | 
			
		||||
            return tuple([d[field] for d in data])
 | 
			
		||||
 | 
			
		||||
        if with_without_times == []: return
 | 
			
		||||
 | 
			
		||||
        writeline("")
 | 
			
		||||
        rowformat = "%12s %12s %12s %12s"
 | 
			
		||||
        writeline('Startup times [s]:')
 | 
			
		||||
 | 
			
		||||
        writeline(rowformat % ('launcher-Yes', 'launcher-Yes', 'launcher-No', 'launcher-No'))
 | 
			
		||||
        writeline(rowformat % ('duihome-Yes', 'duihome-No', 'duihome-Yes', 'duihome-No'))
 | 
			
		||||
 | 
			
		||||
        t1,t2,t3,t4 = [], [], [], []
 | 
			
		||||
        for no_l_with_d, no_l_no_d, with_l_with_d, with_l_no_d in with_without_times:
 | 
			
		||||
            t1.append(no_l_with_d)
 | 
			
		||||
            t2.append(no_l_no_d)
 | 
			
		||||
            t3.append(with_l_with_d)
 | 
			
		||||
            t4.append(with_l_no_d)
 | 
			
		||||
            writeline(rowformat % (fmtfloat(no_l_with_d), fmtfloat(no_l_no_d),
 | 
			
		||||
                                   fmtfloat(with_l_with_d), fmtfloat(with_l_no_d)))
 | 
			
		||||
 | 
			
		||||
        writeline('Average times:')
 | 
			
		||||
        writeline(rowformat % (fmtfloat(sum(t1)/len(t1)), fmtfloat(sum(t2)/len(t2)),
 | 
			
		||||
                               fmtfloat(sum(t3)/len(t3)), fmtfloat(sum(t4)/len(t4))))
 | 
			
		||||
        return fmtfloat(sum(t1)/len(t1))
 | 
			
		||||
 | 
			
		||||
    def test_001(self):
 | 
			
		||||
        """Performance test to measure the startup time for application
 | 
			
		||||
        launched using launcher and comparing the results with application launched
 | 
			
		||||
        without launcher"""
 | 
			
		||||
 | 
			
		||||
        times = []
 | 
			
		||||
 | 
			
		||||
        times1, times2 = [], []
 | 
			
		||||
 | 
			
		||||
        for i in xrange(3):
 | 
			
		||||
            times1.append(self.perftest_with_launcher(TESTAPP))
 | 
			
		||||
 | 
			
		||||
        for i in xrange(3):
 | 
			
		||||
            times2.append(self.perftest_without_launcher(TESTAPP))
 | 
			
		||||
 | 
			
		||||
        times = [[t1[0], t1[1], times2[i][0], times2[i][1]] for i, t1 in enumerate(times1)]
 | 
			
		||||
        avg_with_launcher = self.print_test_report(times, sys.stdout)
 | 
			
		||||
        self.assert_(float(avg_with_launcher) < float(0.75), "application launched with launcher takes more than 0.75 sec")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# main
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    check_prerequisites()
 | 
			
		||||
    tests = sys.argv[1:]
 | 
			
		||||
    mysuite = unittest.TestSuite(map(launcher_perf_tests, tests))
 | 
			
		||||
    result = unittest.TextTestRunner(verbosity=2).run(mysuite)
 | 
			
		||||
    if not result.wasSuccessful():
 | 
			
		||||
        sys.exit(1)
 | 
			
		||||
    sys.exit(0)
 | 
			
		||||
					Loading…
					
					
				
		Reference in New Issue