Revision: 201007
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 19 Mar 2010 09:35:24 +0200
changeset 0 ef94aa7943d2
child 1 d98565035bbe
Revision: 201007 Kit: 201011
ai_content_model_api/ai_content_model_api.metaxml
ai_content_model_api/ai_content_model_api.pro
ai_content_model_api/group/group.pro
ai_content_model_api/inc/aicontentmodel.h
ai_plugin_information_api/ai_plugin_information_api.metaxml
ai_plugin_information_api/ai_plugin_information_api.pro
ai_plugin_information_api/group/group.pro
ai_plugin_information_api/inc/activeidle2domainpskeys.h
ai_plugin_information_api/inc/aicontentpublisheruid.hrh
homescreensrvlegacy.pro
layers.sysdef.xml
sysdef_1_5_1.dtd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ai_content_model_api/ai_content_model_api.metaxml	Fri Mar 19 09:35:24 2010 +0200
@@ -0,0 +1,18 @@
+<?xml version="1.0" ?>
+<api id="e0fdab3ac028999293009f1a1b34299e" dataversion="1.0">
+  <name>AI Content Model API</name>
+  <description>AI Content Model API provides an abstraction to access the plug-in content, enables service request routing to the plug-in, and provides a callback interface used by the Active Idle plug-ins to give notification about modifications in the content and/or internal state.Each Active Idle plug-in must implement this interface together with the plug-in proprietary Content Model API, which specifies the content provided by the plug-in at run time, uniquely identifies content type and the logical means of every content entity, and specifies set of services supported by the plug-in. AI Content Model and the plug-in proprietary Content Model API are used at Active Idle UI and/or Theme development time.</description>
+  <type>c++</type>
+  <subsystem>activeidle</subsystem>
+  <libs>
+    <lib name="Ai3XmlUiMain.lib" />
+  </libs>
+  <release category="domain"/>
+  <attributes>
+     <!-- This indicates wether the api provedes separate html documentation -->
+     <!-- or is the additional documentation generated from headers. -->
+     <!-- If you are unsuere then the value is "no" -->
+     <htmldocprovided>yes</htmldocprovided>
+     <adaptation>no</adaptation>
+  </attributes>
+</api>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ai_content_model_api/ai_content_model_api.pro	Fri Mar 19 09:35:24 2010 +0200
@@ -0,0 +1,19 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+TEMPLATE = subdirs
+
+SUBDIRS += group
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ai_content_model_api/group/group.pro	Fri Mar 19 09:35:24 2010 +0200
@@ -0,0 +1,21 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+TEMPLATE = subdirs
+
+BLD_INF_RULES.prj_exports += \
+    "$${LITERAL_HASH}include <platform_paths.hrh>" \
+    "../inc/aicontentmodel.h     MW_LAYER_PLATFORM_EXPORT_PATH(aicontentmodel.h)" 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ai_content_model_api/inc/aicontentmodel.h	Fri Mar 19 09:35:24 2010 +0200
@@ -0,0 +1,229 @@
+/*
+* Copyright (c) 2006-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+#ifndef M_AICONTENTMODEL_H
+#define M_AICONTENTMODEL_H
+
+#include <e32base.h>
+#include <libc/stddef.h>  // For wchar_t
+
+/**
+ * Maximum length for a content item textual id.
+ *
+ * @see TAiContentItem::id
+ */
+const TInt KAiContentIdMaxLength = 255;
+
+/**
+ * Maximum length for content type.
+ *
+ * @see TAiContentItem::type
+ */
+const TInt KAiContentTypeMaxLength = 255;
+
+/**
+ * Null value for content id. Plug-in content model should never use this id
+ * value in its content model.
+ */
+const TInt KAiNullContentId = KErrNotFound;
+
+/**
+ *  Encapsulates metadata of single plug-ins content item. The class is used
+ *  as building block for the plug-ins content model, abstracts content
+ *  selector, content reference and event.
+ */
+struct TAiContentItem
+{
+    /**
+     * Plug-in specific id of this content item.
+     */
+    TInt id;
+
+    /**
+     * Textual id of this content item. Used for binding content items to
+     * UI elements.
+     *
+     * @see KAiContentIdMaxLength
+     */
+    const wchar_t* cid;
+
+    /**
+     * Content item data MIME type. For example "text/plain" for textual 
+     * content.
+     *
+     * @see KAiContentTypeMaxLength
+     */
+    const char* type;
+};
+
+/**
+ * Helper function for accessing Content item textual id TAiContentItem::cid.
+ *
+ * This function's performance is relative to O(N) where N is the length of 
+ * the textual id in characters. If the id of the same content item is accessed 
+ * repeatedly (for example in a loop) store the returned id in a local TPtrC 
+ * variable instead of calling this function repeatedly.
+ *
+ * @param aContentItem  content item whose textual id to return.
+ * @return textual id of aContentItem as a descriptor.
+ */
+inline TPtrC16 ContentCid( const TAiContentItem& aContentItem )
+    {
+    return TPtrC16( (const TText16*) aContentItem.cid );
+    }
+
+/**
+ * Helper function for accessing Content item data type TAiContentItem::type.
+ *
+ * This function's performance is relative to O(N) where N is the length of 
+ * the type name in characters. If the type of the same content item is accessed 
+ * repeatedly (for example in a loop) store the returned type in a local TPtrC8 
+ * variable instead of calling this function repeatedly.
+ *
+ * @param aContentItem  content item whose type to return.
+ * @return data type of aContentItem as a descriptor.
+ */
+inline TPtrC8 ContentType( const TAiContentItem& aContentItem )
+    {
+    return TPtrC8( (const TText8*) aContentItem.type );
+    }
+
+
+/**
+ * Mime type for passing bitmap content data.
+ * The content data should contain a packaged CGulIcon object pointer when this
+ * MIME tyoe is used.
+ *
+ * @see CGulIcon
+ * @see MAiContentObserver::PublishPtr
+ */
+const char KAiContentTypeBitmap[] = "image/x-s60-bitmap";
+
+/**
+ * MIME type for passing textual data.
+ *
+ * @see MAiContentObserver::Publish
+ */
+const char KAiContentTypeText[] = "text/plain";
+ 
+
+/**
+ *  Abstract interface which provides services to iterate content items
+ *  supported by the plug-in. Only used by the Active Idle Framework.
+ *  Each plug-in must provide implementation of interface to access:
+ *  content selectors, content references, and events. Instances of interface
+ *  are accessed through method GetProperty in interface CAiContentPublisher.
+ *
+ *  @since S60 3.2
+ */
+class MAiContentItemIterator
+{
+public:
+    /**
+     * Tests if this enumeration contains more elements.
+     *
+     * @return ETrue if this iterator object contains at least one more
+     *         element to provide; EFalse otherwise.
+     */
+    virtual TBool HasNext() const = 0;
+
+    /**
+     * Returns the next element of this iterator if this enumeration object
+     * has at least one more element to provide.
+     *
+     * @return The next element.
+     * @leave KErrOverflow if iterator is at the end of range.
+     */
+    virtual const TAiContentItem& NextL() = 0;
+
+    /**
+     * Returns the first element of this iterator which matches aId.
+     *
+     * @param  aId - unique identification of the content item, corresponds
+     *         to TAiContentItem::id.
+     * @return The first element matching aId.
+     * @leave KErrNotFound if element matching aId is not found from the
+     *            complete iterator range.
+     */
+    virtual const TAiContentItem& ItemL( TInt aId ) const = 0;
+
+    /**
+     * Returns the first element of this iterator which matches aCid.
+     *
+     * @param  aCid - textual identification of the content item, corresponds
+     *         to TAiContentItem::cid.
+     * @return The first element matching aCid.
+     * @leave KErrNotFound if element matching aCid is not found from the
+     *            complete iterator range.
+     */
+    virtual const TAiContentItem& ItemL( const TDesC& aCid ) const = 0;
+
+    /**
+     * Resets iterator to the first item in the list.
+     */
+    virtual void Reset() = 0;
+
+    /**
+     * Release the iterator.
+     */
+    virtual void Release() = 0;
+    
+protected:
+    /**
+     * Protected destructor prevents deletion through this interface.
+     */
+    ~MAiContentItemIterator() { }
+
+private:
+    /**
+     * Required to implement CleanupReleasePushL(MAiContentItemIterator*).
+     */
+    static void Cleanup(TAny* aSelf);
+    friend void CleanupReleasePushL(MAiContentItemIterator*);
+};
+
+/**
+ * Helper function which calls MAiContentItemIterator::Release() with NULL 
+ * checking. Especially useful in destructors.
+ */
+inline void Release(MAiContentItemIterator* aObj)
+    {
+    if (aObj) aObj->Release();
+    }
+
+/**
+ * 
+ */
+inline void CleanupReleasePushL(MAiContentItemIterator* aObj)
+    {
+    CleanupStack::PushL(
+        TCleanupItem(&MAiContentItemIterator::Cleanup, aObj) );
+    }
+
+/**
+ * Required to implement CleanupReleasePushL(MAiContentItemIterator*).
+ * Inline to avoid problems with multiple definitions.
+ */
+inline void MAiContentItemIterator::Cleanup(TAny* aSelf)
+    {
+    ::Release(static_cast<MAiContentItemIterator*>(aSelf));
+    }
+
+
+
+#endif // M_AICONTENTMODEL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ai_plugin_information_api/ai_plugin_information_api.metaxml	Fri Mar 19 09:35:24 2010 +0200
@@ -0,0 +1,18 @@
+<?xml version="1.0" ?>
+<api id="41b4bfa2b5209c5a38f99f5cdc28cc25" dataversion="1.0">
+  <name>AI Plug-in Information API</name>
+  <description>Provides infomration about loaded active idle plug-ins</description>
+  <type>c++</type>
+  <subsystem>activeidle</subsystem>
+  <libs>
+    <lib name="aifw.lib" />
+  </libs>
+  <release category="domain"/>
+  <attributes>
+     <!-- This indicates wether the api provedes separate html documentation -->
+     <!-- or is the additional documentation generated from headers. -->
+     <!-- If you are unsuere then the value is "no" -->
+     <htmldocprovided>yes</htmldocprovided>
+     <adaptation>no</adaptation>
+  </attributes>
+</api>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ai_plugin_information_api/ai_plugin_information_api.pro	Fri Mar 19 09:35:24 2010 +0200
@@ -0,0 +1,19 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+TEMPLATE = subdirs
+
+SUBDIRS += group
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ai_plugin_information_api/group/group.pro	Fri Mar 19 09:35:24 2010 +0200
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+TEMPLATE = subdirs
+
+BLD_INF_RULES.prj_exports += \
+    "$${LITERAL_HASH}include <platform_paths.hrh>" \
+    "../inc/activeidle2domainpskeys.h     MW_LAYER_PLATFORM_EXPORT_PATH(activeidle2domainpskeys.h)" \
+    "../inc/aicontentpublisheruid.hrh     MW_LAYER_PLATFORM_EXPORT_PATH(aicontentpublisheruid.hrh)" 
+    
+    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ai_plugin_information_api/inc/activeidle2domainpskeys.h	Fri Mar 19 09:35:24 2010 +0200
@@ -0,0 +1,187 @@
+/*
+* Copyright (c) 2006-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+#ifndef ACTIVEIDLE2_DOMAIN_PS_KEYS_H
+#define ACTIVEIDLE2_DOMAIN_PS_KEYS_H
+
+/**
+* PubSub Category AI information API
+*/
+const TUid KPSUidAiInformation = {0x101FD657};
+
+/**
+* PubSub keys
+*/
+const TUint KActiveIdleUid = 0x00000001; // Contains UID of StandbyUI (Active Idle) application
+
+const TUint KActiveIdleState = 0x00000002; // Contains one value from following emuneration
+
+enum EPSActiveIdleState
+{
+    // Indicates that Active Idle goes to background
+    // Value is triggered by KAknFullOrPartialForegroundLost event
+    //
+    // Corresponds to value EPSTelephonyNotIdle writtern to former  KTelephonyIdleStatus
+    EPSAiBackground = 0,
+
+    // Indicates that Active Idle goes to foreground
+    // Value is triggered by KAknFullOrPartialForegroundGained event
+    //
+    // Corresponds to value EPSTelephonyIdle writtern to former  KTelephonyIdleStatus
+    EPSAiForeground,
+
+    // Indicates that Active Idle goes to background and keyboard focus goes to Phone app for Tel number entry
+    // The key is managed by windows server plug-in depends on the key pressed by end-user (See Chapter "Key event handling" from Active Idle SWAD)
+    //
+    // Corresponds to value EPSTelephonyIncomingKeyEvents written to former KTelephonyFocusInfo
+    EPSAiNumberEntry
+};
+
+const TUint KActiveIdlePopupState = 0x00000003; // Contains one value from following emuneration
+
+enum EPSActiveIdlePopupState
+{
+    // Indicates that Active Idle is displaying dialog or menu
+    // The key is managed by windows server plug-in to determine whether to enable keylock handling
+    EPSAiDisplayingMenuOrDialog,
+
+    // Indicates that Active Idle is not displaying dialog or menu
+    // The key is managed by windows server plug-in to determine whether to enable keylock handling
+    EPSAiNotDisplayingMenuOrDialog
+};
+
+
+const TUint KActiveIdleActOnSendKey = 0x00000004; // Contains 0 if we are to ignore the send or > 0 if we need to react to it
+
+const TUint KActiveIdleTouchToolbarWidth = 0x00000005;
+
+const TUint KActiveIdleTouchToolbarHeight = 0x00000006;
+
+const TUint KActiveIdleSimRegFailedReceived = 0x00000007; // Contains 1 if we have received sim reg failed message, 0 if not.
+
+enum EPSActiveIdleSimRegReceiveStatus
+{
+    // Indicates that Active Idle is displaying dialog or menu
+    // The key is managed by windows server plug-in to determine whether to enable keylock handling
+    EPSSimRegFailedMessageNotReceived = 0,
+
+    // Indicates that Active Idle is not displaying dialog or menu
+    // The key is managed by windows server plug-in to determine whether to enable keylock handling
+    EPSSimRegFailedMessageReceived
+};
+
+const TUint KActiveIdleThemeSupportsXsp = 0x00000008;   // Contains one value from following enumeration
+
+enum EPSActiveIdleThemeSupportsXsp
+{
+    // Value indicates that xSP feature is not supported in currently active theme
+    EPSAiXspNotSupported,
+
+    // Value indicates that the current theme supports the xSP feature
+    EPSAiXspIsSupported
+};
+
+const TUint KActiveIdleLaunch = 0x00000009; // Contains information if shortcut launching is ongoing or not
+
+enum EPSActiveIdleIdleLaunch
+{
+
+	// Value indicates that no shortcut is in launching state and new launch tapping can be handled
+	EPSAiLaunchNotActive = 0,
+	
+	// Value indicates that active idle shortcut is launching
+	EPSAiLaunchIsActive	
+};
+
+
+// Indicates that Active Idle 2 should be restarted.
+const TUint KActiveIdleRestartAI2 = 0x0000000B;
+
+// Indicates that all the CPS Harvester plugins have been updated
+const TUint KActiveIdleCpsPluginsUpdated = 0x0000000C;
+
+enum EPSActiveIdleCpsPluginsUpdated
+    {
+    EPSAiPluginsNotUpdated = 0,
+    EPSAiPluginsUpdated
+    };
+
+// Key to indicate wether the WS plug-in forwards all the numeric keypad 
+// events to telephone or not.
+const TUint KActiveIdleForwardNumericKeysToPhone = 0x0000000D;
+
+enum EActiveIdleForwardNumericKeysToPhone
+    {
+    // Forward events to phone
+    EPSAiForwardNumericKeysToPhone,
+    
+    // Don't forward events to phone
+    EPSAiDontForwardNumericKeysToPhone
+    };
+
+// Indicates that in ExtHS mode the LSK should have a locked shortcut.
+// Contains the full shortcut definition string.
+const TUint KActiveIdleExtHS_LSKLocked = 0x00000501;
+
+// Indicates that in ExtHS mode the RSK should have a locked shortcut.
+// Contains the full shortcut definition string.
+const TUint KActiveIdleExtHS_RSKLocked = 0x00000502;
+
+// Indicates that in ExtHS mode the plugin configuration has changed.
+const TUint KActiveIdleExtHS_PluginConfChange = 0x00000503;
+
+/**
+* PubSub Category AI plug-in registry API
+*/
+const TUid KPSUidActiveIdle2 =  {0x102750F0}; // ActiveIdle2 SID
+
+/**
+*
+* First iterate Active plugin UID range to find all
+* active plugin UID's. Use that UID as a key to find the plugins name
+* from the name range.
+*
+*/
+
+/**
+* Active plugin count
+*
+* Possible integer values:
+* 0x000000000 - 0xFFFFFFFF : Active plugin count
+*/
+const TUint KAIActivePluginCount = 0x00000000;
+
+/**
+* Active plugin UID range
+*
+* Possible integer values:
+* 0x100000000 - 0xFFFFFFFF : Active plugins UID
+*/
+const TUint KAIActivePluginRangeStart = 0x00000001;
+const TUint KAIActivePluginRangeEnd   = 0x0FFFFFFF;
+
+/**
+* Active plugin name range
+*
+* Possible string values:
+* Plugin name
+*/
+const TUint KAIPluginNameRangeStart = 0x10000000;
+const TUint KAIPluginNameRangeEnd   = 0xFFFFFFFF;
+
+#endif // ACTIVEIDLE2_DOMAIN_PS_KEYS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ai_plugin_information_api/inc/aicontentpublisheruid.hrh	Fri Mar 19 09:35:24 2010 +0200
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2006-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+
+#ifndef AICONTENTPUBLISHERUID_HRH
+#define AICONTENTPUBLISHERUID_HRH
+
+/**
+ * Ecom interface uid for CAiContentPublisher.
+ *
+ * Example resource of a plugin that implements content publisher interface.
+ * @code
+ * #include <aicontentpublisheruid.hrh>
+ * #include <ecom/registryinfov2.rh>
+ *
+ * #define MY_DLL_UID                   0xFFEEDDCC
+ * #define MY_PLUGIN_IMPLEMENTATION_UID 0xBBAA9988
+ *
+ * RESOURCE REGISTRY_INFO registry_info
+ * {
+ *     resource_format_version = RESOURCE_FORMAT_VERSION_2;
+ *     dll_uid = MY_DLL_UID;
+ * 
+ *     // Interface info array
+ *     interfaces = 
+ *     {
+ *         INTERFACE_INFO
+ *         {
+ *             // UID of the implemented interface
+ *             interface_uid = AI_UID_ECOM_INTERFACE_CONTENTPUBLISHER;
+ * 
+ *             implementations = 
+ *             {
+ *                 IMPLEMENTATION_INFO
+ *                 {
+ *                     implementation_uid = MY_PLUGIN_IMPLEMENTATION_UID;
+ *                     version_no         = 1;
+ *                     display_name       = "My plugin";
+ *                 }
+ *             };
+ *         }
+ *     };
+ * }
+ * @endcode
+ */
+#define AI_UID_ECOM_INTERFACE_CONTENTPUBLISHER 0x102750ED
+
+#endif // AICONTENTPUBLISHERUID_HRH
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrvlegacy.pro	Fri Mar 19 09:35:24 2010 +0200
@@ -0,0 +1,23 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+TEMPLATE = subdirs
+
+SUBDIRS  += ai_content_model_api \
+            ai_plugin_information_api 
+
+CONFIG += ordered
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/layers.sysdef.xml	Fri Mar 19 09:35:24 2010 +0200
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE SystemDefinition SYSTEM "sysdef_1_5_1.dtd" [
+  <!ENTITY layer_real_source_path "sf/mw/homescreensrvlegacy" >
+]>
+
+<SystemDefinition name="homescreensrvlegacy" schema="1.5.1">
+	<systemModel>
+
+    <layer name="mw_layer">
+      <module name="homescreensrvlegacy">
+        <unit unitID="hs.homescreensrvlegacy" mrp="" bldFile="&layer_real_source_path;" name="homescreensrvlegacy" proFile="homescreensrvlegacy.pro" qmakeArgs="-r"/>
+      </module>
+    </layer>
+
+  </systemModel>
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysdef_1_5_1.dtd	Fri Mar 19 09:35:24 2010 +0200
@@ -0,0 +1,88 @@
+ <!ELEMENT SystemDefinition (systemModel?, build?)>
+ <!ATTLIST SystemDefinition
+  name CDATA #REQUIRED
+  schema CDATA #REQUIRED>
+ <!ELEMENT systemModel (layer+)>
+ <!ELEMENT layer (logicalset* | module*)*>
+ <!ATTLIST layer
+  name CDATA #REQUIRED
+  levels CDATA #IMPLIED
+  span CDATA #IMPLIED>
+ <!ELEMENT logicalset (logicalsubset* | module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalset name CDATA #REQUIRED>
+ <!ELEMENT logicalsubset (module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalsubset name CDATA #REQUIRED>
+ <!ELEMENT module (component* | unit* | package* | prebuilt*)*>
+ <!ATTLIST module
+  name CDATA #REQUIRED
+  level CDATA #IMPLIED>
+ <!ELEMENT component (unit* | package* | prebuilt*)*>
+ <!ATTLIST component name CDATA #REQUIRED>
+ <!ELEMENT unit EMPTY>
+ <!ATTLIST unit
+  unitID ID #REQUIRED
+  name CDATA #REQUIRED
+  mrp CDATA #REQUIRED
+  filter CDATA #IMPLIED
+  bldFile CDATA #REQUIRED
+  priority CDATA #IMPLIED
+  contract CDATA #IMPLIED
+  proFile CDATA #IMPLIED
+  qmakeArgs CDATA #IMPLIED>
+ <!ELEMENT package EMPTY>
+ <!ATTLIST package
+  name CDATA #REQUIRED
+  mrp CDATA #REQUIRED
+  filter CDATA #IMPLIED
+  contract CDATA #IMPLIED>
+ <!ELEMENT prebuilt EMPTY>
+ <!ATTLIST prebuilt
+  name CDATA #REQUIRED
+  version CDATA #REQUIRED
+  late (Y|N) #IMPLIED
+  filter CDATA #IMPLIED
+  contract CDATA #IMPLIED>
+ <!ELEMENT build (option* | target+ | targetList+ | unitList+ | configuration+)*>
+ <!ELEMENT unitList (unitRef+)>
+ <!ATTLIST unitList
+  name ID #REQUIRED
+  description CDATA #REQUIRED>
+ <!ELEMENT unitRef EMPTY>
+ <!ATTLIST unitRef unit IDREF #REQUIRED>
+ <!ELEMENT targetList EMPTY>
+ <!ATTLIST targetList
+  name ID #REQUIRED
+  description CDATA #REQUIRED
+  target IDREFS #REQUIRED>
+ <!ELEMENT target EMPTY>
+ <!ATTLIST target
+  name ID #REQUIRED
+  abldTarget CDATA #REQUIRED
+  description CDATA #REQUIRED>
+ <!ELEMENT option EMPTY>
+ <!ATTLIST option
+  name ID #REQUIRED
+  abldOption CDATA #REQUIRED
+  description CDATA #REQUIRED
+  enable (Y | N | y | n) #REQUIRED>
+ <!ELEMENT configuration (unitListRef+ | layerRef+ | task+)*>
+ <!ATTLIST configuration
+  name ID #REQUIRED
+  description CDATA #REQUIRED
+  filter CDATA #REQUIRED>
+ <!ELEMENT task ( unitListRef* , (buildLayer | specialInstructions))>
+ <!ELEMENT unitListRef EMPTY>
+ <!ATTLIST unitListRef unitList IDREF #REQUIRED>
+ <!ELEMENT layerRef EMPTY>
+ <!ATTLIST layerRef layerName CDATA #REQUIRED>
+ <!ELEMENT buildLayer EMPTY>
+ <!ATTLIST buildLayer
+  command CDATA #REQUIRED
+  targetList IDREFS #IMPLIED
+  unitParallel (Y | N | y | n) #REQUIRED
+  targetParallel (Y | N | y | n) #IMPLIED>
+ <!ELEMENT specialInstructions EMPTY>
+ <!ATTLIST specialInstructions
+  name CDATA #REQUIRED
+  cwd CDATA #REQUIRED
+  command CDATA #REQUIRED>