2007-06-21 10:49:16 +00:00
< !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
2009-04-28 16:04:39 +00:00
< html lang = "en" >
< head >
2007-06-21 10:49:16 +00:00
< link href = "_stock/sysdoc.css" type = "text/css" rel = "stylesheet" media = "screen" >
< link href = "_stock/sysdoc.css" type = "text/css" rel = "stylesheet" media = "print" >
< meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" >
2009-05-07 15:28:26 +00:00
< title > Example template in How to extend the user interface using templates< / title >
2007-06-21 10:49:16 +00:00
< style type = "text/css" media = "screen" >
.ButtonBox { background-image: url(_stock/gradient.jpg); }
< / style >
< / head >
< body >
< table width = "100%" border = "0" cellspacing = "0" cellpadding = "0" > < tbody > < tr >
< / tr > < tr > < td class = "DocSetBox" width = "25%" >
< p > < / p >
< / td >
< td class = "ButtonBox" align = "right" width = "40%" >
< p > < A href = "../_index/index.html" > < / a >
2009-05-07 15:28:26 +00:00
< A href = "Howtoregistertemplates.html" > < IMG height = 22 alt = "[Previous]" src = "_stock/btn_prev_wt.gif" width = 85 border = 0 > < / a > < A href = "index.html" > < / a > < / p >
2007-06-21 10:49:16 +00:00
< / td >
< / tr > < / tbody > < / table >
< hr noshade size = "1" >
2009-05-07 15:28:26 +00:00
< p class = "breadcrumbNav" > < span class = "separator" > » < / span >
< A href = "index.html" > How to extend the user interface using templates< / a > < span class = "separator" > » < / span > Example template< / p >
2007-06-21 10:49:16 +00:00
< hr noshade size = "1" >
< div class = "AuthoredContent" >
< / div > < div class = "Head1" >
< h1 > Example template< / h1 >
< / div > < div class = "Bodytext" >
< p >
The following is an example template to create a simple Symbian OS
< code class = "filename" > EXE< / code > project:
< / p >
2008-02-22 17:34:43 +00:00
< p class = "CodeBlock" > < code > < ?xml version="1.0" encoding="ISO-8859-1"?> < br >
< template type="ProjTempl" version="1.0" supplier="Symbian" revision="1.0" author="Bala Torati"< br >
id="EXE" label="Simple EXE" description="A skeletal Symbian OS EXE project. Creates a folder for sources and another for include."< br >
help="help.html"> < br >
< br >
< property-group id="basics" label="Basic Settings" description="Basic properties of a project" type="PAGES-ONLY" help="help.html"> < br >
< br >
< property id="uid2"< br >
label="UID 2"< br >
description="UID 2"< br >
default="0x00000000"< br >
type="input"< br >
pattern="0x[0-9a-fA-F]{8}"< br >
hidden="false"< br >
mandatory="true"< br >
persist="true"/> < br >
< br >
< property id="uid3"< br >
label="UID 3"< br >
description="UID 3"< br >
default="0x00000000"< br >
type="input"< br >
pattern="0x[0-9a-fA-F]{8}"< br >
hidden="false"< br >
mandatory="false"< br >
persist="true"/> < br >
< br >
< property id="vid"< br >
label="Vendor ID"< br >
description="Vendor ID"< br >
default="0x00000000"< br >
type="input"< br >
pattern="0x[0-9a-fA-F]{8}"< br >
hidden="false"< br >
mandatory="true"< br >
persist="true"/> < br >
< br >
< property id="author"< br >
label="Author"< br >
description="Name of the author"< br >
type="input"< br >
pattern=".*"< br >
default=""< br >
hidden="false"< br >
persist="true"/> < br >
< br >
< property id="copyright"< br >
label="Copyright notice"< br >
description="Your copyright notice"< br >
type="input"< br >
pattern=".*"< br >
default="Your copyright notice"< br >
hidden="false"< br >
persist="true"/> < br >
< br >
< property id="targetType"< br >
label="Target Type"< br >
description="Select the target type"< br >
type="select"< br >
2008-03-18 15:26:50 +00:00
default="app"< br >
2008-02-22 17:34:43 +00:00
hidden="false"< br >
mandatory="true"< br >
persist="true"> < br >
2008-03-18 15:26:50 +00:00
< item label="APP" value="app"/> < br >
< item label="LIB" value="lib"/> < br >
< item label="DLL" value="dll"/> < br >
< item label="EXE" value="exe"/> < br >
< item label="EXEDLL" value="exedll"/> < br >
2008-02-22 17:34:43 +00:00
< /property> < br >
< /property-group> < br >
< br >
< property-group id="directories" label="Project Directories" description="Generated files will be copied to the specified directories under the project root directory" type="PAGES-ONLY" help="help.html"> < br >
< property id="incDir"< br >
label="Include"< br >
description="Directory for C++ header files"< br >
type="input"< br >
default="inc"< br >
pattern="[a-zA-Z0-9]+"< br >
mandatory="true"< br >
persist="true"/> < br >
< br >
< property id="sourceDir"< br >
label="Source"< br >
description="Directory for C++ source files"< br >
type="input"< br >
default="src"< br >
pattern="[a-zA-Z0-9]+"< br >
mandatory="true"< br >
persist="true"/> < br >
< /property-group> < br >
< br >
< process type="org.eclipse.cdt.managedbuilder.core.NewManagedProject"> < br >
< simple name="name" value="$(projectName)"/> < br >
< simple name="targetType" value="$(targetType)"/> < br >
< simple name="uid2" value="$(uid2)"/> < br >
< simple name="uid3" value="$(uid3)"/> < br >
< simple name="vid" value="$(vid)"/> < br >
< /process> < br >
< br >
< process type="org.eclipse.cdt.core.CreateSourceFolder"> < br >
< simple name="projectName" value="$(projectName)"/> < br >
< simple name="path" value="$(sourceDir)"/> < br >
< /process> < br >
< br >
< process type="org.eclipse.cdt.managedbuilder.core.CreateIncludeFolder"> < br >
< simple name="projectName" value="$(projectName)"/> < br >
< simple name="path" value="$(incDir)"/> < br >
< /process> < br >
< br >
< process type="org.eclipse.cdt.core.AddFiles"> < br >
< simple name="projectName" value="$(projectName)"/> < br >
< complex-array name="files"> < br >
< element> < br >
< simple name="source" value="inc/Basename.h"/> < br >
< simple name="target" value="$(incDir)/$(baseName).h"/> < br >
< simple name="replaceable" value="true"/> < br >
< /element> < br >
< element> < br >
< simple name="source" value="src/Basename.cpp"/> < br >
< simple name="target" value="$(sourceDir)/$(baseName).cpp"/> < br >
< simple name="replaceable" value="true"/> < br >
< /element> < br >
< /complex-array> < br >
< /process> < br >
< br >
< process type="org.eclipse.cdt.managedbuilder.core.AppendToMBSStringListOptionValues"> < br >
< simple
name="projectName" value= "$(projectName)"/> < br >
< complex-array name="resourcePaths"> < br >
< element> < br >
< simple name="id" value=".*linker\.libraries\.libraries.*" /> < br >
< simple-array name="values"> < br >
< element value="euser.lib" /> < br >
< /simple-array> < br >
< simple name="path" value="" /> < br >
< /element> < br >
< /complex-array> < br >
< /process> < br >
< /template> < / code > < / p >
2007-06-21 10:49:16 +00:00
< p >
The above given template copies the following source (< code class = "filename" > .cpp< / code > )
and header (< code class = "filename" > .h< / code > ) files in the < code > src< / code > and < code > inc< / code >
folders respectively. These files uses a set of macros to get the values
specified by the developer for file name, author name, copyright etc.
< / p >
2008-02-22 17:34:43 +00:00
< p class = "CodeBlock" > < code > /*< br >
============================================================================< br >
Name : $(baseName).cpp< br >
Author : $(author)< br >
Version :< br >
Copyright : $(copyright)< br >
Description : Exe source file< br >
============================================================================< br >
*/< br >
< br >
// Include Files < br >
< br >
#include "$(baseName).h"< br >
#include < e32base.h> < br >
#include < e32std.h> < br >
#include < e32cons.h> // Console< br >
< br >
< br >
// Constants< br >
< br >
_LIT(KTextConsoleTitle, "Console");< br >
_LIT(KTextFailed, " failed, leave code = %d");< br >
_LIT(KTextPressAnyKey, " [press any key]\n");< br >
< br >
< br >
// Global Variables< br >
< br >
LOCAL_D CConsoleBase* console; // write all messages to this< br >
< br >
< br >
// Local Functions< br >
< br >
LOCAL_C void MainL(const TDesC& aArgs)< br >
{< br >
//< br >
// add your program code here, example code below< br >
//< br >
console-> Write(_L("Hello, world!\n"));< br >
console-> Printf(_L("Command line args: \"%S\"\n"), & aArgs);< br >
}< br >
< br >
< br >
LOCAL_C void DoStartL()< br >
{< br >
// Create active scheduler (to run active objects)< br >
CActiveScheduler* scheduler = new (ELeave) CActiveScheduler();< br >
CleanupStack::PushL(scheduler);< br >
CActiveScheduler::Install(scheduler);< br >
< br >
// Call main function with command line< br >
TBuf< 256> cmdLine;< br >
RProcess().CommandLine(cmdLine);< br >
MainL(cmdLine);< br >
< br >
// Delete active scheduler< br >
CleanupStack::PopAndDestroy(scheduler);< br >
}< br >
< br >
< br >
// Global Functions< br >
< br >
GLDEF_C TInt E32Main()< br >
{< br >
// Create cleanup stack< br >
__UHEAP_MARK;< br >
CTrapCleanup* cleanup = CTrapCleanup::New();< br >
< br >
// Create output console< br >
TRAPD(createError, console = Console::NewL(KTextConsoleTitle, TSize(KConsFullScreen,KConsFullScreen)));< br >
if (createError)< br >
return createError;< br >
< br >
// Run application code inside TRAP harness, wait keypress when terminated< br >
TRAPD(mainError, DoStartL());< br >
if (mainError)< br >
console-> Printf(KTextFailed, mainError);< br >
console-> Printf(KTextPressAnyKey);< br >
console-> Getch();< br >
< br >
delete console;< br >
delete cleanup;< br >
__UHEAP_MARKEND;< br >
return KErrNone;< br >
}< / code > < / p >
< p class = "CodeBlock" > < code > /*< br >
============================================================================< br >
Name : $(baseName).h< br >
Author : $(author)< br >
Version :< br >
Copyright : $(copyright)< br >
Description : Exe header file< br >
============================================================================< br >
*/< br >
< br >
#ifndef __$(baseName)_H__< br >
#define __$(baseName)_H__< br >
< br >
< br >
// Include Files< br >
< br >
#include < e32base.h> < br >
< br >
< br >
// Function Prototypes< br >
< br >
GLDEF_C TInt E32Main();< br >
< br >
< br >
#endif // __$(baseName)_H__< / code > < / p >
2007-06-21 10:49:16 +00:00
< p >
When the developer chooses the above template in the New Project wizard,
the following wizard pages are generated:
< / p >
< div class = "Figure" >
< p class = "Image" > < a name = "Basic Settings" > < IMG alt = "Basic Settings" src = "_stock/basicsettings.gif" border = 0 > < / a > < / p >
< p class = "Caption" >
Basic Settings
< / p >
< / div >
< div class = "Figure" >
< p class = "Image" > < a name = "Project Directories" > < IMG alt = "Project Directories" src = "_stock/projectdirectories.gif" border = 0 > < / a > < / p >
< p class = "Caption" >
Project Directories
< / p >
< / div >
< p >
The input fields listed in the above given pages are as per the
definitions given in the template. In the template, the
< code > property-group< / code > element with the ID "basics" defines all the input
fields required for the < code class = "ProgramOutput" > Basic Settings< / code > page. While the
< code class = "ProgramOutput" > property-group< / code > element with the ID "directories" defines all
the input fields required for the < code class = "ProgramOutput" > Project Directories< / code > page.
< / p >
< p >
The template will create a Symbian OS < code class = "filename" > EXE< / code > project in the
Eclipse workspace with all the required resources.
< / p >
< p >
The following < code class = "ProgramOutput" > C/C++ Projects< / code > view shows the resources
created by the New Project wizard for the above given template:
< / p >
< div class = "Figure" >
< p class = "Image" > < a name = "Explorer view" > < IMG alt = "Explorer view" src = "_stock/explorerview.gif" border = 0 > < / a > < / p >
< p class = "Caption" >
Explorer view
< / p >
< / div >
< / div > < div class = "Footer" >
< hr noshade size = "1" >
< table cellpadding = "0" cellspacing = "0" border = "0" width = "100%" >
< tr >
< td class = "ButtonBottomBox" align = "right" height = "12" width = "67%" >
< p >
2009-05-07 15:28:26 +00:00
< A href = "Howtoregistertemplates.html" > < IMG height = 22 alt = "[Previous]" src = "_stock/btn_prev.gif" width = 85 border = 0 > < / a >
< A href = "#_top" > < IMG height = 22 alt = "[Top]" src = "_stock/btn_top.gif" width = 51 align = bottom border = 0 > < / a >
2007-06-21 10:49:16 +00:00
< A href = "index.html" > < / a >
< / p >
< / td >
< / tr >
< / table >
< / div >
< / body >
< / html >