uidesigner/com.nokia.sdt.series60.componentlibrary/components/transient/CAknPreviewPopUp.component
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). -->
<!-- All rights reserved. -->
<!-- This component and the accompanying materials are made available -->
<!-- under the terms of the License "Eclipse Public License v1.0" -->
<!-- which accompanies this distribution, and is available -->
<!-- at the URL "http://www.eclipse.org/legal/epl-v10.html". -->
<componentDefinition xmlns="http://www.nokia.com/sdt/emf/component"
xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<component baseComponent="com.nokia.sdt.series60.CommonBase"
friendlyName="%friendlyName"
qualifiedName="com.nokia.sdt.series60.CAknPreviewPopUp"
category="NotesDialogs"
instanceNameRoot="previewPopUp"
version="1.0">
<documentation>
<information>%information</information>
</documentation>
<symbian sdkName="com.nokia.series60" minSDKVersion="3.2"
className="CAknPreviewPopUpController" classHelpTopic="" />
<designerImages
smallIconFile="CAknPreviewPopUp_sm.png"
largeIconFile="CAknPreviewPopUp.png"/>
<attributes>
<attribute key="is-non-layout-object">true</attribute>
<attribute key="is-transient-object">true</attribute>
<attribute key="is-layout-object">true</attribute>
<attribute key="is-layout-container">true</attribute>
<attribute key="event-handler-target">true</attribute>
</attributes>
<properties>
<property category="Hidden" name="className" type="string" readOnly="true"/>
<compoundProperty category="Hidden" name="location" type="com.nokia.sdt.series60.locationProperty"
editorClass="com.nokia.sdt.symbian.ui.editors.ReadOnlySummaryEditorFactory" readOnly="true"/>
<compoundProperty category="Layout" name="size" type="com.nokia.sdt.series60.sizeProperty"
editorClass="com.nokia.sdt.symbian.ui.editors.ReadOnlySummaryEditorFactory" readOnly="true"
descriptionKey="sizeDescription"/>
<property category="Appearance" name="backColor" displayName="%backColor" type="string"
editorClass="com.nokia.sdt.symbian.ui.editors.RGBEditorFactoryWithSystemColorCombo"
descriptionKey="backColorDescription" />
<property category="Behavior" name="asynchronous"
descriptionKey="asynchronousDescription"
type="boolean"
default="true" />
<property category="Flags" name="ELayoutDefault"
descriptionKey="ELayoutDefaultDescription"
type="boolean"
default="false" />
<property category="Flags" name="ELayoutSubMenu"
descriptionKey="ELayoutSubMenuDescription"
type="boolean"
default="false" />
<property category="Flags" name="EPermanentMode"
descriptionKey="EPermanentModeDescription"
type="boolean"
default="false" />
<property category="Flags" name="EFixedMode"
descriptionKey="EFixedModeDescription"
type="boolean"
default="false" />
<property category="Flags" name="EExcludeFrames"
descriptionKey="EExcludeFramesDescription"
type="boolean"
default="false" />
<property category="Behavior" name="showDelay"
descriptionKey="showDelayDescription"
type="float"
default="1.0" minValue="0" maxValue="2147.0" />
<property category="Behavior" name="hideDelay"
descriptionKey="hideDelayDescription"
type="float"
default="3.0" minValue="0" maxValue="2147.0" />
<property category="Data" name="headingText" type="localizedString"
default="" descriptionKey="headingTextDescription"
editorClass="com.nokia.sdt.symbian.ui.editors.ScalableTextEditorFactory" />
</properties>
<events>
<event name="resourceChanged" category="Content"
group="CAknPreviewPopUp"
handlerNameTemplate="Handle{title(name)}ResourceChanged"
descriptionKey="resourceChangedDescription"
/>
<event name="sizeChanged" category="Content"
group="CAknPreviewPopUp"
descriptionKey="sizeChangedDescription"
handlerNameTemplate="Handle{title(name)}SizeChanged"
/>
<event name="draw" category="Content"
group="CAknPreviewPopUp"
handlerNameTemplate="Handle{title(name)}Draw"
descriptionKey="drawDescription"
/>
<event name="positionChanged" category="Content"
group="CAknPreviewPopUp"
handlerNameTemplate="Handle{title(name)}PositionChanged"
descriptionKey="positionChangedDescription"
/>
<event name="handlePointerEvent" category="Content"
group="CAknPreviewPopUp"
handlerNameTemplate="Handle{title(name)}PointerEventL"
descriptionKey="handlePointerEventDescription"
/>
<event name="handleLongTapEvent" category="Content"
group="CAknPreviewPopUp"
handlerNameTemplate="Handle{title(name)}LongTapEventL"
descriptionKey="handleLongTapEventDescription"
/>
<event name="previewPopUpShown" category="Observer"
group="CAknPreviewPopUp"
handlerNameTemplate="Handle{title(name)}PreviewPopUpShownL"
descriptionKey="previewPopUpShownDescription"
/>
<event name="previewPopUpHidden" category="Observer"
group="CAknPreviewPopUp"
handlerNameTemplate="Handle{title(name)}PreviewPopUpHiddenL"
descriptionKey="previewPopUpHiddenDescription"
/>
</events>
<implementations>
<implementation>
<interface id="com.nokia.sdt.datamodel.adapter.IVisualAppearance"/>
<interface id="com.nokia.sdt.datamodel.adapter.IDirectLabelEdit"/>
<interface id="com.nokia.sdt.datamodel.adapter.ILayout"/>
<script file="CAknPreviewPopUp.js" prototype="CAknPreviewPopUpVisual"/>
</implementation>
<implementation>
<interface id="com.nokia.sdt.datamodel.adapter.IQueryContainment"/>
<script file="CAknPreviewPopUp.js" prototype="CAknPreviewPopUpContainment"/>
</implementation>
<implementation>
<interface id="com.nokia.sdt.datamodel.adapter.IInitializer"/>
<interface id="com.nokia.sdt.datamodel.adapter.IComponentInstancePropertyListener"/>
<script file="CAknPreviewPopUp.js" prototype="CAknPreviewPopUpInit"/>
</implementation>
<implementation>
<interface id="com.nokia.sdt.datamodel.adapter.IComponentEventInfo"/>
<script file="CAknPreviewPopUp.js" prototype="CAknPreviewPopUpEventInfo"/>
</implementation>
</implementations>
<sourceMapping>
<select property="headingText">
<choice value="">
</choice>
<choice>
<mapResource struct="TBUF" headers="eikon.rh" id="headingText">
<mapSimpleMember property="headingText" member="buf" />
</mapResource>
</choice>
</select>
</sourceMapping>
<sourceGen>
<expandMacro name="HeaderFileTemplate"
LocationPrefix="CONTENT_HEADER">
<expandArgument name="InitialOwnedSystemIncludesContent"><![CDATA[
#include <coecntrl.h>
#include <aknpreviewpopupcontentprovider.h>
]]></expandArgument>
<expandArgument name="InitialOwnedForwardDeclarationsContent"><![CDATA[
class MEikCommandObserver;
class CAknPreviewPopUpController;
]]></expandArgument>
</expandMacro>
<template id="IncludeRsgFile" location="CONTENT_MAIN_OWNED_SYSTEM_INCLUDES"><![CDATA[
<% if (resourceFileNameBase != null) {%>#include <${resourceFileNameBase}.rsg>
<% } %>]]></template>
<expandMacro name="SourceFileTemplate"
LocationPrefix="CONTENT_MAIN">
<expandArgument name="InitialSystemIncludesContent"><![CDATA[
#include <eikcmobs.h>
#include <aknpreviewpopupcontroller.h>
]]></expandArgument>
</expandMacro>
<expandMacro name="ClassTemplate"
LocationPrefix="CONTENT_"
BaseLocation="CONTENT_HEADER_FILE"
BaseClassName="CCoeControl"
ExtraBaseClasses="public MAknPreviewPopUpContentProvider">
<expandArgument name="ClassComment">
/**
* Content class for ${instanceName}.
* @class ${className} ${instanceName$title}.h
*/
</expandArgument>
<expandArgument name="InitialPrivateTailContent">
MEikCommandObserver* iCommandObserver;
CAknPreviewPopUpController* iController;
</expandArgument>
</expandMacro>
<defineLocation id="CONTENT_CHILD_ENUMS"
baseLocation="CONTENT_CLASS"
owned="false"
location="enum(TControls)">
<template><![CDATA[
public: <% contrib.indentAdjust(-1); %>
enum TControls
{
};
]]> </template>
</defineLocation>
<defineLocation id="CONTENT_CHILD_ENUMS_CONTENTS"
baseLocation="CONTENT_CHILD_ENUMS"
location="region(Generated Contents)">
</defineLocation>
<template id="GetChildEnums" location="CONTENT_CHILD_ENUMS_CONTENTS"><![CDATA[<%
// each control must contribute enumerators
if (Engine.formMatches(form, ["AppUi", "AknView"])) {
var enumContribs = Engine.generateChildContributions("HandleCCoeControlEnums");
Engine.assignLocationsForPhase(enumContribs, "ChildEnumsContents", "CONTENT_CHILD_ENUMS_CONTENTS");
contribs.addAll(enumContribs);
}
%>]]>
</template>
<template id="AddLastChildEnum" location="CONTENT_CHILD_ENUMS">
// add any user-defined entries here...
ELastControl
</template>
<expandMacro name="GenerateMethodWithOwnedBody"
IsOwned="false"
FunctionLocationId="CONSTRUCTOR"
FunctionName="${className}"
FunctionArgs=""
ReturnType=""
DeclLocation="CONTENT_CLASS_PUBLIC"
DefnLocation="CONTENT_MAIN_FILE">
<expandArgument name="FunctionComment">
/**
* First phase of Symbian two-phase construction. Should not
* contain any code that could leave.
*/
</expandArgument>
</expandMacro>
<expandMacro name="GenerateMethodWithOwnedBody"
IsOwned="false"
IsVirtual="true"
FunctionLocationId="DESTRUCTOR"
FunctionName="~${className}"
FunctionArgs=""
ReturnType=""
DeclLocation="CONTENT_CLASS_PUBLIC"
DefnLocation="CONTENT_MAIN_FILE">
<expandArgument name="FunctionComment">
/**
* Destroy child controls.
*/
</expandArgument>
</expandMacro>
<expandMacro name="GenerateMethod"
IsOwned="false"
IsStatic="true"
FunctionLocationId="NEWL_METHOD"
FunctionName="NewL"
FunctionArgs="MEikCommandObserver* aCommandObserver"
ReturnType="${className}*"
DeclLocation="CONTENT_CLASS_PUBLIC"
DefnLocation="CONTENT_MAIN_FILE">
<expandArgument name="FunctionComment">
/**
* Construct the control (first phase).
* Creates an instance and initializes it.
* Instance is not left on cleanup stack.
* @return initialized instance of ${className}
*/
</expandArgument>
<expandArgument name="FunctionBody"><![CDATA[
${className}* self = ${className}::NewLC( aCommandObserver );
CleanupStack::Pop( self );
return self;
]]> </expandArgument>
</expandMacro>
<expandMacro name="GenerateMethod"
IsOwned="false"
IsStatic="true"
FunctionLocationId="NEWLC_METHOD"
FunctionName="NewLC"
FunctionArgs="MEikCommandObserver* aCommandObserver"
ReturnType="${className}*"
DeclLocation="CONTENT_CLASS_PUBLIC"
DefnLocation="CONTENT_MAIN_FILE">
<expandArgument name="FunctionComment">
/**
* Construct the control (first phase).
* Creates an instance and initializes it.
* Instance is left on cleanup stack.
* @return new instance of ${className}
*/
</expandArgument>
<expandArgument name="FunctionBody"><![CDATA[
${className}* self = new ( ELeave ) ${className}();
CleanupStack::PushL( self );
self->ConstructL( aCommandObserver );
return self;
]]> </expandArgument>
</expandMacro>
<expandMacro name="GenerateMethodWithOwnedBody"
IsOwned="false"
FunctionLocationId="CONSTRUCTL_METHOD"
FunctionName="ConstructL"
FunctionArgs="MEikCommandObserver* aCommandObserver"
DeclLocation="CONTENT_CLASS_PUBLIC"
DefnLocation="CONTENT_MAIN_FILE">
<expandArgument name="FunctionComment">
/**
* Construct the control (second phase).
* Creates a window to contain the controls and activates it.
*/
</expandArgument>
<expandArgument name="StartFunctionBody"><![CDATA[
iCommandObserver = aCommandObserver;
CreateWindowL();
InitializeControlsL();
ActivateL();
]]> </expandArgument>
</expandMacro>
<expandMacro name="GenerateMethod"
IsOwned="false"
IsConst="true"
FunctionLocationId="COUNTCOMPONENTCONTROLS_METHOD"
FunctionName="CountComponentControls"
FunctionArgs=""
ReturnType="TInt"
DeclLocation="CONTENT_CLASS_PUBLIC"
DefnLocation="CONTENT_MAIN_FILE">
<expandArgument name="FunctionComment">
/**
* Return the number of controls in the container (override)
* @return count
*/
</expandArgument>
<expandArgument name="FunctionBody"><![CDATA[
return ( int ) ELastControl;
]]> </expandArgument>
</expandMacro>
<expandMacro name="GenerateMethodWithOwnedBody"
IsOwned="false"
IsConst="true"
FunctionLocationId="COMPONENTCONTROL_METHOD"
FunctionName="ComponentControl"
FunctionArgs="TInt aIndex"
ReturnType="CCoeControl*"
DeclLocation="CONTENT_CLASS_PUBLIC"
DefnLocation="CONTENT_MAIN_FILE">
<expandArgument name="FunctionComment"><![CDATA[
/**
* Get the control with the given index (override)
* @param aIndex Control index [0...n) (limited by #CountComponentControls)
* @return Pointer to control
*/
]]> </expandArgument>
<expandArgument name="EndFunctionBody"><![CDATA[
// handle any user controls here...
return NULL;
]]> </expandArgument>
</expandMacro>
<template id="ComponentControlSwitch1" location="COMPONENTCONTROL_METHOD_BODY"><![CDATA[
switch ( aIndex )
{
]]> </template>
<template id="GetChildSwitchCases" location="COMPONENTCONTROL_METHOD_BODY"><![CDATA[<%
// each control must contribute switch cases
if (Engine.formMatches(form, ["AppUi", "AknView"])) {
var switchContribs = Engine.generateChildContributions("HandleComponentSwitchDispatch");
Engine.assignLocationsForPhase(switchContribs, "ComponentControlBody", "COMPONENTCONTROL_METHOD_BODY");
contribs.addAll(switchContribs);
}
%>]]></template>
<template id="ComponentControlSwitch2" location="COMPONENTCONTROL_METHOD_BODY"><![CDATA[
}
]]> </template>
<expandMacro name="GenerateMethod"
IsOwned="false"
FunctionLocationId="STARTCONTENTBUILDINGL_METHOD"
FunctionName="StartContentBuildingL"
FunctionArgs=""
DeclLocation="CONTENT_CLASS_PUBLIC"
DefnLocation="CONTENT_MAIN_FILE">
<expandArgument name="FunctionComment">
/**
* When asynchronous, called by the preview popup controller when
* content building should be started.
*/
</expandArgument>
<expandArgument name="FunctionBody"><![CDATA[
iController->ContentReady();
]]> </expandArgument>
</expandMacro>
<expandMacro name="GenerateMethod"
IsOwned="false"
FunctionLocationId="CANCELCONTENTBUILDING_METHOD"
FunctionName="CancelContentBuilding"
FunctionArgs=""
DeclLocation="CONTENT_CLASS_PUBLIC"
DefnLocation="CONTENT_MAIN_FILE"
Realize="true">
<expandArgument name="FunctionComment">
/**
* When asynchronous, called by the preview popup controller if ongoing
* content building operation should be cancelled.
*/
</expandArgument>
</expandMacro>
<expandMacro name="GenerateMethod"
IsOwned="false"
FunctionLocationId="SETPOPUPCONTROLLER_METHOD"
FunctionName="SetPopUpController"
FunctionArgs="CAknPreviewPopUpController* aController"
DeclLocation="CONTENT_CLASS_PUBLIC"
DefnLocation="CONTENT_MAIN_FILE">
<expandArgument name="FunctionComment">
/**
* Set the pop-up controller member.
*/
</expandArgument>
<expandArgument name="FunctionBody"><![CDATA[
iController = aController;
]]> </expandArgument>
</expandMacro>
<expandMacro name="GenerateMethodWithOwnedBody"
IsOwned="false"
FunctionLocationId="MINIMUMSIZE_METHOD"
FunctionName="MinimumSize"
FunctionArgs=""
ReturnType="TSize"
DeclLocation="CONTENT_CLASS_PROTECTED"
DefnLocation="CONTENT_MAIN_FILE">
<expandArgument name="FunctionComment">
/**
* Return the size of the pop-up.
* Modify this method to dynamically size the pop-up.
*/
</expandArgument>
<expandArgument name="StartFunctionBody">
TSize size;
</expandArgument>
<expandArgument name="FunctionBody"><![CDATA[
<% include("popupDialogLibrary.js")
var size = new Point(instance.properties.size.width, instance.properties.size.height);
var laf = findExistingLookAndFeel(instance);
if (laf != null) {
size.y -= getPreviewPopUpHeadingHeight(instance, laf);
}
// the frame
size.x -= 12;
size.y -= 12;
%>size = TSize(${size.x}, ${size.y});]]></expandArgument>
<expandArgument name="EndFunctionBody">
return size;
</expandArgument>
</expandMacro>
<expandMacro name="GenerateMethodWithOwnedBody"
IsOwned="false"
FunctionLocationId="SIZECHANGED_METHOD"
FunctionName="SizeChanged"
FunctionArgs=""
DeclLocation="CONTENT_CLASS_PROTECTED"
DefnLocation="CONTENT_MAIN_FILE">
<expandArgument name="FunctionComment">
/**
* Handle resizing of the container. This implementation will lay out
* labels, images, etc. to the size they were given in the UI designer.
* This code will need to be modified to adjust arbitrary controls to
* any screen size.
*/
</expandArgument>
<expandArgument name="StartFunctionBody"><![CDATA[
CCoeControl::SizeChanged();
LayoutControls();
]]> </expandArgument>
</expandMacro>
<expandMacro name="GenerateMethodWithOwnedBody"
IsOwned="false"
IsConst="true"
FunctionLocationId="DRAW_METHOD"
FunctionName="Draw"
FunctionArgs="const TRect& aRect"
DeclLocation="CONTENT_CLASS_PRIVATE"
DefnLocation="CONTENT_MAIN_FILE">
<expandArgument name="FunctionComment">
/**
* Draw container contents.
*/
</expandArgument>
</expandMacro>
<inline scope="prototype">
function getBackgroundColorRgb(properties) {
if (properties.backColor.indexOf(',') > 0)
return "( " + properties.backColor + " )";
else
return " = iEikonEnv->Color( ( TLogicalColor ) " + properties.backColor + " )";
}
</inline>
<template id="DrawBodyBgColor" location="DRAW_METHOD_BODY"><![CDATA[
CWindowGc& gc = SystemGc();
<%if (properties.backColor == "") {%>gc.Clear( aRect );
<%} else {%>gc.SetPenStyle( CGraphicsContext::ENullPen );
TRgb backColor${getBackgroundColorRgb(properties)};
gc.SetBrushColor( backColor );
gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
gc.DrawRect( aRect );
<%}%>
]]> </template>
<expandMacro name="GenerateMethod"
FunctionLocationId="INITIALIZECONTROLSL_METHOD"
FunctionName="InitializeControlsL"
FunctionArgs=""
DeclLocation="CONTENT_CLASS_PRIVATE_OWNED_METHODS"
DefnLocation="CONTENT_MAIN_FILE"
Realize="true">
<expandArgument name="FunctionComment">
/**
* Initialize each control upon creation.
*/
</expandArgument>
</expandMacro>
<expandMacro name="GenerateMethod"
FunctionLocationId="LAYOUTCONTROLS_METHOD"
FunctionName="LayoutControls"
FunctionArgs=""
DeclLocation="CONTENT_CLASS_PRIVATE_OWNED_METHODS"
DefnLocation="CONTENT_MAIN_FILE"
Realize="true">
<expandArgument name="FunctionComment">
/**
* Layout components as specified in the UI Designer
*/
</expandArgument>
</expandMacro>
<templateGroup id="GenerateResourceChanged" ifEvents="resourceChanged">
<expandMacro name="GenerateVirtualMethodOverrideForEventHandler"
IsOwned="false"
FunctionLocationId="HANDLERESOURCECHANGED_METHOD"
FunctionArgs="TInt aType"
FunctionName="HandleResourceChange"
DeclLocation="CONTENT_CLASS_PROTECTED_OVERRIDDEN_METHODS"
DefnLocation="CONTENT_MAIN_FILE">
<expandArgument name="FunctionComment">
/**
* Handle global resource changes, such as scalable UI or skin events (override)
*/
</expandArgument>
<expandArgument name="StartFunctionBody">
CCoeControl::HandleResourceChange( aType );
</expandArgument>
</expandMacro>
<expandMacro name="GenerateUserEventHandlerFunction"
FunctionLocationId="RESOURCECHANGED_EVENTHANDLER"
FunctionArgs="TInt aType"
DeclLocation="CONTENT_CLASS_PROTECTED_USER_HANDLERS"
DefnLocation="CONTENT_MAIN_FILE">
</expandMacro>
</templateGroup>
<templateGroup id="GenerateSizeChangedHandler" ifEvents="sizeChanged">
<expandMacro name="GenerateUserEventHandlerFunction"
FunctionLocationId="SIZECHANGED_EVENTHANDLER"
FunctionArgs=""
DeclLocation="CONTENT_CLASS_PROTECTED_USER_HANDLERS"
DefnLocation="CONTENT_MAIN_FILE">
</expandMacro>
<template id="InvokeSizeChangedHandler" location="SIZECHANGED_METHOD_BODY">
${event.handlerName}();
</template>
</templateGroup>
<templateGroup id="GenerateDrawHandler" ifEvents="draw">
<expandMacro name="GenerateUserEventHandlerFunction"
IsConst="true"
FunctionLocationId="DRAW_EVENTHANDLER"
FunctionArgs="const TRect& aRect"
DeclLocation="CONTENT_CLASS_PROTECTED_USER_HANDLERS"
DefnLocation="CONTENT_MAIN_FILE">
</expandMacro>
<template id="InvokeDrawHandler" location="DRAW_METHOD_BODY">
${event.handlerName}( aRect );
</template>
</templateGroup>
<templateGroup id="GeneratePositionChanged" ifEvents="positionChanged">
<expandMacro name="GenerateVirtualMethodOverrideForEventHandler"
IsOwned="false"
FunctionLocationId="POSITIONCHANGED_METHOD"
FunctionArgs=""
FunctionName="PositionChanged"
DeclLocation="CONTENT_CLASS_PROTECTED_OVERRIDDEN_METHODS"
DefnLocation="CONTENT_MAIN_FILE">
<expandArgument name="FunctionComment">
/**
* Handle position change (override)
*/
</expandArgument>
<expandArgument name="StartFunctionBody">
CCoeControl::PositionChanged();
</expandArgument>
</expandMacro>
<expandMacro name="GenerateUserEventHandlerFunction"
FunctionLocationId="POSITIONCHANGED_EVENTHANDLER"
FunctionArgs=""
DeclLocation="CONTENT_CLASS_PROTECTED_USER_HANDLERS"
DefnLocation="CONTENT_MAIN_FILE">
</expandMacro>
</templateGroup>
<templateGroup id="HandlePointerEvent" ifEvents="handlePointerEvent handleLongTapEvent">
<expandMacro name="GenerateMethodWithOwnedBody"
IsOwned="false"
FunctionLocationId="HANDLEPOINTEREVENTL_METHOD"
FunctionArgs="const TPointerEvent& aPointerEvent"
FunctionName="HandlePointerEventL"
DeclLocation="CONTENT_CLASS_PROTECTED_OVERRIDDEN_METHODS"
DefnLocation="CONTENT_MAIN_FILE">
<expandArgument name="FunctionComment">
/**
* Handle pointer events (override)
*/
</expandArgument>
<expandArgument name="StartFunctionBody">
CCoeControl::HandlePointerEventL( aPointerEvent );
</expandArgument>
</expandMacro>
</templateGroup>
<templateGroup id="HandlePointerEventHandler" ifEvents="handlePointerEvent">
<template id="InvokeHandlePointerEventHandler" location="HANDLEPOINTEREVENTL_METHOD_BODY">
${event.handlerName}( aPointerEvent );
</template>
<expandMacro name="GenerateUserEventHandlerFunction"
FunctionLocationId="HANDLEPOINTEREVENT_EVENTHANDLER"
FunctionArgs="const TPointerEvent& aPointerEvent"
DeclLocation="CONTENT_CLASS_PROTECTED_USER_HANDLERS"
DefnLocation="CONTENT_MAIN_FILE">
</expandMacro>
</templateGroup>
<inline><![CDATA[
include("../srcgenLibrary.js");
if (!Engine.formMatches(form, ["RootAppUi"])) {
if (Engine.formMatches(form, ["AppUi", "AknView"])) {
// clear out any image stuff
resetImagePropertyState(instance);
}
if (!Engine.formMatches(form, ["RootAppUi"])) {
if (Engine.formMatches(form, [ "AknView", "AppUi" ])) {
// get default and container-specific contributions
// (the argument is a regular expression)
contribs.addAll(Engine.generateChildContributions(form+"|Container"))
} else {
// unknown form -- likely specific to a parent -- so get
// form-specific contributions
contribs.addAll(Engine.generateChildContributions(form))
}
}
if (Engine.formMatches(form, ["AppUi", "AknView"])) {
Engine.collateContributionsByPhase(contribs, ["Initialize", "PostInitialize"]);
// fix up the phases so they point to real locations
Engine.assignLocationsForPhase(contribs, "MainConstants", "CONTENT_HEADER_OWNED_CONSTANTS");
Engine.assignLocationsForPhase(contribs, "MainSystemIncludes", "CONTENT_MAIN_OWNED_SYSTEM_INCLUDES");
Engine.assignLocationsForPhase(contribs, "MainUserIncludes", "CONTENT_MAIN_OWNED_USER_INCLUDES");
Engine.assignLocationsForPhase(contribs, "Destroy", "DESTRUCTOR_BODY");
Engine.assignLocationsForPhase(contribs, "Construct", "CONSTRUCTOR_BODY");
Engine.assignLocationsForPhase(contribs, "Initialize", "INITIALIZECONTROLSL_METHOD");
Engine.assignLocationsForPhase(contribs, "PostInitialize", "INITIALIZECONTROLSL_METHOD");
Engine.assignLocationsForPhase(contribs, "PostActivateL", "CONSTRUCTL_METHOD_BODY");
Engine.assignLocationsForPhase(contribs, "LayoutControls", "LAYOUTCONTROLS_METHOD");
Engine.assignLocationsForPhase(contribs, "HeaderIncludes", "CONTENT_HEADER_OWNED_SYSTEM_INCLUDES");
Engine.assignLocationsForPhase(contribs, "ForwardDeclarations", "CONTENT_HEADER_OWNED_FORWARD_DECLARATIONS");
Engine.assignLocationsForPhase(contribs, "ClassTypeDeclarations", "CONTENT_CLASS_PUBLIC_OWNED_TYPES");
Engine.assignLocationsForPhase(contribs, "InstanceVariables", "CONTENT_CLASS_PRIVATE_OWNED_INSTANCE_VARIABLES");
Engine.assignLocationsForPhase(contribs, "ClassMethods", "CONTENT_CLASS_PRIVATE_OWNED_METHODS");
Engine.assignLocationsForPhase(contribs, "ClassSource", "CONTENT_MAIN_FILE");
Engine.assignLocationsForPhase(contribs, "ClassHeader", "CONTENT_HEADER_FILE");
Engine.assignLocationsForPhase(contribs, "BaseClassList", "CONTENT_CLASS_BASES");
Engine.assignLocationsForPhase(contribs, "OverriddenMethods", "CONTENT_CLASS_PROTECTED_OVERRIDDEN_METHODS");
Engine.assignLocationsForPhase(contribs, "UserHandlers", "CONTENT_CLASS_PROTECTED_USER_HANDLERS");
Engine.assignLocationsForPhase(contribs, "EventIncludes", "CONTENT_HEADER_EVENT_HANDLER_INCLUDES");
Engine.assignLocationsForPhase(contribs, "SizeChanged", "SIZECHANGED_METHOD_BODY");
// remove duplicate contributions where the location doesn't already have a filter
Engine.removeDuplicateContributionsForLocation(contribs, "CONTENT_HEADER_OWNED_FORWARD_DECLARATIONS");
Engine.removeDuplicateContributionsForLocation(contribs, "DESTRUCTOR_BODY");
}
}
]]> </inline>
<template phase="ForwardDeclarations"><![CDATA[
class CAknPreviewPopUpController;
class ${className};
]]> </template>
<template phase="MainSystemIncludes"><![CDATA[
#include <aknpreviewpopupcontroller.h>
#include <barsread.h>
#include <stringloader.h>
]]> </template>
<template phase="MainSystemIncludes"><![CDATA[
#include "${instanceName$title}.h"
]]> </template>
<inline scope="prototype">
function controllerInstance() {
return instanceMemberName + "Controller";
}
function contentInstance() {
return instanceMemberName + "Content";
}
</inline>
<template phase="Construct"><![CDATA[
${controllerInstance()} = NULL;
${contentInstance()} = NULL;
]]> </template>
<template phase="Destroy"><![CDATA[
delete ${controllerInstance()};
${controllerInstance()} = NULL;
delete ${contentInstance()};
${contentInstance()} = NULL;
]]> </template>
<template phase="InstanceVariables"><![CDATA[
CAknPreviewPopUpController* ${controllerInstance()};
${className}* ${contentInstance()};
]]> </template>
<inline>
function getStyleArgs(instance) {
var flags = "";
if (instance.properties.ELayoutDefault)
flags += "CAknPreviewPopUpController::ELayoutDefault";
if (instance.properties.ELayoutSubMenu) {
if (flags.length != 0)
flags += " |\n\t\t";
flags += "CAknPreviewPopUpController::ELayoutSubMenu";
}
if (instance.properties.EPermanentMode) {
if (flags.length != 0)
flags += " |\n\t\t";
flags += "CAknPreviewPopUpController::EPermanentMode";
}
if (instance.properties.EFixedMode) {
if (flags.length != 0)
flags += " |\n\t\t";
flags += "CAknPreviewPopUpController::EFixedMode";
}
if (instance.properties.EExcludeFrames) {
if (flags.length != 0)
flags += " |\n\t\t";
flags += "CAknPreviewPopUpController::EExcludeFrames";
}
return flags;
}
function getCommandObserver(instance) {
if (instance.parent.componentId == "com.nokia.sdt.series60.CAknView" ||
instance.parent.componentId == "com.nokia.sdt.series60.CAknAppUi")
return "this";
return "iCoeEnv->AppUi()";
}
</inline>
<inline><![CDATA[
var mycontrib = Engine.createContributionForPhase("Initialize")
var text = contentInstance() + " = " + className + "::NewL( " + getCommandObserver(instance) + " );\n";
var styleArgs = getStyleArgs(instance);
text += controllerInstance() + " = CAknPreviewPopUpController::NewL(\n"
if (styleArgs.length == 0 && !instance.properties.asynchronous)
text += "\t\t*" + contentInstance() + " );\n";
if (styleArgs.length > 0 && !instance.properties.asynchronous)
text += "\t\t*" + contentInstance() + ",\n\t\t" + styleArgs + " );\n";
if (styleArgs.length == 0 && instance.properties.asynchronous)
text += "\t\t*" + contentInstance() + ",\n\t\t*" + contentInstance() + " );\n";
if (styleArgs.length > 0 && instance.properties.asynchronous)
text += "\t\t*" + contentInstance() + ",\n\t\t*" + contentInstance() + ",\n\t\t" + styleArgs + " );\n";
text += contentInstance() + "->SetPopUpController( " + controllerInstance() + " );\n";
mycontrib.setText(text);
contribs.add(mycontrib);
]]> </inline>
<template phase="Initialize"><![CDATA[
<% if (instance.properties.headingText.length > 0) {
%> {
HBufC* headingText = StringLoader::LoadLC( ${Engine.getGeneratedResource(instance, "headingText").toUpperCase() } );
${controllerInstance()}->SetHeadingTextL( *headingText );
CleanupStack::PopAndDestroy( headingText );
}<% } %>
]]> </template>
<inline>
function getMicroSecs(aFloat) {
return (1000000.0 * aFloat).toFixed();
}
</inline>
<template phase="Initialize"><![CDATA[
<% if (instance.properties.showDelay != 1.0) {
%> {
TTimeIntervalMicroSeconds32 ms = ${getMicroSecs(instance.properties.showDelay)};
${controllerInstance()}->SetPopUpShowDelay( ms );
}<% } %>
]]> </template>
<template phase="Initialize"><![CDATA[
<% if (instance.properties.hideDelay != 3.0) {
%> {
TTimeIntervalMicroSeconds32 ms = ${getMicroSecs(instance.properties.hideDelay)};
${controllerInstance()}->SetPopUpHideDelay( ms );
}<% } %>
]]> </template>
<expandMacro name="GenerateMethod"
FunctionLocationId="SHOW_PREVIEW_POPUP_RECT_METHOD"
FunctionName="Show${instanceName$title}L"
FunctionArgs="const TRect& aHighlightRect, const TDesC* aOverrideHeadingText"
DeclPhase="ClassMethods"
DefnLocation="MAIN_FILE"
ClassName="${parentClassName}">
<expandArgument name="FunctionComment">
/**
* Show the preview pop-up for ${instanceName}.
* Sets the position of the preview pop-up so that it is aligned with the highlight rect.
* This is intented to be used in conjunction with lists and grids if the
* application wishes to implement a popup that follows lists/grids item highlight.
* If fixed mode is used then the value of the highlight rect has no effect.
* @param aHighlightRect Screen-relative rectangle used to calculate pop-up's position.
* @param aOverrideText optional override header text
*/
</expandArgument>
</expandMacro>
<template location="SHOW_PREVIEW_POPUP_RECT_METHOD">
if ( aOverrideHeadingText != NULL )
{
${controllerInstance()}->SetHeadingTextL( *aOverrideHeadingText );
}
${controllerInstance()}->SetPositionByHighlight( aHighlightRect );
${controllerInstance()}->ShowPopUp();
</template>
<expandMacro name="GenerateMethod"
FunctionLocationId="SHOW_PREVIEW_POPUP_POINT_METHOD"
FunctionName="Show${instanceName$title}L"
FunctionArgs="const TPoint& aPoint, const TDesC* aOverrideHeadingText"
DeclPhase="ClassMethods"
DefnLocation="MAIN_FILE"
ClassName="${parentClassName}">
<expandArgument name="FunctionComment">
/**
* Show the preview pop-up for ${instanceName}.
* Sets the position of preview popup left and down from the given point.
* If there is not enough space, the pop-up is opened up and left.
* If fixed mode is used then the value of the point has no effect.
* @param aPoint Popup's position.
* @param aOverrideText optional override header text
*/
</expandArgument>
</expandMacro>
<template location="SHOW_PREVIEW_POPUP_POINT_METHOD">
if ( aOverrideHeadingText != NULL )
{
${controllerInstance()}->SetHeadingTextL( *aOverrideHeadingText );
}
${controllerInstance()}->SetPosition( aPoint );
${controllerInstance()}->ShowPopUp();
</template>
<templateGroup id="GeneratePreviewPopupObserverEvents" ifEvents="previewPopUpShown previewPopUpHidden">
<template phase="EventIncludes"><![CDATA[
#include <aknpreviewpopupobserver.h>
]]> </template>
<template phase="BaseClassList">, MAknPreviewPopUpObserver</template>
<expandMacro name="GenerateMethodWithOwnedBody"
IsOwned="false"
FunctionLocationId="HANDLEPREVIEWPOPUPEVENTL_METHOD"
FunctionArgs="CAknPreviewPopUpController* aController, TPreviewPopUpEvent aEvent"
FunctionName="HandlePreviewPopUpEventL"
DeclPhase="ClassPublic"
DefnLocation="MAIN_FILE"
ClassName="${parentClassName}">
<expandArgument name="FunctionComment">
/**
* Handle preview pop-up events
*/
</expandArgument>
</expandMacro>
<template id="DispatchPreviewPopUpShown" location="HANDLEPREVIEWPOPUPEVENTL_METHOD_BODY"><![CDATA[<%
var event = instance.events["previewPopUpShown"];
if (event) { %>
if ( aEvent == MAknPreviewPopUpObserver::EPreviewPopUpShown &&
aController == ${controllerInstance()} )
{
${event.handlerName}( aController, aEvent );
return;
}
<%}%>
]]> </template>
<template id="DispatchPreviewPopUpHidden" location="HANDLEPREVIEWPOPUPEVENTL_METHOD_BODY"><![CDATA[<%
var event = instance.events["previewPopUpHidden"];
if (event) { %>
if ( aEvent == MAknPreviewPopUpObserver::EPreviewPopUpHidden &&
aController == ${controllerInstance()} )
{
${event.handlerName}( aController, aEvent );
return;
}
<%}%>
]]> </template>
<template phase="Initialize"><![CDATA[
${controllerInstance()}->AddObserverL( *this );
]]> </template>
</templateGroup>
<templateGroup id="GeneratePreviewPopupShownHandler" ifEvents="previewPopUpShown">
<expandMacro name="GenerateUserEventHandlerFunction"
FunctionLocationId="PREVIEWPOPUPSHOWN_EVENTHANDLER"
FunctionArgs="CAknPreviewPopUpController* aController, TPreviewPopUpEvent aEvent"
DeclPhase="UserHandlers"
DefnLocation="MAIN_FILE"
ClassName="${parentClassName}">
</expandMacro>
</templateGroup>
<templateGroup id="GeneratePreviewPopupHiddenHandler" ifEvents="previewPopUpHidden">
<expandMacro name="GenerateUserEventHandlerFunction"
FunctionLocationId="PREVIEWPOPUPHIDDEN_EVENTHANDLER"
FunctionArgs="CAknPreviewPopUpController* aController, TPreviewPopUpEvent aEvent"
DeclPhase="UserHandlers"
DefnLocation="MAIN_FILE"
ClassName="${parentClassName}">
</expandMacro>
</templateGroup>
<!-- BEGIN EVENT handleLongTapEvent -->
<templateGroup id="HandleLongTapEvent" ifEvents="handleLongTapEvent">
<template id="EventIncludes" location="CONTENT_HEADER_EVENT_HANDLER_INCLUDES"><![CDATA[
#include <AknLongTapDetector.h>
]]> </template>
<template id="EventInterface" location="CONTENT_CLASS_BASES">, MAknLongTapDetectorCallBack</template>
<template id="CallDetectorWithPointerEvent" location="HANDLEPOINTEREVENTL_METHOD_BODY"><![CDATA[
iLongTapDetector->PointerEventL( aPointerEvent );
]]> </template>
<expandMacro name="GenerateVirtualMethodOverrideForEventHandler"
IsOwned="false"
FunctionLocationId="HANDLELONGTAPEVENTL_METHOD"
FunctionArgs="const TPoint& aPenEventLocation, const TPoint& aPenEventScreenLocation"
FunctionName="HandleLongTapEventL"
DeclLocation="CONTENT_CLASS_PROTECTED_OVERRIDDEN_METHODS"
DefnLocation="CONTENT_MAIN_FILE">
<expandArgument name="FunctionComment">
/**
* Implement the HandleLongTapEventL method of MAknLongTapDetectorCallBack
*/
</expandArgument>
</expandMacro>
<expandMacro name="GenerateUserEventHandlerFunction"
FunctionLocationId="HANDLELONGTAP_EVENTHANDLER"
FunctionArgs="const TPoint& aPenEventLocation, const TPoint& aPenEventScreenLocation"
DeclLocation="CONTENT_CLASS_PROTECTED_USER_HANDLERS"
DefnLocation="CONTENT_MAIN_FILE">
</expandMacro>
<template id="DeclareDetectorMember" location="CONTENT_CLASS_PRIVATE_OWNED_INSTANCE_VARIABLES">
CAknLongTapDetector* iLongTapDetector;
</template>
<template id="MainSystemIncludes" location="CONTENT_MAIN_OWNED_SYSTEM_INCLUDES"><![CDATA[
#include <AknLongTapDetector.h>
]]> </template>
<template id="ClearDetectorMember" location="CONSTRUCTOR_BODY">
iLongTapDetector = NULL;
</template>
<template id="DestroyDetectorMember" location="DESTRUCTOR_BODY">
delete iLongTapDetector;
iLongTapDetector = NULL;
</template>
<template id="ConstructDetectorMember" location="CONSTRUCTL_METHOD_BODY">
iLongTapDetector = CAknLongTapDetector::NewL( this );
</template>
</templateGroup>
<!-- END EVENT handleLongTapEvent -->
</sourceGen>
</component>
</componentDefinition>