# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1264511723 -7200 # Node ID 1f04cf54edd83ffb252bf6e561aec8dcbff880b0 Revision: 201004 diff -r 000000000000 -r 1f04cf54edd8 csxhelp/AiwHelpProvider/group/AiwHelpProvider.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/AiwHelpProvider/group/AiwHelpProvider.mmp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,63 @@ +/* +* Copyright (c) 2002 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: Project specfication file. +* Write all source and resource files, all using libraries, +* all bitmaps. +* +*/ + + +#include +#include + +TARGET AiwHelpProvider.dll +TARGETTYPE PLUGIN + +// MAGIC Dll recognition UID followed by the unique UID for this dll +UID 0x10009D8D 0x10207464 +VENDORID VID_DEFAULT + +CAPABILITY CAP_ECOM_PLUGIN + +USERINCLUDE ../inc +APP_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE /epoc32/include/ECom + +SOURCEPATH ../src +SOURCE AiwHelpProvider.cpp + +// Published to /resource/plugins +START RESOURCE 10207464.rss +LANGUAGE_IDS +TARGET AiwHelpProvider.rsc +END + +// Published to /resource +START RESOURCE AiwHelpProvider.rss +HEADER +TARGET AiwHelpProviderPlugin.rsc +TARGETPATH APP_RESOURCE_DIR +LANGUAGE_IDS +END + +LIBRARY euser.lib +LIBRARY fbscli.lib +LIBRARY gdi.lib +LIBRARY bafl.lib +LIBRARY cone.lib +LIBRARY estlib.lib +LIBRARY ServiceHandler.lib +LIBRARY eikcore.lib +LIBRARY hlplch.lib +LIBRARY ws32.lib diff -r 000000000000 -r 1f04cf54edd8 csxhelp/AiwHelpProvider/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/AiwHelpProvider/group/bld.inf Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,27 @@ +/* +* Copyright (c) 2002 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: +* The build information +* +* +*/ + +#include + +PRJ_EXPORTS +// export localised loc file +../loc/aiwxhelpprovider.loc APP_LAYER_LOC_EXPORT_PATH(aiwxhelpprovider.loc) + +PRJ_MMPFILES +AiwHelpProvider.mmp diff -r 000000000000 -r 1f04cf54edd8 csxhelp/AiwHelpProvider/inc/AiwHelpProvider.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/AiwHelpProvider/inc/AiwHelpProvider.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,59 @@ +/* +* Copyright (c) 2002 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: header file. +* +*/ + + + +#ifndef _AIW_HELP_PROVIDER_H +#define _AIW_HELP_PROVIDER_H + +#include + +class CAiwHelpProvider : public CAiwServiceIfMenu + { + public: + static CAiwHelpProvider* NewL(); + ~CAiwHelpProvider(); + + public: + virtual void InitialiseL( + MAiwNotifyCallback& aFrameworkCallback, + const RCriteriaArray& aInterest); + + virtual void HandleServiceCmdL( + const TInt& aCmdId, + const CAiwGenericParamList& aInParamList, + CAiwGenericParamList& aOutParamList, + TUint aCmdOptions = 0, + const MAiwNotifyCallback* aCallback = NULL); + + virtual void InitializeMenuPaneL( + CAiwMenuPane& aMenuPane, + TInt aIndex, + TInt aCascadeId, + const CAiwGenericParamList& aInParamList); + + virtual void HandleMenuCmdL( + TInt aMenuCmdId, + const CAiwGenericParamList& aInParamList, + CAiwGenericParamList& aOutParamList, + TUint aCmdOptions = 0, + const MAiwNotifyCallback* aCallback = NULL); + + private: + CAiwHelpProvider(); + }; +#endif diff -r 000000000000 -r 1f04cf54edd8 csxhelp/AiwHelpProvider/inc/AiwHelpProvider.rh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/AiwHelpProvider/inc/AiwHelpProvider.rh Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,28 @@ +/* +* Copyright (c) 2002 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: resource header file +* Declare all the enums used here in this file. +* +*/ + + +#ifndef _AIW_PROVIDER_EXAMPLE1_RH +#define _AIW_PROVIDER_EXAMPLE1_RH + +enum + { + EAiwShowHelpCmd=1 + }; + +#endif diff -r 000000000000 -r 1f04cf54edd8 csxhelp/AiwHelpProvider/loc/aiwxhelpprovider.loc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/AiwHelpProvider/loc/aiwxhelpprovider.loc Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,29 @@ +/* +* Copyright (c) 2002 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: +* This is a localisation file for AiwHelpProvider +* A .loc file is the one and only place where the logical strings +* to be localised are defined. +* +* +*/ + + +// LOCALISATION STRINGS + +//d: help application name in selection grid window +//l: list_single_pane_t1_cp2 +// +#define qtn_options_help_sm_help "Show Help" + diff -r 000000000000 -r 1f04cf54edd8 csxhelp/AiwHelpProvider/src/10207464.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/AiwHelpProvider/src/10207464.rss Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,49 @@ +/* +* Copyright (c) 2002 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: resource file +* Write all resources used here. +* +*/ + + + +#include +#include "RegistryInfoV2.rh" +#include "AiwHelpProvider.rh" +#include + +RESOURCE REGISTRY_INFO theInfo + { + resource_format_version = RESOURCE_FORMAT_VERSION_2; + dll_uid = 0x10207464; // dll uid + interfaces = + { + INTERFACE_INFO + { + // Menu service class (offers menu based services) + interface_uid = 0x101F8652; // KAiwClassMenu + implementations = + { + IMPLEMENTATION_INFO + { + implementation_uid = 0x10207465;// The implementation uid + version_no = 1; + display_name = "AIW Help Provider"; + default_data ="*"; + opaque_data =KAiwCmdHelpStr; // from AiwCommon.hrh + } + }; + } + }; + } diff -r 000000000000 -r 1f04cf54edd8 csxhelp/AiwHelpProvider/src/AiwHelpProvider.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/AiwHelpProvider/src/AiwHelpProvider.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,236 @@ +/* +* Copyright (c) 2002 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: source file. +* Write all source code here, all the implementations +* +*/ + + +#include +#include "AiwHelpProvider.h" +#include +#include +#include +#include +#include +#include "AiwHelpProvider.rh" +#include +#include +#include +#include +#include + + +_LIT(KResFileName, "\\resource\\apps\\AiwHelpProviderPlugin.rsc"); + +#define KImplementationId 0x10207465 + + + +/****************************************************************** +=================================================================== + NewL of the Provider +=================================================================== +*******************************************************************/ +CAiwHelpProvider* CAiwHelpProvider::NewL() + { + return new (ELeave) CAiwHelpProvider(); + } + + + +/****************************************************************** +=================================================================== + Constructor of the Provider +=================================================================== +*******************************************************************/ +CAiwHelpProvider::CAiwHelpProvider() + { + } + + + +/****************************************************************** +=================================================================== + Destructor of the Provider +=================================================================== +*******************************************************************/ +CAiwHelpProvider::~CAiwHelpProvider() + { + } + + + +/** + * Called by the Handler framework to initialise provider with + * necessary information from Handler. + * @param aFrameworkCallback Framework provided callback for + * provider to send events to framework + * @param aInterest List of criteria items which invoked the provider. + * @exception Symbian OS error code + */ +void CAiwHelpProvider::InitialiseL(MAiwNotifyCallback& /*aFrameworkCallback*/, + const RCriteriaArray& /*aInterest*/) + { + + } + + +/** + * Executes generic service commands included in criteria. + * @param aCmdId Command to be executed + * @param aInParamList Input parameters, can be an empty list + * @param aOutParamList Output parameters, can be an empty list + * @param aCmdOptions Options for the command, see KAiwOpt* constants in AiwCommon.hrh. + * @param aCallback callback for asynchronous command handling, parameter checking, etc. + * @see enum TAiwServiceCmdOptions in AiwCommon.hrh + * @exception KErrArgument if callback is missing when required. + * @exception KErrNotSupported if no provider support service + */ +void CAiwHelpProvider::HandleServiceCmdL(const TInt& /*aCmdId*/, + const CAiwGenericParamList& /*aInParamList*/, + CAiwGenericParamList& /*aOutParamList*/, + TUint aCmdOptions, + const MAiwNotifyCallback* /*aCallback*/) + { + // Cancel bit must always be checked. + if(aCmdOptions & KAiwOptCancel) + { + return; + } + } +/** + * Initialises menu pane by adding provider specific menu items. + * The AIW Framework gives the parameters to be used in addition. + * @param aMenuPane Menu pane handle + * @param aIndex position of item where to add menu items. + * @param aCascadeId ID of cascade menu item. + * @param aInParamList input parameter list for provider's parameters checking + */ + +void CAiwHelpProvider::InitializeMenuPaneL(CAiwMenuPane& aMenuPane, + TInt aIndex, + TInt /*aCascadeId*/, + const CAiwGenericParamList& /*aInParamList*/) + { + TFileName resFile(KResFileName); + TFileName dllName; + Dll::FileName(dllName); + TBuf<2> drive = dllName.Left(2); + resFile.Insert(0, drive); + aMenuPane.AddMenuItemsL(resFile, R_AIWHELPPROVIDER_MENU, KAiwCmdHelp, aIndex); + } + +/** + * Handle a menu command invoked by the Handler. + * @param aMenuCmdId Command ID for the menu command, + * defined by the provider when adding the menu commands. + * @param aInParamList Input parameters, could be empty list + * @param aOutParamList Output parameters, could be empty list + * @param aCmdOptions Options for the command, see KAiwCmdOpt* constants. + * @param aCallback callback if asynchronous command handling is wanted by consumer. + * The provider may or may not support this, leaves with KErrNotSupported, it not. + */ +void CAiwHelpProvider::HandleMenuCmdL(TInt aMenuCmdId, + const CAiwGenericParamList& aInParamList, + CAiwGenericParamList& /*aOutParamList*/, + TUint aCmdOptions, + const MAiwNotifyCallback* /*aCallback*/) + { + // Cancel bit must always be checked. + if(aCmdOptions & KAiwOptCancel) + { + return; + } + + switch (aMenuCmdId) + { + case EAiwShowHelpCmd: + case EAknCmdHelp: + { + TCoeHelpContext helpContext; + TInt index; + + // Get the UID of the Help context i.e. the UID of the CS Help file containing + // the topic information. + + index = 0; + const TAiwGenericParam* uidParam = aInParamList.FindFirst(index, EGenericParamHelpItem, + EVariantTypeTUid); + + if(index >= 0) + { + // Get the data. + const TAiwVariant& val = uidParam->Value(); + helpContext.iMajor = val.AsTUid(); + } + else + { + // UID param not found. Error handling could be added here. + } + + // Get the context of Help i.e. the name of the help context. This is the literal + // descriptor generated from a context string by the CSHelp compiler. + + index = 0; + const TAiwGenericParam* contextParam = aInParamList.FindFirst(index, EGenericParamHelpItem, + EVariantTypeDesC); + + if(index >= 0) + { + // Get the data. + const TAiwVariant& val = contextParam->Value(); + helpContext.iContext = val.AsDes(); + } + else + { + // Context param not found. Error handling could be added here. + } + + CArrayFix* contextList = new (ELeave) CArrayFixFlat(1); + contextList->AppendL(helpContext); + + //Get the Window server session + RWsSession wsSession; + User::LeaveIfError(wsSession.Connect()); + CleanupClosePushL(wsSession); + HlpLauncher::LaunchHelpApplicationL(wsSession,contextList); + CleanupStack::PopAndDestroy(); + break; + } + default: + break; + } + } + +// +// Rest of the file is for ECom initialization. +// + +// Map the interface UIDs to implementation factory functions +const TImplementationProxy ImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY(KImplementationId, CAiwHelpProvider::NewL) + }; + +// --------------------------------------------------------- +// Exported proxy for instantiation method resolution +// --------------------------------------------------------- +// +EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) + { + aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); + return ImplementationTable; + } + diff -r 000000000000 -r 1f04cf54edd8 csxhelp/AiwHelpProvider/src/AiwHelpProvider.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/AiwHelpProvider/src/AiwHelpProvider.rss Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,36 @@ +/* +* Copyright (c) 2002 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: resource file +* Write the menu resources here. +* +*/ + + + +#include +#include "RegistryInfoV2.rh" +#include "AiwHelpProvider.rh" +#include +#include +#include + +RESOURCE MENU_PANE r_aiwhelpprovider_menu + { + items = + { + MENU_ITEM { command = AIW_SUBMENU_TITLE; txt = qtn_options_help; }, + MENU_ITEM { command = EAiwShowHelpCmd; txt = qtn_options_help;extratxt = qtn_options_help_sm_help; } + + }; + } diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/inc/CSXHContextTopic.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/inc/CSXHContextTopic.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,78 @@ +/* +* 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 "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: CCSXHContextTopic class declaration +* +*/ + + +#ifndef INC_CSXHCONTEXTTOPIC_H_HEADER_INCLUDED_BC050AFE +#define INC_CSXHCONTEXTTOPIC_H_HEADER_INCLUDED_BC050AFE + +#include "CSXHHelpContentBase.h" + +class CCSXHHelpDataBase; +/** +* @class CCSXHContextTopic +* This class is used for Context Sensitivity +*/ +class CCSXHContextTopic : public CCSXHHelpContentBase + { + public: +/** +* @function NewL +* @since S60 3.2 +* Construct a CCSXHContextTopic +* and return a pointer to the created object +* @param aToc2 - a toc2 class pointer type casted to database +* @return a CCSXHContextTopic Pointer +*/ + static CCSXHContextTopic* NewL(CCSXHHelpContentBase* aToc2); +/** + * @function ~CCSXHContextTopic + * @since S60 3.2 + * Destroy the object and release all memory objects + */ + ~CCSXHContextTopic(); +/** +* @function GetViewID +* @since S60 3.2 +* Get ViewId to activate the View +* @return View Id +*/ + TUid GetViewID() const; +/** +* @function GetTopic +* @since S60 3.2 +* Get the Object HTML / Legacy type cast to Database +* @return View Id +*/ + IMPORT_C CCSXHHelpContentBase* GetTopic(); + + protected: +/** +* @function CCSXHContextTopic +* @since S60 3.2 +* Construct a CCSXHContextTopic +* @param aToc2object - a toc2 class pointer type casted to database +*/ + CCSXHContextTopic(CCSXHHelpContentBase *aToc2object); + + protected: + CCSXHHelpContentBase *iToc2; + + }; + + + +#endif /* INC_CSXHCONTEXTTOPIC_H_HEADER_INCLUDED_BC050AFE */ diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/inc/CSXHGenericTOC1.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/inc/CSXHGenericTOC1.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,123 @@ +/* +* 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 "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: CCSXHGenericTOC1 class declaration +* +*/ + + +#ifndef INC_CSXHGENERICTOC1_H_HEADER_INCLUDED_BC050AFE +#define INC_CSXHGENERICTOC1_H_HEADER_INCLUDED_BC050AFE + +#include "CSXHHelpContentBase.h" +#include + + +class CCSXHHelpDataBase; +/** +* @class CCSXHGenericTOC1 +* This class has the information of TOC1 +*/ +class CCSXHGenericTOC1 : public CCSXHHelpContentBase + { + public: +/** + * @function ~CCSXHGenericTOC1 + * @since S60 3.2 + * Destroy the object and release all memory objects + */ + ~CCSXHGenericTOC1(); +/** + * @function FillChildDataL + * @since S60 3.2 + * Fill the array + * @param aArray - A pointer to a Descriptor Array + */ + IMPORT_C virtual void FillChildDataL(CDesCArray* aArray); +/** + * @function GetChildL + * @since S60 3.2 + * Fill the array + * @param aName - toc1 Name + * @return pointer to toc2 type casted to database class + */ + IMPORT_C virtual CCSXHHelpContentBase* GetChildL(const TDesC& aName); + +/** + * @function InsertChild + * @since S60 3.2 + * Insert toc2 objects + * @param atoc2 - toc2 objects + * @param aDeleteObject - boolean, default True + * @return ETrue Successful, EFalse otherwise + */ + TBool InsertChild(CCSXHHelpContentBase* atoc2,TBool aDeleteObject = ETrue); + +/** + * @function ResetChildList + * @since S60 3.2 + * clear Array, delete the objects + * @return ETrue Successful, EFalse otherwise + */ + virtual void ResetChildList(); + + + protected: +/** +* @function CCSXHGenericTOC1 +* @since S60 3.2 +* Construct a CCSXHGenericTOC1 +* @param aName - TOC1 Name +*/ + CCSXHGenericTOC1(const TDesC& aName); + +/** +* @function InitChildList +* @since S60 3.2 +* Allocate the Memory for Array +*/ + virtual void InitChildList(); +/** +* @function CopyChildListL +* @since S60 3.2 +* Copy the content to Descriptor Array +* @param aArray - Descriptor Array +*/ + virtual void CopyChildListL(CDesCArray* aArray); + +/** +* @function ConstructChildList +* @since S60 3.2 +* Fill the toc2 objects in the array +* calls ConstructChildListL internally +* @return ETrue on Success, EFalse otherwise +*/ + TBool ConstructChildList(); + + private: +/** +* @function ConstructChildListL +* @since S60 3.2 +* Fill the toc2 objects in the array +*/ + void ConstructChildListL(); + + protected: + + RPointerArray *iChildList; + + }; + + + +#endif /* INC_CSXHGENERICTOC1_H_HEADER_INCLUDED_BC050AFE */ diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/inc/CSXHGenericTOC2.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/inc/CSXHGenericTOC2.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,61 @@ +/* +* 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 "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: CCSXHGenericTOC2 class declaration +* +*/ + +#ifndef INC_CSXHGENERICTOC2_H_HEADER_INCLUDED_BC05356D +#define INC_CSXHGENERICTOC2_H_HEADER_INCLUDED_BC05356D + +#include "CSXHHelpContentBase.h" + +class CCSXHGenericTOC1; +/** +* @class CCSXHGenericTOC2 +* This class has the information of TOC2 +*/ +class CCSXHGenericTOC2 : public CCSXHHelpContentBase + { + public: +/** + * @function GetParent + * @since S60 3.2 + * Get the Parent object + * @return pointer to toc1 class object + */ + IMPORT_C CCSXHGenericTOC1* GetParent(); +/** + * @function GetTopicContentL + * @since S60 3.2 + * Get topic to display + * @return pointer to Buffer + */ + virtual TAny* GetTopicContentL() = 0; + + protected: +/** +* @function CCSXHGenericTOC2 +* @since S60 3.2 +* Construct a CCSXHGenericTOC2 +* @param aParent - TOC1 object +* aName - toc2 Name +*/ + CCSXHGenericTOC2(CCSXHGenericTOC1* aParent, const TDesC& aName); + CCSXHGenericTOC1* iParent; + + }; + + + +#endif /* INC_CSXHGENERICTOC2_H_HEADER_INCLUDED_BC05356D */ diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/inc/CSXHHTMLContentParser.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/inc/CSXHHTMLContentParser.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,338 @@ +/* +* 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 "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: CCSXHHTMLContentParser class declaration +* +*/ + + +#ifndef __CCSXHHTMLCONTENTPARSER_H__ +#define __CCSXHHTMLCONTENTPARSER_H__ + +#include "CSXHGenericTOC1.h" +#include +#include +#include + + +class TAppUid; +class CSenXmlReader; +class CCSXHXMLParseHandler; +class CCSXHHtmlTOC1; +class CCSXHHelpDataBase; +class CCSXHKywdTOC1; +class CCoeEnv; +class CCSXHHelpContentBase; +class CCSXHGenericTOC2; +class MSenContentHandlerClient; +class CCSXHXMLParseHandler_Kywd; +class CCSXHRuntimeIndexing; +/** +* CCSXHHTMLContentParser class. +* This class is used to parse XML files & generate Html data +* @lib euser.lib SenXml.lib XMLFRAMEWORK.lib ezip.lib HLPMODEL.LIB +* @since 3.2 +*/ +class CCSXHHTMLContentParser : public CBase +{ + public: +/** +* @function NewL +* @since S60 3.2 +* Construct a CCSXHHTMLContentParser +* and return a pointer to the created object +* @param aCoeEnv - Control Environment +* @return a CCSXHHTMLContentParser Pointer +*/ + static CCSXHHTMLContentParser* NewL(CCoeEnv* aCoeEnv); +/** +* @function NewLC +* @since S60 3.2 +* Construct a CCSXHLegacyContentParser +* and return a pointer to the created object using two phase construction +* @param aCoeEnv - Control Environment +* @return a CCSXHLegacyContentParser Pointer +*/ + static CCSXHHTMLContentParser* NewLC(CCoeEnv *aCoeEnv); +/** +* @function GenerateTOC1ListL +* @since S60 3.2 +* Generate Html TOC1 Objects +* @param aDataBase - Database class pointer +*/ void GenerateTOC1ListL(CCSXHHelpDataBase* aDataBase); +/** +* @function GenerateTOC2ListL +* @since S60 3.2 +* Generate Html TOC2 Objects +* @param atoc1 - generic toc1 class pointer +* aArray - Database class pointer's array pointer +*/ + void GenerateTOC2ListL(CCSXHGenericTOC1& atoc1, RPointerArray* aArray); +/** +* @function GetTopicContentL +* @since S60 3.2 +* Get the Buffer for a selected toc2 +* @param atoc2 - generic toc2 class pointer +* @return pointer to a buffer +*/ + TAny* GetTopicContentL(CCSXHGenericTOC2* atoc2); +/** +* @function GetContentsFromFileL +* @since S60 3.2 +* Get the Buffer from a html file +* @param htmlFile - html file path +* aCoeEnv - Control Environment +* @return pointer to a buffer +*/ + static HBufC8* GetContentsFromFileL(const TDesC& htmlFile,CCoeEnv* aCoeEnv,RFeatureControl &aFeatureControl); + +/** +* @function GetHtmlFileL +* @since S60 3.2 +* Get the html file path +* @param aCoeEnv - Control Environment +* aDir - Directory +* TAppUid - UID +* aFileName - FileName(IN/OUT Argument) +*/ + static void GetHtmlFileL(CCoeEnv* aCoeEnv,const short& aDir, + const TAppUid& aUid,TBuf& aFileName); +/** + * @function ~CCSXHHTMLContentParser + * @since S60 3.2 + * Destroy the object and release all memory objects + */ + ~CCSXHHTMLContentParser(); + +/** +* @function GenerateKywdTOC1ListL +* @since S60 3.2 +* Generate Html Keyword TOC1 Objects +* @param aDataBase - Database class pointer +*/ + void GenerateKywdTOC1ListL(CCSXHHelpDataBase* aDataBase); +/** +* @function GenerateTOC2ListForKeywordSearchL +* @since S60 3.2 +* Generate Html Keyword TOC2 Objects +* @param aDataBase - Database class pointer +* @param akywdtoc1 - keyword toc1 class pointer +*/ + void GenerateTOC2ListForKeywordSearchL(CCSXHHelpDataBase* aDataBase, + CCSXHKywdTOC1* akywdtoc1); +/** +* @function GetContextTopic +* @since S60 3.2 +* Get the help Context object +* @param aContext - Help context object +* @return database class pointer +*/ + CCSXHHelpContentBase* GetContextTopic(const TUid &aUid, const TDesC &contextName); +/** +* @function GetHtmlTopicForUrlL +* @since S60 3.2 +* Get the toc2 object in order to get Content +* @param aurl - Full File Path +* @return pointer to database +*/ + CCSXHHelpContentBase* GetHtmlTopicForUrlL(const TDesC& aurl); + +/** +* @function IsUidCategoryPresent +* @since S60 3.2 +* Check for Existance of Appication Uid +* @param aUid - Application Uid +* @return ETrue if exists, EFalse otherwise +*/ + TBool IsUidCategoryPresent(const TUid& aUid); + + + void InsertHTMLToc1L(const TDesC &appUidName,const TDesC &appName,const TInt& aDrive, + CCSXHHelpDataBase* aDataBase,const TDesC &FeatureIds ); + +/** +* @function GetHTMLToc1 +* @since S60 3.2 +* Get the HTML TOC1 object +* @param aUid - Application Uid +* aCurrentHtmlToc1 - HTMLTOC1 pointer +* @return ETrue if present, EFalse otherwise +*/ + TBool GetHTMLToc1(const TDesC& aUid,CCSXHXMLParseHandler* aParser); + + TBool CheckFeatureIDL(const TDesC& aFeatueIds); + private: +/** +* @function CCSXHHTMLContentParser +* @since S60 3.2 +* Construct a CCSXHHTMLContentParser +* @param aCoeEnv - Control Environment +*/ + CCSXHHTMLContentParser(CCoeEnv* aCoeEnv); +/** +* @function InitializeReaderL +* @since S60 3.2 +* Create XMLParse Objects +* @param aXMLParser - Pointer to XML parse Handler +*/ + void InitializeReaderL(CCSXHXMLParseHandler* aXMLParser); +/** +* @function InitializeParserAndReaderL +* @since S60 3.2 +* Delete XMLParse Objects +* @param aXMLParser - Pointer to XML parse Handler +*/ + void ClearReader(); +/** +* @function ConstructL +* @since S60 3.2 +* perform the second phase construction +*/ + void ConstructL(); +/** +* @function ScanAndParseXMLfileToCreateTOC1ObjectL +* @since S60 3.2 +* perform the second phase construction +* @param aFileSession - FileSession +* ascanner - CDirScan pointer +* aDatabase - Database pointer +* aDrive - Drive Number +* aXMLParser - XMLParserhandler pointer +*/ + void ScanAndParseXMLfileToCreateTOC1ObjectL(RFs& aFileSession,CDirScan* ascanner, + CCSXHHelpDataBase* aDataBase, + const TInt& aDrive,CCSXHXMLParseHandler* aXMLParser); +/** +* @function HandleMasterMetaFileL( +* @since S60 3.2 +* perform the second phase construction +* @param aFileSession - FileSession +* aDatabase - Database pointer +* aRootDir - Root directory +* aPrevHandler - Previous Content Handler +* @return ETrue if handled, EFalse otherwise +*/ + TBool HandleMasterMetaFileL(CCSXHHelpDataBase* aDataBase, + TChar& aDrive, MSenContentHandlerClient *aPrevHandler); +/** +* @function HandleMasterKeywordFileL( +* @since S60 3.2 +* parse makster keywords file +* @param aDatabase - Database pointer +* @return ETrue if handled, EFalse otherwise +*/ TBool HandleMasterKeywordFileL(CCSXHHelpDataBase* aDataBase); + + + static TBool GetHTMLContentPathForDriveL(TBuf* aContentDrive,CCoeEnv *aCoeEnv); + +/** +* @function IsAppUIdPresentAlready( +* @since S60 3.2 +* Check duplicate Uids +* @param aUid - Application Uid +* @return ETrue if dupicate is identified, EFalse otherwise +*/ + TBool IsAppUIdPresentAlready(const TDesC& aUid); + +/** +* @function GetCorrespondingTOC1FromMainArray( +* @since S60 3.2 +* Get TOC1 object from the main array, which is used to display Main topic view. +* @param aApplicationName - Application Name +* @return pointer to HTML toc1. +*/ + CCSXHHtmlTOC1* GetCorrespondingTOC1FromMainArray(const TDesC& aApplicationName); + +/** +* @function ParseKeywdFileAndCreatekywdTOC1Objects +* @since S60 3.2 +* Parse keyword.xml file and Create kywd TOC1 objects. +* @param aTOC1ObjectsArray - Array of HTMLToc1Objects +* XMLParser - pointer to XML parse handler. +* bMasterKeywordFilePresent - Boolean parameter +*/ + + void ParseKeywdFileAndCreatekywdTOC1ObjectsL(RPointerArray& aTOC1ObjectsArray, + CCSXHXMLParseHandler_Kywd* XMLParser, TBool bMasterKeywordFilePresent); + +/** +* @function ParseKeywdFileAndCreatekywdTOC1Objects +* @since S60 3.2 +* Parse keyword.xml file and Create kywd TOC1 objects. +* @param aTOC1ObjectsArray - Array of HTMLToc1Objects +* aUrl - html file path +*/ + + CCSXHHelpContentBase* CCSXHHTMLContentParser::GetObjectBasedonUrlL(RPointerArray& aTOC1ObjectsArray, + const TDesC& aUrl,TBool aMainArrayList); + +/** +* @function GetSupportedFeatureListL +* @since S60 3.2 +* Get enabled featureIds in the current build +*/ + void GetSupportedFeatureListL(); + +/** +* @function CreateBufferForCSSContentL +* @since S60 3.2 +* Create CSS Content using enabled featureIds +* @param aFeatureControl - RFeatureControl instance +*/ + static HBufC8* CreateBufferForCSSContentL(RFeatureControl& aFeatureControl); + +/** +* @function GetContentsFromHTMLFileL +* @since S60 3.2 +* Read the contents from HTML file +* @param htmlFile - HTML file name +* aCoeEnv - Control Environment +*/ + + static HBufC8* GetContentsFromHTMLFileL(const TDesC& htmlFile, CCoeEnv* aCoeEnv); + +/** +* @function MergeCssAndHTMLContentL +* @since S60 3.2 +* Merge CSS and HTML Content +* @param aHTMLBuffer - HTML file content +* aCssContent - CSS content +*/ + + static HBufC8* MergeCssAndHTMLContentL(HBufC8* aHTMLBuffer, HBufC8* aCssContent); + + static void AppendStyleSheetContent_listitem(TPtr8& abufferptr,TInt aFeatureIdCount, + RFeatureUidArray& aSupportedFeatures,CArrayFix& alanguageCodeArray); + static void AppendStyleSheetContent_paragraph(TPtr8& abufferptr,TInt aFeatureIdCount, + RFeatureUidArray& aSupportedFeatures,CArrayFix& alanguageCodeArray); + static void AppendStyleSheetContent_ahref(TPtr8& abufferptr,TInt aFeatureIdCount, + RFeatureUidArray& aSupportedFeatures,CArrayFix& alanguageCodeArray); + static void AppendStyleSheetContent_none(TPtr8& abufferptr,TInt aFeatureIdCount, + RFeatureUidArray& aSupportedFeatures); + private: + CSenXmlReader *iXmlReader; + + //Store all the created HTML TOC1 objects for future reference. + RPointerArray iHtmlTOC1List,iDuplicateHelpTopicList; + CCoeEnv *iCoeEnv; + + RFeatureUidArray iSupportedFeatures; + RFeatureControl iFeatureControl; + //Input Language variation changes + CDesCArray* iSupportedInputLanguages; + CDesCArray* iFeatureManager_FeatureIds; + CCSXHRuntimeIndexing* iIndexing; + +}; + +#endif diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/inc/CSXHHelpContentBase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/inc/CSXHHelpContentBase.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,93 @@ +/* +* 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 "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: CCSXHHelpContentBase class declaration +* +*/ + + +#ifndef INC_CSXHHELPCONTENTBASE_H_HEADER_INCLUDED_BC0553D0 +#define INC_CSXHHELPCONTENTBASE_H_HEADER_INCLUDED_BC0553D0 + +#include +#include + +const TInt KMaxHelpTopicName = 30; +/** +* @class CCSXHGenericTOC1 +* This class is the base class for GenericTOC1 & GenericTOC2 +*/ +class CCSXHHelpContentBase : public CBase + { + public: + /** + * @function ~CCSXHHelpContentBase + * @since S60 3.2 + * Destroy the object and release all memory objects + */ + virtual ~CCSXHHelpContentBase(); + +/** +* @function GetViewID +* @since S60 3.2 +* Get ViewId to activate the View +* @return View Id +*/ + IMPORT_C virtual TUid GetViewID() const = 0; + +/** +* @function GetName +* @since S60 3.2 +* Get the name +* @return Pointer which contains Name +*/ + IMPORT_C TPtr GetName() const; + + protected: +/** +* @function CCSXHHelpContentBase +* @since S60 3.2 +* Construct a CCSXHHelpContentBase +* @param aName - Name +*/ + CCSXHHelpContentBase(const TDesC& name); + + private: + // 1. For Generic TOC1: The TOC1 entry name + // 2. For Generic TOC2: The TOC2 entry name + // 3. For help database: Unused + //TBuf iName; + //typedef TBuf<30> TCoeContextName; + + HBufC *iName; + + template + friend TInt Orderer(const T& left, const T& right); + + }; +/** +* @function Orderer +* @since S60 3.2 +* template function used to compare between two objects +* @param left - template object +* right - template object +* @return 0 if both are same, +ve or -ve Values as per Comparision +*/ +template +TInt Orderer(const T& left, const T& right) + { + //return left.GetName().CompareC(right.GetName()); + return (left.iName)->CompareC(*right.iName); + } + +#endif /* INC_CSXHHELPCONTENTBASE_H_HEADER_INCLUDED_BC0553D0 */ diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/inc/CSXHHelpDataBase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/inc/CSXHHelpDataBase.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,262 @@ +/* +* 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 "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: CCSXHHelpDataBase class declaration +* +*/ + + +#ifndef INC_CSXHHELPDATABASE_H_HEADER_INCLUDED_BC054F58 +#define INC_CSXHHELPDATABASE_H_HEADER_INCLUDED_BC054F58 + +#include "CSXHHelpContentBase.h" +#include "CSXHGenericTOC1.h" +#include +#include +class CAknProgressDialog; + +class CCSXHHelpDataBase; +class CCSXHHTMLContentParser; +class CCSXHLegacyContentParser; +class CCSXHGenericTOC2; +class CCSXHKywdTOC1; +class CCSXHHtmlTOC1; +class CCoeEnv; +class CCSXHMainTopics; +class CCSXHKywdTopics; +class MCSXHKywdBuilder; + +/** +* @class CCSXHHelpDataBase +* This class has all pointers & used to generate the required data from Application +*/ +class CCSXHHelpDataBase : public CBase + { + public: +/** +* @function NewL +* @since S60 3.2 +* Construct a CCSXHHelpDataBase +* and return a pointer to the created object +* @param aCoeEnv - Control Environment +* @return a CCSXHHelpDataBase Pointer +*/ + IMPORT_C static CCSXHHelpDataBase* NewL(CCoeEnv* aCoeEnv,const TApaAppCaption& aAppCaption); +/** +* @function NewLC +* @since S60 3.2 +* Construct a CCSXHHelpDataBase +* and return a pointer to the created object using two phase construction +* @param aCoeEnv - Control Environment +* @return a CCSXHHelpDataBase Pointer +*/ + static CCSXHHelpDataBase* NewLC(CCoeEnv *aCoeEnv,const TApaAppCaption& aAppCaption); + +/** +* @function GetInstance +* @since S60 3.2 +* Get the instance of database class +* @return database pointer +*/ + static CCSXHHelpDataBase* GetInstance(); + + /** + * @function ~CCSXHHelpDataBase + * @since S60 3.2 + * Destroy the object and release all memory objects + */ + IMPORT_C ~CCSXHHelpDataBase(); +/** +* @function GetMainTopics +* @since S60 3.2 +* Get the instance of Main toc1 +* @return toc1 pointer +*/ + IMPORT_C CCSXHGenericTOC1* GetMainTopics(); +/** +* @function GetKywdTopics +* @since S60 3.2 +* Get the instance of keyword toc1 +* @return toc1 pointer +*/ + IMPORT_C CCSXHGenericTOC1* GetKywdTopics(); +/** +* @function ClearAllTOC1Contents +* @since S60 3.2 +* Delete all the objects from the Array +*/ + IMPORT_C void ClearAllTOC1Contents(); +/** +* @function GetContextTopic +* @since S60 3.2 +* Delete all the objects from the Array +* @param aContextMessage - Message Sent by other Application +* @return Database pointer +*/ + IMPORT_C CCSXHHelpContentBase* GetContextTopic(const TDesC8& aContextMessage); +/** +* @function GetHtmlTopicForUrlL +* @since S60 3.2 +* Delete all the objects from the Array +* @param aurl - Html file path +* @return Database pointer +*/ + IMPORT_C CCSXHHelpContentBase* GetHtmlTopicForUrlL(const TDesC& aurl); + +/** +* @function IncrementProgressBar +* @since S60 3.2 +* Increments the progress info +* @return progress info pointer +*/ + void IncrementKeywordSearchCount(TInt aUnits = 1); +/** +* @function GetLegacyParser +* @since S60 3.2 +* Get LegacyContentparser +* @return LegacyContentParser pointer +*/ + CCSXHLegacyContentParser* GetLegacyParser(); +/** +* @function GetHtmlParser +* @since S60 3.2 +* Get htmlContentparser +* @return HtmlContentParser pointer +*/ + CCSXHHTMLContentParser* GetHtmlParser(); +/** +* @function InsertKeywordL +* @since S60 3.2 +* Insert into array +* @param aKywdName - Keyword Name +* aToc1 - Toc1 Object +*/ + void InsertKeywordL(const TDesC& aKywdName, CCSXHHtmlTOC1* aToc1); +/** +* @function InsertKeywordL +* @since S60 3.2 +* Insert into Array +* @param aKywdName - Keyword Name +* aLegacyKywdIndex - Position +* aCatUid - Application Uid +*/ + void InsertKeywordL(const TDesC& aKywdName, TInt aLegacyKywdIndex, const TUid& aCatUid); + + +/** +* @function InitGenerateKeywordTOC2ListL +* @since S60 3.2 +* Initializes the generation of kywd toc2 objects +* @param aKywdToc1 - Keyword toc1 object +*/ + IMPORT_C TInt InitGenerateKeywordTOC2ListL(CCSXHKywdTOC1* aKywdToc1); + +/** +* @function GenerateKeywordTOC2ListL +* @since S60 3.2 +* Generate the toc2 objects,InitGenerateKeywordTOC2ListL has to be called first +* @param aKywdToc1 - Keyword toc1 object +*/ + void GenerateKeywordTOC2ListL(CCSXHKywdTOC1* aKywdToc1); + +/** +* @function InsertKeywordTopicL +* @since S60 3.2 +* The caller should allocate memory for the aTOC2 object, if it is not successfully +* added to the topic, then this function will free the memory +* @param +* aToc2 - toc2 object +*/ + CCSXHKywdTOC1* InsertKeywordTopicL(CCSXHGenericTOC2* aToc2); + +/** +* @function InsertKeywordTopic +* @since S60 3.2 +* The caller should allocate memory for the aTOC2 object, if it is not successfully +* added to the topic, then this function will free the memory +* @param aToc1 - toc1 object +* aToc2 - toc2 object +*/ + void InsertKeywordTopic(CCSXHKywdTOC1* aToc1, CCSXHGenericTOC2* aToc2); + +/** +* @function FillKeywordTopicsL +* @since S60 3.2 +* Fills Keyword objects +* @param aBuilder - MCSXHKywdBuilder object +*/ + void FillKeywordTopicsL(MCSXHKywdBuilder* aBuilder); + +/** +* @function GetCoeEnv +* @since S60 3.2 +* Get the Control Environment +* @return pointer to control environment +*/ + CCoeEnv* GetCoeEnv(); +/** +* @function GetKeywordSearchCount +* @since S60 3.2 +* Gets the current count of keywords for search result view +* @return TInt count +*/ +IMPORT_C TInt GetKeywordSearchCount(); + + private: +/** +* @function ConstructL +* @since S60 3.2 +* perform the second phase construction +*/ + void ConstructL(); +/** +* @function CCSXHHelpDataBase +* @since S60 3.2 +* Construct a CCSXHHelpDataBase +* @param aCoeEnv - Control Environment +*/ + CCSXHHelpDataBase(CCoeEnv* aCoeEnv,const TApaAppCaption& aAppCaption); + +/** +* @function GetContextTopicL +* @since S60 3.2 +* Get the topic for the Context +* @param aContextMessage - Message sent by other Application +* @return Database pointer +*/ + CCSXHHelpContentBase* GetContextTopicL(const TDesC8& aContextMessage); + + // List of TOC1 entries + CCSXHMainTopics *iMainTOC1; + // List of keyword entries + CCSXHKywdTopics *iKywdTOC1; + + + CCSXHHTMLContentParser *iHTMLContentParser; + CCSXHLegacyContentParser *iLegacyContentParser; + + CCoeEnv *iCoeEnv; + + CCSXHHelpContentBase *iLastContextTopic; + + MCSXHKywdBuilder *iKwydBuilder; + + TApaAppCaption iAppCaption; + + TInt iKeywordSearchCount; + + }; + + + +#endif /* INC_CSXHHELPDATABASE_H_HEADER_INCLUDED_BC054F58 */ diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/inc/CSXHHtmlTOC1.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/inc/CSXHHtmlTOC1.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,147 @@ +/* +* 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 "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: CCSXHHtmlTOC1 class declaration +* +*/ + + +#ifndef INC_CSXHHTMLTOC1_H_HEADER_INCLUDED_BC0568C5 +#define INC_CSXHHTMLTOC1_H_HEADER_INCLUDED_BC0568C5 + +#include "CSXHGenericTOC1.h" + +class CCSXHHelpDataBase; + +/** +* @class TAppUid +* This class stores the required information to store a folder name in string +* as integer and converts it back to a string when required. This class is mainly +* to save RAM space +*/ + +class TAppUid + { + public: + TAppUid(const TDesC& aFolder); + const TUid& GetUid() const; + TBool IsValid() const; + void AppendUid(TBuf& aStr) const; + private: + TUid iUid; + TUint8 iLength; + }; + + +/** +* @class CCSXHHtmlTOC1 +* This class has the information of html TOC1 +*/ +class CCSXHHtmlTOC1 : public CCSXHGenericTOC1 + { + public: +/** +* @function NewL +* @since S60 3.2 +* Construct a CCSXHHtmlTOC1 +* and return a pointer to the created object +* @param aName - TOC1 Name +* aUid - Application Uid +* aDrive - Drive Number +* @return a CCSXHHtmlTOC1 Pointer +*/ + static CCSXHHtmlTOC1* NewL(const TDesC& aName,const TDesC& aFolder, + const TInt& aDrive); +/** + * @function ~CCSXHHtmlTOC1 + * @since S60 3.2 + * Destroy the object and release all memory objects + */ + ~CCSXHHtmlTOC1(); + +/** +* @function GetViewID +* @since S60 3.2 +* Get ViewId to activate the View +* @return View Id +*/ + TUid GetViewID() const; + +/** +* @function GetAppUid +* @since S60 3.2 +* Get Application uid +* @return Application UId +*/ + const TUid& GetAppUid() const; +/** +* @function GetContextTopic +* @since S60 3.2 +* Get content for Context Name +* @param acontextName - Context Name +* @return pointer to database class +*/ + CCSXHHelpContentBase* GetContextTopic(const TDesC& acontextName); +/** +* @function GetHelpFileL +* @since S60 3.2 +* Get the file path +* @param aFilePath - File Path +*/ + void GetHelpFileL(TBuf& aFilePath) const; +/** +* @function GetHtmlTopicForFile +* @since S60 3.2 +* Get the toc2 object in order to get Content +* @param aFile - toc2 Name +*/ + CCSXHHelpContentBase* GetHtmlTopicForFile(const TDesC& aFile); + +/** +* @function GetHelpFileL +* @since S60 3.2 +* Get the file path +* @return ETrue, if it part of ROMdrive, EFalse otherwise +*/ + TBool IsROMDrive(); + + protected: +/** +* @function CCSXHHtmlTOC1 +* @since S60 3.2 +* Construct a CCSXHHtmlTOC1 +* @param aName - TOC1 Name +* aUid - Application Uid +* aDrive - Drive Number +*/ + CCSXHHtmlTOC1(const TDesC& aName,const TDesC& aFolder,const TInt& aDriveName); +/** +* @function InitChildList +* @since S60 3.2 +* Allocate Memory to the array +*/ + void InitChildList(); + + TBool IsValid() const; + + + private: + + + TAppUid iAppUid; + short iDrive; + }; + + + +#endif /* INC_CSXHHTMLTOC1_H_HEADER_INCLUDED_BC0568C5 */ diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/inc/CSXHHtmlTOC2.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/inc/CSXHHtmlTOC2.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,172 @@ +/* +* 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 "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: CCSXHHtmlTOC2 class declaration +* +*/ + + +#ifndef INC_CSXHHTMLTOC2_H_HEADER_INCLUDED_BC052432 +#define INC_CSXHHTMLTOC2_H_HEADER_INCLUDED_BC052432 + +#include "CSXHGenericTOC2.h" + +class CCSXHGenericTOC1; +class CCSXHKywdTOC1; +class CCoeEnv; +class TCoeHelpContext; +class RFeatureControl; +/** +* @class CCSXHHtmlTOC2 +* This class has the information of html TOC2 +*/ +class CCSXHHtmlTOC2 : public CCSXHGenericTOC2 + { + public: +/** +* @function NewL +* @since S60 3.2 +* Construct a CCSXHHtmlTOC2 +* and return a pointer to the created object +* @param aparent - TOC1 object +* aName - toc2 Name +* aHtmlFileName - FileName +* aKey - ETrue for Keyword toc2, EFalse otherwise +* @return a CCSXHHtmlTOC2 Pointer +*/ +static CCSXHHtmlTOC2* NewL(CCSXHGenericTOC1* aparent,const TDesC& aName, +const TDesC& aHtmlFileName,TBool aKey=EFalse); +/** +* @function NewLC +* @since S60 3.2 +* Construct a CCSXHHtmlTOC2 +* and return a pointer to the created object using two phase construction +* @param aparent - TOC1 object +* aName - toc2 Name +* aHtmlFileName - FileName +* aKey - ETrue for Keyword toc2, EFalse otherwise +* @return a CCSXHHtmlTOC2 Pointer +*/ +static CCSXHHtmlTOC2* NewLC(CCSXHGenericTOC1*aparent,const TDesC& aName, +const TDesC& aHtmlFileName,TBool aKey=EFalse); + +/** + * @function ~CCSXHHtmlTOC2 + * @since S60 3.2 + * Destroy the object and release all memory objects + */ + ~CCSXHHtmlTOC2(); + +/** + * @function ~CCSXHHtmlTOC2 + * @since S60 3.2 + * Get the full path of the HTML file + * @param aFileUrl - Buffer in order to get the file path + */ + IMPORT_C void GetHtmlUrlL(TBuf& aFileUrl) const; + +/** +* @function GetViewID +* @since S60 3.2 +* Get ViewId to activate the View +* @return View Id +*/ + TUid GetViewID() const; +/** +* @function GetTopicContentL +* @since S60 3.2 +* Get the content to display in the browser +* @return Pointer to the buffer +*/ + TAny* GetTopicContentL(); + +/** +* @function GetFileName +* @since S60 3.2 +* Get html file Name +* @return buffer which contains html file Name +*/ + const TBuf& GetFileName() const; + +/** +* @function GetHelpContext +* @since S60 3.2 +* Constructs a Help Context corresponding to the topic +* @returns true on success +*/ + IMPORT_C TBool GetHelpContext(TCoeHelpContext& aContext) const; + +/** +* @function GetContentsFromUrlL +* @since S60 3.2 +* Get content from a html file +* @param aUrl - Full file path +* aCoeEnv - Control Environment +* @return pointer to buffer which contains HTML file content +*/ + IMPORT_C static HBufC8* GetContentsFromUrlL(const TDesC& aUrl, + CCoeEnv* aCoeEnv,RFeatureControl& aFeatureControl); + +/** +* @function SetKywdParent +* @since S60 3.2 +* Set the parent object +* @param aParent - keyword toc1 class pointer +*/ + void SetKywdParent(CCSXHKywdTOC1* aParent); +/** +* @function GetKywdParent +* @since S60 3.2 +* Get the parent +* @return poniter to keywordtoc1 (parent) class +*/ + IMPORT_C CCSXHKywdTOC1* GetKywdParent(); + +/** +* @function SetHtmlFilePath +* @since S60 3.2 +* Set Html file path +* @param aFilePath - Html file path +*/ + void SetHtmlFilePath(const TDesC& aFilePath); + +/** +* @function GetHtmlFileName +* @since S60 3.2 +* Get html file +* @param aFileName - Full path with html file name +*/ + void GetHtmlFileName(TBuf& aFileName); + + private: +/** +* @function CCSXHHtmlTOC2 +* @since S60 3.2 +* Construct a CCSXHHtmlTOC2 +* @param aparent - TOC1 object +* aName - toc2 Name +* aHtmlFileName - FileName +* aKey - ETrue for Keyword toc2, EFalse otherwise +*/ + CCSXHHtmlTOC2(CCSXHGenericTOC1* aparent,const TDesC& aName, + const TDesC& aHtmlFileName,TBool aKeyWord = false); + + private: + TBuf iHTMLFileName,iHTMLFilePath; + TBool iKeyWordTopic; + CCSXHKywdTOC1 *iKywdParent; + }; + + + +#endif /* INC_CSXHHTMLTOC2_H_HEADER_INCLUDED_BC052432 */ diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/inc/CSXHKywdTOC1.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/inc/CSXHKywdTOC1.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,108 @@ +/* +* 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 "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: CCSXHKywdTOC1 class declaration +* +*/ + + +#ifndef INC_CSXHKYWDTOC1_H_HEADER_INCLUDED_BC0568C5 +#define INC_CSXHKYWDTOC1_H_HEADER_INCLUDED_BC0568C5 + +#include "CSXHGenericTOC1.h" + +class CCSXHHtmlTOC1; +/** +* @class CCSXHLegacyTOC1 +* This class has the information of keyword TOC1 +*/ +class CCSXHKywdTOC1 : public CCSXHGenericTOC1 + { + public: +/** +* @function NewL +* @since S60 3.2 +* Construct a CCSXHKywdTOC1 +* and return a pointer to the created object +* @param aName - Name of the TOC1 +* @return a CCSXHKywdTOC1 Pointer +*/ + static CCSXHKywdTOC1* NewL(const TDesC& aName); +/** +* @function NewLC +* @since S60 3.2 +* Construct a CCSXHKywdTOC1 +* and return a pointer to the created object using two phase contruction +* @param aName - Name of the TOC1 +* @return a CCSXHKywdTOC1 Pointer +*/ + static CCSXHKywdTOC1* NewLC(const TDesC& aName); +/** + * @function ~CCSXHKywdTOC1 + * @since S60 3.2 + * Destroy the object and release all memory objects + */ + ~CCSXHKywdTOC1(); +/** +* @function GetViewID +* @since S60 3.2 +* Get ViewId to activate the View +* @return View Id +*/ + TUid GetViewID() const; +/** +* @function LegacyIndex +* @since S60 3.2 +* Get the position +* @return position +*/ + TInt& LegacyIndex(); +/** +* @function AppendHtmlTOC1L +* @since S60 3.2 +* Insert html toc1 object +* @param atoc1 - html toc1 class pointer +*/ + void AppendHtmlTOC1L(CCSXHHtmlTOC1* aToc1); + +/** +* @function GetHtmlTOC1List +* @since S60 3.2 +* Get the Array +* @return pointer to the Array of html toc1 objects +*/ + RPointerArray* GetHtmlTOC1List(); + + protected: +/** +* @function CCSXHKywdTOC1 +* @since S60 3.2 +* Construct a CCSXHKywdTOC1 +* @param aName - kywd toc1 name +*/ + CCSXHKywdTOC1(const TDesC& aName); +/** +* @function InitChildList +* @since S60 3.2 +* Allocate Memory for toc1htmllist array +*/ + void InitChildList(); + private: + TInt iLegacyIndex;//Needed for getting the TOC2 kywd legacy contents + RPointerArray *iTOC1HtmlList; //Needed for getting the TOC2 kywd HTML contents + + }; + + + +#endif /* INC_CSXHKYWDTOC1_H_HEADER_INCLUDED_BC0568C5 */ diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/inc/CSXHKywdTopics.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/inc/CSXHKywdTopics.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,150 @@ +/* +* 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 "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: CCSXHKywdTopics class declaration +* +*/ + + +#ifndef INC_CSXHKYWDTOPICS_H_HEADER_INCLUDED_BC0568C5 +#define INC_CSXHKYWDTOPICS_H_HEADER_INCLUDED_BC0568C5 + +#include "CSXHGenericTOC1.h" +#include + +class CCSXHHelpDataBase; +class CCSXHHtmlTOC1; +class CCSXHKywdTOC1; + +/** +* @class CCSXHKywdTopics +* This class has the information of Keyword Objects +*/ +class CCSXHKywdTopics : public CCSXHGenericTOC1 + { + public: +/** +* @function NewL +* @since S60 3.2 +* Construct a CCSXHKywdTopics +* and return a pointer to the created object +* @param aDataBase - database class pointer +* @return a CCSXHKywdTopics Pointer +*/ + static CCSXHKywdTopics* NewL(const TApaAppCaption& aAppCaption); +/** +* @function NewL +* @since S60 3.2 +* Construct a CCSXHKywdTopics +* and return a pointer to the created object using two phase construction +* @param aDataBase - database class pointer +* @return a CCSXHKywdTopics Pointer +*/ + static CCSXHKywdTopics* NewLC(const TApaAppCaption& aAppCaption); +/** +* @function ~CCSXHKywdTopics +* @since S60 3.2 +* Destroy the object and release all memory objects +*/ + ~CCSXHKywdTopics(); +/** +* @function GetViewID +* @since S60 3.2 +* Get ViewId to activate the View +* @return View Id +*/ + TUid GetViewID() const; +/** +* @function InsertKywdL +* @since S60 3.2 +* Insert into an array +* @param aKywd - Keyword Name +*/ + void InsertKywdL(const TDesC& aKywd); +/** +* @function GetChildL +* @since S60 3.2 +* Get objects for keyword +* @param aKywd - Keyword Name +* @return database class pointer +*/ + CCSXHHelpContentBase* GetChildL(const TDesC& aName); + +/** +* @function GetSelectedTopic +* @since S60 3.2 +* Get the pointer for a selected Keyword +* @return keyword toc1 class pointer +*/ + CCSXHKywdTOC1* GetSelectedTopic(); + + protected: +/** +* @function CCSXHKywdTopics +* @since S60 3.2 +* Construct a CCSXHKywdTopics +* @param aName - keyword Name +*/ + CCSXHKywdTopics(const TDesC& aName); + +/** +* @function InitChildList +* @since S60 3.2 +* Allocate Memory for the Array +*/ + void InitChildList() {} +/** +* @function CopyChildListL +* @since S60 3.2 +* Copies content to Descriptor Array +* @param aArray - Descriptor Array +*/ + void CopyChildListL(CDesCArray* aArray); + + private: + CDesCArray *iKywdTopics; + CCSXHKywdTOC1 *iCurrentTopic; + }; + + + +/** +* @class MCSXHKywdBuilder +* The HTML content parser operates on this class for inserting keywords +*/ +class MCSXHKywdBuilder + { + public: // New functions +/** +* @function InsertKeywordL +* @since S60 3.2 +* Insert keywords into an array, pure virtual function +* @param aKwdTopics - keyword topics class pointer +* aKwd - keyword Name +* aToc1 - html toc1 class pointer +*/ + virtual void InsertKeywordL(CCSXHKywdTopics* aKwdTopics, const TDesC& aKwd, + CCSXHHtmlTOC1* aToc1) = 0; +/** +* @function InsertKeywordL +* @since S60 3.2 +* Insert keywords into an array, pure virtual function +* @param aKwdTopics - keyword topics class pointer +* aKwd - keyword Name +* aLegacyIndex - position of the object +*/ + virtual void InsertKeywordL(CCSXHKywdTopics* aKwdTopics, const TDesC& aKwd, + const TInt& aLegacyIndex) = 0; + }; + +#endif /* INC_CSXHKYWDTOPICS_H_HEADER_INCLUDED_BC0568C5 */ diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/inc/CSXHLegacyContentParser.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/inc/CSXHLegacyContentParser.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,179 @@ +/* +* 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 "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: CCSXHLegacyContentParser class declaration +* +*/ + + +#ifndef __CCSXHLEGACYCONTENTPARSER_H__ +#define __CCSXHLEGACYCONTENTPARSER_H__ + +#include +#include + +class CHlpModel; +class CHlpTopic; +class CCSXHGenericTOC1; +class CCSXHGenericTOC2; +class CCSXHLegacyTOC2; +class CCSXHHelpDataBase; +class CCSXHKywdTOC1; +class CCSXHLegacyTOC1; +class CCoeEnv; +class CCSXHHelpContentBase; +class TCoeHelpContext; + +/** +* CCSXHLegacyContentParser class. +* This class is used to retrive Legacy content from .hlp file +* @lib euser.lib +* @since 3.2 +*/ + +class CCSXHLegacyContentParser: public CBase , public MHlpModelObserver + { + public: +/** +* @function NewL +* @since S60 3.2 +* Construct a CCSXHLegacyContentParser +* and return a pointer to the created object +* @param aDataBase - Database class Pointer +* @return a CCSXHLegacyContentParser Pointer +*/ + static CCSXHLegacyContentParser* NewL(CCSXHHelpDataBase* aDataBase); +/** +* @function NewLC +* @since S60 3.2 +* Construct a CCSXHLegacyContentParser +* and return a pointer to the created object using two phase construction +* @param aDataBase - Database class pointer +* @return a CCSXHLegacyContentParser Pointer +*/ + static CCSXHLegacyContentParser* NewLC(CCSXHHelpDataBase* aDataBase); + +/** +* @function GenerateTOC1ListL +* @since S60 3.2 +* Generate Legacy TOC1 Objects +* @param aDataBase - Database class pointer +*/ + void GenerateTOC1ListL(CCSXHHelpDataBase* aDataBase); +/** +* @function GenerateTOC2ListL +* @since S60 3.2 +* Generate Legacy TOC2 Objects +* @param atoc1 - generic toc1 class pointer +* aArray - Database class pointer's array pointer +*/ + void GenerateTOC2ListL(CCSXHGenericTOC1& atoc1,RPointerArray* aArray); +/** +* @function GetTopicContentL +* @since S60 3.2 +* Get the richtext for a selected toc2 +* @param atoc2 - generic toc2 class pointer +* @return richtext pointer +*/ + TAny* GetTopicContentL(CCSXHGenericTOC2* atoc2); +/** +* @function GenerateKywdTOC1ListL +* @since S60 3.2 +* Generate Legacy Keyword TOC1 Objects +* @param aDataBase - Database class pointer +*/ + void GenerateKywdTOC1ListL(CCSXHHelpDataBase *aDataBase); + +/** +* @function InitGenerateTOC2ListForKeywordSearchL +* @since S60 3.2 +* Generate Legacy Keyword TOC2 Objects +* @param akywdtoc1 - keyword toc1 class pointer +* @return TInt the number of keyword sub topics +*/ + TInt InitGenerateTOC2ListForKeywordSearchL(CCSXHKywdTOC1* akywdtoc1); + +/** +* @function GenerateTOC2ListForKeywordSearchL +* @since S60 3.2 +* Generate Legacy Keyword TOC2 Objects,InitGenerateTOC2ListForKeywordSearchL +* has to be called first +* @param akywdtoc1 - keyword toc1 class pointer +*/ + void GenerateTOC2ListForKeywordSearchL(CCSXHKywdTOC1* akywdtoc1); +/** +* @function GetTOC1ForTOC2 +* @since S60 3.2 +* Get Legacy TOC1 Object +* @param atoc2 - keyword toc2 class pointer +* @return legacy toc1 class pointer +*/ + CCSXHLegacyTOC1* GetTOC1ForTOC2(CCSXHLegacyTOC2* atoc2); +/** + * @function ~CCSXHLegacyContentParser + * @since S60 3.2 + * Destroy the object and release all memory objects + */ + ~CCSXHLegacyContentParser(); + +/** +* @function GetContextTopic +* @since S60 3.2 +* Get the help Context object +* @param aContext - Help context object +* @param database class pointer +*/ + CCSXHHelpContentBase* GetContextTopic(TCoeHelpContext &aContext); + + private: +/** +* @function CCSXHLegacyContentParser +* @since S60 3.2 +* Construct a CCSXHLegacyContentParser +* @param aDataBase - Database class pointer +*/ + CCSXHLegacyContentParser(CCSXHHelpDataBase *aDataBase); +/** +* @function ConstructL +* @since S60 3.2 +* perform the second phase construction +* @param aDataBase - Database class pointer +*/ + void ConstructL(); +/** +* From MHlpModelObserver class +* @function HandleModelEventL +* @since S60 3.2 +* handle event from CHlpModel +* @param aEvent from CHlpModel +*/ + void HandleModelEventL(TInt aEvent); +/** +* @function LoadContextTopicL +* @since S60 3.2 +* Get the Richtext for context sensitive help +* @param aContext Help context class object +*/ + void LoadContextTopicL(TCoeHelpContext &aContext); + + private: + CHlpModel* iModel; + CHlpTopic* iTopic; + CCSXHHelpDataBase* iDataBase; + CHlpList* iHlpList; + TInt iStatus; + //Store all the created Legacy TOC1 objects for future reference. + RPointerArray iLegacyTOC1List; + }; + +#endif \ No newline at end of file diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/inc/CSXHLegacyTOC1.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/inc/CSXHLegacyTOC1.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,88 @@ +/* +* 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 "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: CCSXHLegacyTOC1 class declaration +* +*/ + + +#ifndef INC_CSXHLEGACYTOC1_H_HEADER_INCLUDED_BC050894 +#define INC_CSXHLEGACYTOC1_H_HEADER_INCLUDED_BC050894 + +#include "CSXHGenericTOC1.h" + +class CCSXHGenericContentParser; +class CCSXHHelpDataBase; +/** +* @class CCSXHLegacyTOC1 +* This class has the information of Legacy TOC1 +*/ +class CCSXHLegacyTOC1 : public CCSXHGenericTOC1 + { + public: +/** +* @function NewL +* @since S60 3.2 +* Construct a CCSXHLegacyTOC1 +* and return a pointer to the created object +* @param aName - Name of the TOC1 +* @return a CCSXHLegacyTOC1 Pointer +*/ + static CCSXHLegacyTOC1* NewL(const TDesC& aName); + +/** +* @function NewLC +* @since S60 3.2 +* Construct a CCSXHLegacyTOC1 +* and return a pointer to the created object using two phase contruction +* @param aName - Name of the TOC1 +* @return a CCSXHLegacyTOC1 Pointer +*/ + static CCSXHLegacyTOC1* NewLC(const TDesC& aName); + +/** +* @function GetViewID +* @since S60 3.2 +* Get ViewId to activate the View +* @return View Id +*/ + TUid GetViewID() const; + +/** +* @function GetContextTopic +* @since S60 3.2 +* Get toc2 Object +* @return CCSXHHelpContentBase (Leagcytoc2) class Pointer +*/ + CCSXHHelpContentBase* GetContextTopic(const TDesC &aContextName); + + private: +/** +* @function CCSXHLegacyTOC1 +* @since S60 3.2 +* Construct a CCSXHLegacyTOC1 +*/ + CCSXHLegacyTOC1(const TDesC& aName); + +/** +* @function InitChildList +* @since S60 3.2 +* Allocates Memory in order to store Objects +*/ + void InitChildList(); + + }; + + + +#endif /* INC_CSXHLEGACYTOC1_H_HEADER_INCLUDED_BC050894 */ diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/inc/CSXHLegacyTOC2.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/inc/CSXHLegacyTOC2.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,100 @@ +/* +* 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 "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: CCSXHLegacyTOC2 class declaration +* +*/ + + +#ifndef INC_CSXHLEGACYTOC2_H_HEADER_INCLUDED_BC0535B9 +#define INC_CSXHLEGACYTOC2_H_HEADER_INCLUDED_BC0535B9 + +#include "CSXHGenericTOC2.h" + +class CCSXHGenericTOC1; +class CCSXHLegacyTOC1; +/** +* @class CCSXHLegacyTOC2 +* This class has the information of Legacy TOC2 Info +*/ +class CCSXHLegacyTOC2 : public CCSXHGenericTOC2 + { + public: +/** +* @function NewL +* @since S60 3.2 +* Construct a CCSXHLegacyTOC2 +* and return a pointer to the created object +* @param aParent - TOC1 Object +* aName - Name of the TOC2 +* aKey - ETrue for KeywordTopic, EFalse otherwise +* @return a CCSXHLegacyTOC2 Pointer +*/ + static CCSXHLegacyTOC2* NewL(CCSXHGenericTOC1 *aParent,const TDesC& + aName,TBool aKey=EFalse); + +/** +* @function NewLC +* @since S60 3.2 +* Construct a CCSXHLegacyTOC2 +* and return a pointer to the created object using two phase constuction +* @param aParent - TOC1 Object +* aName - Name of the TOC2 +* aKey - ETrue for KeywordTopic, EFalse otherwise +* @return a CCSXHLegacyTOC2 Pointer +*/ + static CCSXHLegacyTOC2* NewLC(CCSXHGenericTOC1 *aParent,const TDesC& + aName,TBool aKey=EFalse); + +/** +* @function GetTopicContentL +* @since S60 3.2 +* Get the topic to be displayed in Richtext format +* @return RichText Pointer +*/ + IMPORT_C TAny* GetTopicContentL(); + +/** +* @function GetViewID +* @since S60 3.2 +* Get ViewId to activate the View +* @return View Id +*/ + TUid GetViewID() const; + +/** +* @function GetLegacyParent +* @since S60 3.2 +* Get Parent Object +* @return TOC1 Object(Parent) for present TOC2 Object +*/ + IMPORT_C CCSXHLegacyTOC1* GetLegacyParent(); + + private: +/** +* @function CCSXHLegacyTOC2 +* @since S60 3.2 +* Construct a CCSXHLegacyTOC2 +* @param aRect - TRect Object +* @param aParent - TOC1 Object +* aName - Name of the TOC2 +* aKey - ETrue for KeywordTopic, EFalse otherwise +*/ + CCSXHLegacyTOC2(CCSXHGenericTOC1 *aParent, const TDesC& aName,TBool aKey); + + TBool iKeyWordTopic; + }; + + + +#endif /* INC_CSXHLEGACYTOC2_H_HEADER_INCLUDED_BC0535B9 */ diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/inc/CSXHMainTopics.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/inc/CSXHMainTopics.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,84 @@ +/* +* 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 "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: CCSXHMainTopics class declaration +* +*/ + + +#ifndef INC_CSXHMAINTOPICS_H_HEADER_INCLUDED_BC0568C5 +#define INC_CSXHMAINTOPICS_H_HEADER_INCLUDED_BC0568C5 + +#include "CSXHGenericTOC1.h" +#include + +class CCSXHHelpDataBase; +/** +* @class CCSXHMainTopics +* This class has info of TOC1 Objects +*/ +class CCSXHMainTopics : public CCSXHGenericTOC1 + { + public: +/** +* @function CCSXHMainTopics +* @since S60 3.2 +* Construct a CCSXHMainTopics +* @param aCoeEnv - Control Environment +* @retrun a CCSXHMainTopics pointer +*/ + static CCSXHMainTopics* NewL(const TUid&, const TApaAppCaption& aAppCaption); +/** +* @function CCSXHMainTopics +* @since S60 3.2 +* Construct a CCSXHMainTopics using two phase construction +* @param aCoeEnv - Control Environment +* @retrun a CCSXHMainTopics pointer +*/ + static CCSXHMainTopics* NewLC(const TUid&,const TApaAppCaption& aAppCaption); + +/** + * @function ~CCSXHMainTopics + * @since S60 3.2 + * Destroy the object and release all memory objects + */ + ~CCSXHMainTopics(); +/** +* @function GetViewID +* @since S60 3.2 +* Get ViewId to activate the View +* @return View Id +*/ + TUid GetViewID() const; +/** +* @function ResetChildList +* @since S60 3.2 +* Delete Objects from the Array +*/ + void ResetChildList(); + + protected: + +/** +* @function CCSXHMainTopics +* @since S60 3.2 +* Construct a CCSXHMainTopics +* @param aUid - Application Uid +* aName - TOC1 Object Name +*/ + CCSXHMainTopics(const TUid& aUid, const TDesC& aName); + + const TUid &iUid; + }; + +#endif /* INC_CSXHMAINTOPICS_H_HEADER_INCLUDED_BC0568C5 */ diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/inc/CSXHRuntimeIndexing.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/inc/CSXHRuntimeIndexing.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,160 @@ +/* +* 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 "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: This is a utility class that provides functionality +* for scanning app help folder, generate index XML +* at runtime, and also update it if any install/uninstall +* +*/ + +#ifndef CSXHRUNTIMEINDEXING_H +#define CSXHRUNTIMEINDEXING_H + +// INCLUDES +#include +#include + +// CONSTANTS +// the help content folder doesn't exist +const TInt KNoDirExist = -3; +// there is no changes in help content folder (like install/uninstall) +const TInt KNoChange = -2; +// there is no index.xml file (due to no help content at previous time) +const TInt KNoIndexExist = -1; + +// FORWARD CLASS DECLARATION +class CCSXHHtmlTOC1; +class CCSXHKywdTOC1; +class CCoeEnv; + +/* + * runtime indexing handling class + * responsible for generating index file, maintaining it. + * this class also create CS X Help private folder if not exist + * + */ +class CCSXHRuntimeIndexing : public CBase + { +public: + + /* + * constructor + */ + CCSXHRuntimeIndexing(); + /* + + * destructor + */ + ~CCSXHRuntimeIndexing(); + + /* + * Two-phase constructor + */ + static CCSXHRuntimeIndexing* NewL(); + + /* + * Generate the master index file content + * @param aToc1: TOC1 object which contains main topic information + * @param aFeature: Feature information, supported by Feature Mgr + */ + void RuntimeGenerateIndexL( const CCSXHHtmlTOC1& aToc1, const TDesC& aFeature ); + + /* + * Check whether master index exist + * Since Z based helps must exist + * Usage: to determine Help was launched before + */ + TBool IndexFileExists(); + + /* + * create temporary index file + * this file will be saved to C:\\private\\\\\\\\ + * @param: aDrive Drive information + */ + void BeginIndexFile( const TChar& aDrive ); + + /* + * close the temporary index file, and rename it to index.xml formally + * tmp.xml -> index.xml + * this function can backup index.xml, once exception happens + */ + void FinishAndCloseIndexFileL(); + + /* + * Get help application private path in C drive + * @param aName[out] return help app private path in C + */ + void GetPrivatePath( TDes& aName ); + + /* + * Get proper locale, and append it to descriptor + * for more information about proper locale + * please refer to BaflUtils::GetDowngradePathL + * @param aDir[out] append proper locale + */ + void AppendLocale( TDes& aDir ); + + /* + * Delete master index file, particular in C: or E: or F: (user disk) + * this will only occur when user remove all custom helps, no more helps folder + * in this case, custom index mustn't exist. + * @param aDrive the file to be deleted + */ + void DeleteIndexFile( const TChar& aDrive ); + + /* + * Check if helps folder changed + * changes include: + * A: install new application + * B: uninstall (if unistall all helps, custom helps folder will also removed) + * C: user changed the language + * D: user restored the cell phone + * @param aName[out] return help app private path in C + */ + TInt CheckDirChange( const TChar& aDrive ); + +private: + + /* + * two-phase constructor, private + */ + void ConstructL(); + +private: + + /* + * buff current index file name + * owned + */ + HBufC* iFullDirName; + + /* + * CoeEnv + * not owned + */ + CCoeEnv * iCoeEnv; + + /* + * current index file handle + */ + RFile iFile; + + /* + * actually it's iFullDirName's drive letter + * for more convenient, keep it as a class member + */ + TChar iDriveLetter; + + }; + +#endif // CSXHRUNTIMEINDEXING_H \ No newline at end of file diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/inc/CSXHViewIDs.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/inc/CSXHViewIDs.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,34 @@ +/* +* 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 "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: This file contains ViewIds +* +*/ + + +#ifndef INC_CSXHVIEWIDS_H_HEADER_INCLUDED_BC05356D +#define INC_CSXHVIEWIDS_H_HEADER_INCLUDED_BC05356D + +#include + +const TUid KCSXHToc1ViewID = {1}; +const TUid KCSXHToc2ViewID = {2}; +const TUid KCSXHHtmlTopicViewID = {3}; +const TUid KCSXHLegacyTopicViewID = {4}; +const TUid KCSXHKywdToc1ViewID = {5}; +const TUid KCSXHKywdToc2ViewID = {6}; +const TUid KCSXHContextHtmlTopicViewID = {7}; +const TUid KCSXHContextLegacyTopicViewID = {8}; + + +#endif /* INC_CSXHVIEWIDS_H_HEADER_INCLUDED_BC05356D */ diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/inc/CSXHXMLParseHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/inc/CSXHXMLParseHandler.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,486 @@ +/* +* 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 "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: CCSXHXMLParseHandler class declaration +* +*/ + + +#ifndef __CCSXHXMLPARSEHANDLER_H__ +#define __CCSXHXMLPARSEHANDLER_H__ + +#include // CCoeControl +#include +#include +#include + +class CCSXHGenericTOC2; +class CCSXHGenericTOC1; +class CCSXHHtmlTOC1; +class CCSXHHelpDataBase; +class CCSXHHelpContentBase; +class CCSXHHTMLContentParser; +/** +* @class CCSXHXMLParseHandler +* This class is used retrive the data from XML file +*/ +class CCSXHXMLParseHandler : public CBase, public MSenContentHandlerClient + { + public: +/** +* @function CCSXHXMLParseHandler +* @since S60 3.2 +* Construct a CCSXHXMLParseHandler +* @param aCoeEnv - Control Environment +*/ + CCSXHXMLParseHandler(CCoeEnv * aCoeEnv); + + virtual ~CCSXHXMLParseHandler(); +/** +* @function StartDocument +* @since S60 3.2 +* Receive notification of the beginning of a document. +* @return KErrNone or some of the system-wide Symbian error codes +*/ + TInt StartDocument(); +/** +* @function EndDocument +* @since S60 3.2 +* Receive notification of the end of a document. +* @return KErrNone or some of the system-wide Symbian error codes +*/ + TInt EndDocument(); + +/** +* @function SetDataBasePtr +* @since S60 3.2 +* Sets DataBase Pointer +*/ + void SetDataBasePtr(CCSXHHelpDataBase *aDataBase); +/** +* @function GetApplicationName +* @since S60 3.2 +* Get the Application Name from Meta.xml +* @return Application Name +*/ + TDesC& GetApplicationName(); + + TPtr GetFeatureIds(); + + protected: +/** +* @function SetAppNameFlagL +* @since S60 3.2 +* Set the Application Flag Based on local Name, ResourceID +* @param alocalName - TagName read from XML file +* ResourceId - Used to Retrive the TagName from resource file +*/ + TBool SetAppNameFlag(const TDesC8 & alocalName,const TDesC& aAppTag); + + protected: + TBuf iApplicationName; + HBufC* iFeatureIds; + TBool iIsAppName; + CCSXHHelpDataBase* iDataBase; + CCoeEnv* iCoeEnv; + + }; + + +/** +* @class CCSXHXMLParseHandler_MetaFile +* This class is used retrive the data from Meta.xml file +*/ +class CCSXHXMLParseHandler_MasterMetaFile : public CCSXHXMLParseHandler + { + public: +/** +* @function NewL +* @since S60 3.2 +* Construct a CCSXHXMLParseHandler_IndexFile +* @param aCoeEnv - Control Environment +* @retrun a CCSXHXMLParseHandler_IndexFile pointer +*/ + static CCSXHXMLParseHandler_MasterMetaFile* NewL(CCoeEnv * aCoeEnv); + protected: +/** +* @function CCSXHXMLParseHandler_IndexFile +* @since S60 3.2 +* Construct a CCSXHXMLParseHandler_IndexFile +* @param aCoeEnv - Control Environment +*/ + CCSXHXMLParseHandler_MasterMetaFile(CCoeEnv * aCoeEnv); + public: +/** +* @function StartElement +* @since S60 3.2 +* Receive notification of the beginning of an element +* @param aURI - The Namespace URI, or the empty string + if the element has no Namespace URI or + if Namespace processing is not being performed. + aLocalName - The local name (without prefix) + aName - The qualified name + apAttrs - The attributes attached to the element. + If there are no attributes, it shall be + an empty array.Namespaces declared in the current + element will be located in the array also +* @return KErrNone or some of the system-wide Symbian error codes +*/ + TInt StartElement (const TDesC8 &aURI, const TDesC8 &aLocalName, + const TDesC8 &aName, const RAttributeArray &apAttrs); +/** +* @function SetHtmlContentParserPtr +* @since S60 3.2 +* Set the pointer of the content parser +* @param aParser - Pointer to an html content parser +*/ + void SetHtmlContentParserPtr(CCSXHHTMLContentParser* aParser); + + private: +/** +* @function CreateTOC2ObjectsL +* @since S60 3.2 +* Create TOC2 objects for Html TOC2 +* @param aAttributes - The attributes attached to the element. +*/ + void CreateTOC1ObjectsL(const RAttributeArray & aAttributes); + + CCSXHHTMLContentParser *iParser; + + TInt iDrive; + }; + +/** +* @class CCSXHXMLParseHandler_MetaFile +* This class is used retrive the data from Meta.xml file +*/ +class CCSXHXMLParseHandler_MetaFile : public CCSXHXMLParseHandler + { + public: +/** +* @function CCSXHXMLParseHandler_MetaFile +* @since S60 3.2 +* Construct a CCSXHXMLParseHandler_MetaFile +* @param aCoeEnv - Control Environment +* @retrun a CCSXHXMLParseHandler_MetaFile pointer +*/ + static CCSXHXMLParseHandler_MetaFile* NewL(CCoeEnv * aCoeEnv); + protected: +/** +* @function CCSXHXMLParseHandler_MetaFile +* @since S60 3.2 +* Construct a CCSXHXMLParseHandler_MetaFile +* @param aCoeEnv - Control Environment +*/ + CCSXHXMLParseHandler_MetaFile(CCoeEnv * aCoeEnv); + public: +/** +* @function StartElement +* @since S60 3.2 +* Receive notification of the beginning of an element +* @param aURI - The Namespace URI, or the empty string + if the element has no Namespace URI or + if Namespace processing is not being performed. + aLocalName - The local name (without prefix) + aName - The qualified name + apAttrs - The attributes attached to the element. + If there are no attributes, it shall be + an empty array.Namespaces declared in the current + element will be located in the array also +* @return KErrNone or some of the system-wide Symbian error codes +*/ + TInt StartElement (const TDesC8 &aURI, const TDesC8 &aLocalName, + const TDesC8 &aName, const RAttributeArray &apAttrs); +/** +* @function EndElement +* @since S60 3.2 +* Receive notification of the end of an element +* @param aURI - The Namespace URI, or the empty string + if the element has no Namespace URI or + if Namespace processing is not being performed. + aLocalName - The local name (without prefix) + aName - The qualified name +* @return KErrNone or some of the system-wide Symbian error codes +*/ + TInt EndElement ( const TDesC8 &aURI,const TDesC8 &aLocalName,const TDesC8 &aName); +/** +* @function Characters +* @since S60 3.2 +* Receive notification inside an element +* @param aBuff - The characters. +* aStart - The start position in the character buffer. +* aLength - The number of characters to use from the character buffer. +* @return KErrNone or some of the system-wide Symbian error codes +*/ + TInt Characters (const TDesC8 &aBuff, const TInt aStart, + const TInt aLength); + }; + +class CCSXHXMLParseHandler_IndexFile : public CCSXHXMLParseHandler + { + public: +/** +* @function NewL +* @since S60 3.2 +* Construct a CCSXHXMLParseHandler_IndexFile +* @param aCoeEnv - Control Environment +* @retrun a CCSXHXMLParseHandler_IndexFile pointer +*/ + static CCSXHXMLParseHandler_IndexFile* NewL(CCoeEnv * aCoeEnv); + protected: +/** +* @function CCSXHXMLParseHandler_IndexFile +* @since S60 3.2 +* Construct a CCSXHXMLParseHandler_IndexFile +* @param aCoeEnv - Control Environment +*/ + CCSXHXMLParseHandler_IndexFile(CCoeEnv * aCoeEnv); + public: +/** +* @function StartElement +* @since S60 3.2 +* Receive notification of the beginning of an element +* @param aURI - The Namespace URI, or the empty string + if the element has no Namespace URI or + if Namespace processing is not being performed. + aLocalName - The local name (without prefix) + aName - The qualified name + apAttrs - The attributes attached to the element. + If there are no attributes, it shall be + an empty array.Namespaces declared in the current + element will be located in the array also +* @return KErrNone or some of the system-wide Symbian error codes +*/ + TInt StartElement (const TDesC8 &aURI, const TDesC8 &aLocalName, + const TDesC8 &aName, const RAttributeArray &apAttrs); +/** +* @function SetArray +* @since S60 3.2 +* Get the pointer & fill the contents from Index.xml +* @param aHTMLlist - Pointer to an Array +*/ + void SetArray(RPointerArray *aHTMLlist); +/** +* @function SetGenericTOC1Object +* @since S60 3.2 +* Set GenericTOC1 Object +* @param aParent - Generic TOC1 Object +*/ + void SetGenericTOC1Object(CCSXHGenericTOC1& aParent); +/** +* @function SetPath +* @since S60 3.2 +* Set Html file path +* @param aFilePath - Set Html file path +*/ + void SetPath(const TDesC& aFilePath); + + void SetHtmlContentParserPtr(CCSXHHTMLContentParser* aParser); + private: +/** +* @function CreateTOC2ObjectsL +* @since S60 3.2 +* Create TOC2 objects for Html TOC2 +* @param aAttributes - The attributes attached to the element. +*/ + void CreateTOC2ObjectsL(const RAttributeArray & aAttributes); + TBuf iCompressString,iHTMLPageName,iFilePath; + RPointerArray* iTOC2Array; + CCSXHGenericTOC1* iParent; + CCSXHHTMLContentParser *iParser; + }; + + +class CCSXHXMLParseHandler_Kywd : public CCSXHXMLParseHandler + { + public: +/** +* @function NewL +* @since S60 3.2 +* Construct a CCSXHXMLParseHandler_Kywd +* @param aCoeEnv - Control Environment +* @retrun a CCSXHXMLParseHandler_Kywd pointer +*/ + static CCSXHXMLParseHandler_Kywd* NewL(CCoeEnv * aCoeEnv); + protected: +/** +* @function CCSXHXMLParseHandler_Kywd +* @since S60 3.2 +* Construct a CCSXHXMLParseHandler_Kywd +* @param aCoeEnv - Control Environment +*/ + CCSXHXMLParseHandler_Kywd(CCoeEnv * aCoeEnv); + public: +/** +* @function StartElement +* @since S60 3.2 +* Receive notification of the beginning of an element +* @param aURI - The Namespace URI, or the empty string + if the element has no Namespace URI or + if Namespace processing is not being performed. + aLocalName - The local name (without prefix) + aName - The qualified name + apAttrs - The attributes attached to the element. + If there are no attributes, it shall be + an empty array.Namespaces declared in the current + element will be located in the array also +* @return KErrNone or some of the system-wide Symbian error codes +*/ + TInt StartElement (const TDesC8 &aURI, const TDesC8 &aLocalName, + const TDesC8 &aName, const RAttributeArray &apAttrs); +/** +* @function EndElement +* @since S60 3.2 +* Receive notification of the end of an element +* @param aURI - The Namespace URI, or the empty string + if the element has no Namespace URI or + if Namespace processing is not being performed. + aLocalName - The local name (without prefix) + aName - The qualified name +* @return KErrNone or some of the system-wide Symbian error codes +*/ + TInt EndElement ( const TDesC8 &aURI,const TDesC8 &aLocalName,const TDesC8 &aName); +/** +* @function Characters +* @since S60 3.2 +* Receive notification inside an element +* @param aBuff - The characters. +* aStart - The start position in the character buffer. +* aLength - The number of characters to use from the character buffer. +* @return KErrNone or some of the system-wide Symbian error codes +*/ + TInt Characters (const TDesC8 &aBuff, const TInt aStart, + const TInt aLength); + +/** +* @function SetTOC1Title +* @since S60 3.2 +* Set TOC1 Name +* @param aName - TOC1 Name +*/ + void SetTOC1Title(const TDesC& aName); +/** +* @function SetCurrentHtmlToc1 +* @since S60 3.2 +* Set HtmlTOC1 Object +* @param aCurrentHtmlToc1 - Pointyer to HtmlTOC1 Object +*/ + void SetCurrentHtmlToc1(CCSXHHtmlTOC1 *aCurrentHtmlToc1); +/** +* @function SetIsTOC2 +* @since S60 3.2 +* Set the flag if parsing in order to get TOC2 Objects, EFalse otherwise +* @param aCurrentHtmlToc1 - Pointer to HtmlTOC1 Object +*/ + void SetIsTOC2(TBool aFlag); + +/** +* @function SetPath +* @since S60 3.2 +* Set Html file path +* @param aFilePath - Set Html file path +*/ + void SetPath(const TDesC& aFilePath); + + void SetHtmlContentParserPtr(CCSXHHTMLContentParser* aParser); + + private: +/** +* @function CreateTOC2ObjectsforKeywordSearch +* @since S60 3.2 +* Get the Info In order to Create TOC2 objects for Html Keyword +* @param aName - TagName +* aAttrs - The attributes attached to the element. +*/ + void CreateTOC2ObjectsforKeywordSearch(const TDesC8 &aName,const RAttributeArray& aAttrs); +/** +* @function CreateTOC2ObjectsforKeywordSearchL +* @since S60 3.2 +* Creates TOC2 objects for Html Keyword And Insert into Database +*/ + void CreateAndInsertKywdL(); + TBuf iHTMLPageName,iKeywordSearchTOC2TitleName; + TBuf iTOC1Name,iFilePath; + CCSXHHtmlTOC1 *iCurrentHtmlToc1; + TBool iIsTargetName,iIsTOC2View; + CCSXHHTMLContentParser* iParser; + }; + +class CCSXHXMLParseHandler_MasterKywd : public CCSXHXMLParseHandler + { + public: +/** +* @function NewL +* @since S60 3.2 +* Construct a CCSXHXMLParseHandler_Kywd +* @param aCoeEnv - Control Environment +* @retrun a CCSXHXMLParseHandler_Kywd pointer +*/ + static CCSXHXMLParseHandler_MasterKywd* NewL(CCoeEnv * aCoeEnv); + protected: +/** +* @function CCSXHXMLParseHandler_Kywd +* @since S60 3.2 +* Construct a CCSXHXMLParseHandler_Kywd +* @param aCoeEnv - Control Environment +*/ + CCSXHXMLParseHandler_MasterKywd(CCoeEnv * aCoeEnv); + + public: +/** +* @function StartElement +* @since S60 3.2 +* Receive notification of the beginning of an element +* @param aURI - The Namespace URI, or the empty string + if the element has no Namespace URI or + if Namespace processing is not being performed. + aLocalName - The local name (without prefix) + aName - The qualified name + apAttrs - The attributes attached to the element. + If there are no attributes, it shall be + an empty array.Namespaces declared in the current + element will be located in the array also +* @return KErrNone or some of the system-wide Symbian error codes +*/ + TInt StartElement (const TDesC8 &aURI, const TDesC8 &aLocalName, + const TDesC8 &aName, const RAttributeArray &apAttrs); +/** +* @function CreateTOC1ObjectsL +* @since S60 3.2 +* Create TOC1 objects for Keywords +* @param aAttributes - The attributes attached to the element. +*/ + void CreateTOC1ObjectsL(const RAttributeArray& aAttributes); + +/** +* @function SetCurrentHtmlToc1 +* @since S60 3.2 +* Set HtmlTOC1 Object +* @param aCurrentHtmlToc1 - Pointyer to HtmlTOC1 Object +*/ + void SetCurrentHtmlToc1(CCSXHHtmlTOC1 *aCurrentHtmlToc1); + +/** +* @function SetHtmlContentParserPtr +* @since S60 3.2 +* Set the pointer of the content parser +* @param aParser - Pointer to an html content parser +*/ + void SetHtmlContentParserPtr(CCSXHHTMLContentParser* aParser); + + + private: + CCSXHHtmlTOC1 *iCurrentHtmlToc1; + CCSXHHTMLContentParser *iParser; + }; +#endif diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/inc/CsHelpCmdLineParser.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/inc/CsHelpCmdLineParser.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,89 @@ +/* +* 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 "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: This is a utility class that provides functionality +* for parsing command line arguments passed into the +* Cshelp application when launched by another application. +* +*/ + + +#ifndef CSHELPCMDLINEPARSER_H +#define CSHELPCMDLINEPARSER_H + + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class TCoeHelpContext; + +// CLASS DECLARATION +/** +* CCsHlpCmdLineParser class. +* to convert a message - that is passed from other app - to contexts +* @lib euser.lib +* @since 3.2 +*/ +class CCsHlpCmdLineParser : public CBase + { + public: + +/** +* @function CCsHlpCmdLineParser +* @since S60 3.2 +* Perform the first phase of two phase construction +*/ CCsHlpCmdLineParser(); + +/** +* @function ConstructL +* @since S60 3.2 +* Perform the second phase construction of a CCsHlpCmdLineParser object +*/ void ConstructL(const TDesC8& aCmdLine); + +/** +* @function ~CCsHlpCmdLineParser +* @since S60 3.2 +* Destroy the object and release all memory objects +*/ + ~CCsHlpCmdLineParser(); + + public: +/** +* Get contexts array +* @function ContextListL +* @since S60 3.2 +* @return help context array +*/ + CArrayFix* ContextListL(); + + private: +/** +* Get the help Context object +* @function GetContext +* @since S60 3.2 +* @param aContext - Help context object +*/ + void GetContext(TCoeHelpContext& aContext); + + private: + // Parsed data to help context array. + CBufFlat* iCmdLine; + + // Position of iCmdLine + TInt iPos; + }; + +#endif // CSHELPCMDLINEPARSER_H + +// End of File diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/inc/csxhconstants.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/inc/csxhconstants.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,171 @@ +/* +* 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 "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: This file Contains Constants +* +*/ + + +_LIT(KEmptyString,""); +_LIT(KFwdSlash,"\\"); +_LIT(KBackSlash,"/"); +_LIT(KTabSpace,"\t"); +_LIT(KHexPrefix,"0x"); +_LIT(KZero,"0"); +_LIT(KZipFileExtn,".zip"); +_LIT(KHtmlFileExtn,".html"); +_LIT(KContentZipFile,"contents.zip"); +_LIT(KCsstext_First,"\n"); + +#ifdef FF_HELP_TUTORIAL_MERGE +_LIT(KTutorialFileExtn,".tut"); +#endif // FF_HELP_TUTORIAL_MERGE +#ifndef __SERIES60_30__ +_LIT(KFileUrlPrefix,"file:///"); +const TInt KFileUrlPrefixLength = 8; +#else +_LIT(KFileUrlPrefix,"file://"); +const TInt KFileUrlPrefixLength = 7; +#endif + +const TInt KHexPrefixLength = 2; + +//xhtml folder name +//#define qtn_app_xhtml_folder_text ":\\resource\\xhtml\\" +_LIT(KXhtmlFolder,":\\resource\\xhtml\\"); + +//masterkeywords.xml file name +_LIT(KMasterKywdFile,"keywords.xml"); + +//mastermeta.xml file name +_LIT(KMasterMetaFile,"index.xml"); + +//meta.xml file name +//#define qtn_app_meta_file_text "meta.xml" +_LIT(KMetaFile,"meta.xml"); + +//index.xml file name +//#define qtn_app_index_file_text "index.xml" +_LIT(KIndexFile,"index.xml"); + +//Application name tag in meta.xml +//#define qtn_app_application_name_tag_text "title" +_LIT(KAppNameTag,"title"); + +// toc1 drive information in master index.xml +// +_LIT( KDriveInfo, "drive"); + +// toc1 tag in master index.xml +// +_LIT( KAppFeatureIDTag,"FeatureID" ); + +//toc2title tag in index.xml +//#define qtn_app_toc2title_name_tag_text "navtitle" +_LIT(KTOC2NameTag,"navtitle"); + +//html page tag in index.xml +//#define qtn_app_htmlpage_name_tag_text "href" +_LIT(KHtmlPageTag,"href"); + +//#define qtn_app_compress_name_tag_text "compressed" +_LIT(KCompressedTag,"compressed"); + +//#define qtn_app_compress_name_tag_value_text "true" +_LIT(KCompressedTagText,"true"); + +//#define qtn_app_searchview_toc1title_tag_text "text" +_LIT(KSearchViewTOC1Tag,"text"); +//#define qtn_app_searchview_toc2title_tag_text "target" +_LIT(KSearchViewTOC2Tag,"target"); +//#define qtn_app_kywd_file_text "keywords.xml" +_LIT(KKeywordsFile,"keywords.xml"); + +_LIT(KMasterSearchTag,"keyword"); + +_LIT(KMasterCollectionTag,"collection"); + +_LIT(KMasterCollection_idTag,"id"); + +// Begin runtime indexing schema + +const TInt KMaxIndexEntryExclude = 200; + +const TInt KMaxUidLength = 10; + +// sis install path +// +//_LIT( KInstallPath, "?:\\data\\"); +_LIT( KInstallPath, ":\\resource\\xhtml\\"); + +// initial file's name +// +_LIT( KInitFileName, "helpinit.txt" ); + +// Index.xml version and encoding information +// +_LIT8( KIndexXMLVesion, "\r\n" ); + +// Collection ends +// +_LIT8( KIndexCollectEnd, "" ); + +// Begin of collection entry +// +_LIT8( KIndexXMLEntryBegin, " \r\n"); + +// Prefix of quotation mark +// +_LIT8( KIndexQuoteBegin, "=\""); + +// appendix of quotation mark +// +_LIT8( KIndexQuoteEnd, "\" "); + + +_LIT( KMasterMetaTmpFile,"tmp.xml" ); diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/rss/HelpEngine.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/rss/HelpEngine.rss Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,155 @@ +/* +* Copyright (c) 2002 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: +* +*/ + +*/ + +NAME HELL +#include +#include +#include + +NAME HE +// --------------------------------------------------------- +// +// Define the resource file signature +// This resource should be empty. +// +// --------------------------------------------------------- +// +RESOURCE RSS_SIGNATURE { } + +RESOURCE TBUF { buf=""; } +// --------------------------------------------------------- +// +// Define default menu and CBA key. +// +// --------------------------------------------------------- +// + +// +/// Folder Name Texts: +// Their content is at the loc-file + +STRUCT STRING + { + LTEXT text; + } + +RESOURCE TBUF r_type_xhtml_folder_name + { + buf = qtn_app_xhtml_folder_text; + } + +// +/// Meta FileName Texts: +// Their content is at the loc-file + +RESOURCE TBUF r_type_meta_file_name + { + buf = qtn_app_meta_file_text; + } + +// +/// Index FileName Texts: +// Their content is at the loc-file + +RESOURCE TBUF r_type_index_file_name + { + buf = qtn_app_index_file_text; + } + +// +/// Keywordsearch FileName Texts: +// Their content is at the loc-file +RESOURCE TBUF r_type_kywd_file_name + { + buf = qtn_app_kywd_file_text; + } + +// +/// Forward slash: +// Their content is at the loc-file +RESOURCE TBUF r_type_forward_slash + { + buf = qtn_app_forward_slash_text; + } + +// +/// ApplicationName Tag Texts: +// Their content is at the loc-file + +RESOURCE TBUF r_type_application_tag_name + { + buf = qtn_app_application_name_tag_text; + } + +// +/// Index FileName Texts: +// Their content is at the loc-file + +RESOURCE TBUF r_type_toc2title_tag_name + { + buf = qtn_app_toc2title_name_tag_text; + } + +// +/// Index FileName Texts: +// Their content is at the loc-file + +RESOURCE TBUF r_type_htmlpage_tag_name + { + buf = qtn_app_htmlpage_name_tag_text; + } + +// +/// Index FileName Texts: +// Their content is at the loc-file + +RESOURCE TBUF r_type_compress_tag_name + { + buf = qtn_app_compress_name_tag_text; + } + +// +/// Index FileName Texts: +// Their content is at the loc-file +RESOURCE TBUF r_type_compress_tag_value_name + { + buf = qtn_app_compress_name_tag_value_text; + } + +// +/// keywordsearch FileName Texts: +// Their content is at the loc-file +RESOURCE TBUF r_type_searchview_toc1title_tag_name + { + buf = qtn_app_searchview_toc1title_tag_text; + } + +// +/// keywordsearch FileName Texts: +// Their content is at the loc-file +RESOURCE TBUF r_type_searchview_toc2title_tag_name + { + buf = qtn_app_searchview_toc2title_tag_text; + } + +RESOURCE TBUF r_type_title_help + { + buf = qtn_help_title_hel; + } + diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/src/CSXHContextTopic.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/src/CSXHContextTopic.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,58 @@ +/* +* 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 "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: CCSXHContextTopic class definition +* +*/ + +#include "CSXHContextTopic.h" +#include "CSXHViewIDs.h" +#include "csxhconstants.h" + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +CCSXHContextTopic* CCSXHContextTopic::NewL(CCSXHHelpContentBase* aToc2) + { + CCSXHContextTopic* self = new(ELeave) CCSXHContextTopic(aToc2); + return self; + } +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +CCSXHContextTopic::CCSXHContextTopic(CCSXHHelpContentBase* aToc2): +CCSXHHelpContentBase(KEmptyString),iToc2(aToc2) + {//No Implementation required + } +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +CCSXHContextTopic::~CCSXHContextTopic() + { + } +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +TUid CCSXHContextTopic::GetViewID() const + { + return iToc2->GetViewID() == KCSXHHtmlTopicViewID ? + KCSXHContextHtmlTopicViewID : KCSXHContextLegacyTopicViewID; + } +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +EXPORT_C CCSXHHelpContentBase* CCSXHContextTopic::GetTopic() + { + return iToc2; + } + diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/src/CSXHGenericTOC1.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/src/CSXHGenericTOC1.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,151 @@ +/* +* 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 "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: CCSXHGenericTOC1 class definition +* +*/ + +#include "CSXHGenericTOC1.h" +#include "csxhconstants.h" + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +CCSXHGenericTOC1::CCSXHGenericTOC1(const TDesC& aName): + CCSXHHelpContentBase(aName),iChildList(NULL) + {//No Implementation required + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +CCSXHGenericTOC1::~CCSXHGenericTOC1() + { + ResetChildList(); + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +void CCSXHGenericTOC1::ResetChildList() + { + if(iChildList == NULL) + return; + TInt count = iChildList->Count(); + CCSXHHelpContentBase* toc2; + for(TInt i=0;iReset(); + delete iChildList; + iChildList = NULL; + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +void CCSXHGenericTOC1::ConstructChildListL() + { + iChildList = new(ELeave) RPointerArray(); + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +EXPORT_C CCSXHHelpContentBase* CCSXHGenericTOC1::GetChildL(const TDesC& aName) + { + if(iChildList == NULL) + return NULL; + + TInt count = iChildList->Count(); + CCSXHHelpContentBase* child = NULL; + for(TInt i=0;iGetName())==0) + return child; + } + return NULL; + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +EXPORT_C void CCSXHGenericTOC1::FillChildDataL(CDesCArray* aArray) + { + //Using Template Pattern. Both the functions below are virtual + InitChildList(); + CopyChildListL(aArray); + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +TBool CCSXHGenericTOC1::InsertChild(CCSXHHelpContentBase* aChild, +TBool aDeleteObject) + { + ConstructChildList(); + TLinearOrder anOrder(Orderer); + if (KErrNone != iChildList->InsertInOrder(aChild,anOrder)) + { + if(aDeleteObject) + delete aChild; + + return EFalse; + } + return ETrue; + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +void CCSXHGenericTOC1::CopyChildListL(CDesCArray* aArray) + { + TInt count = iChildList->Count(); + CCSXHHelpContentBase* child; + for(TInt i=0;i toc2Entry(KTabSpace); + toc2Entry.Append(child->GetName()); + aArray->AppendL(toc2Entry); + } + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +void CCSXHGenericTOC1::InitChildList() + { + ConstructChildList(); + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +TBool CCSXHGenericTOC1::ConstructChildList() + { + if(iChildList != NULL) + return ETrue; + + TRAPD(err,ConstructChildListL()); + if(err == KErrNone) + return ETrue; + else + { + iChildList = NULL; + return EFalse; + } + } diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/src/CSXHGenericTOC2.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/src/CSXHGenericTOC2.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,35 @@ +/* +* 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 "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: CCSXHGenericTOC2 class definition +* +*/ + +#include "CSXHGenericTOC2.h" + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +CCSXHGenericTOC2::CCSXHGenericTOC2(CCSXHGenericTOC1* aParent, const TDesC& aName) + :CCSXHHelpContentBase(aName),iParent(aParent) + {//No Implementation required + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +EXPORT_C CCSXHGenericTOC1* CCSXHGenericTOC2::GetParent() + { + return iParent; + } + diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/src/CSXHHTMLContentParser.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/src/CSXHHTMLContentParser.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,1210 @@ +/* +* 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 "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: CCSXHHTMLContentParser class definition +* +*/ + +#include "CSXHHTMLContentParser.h" +#include "CSXHXMLParseHandler.h" +#include "CSXHHtmlTOC1.h" +#include "CSXHKywdTOC1.h" +#include "CSXHHtmlTOC2.h" +#include "CSXHHelpDataBase.h" +#include "csxhconstants.h" +#include "CSXHRuntimeIndexing.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +//Input Language variation changes +#include + +const TInt KOffset = 2; + +CCSXHHTMLContentParser* CCSXHHTMLContentParser::NewL(CCoeEnv* aCoeEnv) + { + CCSXHHTMLContentParser* self = CCSXHHTMLContentParser::NewLC(aCoeEnv); + CleanupStack::Pop(self); + return self; + } + +CCSXHHTMLContentParser* CCSXHHTMLContentParser::NewLC(CCoeEnv* aCoeEnv) + { + CCSXHHTMLContentParser* self = new (ELeave) CCSXHHTMLContentParser(aCoeEnv); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +void CCSXHHTMLContentParser::ConstructL() + { + //RUNTIME + GetSupportedFeatureListL(); + } + +CCSXHHTMLContentParser::CCSXHHTMLContentParser(CCoeEnv* aCoeEnv) : iCoeEnv(aCoeEnv) + { + } + +CCSXHHTMLContentParser::~CCSXHHTMLContentParser() + { + delete iXmlReader; + + //No need to delete the entries here, it will be done by the database + iHtmlTOC1List.Close(); + + //Delete all contents from the array. + TInt count = iDuplicateHelpTopicList.Count(); + CCSXHHtmlTOC1* toc1; + for(TInt i=0;iFsSession(); + + TDriveList DirList; + if(FileSession.DriveList(DirList) != KErrNone) + return; + CCSXHXMLParseHandler_MetaFile* XMLParser = CCSXHXMLParseHandler_MetaFile::NewL(iCoeEnv); + CleanupStack::PushL(XMLParser); + InitializeReaderL(XMLParser); + + + TBuf* rootDir = new(ELeave) TBuf; + CleanupStack::PushL(rootDir);//5 + + // begin runtime index XML generating + // + iIndexing = CCSXHRuntimeIndexing::NewL(); + TInt driveListSize = DirList.Length(); + TBool dirExists = iIndexing->IndexFileExists(); + CDirScan* scanner=CDirScan::NewLC(FileSession); +#ifdef _DEBUG + RDebug::Print(_L("runtime indexing object successfully build")); +#endif + for(TInt dir(0); dir < driveListSize; dir++) + { + TInt error; + TDriveInfo info; + TChar driveLetter = '?'; + error = FileSession.Drive(info, dir); + + if ( ( error == KErrNone ) && + (DirList[dir] && info.iType != EMediaNotPresent)) + { + RFs::DriveToChar( dir, driveLetter ); + TInt dirChanged = iIndexing->CheckDirChange( driveLetter ); + rootDir->Delete( 0, rootDir->Length() );//Clear the previous contents + rootDir->Append( driveLetter ); + + if ( dirExists + && ( dirChanged == KNoChange + || dirChanged == KNoDirExist) ) + { + // xml exist and no install/uninstall happened + // while Z needs special process once its index file exists +#ifdef _DEBUG + RDebug::Print(_L("Used to launch, scan drive number: %d"), dir); +#endif + if ( dirChanged == KNoChange ) + { + // no modify helps, so just parse index.xml + // + HandleMasterMetaFileL( aDataBase, driveLetter, XMLParser ); + } + else // KNoDirExist + { + // help content folder removed due to some reason (uninstall/crash?) + // delete index file in case it exist +#ifdef _DEBUG + RDebug::Print( _L("no resource folder, delete index.xml if exists") ); +#endif + iIndexing->DeleteIndexFile( driveLetter ); + } + } + else + { + // xml not exist or install/uninstall not happend + // + if( GetHTMLContentPathForDriveL( rootDir,iCoeEnv ) ) + { +#ifdef _DEBUG + RDebug::Print( _L("No index, scan folder for parsing, drive letter: %d"), dir ); +#endif + iIndexing->BeginIndexFile( driveLetter ); + scanner->SetScanDataL(*rootDir + ,KEntryAttDir|KEntryAttMatchExclusive, + ESortByName|EAscending, CDirScan::EScanDownTree); + ScanAndParseXMLfileToCreateTOC1ObjectL(FileSession,scanner,aDataBase, + dir,XMLParser); + + iIndexing->FinishAndCloseIndexFileL(); + + } + + } + + } + } + CleanupStack::PopAndDestroy( scanner ); + CleanupStack::PopAndDestroy(rootDir); + CleanupStack::PopAndDestroy(XMLParser); + + ClearReader(); + } + +TBool CCSXHHTMLContentParser::GetHTMLContentPathForDriveL(TBuf* aContentDrive,CCoeEnv *aCoeEnv) + { + // get the path to language level + // Input: aContentDrive == C or E or Z + // Output: aContentDrive == C:\\resource\\xhtml\\01\\ (or Z:\\resource\\xhtml\\31\\) + // + aContentDrive->Append(KXhtmlFolder); + TInt len = aContentDrive->Length(); + RFs& FileSession = aCoeEnv->FsSession(); + RArray langs; + BaflUtils::GetDowngradePathL(FileSession,User::Language(),langs); + + for(int i = 0; i < langs.Count(); ++i) + { + TLanguage lang = langs[i]; + //TSW Error: UKAL-6YL72P + //Tool chain uses full symbian language id in + //the directory name, which is not detected by help application. + // + if(lang < 10) + { + aContentDrive->AppendNumFixedWidth(lang,EDecimal,2); + } + else + { + aContentDrive->AppendNum(lang); + } + + aContentDrive->Append(KFwdSlash); + if(BaflUtils::PathExists(FileSession,*aContentDrive)) + { + langs.Reset(); + return ETrue; + } + else + { + aContentDrive->Delete((len-1),aContentDrive->Length()-len); + } + } + langs.Reset(); + return EFalse; + } + +TBool CCSXHHTMLContentParser::HandleMasterMetaFileL(CCSXHHelpDataBase* aDataBase, + TChar& aDrive, MSenContentHandlerClient *aPrevHandler) + { + RFs& FileSession = iCoeEnv->FsSession(); + TBuf masterFile; + + iIndexing->GetPrivatePath( masterFile ); + masterFile.Append( aDrive ); + masterFile.Append( KFwdSlash ); + iIndexing->AppendLocale( masterFile ); + masterFile.Append( KMasterMetaFile ); + if(BaflUtils::FileExists( FileSession,masterFile ) ) + { +#ifdef _DEBUG + RDebug::Print(_L("index exist begin to parse! %c"), aDrive ); +#endif + CCSXHXMLParseHandler_MasterMetaFile* masterMetaHandler = + CCSXHXMLParseHandler_MasterMetaFile::NewL(iCoeEnv); + masterMetaHandler->SetDataBasePtr(aDataBase); + masterMetaHandler->SetHtmlContentParserPtr(this); + CleanupStack::PushL(masterMetaHandler); + + iXmlReader->SetContentHandler(*masterMetaHandler); + // ParseL is not in async + iXmlReader->ParseL(FileSession,masterFile); + iXmlReader->SetContentHandler(*aPrevHandler); + CleanupStack::PopAndDestroy(masterMetaHandler); + } + + return ETrue; + } + +void CCSXHHTMLContentParser::GenerateTOC2ListL(CCSXHGenericTOC1& +aGenericTOC1Object, RPointerArray* GenericTOC2List) + { + CCSXHXMLParseHandler_IndexFile* XMLParser = CCSXHXMLParseHandler_IndexFile::NewL(iCoeEnv); + CleanupStack::PushL(XMLParser); + InitializeReaderL(XMLParser); + + XMLParser->SetArray(GenericTOC2List); + XMLParser->SetGenericTOC1Object(aGenericTOC1Object); + XMLParser->SetHtmlContentParserPtr(this); + RFs& FileSession = iCoeEnv->FsSession(); + CCSXHHtmlTOC1* toc1 = STATIC_CAST(CCSXHHtmlTOC1*,&aGenericTOC1Object); + TBuf lookupindexfile; + toc1->GetHelpFileL(lookupindexfile); + XMLParser->SetPath(lookupindexfile); + lookupindexfile.Append(KIndexFile); + + if(BaflUtils::FileExists(FileSession,lookupindexfile)) + iXmlReader->ParseL (FileSession,lookupindexfile); + + TBufHelpContentName(toc1->GetName()); + int toc1Count = iDuplicateHelpTopicList.Count(); + + for(int i=0;i < toc1Count;i++) + { + CCSXHHtmlTOC1* temptoc1 = iDuplicateHelpTopicList[i]; + + if(temptoc1->GetName().CompareF(HelpContentName) == 0) + { + TBuf lookup; + temptoc1->GetHelpFileL(lookup); + XMLParser->SetPath(lookup); + lookup.Append(KIndexFile); + + if(BaflUtils::FileExists(FileSession,lookup)) + iXmlReader->ParseL (FileSession,lookup); + } + } + + CleanupStack::PopAndDestroy(XMLParser); + ClearReader(); + } + +TAny* CCSXHHTMLContentParser::GetTopicContentL(CCSXHGenericTOC2* aTopic) + { + CCSXHHtmlTOC2* topic = STATIC_CAST(CCSXHHtmlTOC2*,aTopic); + TBuf htmlFile; + topic->GetHtmlFileName(htmlFile); + return GetContentsFromFileL(htmlFile,iCoeEnv,iFeatureControl); + } + + +void CCSXHHTMLContentParser::ScanAndParseXMLfileToCreateTOC1ObjectL(RFs& FileSession, + CDirScan* scanner, + CCSXHHelpDataBase* aDataBase, + const TInt& aDrive, + CCSXHXMLParseHandler* XMLParser + ) + { + CDir* entryList = NULL; + scanner->NextL(entryList); + if(!entryList) + return; + + CleanupStack::PushL(entryList); + TInt entryCount = entryList->Count(); + + TLinearOrder anOrder(Orderer); + + TBuf lookup; + + + while(entryCount--) + { + TEntry entry=(*entryList)[entryCount]; + + //Clear the previous values + lookup.Delete(0,lookup.Length()); + + lookup.Append(scanner->FullPath()); + lookup.Append(entry.iName); + lookup.Append(KFwdSlash); + lookup.Append(KMetaFile); + + //Check whether a file exists + if(!BaflUtils::FileExists(FileSession,lookup)) + continue; + + TRAPD(parserResult,iXmlReader->ParseL (FileSession,lookup )); + if(parserResult == KErrNone) + { + if(CheckFeatureIDL(XMLParser->GetFeatureIds())) + { + if(!IsAppUIdPresentAlready(entry.iName)) + { + CCSXHHtmlTOC1* CategoryObj = CCSXHHtmlTOC1::NewL( + XMLParser->GetApplicationName(),entry.iName,aDrive); + iIndexing->RuntimeGenerateIndexL( *CategoryObj, XMLParser->GetFeatureIds() ); + if(CategoryObj && aDataBase->GetMainTopics()->InsertChild(CategoryObj,EFalse)) + iHtmlTOC1List.Append(CategoryObj);//Keep a local copy*/ + else + { + if(CategoryObj) + iDuplicateHelpTopicList.Append(CategoryObj); + } + } + } + } + } + + CleanupStack::PopAndDestroy(entryList); + } + +void CCSXHHTMLContentParser::InsertHTMLToc1L( + const TDesC &appUidName,const TDesC &appName, + const TInt& aDrive , CCSXHHelpDataBase* aDataBase, const TDesC &FeatureIds) + { + if(CheckFeatureIDL(FeatureIds)) + { + if(!IsAppUIdPresentAlready(appUidName)) + { + CCSXHHtmlTOC1* CategoryObj = CCSXHHtmlTOC1::NewL(appName,appUidName,aDrive); + if(CategoryObj && aDataBase->GetMainTopics()->InsertChild(CategoryObj,EFalse)) + iHtmlTOC1List.Append(CategoryObj);//Keep a local copy*/ + else + { + if(CategoryObj) + iDuplicateHelpTopicList.Append(CategoryObj); + } + } + } + } + +HBufC8* CCSXHHTMLContentParser::GetContentsFromFileL(const TDesC& htmlFile,CCoeEnv* aCoeEnv, + RFeatureControl& aFeatureControl) + { + RFs& fileSession = aCoeEnv->FsSession(); + TInt SlashPosition = htmlFile.LocateReverse('\\'); + TBuf* CompressedFile = new (ELeave) TBuf; + CleanupStack::PushL(CompressedFile); //1 + CompressedFile->Copy(htmlFile.Mid(0,SlashPosition+1)); + CompressedFile->Append(KContentZipFile); + + HBufC8* CssContent = CreateBufferForCSSContentL(aFeatureControl); + + if(!BaflUtils::FileExists(fileSession,*CompressedFile)) + { + CleanupStack::PopAndDestroy(CompressedFile); + + HBufC8* buffer = GetContentsFromHTMLFileL(htmlFile,aCoeEnv); + + return MergeCssAndHTMLContentL(buffer,CssContent); + } + + // Create an instance of CZipFile. + CZipFile* zipFile = CZipFile::NewL(fileSession, *CompressedFile); + CleanupStack::PushL(zipFile); //2 + + // Iterate and get the file name + CZipFileMemberIterator* members = zipFile->GetMembersL(); + CleanupStack::PushL(members);//3 + CZipFileMember* member = members->NextL(); // Get the first file in zip + + TInt nCount=0; + const TBuf*Fname; + TBuf *HtmlFileName = new (ELeave) TBuf; + CleanupStack::PushL(HtmlFileName); //4 + HtmlFileName->Copy(htmlFile.Mid(SlashPosition+1)); + for(nCount=0;member!=NULL;nCount++) + { + Fname = member->Name(); + if(Fname->Compare(*HtmlFileName)==0 ) + { + break; + } + delete member; + member = members->NextL(); + } + + if(NULL == member) + { + CleanupStack::PopAndDestroy(HtmlFileName); + CleanupStack::PopAndDestroy(members); + CleanupStack::PopAndDestroy(zipFile); + CleanupStack::PopAndDestroy(CompressedFile); + + HBufC8* buffer = GetContentsFromHTMLFileL(htmlFile,aCoeEnv); + return MergeCssAndHTMLContentL(buffer,CssContent); + } + + CleanupStack::PushL(member);//5 + RZipFileMemberReaderStream* stream; + zipFile->GetInputStreamL(member, stream); + CleanupStack::PushL(stream);//6 + + // Extracts aFileName to a buffer. + // If the file is quite huge, then read the file in streaming mode. + // For example, use 4KB buffer and read it in an active object. + HBufC8* buffer = HBufC8::NewLC(member->UncompressedSize());//5 + TPtr8 bufferPtr(buffer->Des()); + User::LeaveIfError(stream->Read(bufferPtr, member->UncompressedSize())); + + // Release all the resources. + CleanupStack::Pop(buffer); + CleanupStack::PopAndDestroy(stream); + CleanupStack::PopAndDestroy(member); + CleanupStack::PopAndDestroy(HtmlFileName); + CleanupStack::PopAndDestroy(members); + CleanupStack::PopAndDestroy(zipFile); + CleanupStack::PopAndDestroy(CompressedFile); + + return MergeCssAndHTMLContentL(buffer,CssContent); + } + +TBool CCSXHHTMLContentParser::HandleMasterKeywordFileL(CCSXHHelpDataBase* aDataBase) + { + RFs& FileSession = iCoeEnv->FsSession(); + CCSXHXMLParseHandler_MasterKywd* XMLParser_MasterKywd = CCSXHXMLParseHandler_MasterKywd::NewL(iCoeEnv); + CleanupStack::PushL(XMLParser_MasterKywd); + InitializeReaderL(XMLParser_MasterKywd); + XMLParser_MasterKywd->SetHtmlContentParserPtr(this); + XMLParser_MasterKywd->SetDataBasePtr(aDataBase); + TBool bMasterKeywordFilePresent = EFalse; + + //Check for the availability of Master Keyword file + TBuf* Master_kywdPath = new(ELeave) TBuf; + CleanupStack::PushL(Master_kywdPath);//5 + Master_kywdPath->Append(PathInfo::RomRootPath().Left(1)); + GetHTMLContentPathForDriveL(Master_kywdPath,iCoeEnv); + Master_kywdPath->Append(KMasterKywdFile); + + if(BaflUtils::FileExists(FileSession,*Master_kywdPath)) + { + TRAP_IGNORE(iXmlReader->ParseL(FileSession,*Master_kywdPath )); + bMasterKeywordFilePresent = ETrue; + } + + //KMasterKywdFile; + CleanupStack::PopAndDestroy(Master_kywdPath); + CleanupStack::PopAndDestroy(XMLParser_MasterKywd); + ClearReader(); + + return bMasterKeywordFilePresent; + } + +void CCSXHHTMLContentParser::GenerateKywdTOC1ListL(CCSXHHelpDataBase* aDataBase) + { + if(!iHtmlTOC1List.Count()) + return; + TBool bMasterKeywordFilePresent = HandleMasterKeywordFileL(aDataBase); + + CCSXHXMLParseHandler_Kywd* XMLParser = CCSXHXMLParseHandler_Kywd::NewL(iCoeEnv); + CleanupStack::PushL(XMLParser); + InitializeReaderL(XMLParser); + + XMLParser->SetDataBasePtr(aDataBase); + XMLParser->SetIsTOC2(EFalse); + XMLParser->SetHtmlContentParserPtr(this); + + //Parse keyword.xml file from Main Array list + ParseKeywdFileAndCreatekywdTOC1ObjectsL(iHtmlTOC1List,XMLParser,bMasterKeywordFilePresent); + + //Parse keyword.xml file from duplicate Array list + ParseKeywdFileAndCreatekywdTOC1ObjectsL(iDuplicateHelpTopicList,XMLParser,bMasterKeywordFilePresent); + + CleanupStack::PopAndDestroy(XMLParser); + ClearReader(); + } + +void CCSXHHTMLContentParser::GenerateTOC2ListForKeywordSearchL +(CCSXHHelpDataBase* aDataBase,CCSXHKywdTOC1* aKywdTOC1Object) + { + RPointerArray* TOC1HtmlList = aKywdTOC1Object->GetHtmlTOC1List(); + if(!TOC1HtmlList) + return; + + CCSXHXMLParseHandler_Kywd* XMLParser = CCSXHXMLParseHandler_Kywd::NewL(iCoeEnv); + CleanupStack::PushL(XMLParser); + InitializeReaderL(XMLParser); + + int toc1Count = TOC1HtmlList->Count(); + CCSXHHtmlTOC1* toc1; + + RFs& FileSession = iCoeEnv->FsSession(); + + XMLParser->SetDataBasePtr(aDataBase); + XMLParser->SetIsTOC2(ETrue); + XMLParser->SetHtmlContentParserPtr(this); + + TBuf* lookup = new(ELeave)TBuf; + CleanupStack::PushL(lookup);//3 + XMLParser->SetTOC1Title(aKywdTOC1Object->GetName()); + for(int i = 0; i < toc1Count ; ++i ) + { + toc1 = (*TOC1HtmlList)[i]; + //Get Corresponding toc1 from Main array and set toc1 object + XMLParser->SetCurrentHtmlToc1(GetCorrespondingTOC1FromMainArray(toc1->GetName())); + //Clear the previous values + lookup->Delete(0,lookup->Length()); + toc1->GetHelpFileL(*lookup); + XMLParser->SetPath(*lookup); + lookup->Append(KKeywordsFile); + TRAP_IGNORE(iXmlReader->ParseL (FileSession,*lookup )); + aDataBase->IncrementKeywordSearchCount(); + } + CleanupStack::PopAndDestroy(lookup); + CleanupStack::PopAndDestroy(XMLParser); + ClearReader(); + } + +CCSXHHelpContentBase* CCSXHHTMLContentParser::GetContextTopic +(const TUid& aUid, const TDesC& contextName) + { + int toc1Count = iHtmlTOC1List.Count(); + CCSXHHtmlTOC1* toc1,*temptoc1; + + for(int i = 0; i < toc1Count; ++i) + { + toc1 = iHtmlTOC1List[i]; + if(aUid == toc1->GetAppUid()) + { + return toc1->GetContextTopic(contextName); + } + } + + toc1Count = iDuplicateHelpTopicList.Count(); + for(int i = 0; i < toc1Count; ++i) + { + toc1 = iDuplicateHelpTopicList[i]; + if(aUid == toc1->GetAppUid()) + { + temptoc1 = GetCorrespondingTOC1FromMainArray(toc1->GetName()); + return temptoc1->GetContextTopic(contextName); + } + } + return NULL; + } + +CCSXHHelpContentBase* CCSXHHTMLContentParser::GetHtmlTopicForUrlL(const TDesC& aUrl) + { + CCSXHHelpContentBase* tocobj = GetObjectBasedonUrlL(iHtmlTOC1List,aUrl,ETrue); + + if(NULL == tocobj) + tocobj = GetObjectBasedonUrlL(iDuplicateHelpTopicList,aUrl,EFalse); + + return tocobj; + } + +CCSXHHelpContentBase* CCSXHHTMLContentParser::GetObjectBasedonUrlL(RPointerArray& aTOC1ObjectsArray, + const TDesC& aUrl, TBool aMainArrayList) + { + /*For URLs of form + file:://:/system/xhtml///Html name + We can have help topics for other cases, help topic objects not possible + */ + TBuf aFileUrl; + + int toc1Count = aTOC1ObjectsArray.Count(); + CCSXHHtmlTOC1* toc1,*temptoc1; + for(int j = 0; j < toc1Count; ++j) + { + toc1 = aTOC1ObjectsArray[j]; + TBuf htmlFile; + toc1->GetHelpFileL(htmlFile); + + //Convert fwd slashes to back slashes + TInt i = htmlFile.Find(KFwdSlash) ; + while (KErrNotFound != i) + { + htmlFile.Replace(i,1,KBackSlash); + i = htmlFile.Find(KFwdSlash) ; + } + + i = aUrl.FindC(htmlFile); + if(i != KErrNotFound) + { + TFileName fileName; + i = aUrl.LocateReverseF('/'); + fileName = aUrl.Mid(i + 1); + if(aMainArrayList) + temptoc1 = toc1; + else + temptoc1 = GetCorrespondingTOC1FromMainArray(toc1->GetName()); + + return temptoc1->GetHtmlTopicForFile(fileName); + } + } + return NULL; + } + +void CCSXHHTMLContentParser::GetHtmlFileL(CCoeEnv* coeEnv,const short& aDir, + const TAppUid& aUid,TBuf& aFileName) + { + aFileName.Copy(KEmptyString); + + RFs& FileSession = coeEnv->FsSession(); + TDriveList DirList; + if( (FileSession.DriveList(DirList)= DirList.Length())) + return; + + TChar driveLetter = '?'; + TDriveInfo info; + TInt error = FileSession.Drive(info, aDir); + if ((error == KErrNone) && + (DirList[aDir] && info.iType != EMediaNotPresent)) + { + RFs::DriveToChar(aDir, driveLetter); + + aFileName.Append(driveLetter); + GetHTMLContentPathForDriveL(&aFileName,coeEnv); + aUid.AppendUid(aFileName); + aFileName.Append(KFwdSlash); + } + } + +void CCSXHHTMLContentParser::InitializeReaderL(CCSXHXMLParseHandler* aXMLParser) + { + if(iXmlReader == NULL ) + { + iXmlReader = CSenXmlReader::NewL(); + iXmlReader->SetContentHandler(*aXMLParser); + } + } +void CCSXHHTMLContentParser::ClearReader() + { + delete iXmlReader; + iXmlReader = NULL; + } + +TBool CCSXHHTMLContentParser::IsUidCategoryPresent(const TUid& aUid) + { + int toc1Count = iHtmlTOC1List.Count(); + CCSXHHtmlTOC1* toc1; + for(int i = 0; i < toc1Count; ++i) + { + toc1 = iHtmlTOC1List[i]; + if(aUid == toc1->GetAppUid()) + return ETrue; + } + + toc1Count = iDuplicateHelpTopicList.Count(); + for(int i = 0; i < toc1Count; ++i) + { + toc1 = iDuplicateHelpTopicList[i]; + if(aUid == toc1->GetAppUid()) + return ETrue; + } + return EFalse; + } + +TBool CCSXHHTMLContentParser::GetHTMLToc1(const TDesC& aUid,CCSXHXMLParseHandler* aParser) + { + TUint AppId; + + if(!aUid.Length()) + return EFalse; + + TLex FolderUid(aUid.Mid(KOffset)); + FolderUid.Val(AppId,EHex); + TUid ApplicationUid = TUid::Uid((TInt)AppId); + + int toc1Count = iHtmlTOC1List.Count(); + + CCSXHHtmlTOC1* toc1; + for(int i = 0; i < toc1Count; ++i) + { + toc1 = iHtmlTOC1List[i]; + if(ApplicationUid == toc1->GetAppUid()) + { + STATIC_CAST(CCSXHXMLParseHandler_MasterKywd*,aParser)->SetCurrentHtmlToc1(toc1); + return ETrue; + } + } + + toc1Count = iDuplicateHelpTopicList.Count(); + for(int i = 0; i < toc1Count; ++i) + { + toc1 = iDuplicateHelpTopicList[i]; + if(ApplicationUid == toc1->GetAppUid()) + { + STATIC_CAST(CCSXHXMLParseHandler_MasterKywd*,aParser)->SetCurrentHtmlToc1(toc1); + return ETrue; + } + } + + return EFalse; + } + +//To get Corresponding toc1 from main array. +CCSXHHtmlTOC1* CCSXHHTMLContentParser::GetCorrespondingTOC1FromMainArray(const TDesC& aApplicationName) + { + TInt toc1Count = iHtmlTOC1List.Count(); + CCSXHHtmlTOC1* toc1; + for(int i=0;iGetName().CompareF(aApplicationName) == 0) + return toc1; + } + + return NULL; + } + +//Check UId is already present in the list. +TBool CCSXHHTMLContentParser::IsAppUIdPresentAlready(const TDesC& aUid) + { + TBool result = EFalse; + TInt toc1Count = iHtmlTOC1List.Count(); + CCSXHHtmlTOC1* toc1; + + TUint AppId; + TLex FolderUid(aUid.Mid(KOffset)); + FolderUid.Val(AppId,EHex); + TUid ApplicationUid = TUid::Uid((TInt)AppId); + + for(int i=0;iGetAppUid()) + { + result = ETrue; + break; + } + } + + toc1Count = iDuplicateHelpTopicList.Count(); + for(int i=0;iGetAppUid()) + { + result = ETrue; + break; + } + } + + return result; + + } + +void CCSXHHTMLContentParser::ParseKeywdFileAndCreatekywdTOC1ObjectsL( + RPointerArray& aTOC1ObjectsArray, + CCSXHXMLParseHandler_Kywd* XMLParser, TBool bMasterKeywordFilePresent) + { + int toc1Count = aTOC1ObjectsArray.Count(); + CCSXHHtmlTOC1* toc1; + + TBuf* lookup = new(ELeave)TBuf; + CleanupStack::PushL(lookup);//1 + + RFs& FileSession = iCoeEnv->FsSession(); + + for(int i = 0; i < toc1Count; ++i) + { + toc1 = aTOC1ObjectsArray[i]; + + if(bMasterKeywordFilePresent && toc1->IsROMDrive()) + continue; + + //Clear the previous values + lookup->Delete(0,lookup->Length()); + + toc1->GetHelpFileL(*lookup); + lookup->Append(KKeywordsFile); + + //Check whether a file exists + if(!BaflUtils::FileExists(FileSession,*lookup)) + continue; + + XMLParser->SetCurrentHtmlToc1(toc1); + TRAP_IGNORE(iXmlReader->ParseL(FileSession,*lookup )); + } + + CleanupStack::PopAndDestroy(lookup); + } + +//RUNTIME +void CCSXHHTMLContentParser::GetSupportedFeatureListL() + { + RFeatureUidArray SupportedFeatures; + TInt err = iFeatureControl.Connect(); + if ( err == KErrNone ) + { + // ListSupportedFeatures() returns one of the Symbian error codes. + err = iFeatureControl.ListSupportedFeatures( SupportedFeatures ); + + // Remember to call CloseL after using RFeatureControl. + // It disconnects the Feature Manager server. + iFeatureControl.Close(); + } + //As per new req. add true, flase to id and create an array. + + iFeatureManager_FeatureIds = new (ELeave) CDesCArrayFlat(2); + + TBuf<25>CurrFId; + + for(TInt i=0;iAppendL(CurrFId); + + CurrFId.Copy(KTrue_StringtoAppend); + CurrFId.AppendNum(SupportedFeatures[i].iUid); + iFeatureManager_FeatureIds->AppendL(CurrFId); + + CurrFId.Copy(KFalse_StringtoAppend); + CurrFId.AppendNum(SupportedFeatures[i].iUid); + iFeatureManager_FeatureIds->AppendL(CurrFId); + } + + //Input Language variation changes + //----------------------------------------- + //Create an array with supported input language + CPtiEngine* ptiEngine = CPtiEngine::NewL(); + CleanupStack::PushL( ptiEngine ); + + CArrayFix* languageCodeArray = new(ELeave)CArrayFixFlat(2); + + ptiEngine->GetAvailableLanguagesL( languageCodeArray ); + + TInt nCount = languageCodeArray->Count(); + + iSupportedInputLanguages = new (ELeave) CDesCArrayFlat(2); + + //Codescanner gives error, if member variables are pushed. + //CleanupStack::PushL( iSupportedInputLanguages ); + + for(TInt i=0; iAt(i); + TBuf<25>Currlang(_L("LANGUAGE_")); + if(languageCode < 10) + Currlang.AppendNumFixedWidth(languageCode,EDecimal,2); + else + Currlang.AppendNum(languageCode); + + iSupportedInputLanguages->AppendL(Currlang); + } + + //CleanupStack::Pop(iSupportedInputLanguages); + CleanupStack::PopAndDestroy( ptiEngine ); + + delete languageCodeArray; + //----------------------------------------- + + SupportedFeatures.Close(); + } + +//RUNTIME +TBool CCSXHHTMLContentParser::CheckFeatureIDL(const TDesC& aFeatureIds) + { + if(/*KHexPrefixLength == aFeatureIds.Length() &&*/ + KErrNotFound != aFeatureIds.Find(KDefaultFeatureIdStringTemp)) + { + return ETrue; + } + + HBufC* Ids = HBufC::NewLC(aFeatureIds.Length()); + TPtr CurrentFeatureIds = Ids->Des(); + CurrentFeatureIds.Copy(aFeatureIds); + CleanupStack::Pop(Ids); + + CDesCArray* FeatureIdList = new (ELeave) CDesCArrayFlat(2); ; + TInt EndPos = CurrentFeatureIds.Locate(' '); + + CleanupStack::PushL(FeatureIdList); + + while (KErrNotFound != EndPos) + { + FeatureIdList->AppendL(CurrentFeatureIds.Mid(0,EndPos));// FId_Val); + CurrentFeatureIds = CurrentFeatureIds.Mid(EndPos+1); + EndPos = CurrentFeatureIds.Locate(' ') ; + } + + if(KErrNotFound == EndPos && 0!= CurrentFeatureIds.Length()) + { + FeatureIdList->AppendL(CurrentFeatureIds); + } + + CleanupStack::Pop(FeatureIdList); + + TInt position; + if(KErrNone == FeatureIdList->Find(KDefaultFeatureIdString,position) || + KErrNone == FeatureIdList->Find(KDefaultFeatureIdStringTemp,position) ) + { + delete FeatureIdList; + delete Ids; + return ETrue; + } + + TInt nCount = FeatureIdList->MdcaCount(); + + + //FeatureManager list contains all enabled featureIds, appended with true, and false. + //New Req. text associated with true_featureId, should be displayed, if Id is enabled. + //else, if featureId is disabled, text associated with false_featureId should be displayed. + // 1. if featureId string contains "false" and it is not in the list, return ETrue. + // 2. if featureId string does not contain "false" and it is present in the list, return ETrue. + // 3. if featureId is part of input language, return ETrue. + for(TInt j=0;j < nCount;j++) + { + if( + (KErrNotFound != FeatureIdList->MdcaPoint(j).Find(KFalseString) && + KErrNone != iFeatureManager_FeatureIds->Find(FeatureIdList->MdcaPoint(j),position))|| + + (KErrNotFound == FeatureIdList->MdcaPoint(j).Find(KFalseString) && + KErrNone == iFeatureManager_FeatureIds->Find(FeatureIdList->MdcaPoint(j),position)) || + + KErrNone == iSupportedInputLanguages->Find(FeatureIdList->MdcaPoint(j),position) + ) + { + delete FeatureIdList; + delete Ids; + return ETrue; + } + } + + delete Ids; + delete FeatureIdList; + return EFalse; + } + +HBufC8* CCSXHHTMLContentParser::CreateBufferForCSSContentL(RFeatureControl& aFeatureControl) + { + RFeatureUidArray SupportedFeatures; + TInt err = aFeatureControl.Connect(); + if ( err == KErrNone ) + { + // ListSupportedFeatures() returns one of the Symbian error codes. + err = aFeatureControl.ListSupportedFeatures( SupportedFeatures ); + + // Remember to call CloseL after using RFeatureControl. + // It disconnects the Feature Manager server. + aFeatureControl.Close(); + } + + //Input Language variation changes + //----------------------------------------- + + CPtiEngine* ptiEngine = CPtiEngine::NewL(); + CleanupStack::PushL( ptiEngine ); + + CArrayFix* languageCodeArray = new(ELeave)CArrayFixFlat(2); + + ptiEngine->GetAvailableLanguagesL( languageCodeArray ); + + TInt nInputLangCount = languageCodeArray->Count(); + TInt nCount = SupportedFeatures.Count(); + + HBufC8* CssContent = HBufC8::NewLC(nCount * KMaxUnits * 6 + nInputLangCount * 3 + 400); + TPtr8 bufferPtr(CssContent->Des()); + + AppendStyleSheetContent_listitem(bufferPtr,nCount,SupportedFeatures,*languageCodeArray); + AppendStyleSheetContent_paragraph(bufferPtr,nCount,SupportedFeatures,*languageCodeArray); + AppendStyleSheetContent_ahref(bufferPtr,nCount,SupportedFeatures,*languageCodeArray); + AppendStyleSheetContent_none(bufferPtr,nCount,SupportedFeatures); + + SupportedFeatures.Close(); + + CleanupStack::Pop(CssContent); + + //Input Language variation changes + //----------------------------------------- + CleanupStack::PopAndDestroy( ptiEngine ); + + delete languageCodeArray; + //----------------------------------------- + + return CssContent; + } + +HBufC8* CCSXHHTMLContentParser::GetContentsFromHTMLFileL(const TDesC& htmlFile,CCoeEnv* aCoeEnv) + { + RFs& fsSession = aCoeEnv->FsSession(); + RFile file; + + TInt err = file.Open(fsSession,htmlFile,EFileRead|EFileShareReadersOrWriters); + if(KErrNone == err) + { + TInt FileSize; + HBufC8* htmlFileContent = NULL; + if(KErrNone == file.Size(FileSize)) + { + htmlFileContent = HBufC8::NewLC(FileSize); + TPtr8 PtrContent = htmlFileContent->Des(); + + file.Read(PtrContent); + CleanupStack::Pop(htmlFileContent); + } + file.Close(); + return htmlFileContent; + } + else + { + return NULL; + } + } + +HBufC8* CCSXHHTMLContentParser::MergeCssAndHTMLContentL(HBufC8* aHTMLBuffer, HBufC8* aCssContent) + { + TInt BufferLength=0; + if(aHTMLBuffer) + BufferLength = aHTMLBuffer->Size(); + + if(aCssContent) + BufferLength += aCssContent->Size(); + + HBufC8* Htmlbuffer = HBufC8::NewLC(BufferLength); + + TPtr8 HtmlbufferPtr(Htmlbuffer->Des()); + + if(aCssContent) + { + HtmlbufferPtr.Copy(aCssContent->Des()); + delete aCssContent; + } + + if(aHTMLBuffer) + { + HtmlbufferPtr.Append(aHTMLBuffer->Des()); + delete aHTMLBuffer; + } + + if(Htmlbuffer) + CleanupStack::Pop(Htmlbuffer); + + return Htmlbuffer; + } + +void CCSXHHTMLContentParser::AppendStyleSheetContent_listitem(TPtr8& abufferptr,TInt aFeatureIdCount, + RFeatureUidArray& aSupportedFeatures, + CArrayFix& alanguageCodeArray) + { + //List Items + //--------------------------------------------------------- + abufferptr.Copy(KCsstext_First); + + for(TInt i=0;i FeatureId; + FeatureId.Format(KtextFormat_true_l,aSupportedFeatures[i].iUid); + //FeatureId.Append(KComma); + abufferptr.Append(FeatureId); + } + + for(TInt i=0;i FeatureId; + if(alanguageCodeArray[i] < 10) + FeatureId.Format(KtextFormat_lang_0l,alanguageCodeArray[i]); + else + FeatureId.Format(KtextFormat_lang_l,alanguageCodeArray[i]); + + abufferptr.Append(FeatureId); + } + + abufferptr.Append(KDefaultFeatureId); + abufferptr.Append(KCsstext_displayp_li); + abufferptr.Append(KCsstext_Last); + //--------------------------------------------------------- + } + +void CCSXHHTMLContentParser::AppendStyleSheetContent_paragraph(TPtr8& abufferptr,TInt aFeatureIdCount, + RFeatureUidArray& aSupportedFeatures, + CArrayFix& alanguageCodeArray) + { + //Paragraph + //--------------------------------------------------------- + abufferptr.Append(KCsstext_First); + for(TInt i=0;i FeatureId; + FeatureId.Format(KtextFormat_true_b,aSupportedFeatures[i].iUid); + //FeatureId.Append(KComma); + + abufferptr.Append(FeatureId); + } + + for(TInt i=0;i FeatureId; + if(alanguageCodeArray[i] < 10) + FeatureId.Format(KtextFormat_lang_0b,alanguageCodeArray[i]); + else + FeatureId.Format(KtextFormat_lang_b,alanguageCodeArray[i]); + + abufferptr.Append(FeatureId); + } + + abufferptr.Append(KDefaultFeatureId); + abufferptr.Append(KCsstext_displayp_p); + abufferptr.Append(KCsstext_Last); + + //--------------------------------------------------------- + } + +void CCSXHHTMLContentParser::AppendStyleSheetContent_ahref(TPtr8& abufferptr,TInt aFeatureIdCount, + RFeatureUidArray& aSupportedFeatures, + CArrayFix& alanguageCodeArray) + { + //A href + //--------------------------------------------------------- + abufferptr.Append(KCsstext_First); + for(TInt i=0;i FeatureId; + FeatureId.Format(KtextFormat_true_a,aSupportedFeatures[i].iUid); + abufferptr.Append(FeatureId); + } + + for(TInt i=0;i FeatureId; + if(alanguageCodeArray[i] < 10) + FeatureId.Format(KtextFormat_lang_0a,alanguageCodeArray[i]); + else + FeatureId.Format(KtextFormat_lang_a,alanguageCodeArray[i]); + abufferptr.Append(FeatureId); + } + + abufferptr.Append(KDefaultFeatureId); + abufferptr.Append(KCsstext_displayp_a); + abufferptr.Append(KCsstext_Last); + + //--------------------------------------------------------- + } + +void CCSXHHTMLContentParser::AppendStyleSheetContent_none(TPtr8& abufferptr,TInt aFeatureIdCount, + RFeatureUidArray& aSupportedFeatures + ) + { + //False + //--------------------------------------------------------- + abufferptr.Append(KCsstext_First); + for(TInt i=0;i FeatureId; + FeatureId.Format(KtextFormat_false,aSupportedFeatures[i].iUid,aSupportedFeatures[i].iUid,aSupportedFeatures[i].iUid); + abufferptr.Append(FeatureId); + } + + abufferptr.Append(KDefaultFeatureId); + abufferptr.Append(KCsstext_displayp_n); + abufferptr.Append(KCsstext_Last); + + //--------------------------------------------------------- + } diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/src/CSXHHelpContentBase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/src/CSXHHelpContentBase.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,43 @@ +/* +* 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 "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: CCSXHHelpContentBase class definition +* +*/ + +#include "CSXHHelpContentBase.h" + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +CCSXHHelpContentBase::~CCSXHHelpContentBase() + { + delete iName; + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +EXPORT_C TPtr CCSXHHelpContentBase::GetName() const + { + return iName->Des(); + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +CCSXHHelpContentBase::CCSXHHelpContentBase(const TDesC& name) : iName(name.Alloc()) + {//No implementation required + } + + diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/src/CSXHHelpDataBase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/src/CSXHHelpDataBase.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,264 @@ +/* +* 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 "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: CCSXHHelpDataBase class definition +* +*/ + +#include "CSXHHelpDataBase.h" +#include "CSXHHTMLContentParser.h" +#include "CSXHLegacyContentParser.h" +#include "CSXHViewIDs.h" +#include "CSXHGenericTOC2.h" +#include "CSXHKywdTOC1.h" +#include "CSXHMainTopics.h" +#include "CSXHKywdTopics.h" +#include "CsHelpCmdLineParser.h" +#include "CSXHContextTopic.h" +#include "coehelp.h" + +#include +#include +#include +#include +#include +#include + + +#include + +EXPORT_C CCSXHHelpDataBase* CCSXHHelpDataBase::NewL(CCoeEnv* aCoeEnv, + const TApaAppCaption& aAppCaption) + { + CCSXHHelpDataBase* self = CCSXHHelpDataBase::NewLC(aCoeEnv,aAppCaption); + CleanupStack::Pop(self); + return self; + } + +CCSXHHelpDataBase* CCSXHHelpDataBase::NewLC(CCoeEnv* aCoeEnv,const TApaAppCaption& aAppCaption) + { + //Add stuff into TLS + if(Dll::Tls() == NULL ) + { + // TLS is still null, which means that no Singleton has + // been instantiated yet. Do so now, and return that + // instance: + // Store a pointer to the new instance in thread local storage: + CCSXHHelpDataBase* self = new(ELeave) CCSXHHelpDataBase(aCoeEnv,aAppCaption); + CleanupStack::PushL(self); + self->ConstructL(); + + TInt err = Dll::SetTls(self); + if(err == KErrNone ) + { + return self; + } + else + { + delete self; + User::Leave( err ); + return NULL; + } + } + else + { + return GetInstance(); + } + } + +CCSXHHelpDataBase* CCSXHHelpDataBase::GetInstance() + { + // Singleton has been instantiated once already, so return + // that instance: + return static_cast(Dll::Tls()); + } + +CCSXHHelpDataBase::CCSXHHelpDataBase(CCoeEnv* aCoeEnv,const TApaAppCaption& aAppCaption) + : iCoeEnv(aCoeEnv),iAppCaption(aAppCaption),iKeywordSearchCount(0) + + { + } + +CCSXHHelpDataBase::~CCSXHHelpDataBase() + { + delete iMainTOC1; + delete iKywdTOC1; + delete iLastContextTopic; + delete iHTMLContentParser; + delete iLegacyContentParser; + Dll::SetTls( NULL ); + } + +void CCSXHHelpDataBase::ConstructL() + { + iHTMLContentParser = CCSXHHTMLContentParser::NewL(iCoeEnv); + iLegacyContentParser = CCSXHLegacyContentParser::NewL(this); + + iMainTOC1 = CCSXHMainTopics::NewL(KCSXHToc1ViewID,iAppCaption); + iKywdTOC1 = CCSXHKywdTopics::NewL(iAppCaption); + + //Build the TOC1 list here + iHTMLContentParser->GenerateTOC1ListL(this); + iLegacyContentParser->GenerateTOC1ListL(this); + } + +CCoeEnv* CCSXHHelpDataBase::GetCoeEnv() + { + return iCoeEnv; + } + +EXPORT_C CCSXHGenericTOC1* CCSXHHelpDataBase::GetMainTopics() + { + return iMainTOC1; + } +EXPORT_C CCSXHGenericTOC1* CCSXHHelpDataBase::GetKywdTopics() + { + return iKywdTOC1; + } + +EXPORT_C CCSXHHelpContentBase* CCSXHHelpDataBase::GetContextTopic(const TDesC8& aContextMessage) + { + TRAP_IGNORE(GetContextTopicL(aContextMessage)); + return iLastContextTopic; + + } +CCSXHHelpContentBase* CCSXHHelpDataBase::GetContextTopicL(const TDesC8& aContextMessage) + { + if(iLastContextTopic) + { + delete iLastContextTopic; + iLastContextTopic = NULL; + } + //TSW Error Correction:Help: Application crashes + //after trying to re-open context-dependent help from application + //Clear childlist of all (TOC1)parents. + ClearAllTOC1Contents(); + + CArrayFix* contextList; + CCsHlpCmdLineParser* parser = new(ELeave) CCsHlpCmdLineParser; + CleanupStack::PushL(parser); + parser->ConstructL(aContextMessage); + contextList = parser->ContextListL(); + CleanupStack::PopAndDestroy(parser); // parser + CleanupStack::PushL(contextList); + CCSXHHelpContentBase* contextTopic; + TInt numberOfContextList = contextList->Count(); + TCoeHelpContext* context; + for (TInt i(0); i < numberOfContextList; i++) + { + context = &(contextList->At(i)); + + contextTopic = iHTMLContentParser->GetContextTopic(context->iMajor,context->iContext); + if(contextTopic) + { + CleanupStack::PopAndDestroy(contextList); + iLastContextTopic = CCSXHContextTopic::NewL(contextTopic); + return iLastContextTopic; + } + } + + for (TInt i(0); i < numberOfContextList; i++) + { + context = &(contextList->At(i)); + + contextTopic = iLegacyContentParser->GetContextTopic(*context); + if(contextTopic) + { + CleanupStack::PopAndDestroy(contextList); + iLastContextTopic = CCSXHContextTopic::NewL(contextTopic); + return iLastContextTopic; + } + } + + + CleanupStack::PopAndDestroy(contextList); + return NULL; + } + +EXPORT_C void CCSXHHelpDataBase::ClearAllTOC1Contents() + { + iMainTOC1->ResetChildList(); + iKywdTOC1->ResetChildList(); + } + +CCSXHLegacyContentParser* CCSXHHelpDataBase::GetLegacyParser() + { + return iLegacyContentParser; + } + +CCSXHHTMLContentParser* CCSXHHelpDataBase::GetHtmlParser() + { + return iHTMLContentParser; + } + +void CCSXHHelpDataBase::InsertKeywordL(const TDesC& aKywdName, + TInt aLegacyKywdIndex, const TUid& aCatUid) + { + if(!iHTMLContentParser->IsUidCategoryPresent(aCatUid)) + iKwydBuilder->InsertKeywordL(iKywdTOC1,aKywdName,aLegacyKywdIndex); + } + +void CCSXHHelpDataBase::InsertKeywordL(const TDesC& aKywdName, CCSXHHtmlTOC1* aToc1) + { + iKwydBuilder->InsertKeywordL(iKywdTOC1,aKywdName,aToc1); + } + +CCSXHKywdTOC1* CCSXHHelpDataBase::InsertKeywordTopicL(CCSXHGenericTOC2* aToc2) + { + CCSXHKywdTOC1* toc1 = iKywdTOC1->GetSelectedTopic(); + InsertKeywordTopic(toc1,aToc2); + return toc1; + } + +void CCSXHHelpDataBase::InsertKeywordTopic(CCSXHKywdTOC1* aToc1, CCSXHGenericTOC2* aToc2) + { + aToc1->InsertChild(aToc2); + } + +EXPORT_C TInt CCSXHHelpDataBase::InitGenerateKeywordTOC2ListL(CCSXHKywdTOC1* aTopic) + { + iKeywordSearchCount = 0; + RPointerArray* TOC1HtmlList = aTopic->GetHtmlTOC1List(); + TInt htmlCount = TOC1HtmlList ? TOC1HtmlList->Count() : 0; + TInt legacyCount = iLegacyContentParser->InitGenerateTOC2ListForKeywordSearchL(aTopic); + return (htmlCount + legacyCount); + } + +void CCSXHHelpDataBase::GenerateKeywordTOC2ListL(CCSXHKywdTOC1* aTopic) + { + iHTMLContentParser->GenerateTOC2ListForKeywordSearchL(this,aTopic); + iLegacyContentParser->GenerateTOC2ListForKeywordSearchL(aTopic); + } + +EXPORT_C CCSXHHelpContentBase* CCSXHHelpDataBase::GetHtmlTopicForUrlL(const TDesC& url) + { + return iHTMLContentParser->GetHtmlTopicForUrlL(url); + } +void CCSXHHelpDataBase::FillKeywordTopicsL(MCSXHKywdBuilder* aBuilder) + { + iKwydBuilder = aBuilder; + iHTMLContentParser->GenerateKywdTOC1ListL(this); + iLegacyContentParser->GenerateKywdTOC1ListL(this); + } + + +void CCSXHHelpDataBase::IncrementKeywordSearchCount(TInt aUnits) + { + iKeywordSearchCount += aUnits; + } + +EXPORT_C TInt CCSXHHelpDataBase::GetKeywordSearchCount() + { + return iKeywordSearchCount; + } + diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/src/CSXHHtmlTOC1.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/src/CSXHHtmlTOC1.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,211 @@ +/* +* 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 "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: CCSXHHtmlTOC1 class definition +* +*/ + +#include "CSXHHtmlTOC1.h" +#include "CSXHHtmlTOC2.h" +#include "CSXHViewIDs.h" +#include "CSXHHTMLContentParser.h" +#include "CSXHHelpDataBase.h" +#include "csxhconstants.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +const TInt KBufSize = 35; + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +CCSXHHtmlTOC1* CCSXHHtmlTOC1::NewL(const TDesC& aName, const TDesC& aFolder,const TInt& aDrive) + { + CCSXHHtmlTOC1* self = new(ELeave) CCSXHHtmlTOC1(aName,aFolder,aDrive); + if(self->IsValid()) + return self; + delete self; + return NULL; + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +CCSXHHtmlTOC1::CCSXHHtmlTOC1(const TDesC& aName, const TDesC& aFolder,const TInt& aDrive): + CCSXHGenericTOC1(aName),iAppUid(aFolder),iDrive(aDrive) + {//No implementation required + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +CCSXHHtmlTOC1::~CCSXHHtmlTOC1() + {//No implementation required + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +TUid CCSXHHtmlTOC1::GetViewID() const + { + return KCSXHToc2ViewID; + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +void CCSXHHtmlTOC1::GetHelpFileL(TBuf& aFileName ) const + { + //return iHelpFile; + return CCSXHHTMLContentParser::GetHtmlFileL( + CCSXHHelpDataBase::GetInstance()->GetCoeEnv(),iDrive,iAppUid,aFileName); + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +const TUid& CCSXHHtmlTOC1::GetAppUid() const + { + return iAppUid.GetUid(); + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +TBool CCSXHHtmlTOC1::IsROMDrive() + { + TInt ROMDrive; + RFs::CharToDrive( PathInfo::RomRootPath()[0], ROMDrive ); + if(ROMDrive == iDrive) + return ETrue; + else + return EFalse; + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +CCSXHHelpContentBase* CCSXHHtmlTOC1::GetContextTopic(const TDesC& contextName) + { + TBool resetChildList = EFalse; + if(iChildList == NULL) + { + InitChildList();//Generates child list + resetChildList = ETrue; + } + + TInt count = iChildList->Count(); + CCSXHHtmlTOC2* toc2 = NULL; + for(TInt i=0;i contextFile = contextName; + contextFile.Append(KHtmlFileExtn); + if(contextFile.Compare(toc2->GetFileName()) == 0) + return toc2;//Child list should not be reset + } + if(resetChildList) + ResetChildList(); + return NULL; + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +CCSXHHelpContentBase* CCSXHHtmlTOC1::GetHtmlTopicForFile(const TDesC& aFile) + { + TBool resetChildList = EFalse; + if(iChildList ==NULL) + { + InitChildList();//Generates child list if required. + resetChildList = ETrue; + } + + TInt count = iChildList->Count(); + CCSXHHtmlTOC2* toc2 = NULL; + for(TInt i=0;iGetFileName().Compare(aFile) == 0) + return toc2;//Child list should not be reset + } + if(resetChildList) + ResetChildList(); + return NULL; + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +void CCSXHHtmlTOC1::InitChildList() + { + if(iChildList != NULL) + return; + ConstructChildList(); + TRAP_IGNORE(CCSXHHelpDataBase::GetInstance()->GetHtmlParser()-> + GenerateTOC2ListL(*this,iChildList)); + } +TBool CCSXHHtmlTOC1::IsValid() const + { + return iAppUid.IsValid(); + } + + +TAppUid::TAppUid(const TDesC& aFolder) + { + TLex lex(aFolder.Mid(KHexPrefixLength)); + TUint appId = 0; + lex.Val(appId,EHex); + + if(appId) + { + iUid = TUid::Uid((TInt)appId); + iLength = aFolder.Length(); + } + else + { + iLength = 0; + } + } + +const TUid& TAppUid::GetUid() const + { + return iUid; + } + +TBool TAppUid::IsValid() const + { + return iLength ? ETrue : EFalse; + } +void TAppUid::AppendUid(TBuf& aStr) const + { + TInt initialLen = aStr.Length(); + aStr.Append(KHexPrefix); + aStr.AppendNum(iUid.iUid,EHex); + TInt finalLen = aStr.Length(); + + while(iLength > (finalLen - initialLen)) + { + aStr.Insert(initialLen+KHexPrefixLength,KZero); + ++finalLen; + } + + } + diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/src/CSXHHtmlTOC2.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/src/CSXHHtmlTOC2.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,181 @@ +/* +* 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 "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: CCSXHHtmlTOC2 class definition +* +*/ + +#include "CSXHHtmlTOC2.h" +#include "CSXHHtmlTOC1.h" +#include "CSXHViewIDs.h" +#include "CSXHHTMLContentParser.h" +#include "CSXHHelpDataBase.h" +#include "csxhconstants.h" + +#include +#include +#include +#include + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +CCSXHHtmlTOC2* CCSXHHtmlTOC2::NewL(CCSXHGenericTOC1* aParent,const TDesC& aName, + const TDesC& aHtmlHelpFile, TBool aKeyWordTopic ) + { + CCSXHHtmlTOC2* self = CCSXHHtmlTOC2::NewLC(aParent, aName,aHtmlHelpFile,aKeyWordTopic); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +CCSXHHtmlTOC2* CCSXHHtmlTOC2::NewLC(CCSXHGenericTOC1* aParent, const TDesC& aName, + const TDesC& aHtmlHelpFile, TBool aKeyWordTopic) + { + CCSXHHtmlTOC2* self = new(ELeave) CCSXHHtmlTOC2(aParent, aName,aHtmlHelpFile,aKeyWordTopic); + CleanupStack::PushL(self); + return self; + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +CCSXHHtmlTOC2::~CCSXHHtmlTOC2() + {//No implementation required + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +CCSXHHtmlTOC2::CCSXHHtmlTOC2(CCSXHGenericTOC1* aParent,const TDesC& aName, + const TDesC& aHtmlHelpFile, TBool aKeyWordTopic) : + CCSXHGenericTOC2(aParent, aName),iHTMLFileName(aHtmlHelpFile), + iKeyWordTopic(aKeyWordTopic),iKywdParent(NULL) + {//No implementation required + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +TUid CCSXHHtmlTOC2::GetViewID() const + { + return KCSXHHtmlTopicViewID; + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +const TBuf& CCSXHHtmlTOC2::GetFileName() const + { + return iHTMLFileName; + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +EXPORT_C TBool CCSXHHtmlTOC2::GetHelpContext(TCoeHelpContext& aContext) const + { + + CCSXHHtmlTOC1* parent = STATIC_CAST(CCSXHHtmlTOC1*,iParent); + aContext.iMajor = parent->GetAppUid(); + if( KErrNotFound != iHTMLFileName.Find(KHtmlFileExtn) ) + { + aContext.iContext.Append(iHTMLFileName.Left(iHTMLFileName.Find(KHtmlFileExtn))); + } +#ifdef FF_HELP_TUTORIAL_MERGE + else if( KErrNotFound != iHTMLFileName.Find(KTutorialFileExtn) ) + { + aContext.iContext.Append(iHTMLFileName.Left(iHTMLFileName.Find(KTutorialFileExtn))); + } +#endif // FF_HELP_TUTORIAL_MERGE + return ETrue; + } +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +EXPORT_C void CCSXHHtmlTOC2::GetHtmlUrlL(TBuf& aFileUrl) const + { + aFileUrl = KFileUrlPrefix; + + aFileUrl.Append(iHTMLFilePath); + aFileUrl.Append(iHTMLFileName); + + TInt pos = aFileUrl.Find(KFwdSlash) ; + while (KErrNotFound != pos) + { + aFileUrl.Replace(pos,1,KBackSlash); + pos = aFileUrl.Find(KFwdSlash) ; + } + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +EXPORT_C TAny* CCSXHHtmlTOC2::GetTopicContentL() + { + return CCSXHHelpDataBase::GetInstance()->GetHtmlParser()->GetTopicContentL(this); + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +EXPORT_C HBufC8* CCSXHHtmlTOC2::GetContentsFromUrlL(const TDesC& fileUrl,CCoeEnv* aCoeEnv, + RFeatureControl& aFeatureControl) + { + TBuf htmlFile(fileUrl); + htmlFile.Delete(0,KFileUrlPrefixLength);//Remove "file:///" + //Replace "/" with "\\" + TInt pos = htmlFile.Locate('/') ; + while (KErrNotFound != pos) + { + htmlFile.Replace(pos,1,KFwdSlash); + pos = htmlFile.Locate('/') ; + } + return CCSXHHTMLContentParser::GetContentsFromFileL(htmlFile,aCoeEnv,aFeatureControl); + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +EXPORT_C CCSXHKywdTOC1* CCSXHHtmlTOC2::GetKywdParent() + { + return iKywdParent; + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +void CCSXHHtmlTOC2::SetKywdParent(CCSXHKywdTOC1* aKywdParent) + { + iKywdParent = aKywdParent; + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +void CCSXHHtmlTOC2::SetHtmlFilePath(const TDesC& aFilePath) + { + iHTMLFilePath = aFilePath; + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +void CCSXHHtmlTOC2::GetHtmlFileName(TBuf& aFileName) + { + aFileName.Copy(KEmptyString); + aFileName.Append(iHTMLFilePath); + aFileName.Append(iHTMLFileName); + } diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/src/CSXHKywdTOC1.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/src/CSXHKywdTOC1.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,106 @@ +/* +* 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 "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: CCSXHKywdTOC1 class definition +* +*/ + +#include "CSXHKywdTOC1.h" +#include "CSXHViewIDs.h" +#include "CSXHHelpDataBase.h" + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +CCSXHKywdTOC1* CCSXHKywdTOC1::NewL(const TDesC& aName) + { + CCSXHKywdTOC1* self = CCSXHKywdTOC1::NewLC(aName); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +CCSXHKywdTOC1* CCSXHKywdTOC1::NewLC(const TDesC& aName) + { + CCSXHKywdTOC1* self = new(ELeave) CCSXHKywdTOC1(aName); + CleanupStack::PushL(self); + return self; + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +CCSXHKywdTOC1::CCSXHKywdTOC1(const TDesC& aName): + CCSXHGenericTOC1(aName),iLegacyIndex(-1),iTOC1HtmlList(NULL) + { + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +CCSXHKywdTOC1::~CCSXHKywdTOC1() + { + if(iTOC1HtmlList) + { + iTOC1HtmlList->Close(); + delete iTOC1HtmlList; + } + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +TUid CCSXHKywdTOC1::GetViewID() const + { + return KCSXHKywdToc2ViewID; + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +TInt& CCSXHKywdTOC1::LegacyIndex() + { + return iLegacyIndex; + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +void CCSXHKywdTOC1::AppendHtmlTOC1L(CCSXHHtmlTOC1* aToc1) + { + if(NULL == iTOC1HtmlList) + iTOC1HtmlList = new(ELeave) RPointerArray; + iTOC1HtmlList->Append(aToc1); + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +RPointerArray* CCSXHKywdTOC1::GetHtmlTOC1List() + { + return iTOC1HtmlList; + } + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +void CCSXHKywdTOC1::InitChildList() + { + if(iChildList != NULL) + return; + ConstructChildList(); + TRAP_IGNORE(CCSXHHelpDataBase::GetInstance()->GenerateKeywordTOC2ListL(this)); + } + diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/src/CSXHKywdTopics.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/src/CSXHKywdTopics.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,179 @@ +/* +* 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 "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: CCSXHKywdTopics class definition +* +*/ + +#include "CSXHKywdTopics.h" +#include "CSXHHTMLContentParser.h" +#include "CSXHHelpDataBase.h" +#include "CSXHViewIDs.h" +#include "csxhconstants.h" +#include "CSXHKywdTOC1.h" + +#include +#include + +//Implementation class. This class will be used when all the keywords has to be displayed +class MCSXHKywdTopicsBuilder : public MCSXHKywdBuilder + { + public: + static MCSXHKywdTopicsBuilder* NewL() + { + MCSXHKywdTopicsBuilder* self = MCSXHKywdTopicsBuilder::NewLC(); + CleanupStack::Pop(self); + return self; + } + static MCSXHKywdTopicsBuilder* NewLC() + { + MCSXHKywdTopicsBuilder* self = new(ELeave) MCSXHKywdTopicsBuilder(); + CleanupStack::PushL(self); + return self; + } + + void InsertKeywordL(CCSXHKywdTopics* aKwdTopics, const TDesC& aKwd,CCSXHHtmlTOC1*) + {aKwdTopics->InsertKywdL(aKwd);} + + void InsertKeywordL(CCSXHKywdTopics* aKwdTopics, const TDesC& aKwd,const TInt&) + {aKwdTopics->InsertKywdL(aKwd);} + + private: + MCSXHKywdTopicsBuilder(){} + }; + + +//Implementation class. This class will be used when user has selected a keyword and +// wants to navigate to the search result view +class MCSXHKywdSelectedItemBuilder : public MCSXHKywdBuilder + { + public: + static MCSXHKywdSelectedItemBuilder* NewL(CCSXHKywdTOC1* aCurrentTopic) + { + MCSXHKywdSelectedItemBuilder* self = MCSXHKywdSelectedItemBuilder::NewLC(aCurrentTopic); + CleanupStack::Pop(self); + return self; + } + static MCSXHKywdSelectedItemBuilder* NewLC(CCSXHKywdTOC1* aCurrentTopic) + { + MCSXHKywdSelectedItemBuilder* self = new(ELeave) + MCSXHKywdSelectedItemBuilder(aCurrentTopic); + CleanupStack::PushL(self); + return self; + } + void InsertKeywordL(CCSXHKywdTopics*, const TDesC& aKwd,CCSXHHtmlTOC1* aToc1) + { + if(iCurrentTopic->GetName().Compare(aKwd) == 0) + iCurrentTopic->AppendHtmlTOC1L(aToc1); + } + void InsertKeywordL(CCSXHKywdTopics*, const TDesC& aKwd,const TInt& aLegacyIndex) + { + if(iCurrentTopic->GetName().Compare(aKwd) == 0) + iCurrentTopic->LegacyIndex() = aLegacyIndex; + } + + private: + MCSXHKywdSelectedItemBuilder(CCSXHKywdTOC1* aCurrentTopic) + :iCurrentTopic(aCurrentTopic){} + CCSXHKywdTOC1* iCurrentTopic; + }; + +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +CCSXHKywdTopics* CCSXHKywdTopics::NewL(const TApaAppCaption& aAppCaption) + { + CCSXHKywdTopics* self = CCSXHKywdTopics::NewLC(aAppCaption); + CleanupStack::Pop(self); + return self; + } +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +CCSXHKywdTopics* CCSXHKywdTopics::NewLC(const TApaAppCaption& aAppCaption) + { + CCSXHKywdTopics* self = new(ELeave) CCSXHKywdTopics(aAppCaption); + CleanupStack::PushL(self); + return self; + } +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +CCSXHKywdTopics::CCSXHKywdTopics(const TDesC& aName) : CCSXHGenericTOC1(aName) + {} +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +CCSXHKywdTopics::~CCSXHKywdTopics() + { + if(iCurrentTopic) + delete iCurrentTopic; + } +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +TUid CCSXHKywdTopics::GetViewID() const + { + return KCSXHKywdToc1ViewID; + } +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +void CCSXHKywdTopics::CopyChildListL(CDesCArray* aArray) + { + iKywdTopics = aArray; + MCSXHKywdTopicsBuilder* builder = NULL; + builder = MCSXHKywdTopicsBuilder::NewL(); + CCSXHHelpDataBase::GetInstance()->FillKeywordTopicsL(builder); + delete builder; + } +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +void CCSXHKywdTopics::InsertKywdL(const TDesC& aKywd) + { + TBuf child(KTabSpace); + child.Append(aKywd); + iKywdTopics->InsertIsqL(child); + } +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +CCSXHHelpContentBase* CCSXHKywdTopics::GetChildL(const TDesC& aName) + { + if(iCurrentTopic) + { + delete iCurrentTopic; + iCurrentTopic = NULL; + } + + iCurrentTopic = CCSXHKywdTOC1::NewL(aName); + + MCSXHKywdSelectedItemBuilder* builder = NULL; + builder = MCSXHKywdSelectedItemBuilder::NewL(iCurrentTopic); + + CCSXHHelpDataBase::GetInstance()->FillKeywordTopicsL(builder); + + delete builder; + return iCurrentTopic; + } +// --------------------------------------------------------- +// Items commented in header. +// --------------------------------------------------------- +CCSXHKywdTOC1* CCSXHKywdTopics::GetSelectedTopic() + { + return iCurrentTopic; + } + + + diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/src/CSXHLegacyContentParser.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/src/CSXHLegacyContentParser.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,273 @@ +/* +* 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 "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: CCSXHLegacyContentParser class definition +* +*/ + +#include "CSXHLegacyContentParser.h" +#include "CSXHLegacyTOC1.h" +#include "CSXHLegacyTOC2.h" +#include "CSXHKywdTOC1.h" +#include "CSXHHelpDataBase.h" + +#include +#include +#include +#include +#include + +CCSXHLegacyContentParser* CCSXHLegacyContentParser::NewL(CCSXHHelpDataBase +*aDataBase) + { + CCSXHLegacyContentParser* self = CCSXHLegacyContentParser::NewLC(aDataBase); + CleanupStack::Pop(self); + return self; + } + +CCSXHLegacyContentParser* CCSXHLegacyContentParser::NewLC(CCSXHHelpDataBase +*aDataBase) + { + CCSXHLegacyContentParser* self = new (ELeave) CCSXHLegacyContentParser(aDataBase); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +void CCSXHLegacyContentParser::ConstructL() + { + iModel = CHlpModel::NewL(CCoeEnv::Static()->FsSession(), this); + iModel->OpenL(); + } + +CCSXHLegacyContentParser::CCSXHLegacyContentParser(CCSXHHelpDataBase* aDataBase) + :iTopic(NULL) + { + iDataBase = aDataBase; + iHlpList = NULL; + } + +CCSXHLegacyContentParser::~CCSXHLegacyContentParser() + { + if(iTopic) + delete iTopic; + if(iHlpList) + delete iHlpList; + + //No need to delete the entries here, it will be done by the database + iLegacyTOC1List.Close(); + + if(iModel) + { + TRAP_IGNORE(iModel->CloseL()); + delete iModel; + } + } +// -------------------------------------------------------------------------- +// Gets the available kywds from the legacy content and sends them to the +// database +// -------------------------------------------------------------------------- +void CCSXHLegacyContentParser::GenerateKywdTOC1ListL(CCSXHHelpDataBase* aDataBase) + { + CHlpList* HlpList; + HlpList = CHlpList::NewL(); + iModel->SearchL(EIndexList); + iModel->LoadListL(HlpList); + + TInt nCount(HlpList->MdcaCount()); + for (TInt i(0); i < nCount; i++) + { + TBuf appName; + appName = HlpList->MdcaPoint(i); + TRAP_IGNORE(aDataBase->InsertKeywordL(appName,i,HlpList->Item(i)->HelpFileUid())); + } + delete HlpList; + } +// -------------------------------------------------------------------------- +// Gets the available TOC1 from the legacy content and sends them to the +// database. Local copy of the TOC1 objects is maintained for generating TOC2 +// -------------------------------------------------------------------------- +void CCSXHLegacyContentParser::GenerateTOC1ListL(CCSXHHelpDataBase* aDataBase) + { + const TInt twoColumnFlatArray = 2; + CDesCArray* categoryList = new(ELeave) CDesCArrayFlat(twoColumnFlatArray); + CleanupStack::PushL(categoryList); + iModel->CategoryListL(categoryList); + CCSXHLegacyTOC1* CategoryObj; + TBuf appName; + TLinearOrder anOrder(Orderer); + for (TInt i(0); i < categoryList->Count(); i++) + { + appName = categoryList->MdcaPoint(i); + CategoryObj = CCSXHLegacyTOC1::NewL(appName); + if(aDataBase->GetMainTopics()->InsertChild(CategoryObj)) + iLegacyTOC1List.Append(CategoryObj);//Keep a local copy*/ + } + CleanupStack::Pop(categoryList); + delete categoryList; + } +// -------------------------------------------------------------------------- +// Gets the available TOC2 objects for the TOC1 object +// -------------------------------------------------------------------------- +void CCSXHLegacyContentParser::GenerateTOC2ListL(CCSXHGenericTOC1& aGenericTOC1Object, + RPointerArray* GenericTOC2List) + { + iModel->SearchL(ETopicListForCategory, aGenericTOC1Object.GetName()); + if(iHlpList) + { + delete iHlpList; + //Next line is Needed for code scanner + iHlpList = NULL; + } + iHlpList = CHlpList::NewL(); + iModel->LoadListL(iHlpList); + + TInt count(iHlpList->MdcaCount()); + CCSXHGenericTOC2* PLegacyTOC2; + TLinearOrder anOrder(Orderer); + for (TInt i(0); i < count; i++) + { + PLegacyTOC2 = CCSXHLegacyTOC2::NewL(&aGenericTOC1Object,iHlpList->MdcaPoint(i)); + if (KErrNone != GenericTOC2List->InsertInOrder(PLegacyTOC2,anOrder)) + delete PLegacyTOC2; + } + } +// -------------------------------------------------------------------------- +// Gets the RTF content for the given topic +// -------------------------------------------------------------------------- +TAny* CCSXHLegacyContentParser::GetTopicContentL(CCSXHGenericTOC2* aTopic) + { + TInt nCount(iHlpList->MdcaCount()); + TInt nIndex(0); + for(nIndex=0;nIndex < nCount; nIndex++) + { + TBuf appName; + appName.Append(iHlpList->MdcaPoint(nIndex)); + if(appName.Compare(aTopic->GetName())==0) + break; + } + if(iTopic) + { + delete iTopic; + //Next line is Needed for code scanner + iTopic = NULL; + } + iTopic = CHlpTopic::NewL(); + CHlpItem* item = iHlpList->Item(nIndex); + iModel->TopicSearchL(*item); + iModel->LoadTopicL(iTopic); + return iTopic->TopicText(); + } + +void CCSXHLegacyContentParser::HandleModelEventL(TInt aEvent) + { + iStatus = aEvent; + } + +// -------------------------------------------------------------------------- +// Gets the number of kywd subtopics for the given kywd +// -------------------------------------------------------------------------- +TInt CCSXHLegacyContentParser::InitGenerateTOC2ListForKeywordSearchL(CCSXHKywdTOC1* aKywdTOC1Object) + { + if(aKywdTOC1Object->LegacyIndex() == -1 || (!iLegacyTOC1List.Count())) + return 0; + CHlpList* SearchList; + + if(iHlpList) + { + delete iHlpList; + //Next line is Needed for code scanner + iHlpList = NULL; + } + iHlpList = CHlpList::NewL(); + SearchList = CHlpList::NewLC(); + iModel->SearchL(EIndexList); + iModel->LoadListL(SearchList); + //Search Panel + CHlpItem* item = SearchList->Item(aKywdTOC1Object->LegacyIndex()); + iModel->IndexSearchL(*item); + iModel->LoadListL(iHlpList); + + CleanupStack::PopAndDestroy(SearchList); + return iHlpList->MdcaCount(); + } + + +// -------------------------------------------------------------------------- +// Gets the available kywd subtopics for the given kywd +// -------------------------------------------------------------------------- +void CCSXHLegacyContentParser::GenerateTOC2ListForKeywordSearchL(CCSXHKywdTOC1* aKywdTOC1Object) + { + if(aKywdTOC1Object->LegacyIndex() == -1 || (!iLegacyTOC1List.Count())) + return; + + TInt nCount(iHlpList->MdcaCount()); + CCSXHGenericTOC2* PLegacyTOC2; + TLinearOrder anOrder(Orderer); + for (TInt i(0); i < nCount; i++) + { + PLegacyTOC2 = CCSXHLegacyTOC2::NewL(aKywdTOC1Object,iHlpList->MdcaPoint(i),ETrue); + iDataBase->InsertKeywordTopic(aKywdTOC1Object,PLegacyTOC2); + iDataBase->IncrementKeywordSearchCount(); + } + + } + +CCSXHLegacyTOC1* CCSXHLegacyContentParser::GetTOC1ForTOC2(CCSXHLegacyTOC2*) + { + TInt count = iLegacyTOC1List.Count(); + CCSXHLegacyTOC1* toc1; + for(TInt i = 0; iCategory().Compare(toc1->GetName())==0) + return toc1; + } + return NULL; + } + +CCSXHHelpContentBase* CCSXHLegacyContentParser::GetContextTopic(TCoeHelpContext& aContext) + { + TRAPD(err,LoadContextTopicL(aContext)); + if(err != KErrNone || NULL == iTopic) + return NULL; + + TInt count = iLegacyTOC1List.Count(); + CCSXHLegacyTOC1* toc1; + for(TInt i = 0; iCategory().Compare(toc1->GetName())==0) + { + return toc1->GetContextTopic(iTopic->TopicTitle()); + } + } + return NULL; + } + +void CCSXHLegacyContentParser::LoadContextTopicL(TCoeHelpContext& aContext) + { + if(iTopic) + { + delete iTopic; + //Next line is Needed for code scanner + iTopic = NULL; + } + + iModel->ContextSearchL(aContext); + if(ETopicAvailable == iStatus ) + { + iTopic = CHlpTopic::NewL(); + iModel->LoadTopicL(iTopic); + } + } diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/src/CSXHLegacyTOC1.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/src/CSXHLegacyTOC1.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,80 @@ +/* +* 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 "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: CCSXHLegacyTOC1 class definition +* +*/ + +#include "CSXHLegacyTOC1.h" +#include "CSXHViewIDs.h" +#include "CSXHLegacyContentParser.h" +#include "CSXHHelpDataBase.h" + +#include + +CCSXHLegacyTOC1* CCSXHLegacyTOC1::NewL(const TDesC& aName) + { + CCSXHLegacyTOC1* self = CCSXHLegacyTOC1::NewLC(aName); + CleanupStack::Pop(self); + return self; + } + +CCSXHLegacyTOC1* CCSXHLegacyTOC1::NewLC(const TDesC& aName) + { + CCSXHLegacyTOC1* self = new(ELeave) CCSXHLegacyTOC1(aName); + CleanupStack::PushL(self); + return self; + } + +CCSXHLegacyTOC1::CCSXHLegacyTOC1(const TDesC& aName) : +CCSXHGenericTOC1(aName) + {//No implementation required + } + +TUid CCSXHLegacyTOC1::GetViewID() const + { + return KCSXHToc2ViewID; + } + +CCSXHHelpContentBase* CCSXHLegacyTOC1::GetContextTopic(const TDesC& aContextName) + { + TBool resetChildList = EFalse; + if(iChildList ==NULL) + { + InitChildList();//Generates child list if required. + resetChildList = ETrue; + } + + TInt count = iChildList->Count(); + CCSXHHelpContentBase* toc2 = NULL; + for(TInt i=0;iGetName().Compare(aContextName) == 0) + return toc2;//Child list should not be reset + } + if(resetChildList) + ResetChildList(); + return NULL; + } + +void CCSXHLegacyTOC1::InitChildList() + { + if(iChildList != NULL) + return; + ConstructChildList(); + + TRAP_IGNORE(CCSXHHelpDataBase::GetInstance()-> + GetLegacyParser()->GenerateTOC2ListL(*this,iChildList)); + } + diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/src/CSXHLegacyTOC2.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/src/CSXHLegacyTOC2.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,65 @@ +/* +* 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 "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: CCSXHLegacyTOC2 class definition +* +*/ + +#include "CSXHLegacyTOC2.h" +#include "CSXHViewIDs.h" +#include "CSXHGenericTOC1.h" +#include "CSXHLegacyContentParser.h" +#include "CSXHHelpDataBase.h" + +#include + +CCSXHLegacyTOC2* CCSXHLegacyTOC2::NewL(CCSXHGenericTOC1* aParent,const +TDesC& aName,TBool aKey) + { + CCSXHLegacyTOC2* self = CCSXHLegacyTOC2::NewLC(aParent,aName,aKey); + CleanupStack::Pop(self); + return self; + } + +CCSXHLegacyTOC2* CCSXHLegacyTOC2::NewLC(CCSXHGenericTOC1* aParent,const +TDesC& aName,TBool aKey) + { + CCSXHLegacyTOC2* self = new(ELeave) CCSXHLegacyTOC2(aParent,aName,aKey); + CleanupStack::PushL(self); + return self; + } + + +CCSXHLegacyTOC2::CCSXHLegacyTOC2(CCSXHGenericTOC1* aParent,const TDesC& aName,TBool aKey) : +CCSXHGenericTOC2(aParent,aName),iKeyWordTopic (aKey) + {//No implementation required + } + +TUid CCSXHLegacyTOC2::GetViewID() const + { + return KCSXHLegacyTopicViewID; + } + +EXPORT_C TAny* CCSXHLegacyTOC2::GetTopicContentL() + { + + return CCSXHHelpDataBase::GetInstance()->GetLegacyParser()->GetTopicContentL(this); + //return NULL; + } + +EXPORT_C CCSXHLegacyTOC1* CCSXHLegacyTOC2::GetLegacyParent() + { + if(!iKeyWordTopic) + return NULL; + return CCSXHHelpDataBase::GetInstance()->GetLegacyParser()->GetTOC1ForTOC2(this); + } diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/src/CSXHMainTopics.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/src/CSXHMainTopics.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,64 @@ +/* +* 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 "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: CCSXHMainTopics class definition +* +*/ + +#include "CSXHMainTopics.h" +#include "CSXHHTMLContentParser.h" +#include "CSXHHelpDataBase.h" +#include "CSXHViewIDs.h" +#include "csxhconstants.h" + +#include +#include + +CCSXHMainTopics* CCSXHMainTopics::NewL(const TUid& aUid, const TApaAppCaption& aAppCaption) + { + CCSXHMainTopics* self = CCSXHMainTopics::NewLC(aUid,aAppCaption); + CleanupStack::Pop(self); + return self; + } + +CCSXHMainTopics* CCSXHMainTopics::NewLC(const TUid& aUid,const TApaAppCaption& aAppCaption) + { + CCSXHMainTopics* self = new(ELeave) CCSXHMainTopics(aUid, aAppCaption); + CleanupStack::PushL(self); + return self; + } + +CCSXHMainTopics::CCSXHMainTopics(const TUid& aUid,const TDesC& aName) : +CCSXHGenericTOC1(aName), iUid(aUid) + {//No implementation required + } + +CCSXHMainTopics::~CCSXHMainTopics() + {//No implementation required + } + +TUid CCSXHMainTopics::GetViewID() const + { + return iUid; + } + +void CCSXHMainTopics::ResetChildList() + { + if(iChildList == NULL) + return; + TInt count = iChildList->Count(); + for(TInt i=0;iResetChildList(); + } + } diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/src/CSXHRuntimeIndexing.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/src/CSXHRuntimeIndexing.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,355 @@ +/* +* 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 "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: CCSXHRuntimeIndexing class definition +* +*/ + + +#include +#include +#include +#include +#include // for CAknNoteDialog +#include +#include +#include + +#include "CSXHRuntimeIndexing.h" +#include "CSXHHtmlTOC1.h" +#include "csxhconstants.h" + +// buffer length of Drive information in index file +// +const TInt KMaxDriveInfo = 100; + +CCSXHRuntimeIndexing::CCSXHRuntimeIndexing() + { + iCoeEnv = CCoeEnv::Static(); + } + +CCSXHRuntimeIndexing::~CCSXHRuntimeIndexing() + { + delete iFullDirName; + iFile.Close(); + } + +CCSXHRuntimeIndexing* CCSXHRuntimeIndexing::NewL() + { + CCSXHRuntimeIndexing* self = new ( ELeave ) CCSXHRuntimeIndexing(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +void CCSXHRuntimeIndexing::ConstructL() + { + RFs& fileSession = iCoeEnv->FsSession(); + iFullDirName = HBufC::NewL( KMaxFileName ); + + TFileName fullDirName; + + GetPrivatePath( fullDirName ); + if ( !BaflUtils::PathExists( fileSession, fullDirName ) ) + { + fileSession.CreatePrivatePath( EDriveC ); + } + + TInt len = fullDirName.Length(); + TDriveList dirList; + if( fileSession.DriveList( dirList ) == KErrNone ) + { + TDriveInfo info; + TInt driveListLen = dirList.Length(); + + for ( TInt i = 0; i < driveListLen; i++ ) + { + // make separate folder for C/D/E/... drive + // e.g. C:\\private\\10005234\\C\\ + + TInt err = fileSession.Drive( info, i ); + if ( err == KErrNone && + info.iType != EMediaNotPresent ) + { + TChar driveChar; + RFs::DriveToChar( i, driveChar ); + fullDirName.Append( driveChar ); + fullDirName.Append( KFwdSlash ); + fileSession.MkDir( fullDirName ); + fullDirName.Delete( len, 3 ); + } + } + + } + } + +TBool CCSXHRuntimeIndexing::IndexFileExists() + { + RFs& fileSession = iCoeEnv->FsSession(); + TBuf fileName; + GetPrivatePath( fileName ); + fileName.Append( _L("Z\\") ); + AppendLocale( fileName ); + fileName.Append( KMasterMetaFile ); + + // Now the dirName is C:\\private\\\\Z\\index.xml + // check if it exists, if yes, runtime indexing must be launched before + // since Z based Help content must be delivered with cell phone + // + return BaflUtils::FileExists( fileSession, fileName ); + + } + +void CCSXHRuntimeIndexing::BeginIndexFile( const TChar& aDrive ) + { + RFs& fileSession = iCoeEnv->FsSession(); + TPtr des = iFullDirName->Des(); + iDriveLetter = aDrive; + des.Zero(); + GetPrivatePath( des ); + des.Append( aDrive ); + des.Append( KFwdSlash ); + AppendLocale( des ); + if ( !BaflUtils::PathExists( fileSession, des ) ) + { + // generate C:\\private\\\\\\ folder + // + fileSession.MkDir( des ); + } + + // for temporary usage, once it's finished successfully, + // rename to index.xml. otherwise, the old index file still exists. + // + des.Append( KMasterMetaTmpFile ); + iFile.Replace( fileSession, des, EFileWrite ); + + HBufC8* driveInfo = HBufC8::NewLC( KMaxDriveInfo ); + TPtr8 ptr = driveInfo->Des(); + ptr.Append( KIndexXMLVesion ); + ptr.Append( _L( "\r\n" ) ); + iFile.Write( *driveInfo ); + CleanupStack::PopAndDestroy( driveInfo ); + } + +void CCSXHRuntimeIndexing::FinishAndCloseIndexFileL() + { + RFs& fileSession = iCoeEnv->FsSession(); + iFile.Write( KIndexCollectEnd ); + iFile.Close(); + + TTime time; + // Replace the index.xml with temporary file, in case it fails, will have no impact + // the original index.xml, it's a backup solution + // + TBuf newName; + TInt err = KErrNone; + newName.Copy( *iFullDirName ); + TInt pos = newName.LocateReverse( TChar('\\') ); + newName.Delete( pos + 1, newName.Length() - pos - 1 ); // remove the temp name + newName.Append( KMasterMetaFile ); // and append index.xml + + err = fileSession.Replace( *iFullDirName, newName ); + + if ( err == KErrNone ) + { + // set the modified date of master index.xml + // to be the same with related help content folder + // e.g. C:\\resource\\xhtml\\01\\ modified time is 2009.3.1 + // C:\\private\\10005234\\C\\01\\index.xml will be 2009.3.1 + // this will make sure once help content folder changed, index.xml can be + // determined to change. + TBuf helpDir; + helpDir.Append( iDriveLetter ); + helpDir.Append( KInstallPath ); + // append locale information + AppendLocale( helpDir ); + + fileSession.Modified( helpDir, time ); + err = fileSession.SetModified( newName, time ); + + } + + } + +void CCSXHRuntimeIndexing::RuntimeGenerateIndexL( const CCSXHHtmlTOC1& aToc1, const TDesC& aFeature ) + { + // Form into an entry, like + // + HBufC8* appName = CnvUtfConverter::ConvertFromUnicodeToUtf8L( aToc1.GetName() ); + CleanupStack::PushL(appName); + TRAPD( err, SenXmlUtils::LeaveOnXmlEscapesL( *appName ) ); + TInt length = KMaxIndexEntryExclude; + TBuf8 buffUid; + + buffUid.Append( KHexPrefix ); + buffUid.AppendNumFixedWidth( aToc1.GetAppUid().iUid, EHex, 8 ); + length += appName->Length(); + length += aFeature.Length(); + HBufC8* entry = HBufC8::NewLC( length ); + TPtr8 des = entry->Des(); + // Append entry tag + des.Append( KIndexXMLEntryBegin ); + // Append feature id attribute "FeatureID" + des.Append( KAppFeatureIDTag ); + des.Append( KIndexQuoteBegin ); + // Append feature id + des.Append( aFeature ); + des.Append( KIndexQuoteEnd ); + // Append app id attribute "id" + des.Append( KMasterCollection_idTag ); + des.Append( KIndexQuoteBegin ); + // Append app id + des.Append( buffUid ); + des.Append( KIndexQuoteEnd ); + // Append app name attribut "navtitle" + des.Append( KTOC2NameTag ); + des.Append( KIndexQuoteBegin ); + if ( err == KErrSenInvalidCharacters ) + { + // special handling to the XML-Escaped char + HBufC8* newElement = SenXmlUtils::EncodeHttpCharactersLC( *appName ); + des.Append( *newElement ); + CleanupStack::PopAndDestroy( newElement ); + } + else + { + des.Append( *appName ); + } + + des.Append( KIndexXMLEntryEnd ); + iFile.Write( *entry ); + + CleanupStack::PopAndDestroy( entry ); + CleanupStack::PopAndDestroy( appName ); + + } + +void CCSXHRuntimeIndexing::GetPrivatePath( TDes& aName ) + { + RFs& fileSession = iCoeEnv->FsSession(); + TBuf privatePath; + TChar drive; + RFs::DriveToChar( EDriveC, drive ); + + fileSession.PrivatePath( privatePath ); + aName.Append( drive ); + aName.Append( TChar(':') ); + aName.Append( privatePath ); + } + +void CCSXHRuntimeIndexing::AppendLocale( TDes& aDir ) + { + RFs& fileSession = iCoeEnv->FsSession(); + RArray langs; + BaflUtils::GetDowngradePathL( fileSession, User::Language(), langs ); + TInt len = aDir.Length(); + + if ( len > 0 ) + { + TLanguage lang = langs[0]; + if(lang < 10) + { + aDir.AppendNumFixedWidth( lang, EDecimal,2 ); + } + else + { + aDir.AppendNum( lang ); + } + } + else + { + // rarely case, if no current language, use English + aDir.Append( _L("01") ); + } + + aDir.Append( KFwdSlash ); + langs.Reset(); + } + +void CCSXHRuntimeIndexing::DeleteIndexFile( const TChar& aDrive ) + { + RFs& fileSession = iCoeEnv->FsSession(); + TBuf des; + GetPrivatePath( des ); + des.Append( aDrive ); + des.Append( KFwdSlash ); + AppendLocale( des ); + // C:\\private\\\\\\\\index.xml + des.Append( KMasterMetaFile ); + + if ( BaflUtils::FileExists( fileSession, des ) ) + { + fileSession.Delete( des ); + } + + } + +TInt CCSXHRuntimeIndexing::CheckDirChange( const TChar& aDrive ) + { + RFs& fsSession = iCoeEnv->FsSession(); + + // Begin to search help content folder to see if there are date modify + // meanwhile, compare to the related folder in private directory + TFileName dirName; + dirName.Append( aDrive ); + dirName.Append( KInstallPath ); + + // Begin to append locale, note this will append current locale, + // thru which, app can determine if it's caused by user changed locales + AppendLocale( dirName ); + + TTime dirModified(0); + TTime fileModified(0); + + if ( BaflUtils::PathExists( fsSession, dirName ) ) + { + // here is modified time of help content folder + fsSession.Modified( dirName, dirModified ); + } + else + { + // fast return, no need to go on checking + return KNoDirExist; + } + + TFileName filename; + GetPrivatePath( filename ); + filename.Append( aDrive ); + filename.Append( KFwdSlash ); + AppendLocale( filename ); + filename.Append( KMasterMetaFile ); + + if ( BaflUtils::FileExists( fsSession, filename ) ) + { + // here is modified time of index.xml + // + fsSession.Modified( filename, fileModified ); + } + else + { + return KNoIndexExist; + } + + if ( fileModified != dirModified ) + { + // folder changed, return it + TInt ret = KErrNotFound; + RFs::CharToDrive( aDrive, ret ); + return ret; + } + + return KNoChange; + } diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/src/CSXHXMLParseHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/src/CSXHXMLParseHandler.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,644 @@ +/* +* 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 "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: CCSXHXMLParseHandler class definition +* +*/ + +#include "CSXHXMLParseHandler.h" +#include "CSXHHtmlTOC2.h" +#include "CSXHKywdTopics.h" +#include "CSXHHelpDataBase.h" +#include "CSXHHtmlTOC1.h" +#include "csxhconstants.h" +#include "CSXHHTMLContentParser.h" + +#include +#include +#include +#include + + +CCSXHXMLParseHandler::CCSXHXMLParseHandler(CCoeEnv* aCoeEnv) + { + iCoeEnv = aCoeEnv; + } + +CCSXHXMLParseHandler::~CCSXHXMLParseHandler() + { + if(iFeatureIds) + { + delete iFeatureIds; + iFeatureIds = NULL; + } + } +TInt CCSXHXMLParseHandler::StartDocument() + { + return KErrNone; + } + +TInt CCSXHXMLParseHandler::EndDocument() + { + return KErrNone; + } + +void CCSXHXMLParseHandler::SetDataBasePtr(CCSXHHelpDataBase* aDataBase) + { + iDataBase = aDataBase; + } + +TDesC& CCSXHXMLParseHandler::GetApplicationName() + { + return iApplicationName; + } + +TPtr CCSXHXMLParseHandler::GetFeatureIds() + { + return iFeatureIds->Des(); + } + +TBool CCSXHXMLParseHandler::SetAppNameFlag(const TDesC8& alocalName,const TDesC& aAppTag) + { + //R_TYPE_APPLICATION_TAG_NAME + TBool Result = EFalse; + TBuf AppName; + CnvUtfConverter::ConvertToUnicodeFromUtf8(AppName,alocalName); + if(AppName.Compare(aAppTag) == 0) + { + iApplicationName.Copy(KEmptyString); + Result = ETrue; + } + else + { + Result = EFalse; + } + return Result; + } + +//-------------- CCSXHXMLParseHandler_Kywd ------------------- + +void CCSXHXMLParseHandler_Kywd::SetHtmlContentParserPtr(CCSXHHTMLContentParser* aParser) + { + iParser = aParser; + } + +CCSXHXMLParseHandler_Kywd* CCSXHXMLParseHandler_Kywd::NewL(CCoeEnv* aCoeEnv) + { + CCSXHXMLParseHandler_Kywd* self = new (ELeave)CCSXHXMLParseHandler_Kywd(aCoeEnv); + return self; + } + +CCSXHXMLParseHandler_Kywd::CCSXHXMLParseHandler_Kywd(CCoeEnv* aCoeEnv) +:CCSXHXMLParseHandler(aCoeEnv) + { + iCurrentHtmlToc1 = NULL; + iIsTargetName = EFalse; + } + +TInt CCSXHXMLParseHandler_Kywd::StartElement (const TDesC8& /*iURI*/ , const TDesC8& +alocalName, const TDesC8& /*iqualname*/, const RAttributeArray& aAttributes) + { + if(iFeatureIds) + { + delete iFeatureIds; + iFeatureIds = NULL; + } + + + TRAP_IGNORE(iFeatureIds = HBufC::NewL(2)); + TPtr FIdValue = iFeatureIds->Des(); + FIdValue.Copy(_L("-1")); + + if(iIsTOC2View) + { + CreateTOC2ObjectsforKeywordSearch(alocalName,aAttributes); + } + else + { + iIsAppName = SetAppNameFlag(alocalName,KSearchViewTOC1Tag); + + TInt nElements = aAttributes.Count(); + TBuf TagName; + RAttribute AttributeInfo; + RTagInfo TagInformation; + CnvUtfConverter::ConvertToUnicodeFromUtf8(TagName,alocalName); + + for(TInt i=0; i LocalName; + //Read from resource file + CnvUtfConverter::ConvertToUnicodeFromUtf8(LocalName,TagInformation.LocalName().DesC()); + if(LocalName.Compare(_L("FeatureID")) == 0 && TagName.Compare(_L("text")) == 0) + { + if(iFeatureIds) + { + delete iFeatureIds; + iFeatureIds = NULL; + } + + TRAP_IGNORE(iFeatureIds = HBufC::NewL(AttributeInfo.Value().DesC().Length())); + TPtr FIdValue = iFeatureIds->Des(); + CnvUtfConverter::ConvertToUnicodeFromUtf8(FIdValue,AttributeInfo.Value().DesC()); + } + } + } + return KErrNone; + } + +TInt CCSXHXMLParseHandler_Kywd::EndElement ( const TDesC8& ,const TDesC8& ,const TDesC8& ) + { + TRAP_IGNORE(CreateAndInsertKywdL());//Result can be ignored + iIsTargetName = EFalse; + iIsAppName = EFalse; + return KErrNone; + } + +TInt CCSXHXMLParseHandler_Kywd::Characters (const TDesC8& aBuff, const TInt /*aStart*/, const TInt /*aLength*/) + { + TBuf TitleName; + if(iIsAppName) + { + CnvUtfConverter::ConvertToUnicodeFromUtf8(TitleName,aBuff); + iApplicationName.Append(TitleName); + } + else if(iIsTargetName) + { + CnvUtfConverter::ConvertToUnicodeFromUtf8(TitleName,aBuff); + iKeywordSearchTOC2TitleName.Append(TitleName); + } + return KErrNone; + } + +void CCSXHXMLParseHandler_Kywd::CreateTOC2ObjectsforKeywordSearch(const TDesC8& + alocalName, const RAttributeArray& aAttributes) + { + iIsAppName = SetAppNameFlag(alocalName,KSearchViewTOC1Tag); + + TInt nElements = aAttributes.Count(); + TBufTagValue; + RAttribute AttributeInfo; + RTagInfo TagInformation; + + TBuf AppName; + CnvUtfConverter::ConvertToUnicodeFromUtf8(AppName,alocalName); + if(AppName.Compare(KSearchViewTOC2Tag) == 0) + { + iKeywordSearchTOC2TitleName.Copy(KEmptyString); + iIsTargetName = ETrue; + } + else + { + iIsTargetName = EFalse; + } + + if(!iIsTOC2View) + return; + + for(TInt i=0; i LocalName; + //Read from resource file + CnvUtfConverter::ConvertToUnicodeFromUtf8(LocalName,TagInformation.LocalName().DesC()); + if(LocalName.Compare(KHtmlPageTag) == 0) + { + CnvUtfConverter::ConvertToUnicodeFromUtf8(iHTMLPageName, + AttributeInfo.Value().DesC()); + } + else if(LocalName.Compare(_L("FeatureID")) == 0) + { + if(iFeatureIds) + { + delete iFeatureIds; + iFeatureIds = NULL; + } + TRAP_IGNORE(iFeatureIds = HBufC::NewL(AttributeInfo.Value().DesC().Length())); + TPtr FIdValue = iFeatureIds->Des(); + CnvUtfConverter::ConvertToUnicodeFromUtf8(FIdValue,AttributeInfo.Value().DesC()); + + } + } + + } + +void CCSXHXMLParseHandler_Kywd::CreateAndInsertKywdL() + { + if(iParser->CheckFeatureIDL(iFeatureIds->Des())) + { + if(iIsAppName && !iIsTOC2View) + { + iDataBase->InsertKeywordL(iApplicationName,iCurrentHtmlToc1); + } + else if(iIsTargetName && iApplicationName.Compare(iTOC1Name)==0) + { + CCSXHHtmlTOC2* PXHTMLObject = + CCSXHHtmlTOC2::NewL(iCurrentHtmlToc1,iKeywordSearchTOC2TitleName,iHTMLPageName,ETrue); + PXHTMLObject->SetKywdParent(STATIC_CAST(CCSXHKywdTopics*,iDataBase->GetKywdTopics()) + ->GetSelectedTopic()); + STATIC_CAST(CCSXHHtmlTOC2*,PXHTMLObject)->SetHtmlFilePath(iFilePath); + iDataBase->InsertKeywordTopicL(/*iTOC1Name,*/PXHTMLObject); + } + } + } + +void CCSXHXMLParseHandler_Kywd::SetTOC1Title(const TDesC& aName) + { + iTOC1Name = aName; + } + +void CCSXHXMLParseHandler_Kywd::SetCurrentHtmlToc1(CCSXHHtmlTOC1* aCurrentHtmlToc1) + { + iCurrentHtmlToc1 = aCurrentHtmlToc1; + } + +void CCSXHXMLParseHandler_Kywd::SetIsTOC2(TBool aFlag) + { + iIsTOC2View = aFlag; + } + +void CCSXHXMLParseHandler_Kywd::SetPath(const TDesC& aFilePath) + { + iFilePath.Copy(KEmptyString); + iFilePath.Append(aFilePath); + } + +//-------------- CCSXHXMLParseHandler_MetaFile ------------------- + +CCSXHXMLParseHandler_MetaFile* CCSXHXMLParseHandler_MetaFile::NewL(CCoeEnv* aCoeEnv) + { + CCSXHXMLParseHandler_MetaFile* self = new (ELeave)CCSXHXMLParseHandler_MetaFile(aCoeEnv); + return self; + } + +CCSXHXMLParseHandler_MetaFile::CCSXHXMLParseHandler_MetaFile(CCoeEnv* aCoeEnv) +:CCSXHXMLParseHandler(aCoeEnv) + { + + } +TInt CCSXHXMLParseHandler_MetaFile::StartElement (const TDesC8& , const TDesC8& +alocalName, const TDesC8& , const RAttributeArray& aAttributes) + { + iIsAppName = SetAppNameFlag(alocalName,KAppNameTag); + + TInt nElements = aAttributes.Count(); + TBuf LocalTagName; + RAttribute AttributeInfo; + RTagInfo TagInformation; + + CnvUtfConverter::ConvertToUnicodeFromUtf8(LocalTagName,alocalName); + for(TInt i=0; iDes(); + CnvUtfConverter::ConvertToUnicodeFromUtf8(FIdValue,AttributeInfo.Value().DesC()); + } + + if(LocalTagName.Compare(KAppNameTag) == 0 && nElements == 0) + { + if(iFeatureIds) + { + delete iFeatureIds; + iFeatureIds = NULL; + } + + TRAP_IGNORE(iFeatureIds = HBufC::NewL(2)); + TPtr FIdValue = iFeatureIds->Des(); + FIdValue.Copy(_L("-1")); + } + + return KErrNone; + } + +TInt CCSXHXMLParseHandler_MetaFile::EndElement ( const TDesC8& ,const TDesC8& ,const TDesC8& ) + { + iIsAppName = EFalse; + return KErrNone; + } + +TInt CCSXHXMLParseHandler_MetaFile::Characters (const TDesC8& aBuff, const TInt /*aStart*/, const TInt /*aLength*/) + { + TBuf TitleName; + if(iIsAppName) + { + CnvUtfConverter::ConvertToUnicodeFromUtf8(TitleName,aBuff); + iApplicationName.Append(TitleName); + } + return KErrNone; + } + + +//-------------- CCSXHXMLParseHandler_MasterMetaFile ------------------- +CCSXHXMLParseHandler_MasterMetaFile* CCSXHXMLParseHandler_MasterMetaFile::NewL(CCoeEnv* aCoeEnv) + { + CCSXHXMLParseHandler_MasterMetaFile* self = new (ELeave)CCSXHXMLParseHandler_MasterMetaFile(aCoeEnv); + return self; + } + +CCSXHXMLParseHandler_MasterMetaFile::CCSXHXMLParseHandler_MasterMetaFile(CCoeEnv* aCoeEnv) +:CCSXHXMLParseHandler(aCoeEnv) + { + + } + +TInt CCSXHXMLParseHandler_MasterMetaFile::StartElement (const TDesC8& , const TDesC8& +, const TDesC8& , const RAttributeArray& aAttributes) + { + TRAP_IGNORE(CreateTOC1ObjectsL(aAttributes)); + return KErrNone; + } + + + +void CCSXHXMLParseHandler_MasterMetaFile::CreateTOC1ObjectsL(const + RAttributeArray& aAttributes) + { + TInt nElements = aAttributes.Count(); + TBuf appUid; + TBuf appName; + RAttribute AttributeInfo; + RTagInfo TagInformation; + TLinearOrder anOrder(Orderer); + + for(TInt i=0; i LocalName; + //Read from resource file + CnvUtfConverter::ConvertToUnicodeFromUtf8(LocalName,TagInformation.LocalName().DesC()); + + if ( LocalName.Compare( KDriveInfo ) == 0 ) + { + TChar driveLetter(AttributeInfo.Value().DesC()[0]); + RFs::CharToDrive( driveLetter, iDrive ); + } + + if(LocalName.Compare(KMasterCollection_idTag) == 0) + { + CnvUtfConverter::ConvertToUnicodeFromUtf8(appUid,AttributeInfo.Value().DesC()); + } + + if(LocalName.Compare(KTOC2NameTag) == 0) + { + CnvUtfConverter::ConvertToUnicodeFromUtf8(appName,AttributeInfo.Value().DesC()); + if(2 == nElements) + { + if(iFeatureIds) + { + delete iFeatureIds; + iFeatureIds = NULL; + } + + iFeatureIds = HBufC::NewL(2); + TPtr FIdValue = iFeatureIds->Des(); + FIdValue.Copy(_L("-1")); + } + + + iParser->InsertHTMLToc1L( appUid, appName, iDrive, iDataBase, iFeatureIds->Des() ); + } + + if(LocalName.Compare(_L("FeatureID")) == 0) + { + if(iFeatureIds) + { + delete iFeatureIds; + iFeatureIds = NULL; + } + + iFeatureIds = HBufC::NewL(AttributeInfo.Value().DesC().Length()); + TPtr FIdValue = iFeatureIds->Des(); + CnvUtfConverter::ConvertToUnicodeFromUtf8(FIdValue,AttributeInfo.Value().DesC()); + } + } + } + +void CCSXHXMLParseHandler_MasterMetaFile::SetHtmlContentParserPtr(CCSXHHTMLContentParser* aParser) + { + iParser = aParser; + } + + +//-------------- CCSXHXMLParseHandler_IndexFile ------------------- + +CCSXHXMLParseHandler_IndexFile* CCSXHXMLParseHandler_IndexFile::NewL(CCoeEnv* aCoeEnv) + { + CCSXHXMLParseHandler_IndexFile* self = new (ELeave)CCSXHXMLParseHandler_IndexFile(aCoeEnv); + return self; + } + +CCSXHXMLParseHandler_IndexFile::CCSXHXMLParseHandler_IndexFile(CCoeEnv* aCoeEnv) +:CCSXHXMLParseHandler(aCoeEnv) + { + + } + +TInt CCSXHXMLParseHandler_IndexFile::StartElement (const TDesC8& , const TDesC8& +, const TDesC8& , const RAttributeArray& aAttributes) + { + if(iFeatureIds) + { + delete iFeatureIds; + iFeatureIds = NULL; + } + + TRAP_IGNORE(iFeatureIds = HBufC::NewL(2)); + TPtr FIdValue = iFeatureIds->Des(); + FIdValue.Copy(_L("-1")); + + TRAP_IGNORE(CreateTOC2ObjectsL(aAttributes)); + return KErrNone; + } + +void CCSXHXMLParseHandler_IndexFile::SetArray(RPointerArray* aHTMLlist) + { + iTOC2Array = aHTMLlist; + } + +void CCSXHXMLParseHandler_IndexFile::SetGenericTOC1Object(CCSXHGenericTOC1& aParent) + { + iParent = &aParent; + } + +void CCSXHXMLParseHandler_IndexFile::SetHtmlContentParserPtr(CCSXHHTMLContentParser* aParser) + { + iParser = aParser; + } + + +void CCSXHXMLParseHandler_IndexFile::CreateTOC2ObjectsL(const + RAttributeArray& aAttributes) + { + TInt nElements = aAttributes.Count(); + TBufTagValue; + RAttribute AttributeInfo; + RTagInfo TagInformation; + TLinearOrder anOrder(Orderer); + + for(TInt i=0; i LocalName; + //Read from resource file + CnvUtfConverter::ConvertToUnicodeFromUtf8(LocalName,TagInformation.LocalName().DesC()); + + if(LocalName.Compare(KTOC2NameTag) == 0) + { + if(iParser->CheckFeatureIDL(iFeatureIds->Des()) || 2 == nElements) + { + CnvUtfConverter::ConvertToUnicodeFromUtf8(TagValue,AttributeInfo.Value().DesC()); + + CCSXHGenericTOC2* PXHTMLObject = CCSXHHtmlTOC2::NewL(iParent, + TagValue,iHTMLPageName); + + STATIC_CAST(CCSXHHtmlTOC2*,PXHTMLObject)->SetHtmlFilePath(iFilePath); + + if (KErrNone != iTOC2Array->InsertInOrder(PXHTMLObject,anOrder)) + delete PXHTMLObject; + } + } + else if(LocalName.Compare(KHtmlPageTag) == 0) + { + CnvUtfConverter::ConvertToUnicodeFromUtf8(iHTMLPageName, + AttributeInfo.Value().DesC()); + } + else if(LocalName.Compare(KCompressedTag) == 0) + { + CnvUtfConverter::ConvertToUnicodeFromUtf8(iCompressString, + AttributeInfo.Value().DesC()); + } + else if(LocalName.Compare(_L("FeatureID")) == 0) + { + if(iFeatureIds) + { + delete iFeatureIds; + iFeatureIds = NULL; + } + + iFeatureIds = HBufC::NewL(AttributeInfo.Value().DesC().Length()); + TPtr FIdValue = iFeatureIds->Des(); + CnvUtfConverter::ConvertToUnicodeFromUtf8(FIdValue,AttributeInfo.Value().DesC()); + } + } + } + +void CCSXHXMLParseHandler_IndexFile::SetPath(const TDesC& aFilePath) + { + iFilePath.Copy(KEmptyString); + iFilePath.Append(aFilePath); + } + +//-------------- CCSXHXMLParseHandler_MasterKeywordFile ------------------- + +CCSXHXMLParseHandler_MasterKywd* CCSXHXMLParseHandler_MasterKywd::NewL(CCoeEnv* aCoeEnv) + { + CCSXHXMLParseHandler_MasterKywd* self = new (ELeave)CCSXHXMLParseHandler_MasterKywd(aCoeEnv); + return self; + } + +CCSXHXMLParseHandler_MasterKywd::CCSXHXMLParseHandler_MasterKywd(CCoeEnv* aCoeEnv) +:CCSXHXMLParseHandler(aCoeEnv) + { + + } + +TInt CCSXHXMLParseHandler_MasterKywd::StartElement (const TDesC8& , const TDesC8& +, const TDesC8& , const RAttributeArray& aAttributes) + { + TRAP_IGNORE(CreateTOC1ObjectsL(aAttributes)); + return KErrNone; + } + +void CCSXHXMLParseHandler_MasterKywd::SetHtmlContentParserPtr(CCSXHHTMLContentParser* aParser) + { + iParser = aParser; + } + +void CCSXHXMLParseHandler_MasterKywd::SetCurrentHtmlToc1(CCSXHHtmlTOC1* aCurrentHtmlToc1) + { + iCurrentHtmlToc1 = aCurrentHtmlToc1; + } + +void CCSXHXMLParseHandler_MasterKywd::CreateTOC1ObjectsL(const + RAttributeArray& aAttributes) + { + TInt nElements = aAttributes.Count(); + TBuf appUid; + TBuf KeywordName; + RAttribute AttributeInfo; + RTagInfo TagInformation; + + TLinearOrder anOrder(Orderer); + + for(TInt i=0; i LocalName; + //Read from resource file + CnvUtfConverter::ConvertToUnicodeFromUtf8(LocalName,TagInformation.LocalName().DesC()); + + if(LocalName.Compare(KMasterSearchTag) == 0) + { + CnvUtfConverter::ConvertToUnicodeFromUtf8(KeywordName,AttributeInfo.Value().DesC()); + } + + if(LocalName.Compare(KMasterCollectionTag) == 0) + { + CnvUtfConverter::ConvertToUnicodeFromUtf8(appUid,AttributeInfo.Value().DesC()); + if(2 == nElements) + { + if(iParser->GetHTMLToc1(appUid,this)) + iDataBase->InsertKeywordL(KeywordName,iCurrentHtmlToc1); + } + } + + if(LocalName.Compare(_L("FeatureID")) == 0) + { + if(iFeatureIds) + { + delete iFeatureIds; + iFeatureIds = NULL; + } + + iFeatureIds = HBufC::NewL(AttributeInfo.Value().DesC().Length()); + TPtr FIdValue = iFeatureIds->Des(); + CnvUtfConverter::ConvertToUnicodeFromUtf8(FIdValue,AttributeInfo.Value().DesC()); + + if(iParser->CheckFeatureIDL(iFeatureIds->Des())) + { + if(iParser->GetHTMLToc1(appUid,this)) + iDataBase->InsertKeywordL(KeywordName,iCurrentHtmlToc1); + } + } + } + } + diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/src/CsHelpCmdLineParser.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/src/CsHelpCmdLineParser.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,98 @@ +/* +* Copyright (c) 2002 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: +* This is a utility class that provides functionality +* for parsing command line arguments passed into the +* Cshelp application when launched by another application. +* +* +*/ + + +// INCLUDE FILES +#include + +#include "CsHelpCmdLineParser.h" +const TInt KArrSize = 2; +// ================= MEMBER FUNCTIONS ======================= + +// C++ constructor +CCsHlpCmdLineParser::CCsHlpCmdLineParser() +: CBase() + { + } + + +// --------------------------------------------------------- +// CCsHlpCmdLineParser::ConstructL(...) +// (other items were commented in a header). +// --------------------------------------------------------- +void CCsHlpCmdLineParser::ConstructL(const TDesC8& aCmdLine) + { + iCmdLine = CBufFlat::NewL(aCmdLine.Size()); + iCmdLine->InsertL(0, aCmdLine.Ptr(), aCmdLine.Size()); + } + + +// --------------------------------------------------------- +// CCsHlpCmdLineParser::~CCsHlpCmdLineParser() +// --------------------------------------------------------- +CCsHlpCmdLineParser::~CCsHlpCmdLineParser() + { + delete iCmdLine; + } + +// --------------------------------------------------------- +// CCsHlpCmdLineParser::ContextListL() +// (other items were commented in a header). +// --------------------------------------------------------- +CArrayFix* CCsHlpCmdLineParser::ContextListL() + { + CArrayFixFlat* array = + new(ELeave)CArrayFixFlat(KArrSize); + CleanupStack::PushL(array); + TInt count(0); + + iCmdLine->Read(0, &count, sizeof(TInt)); + iPos += sizeof(TInt); + for (TInt i(0); i < count; i++) + { + TCoeHelpContext context; + GetContext(context); + array->AppendL(context); + } + CleanupStack::Pop(array); // array + return array; + } + +// --------------------------------------------------------- +// CCsHlpCmdLineParser::GetContext(...) +// (other items were commented in a header). +// --------------------------------------------------------- +void CCsHlpCmdLineParser::GetContext(TCoeHelpContext& aContext) + { + TInt length(0); + iCmdLine->Read(iPos, &length, sizeof(TInt)); + iPos += sizeof(TInt); + TPtr8 ptr((TText8*)aContext.iContext.Ptr(), length); + iCmdLine->Read(iPos, ptr, length); + aContext.iContext.SetLength(length/KArrSize); + iPos += length; + + iCmdLine->Read(iPos, &aContext.iMajor, sizeof(TUid)); + + iPos += sizeof(TUid); + } + +// End of file diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/src/HelpEngine.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/HelpEngine/src/HelpEngine.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,28 @@ +/* +* 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 "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: +* +*/ + +#include +//#include + +#ifdef EKA2 +GLDEF_C TInt E32Dll() +#else +GLDEF_C TInt E32Dll(TDllReason /*aReason*/) +#endif + { + return(KErrNone); + } diff -r 000000000000 -r 1f04cf54edd8 csxhelp/aif/CsHelp_Caption.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/aif/CsHelp_Caption.rss Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,31 @@ +/* +* Copyright (c) 2002 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: +* This file contains caption resource of CsHelp. +* +* +*/ + + +#include + +#include "csxelp.loc" + +RESOURCE CAPTION_DATA + { + caption = qtn_apps_ls1_help; + shortcaption = qtn_apps_grid_help; + } + +// End of file diff -r 000000000000 -r 1f04cf54edd8 csxhelp/aif/CsHelpaif.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/aif/CsHelpaif.rss Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,33 @@ +/* +* Copyright (c) 2002 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: +* RSS for creating the aif file for CsHelp. +* +*/ + + +NAME HAIF +#include + +#include "csxhelp.loc" + +RESOURCE AIF_DATA + { + app_uid=0x10005234; + num_icons = 2; + embeddability = KAppNotEmbeddable; + newfile = KAppDoesNotSupportNewFile; + } + +// End of File diff -r 000000000000 -r 1f04cf54edd8 csxhelp/data/CsHelp.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/data/CsHelp.rss Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,1128 @@ +/* +* Copyright (c) 2002 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: +* Main resource file for the CsHelp application. +* +* +*/ + + +// RESOURCE IDENTIFIER +NAME HELP // 4 letter ID + +// INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +#include + +#include "CsHelp.hrh" +#include +#include "cshelp.laf" + +// CONSTANTS + +#define DRIVE "Z:" +#define DIRPATH "\\" + +#ifdef RD_APPS_TO_EXES +#define DIR APP_BITMAP_DIR DIRPATH +#else +#define DIR "\\system\\apps\\cshelp\\" +#endif + +#define FILE "cshelp.mbm" + +#define FULLPATH DRIVE DIR FILE +#define qtn_help_icon_bitmap_file FULLPATH + + +// RESOURCE DEFINITIONS + +RESOURCE RSS_SIGNATURE + { + } + +RESOURCE TBUF1 + { + } + +RESOURCE EIK_APP_INFO + { + } + + + +////////////NEW://////////////////////////////////////// +RESOURCE LOCALISABLE_APP_INFO r_cshelp_localisable_app_info + { + short_caption = qtn_apps_grid_help; //This is shown in appmenu grid view (Csxhelp.loc) + caption_and_icon = + CAPTION_AND_ICON_INFO + { + caption = qtn_apps_ls1_help; //This is shown in appmenu list view (Csxhelp.loc) +#ifdef __SCALABLE_ICONS + number_of_icons = 1; +#ifdef RD_APPS_TO_EXES + icon_file = APP_BITMAP_DIR"\\Cshelp_aif.mif"; + #else // !RD_APPS_TO_EXES + icon_file = "\\System\\Apps\\Cshelp\\Cshelp_aif.mif"; + #endif // RD_APPS_TO_EXES +#else + number_of_icons = 2; +#ifdef RD_APPS_TO_EXES + icon_file = APP_BITMAP_DIR"\\Cshelp_aif.mbm"; + #else // !RD_APPS_TO_EXES + icon_file = "\\System\\Apps\\Cshelp\\Cshelp_aif.mbm"; + #endif // RD_APPS_TO_EXES +#endif + }; + } +////////////NEW//////////////////////////////////////// + +///CSX Start +RESOURCE AVKON_VIEW r_CSXH_toc1 +{ + menubar = r_CSXH_menubar; + cba = r_cshelp_softkeys_options_exit_open; +} + +RESOURCE AVKON_VIEW r_TopicList + { + menubar = r_CSXH_menubar_TopicList; + cba = r_cshelp_softkeys_options_back_open; + } + +RESOURCE AVKON_VIEW r_KywdTOC1List + { + menubar = r_CSXH_menubar_KywdTOC1List; + cba = r_cshelp_softkeys_options_exit_find; + } + +RESOURCE AVKON_VIEW r_KywdTOC2List + { + menubar = r_CSXH_menubar_KywdTOC2List; + cba = r_cshelp_softkeys_options_back_open; + } + +RESOURCE AVKON_VIEW r_TopicTextList + { + menubar = r_CSXH_menubar_TopicTextList; + cba = r_cshelp_softkeys_options_back; + } + +RESOURCE AVKON_VIEW r_cshelp_topicforcontext + { + menubar = r_CSXH_menubar_TopicTextList; + cba = r_cshelp_softkeys_options_close; + } + +RESOURCE AVKON_VIEW r_cshelp_htmltopicview + { + menubar = r_CSXH_menubar_htmltopicview; + cba = r_cshelp_softkeys_options_back_openlink; + } + +RESOURCE AVKON_VIEW r_cshelp_htmltopicforcontext + { + menubar = r_CSXH_menubar_htmltopicview; + cba = r_cshelp_softkeys_options_close_openlink; + } + + +// --------------------------------------------------------- +// +// r_CSXH_menubar +// Menubar for CSXH example +// +// --------------------------------------------------------- +// +RESOURCE MENU_BAR r_CSXH_menubar + { + titles = + { + MENU_TITLE {menu_pane = r_CSXH_menu;} + }; + } + + +// --------------------------------------------------------- +// +// r_CSXH_menu +// Menu for "Options" +// +// --------------------------------------------------------- +// +RESOURCE MENU_PANE r_CSXH_menu + { + items = + { + MENU_ITEM {command = ECSXHOpenItem; txt = qtn_help_om_open_category; flags = EEikMenuItemAction;}, + MENU_ITEM {command = ECSXHSearchText; txt = qtn_help_om_search_xhtml;}, + MENU_ITEM {command = EAknSoftkeyExit; txt = qtn_options_exit;} + }; + } + + + +//---------------------------------------------------- +// +// r_cshelpsoftkey_cba_options_back +// Define cba for Context View +// +//---------------------------------------------------- +// +//TSW Error:EAJA-6XLFTW : +//S60 3.2 Help: Selection key opens Option menu in Topic view +//If MSK is not defined, "." appears in the MSK, +//On Middle key press, Options menu items are shown to the user +RESOURCE CBA r_cshelp_softkeys_options_back + { + buttons = + { + AVKON_CBA_BUTTON + { + id = EAknSoftkeyOptions; + txt = text_softkey_option; + }, + AVKON_CBA_BUTTON + { + id = EAknSoftkeyBack; + txt = text_softkey_back; + }, + AVKON_CBA_BUTTON + { + id = ECSXHDummyMSK; + txt = ""; + } + }; + } + +//---------------------------------------------------- +// +// r_cshelpsoftkey_cba_options_close +// Define cba for Context View +// +//---------------------------------------------------- +// +//TSW Error:EAJA-6XLFTW : +//S60 3.2 Help: Selection key opens Option menu in Topic view +//If MSK is not defined, "." appears in the MSK, +//On Middle key press, Options menu items are shown to the user +RESOURCE CBA r_cshelp_softkeys_options_close + { + buttons = + { + AVKON_CBA_BUTTON + { + id = EAknSoftkeyOptions; + txt = text_softkey_option; + }, + AVKON_CBA_BUTTON + { + id = EAknSoftkeyClose; + txt = text_softkey_close; + }, + AVKON_CBA_BUTTON + { + id = ECSXHDummyMSK; + txt = ""; + } + }; + } + +RESOURCE CBA r_cshelp_softkeys_options_close_openlink + { + buttons = + { + AVKON_CBA_BUTTON + { + id = EAknSoftkeyOptions; + txt = text_softkey_option; + }, + AVKON_CBA_BUTTON + { + id = EAknSoftkeyClose; + txt = text_softkey_close; + }, + AVKON_CBA_BUTTON + { + id = ECSXHOpenHyperLink; + txt = qtn_help_msk_open_hyperlink; + } + }; + } + + +RESOURCE CBA r_cshelp_softkeys_options_back_open + { + buttons = + { + AVKON_CBA_BUTTON + { + id = EAknSoftkeyOptions; + txt = text_softkey_option; + }, + AVKON_CBA_BUTTON + { + id = EAknSoftkeyBack; + txt = text_softkey_back; + }, + AVKON_CBA_BUTTON + { + id = ECSXHOpenTopicText; + txt = qtn_msk_open; + } + }; + } + +RESOURCE CBA r_cshelp_softkeys_options_exit_open + { + buttons = + { + AVKON_CBA_BUTTON + { + id = EAknSoftkeyOptions; + txt = text_softkey_option; + }, + AVKON_CBA_BUTTON + { + id = EAknSoftkeyExit; + txt = text_softkey_exit; + }, + AVKON_CBA_BUTTON + { + id = ECSXHOpenTopicText; + txt = qtn_msk_open; + } + }; + } +RESOURCE CBA r_cshelp_softkeys_options_exit_find + { + buttons = + { + AVKON_CBA_BUTTON + { + id = EAknSoftkeyOptions; + txt = text_softkey_option; + }, + AVKON_CBA_BUTTON + { + id = EAknSoftkeyExit; + txt = text_softkey_exit; + }, + AVKON_CBA_BUTTON + { + id = ECSXHOpenTopicText; + txt = qtn_help_msk_find; + } + }; + } +// --------------------------------------------------------- +// +// r_CSXH_menubar +// Menubar for CsXHelp example +// +// --------------------------------------------------------- +// +RESOURCE MENU_BAR r_CSXH_menubar_TopicList + { + titles = + { + MENU_TITLE {menu_pane = r_CSXH_menu_TopicList;} + }; + } + +RESOURCE MENU_BAR r_CSXH_menubar_KywdTOC1List + { + titles = + { + MENU_TITLE {menu_pane = r_CSXH_menu_KywdTOC1List;} + }; + } + +RESOURCE MENU_BAR r_CSXH_menubar_KywdTOC2List + { + titles = + { + MENU_TITLE {menu_pane = r_CSXH_menu_KywdTOC2List;} + }; + } + + +// --------------------------------------------------------- +// +// r_CSXH_menu +// Menu for "Options" +// +// --------------------------------------------------------- +// +RESOURCE MENU_PANE r_CSXH_menu_TopicList + { + items = + { + MENU_ITEM {command = ECSXHOpenTopicText; txt = qtn_help_om_open_topic;flags = EEikMenuItemAction;}, + MENU_ITEM {command = ECSXHTOC1ListView; txt = qtn_help_om_help_contents;}, + MENU_ITEM {command = ECSXHSearchText; txt = qtn_help_om_search_xhtml;}, + MENU_ITEM {command = EAknSoftkeyExit; txt = qtn_options_exit;} + }; + } + +RESOURCE MENU_PANE r_CSXH_menu_KywdTOC1List + { + items = + { + MENU_ITEM {command = ECSXHOpenTopicText; txt = qtn_help_om_find_topics; flags = EEikMenuItemAction;}, + MENU_ITEM {command = ECSXHTOC1ListView; txt = qtn_help_om_help_contents;}, + MENU_ITEM {command = EAknSoftkeyExit; txt = qtn_options_exit;} + }; + } + +RESOURCE MENU_PANE r_CSXH_menu_KywdTOC2List + { + items = + { + MENU_ITEM {command = ECSXHOpenTopicText; txt = qtn_help_om_open_topic; flags = EEikMenuItemAction;}, + MENU_ITEM {command = ECSXHTOC1ListView; txt = qtn_help_om_help_contents;}, + MENU_ITEM {command = ECSXHSearchText; txt = qtn_help_om_search_xhtml;}, + MENU_ITEM {command = EAknSoftkeyExit; txt = qtn_options_exit;} + }; + } + + + + + +// --------------------------------------------------------- +// +// r_CSXH_menubar +// Menubar for CsXHelp example +// +// --------------------------------------------------------- +// +RESOURCE MENU_BAR r_CSXH_menubar_htmltopicview + { + titles = + { + MENU_TITLE {menu_pane = r_CSXH_menu_htmltopicview;} + }; + } + + +// --------------------------------------------------------- +// +// r_CSXH_menubar +// Menubar for CsXHelp example +// +// --------------------------------------------------------- +// +RESOURCE MENU_BAR r_CSXH_menubar_TopicTextList + { + titles = + { + MENU_TITLE {menu_pane = r_CSXH_menu_TopicTextList;} + }; + } + + +// --------------------------------------------------------- +// +// r_CSXH_menu +// Menu for "Options" +// +// --------------------------------------------------------- +// +RESOURCE MENU_PANE r_CSXH_menu_htmltopicview + { + items = + { + MENU_ITEM {command = ECSXHOpenHyperLink; txt = qtn_help_om_open_hyperlink;}, + MENU_ITEM {command = ECSXHOpenApplicationTopics; txt = qtn_help_om_application_topics;}, + MENU_ITEM {command = ECSXHTOC1ListView; txt = qtn_help_om_help_contents;}, + MENU_ITEM {command = ECSXHSearchText; txt = qtn_help_om_search_xhtml;}, + MENU_ITEM { command=ECsHelpCmdFontLarge; txt=qtn_help_om_increase_text; }, + MENU_ITEM { command=ECsHelpCmdFontSmall; txt=qtn_help_om_decrease_text; }, + MENU_ITEM {command = EAknSoftkeyExit; txt = qtn_options_exit;} + }; + } + +// --------------------------------------------------------- +// +// r_CSXH_menu +// Menu for "Options" +// +// --------------------------------------------------------- +// +RESOURCE MENU_PANE r_CSXH_menu_TopicTextList + { + items = + { + MENU_ITEM {command = ECSXHOpenApplicationTopics; txt = qtn_help_om_application_topics;}, + MENU_ITEM {command = ECSXHTOC1ListView; txt = qtn_help_om_help_contents;}, + MENU_ITEM {command = ECSXHSearchText; txt = qtn_help_om_search_xhtml;}, + MENU_ITEM {command = EAknSoftkeyExit; txt = qtn_options_exit;} + }; + } + +// --------------------------------------------------------- +// +// r_type_no_help_topics +// when a other app launches help, no topic is available, +// then information note with this text is displayed. +// --------------------------------------------------------- +// + +RESOURCE TBUF r_type_no_help_topics + { + buf = qtn_help_note_no_topics; + } + +// --------------------------------------------------------- +// +// r_type_no_help_topics +// when help is unable to launch another application, +// then information note with this text is displayed. +// --------------------------------------------------------- +// + +RESOURCE TBUF r_qtn_help_note_unable_to_launch_app + { + buf = qtn_help_note_unable_launch; + } + +// --------------------------------------------------------- +// +// r_type_no_help_topics +// when help is unable to launch another application, +// then information note with this text is displayed. +// --------------------------------------------------------- +// + +RESOURCE TBUF r_qtn_help_note_app_launch_not_allowed + { + buf = qtn_help_note_no_internet; + } + +//---------------------------------------------------- +// +// r_cshelp_categorylist +// Define menubar and cba for Category List View +// +//---------------------------------------------------- +// +RESOURCE AVKON_VIEW r_cshelp_categorylist + { + menubar = r_cshelp_menubar_categorylist; + cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT; + } + +//---------------------------------------------------- +// +// r_cshelp_topiclist +// Define menubar and cba for Topic List View +// +//---------------------------------------------------- +// +RESOURCE AVKON_VIEW r_cshelp_topiclist + { + menubar = r_cshelp_menubar_topiclist; + cba = R_AVKON_SOFTKEYS_OPTIONS_BACK; + } + + +//---------------------------------------------------- +// +// r_cshelp_topiclist +// Define menubar and cba for HTML Topic View +// +//---------------------------------------------------- +// + + +RESOURCE CBA r_cshelp_softkeys_options_back_openlink + { + buttons = + { + AVKON_CBA_BUTTON + { + id = EAknSoftkeyOptions; + txt = text_softkey_option; + }, + AVKON_CBA_BUTTON + { + id = EAknSoftkeyBack; + txt = text_softkey_back; + }, + AVKON_CBA_BUTTON + { + id = ECSXHOpenHyperLink; + txt = qtn_help_msk_open_hyperlink; + } + }; + } + + +//---------------------------------------------------- +// +// r_cshelp_topic +// Define menubar and cba for Topic View +// +//---------------------------------------------------- +// +RESOURCE AVKON_VIEW r_cshelp_topic + { + menubar = r_cshelp_menubar_topic; + cba = R_AVKON_SOFTKEYS_OPTIONS_BACK; + } + +//---------------------------------------------------- +// +// r_cshelp_topicforsearch +// Define menubar and cba for Topic View For Search +// +//---------------------------------------------------- +// +RESOURCE AVKON_VIEW r_cshelp_topicforsearch + { + menubar = r_cshelp_menubar_topic; + cba = R_AVKON_SOFTKEYS_OPTIONS_BACK; + } + +//---------------------------------------------------- +// +// r_cshelp_search +// Define menubar and cba for Search View +// +//---------------------------------------------------- +// +RESOURCE AVKON_VIEW r_cshelp_search + { + menubar = r_cshelp_menubar_search; + cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT; + } + +//---------------------------------------------------- +// +// r_cshelp_searchresult +// Define menubar and cba for Search Result View +// +//---------------------------------------------------- +// +RESOURCE AVKON_VIEW r_cshelp_searchresult + { + menubar = r_cshelp_menubar_searchresult; + cba = R_AVKON_SOFTKEYS_OPTIONS_BACK; + } + + +//---------------------------------------------------- +// +// r_cshelp_menubar_categorylist +// Menubar for Category List View +// +//---------------------------------------------------- +// +RESOURCE MENU_BAR r_cshelp_menubar_categorylist + { + titles = + { + MENU_TITLE + { + menu_pane = r_cshelp_categorylist_menu; + } + }; + } + + +//---------------------------------------------------- +// +// r_cshelp_menubar_topiclist +// Menubar for Topic List View +// +//---------------------------------------------------- +// +RESOURCE MENU_BAR r_cshelp_menubar_topiclist + { + titles = + { + MENU_TITLE + { + menu_pane = r_cshelp_topiclist_menu; + } + }; + } + +//---------------------------------------------------- +// +// r_cshelp_menubar_topic +// Menubar for Topic View +// +//---------------------------------------------------- +// +RESOURCE MENU_BAR r_cshelp_menubar_topic + { + titles = + { + MENU_TITLE + { + menu_pane = r_cshelp_topic_menu; + } + }; + } + +//---------------------------------------------------- +// +// r_cshelp_menubar_search +// Menubar for Search View +// +//---------------------------------------------------- +// +RESOURCE MENU_BAR r_cshelp_menubar_search + { + titles = + { + MENU_TITLE + { + menu_pane = r_cshelp_search_menu; + } + }; + } + +//---------------------------------------------------- +// +// r_cshelp_menubar_searchresult +// Menubar for Search Result View +// +//---------------------------------------------------- +// +RESOURCE MENU_BAR r_cshelp_menubar_searchresult + { + titles = + { + MENU_TITLE + { + menu_pane = r_cshelp_searchresult_menu; + } + }; + } + +//---------------------------------------------------- +// +// r_cshelp_categorylist_menu +// Menu pane for Category List View +// +//---------------------------------------------------- +// +RESOURCE MENU_PANE r_cshelp_categorylist_menu + { + items = + { + MENU_ITEM + { + command = ECsHelpCmdViewTopicList; + txt = qtn_help_om_open_category; + }, + MENU_ITEM + { + command = ECsHelpCmdViewSearch; + txt = qtn_help_om_search; + }, + MENU_ITEM + { + command = EAknCmdExit; + txt = qtn_options_exit; + } + }; + } + +//---------------------------------------------------- +// +// r_cshelp_topiclist_menu +// Menu pane for Topic List View +// +//---------------------------------------------------- +// +RESOURCE MENU_PANE r_cshelp_topiclist_menu + { + items = + { + MENU_ITEM + { + command = ECsHelpCmdViewTopic; + txt = qtn_help_om_open_topic; + }, + MENU_ITEM + { + command = ECsHelpCmdViewCategoryList; + txt = qtn_help_om_category_list; + }, + MENU_ITEM + { + command = ECsHelpCmdViewSearch; + txt = qtn_help_om_search; + }, + MENU_ITEM + { + command = EAknCmdExit; + txt = qtn_options_exit; + } + }; + } + +//---------------------------------------------------- +// +// r_cshelp_topic_menu +// Menu pane for Topic View +// +//---------------------------------------------------- +// +RESOURCE MENU_PANE r_cshelp_topic_menu + { + items = + { + MENU_ITEM + { + command = ECsHelpCmdViewTopicList; + txt = qtn_help_om_topic_list; + }, + MENU_ITEM + { + command = ECsHelpCmdViewCategoryList; + txt = qtn_help_om_category_list; + }, + MENU_ITEM + { + command = ECsHelpCmdViewSearch; + txt = qtn_help_om_search; + }, + MENU_ITEM + { + command = EAknCmdExit; + txt = qtn_options_exit; + } + }; + } + +//---------------------------------------------------- +// +// r_cshelp_search_menu +// Menu pane for Search View +// +//---------------------------------------------------- +// +RESOURCE MENU_PANE r_cshelp_search_menu + { + items = + { + MENU_ITEM + { + command = ECsHelpCmdViewSearchResult; + txt = qtn_help_om_find_topics; + }, + MENU_ITEM + { + command = ECsHelpCmdViewCategoryList; + txt = qtn_help_om_category_list; + }, + MENU_ITEM + { + command = EAknCmdExit; + txt = qtn_options_exit; + } + }; + } + +//---------------------------------------------------- +// +// r_cshelp_searchresult_menu +// Menu pane for Search Result View +// +//---------------------------------------------------- +// +RESOURCE MENU_PANE r_cshelp_searchresult_menu + { + items = + { + MENU_ITEM + { + command = ECsHelpCmdViewTopicForSearch; + txt = qtn_help_om_open_topic; + }, + MENU_ITEM + { + command = ECsHelpCmdViewCategoryList; + txt = qtn_help_om_category_list; + }, + MENU_ITEM + { + command = ECsHelpCmdViewSearch; + txt = qtn_help_om_search; + }, + MENU_ITEM + { + command = EAknCmdExit; + txt = qtn_options_exit; + } + }; + } + +//---------------------------------------------------- +// +// r_cshelp_context_menu +// Menu pane for Search Result View +// +//---------------------------------------------------- +// +RESOURCE MENU_PANE r_cshelp_context_menu + { + items = + { + MENU_ITEM + { + command = ECsHelpCmdViewTopicForContext; + txt = qtn_help_om_open_topic; + }, + MENU_ITEM + { + command = ECsHelpCmdViewCategoryList; + txt = qtn_help_om_category_list; + }, + MENU_ITEM + { + command = ECsHelpCmdViewSearch; + txt = qtn_help_om_search; + }, + MENU_ITEM + { + command = EAknCmdExit; + txt = qtn_options_exit; + } + }; + } + + +// --------------------------------------------------------- +// +// r_cshelp_search_category_tabs +// Tab groups for navi pane of Search View and Category View +// +// --------------------------------------------------------- +// +RESOURCE TAB_GROUP r_cshelp_search_category_tabs + { + tab_width = EAknTabWidthWithTwoTabs; // two tabs + tabs = + { + TAB + { + id = ECsHelpCategoryTab; + bmpfile = qtn_help_icon_bitmap_file; + bmpid = EMbmCshelpQgn_prop_folder_tab2; + bmpmask = EMbmCshelpQgn_prop_folder_tab2_mask; + }, + TAB + { + id = ECsHelpSearchTab; + bmpfile = qtn_help_icon_bitmap_file; + bmpid = EMbmCshelpQgn_prop_list_keyword_tab2; + bmpmask = EMbmCshelpQgn_prop_list_keyword_tab2_mask; + } + }; + } + +// --------------------------------------------------------- +// +// r_cshelp_search_progress_note +// Define progress note for searcing in search result view +// +// --------------------------------------------------------- +// +RESOURCE DIALOG r_cshelp_search_progress_note + { + flags = EAknProgressNoteFlags; + buttons = R_AVKON_SOFTKEYS_EMPTY; + items = + { + DLG_LINE + { + type=EAknCtNote; + id=EProgressNote; + + control= AVKON_NOTE + { + layout = EProgressLayout; + singular_label = qtn_help_noteg_searching; + }; + } + }; + } + +// --------------------------------------------------------- +// +// r_cshelp_install_uninstall_note +// Define information flag for notifying installation +// +// --------------------------------------------------------- +// +RESOURCE DIALOG r_cshelp_install_uninstall_note + { + flags = EAknInformationNoteFlags; + buttons = R_AVKON_SOFTKEYS_EMPTY; + items = + { + DLG_LINE + { + type=EAknCtNote; + id=EInstallNote; + + control= AVKON_NOTE + { + layout = EGeneralLayout; + singular_label = qtn_help_noteg_install; + }; + } + }; + } + +// --------------------------------------------------------- +// +// r_qtn_help_title_help +// Define title of category list view. +// +// --------------------------------------------------------- +// +RESOURCE TBUF32 r_qtn_help_title_help + { + buf = qtn_help_title_help; + } + +// --------------------------------------------------------- +// +// r_qtn_help_note_no_topics +// when a other app launches help, no topic is available, +// then information note with this text is displayed. +// --------------------------------------------------------- +// +RESOURCE TBUF80 r_qtn_help_note_no_topics + { + buf = qtn_help_note_no_topics; + } + + +RESOURCE CBA r_softkeys_options_exit__options + { + buttons = + { + CBA_BUTTON {id=EAknSoftkeyOptions; txt = "Options";}, + CBA_BUTTON {id=EAknSoftkeyExit; txt = "Exit"; }, + CBA_BUTTON {id=EAknSoftkeyOptions; txt = "Options";} + }; + } + +//////////////////////////////////////////////////////////////// +//[FIXME: The resource r_cshelp_topic_view_layout +// is not used anymore. Instead TAknMultiLineTextLayout is used +// (in CCsHelpTopicContainer::SizeChanged and +// inCCsHelpTopicContainer::GetTextFormatL) +// --------------------------------------------------------- +// +// r_cshelp_topic_view_layout +// Define layout of topic view. +// +// --------------------------------------------------------- +// +/************************************************* +RESOURCE AVKON_LAYOUT_EDWIN r_cshelp_topic_view_layout + { + font = topic_view_font; //ELatinPlain12 + C = topic_view_C; //215 + l = topic_view_l; //4 + r = topic_view_r; //5 + B = topic_view_B; //21 + W = topic_view_W; //167 + J = topic_view_J; //ELayoutAlignBidi + lines = topic_view_lines; //8 + nextB = topic_view_nextB; //37 + } +****************************************************/ + +// To let know what are the services that are provided +RESOURCE AIW_INTEREST r_aiwtutorialapp_interest +{ + items = + { + AIW_CRITERIA_ITEM + { + id = ECmdAiwPlaceHolder; + serviceCmd = KAiwCmdHelp; + serviceClass = KAiwClassMenu; + contentType = "help/tutorial"; + defaultProvider = 0x10281D09; + maxProviders = 1; + }, + AIW_CRITERIA_ITEM + { + id = KPresentationExists; // Use service cmd id as id + serviceCmd = KPresentationExists; + serviceClass = KAiwClassMenu; + contentType = "help/tutorial"; + defaultProvider = 0x10281D09; + maxProviders = 1; + }, + AIW_CRITERIA_ITEM + { + id = KPlayPresentation; + serviceCmd = KPlayPresentation; + serviceClass = KAiwClassMenu; + contentType = "help/tutorial"; + defaultProvider = 0x10281D09; + maxProviders = 1; + } + }; +} +// --------------------------------------------------------- +// +// qtn_memlo_ram_out_of_mem +// Text to display for low memory situations. +// +// --------------------------------------------------------- +RESOURCE TBUF256 r_cshelp_retrieve_no_memory_text + { + buf = qtn_memlo_ram_out_of_mem; + } + +#ifdef FF_HELP_TUTORIAL_MERGE +// --------------------------------------------------------- +// +// qtn_memlo_ram_out_of_mem +// Text to display for low memory situations. +// +// --------------------------------------------------------- +RESOURCE TBUF256 r_cshelp_tutorial_text + { + buf = qtn_help_toc_list_item_tutorial; + } +#endif +// End of File diff -r 000000000000 -r 1f04cf54edd8 csxhelp/data/Cshelp_reg.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/data/Cshelp_reg.rss Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,39 @@ +/* +* Copyright (c) 2004 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: +* +*/ + + +#include +#include + +#include + +UID2 KUidAppRegistrationResourceFile +UID3 0x10005234 // Cshelp application UID + +RESOURCE APP_REGISTRATION_INFO + { + app_file = "Cshelp"; +#ifndef RD_APPS_TO_EXES + attributes = KAppBuiltAsDll; + localisable_resource_file = APP_RESOURCE_DIR"\\Cshelp\\Cshelp"; +#else + localisable_resource_file = APP_RESOURCE_DIR"\\Cshelp"; +#endif + localisable_resource_id = R_CSHELP_LOCALISABLE_APP_INFO; + } + +// End of File diff -r 000000000000 -r 1f04cf54edd8 csxhelp/data/lch.rh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/data/lch.rh Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,40 @@ +/* +* Copyright (c) 2002 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: +* Main resource file for the CsHelp application. +* +* +*/ + + +// lch.rh + +#ifndef LCH_RH +#define LCH_RH + +// +// FROM EIKDEF.RH - avoids HlpModel requiring Eikon +// +STRUCT RSS_SIGNATURE + { + LONG signature=4; + SRLINK self; + } + +STRUCT TXT + { + LTEXT buf; + } + +#endif // LCH_RH diff -r 000000000000 -r 1f04cf54edd8 csxhelp/data/lch.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/data/lch.rss Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,32 @@ +/* +* Copyright (c) 2002 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: +* Main resource file for the CsHelp application. +* +* +*/ + + +// lch.rss + +NAME LCH1 + +#include"lch.rh" + +RESOURCE RSS_SIGNATURE { } + +RESOURCE TXT r_help_path + { + buf = "z:\\sys\\bin\\cshelp.exe"; + } diff -r 000000000000 -r 1f04cf54edd8 csxhelp/group/HelpEngine.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/group/HelpEngine.mmp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,70 @@ +/* +* 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 "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: Project definition file for Help Engine Library +* +*/ + + +#include + +TARGET HelpEngine.dll +TARGETTYPE dll +UID 0x10282350 0x0BC03CD8 +LANGUAGE_IDS + +CAPABILITY CAP_CLIENT_DLL +VENDORID VID_DEFAULT + +SOURCEPATH ../HelpEngine/src +SOURCE HelpEngine.cpp +SOURCE CSXHHelpContentBase.cpp +SOURCE CSXHHelpDataBase.cpp +SOURCE CSXHMainTopics.cpp +SOURCE CSXHKywdTopics.cpp +SOURCE CSXHGenericTOC1.cpp +SOURCE CSXHGenericTOC2.cpp +SOURCE CSXHHtmlTOC1.cpp +SOURCE CSXHHtmlTOC2.cpp +SOURCE CSXHLegacyTOC1.cpp +SOURCE CSXHLegacyTOC2.cpp +SOURCE CSXHContextTopic.cpp +SOURCE CSXHKywdTOC1.cpp +SOURCE CSXHXMLParseHandler.cpp +SOURCE CSXHHTMLContentParser.cpp +SOURCE CSXHLegacyContentParser.cpp +SOURCE CsHelpCmdLineParser.cpp +SOURCE CSXHRuntimeIndexing.cpp + + + +USERINCLUDE ../HelpEngine/inc ../HelpEngine/rss + +// This is a SYSTEMINCLUDE macro containing the applications +// layer specific include directories +APP_LAYER_SYSTEMINCLUDE + +LIBRARY cone.lib euser.lib bafl.lib +LIBRARY efsrv.lib charconv.lib eikctl.lib +LIBRARY SenXml.lib XMLFRAMEWORK.lib ezip.lib +LIBRARY HLPMODEL.LIB PlatformEnv.lib +LIBRARY featmgr.lib +LIBRARY ptiengine.lib //Input Language variation changes + +#if defined(WINS) + deffile ./HelpEnginewinscw.def +#else // #elif defined(ARM) + deffile ./HelpEnginearm.def +#endif +nostrictdef + diff -r 000000000000 -r 1f04cf54edd8 csxhelp/group/HelpEnginearm.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/group/HelpEnginearm.def Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,64 @@ +EXPORTS + _ZN13CCSXHHtmlTOC213GetKywdParentEv @ 1 NONAME + _ZN13CCSXHHtmlTOC216GetTopicContentLEv @ 2 NONAME + _ZN13CCSXHHtmlTOC219GetContentsFromUrlLERK7TDesC16P7CCoeEnvR15RFeatureControl @ 3 NONAME + _ZN15CCSXHLegacyTOC215GetLegacyParentEv @ 4 NONAME + _ZN15CCSXHLegacyTOC216GetTopicContentLEv @ 5 NONAME + _ZN16CCSXHGenericTOC114FillChildDataLEP12CDesC16Array @ 6 NONAME + _ZN16CCSXHGenericTOC19GetChildLERK7TDesC16 @ 7 NONAME + _ZN16CCSXHGenericTOC29GetParentEv @ 8 NONAME + _ZN17CCSXHContextTopic8GetTopicEv @ 9 NONAME + _ZN17CCSXHHelpDataBase13GetKywdTopicsEv @ 10 NONAME + _ZN17CCSXHHelpDataBase13GetMainTopicsEv @ 11 NONAME + _ZN17CCSXHHelpDataBase15GetContextTopicERK6TDesC8 @ 12 NONAME + _ZN17CCSXHHelpDataBase19GetHtmlTopicForUrlLERK7TDesC16 @ 13 NONAME + _ZN17CCSXHHelpDataBase20ClearAllTOC1ContentsEv @ 14 NONAME + _ZN17CCSXHHelpDataBase21GetKeywordSearchCountEv @ 15 NONAME + _ZN17CCSXHHelpDataBase28InitGenerateKeywordTOC2ListLEP13CCSXHKywdTOC1 @ 16 NONAME + _ZN17CCSXHHelpDataBase4NewLEP7CCoeEnvRK4TBufILi256EE @ 17 NONAME + _ZNK13CCSXHHtmlTOC211GetHtmlUrlLER4TBufILi256EE @ 18 NONAME + _ZNK13CCSXHHtmlTOC214GetHelpContextER15TCoeHelpContext @ 19 NONAME + _ZNK20CCSXHHelpContentBase7GetNameEv @ 20 NONAME + _ZTI13CCSXHHtmlTOC1 @ 21 NONAME ; ## + _ZTI13CCSXHHtmlTOC2 @ 22 NONAME ; ## + _ZTI13CCSXHKywdTOC1 @ 23 NONAME ; ## + _ZTI15CCSXHKywdTopics @ 24 NONAME ; ## + _ZTI15CCSXHLegacyTOC1 @ 25 NONAME ; ## + _ZTI15CCSXHLegacyTOC2 @ 26 NONAME ; ## + _ZTI15CCSXHMainTopics @ 27 NONAME ; ## + _ZTI16CCSXHGenericTOC1 @ 28 NONAME ; ## + _ZTI17CCSXHContextTopic @ 29 NONAME ; ## + _ZTI17CCSXHHelpDataBase @ 30 NONAME ; ## + _ZTI19CCsHlpCmdLineParser @ 31 NONAME ; ## + _ZTI20CCSXHHelpContentBase @ 32 NONAME ; ## + _ZTI20CCSXHXMLParseHandler @ 33 NONAME ; ## + _ZTI22CCSXHHTMLContentParser @ 34 NONAME ; ## + _ZTI24CCSXHLegacyContentParser @ 35 NONAME ; ## + _ZTI25CCSXHXMLParseHandler_Kywd @ 36 NONAME ; ## + _ZTI29CCSXHXMLParseHandler_MetaFile @ 37 NONAME ; ## + _ZTI30CCSXHXMLParseHandler_IndexFile @ 38 NONAME ; ## + _ZTI31CCSXHXMLParseHandler_MasterKywd @ 39 NONAME ; ## + _ZTI35CCSXHXMLParseHandler_MasterMetaFile @ 40 NONAME ; ## + _ZTV13CCSXHHtmlTOC1 @ 41 NONAME ; ## + _ZTV13CCSXHHtmlTOC2 @ 42 NONAME ; ## + _ZTV13CCSXHKywdTOC1 @ 43 NONAME ; ## + _ZTV15CCSXHKywdTopics @ 44 NONAME ; ## + _ZTV15CCSXHLegacyTOC1 @ 45 NONAME ; ## + _ZTV15CCSXHLegacyTOC2 @ 46 NONAME ; ## + _ZTV15CCSXHMainTopics @ 47 NONAME ; ## + _ZTV16CCSXHGenericTOC1 @ 48 NONAME ; ## + _ZTV17CCSXHContextTopic @ 49 NONAME ; ## + _ZTV17CCSXHHelpDataBase @ 50 NONAME ; ## + _ZTV19CCsHlpCmdLineParser @ 51 NONAME ; ## + _ZTV20CCSXHHelpContentBase @ 52 NONAME ; ## + _ZTV20CCSXHXMLParseHandler @ 53 NONAME ; ## + _ZTV22CCSXHHTMLContentParser @ 54 NONAME ; ## + _ZTV24CCSXHLegacyContentParser @ 55 NONAME ; ## + _ZTV25CCSXHXMLParseHandler_Kywd @ 56 NONAME ; ## + _ZTV29CCSXHXMLParseHandler_MetaFile @ 57 NONAME ; ## + _ZTV30CCSXHXMLParseHandler_IndexFile @ 58 NONAME ; ## + _ZTV31CCSXHXMLParseHandler_MasterKywd @ 59 NONAME ; ## + _ZTV35CCSXHXMLParseHandler_MasterMetaFile @ 60 NONAME ; ## + _ZTI20CCSXHRuntimeIndexing @ 61 NONAME ; ## + _ZTV20CCSXHRuntimeIndexing @ 62 NONAME ; ## + diff -r 000000000000 -r 1f04cf54edd8 csxhelp/group/HelpEnginewinscw.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/group/HelpEnginewinscw.def Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,23 @@ +EXPORTS + ??1CCSXHHelpDataBase@@UAE@XZ @ 1 NONAME ; CCSXHHelpDataBase::~CCSXHHelpDataBase(void) + ?ClearAllTOC1Contents@CCSXHHelpDataBase@@QAEXXZ @ 2 NONAME ; void CCSXHHelpDataBase::ClearAllTOC1Contents(void) + ?FillChildDataL@CCSXHGenericTOC1@@UAEXPAVCDesC16Array@@@Z @ 3 NONAME ; void CCSXHGenericTOC1::FillChildDataL(class CDesC16Array *) + ?GetChildL@CCSXHGenericTOC1@@UAEPAVCCSXHHelpContentBase@@ABVTDesC16@@@Z @ 4 NONAME ; class CCSXHHelpContentBase * CCSXHGenericTOC1::GetChildL(class TDesC16 const &) + ?GetContentsFromUrlL@CCSXHHtmlTOC2@@SAPAVHBufC8@@ABVTDesC16@@PAVCCoeEnv@@AAVRFeatureControl@@@Z @ 5 NONAME ; class HBufC8 * CCSXHHtmlTOC2::GetContentsFromUrlL(class TDesC16 const &, class CCoeEnv *, class RFeatureControl &) + ?GetContextTopic@CCSXHHelpDataBase@@QAEPAVCCSXHHelpContentBase@@ABVTDesC8@@@Z @ 6 NONAME ; class CCSXHHelpContentBase * CCSXHHelpDataBase::GetContextTopic(class TDesC8 const &) + ?GetHelpContext@CCSXHHtmlTOC2@@QBEHAAVTCoeHelpContext@@@Z @ 7 NONAME ; int CCSXHHtmlTOC2::GetHelpContext(class TCoeHelpContext &) const + ?GetHtmlTopicForUrlL@CCSXHHelpDataBase@@QAEPAVCCSXHHelpContentBase@@ABVTDesC16@@@Z @ 8 NONAME ; class CCSXHHelpContentBase * CCSXHHelpDataBase::GetHtmlTopicForUrlL(class TDesC16 const &) + ?GetHtmlUrlL@CCSXHHtmlTOC2@@QBEXAAV?$TBuf@$0BAA@@@@Z @ 9 NONAME ; void CCSXHHtmlTOC2::GetHtmlUrlL(class TBuf<256> &) const + ?GetKeywordSearchCount@CCSXHHelpDataBase@@QAEHXZ @ 10 NONAME ; int CCSXHHelpDataBase::GetKeywordSearchCount(void) + ?GetKywdParent@CCSXHHtmlTOC2@@QAEPAVCCSXHKywdTOC1@@XZ @ 11 NONAME ; class CCSXHKywdTOC1 * CCSXHHtmlTOC2::GetKywdParent(void) + ?GetKywdTopics@CCSXHHelpDataBase@@QAEPAVCCSXHGenericTOC1@@XZ @ 12 NONAME ; class CCSXHGenericTOC1 * CCSXHHelpDataBase::GetKywdTopics(void) + ?GetLegacyParent@CCSXHLegacyTOC2@@QAEPAVCCSXHLegacyTOC1@@XZ @ 13 NONAME ; class CCSXHLegacyTOC1 * CCSXHLegacyTOC2::GetLegacyParent(void) + ?GetMainTopics@CCSXHHelpDataBase@@QAEPAVCCSXHGenericTOC1@@XZ @ 14 NONAME ; class CCSXHGenericTOC1 * CCSXHHelpDataBase::GetMainTopics(void) + ?GetName@CCSXHHelpContentBase@@QBE?AVTPtr16@@XZ @ 15 NONAME ; class TPtr16 CCSXHHelpContentBase::GetName(void) const + ?GetParent@CCSXHGenericTOC2@@QAEPAVCCSXHGenericTOC1@@XZ @ 16 NONAME ; class CCSXHGenericTOC1 * CCSXHGenericTOC2::GetParent(void) + ?GetTopic@CCSXHContextTopic@@QAEPAVCCSXHHelpContentBase@@XZ @ 17 NONAME ; class CCSXHHelpContentBase * CCSXHContextTopic::GetTopic(void) + ?GetTopicContentL@CCSXHHtmlTOC2@@UAEPAXXZ @ 18 NONAME ; void * CCSXHHtmlTOC2::GetTopicContentL(void) + ?GetTopicContentL@CCSXHLegacyTOC2@@UAEPAXXZ @ 19 NONAME ; void * CCSXHLegacyTOC2::GetTopicContentL(void) + ?InitGenerateKeywordTOC2ListL@CCSXHHelpDataBase@@QAEHPAVCCSXHKywdTOC1@@@Z @ 20 NONAME ; int CCSXHHelpDataBase::InitGenerateKeywordTOC2ListL(class CCSXHKywdTOC1 *) + ?NewL@CCSXHHelpDataBase@@SAPAV1@PAVCCoeEnv@@ABV?$TBuf@$0BAA@@@@Z @ 21 NONAME ; class CCSXHHelpDataBase * CCSXHHelpDataBase::NewL(class CCoeEnv *, class TBuf<256> const &) + diff -r 000000000000 -r 1f04cf54edd8 csxhelp/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/group/bld.inf Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,78 @@ +/* +* Copyright (c) 2002 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: +* CsHelp build specification file. +* +* +*/ + + + +#ifdef __SERIES60_HELP //Help application will be present only when this flag is defined. + +#include + +PRJ_EXPORTS +// export localised loc file +../loc/csxhelp.loc APP_LAYER_LOC_EXPORT_PATH(csxhelp.loc) + +// export iby file +../rom/Cshelp.iby CORE_APP_LAYER_IBY_EXPORT_PATH(Cshelp.iby) +../rom/AiwHelpProvider.iby CORE_APP_LAYER_IBY_EXPORT_PATH(AiwHelpProvider.iby) +../rom/AiwHelpProviderResources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(AiwHelpProviderResources.iby) +../rom/CshelpResources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(CshelpResources.iby) + + +PRJ_PLATFORMS +// The platforms Cshelp is built +// Default platforms +DEFAULT + + +PRJ_MMPFILES + +HelpEngine.mmp +cshelp.mmp + +#ifdef RD_HELP_AIW_INTEGRATION + +PRJ_EXPORTS +// export localised loc file +../AiwHelpProvider/loc/aiwxhelpprovider.loc APP_LAYER_LOC_EXPORT_PATH(aiwxhelpprovider.loc) + +PRJ_MMPFILES +../AiwHelpProvider/group/AiwHelpProvider.mmp +#endif + +PRJ_EXTENSIONS + +START EXTENSION s60/mifconv +OPTION TARGETFILE cshelp.mif +OPTION HEADERFILE cshelp.mbg +OPTION SOURCES -c8,1 qgn_prop_folder_tab2 \ + -c8,1 qgn_prop_list_keyword_tab2 \ + -c8,1 qgn_prop_help_open_tab1 \ + -c8,1 qgn_prop_folder_help_tab1 \ + -c8,1 qgn_prop_keyword_find_tab1 \ + -c8 empty13x13 +END + +START EXTENSION s60/mifconv +OPTION TARGETFILE cshelp_aif.mif +OPTION SOURCES -c8,8 qgn_menu_help +END + +#endif //__SERIES60_HELP + +// End of File diff -r 000000000000 -r 1f04cf54edd8 csxhelp/group/cshelp.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/group/cshelp.mmp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,123 @@ +/* +* 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 "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: Project definition file for Csxhelp Application +* +*/ + + +#include +#include + + +#ifndef RD_APPS_TO_EXES +TARGETPATH /System/Apps/Cshelp +#endif + +//1. Cshelp resources +START RESOURCE ../data/CsHelp.rss +HEADER +#ifdef RD_APPS_TO_EXES +TARGETPATH APP_RESOURCE_DIR +#endif + +//other settings like LANG xx +LANGUAGE_IDS + +END // RESOURCE + + + +//2. Aif stuff +#ifdef RD_SCALABLE_UI // New app framework used + +START RESOURCE ../data/Cshelp_reg.rss +DEPENDS cshelp.rsg +// Do not change the UID below. +TARGETPATH /private/10003a3f/apps +END + +#else // Old app framework used (no changes in the definitions below) + +START RESOURCE ../aif/cshelp_caption.rss +HEADER +#ifdef RD_APPS_TO_EXES +TARGETPATH APP_RESOURCE_DIR +#endif + +//other settings like LANG xx +LANGUAGE_IDS +END // RESOURCE + +#endif + + + +//Target information +#ifdef RD_APPS_TO_EXES +// TARGETPATH need not be defined, it is automatically handled by the build tools +TARGET cshelp.exe +TARGETTYPE exe +#else +TARGET cshelp.app +TARGETTYPE app +#endif +UID 0x100039CE 0x10005234 + +EPOCSTACKSIZE 0x10000 +EPOCHEAPSIZE 0x5000 0x800000 + +VENDORID VID_DEFAULT + +//We use default capabilities (from defaultcaps.hrh) +CAPABILITY CAP_APPLICATION + +USERINCLUDE . ../inc ../HelpEngine/inc + +// This is a SYSTEMINCLUDE macro containing the applications +// layer specific include directories +APP_LAYER_SYSTEMINCLUDE + +SOURCEPATH ../src + +SOURCE CSXH.cpp +SOURCE CSXHApplication.cpp +SOURCE CSXHGenericView.cpp +SOURCE CSXHGenericContainer.cpp +SOURCE CSXHAppUi.cpp +SOURCE CSXHDocument.cpp +SOURCE CSXHLegacyTopicContainer.cpp +SOURCE CSXHLegacyTopicView.cpp +SOURCE CSXHHtmlTopicView.cpp +SOURCE CSXHHtmlTopicContainer.cpp +SOURCE AppLauncherForCSXH.cpp +SOURCE csxhruntimeappwatcher.cpp + +LIBRARY euser.lib apparc.lib cone.lib eikcore.lib +LIBRARY apgrfx.lib charconv.lib +LIBRARY eikcoctl.lib eikctl.lib avkon.lib +LIBRARY AknNotify.lib etext.lib +LIBRARY AknSkins.lib +LIBRARY ws32.lib +LIBRARY CdlEngine.lib //dynamic ui +LIBRARY AknLayout2Scalable.lib +LIBRARY gdi.lib HelpEngine.lib apmime.lib featmgr.lib +LIBRARY ServiceHandler.lib // For the AiwServiceHandler +LIBRARY efsrv.lib + +#ifdef FF_HELP_TUTORIAL_MERGE +LIBRARY bafl.lib +#endif + +DEBUGLIBRARY flogger.lib +// End of File diff -r 000000000000 -r 1f04cf54edd8 csxhelp/inc/AppLauncherForCSXH.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/inc/AppLauncherForCSXH.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,234 @@ +/* +* 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 "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: AppLauncherForCSXH class declaration +* +*/ + + +#ifndef INC_APPLAUNCHERFORCSXH_H_HEADER_INCLUDED_BC03B1F7 +#define INC_APPLAUNCHERFORCSXH_H_HEADER_INCLUDED_BC03B1F7 + +#include +#include + +class TApaTask; + +const TInt KMaxParamLength = 32; +const TInt KMaxVSAPrefix = 32; +const TInt KMaxVSAScheme = 88; +const TInt KBackSlashLength = 1; +/** + * AppLauncherForCSXH + * This class implements launching applications from help + * @since S60 v3.2 + */ +class AppLauncherForCSXH + { + public: +/** +* @function NewL +* @since S60 3.2 +* Construct a AppLauncherForCSXH +* and return a pointer to the created object +* @return a AppLauncherForCSXH Pointer +*/ + static AppLauncherForCSXH* NewL(); + +/** +* @function ~AppLauncherForCSXH +* @since S60 3.2 +* Destroy the object and release all memory objects +*/ + ~AppLauncherForCSXH(); +/** +* @function LaunchAppL +* @since S60 3.2 +* Launches Application +* @param aUrl - Buffer which contains iformation about Application Uid,MessageId, ViewID +* aCurrentUrl - Currently displayed file path info +* @return ETrue, if Application Launches Successfully, EFalse otherwise +*/ + TBool LaunchAppL(const TDesC& aUrl,const TDesC& aCurrentUrl); +/** +* @function LaunchBrowserNGL +* @since S60 3.2 +* Launches BrowserNG Application +* @param aUrl - external hyperlink info. +* @return ETrue, if Application Launches Successfully, EFalse otherwise +*/ + void LaunchBrowserNGL(const TDesC& aUrl); + private: + +/** +* @function AppLauncherForCSXH +* @since S60 3.2 +* Perform the first phase of two phase construction +*/ + AppLauncherForCSXH(); + +/** +* @function ConstructL +* @since S60 3.2 +* Perform the second phase construction of a legacytopicview object +*/ + void ConstructL(); +/** +* @function GetAppLaunchModeL +* @since S60 3.2 +* Get the Mode Application Launch Command / View Switch Architecture +* @param aUrl - Buffer which contains iformation about Application Uid,MessageId, ViewID +* aCurrentUrl - Currently displayed file path info +* @return Mode of Launch +*/ + TInt GetAppLaunchModeL(const TDesC& aUrl,const TDesC& aCurrentUrl); +/** +* @function LaunchApp +* @since S60 3.2 +* Launch the Application +* @param aUrl - Buffer which contains iformation about Application Uid,MessageId, ViewID +* aVSAMode - Etrue for View Switch Architecture - EFalse for Command Launch +* @return ETrue, Application Launch Successful, EFalse otherwise +*/ + TBool LaunchApp(const TDesC& aUrl, TBool aVSAMode = ETrue); +/** +* @function LaunchCmdApp +* @since S60 3.2 +* Launch the Application +* @param aParamsMode - ETrue, If Application has to be launched with Message. +* @return ETrue, Application Launch Successful, EFalse otherwise +*/ + TBool LaunchCmdApp(TBool aParamsMode = ETrue); +/** +* @function LaunchCmdAppL +* @since S60 3.2 +* Launch the Application using Command line APIs with parameters +* @param aParamsMode - ETrue, If Application has to be launched with Message. +* @return ETrue, Application Launch Successful, EFalse otherwise +*/ + TBool LaunchCmdAppL(TBool aParamsMode); + /** +* @function GetCmdAppTask +* @since S60 3.2 +* Launch the Application using Command line APIs with parameters +* @return Get the TApaTask of the Launched Application +*/ + TApaTask GetCmdAppTask(); +/** +* @function SendMsgToCmdAppTaskL +* @since S60 3.2 +* Send the Message to the Launched Application +* @param aTask - TApaTask of the launched Application +*/ + void SendMsgToCmdAppTaskL(TApaTask &aTask); + +/** +* @function HandleFailedAppLauchL +* @since S60 3.2 +* Gives Information Note if Application Launch Failed. +*/ + void HandleFailedAppLauchL(); + +/** +* @function HandleAppLauchFromInternetL +* @since S60 3.2 +* Gives Information Note if user try to Launch the application from the external link +*/ + void HandleAppLauchFromInternetL(); +/** +* @function CheckAppLaunchFromInternetL +* @since S60 3.2 +* Checks wether using is trying to launch the application from external link +* @param aCurrentMode - VSA / Cmd +* aCurrentUrl - Currently displayed file path info +*/ + TInt CheckAppLaunchFromInternetL(TInt aCurrentMode,const TDesC& aCurrentUrl ); + +/** +* @function CheckMsgParams +* @since S60 3.2 +* Checks wether parameters are Valid / Invalid +* @param Buffer which contains iformation about Application Uid,MessageId, ViewID +* @return EParamsWithMsg / EParamsInvalid / EParamsNoMsg +*/ + TInt CheckMsgParams(const TDesC& aUrl); + +/** +* @function CheckMsgParams +* @since S60 3.2 +* Copies Uid & View Id into Variables +* @param Buffer which contains information about Application Uid,ViewID +*/ + void ExtractTwoParams(const TDesC& aUrl); + +/** +* @function ExtractFourParams +* @since S60 3.2 +* Copies Uid, View Id, MessageId & Message into Variables +* @param aUrl - Buffer which contains information about Application Uid,ViewID, MessageId & +*/ + void ExtractFourParams(const TDesC& aUrl); +/** +* @function GetUid +* @since S60 3.2 +* Coverts Buffer Content to TInt +* @param aUid - Application Uid +* aResult - Application Uid +*/ + void GetUid(TPtrC aUid, TInt32 &aResult); + +/** +* @function SendMsgToBrowserNGL +* @since S60 3.2 +* Send the Message to the BrowserNG +* @param aUrl - External Hyper Link +* @return ETrue MessageSent Successfully, EFalse otherwise +*/ + TBool SendMsgToBrowserNGL(const HBufC* aUrl); +/** +* @function StartTimer +* @since S60 3.2 +* Starts the timer +* @param aCallBack - Callback function for timer +*/ + void StartTimer(TCallBack aCallBack); + +/** +* @function Timer_Callback_to_TerminateApp +* @since S60 3.2 +* Timer callback function +* @param aPtr - AppLauncherForCSXH class pointer +* @return 0 +*/ + static TInt Timer_Callback_to_TerminateApp(TAny* aPtr); + +/** +* @function SendMsgToApplication +* @since S60 3.2 +* SendMessage to BrowserNG Application +* @return 0 +*/ + TInt SendMsgToApplication(); + + private: + CPeriodic* iTimer; + TInt iCount; + TBuf iUrl; + TBuf iParam1; + TBuf iParam2; + TBuf iParam3; + TBuf iParam4; + }; + + +#endif /* INC_APPLAUNCHERFORCSXH_H_HEADER_INCLUDED_BC03B1F7 */ diff -r 000000000000 -r 1f04cf54edd8 csxhelp/inc/CSXHAppUi.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/inc/CSXHAppUi.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,272 @@ +/* +* 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 "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: CCSXHAppUi class declaration +* +*/ + + +#ifndef INC_CSXHAPPUI_H_HEADER_INCLUDED_BC054CBF +#define INC_CSXHAPPUI_H_HEADER_INCLUDED_BC054CBF + +#include +#include "AppLauncherForCSXH.h" +#include "csxhruntimeappwatcher.h" + +//Forward declarations +class CCSXHHtmlTopicView; +class CCSXHLegacyTopicView; +class CCSXHGenericView; +#ifdef FF_HELP_TUTORIAL_MERGE +class CAiwGenericParamList; +class CAiwServiceHandler; +#endif // FF_HELP_TUTORIAL_MERGE + +// CLASS DECLARATION + +/** +* @class CCSXHAppUi +* Application UI class +* Provides support for the following features: +* - view architecture +*/ +class CCSXHAppUi : public CAknViewAppUi, + public MInstallationObserver + { + public: +/** + * @function ConstructL + * @since S60 3.2 + * Perform the second phase construction of a CCSXHAppUi object this needs + * to be public due to the way the framework constructs the AppUi + */ + void ConstructL(); +/** + * @function CCSXHAppUi + * @since S60 3.2 + * Perform the first phase of two phase construction. This needs to be + * public due to the way the framework constructs the AppUi + */ + CCSXHAppUi(); +/** + * @function ~CCSXHAppUi + * @since S60 3.2 + * Destroy the object and release all memory objects + */ + ~CCSXHAppUi(); + +/** + * @function ~CCSXHAppUi + * @since S60 3.2 + * From CEikAppUi, takes care of command handling. + * @param aCommand command to be handled + */ + void HandleCommandL(TInt aCommand); + +/** + * @function PropagateResourceChange + * @since S60 3.2 + * Propagates the resource change event to all views + * @param aType - Type of resource change event + */ + void PropagateResourceChange(TInt aType); + +/** + * @function GetInstance + * @since S60 3.2 + * returns Application UI class pointer + * @return Application UI class pointer + */ + static CCSXHAppUi* GetInstance(); + +/** + * @function GetWsSession + * @since S60 3.2 + * returns WsSession Pointer + * @return WsSession pointer + */ + static RWsSession& GetWsSession(); + +/** + * @function GetCoeEnv + * @since S60 3.2 + * returns Control Environment pointer + * @return Control Environment pointer + */ + static CCoeEnv* GetCoeEnv(); + +/** + * @function AppLaunchL + * @since S60 3.2 + * Launch the Application based on Uid & ViewId + * @param aAppId Application Uid + * aVId ViewId + */ + void AppLaunchL(TInt32 &aAppId,TInt32 &aVId); + +/** + * @function AppLaunchL + * @since S60 3.2 + * Launch the Application based on Uid,ViewId, MessageId & Message + * @param aAppId Application Uid + * aVId ViewId + * aMsgId MessageId + * aParams Message + */ + void AppLaunchL(TInt32 &aAppId,TInt32 &aVId,TInt32 &aMsgId, + const TBuf& aParams); + +/** + * @function ResetTOC2ViewContainer + * @since S60 3.2 + * Sets a flag in the View for recreating the container + */ + void ResetTOC2ViewContainer(); +/** +* From MInstallationObserver +* @function RuntimeUpdateIndex +* call back function once install/uninstall happens +* +* @since 5.0 +*/ + void RuntimeUpdateIndex(); + +#ifdef FF_HELP_TUTORIAL_MERGE + /** + * Generates parameter list for AIW calls + * @since S60 3.2 + * @param aContext The help content ready to Tutorial + * @return The Aiw Generic Param List + */ + CAiwGenericParamList* NewParamListLC(const TCoeHelpContext& aContext); + + /** + * If tutorial exists,call play presentation command + * @since S60 3.2 + * @param None + * @return None + */ + void CallTutorialAiwProviderL(); + + /** + * If tutorial exists,call play presentation command + * @since S60 3.2 + * @param aTCoeHelpContext The Help Content stored + * @return None + */ + void SetHelpContext(TCoeHelpContext aTCoeHelpContext); + + /** + * If the presentation requsted exist or not + * @since S60 3.2 + * @param None + * @return A boolean value to indicate the presentation exist or not + */ + TBool IsApplicationPresentInTutorialL(); + +#endif // FF_HELP_TUTORIAL_MERGE + protected: + // Functions from base calsses + /** + * Handles changes in keyboard focus when an application switches to, + * or from, the foreground. + * @param aForeground @c ETrue if the application is in the foreground, + * otherwise @c EFalse. + */ + void HandleForegroundEventL(TBool aForeground); +/** + * @function ProcessCommandParametersL + * From CEikAppUi. + * Take care of command parameter + * @since 3.2 + * @param aTail should be contexts in TDesC8& form + * @return whether or not processing was successful + */ + TBool ProcessCommandParametersL(TApaCommand aCommand, + TFileName& /* aDocumentName */, + const TDesC8& aTail); + +/** + * @function HandleMessageL + * From MCoeMessageObserver + * Take care of messages from other app. + * @since 3.2 + * @param aMessageParameters should be contexts in TDesC8& + * @return always EMessageHandled. + */ + MCoeMessageObserver::TMessageResponse HandleMessageL( + TUint32 aClientHandleOfTargetWindowGroup, + TUid aMessageUi, + const TDesC8& aMessageParameters); + private: +/** + * @function ActivateDisplayTopicViewL + * Take care of Recreating the Container Class for Specific Views + * @since 3.2 + * @param aMessageParameters should be contexts in TDesC8& + * @return always EMessageHandled. + */ + void ActivateDisplayTopicViewL(); + + void InitDisplayTopicViewL(TUid aViewID); +/** + * @function HandleContextSensitiveLaunchL + * Take care of Context Sensitive Launch. + * @since 3.2 + * @param aMessageParameters should be contexts in TDesC8& + * @return always EMessageHandled. + */ + void HandleContextSensitiveLaunchL(const TDesC8& aContext ); +#ifdef FF_HELP_TUTORIAL_MERGE + /** + * Load Service Handler and attach the interest + * @since S60 3.2 + * @param None + * @return None + */ + void LoadTutorialService(); +#endif + private: + + CCSXHGenericView* iTOC1View; + CCSXHGenericView* iKywdTOC1View; + + CCSXHLegacyTopicView* iLegacyTopicView; + CCSXHLegacyTopicView* iLegacyContextTopicView; + + //This class will be used for both normal and context html topics + CCSXHHtmlTopicView* iHtmlTopicView; + + CCSXHGenericView* iKywdTOC2View; + CCSXHGenericView* iTOC2View; + + static CCSXHAppUi* iInstance; + CCSXHRuntimeAppWatcher* iRuntimeWatcher; + +#ifdef FF_HELP_TUTORIAL_MERGE + + //AIW Service Handler + //Owned + CAiwServiceHandler* iServiceHandler; + + //Tutorial exist or not + TBool iTutorialExists; + + //Help Content Text + TCoeHelpContext iTCoeHelpContext; +#endif + }; + + + +#endif /* INC_CSXHAPPUI_H_HEADER_INCLUDED_BC054CBF */ diff -r 000000000000 -r 1f04cf54edd8 csxhelp/inc/CSXHApplication.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/inc/CSXHApplication.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,56 @@ +/* +* 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 "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: CCSXHApplication class declaration +* +*/ + + + +#ifndef INC_CSXHAPPLICATION_H__ +#define INC_CSXHAPPLICATION_H__ + +#include + + +/*! + @class CCSXHApplication + + An instance of CCSXHApplication is the application part of the AVKON + application framework for the Csxhelp application + */ +class CCSXHApplication : public CAknApplication + { +public: // from CAknApplication + +/** + @function AppDllUid + @since S60 3.2 + + The application DLL UID value + @return the UID of this Application/Dll + */ + TUid AppDllUid() const; + +protected: // from CAknApplication +/** + @function CreateDocumentL + @since S60 3.2 + + Create a CApaDocument object and return a pointer to it + @return a pointer to the created document + */ + CApaDocument* CreateDocumentL(); + }; + +#endif // INC_CSXHAPPLICATION_H__ diff -r 000000000000 -r 1f04cf54edd8 csxhelp/inc/CSXHDocument.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/inc/CSXHDocument.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,210 @@ +/* +* 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 "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: CCSXHDocument class declaration +* +*/ + + +#ifndef INC_CSXHDOCUMENT_H_HEADER_INCLUDED_BC0121B7 +#define INC_CSXHDOCUMENT_H_HEADER_INCLUDED_BC0121B7 + +#include + +// Forward references +class CAknAppUi; +class CEikApplication; +class CCSXHHelpDataBase; +class CCSXHHelpContentBase; +class CEikAppUi; +class CEikProgressInfo; +class CAknProgressDialog; +class CIdle; +/** + @class CCSXHDocument +* An instance of class CCSXHDocument is the Document part of the AVKON +* application framework for the Csxhelp application +*/ + +class CCSXHDocument : public CAknDocument + { + public: +/** +* @function NewL +* @since S60 3.2 +* Construct a CCSXHDocument for the AVKON application aApp +* construction, and return a pointer to the created object +* @param aApp - Application Object +* @return a CCSXHDocument Pointer +*/ + static CCSXHDocument* NewL( + // application creating this document + CEikApplication& aApp); + // Construct a CCSXHDocument for the AVKON application aApp using two phase + // construction, and return a pointer to the created object + +/** +* @function NewLC +* @since S60 3.2 +* Construct a CCSXHDocument for the AVKON application aApp using two phase +* construction, and return a pointer to the created object +* @param aApp - Application Object +* @return a CCSXHDocument Pointer +*/ + static CCSXHDocument* NewLC( + // application creating this document + CEikApplication& aApp); + + +/** +* @function ~CCSXHDocument +* @since S60 3.2 +* Destroy the object and release all memory objects +*/ + ~CCSXHDocument(); + + public: // from CAknDocument +/** +* @function CreateAppUiL +* @since S60 3.2 +* Create a CCSXHAppUi object and return a pointer to it +* @return CCSXHAppUi class pointer +*/ + CEikAppUi* CreateAppUiL(); + + public: +/** +* @function SetDisplayTopic +* @since S60 3.2 +* @param aDisplayTopic - HelpContentbase Class pointer +*/ + void SetDisplayTopic(CCSXHHelpContentBase *aDisplayTopic); +/** +* @function SetDisplayAndPrevTopic +* @since S60 3.2 +* @param aDisplayTopic - HelpContentbase Class pointer +*/ + void SetDisplayAndPrevTopic(CCSXHHelpContentBase *aDisplayTopic); +/** +* @function GetDisplayTopic +* @since S60 3.2 +* @return HelpContentBase Class pointer +*/ + inline CCSXHHelpContentBase* GetDisplayTopic() const + {return iDisplayTopic;} +/** +* @function GetPrevTopic +* @since S60 3.2 +* @return HelpContentBase Class pointer +*/ + inline CCSXHHelpContentBase* GetPrevTopic() const + {return iPrevTopic;} +/** +* @function ClearPrevTopic +* @since S60 3.2 +* @Clears the previous topic +*/ + inline void ClearPrevTopic() + {iPrevTopic = NULL;} +/** +* @function GetHelpDataBase +* @since S60 3.2 +* @return HelpContentBase Class pointer +*/ + inline CCSXHHelpDataBase* GetHelpDataBase() const + {return iHelpDataBase;} + +/** +* @function GetHelpDataBase +* @since S60 3.2 +* Sends a Command to Application UI Class +* @param aCommand - Command to be Handled +*/ + void SendMessageToAppUiL(TInt aCommand); + +/** +* @function SetContextTopicAsDisplayTopicL +* @since S60 3.2 +* Parse the Message, Get the topic for Display & set this Object as Current Display Object +* @param aContextMessage - Message from Other Application for Context Sensitive launch +* @return ETrue for Topic Found /EFalse for topic Not found +*/ + TBool SetContextTopicAsDisplayTopicL(const TDesC8& aContextMessage); + +/** +* @function GetHtmlTopicForUrlL +* @since S60 3.2 +* Get the Object for HTML topic using url Name +* @param url - url Name +* @return Pointer to the HelpDataBase which contains HTMLtopic info +*/ + CCSXHHelpContentBase* GetHtmlTopicForUrlL(const TDesC &url); + +/** +* @function InitProgressBar +* @since S60 3.2 +* Initializes the progress bar +*/ + void InitProgressBarL(); + +/** +* @function FreeProgressBar +* @since S60 3.2 +* Frees the progress bar +*/ + void FreeProgressBarL(); + +/** + * function for TCAllBack protocol. + * called directly + * @since 1.1 + * @param aThis is the pointer to the actual instance + * @return Whether finished or not + */ + static TInt CallBack(TAny* aThis); + + /** + * call back function. + * called by CallBackL() + * @since 1.1 + * @return Whether finished or not + */ + TInt DoCallBackL(); + + private: +/** +* @function CCSXHDocument +* @since S60 3.2 +* Perform the first phase of two phase construction +*/ + CCSXHDocument( + // application creating this document + CEikApplication& aApp); + + private: + CCSXHHelpDataBase *iHelpDataBase; + CAknAppUi *iHelpAppUi; + + CCSXHHelpContentBase *iDisplayTopic; + CCSXHHelpContentBase *iPrevTopic; + + CAknProgressDialog *iProgressDialog; + + CIdle *iIdle; + + TInt iTotalKeywordsInResultView; + }; + + + +#endif /* INC_CSXHDOCUMENT_H_HEADER_INCLUDED_BC0121B7 */ diff -r 000000000000 -r 1f04cf54edd8 csxhelp/inc/CSXHGenericContainer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/inc/CSXHGenericContainer.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,252 @@ +/* +* 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 "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: CCSXHGenericContainer class declaration +* +*/ + + +#ifndef INC_CSXHGENERICCONTAINER_H_HEADER_INCLUDED_BC039735 +#define INC_CSXHGENERICCONTAINER_H_HEADER_INCLUDED_BC039735 + +#include // CCoeControl +#include // MEikListBoxObserver +#include + +// FORWARD DECLARATIONS +class CAknSingleStyleListBox; +class CCSXHDocument; +class CCSXHGenericView; + +#ifdef FF_HELP_TUTORIAL_MERGE +class CCSXHGenericTOC1; +#endif + +// CLASS DECLARATION +/** +* @class CCSXHGenericContainer +* This class provides listbox container control functionality +*/ + +class CCSXHGenericContainer : public CCoeControl, public MEikListBoxObserver + { + public: + /** + * @function NewL + * @since S60 3.2 + * Construct a CCSXHGenericContainer + * and return a pointer to the created object + * @param aRect - TRect Object + * aDocument - Document Object + * @return a CCSXHGenericContainer Pointer + */ +#ifdef FF_HELP_TUTORIAL_MERGE + static CCSXHGenericContainer* NewL(const TRect& aRect,CCSXHDocument &aDocument + ,CCSXHGenericView* aView); +#else // !FF_HELP_TUTORIAL_MERGE + static CCSXHGenericContainer* NewL(const TRect& aRect,CCSXHDocument &aDocument); +#endif // FF_HELP_TUTORIAL_MERGE + /** + * @function NewLC + * @since S60 3.2 + * Construct a CCSXHGenericContainer first phase of two phase constuction + * @param aRect - TRect Object + * aDocument - Document Object + */ +#ifdef FF_HELP_TUTORIAL_MERGE + static CCSXHGenericContainer* NewLC(const TRect& aRect, CCSXHDocument &aDocument + ,CCSXHGenericView* aView); +#else // !FF_HELP_TUTORIAL_MERGE + static CCSXHGenericContainer* NewLC(const TRect& aRect, CCSXHDocument &aDocument); +#endif // FF_HELP_TUTORIAL_MERGE + /** + * @function ~CCSXHGenericContainer + * @since S60 3.2 + * Destroy the object and release all memory objects + */ + ~CCSXHGenericContainer(); + +/** +* @function HandleResourceChange +* @since S60 3.2 +* Handles resource changes. +* This function is called by framework when when e.g skin or locale is changed. +* @param aType resource change type +*/ + void HandleResourceChange(TInt aType); + +/** +* @function HandleResourceChangeImpl +* @since S60 3.2 +* Handles resource changes. +* Implementation function for resource change +* @param aType resource change type +*/ + void HandleResourceChangeImpl(TInt aType); + +/** +* @function SetDisplayTopicL +* @since S60 3.2 +* Using Selected Item, set next object for display +*/ + void SetDisplayTopicL(); + +/** +* @function GetNumberOfListItems +* @since S60 3.2 +* Get the number of items present in the List +* @return Number of Items in the List +*/ + TInt GetNumberOfListItems(); + +/** +* @function SetCurrentView +* @since S60 3.2 +* Sets View Pointer +* @param aView - Sets View pointer which is using this Container +*/ + void SetCurrentView(CCSXHGenericView* aView); +/** +* @function CheckForMSK +* @since S60 3.2 +* Checks Msk flag is Enabled or not, If Enabled, Sets MSK Label +*/ + void CheckForMSK(); +/** +* @function HightLightItemL +* @since S60 3.2 +* Sets the selected item in the list box +*/ + void HightLightItemL(); + +#ifdef FF_HELP_TUTORIAL_MERGE + /** + * If the selected item is a tutorial item + * @since S60 3.2 + * @param None + * @return A boolean value to indicate the item is tutorial or not + * Sets the selected item in the list box + */ + TBool IsShowTutorialItemSelectedL(); +#endif // FF_HELP_TUTORIAL_MERGE + + + void MakeVisible(TBool aVisible); + + protected: // From base classes. +/** + * When focus is changed, called. + * Set focus editor(viewer). + * @function FocusChanged + * @since 3.2 + * @param aDrawNow used to determine whether or not + * redraw should occur now, or later + */ + void FocusChanged(TDrawNow aDrawNow); + + private: + +/** +* @function CCSXHGenericContainer +* @since S60 3.2 +* Perform the second phase construction of a CCSXHDocument object +* @param aDocument - CCSXHDocument Object +*/ +#ifdef FF_HELP_TUTORIAL_MERGE + CCSXHGenericContainer(CCSXHDocument &aDocument,CCSXHGenericView* aView); +#else // !FF_HELP_TUTORIAL_MERGE + CCSXHGenericContainer(CCSXHDocument &aDocument); +#endif // FF_HELP_TUTORIAL_MERGE +/** +* @function ConstructL +* @since S60 3.2 +* Perform the first phase of two phase construction +* @param aRect - TRect Object +*/ + void ConstructL(const TRect& aRect); + +/** +* @function CreateAndPopulateListL +* @since S60 3.2 +* Creates a AVKON List & Inserts items into it. +*/ + void CreateAndPopulateListL(); + + + private: +/** +* From MEikListBoxObserver class +* @function HandleListBoxEventL +* @since S60 3.2 +* This function handles List box Events +* @param aListBox - ListBox Pointer +* aListBoxEvent - Event to be handled +*/ + void HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aListBoxEvent); + + private: // from CoeControl +/** +* From CoeControl class +* @function SizeChanged +* @since S60 3.2 +* re-allocates and re-sizes components. +*/ + void SizeChanged(); +/** +* From CoeControl class +* @function CountComponentControls +* @since S60 3.2 +* @return Number of child controls this has. +*/ + TInt CountComponentControls() const; + +/** +* From CoeControl class +* @function ComponentControl +* @since S60 3.2 +* @param aIndex index of child controls +* @retrun pointer to child control +*/ + CCoeControl* ComponentControl(TInt aIndex) const; + +/** +* From CoeControl class +* @function Draw +* @since S60 3.2 +* Draw() for drawing the Background +*/ + void Draw(const TRect& aRect) const; +/** +* From CoeControl class +* @function OfferKeyEventL +* @since S60 3.2 +* Progress Key Event +* @param aKeyEvent the key event +* @param aType EEventKey | EEventKeyUp | EEventKeyDown +* @return EKeyWasConsumed if key event is processed, +* otherwise EKeyWasNotConsumed +*/ + TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType); + + private: + CCSXHDocument& iDocument; + CAknSingleStyleListBox* iListBox; + CAknSearchField* iFindPane; + CCSXHGenericView* iView; + + + }; + + + +#endif /* INC_CSXHTOC2CONTAINER_H_HEADER_INCLUDED_BC039735 */ diff -r 000000000000 -r 1f04cf54edd8 csxhelp/inc/CSXHGenericView.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/inc/CSXHGenericView.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,153 @@ +/* +* 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 "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: CCSXHGenericView class declaration +* +*/ + + +#ifndef INC_CSXHGENERICVIEW_H_HEADER_INCLUDED_BC03B1F7 +#define INC_CSXHGENERICVIEW_H_HEADER_INCLUDED_BC03B1F7 + +#include +#include + +//forward declarations +class CCSXHGenericContainer; + +/** +* @class CCSXHGenericView +* This class List View of the Csxhelp Application +*/ +class CCSXHGenericView : public CAknView + { + public: +/** +* @function NewL +* @since S60 3.2 +* Construct a CCSXHGenericContainer +* and return a pointer to the created object +* @param aUid - View Id +* aFlags - Resource Id +* aRect - TRect Object +* @return a CCSXHGenericView Pointer +*/ + static CCSXHGenericView* NewL(const TUid& aUid, const TInt& aFlags); + +/** +* @function ~CCSXHGenericView +* @since S60 3.2 +* Destroy the object and release all memory objects +*/ + ~CCSXHGenericView(); + +/** +* @function ResetContainer +* @since S60 3.2 +* Reset the Flag, which helps to create a new Container +*/ + void ResetContainer(); + +/** +* @function SetMiddleSoftKey +* @since S60 3.2 +* This will set the Label for MSK +*/ + void SetMiddleSoftKey(TBool aValue); + + public:// Functions from base classes +/** +* From CAknView, return view id of this view +* +* @function Id +* @since 3.2 +* @return view id +*/ + TUid Id() const; + +/** + * @function HandleCommandL + * @since S60 3.2 + * takes care of command handling. + * @param aCommand command to be handled + */ + void HandleCommandL(TInt aCommand); + +/** + * @function ResourceChangeHdl + * @since S60 3.2 + * Handler for resource change + * @param aType - Type of resource change event + */ + void ResourceChangeHdl(TInt aType); + + + protected: // Functions from base classes +/** +* From CAknView +* @function DoActivateL +* activation handler +* +* @since 3.2 +* @param aPrevViewId ID of previious view. +*/ + void DoActivateL(const TVwsViewId& aPrevViewId,TUid,const TDesC8& ); + +/** +* From CAknView +* @function DoDeactivate +* de-activation handler +* +* @since 3.2 +* @param aPrevViewId ID of previious view. +*/ + void DoDeactivate(); +/** +* From MEikMenuObserver +* @function DynInitMenuPaneL +* used to manage the menu when +* no item are in the list box. +* We need to delete the "Open" +* menu item in this case. +* +* @since 3.2 +* @param aResource resource ID of menu pane +* @param aMenuPane instance of menupane +*/ + void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane); + + private: +/** +* @function CCSXHGenericView +* @since S60 3.2 +* Perform the first phase of two phase construction +*/ + CCSXHGenericView(const TUid&,const TInt&); + +/** +* @function ConstructL +* @since S60 3.2 +* Perform the second phase construction of a genericview object +*/ + void ConstructL(); + + private: + CCSXHGenericContainer *iContainer; + TBool iResetContainerInActivate; + + const TUid &iUid; + const TInt &iAppFlags; + + }; + +#endif /* INC_CSXHGENERICVIEW_H_HEADER_INCLUDED_BC03B1F7 */ diff -r 000000000000 -r 1f04cf54edd8 csxhelp/inc/CSXHHtmlTopicContainer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/inc/CSXHHtmlTopicContainer.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,441 @@ +/* +* 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 "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: CCSXHHtmlTopicContainer class declaration +* +*/ + + +#ifndef INC_CCSXHHTMLTOPICCONTAINER_H__ +#define INC_CCSXHHTMLTOPICCONTAINER_H__ +//If I use INC_CCSXHHTMLTOPICCONTAINER_H__, then CodeScanner fails +//but if I use INC_CCSXH_HTML_TOPIC_CONTAINER_H__ code scanner +//reports an error but produces results for other files + +#include +#include +#include +//RUNTIME +#include + +class CBrCtlInterface; +class CCSXHDocument; +class CCSXHHtmlTOC2; +class CCSXHHtmlTopicView; +class AppLauncherForCSXH; +class CCSXHHelpContentBase; + +typedef CBrCtlInterface* (*FuncPtr_CreateBrowserControlL) (CCoeControl* aParent, TRect aRect, + TUint aBrCtlCapabilities, TUint aCommandIdBase = TBrCtlDefs::ECommandIdBase, + MBrCtlSoftkeysObserver* aBrCtlSoftkeysObserver = NULL, + MBrCtlLinkResolver* aBrCtlLinkResolver = NULL, + MBrCtlSpecialLoadObserver* aBrCtlSpecialLoadObserver = NULL, + MBrCtlLayoutObserver* aBrCtlLayoutObserver = NULL, + MBrCtlDialogsProvider* aBrCtlDialogsProvider = NULL, + MBrCtlWindowObserver* aBrCtlWindowObserver = NULL, + MBrCtlDownloadObserver* aBrCtlDownloadObserver = NULL ); +/** +* @class CCSXHHtmlTopicContainer +* This class provides Browser functionality +*/ + +class CCSXHHtmlTopicContainer : public CCoeControl, public MBrCtlLinkResolver, + public MBrCtlLinkContent, public MBrCtlLoadEventObserver, + public MBrCtlSoftkeysObserver,public MBrCtlLayoutObserver + { +public: + +/** +* @function NewL +* @since S60 3.2 +* Construct a CCSXHHtmlTopicContainer +* and return a pointer to the created object +* @param aRect - TRect Object +* aDocument - Document Object +* aView - HtmlTopicView Pointer +* @return a CCSXHHtmlTopicContainer Pointer +*/ + static CCSXHHtmlTopicContainer* NewL(const TRect& aRect,CCSXHDocument + &aDocument,CCSXHHtmlTopicView *aView); + +/** +* @function NewLC +* @since S60 3.2 +* Construct a CCSXHHtmlTopicContainer +* and return a pointer to the created object using two phase constuction +* @param aRect - TRect Object +* aDocument - Document Object +* aView - HtmlTopicView Pointer +* @return a CCSXHHtmlTopicContainer Pointer +*/ + static CCSXHHtmlTopicContainer* NewLC(const TRect& aRect,CCSXHDocument + &aDocument,CCSXHHtmlTopicView *aView); + +/** +* @function CCSXHHtmlTopicContainer +* @since S60 3.2 +* Construct a CCSXHHtmlTopicContainer +* and return a pointer to the created object using two phase constuction +* @param aRect - TRect Object +* aDocument - Document Object +* aView - HtmlTopicView Pointer +* @return a CCSXHHtmlTopicContainer Pointer +*/ + CCSXHHtmlTopicContainer(CCSXHDocument &aDocument, CCSXHHtmlTopicView *aView); +/** + * @function ~CCSXHHtmlTopicContainer + * @since S60 3.2 + * Destroy the object and release all memory objects + */ + ~CCSXHHtmlTopicContainer(); + +/** + * @function SetAndLoadInitialTopicL + * @since S60 3.2 + * Destroy the object and release all memory objects + * @param aTopic - Initial Topic to be displayed + */ + void SetAndLoadInitialTopicL(CCSXHHtmlTOC2* aTopic); + +public: +/** +* From MBrCtlSoftkeysObserver class +* Browser plug-in calls this method requests to update a softkey +* @function UpdateSoftkeyL +* @since S60 3.2 +* @Param aKeySoftkey - Update the left softkey or the right softkey +* aLabel - The label associated with the softkey update +* aCommandId - The command to use if the softkey is selected by the user +* aBrCtlSoftkeyChangeReason - The reason for the softkey change +*/ +void UpdateSoftkeyL(TBrCtlKeySoftkey aKeySoftkey, + const TDesC& aLabel, + TUint32 aCommandId, + TBrCtlSoftkeyChangeReason aBrCtlSoftkeyChangeReason); + +/** +* From MBrCtlLayoutObserver Class +* Browser plug-in calls this method to Update the position of vertical scrollbar +* @function UpdateBrowserVScrollBarL +* @since S60 3.2 +* @Param aDocumentHeight - The total height of the markup page +* aDisplayHeight - The height of the display +* aDisplayPosY - The current Y position +*/ + void UpdateBrowserVScrollBarL(TInt aDocumentHeight, + TInt aDisplayHeight, + TInt aDisplayPosY ) ; + +/** +* From MBrCtlLayoutObserver Class +* Browser plug-in calls this method to Update the position of horizontal scrollbar +* @function UpdateBrowserHScrollBarL +* @since S60 3.2 +* @Param aDocumentWidth - The total width of the markup page +* aDisplayWidth - The width of the display +* aDisplayPosX - The current X position +*/ +void UpdateBrowserHScrollBarL(TInt aDocumentWidth, + TInt aDisplayWidth, + TInt aDisplayPosX ); + +/** +* From MBrCtlLayoutObserver Class +* Browser plug-in calls this method to Inform the layout of the page: right to left or left to right +* @function NotifyLayoutChange +* @since S60 3.2 +* @Param aNewLayout - RTL or LTR +*/ +void NotifyLayoutChange( TBrCtlLayout aNewLayout ); + +/** +* From MBrCtlLayoutObserver Class +* Browser plug-in calls this method to Inform the layout of the page: right to left or left to right +* @function UpdateTitleL +* @since S60 3.2 +* @Param aTitle - Title of the page +*/ +void UpdateTitleL( const TDesC& aTitle ); + +public: // from CCoeControl +/** +* From CoeControl class +* @function SizeChanged +* @since S60 3.2 +* re-allocates and re-sizes components. +*/ + void SizeChanged(); +/** +* From CoeControl class +* @function CountComponentControls +* @since S60 3.2 +* @return Number of child controls this has. +*/ + TInt CountComponentControls() const; + +/** +* From CoeControl class +* @function ComponentControl +* @since S60 3.2 +* @param aIndex index of child controls +* @retrun pointer to child control +*/ + CCoeControl* ComponentControl(TInt aIndex) const; +/** +* From CoeControl class +* @function OfferKeyEventL +* @since S60 3.2 +* Progress Key Event +* @param aKeyEvent the key event +* @param aType EEventKey | EEventKeyUp | EEventKeyDown +* @return EKeyWasConsumed if key event is processed, +* otherwise EKeyWasNotConsumed +*/ + TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType); + +/** +* From MBrCtlLoadEventObserver class +* @function HandleBrowserLoadEventL +* @since S60 3.2 +* A load events notification +* @param aLoadEvent - The load event +* aSize - Size depends on the event +* aTransactionId - The transaction id of the transaction that had this event +*/ + void HandleBrowserLoadEventL(TBrCtlDefs::TBrCtlLoadEvent aLoadEvent, + TUint aSize, TUint16 aTransactionId); + +/** +* @function RefreshL +* @since S60 3.2 +* Used to Refresh the Content +* @param aTopic - CCSXHHtmlTOC2 Object +*/ + void RefreshL(CCSXHHtmlTOC2 *aTopic); + +/** +* @function HandleBackKeyL +* Handle Back Key +* @since S60 3.2 +* @return ETrue, if the key is handled in the container, EFalse otherwise +*/ + TBool HandleBackKeyL(); + +/** +* @function IsPrevHtmlPageAvblL +* Check for Existance of the page in the Browser history stack +* @since S60 3.2 +* @return ETrue, if page is available in Browser History Stack, EFalse otherwise +*/ + TBool IsPrevHtmlPageAvblL(); + +/** +* @function SetSelectedFontSizeL +* Sets BrowserFontsize +* @since S60 3.2 +* @param aValue - Fontsize Value +*/ + void SetSelectedFontSizeL(TInt aValue); + +/** +* @function SetSelectedFontSizeL +* Get Current Settings Value +* @since S60 3.2 +* @param aValue - Any Setting +* @return Current Value used by Browser +*/ + TInt GetCurrentValueL(TInt aSetting); + +/** +* @function HandleCommandBackL +* @since S60 3.2 +* Handles resource changes. +* pass OpenLink command to the browser HandlecommandL +*/ + void HandleCommandOpenHyperLinkL(); + +/** +* From CoeControl class +* @function Draw +* @since S60 3.2 +* Draw() for drawing the Background +*/ + void Draw(const TRect& aRect) const; + + void ShowIndexHtmlPageL() const; +/** +* @function HandleResourceChange +* @since S60 3.2 +* Handles resource changes. +* This function is called by framework when when e.g skin or locale is changed. +* @param aType resource change type +*/ + void HandleResourceChange(TInt aType); + +/** +* @function HandleResourceChangeImpl +* @since S60 3.2 +* Handles resource changes. +* Implementation function for resource change +* @param aType resource change type +*/ + void HandleResourceChangeImpl(TInt aType); + +/** +* @function HandleCommandBackL +* @since S60 3.2 +* Handles resource changes. +* pass Back command to the browser HandlecommandL +*/ + void HandleCommandBackL(); + +/** +* Browser plug-in calls this method when embedded link is found. Used with ECapabilityClientResolveEmbeddedURL +* @since 3.2 +* @param aEmbeddedUrl The url of the embedded content +* @param aCurrentUrl The url of the current page +* @param aLoadContentType The expected type of the embedded content +* @param aEmbeddedLinkContent a callback interface to return the embedded content +* @return EFalse, browser will resolve the link +*/ + TBool ResolveEmbeddedLinkL(const TDesC& aEmbeddedUrl, + const TDesC& aCurrentUrl, + TBrCtlLoadContentType aLoadContentType, + MBrCtlLinkContent& aEmbeddedLinkContent); + +/** +* Browser plug-in calls this method when the user requests to load content via selecting a link, or any other way. Used with ECapabilityClientNotifyURL +* @since 3.2 +* @param aUrl The requested url +* @param aCurrentUrl The url of the current page +* @param aBrCtlLinkContent a callback interface to return the embedded content +* @return EFalse, browser will resolve the link +*/ + TBool ResolveLinkL(const TDesC& aUrl, const TDesC& aCurrentUrl, + MBrCtlLinkContent& aBrCtlLinkContent); + +/** +* @function CancelFetchL +* Cancel all outstanding resolving operations +*/ + void CancelFetchL(); +/** +* @function CancelAll +* Cancel all outstanding resolving operations +* @since 3.2 +*/ + void CancelAll(); + + +/** +* @function HandleResolveComplete +* @since 3.2 +* Resolver calls this method when content is resolved. +* @param aContentType The content type of the response +* @param aCharset The charset of the response. May be empty in case of image +* @param aContentBuf content data. Ownership is not transfered +* @return void +*/ + void HandleResolveComplete(const TDesC& aContentType, + const TDesC& aCharset, + const HBufC8* aContentBuf); + +/** +* @function HandleResolveError +* @since 3.2 +* This method is called if there is some error while resolving the content +* @param aError system wide error code. +*/ + void HandleResolveError(TInt aError); +/** +* @function CheckForMSK +* @since S60 3.2 +* Checks Msk flag is Enabled or not, If Enabled, Sets MSK Label +*/ + void CheckForMSK(); +/** +* @function IsPrevPageAvbl +* Check wether focus is on Hyperlink or not +* @since S60 3.2 +* @return ETrue, if Focus is on Hyperlink , EFalse otherwise +*/ + TBool IsHyperLinkFocused(); +/** +* @function IsPrevPageAvbl +* Check for Existance of the page +* @since S60 3.2 +* @return ETrue, if page is available , EFalse otherwise +*/ + TBool IsPrevPageAvbl(); + +/** +* @function ClearHistoryL +* Clear Browser history stack +* @since S60 3.2 +*/ + void ClearHistoryL(); + +/** +* @function GetCurrActiveObject +* Get the Current Active Object +* @since S60 3.2 +* @return CCSXHHelpContentBase Pointer, +*/ + CCSXHHelpContentBase* GetCurrActiveObject(); + +private: + +/** + @function ConstructL + @since S60 3.2 + Perform the second phase construction of a HtmlTopicContainer object + @param aRect the rectangle this view will be drawn to + */ + void ConstructL(const TRect& aRect); + +/** +* @function LoadHtmlL +* loads HTML page in the Browser +* @since S60 3.2 +*/ + void LoadHtmlL(); + +/** +* @function CheckForExternalLinkL +* Check for external Hyperlink, if yes launch browserNG +* @since S60 3.2 +* @return ETrue, if external hyperlink available, EFalse otherwise +*/ + TBool CheckForExternalLinkL(const TDesC& aUrl); + +private: + CBrCtlInterface* iBrCtrl; + CCSXHHtmlTOC2* iTopic; + CCSXHDocument& iDocument; + CCSXHHelpContentBase *iNewTopic; + + //Check the impln comments in HandleBrowserLoadEventL function + TBuf iUrlNoAnchors; + + CCSXHHtmlTopicView* iView; + AppLauncherForCSXH* iAppLauncher; + RLibrary iBrLibrary; + RFeatureControl iFeatureControl; + TBool iLoadHtml; + TInt32 iPrevPageCount; + TBool iBack; + + }; + + +#endif diff -r 000000000000 -r 1f04cf54edd8 csxhelp/inc/CSXHHtmlTopicView.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/inc/CSXHHtmlTopicView.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,217 @@ +/* +* 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 "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: CCSXHHtmlTopicView class declaration +* +*/ + + +#ifndef INC_CCSXHHTMLTOPICVIEW_H__ +#define INC_CCSXHHTMLTOPICVIEW_H__ + +// INCLUDES +#include +#include + +class CCSXHHtmlTopicContainer; +class TCoeHelpContext; +// CLASS DECLARATION + +/** +* @class CCSXHHtmlTopicView +* This class handles BrowserView of the Csxhelp Application +*/ +class CCSXHHtmlTopicView : public CAknView + { + public: + + enum THtmlViewType + { + EHtmlView = 0, + EContextHtmlView + }; +/** +* @function NewL +* @since S60 3.2 +* Construct a CCSXHHtmlTopicView +* and return a pointer to the created object +* @param aUid - View Id +* aFlags - Resource Id +* aRect - TRect Object +* @return a CCSXHHtmlTopicView Pointer +*/ + static CCSXHHtmlTopicView* NewL(const TUid&, const TInt&,const TRect& aRect); + +/** +* @function ~CCSXHHtmlTopicView +* @since S60 3.2 +* Destroy the object and release all memory objects +*/ + virtual ~CCSXHHtmlTopicView(); + +/** +* @function SetViewType +* @since S60 3.2 +* Sets the view type as either normal or context view +*/ + void SetViewTypeL(TInt viewType); + +/** +* @function GetViewType +* @since S60 3.2 +* Gets the view type as either normal or context view +*/ + TInt GetViewType(); + + protected: +/** +* @function CCSXHHtmlTopicView +* @since S60 3.2 +* Perform the first phase of two phase construction +*/ + CCSXHHtmlTopicView(const TUid&,const TInt&); + +/** +* @function ConstructL +* @since S60 3.2 +* Perform the second phase construction of a htmltopicview object +*/ + void ConstructL(const TRect& aRect); + +/** +* From MEikMenuObserver +* @function DynInitMenuPaneL +* used to manage the menu when +* no item are in the list box. +* We need to delete the "Open" +* menu item in this case. +* +* @since 3.2 +* @param aResource resource ID of menu pane +* @param aMenuPane instance of menupane +*/ + void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane); + + + public: // Functions from base classes +/** +* From CAknView, return view id of this view +* +* @function Id +* @since 3.2 +* @return view id +*/ + TUid Id() const; + +/** + * @function HandleCommandL + * @since S60 3.2 + * takes care of command handling. + * @param aCommand command to be handled + */ + void HandleCommandL(TInt aCommand); + +/** + * @function ResourceChangeHdl + * @since S60 3.2 + * Handler for resource change + * @param aType - Type of resource change event + */ + void ResourceChangeHdl(TInt aType); + +/** + * @function ViewActivatedL + * @since S60 3.2 + * Takes any action required when this view is activated. + * Handles this view activation event from view server + * @param aPrevViewId - Specifies the view previously active. + * aCustomMessageId - Specifies the message type. + * aCustomMessage - Activation message + */ + void ViewActivatedL(const TVwsViewId& aPrevViewId, + TUid aCustomMessageId, + const TDesC8& aCustomMessage); + + +/** + * @function SetSoftKeysL + * @since S60 3.2 + * Sets SoftKeys + * @param aSoftKeys Resource Id + */ + void SetSoftKeysL(TInt aSoftKeys); + +/** + * @function GetCurrentFontSize + * @since S60 3.2 + * SetSoftKeysL + * @return Current FontSize + */ + TInt GetCurrentFontSize(); +/** +* @function SetMiddleSoftKey +* @since S60 3.2 +* This will set the Label for MSK +*/ + void SetMiddleSoftKey(TBool aValue); + +/** +* From CAknView +* @function DoDeactivate +* de-activation handler +* +* @since 3.2 +* @param aPrevViewId ID of previious view. +*/ + void DoDeactivate(); +#ifdef FF_HELP_TUTORIAL_MERGE + /** + * Lauch tutorial if exist, else popup a error message + * @since S60 3.2 + * @param None + * @return None + */ + void LaunchTutorial(); +#endif // FF_HELP_TUTORIAL_MERGE + + protected: // functions from base classes +/** +* From CAknView +* @function DoActivateL +* activation handler +* +* @since 3.2 +* @param aPrevViewId ID of previious view. +*/ + void DoActivateL(const TVwsViewId& aPrevViewId, + TUid /* aCustomMessageId */, + const TDesC8& /* aCustomMessage */); + + + + private: + // previous view + TVwsViewId iPrevious; + CCSXHHtmlTopicContainer* iBCContainer; + + const TUid& iUid; + const TInt& iAppFlags; + + static TInt iFontSize; + + TBool iContextTopicView; + }; + +#endif // INC_CCSXHHTMLTOPICVIEW_H__ + +// End of File diff -r 000000000000 -r 1f04cf54edd8 csxhelp/inc/CSXHLegacyTopicContainer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/inc/CSXHLegacyTopicContainer.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,227 @@ +/* +* 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 "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: CCSXHLegacyTopicContainer class declaration +* +*/ + + +// INCLUDES +#include +#include +#include + + +// FORWARD DECLARATIONS +class CEikRichTextEditor; +class CEikGlobalTextEditor; +class CRichText; +class CAknsBasicBackgroundControlContext; +class CCSXHDocument; +class CCSXHLegacyTOC2; +// CLASS DECLARATION + +/** +* CCsHelpTopicContainer +* container control class for legacy topic view +* @lib etext.lib, eikcoctl.lib +* @since 3.2 +*/ +class CCSXHLegacyTopicContainer : public CCoeControl + { + public: // Constructors and destructor +/** +* @function NewL +* @since S60 3.2 +* Construct a CCSXHLegacyTopicContainer +* and return a pointer to the created object +* @param aRect - TRect Object +* aDocument - Document Object +* aTopic - LegacyTOC2 Pointer +* @return a CCSXHLegacyTopicContainer Pointer +*/ + static CCSXHLegacyTopicContainer* NewL(const TRect& aRect,CCSXHDocument + &aDocument,CCSXHLegacyTOC2 *aTopic); + +/** +* @function NewLC +* @since S60 3.2 +* Construct a CCSXHLegacyTopicContainer +* and return a pointer to the created object using two phase constuction +* @param aRect - TRect Object +* aDocument - Document Object +* aTopic - LegacyTOC2 Pointer +* @return a CCSXHLegacyTopicContainer Pointer +*/ + static CCSXHLegacyTopicContainer* NewLC(const TRect& aRect,CCSXHDocument + &aDocument,CCSXHLegacyTOC2 *aTopic); + +/** +* @function CCSXHLegacyTopicContainer +* @since S60 3.2 +* Construct a CCSXHLegacyTopicContainer +* and return a pointer to the created object using two phase constuction +* @param aDocument - Document Object +* aTopic - LegacyTOC2 Pointer +* @return a CCSXHHtmlTopicContainer Pointer +*/ + CCSXHLegacyTopicContainer(CCSXHDocument &aDocument,CCSXHLegacyTOC2 *aTopic); + +/** +* @function RefreshL +* @since S60 3.2 +* Used to Refresh the Content +* @param aTopic - CCSXHLegacyTOC2 Object +*/ + void RefreshL(CCSXHLegacyTOC2 *aTopic); + + /** + @function ConstructL + @since S60 3.2 + Perform the second phase construction of a LegacyTopicContainer object + @param aRect the rectangle this view will be drawn to + */ void ConstructL(const TRect& aRect); + + /** + * @The Mopsupply object gives the skin context to + * @the scrollbar, so that the scrollbar is skinned + * @according the skin parameters and look transparent + */ + TTypeUid::Ptr MopSupplyObject(TTypeUid aId); + +/** + * @function ~CCSXHLegacyTopicContainer + * @since S60 3.2 + * Destroy the object and release all memory objects + */ + virtual ~CCSXHLegacyTopicContainer(); + + public: // New functions +/** +* @function HandleResourceChange +* @since S60 3.2 +* Handles resource changes. +* This function is called by framework when when e.g skin or locale is changed. +* @param aType resource change type +*/ + void HandleResourceChange(TInt aType); + +/** +* @function HandleResourceChangeImpl +* @since S60 3.2 +* Handles resource changes. +* Implementation function for resource change +* @param aType resource change type +*/ + void HandleResourceChangeImpl(TInt aType); + + + protected: // New functions +/** +* @function SetTextL +* @since S60 3.2 +* Handles resource changes. +* set topic's text to a rich text editor +* @param aText help document +*/ + void SetTextL(CRichText* aText); + + protected: // From base classes. +/** + * When focus is changed, called. + * Set focus editor(viewer). + * @function FocusChanged + * @since 3.2 + * @param aDrawNow used to determine whether or not + * redraw should occur now, or later + */ + void FocusChanged(TDrawNow aDrawNow); + + + private: // new function +/** + * Get rich text format from resource. + * @function GetTextFormat + * @since 3.2 + */ + void GetTextFormat(); + +/* +* Format the rich text help data +* @function FormatRichTextL +* @since 3.2 +* @param aText instance of the CRichText object to format +*/ + void FormatRichTextL(CRichText& aText); + + private: // Functions from base classes +/** +* From CoeControl class +* @function SizeChanged +* @since S60 3.2 +* re-allocates and re-sizes components. +*/ + void SizeChanged(); + +/** +* From CoeControl class +* @function OfferKeyEventL +* @since S60 3.2 +* Progress Key Event +* @param aKeyEvent the key event +* @param aType EEventKey | EEventKeyUp | EEventKeyDown +* @return EKeyWasConsumed if key event is processed, +* otherwise EKeyWasNotConsumed +*/ + TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, + TEventCode aType); + +/** +* From CoeControl class +* @function CountComponentControls +* @since S60 3.2 +* @return Number of child controls this has. +*/ + TInt CountComponentControls() const; + +/** +* From CoeControl class +* @function ComponentControl +* @since S60 3.2 +* @param aIndex index of child controls +* @retrun pointer to child control +*/ + CCoeControl* ComponentControl(TInt aIndex) const; + +/** +* From CoeControl class +* @function Draw +* @since S60 3.2 +* Draw() for drawing the Background +*/ + void Draw(const TRect& aRect) const; + + + private: //data + // to show help document + CEikEdwin* iEdwin; + + // rich text format + TCharFormat iCharFormat; + TCharFormatMask iCharFormatMask; + CAknsBasicBackgroundControlContext* iSkinContext; // skin data + CRichText* iText; // skin data + CCSXHDocument& iDocument; + CCSXHLegacyTOC2* iTopic; + }; +// End of File diff -r 000000000000 -r 1f04cf54edd8 csxhelp/inc/CSXHLegacyTopicView.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/inc/CSXHLegacyTopicView.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,147 @@ +/* +* 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 "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: CCSXHLegacyTopicView class declaration +* +*/ + + +#include +#include + +class CCSXHLegacyTopicContainer; + +// CLASS DECLARATION + +/** +* @class CCSXHLegacyTopicView +* This class handles RichTextView of the Csxhelp Application +*/ +class CCSXHLegacyTopicView : public CAknView + { + public: +/** +* @function NewL +* @since S60 3.2 +* Construct a CCSXHLegacyTopicView +* and return a pointer to the created object +* @param aUid - View Id +* aFlags - Resource Id +* aRect - TRect Object +* @return a CCSXHLegacyTopicView Pointer +*/ + + static CCSXHLegacyTopicView* NewL(const TUid& aUid, const TInt& + aFlags,const TRect& aRect); +/** +* From CAknView +* @function DoDeactivate +* de-activation handler +* +* @since 3.2 +* @param aPrevViewId ID of previious view. +*/ + void DoDeactivate(); + +/** +* @function ~CCSXHLegacyTopicView +* @since S60 3.2 +* Destroy the object and release all memory objects +*/ + virtual ~CCSXHLegacyTopicView(); + protected: +/** +* @function CCSXHLegacyTopicView +* @since S60 3.2 +* Perform the first phase of two phase construction +*/ CCSXHLegacyTopicView(const TUid&, const TInt&); + +/** +* @function ConstructL +* @since S60 3.2 +* Perform the second phase construction of a legacytopicview object +* @param aRect the rectangle this view will be drawn to +*/ + void ConstructL(const TRect& aRect); + + public: // Functions from base classes + /** +* From CAknView, return view id of this view +* +* @function Id +* @since 3.2 +* @return view id +*/ + TUid Id() const; + +/** + * @function HandleCommandL + * @since S60 3.2 + * takes care of command handling. + * @param aCommand command to be handled + */ + void HandleCommandL(TInt aCommand); + +/** + * @function ResourceChangeHdl + * @since S60 3.2 + * Handler for resource change + * @param aType - Type of resource change event + */ + void ResourceChangeHdl(TInt aType); + + protected: // functions from base classes +/** +* From CAknView +* @function DoActivateL +* activation handler +* +* @since 3.2 +* @param aPrevViewId ID of previious view. +*/ + void DoActivateL(const TVwsViewId& aPrevViewId, + TUid /* aCustomMessageId */, + const TDesC8& /* aCustomMessage */); + + +/** + * @function ViewActivatedL + * @since S60 3.2 + * Takes any action required when this view is activated. + * Handles this view activation event from view server + * @param aPrevViewId - Specifies the view previously active. + * aCustomMessageId - Specifies the message type. + * aCustomMessage - Activation message + */ + void ViewActivatedL(const TVwsViewId& aPrevViewId, + TUid aCustomMessageId, + const TDesC8& aCustomMessage); + +/** + * @function ViewActivatedL + * @since S60 3.2 + * Takes any action required when this view is deactivated. + * Handles this view deactivation event from view server + */ + void ViewDeactivated(); + + + private: + + CCSXHLegacyTopicContainer* iTopicContainer; + TVwsViewId iPrevious; + + const TUid& iUid; + const TInt& iAppFlags; + + }; diff -r 000000000000 -r 1f04cf54edd8 csxhelp/inc/CsHelp.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/inc/CsHelp.hrh Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,90 @@ +/* +* 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 "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: Declarations for resources of cshelp. +* +*/ + + +#ifndef CSHELP_HRH +#define CSHELP_HRH + +enum TCSXHIds + { + ECSXHOpenItem = 1, // start value must not be 0 + ECSXHOpenItemPropagated , //Propagated from container + ECSXHTOC1ListView, + ECSXHKywdTOC1ListView, + ECSXHTOC2ListView, + ECSXHSearchText, + ECSXHOpenTopicView, + ECSXHOpenTopicText, + ECSXHOpenApplicationTopics, + ECsHelpCmdFontLarge, + ECsHelpCmdFontSmall, + ECSXHOpenHyperLink, + ECSXHDummyMSK, + ECmdAiwPlaceHolder, + ECmdLast + }; + + + +// Commands +enum TCsHelpMenuCommands + { + ECsHelpCmdViewCategoryList = 0x6000, + ECsHelpCmdViewTopicList, + ECsHelpCmdViewTopic, + ECsHelpCmdViewTopicForContext, + ECsHelpCmdViewTopicForSearch, + ECsHelpCmdViewSearch, + ECsHelpCmdViewSearchResult, + + ECsHelpCmdNextTopicList, + ECsHelpCmdPreviousTopicList, + + ECsHelpCmdNextTopic, + ECsHelpCmdPreviousTopic, + + ECsHelpCmdNextIndex, + ECsHelpCmdPreviousIndex + }; + +// Tab ID for category list view and search view +enum TCsHelpTabId + { + ECsHelpCategoryTab, + ECsHelpSearchTab + }; + + +// note id +enum TCsHelpNoteId + { + EProgressNote = 1, + EInstallNote + }; + + +enum TTutorialAiwCommands { + KLaunchTutorial = 0x10208a86, //Launches tutorial as embedded application + KPlayPresentation, //Plays tutorial presentation + KPresentationExists, //Tests if the given presentation exists + KPlayDefaultPresentation, //Plays tutorial default presentation + KDefaultPresentationExists //Tests if the default presentation exists + }; + +#endif // CSHELP_HRH + +// End of File diff -r 000000000000 -r 1f04cf54edd8 csxhelp/inc/cshelp.laf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/inc/cshelp.laf Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,41 @@ +/* +* ============================================================================ +* Name : cshelp.laf +* Part of : CsHelp +* +* Description: +* This is the LAF specification file for the Cshelp app. +* +* +* Version: +* +* Copyright (C) 2002 Nokia Corporation. +* This material, including documentation and any related +* computer programs, is protected by copyright controlled by +* Nokia Corporation. All rights are reserved. Copying, +* including reproducing, storing, adapting or translating, any +* or all of this material requires the prior written consent of +* Nokia Corporation. This material also contains confidential +* information which may not be disclosed to others without the +* prior written consent of Nokia Corporation. +* +* ============================================================================ +*/ + +//d: laf data for Help application's topic view. +// Edit 16 >> +////l: main_pane_1 +//l:main_pane_1_help_item_text +// << +// +#define topic_view_font ELatinPlain12 +#define topic_view_C 215 +#define topic_view_l 4 +#define topic_view_r 5 +#define topic_view_B 21 +#define topic_view_W 167 +#define topic_view_J ELayoutAlignBidi +#define topic_view_lines 8 +#define topic_view_nextB 37 + +// End of file diff -r 000000000000 -r 1f04cf54edd8 csxhelp/inc/csxhruntimeappwatcher.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/inc/csxhruntimeappwatcher.h Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,107 @@ +/* +* 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 "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: observer if any install/unistall happens at help app +* runtime +* +*/ + +#ifndef CSXHRUNTIMEAPPWATCHER_H +#define CSXHRUNTIMEAPPWATCHER_H + +#include +#include + +/* + * Base class of Installation/Uninstallation + * + */ +class MInstallationObserver + { +public: + /* + * call back function, to handle update index + */ + virtual void RuntimeUpdateIndex() = 0; + }; + +/* + * Runtime indexing wather + * keep watching if user install/uninstall/modify any helps + * + */ +class CCSXHRuntimeAppWatcher : public CActive + { +public: + + /* + * default constructor + */ + CCSXHRuntimeAppWatcher(); + + /* + * destructor + */ + ~CCSXHRuntimeAppWatcher(); + + /* + * two-phase constructor + */ + static CCSXHRuntimeAppWatcher* NewL(); + + /* + * from base class CActive + * Handles an active object's request completion event + */ + void RunL(); + + /* + * from base class CActive + * Implements cancellation of an outstanding request + */ + void DoCancel(); + + /* + * start this active object + */ + void Start(); + + /* + * Set observer + * @param aObserver: App UI, notify user helps modified + * + */ + void SetObserver( MInstallationObserver* aObserver ); + +private: + + /* + * two-phase constructor + */ + void ConstructL(); + +private: + + /* + * file session + */ + RFs iFileSession; + + /* + * observer + * not owned + */ + MInstallationObserver* iObserver; + }; + +#endif // CSXHRUNTIMEAPPWATCHER_H diff -r 000000000000 -r 1f04cf54edd8 csxhelp/loc/csxhelp.loc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/loc/csxhelp.loc Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,136 @@ +/* +* Copyright (c) 2002-2004 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: Localisation file for Csxhelp +* +*/ + + +// LOCALISATION STRINGS +//d: help application name in selection grid window +//l: cell_app_pane_t1 +#define qtn_apps_grid_help "Help" + +//d: help application name in selection list window +//l: list_single_large_graphic_pane_t1 +#define qtn_apps_ls1_help "Help" + +//d: text when there is no topic +//l: popup_note_window +#define qtn_help_note_no_topic "No topic available" + +//d: text of wait note while sarching +//l: popup_note_wait_window +#define qtn_help_noteg_searching "Searching" + +//d: Command in options menu. go to categor list view +//l: list_single_pane_t1_cp2 +#define qtn_help_om_category_list "Help category list" + +//d: Command in options menu. find keywords, and go to search result view +//l: list_single_pane_t1_cp2 +#define qtn_help_om_find_topics "Find" + + +//d: Command in options menu. go to topic list view +//l: list_single_pane_t1_cp2 +#define qtn_help_om_open_category "Open" + +//d: Command in options menu. go to topic view +//l: list_single_pane_t1_cp2 +#define qtn_help_om_open_topic "Open" + +//d: Command in options menu. go to search view. +//l: list_single_pane_t1_cp2 +#define qtn_help_om_search "Search by keyword" + + +//d: Command in options menu. go to topic list view +//l: list_single_pane_t1_cp2 +#define qtn_help_om_topic_list "Topic list" + +//d: title text in help application +//l: title_pane_t2/opt9 +#define qtn_help_title_help "Help" + +//d: when help application is launched from options menu and no help topic is +//d: associated with present view, information note with this text is dsplayed. +//l: popup_note_window +#define qtn_help_note_no_topics "No help topics available" + +//d: Command in options menu. go to search view +//l: list_single_pane_t1_cp2 +//r:3.2 +#define qtn_help_om_search_xhtml "Search" + +//d: Command in options menu. go to help content view +//l: list_single_pane_t1_cp2 +//r:3.2 +#define qtn_help_om_help_contents "Help Contents" + +//d: Command in options menu. go to Application topic view +//l: list_single_pane_t1_cp2 +//r:3.2 +#define qtn_help_om_application_topics "Application Topics" + +//d: Command in options menu. To open the linked html page +//l: list_single_pane_t1_cp2 +//r:3.2 +#define qtn_help_om_open_hyperlink "Open link" + +//d: Command in options menu. To increase browser font size +//l: list_single_pane_t1_cp2 +//r:3.2 +#define qtn_help_om_increase_text "Increase text size" + +//d: Command in options menu. To decrease browser font size +//l: list_single_pane_t1_cp2 +//r:3.2 +#define qtn_help_om_decrease_text "Decrease text size" + +//d: While launching an Application from help with wrong uid/data +//d: information note with this text is dsplayed. +//l: popup_note_window +//r:3.2 +#define qtn_help_note_unable_launch "Unable to launch application" + +//d: When an Application is trying to launch from help using (HTTP)external links. +//d: information note with this text is dsplayed. +//l: popup_note_window +//r:3.2 +#define qtn_help_note_no_internet "Launching applications from internet content is not allowed" + +//d: Command for Middle SoftKey. find keywords, and go to search result view +//l: control_pane_t3/opt7 +//r:3.2 +#define qtn_help_msk_find "Find" + +//d: Command for Middle SoftKey. To open the linked html page +//l: control_pane_t3/opt7 +//r:3.2 +#define qtn_help_msk_open_hyperlink "Open link" + +//d: 1st Item in the Top Level List,Present only if Tutorial is present in the platform. +//d: 1st Item in the applications Topic List,Present only if Tutorial content is available +//for that application in the platform. +//l: navi_text_pane_t1 +//r:5.0 +#define qtn_help_toc_list_item_tutorial "Show Tutorial" + +//d: Label for wait note +//d: This note is used when user install/uninstall an application, which has helps. +//l: popup_note_wait_window +//r: 5.0 +#define qtn_help_noteg_install "Help content changed due to install/uninstallation, please restart Help application to see new app" + +// End of file diff -r 000000000000 -r 1f04cf54edd8 csxhelp/rom/AiwHelpProvider.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/rom/AiwHelpProvider.iby Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,30 @@ +/* +* Copyright (c) 2002 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: +* Main resource file for the AiwHelpProvider application. +* +* +*/ + +#ifndef __AIWHELPPROVIDER_IBY__ +#define __AIWHELPPROVIDER_IBY__ + +#ifdef RD_HELP_AIW_INTEGRATION + + +ECOM_PLUGIN(AiwHelpProvider.dll,AiwHelpProvider.RSC) + +#endif + +#endif diff -r 000000000000 -r 1f04cf54edd8 csxhelp/rom/AiwHelpProviderResources.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/rom/AiwHelpProviderResources.iby Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,28 @@ +/* +* Copyright (c) 2002 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: +* Main resource file for the AiwHelpProvider application. +* +* +*/ + + +#ifndef __AIWHELPPROVIDERRESOURCES_IBY__ +#define __AIWHELPPROVIDERRESOURCES_IBY__ + +#ifdef RD_HELP_AIW_INTEGRATION +data=DATAZ_\APP_RESOURCE_DIR\AiwHelpProviderPlugin.rsc APP_RESOURCE_DIR\AiwHelpProviderPlugin.rsc +#endif + +#endif diff -r 000000000000 -r 1f04cf54edd8 csxhelp/rom/Cshelp.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/rom/Cshelp.iby Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,37 @@ +/* +* Copyright (c) 2002 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: +* Main resource file for the CsHelp application. +* +* +*/ + + +#ifndef __CSHELP_IBY__ +#define __CSHELP_IBY__ + +#ifdef __SERIES60_HELP // Help files are put in the image only when this flag is defined + +#include + +file=ABI_DIR\BUILD_DIR\HelpEngine.dll \SHARED_LIB_DIR\HelpEngine.dll + +S60_APP_EXE(cshelp) +S60_APP_AIF_ICONS(cshelp) +S60_APP_AIF_RSC(cshelp) +S60_APP_BITMAP(cshelp) + +#endif //__SERIES60_HELP + +#endif // __CSHELP_IBY__ diff -r 000000000000 -r 1f04cf54edd8 csxhelp/rom/CshelpResources.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/rom/CshelpResources.iby Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,41 @@ +/* +* Copyright (c) 2002 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: +* Main resource file for the CsHelp application. +* +* +*/ + + +#ifndef __CSHELP_RESOURCES_IBY__ +#define __CSHELP_RESOURCES_IBY__ + + + +#ifdef __SERIES60_HELP // Help files are put in the image only when this flag is defined + +S60_APP_CAPTION(Cshelp) + +//Resource file(s) for CsHelp application +#ifndef RD_APPS_TO_EXES +data=ZSYSTEM\Apps\Cshelp\cshelp.rsc APP_RESOURCE_DIR\cshelp.rsc + +#else +data=DATAZ_\APP_RESOURCE_DIR\cshelp.rsc APP_RESOURCE_DIR\cshelp.rsc +#endif + + +#endif //__SERIES60_HELP + +#endif diff -r 000000000000 -r 1f04cf54edd8 csxhelp/src/AppLauncherForCSXH.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/src/AppLauncherForCSXH.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,453 @@ +/* +* 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 "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: AppLauncherForCSXH class definition +* +*/ + + +#include "AppLauncherForCSXH.h" +#include "CSXHAppUi.h" +#include + +#include +#include +#include +#include +#include +#include +#include "csxhconstants.h" +#include + + +const TInt KBackSlashesInPrefix = 3; +#ifndef __SERIES60_30__ + const TUid KUidBrowserApplication = { 0x10008D39 }; +#else + const TUid KUidBrowserApplication = { 0x1020724D }; +#endif + +const TInt KKeyBlockTime = 100000; + +enum TAppLaunchMode + { + ENoAppLaunch = 0, + EVSAMode = 1, + ECmdMode = 2, + EAppLaunchFromInternet = 3, + }; +enum TAppLauchParams + { + EParamsInvalid = 0, + EParamsNoMsg, + EParamsWithMsg, + }; + + +AppLauncherForCSXH* AppLauncherForCSXH::NewL() + { + AppLauncherForCSXH* self = new(ELeave) AppLauncherForCSXH(); + self->ConstructL(); + return self; + } + +AppLauncherForCSXH::AppLauncherForCSXH() + {} + +void AppLauncherForCSXH::ConstructL() + { + iTimer = CPeriodic::NewL( CActive::EPriorityStandard ); + } + +AppLauncherForCSXH::~AppLauncherForCSXH() + { + if(iTimer) + delete iTimer; + } + +// -------------------------------------------------------------------------- +// Launches an application based on the Application Launch Link URL +// -------------------------------------------------------------------------- +TBool AppLauncherForCSXH::LaunchAppL(const TDesC& aUrl,const TDesC& aCurrentUrl) + { + switch(GetAppLaunchModeL(aUrl,aCurrentUrl)) + { + case ENoAppLaunch: + return EFalse; + case EAppLaunchFromInternet: + HandleAppLauchFromInternetL(); + return ETrue; + case EVSAMode: + { + if(!LaunchApp(aUrl,ETrue)) + HandleFailedAppLauchL(); + return ETrue; + } + case ECmdMode: + { + if(!LaunchApp(aUrl,EFalse)) + HandleFailedAppLauchL(); + return ETrue; + } + default: + return EFalse; + } + } + +TInt AppLauncherForCSXH::GetAppLaunchModeL(const TDesC& aUrl,const TDesC& aCurrentUrl) + { + TInt Position = aUrl.Find(_L("app://vsa@localhost/")); + if(KErrNotFound != Position && 0 == Position) + { + return CheckAppLaunchFromInternetL(EVSAMode,aCurrentUrl); + } + + Position = aUrl.Find(_L("app://cmd@localhost/")); + if(KErrNotFound != Position && 0 == Position) + { + return CheckAppLaunchFromInternetL(ECmdMode,aCurrentUrl); + } + + return ENoAppLaunch; + } + +TBool AppLauncherForCSXH::LaunchApp(const TDesC& aUrl, TBool aVSAMode) + { + iParam1.Copy(KEmptyString); + iParam2.Copy(KEmptyString); + iParam3.Copy(KEmptyString); + iParam4.Copy(KEmptyString); + + switch(CheckMsgParams(aUrl)) + { + case EParamsInvalid: + return EFalse; + case EParamsNoMsg: + { + ExtractTwoParams(aUrl); + if(aVSAMode) + { + TInt32 AId,VId; + GetUid(iParam1,AId); + GetUid(iParam2,VId); + TRAPD(res,CCSXHAppUi::GetInstance()->AppLaunchL(AId,VId)); + return (res == KErrNone) ? ETrue : EFalse; + } + else + { + return LaunchCmdApp(EFalse); + } + } + case EParamsWithMsg: + { + ExtractFourParams(aUrl); + if(aVSAMode) + { + TInt32 AId,VId,MId; + GetUid(iParam1,AId); + GetUid(iParam2,VId); + GetUid(iParam3,MId); + TRAPD(res,CCSXHAppUi::GetInstance()->AppLaunchL(AId,VId,MId,iParam4)); + return (res == KErrNone) ? ETrue : EFalse; + } + else + { + return LaunchCmdApp(ETrue); + } + } + default: + return EFalse; + } + } +TBool AppLauncherForCSXH::LaunchCmdApp(TBool aParamsMode) + { + TRAPD(res,LaunchCmdAppL(aParamsMode)); + if(res != KErrNone) + return EFalse; + return ETrue; + } +TBool AppLauncherForCSXH::LaunchCmdAppL(TBool aParamsMode) + { + /*valid cases + app://cmd@localhost/APP_NAME/APP_UID + app://cmd@localhost/APP_NAME/APP_UID/MSG_UID/Parameters + */ + TApaTask task = GetCmdAppTask(); + if (task.Exists()) + {//App is already running + if(aParamsMode) + SendMsgToCmdAppTaskL(task); + + task.BringToForeground(); + return ETrue; + } + //Application has to be started + CApaCommandLine* cmdLine=CApaCommandLine::NewLC(); + cmdLine->SetExecutableNameL(iParam1); + cmdLine->SetCommandL(EApaCommandRun); + + RApaLsSession lsSession; + User::LeaveIfError(lsSession.Connect()); + CleanupClosePushL(lsSession); + User::LeaveIfError(lsSession.StartApp(*cmdLine)); + CleanupStack::PopAndDestroy(&lsSession); + CleanupStack::PopAndDestroy(cmdLine); + if(aParamsMode) + { + iCount = 0; + TCallBack timer_Callback_to_terminateApp( Timer_Callback_to_TerminateApp,this ); + StartTimer(timer_Callback_to_terminateApp); + } + + return ETrue; + } + +TInt AppLauncherForCSXH::Timer_Callback_to_TerminateApp(TAny* aPtr) + { + return static_cast( aPtr )->SendMsgToApplication(); + } + +TInt AppLauncherForCSXH::SendMsgToApplication() + { + //If parameters has to be passed then the following is required + TApaTask cmdTask = GetCmdAppTask(); + if (cmdTask.Exists()) + { + TRAPD(res,SendMsgToCmdAppTaskL(cmdTask)); + if(res != KErrNone) + return 0; + cmdTask.BringToForeground(); + iTimer->Cancel(); + } + else if(++iCount > 20) + { + iTimer->Cancel(); + } + return 0; + } + +TApaTask AppLauncherForCSXH::GetCmdAppTask() + { + TInt32 AId; + GetUid(iParam2,AId); + TApaTaskList taskList(CCSXHAppUi::GetInstance()->GetWsSession()); + TUid KtestAppUid( TUid::Uid( AId ) ); + return taskList.FindApp(KtestAppUid); + } +void AppLauncherForCSXH::SendMsgToCmdAppTaskL(TApaTask& aTask) + { + + TInt32 MId; + GetUid(iParam3,MId); + TUid KtestMsgUid( TUid::Uid( MId ) ); + HBufC8* params = CnvUtfConverter::ConvertFromUnicodeToUtf8L(iParam4); + CleanupStack::PushL(params); + aTask.SendMessage (KtestMsgUid, *params); + CleanupStack::PopAndDestroy(params); + } + +void AppLauncherForCSXH::HandleFailedAppLauchL() + { + HBufC* ErrorMessage = CCSXHAppUi::GetCoeEnv()->AllocReadResourceLC( + R_QTN_HELP_NOTE_UNABLE_TO_LAUNCH_APP); + CAknGlobalNote* note = CAknGlobalNote::NewLC(); + note->ShowNoteL(EAknGlobalInformationNote, *ErrorMessage); + CleanupStack::PopAndDestroy(note); + CleanupStack::PopAndDestroy(ErrorMessage); + } +void AppLauncherForCSXH::HandleAppLauchFromInternetL() + { + HBufC* ErrorMessage = CCSXHAppUi::GetCoeEnv()->AllocReadResourceLC( + R_QTN_HELP_NOTE_APP_LAUNCH_NOT_ALLOWED); + CAknGlobalNote* note = CAknGlobalNote::NewLC(); + note->ShowNoteL(EAknGlobalInformationNote, *ErrorMessage); + CleanupStack::PopAndDestroy(note); + CleanupStack::PopAndDestroy(ErrorMessage); + } + +TInt AppLauncherForCSXH::CheckAppLaunchFromInternetL(TInt aCurrentMode,const TDesC& /*aCurrentUrl*/ ) + { + + return aCurrentMode; + //BrowserNG is lauched for Externalhyperlinks, + //All the security issues are addresed by BrowserNG, + + /*(0 == aCurrentUrl.Find(KFileUrlPrefix) ) ? + aCurrentMode : EAppLaunchFromInternet;*/ + } + +TInt AppLauncherForCSXH::CheckMsgParams(const TDesC& aUrl) + { + /* + The following are valid cases + app://vsa@localhost/APP_UID/VIEW_UID + app://vsa@localhost/APP_UID/VIEW_UID/MSG_UID/Parameters + app://cmd@localhost/APP_NAME/APP_UID + app://cmd@localhost/APP_NAME/APP_UID/MSG_UID/Parameters + + That is, it should have exactly 4 backslashes or + >= 6 backslashes (considering the possibility that parameters + can have embedded backslashes) + */ + TBuf backSlash(KBackSlash); + TInt count = 0; + + for(TInt i = 0 ; i < aUrl.Length() ; ++i) + { + if(KErrNotFound != backSlash.Find(&aUrl[i],KBackSlashLength)) + ++count; + } + + if(count == 4) + return EParamsNoMsg; + else if (count >=6) + return EParamsWithMsg; + else + return EParamsInvalid; + } + +void AppLauncherForCSXH::ExtractTwoParams(const TDesC& aUrl) + { + /*Will be called for the following cases + app://vsa@localhost/APP_UID/VIEW_UID + app://cmd@localhost/APP_NAME/APP_UID + */ + iParam1.Copy(KEmptyString); + iParam2.Copy(KEmptyString); + + TBuf backSlash(KBackSlash); + TInt count = 0; + TInt pos; + + for(pos = 0; pos < aUrl.Length() ; ++pos) + { + if(KErrNotFound != backSlash.Find(&aUrl[pos],KBackSlashLength)) + ++count; + if(count == KBackSlashesInPrefix) + break; + } + TPtrC16 url = aUrl.Mid(pos + 1); + pos = url.Find(KBackSlash); + iParam1 = url.Left(pos); + iParam2 = url.Mid(pos + 1); + } + +void AppLauncherForCSXH::ExtractFourParams(const TDesC& aUrl) + { + /*Will be called for the following cases + app://vsa@localhost/APP_UID/VIEW_UID/MSG_UID/Parameters + app://cmd@localhost/APP_NAME/APP_UID/MSG_UID/Parameters + */ + iParam1.Copy(KEmptyString); + iParam2.Copy(KEmptyString); + iParam3.Copy(KEmptyString); + iParam4.Copy(KEmptyString); + + TBuf backSlash(KBackSlash); + TInt count = 0; + TInt pos; + + for(pos = 0; pos < aUrl.Length() ; ++pos) + { + if(KErrNotFound != backSlash.Find(&aUrl[pos],KBackSlashLength)) + ++count; + if(count == KBackSlashesInPrefix) + break; + } + + TPtrC16 url = aUrl.Mid(pos + 1); + pos = url.Find(KBackSlash); + iParam1 = url.Left(pos); + + TPtrC16 url2 = url.Mid(pos + 1); + pos = url2.Find(KBackSlash); + iParam2 = url2.Left(pos); + + TPtrC16 url3 = url2.Mid(pos + 1); + pos = url3.Find(KBackSlash); + iParam3 = url3.Left(pos); + + iParam4 = url3.Mid(pos+1); + } + +void AppLauncherForCSXH::GetUid(TPtrC aUid, TInt32& aResult) + { + TInt hexPos = aUid.Find(_L("x")); + if(KErrNotFound == hexPos) + TLex(aUid).Val(aResult); + else + { + TPtrC16 uidt = aUid.Mid(hexPos+1); + TInt64 res; + //During this operation sometimes values exceed TInt32, but the end result is always + //fits into TInt32 + TLex(uidt).Val(res,EHex); + aResult = res; + } + } + +void AppLauncherForCSXH::LaunchBrowserNGL(const TDesC& aUrl) + { + _LIT( KBrowserCmdFetchUrl, "4 " ); + HBufC* param = HBufC::NewLC( KBrowserCmdFetchUrl().Length() + + aUrl.Length() ); + TPtr paramPtr = param->Des(); + paramPtr.Copy( KBrowserCmdFetchUrl ); + paramPtr.Append( aUrl ); + + if(!SendMsgToBrowserNGL(param)) + { + RApaLsSession appArcSession; + User::LeaveIfError( appArcSession.Connect() ); + CleanupClosePushL( appArcSession ); + + TThreadId id; + User::LeaveIfError + ( + appArcSession.StartDocument(*param,KUidBrowserApplication,id ) + ); + CleanupStack::PopAndDestroy( &appArcSession ); + } + + CleanupStack::PopAndDestroy( param ); + } + +TBool AppLauncherForCSXH::SendMsgToBrowserNGL(const HBufC* aUrl) + { + TApaTaskList taskList(CCSXHAppUi::GetInstance()->GetWsSession()); + TApaTask task = taskList.FindApp(KUidBrowserApplication); + if(task.Exists()) + { + // 8-bit buffer is required. + HBufC8* param8 = HBufC8::NewLC( aUrl->Length() ); + param8->Des().Copy( *aUrl ); + task.SendMessage( TUid::Uid( 0 ), *param8 ); // Uid is not used + CleanupStack::PopAndDestroy( param8 ); + return ETrue; + } + else + return EFalse; + } + +void AppLauncherForCSXH::StartTimer(TCallBack aCallBack) + { + if( iTimer->IsActive() ) + { + iTimer->Cancel(); + } + + iTimer->Start( + TTimeIntervalMicroSeconds32( KKeyBlockTime ), + TTimeIntervalMicroSeconds32( KKeyBlockTime ), + aCallBack ); + } diff -r 000000000000 -r 1f04cf54edd8 csxhelp/src/CSXH.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/src/CSXH.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,66 @@ +/* +* 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 "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: +* +*/ + + +#include "CSXHApplication.h" +#include + +#ifdef __UI_FRAMEWORKS_V2__ + +// Create an application, and return a pointer to it +CApaApplication* NewApplication() + { + return new CCSXHApplication; + } + +TInt E32Main() + { + return EikStart::RunApplication(NewApplication); + } + +/////////////////////////////////////////////////////////////////////////////// +// +// The following is required for wins on EKA1 (using the exedll target) +// +#if defined(__WINS__) && !defined(EKA2) +EXPORT_C TInt WinsMain(TDesC* aCmdLine) + { + return EikStart::RunApplication(NewApplication, aCmdLine); + } + +TInt E32Dll(TDllReason) + { + return KErrNone; + } +#endif + +#else // __UI_FRAMEWORKS_V2__ + +// Create an application, and return a pointer to it +EXPORT_C CApaApplication* NewApplication() + { + return new CCSXHApplication; + } + +// DLL entry point, return that everything is ok +GLDEF_C TInt E32Dll(TDllReason) + { + return KErrNone; + } + +#endif // __UI_FRAMEWORKS_V2__ + diff -r 000000000000 -r 1f04cf54edd8 csxhelp/src/CSXHAppUi.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/src/CSXHAppUi.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,541 @@ +/* +* 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 "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: CCSXHAppUi class definition +* +*/ + + +#include "CSXHAppUi.h" +#include "CSXHGenericView.h" +#include "CSXHHtmlTopicView.h" +#include "CSXHLegacyTopicView.h" +#include "CsHelp.hrh" +#include +#include "CSXHAppUi.h" +#include "CSXHDocument.h" + +#include "CSXHHelpDataBase.h" +#include "CSXHViewIDs.h" + +#include +#include +#include +#include +#include +#include + +#include "csxhconstants.h" + +#ifdef FF_HELP_TUTORIAL_MERGE +#include + +#if defined(_DEBUG) && defined(__WINS__) +#include +#include +_LIT(KLogDir, "csxh"); +_LIT(KLogFile, "csxh.txt"); +inline void FPrint(const TRefByValue aFmt, ...) + { + VA_LIST list; + VA_START(list,aFmt); + RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list); + } +#define FLOG(a) {FPrint(a);} +#define FLOGF FPrint +#else //_DEBUG +#define FLOG(a) +#define FLOGF +#endif //_DEBUG +#endif // FF_HELP_TUTORIAL_MERGE +CCSXHAppUi* CCSXHAppUi::iInstance = NULL; + +// ConstructL is called by the application framework +void CCSXHAppUi::ConstructL() + { +#ifndef __SERIES60_30__ + BaseConstructL(EAknEnableSkin | EAknEnableMSK | EAknSingleClickCompatible ); +#else + BaseConstructL(EAknEnableSkin); +#endif + +#ifdef FF_HELP_TUTORIAL_MERGE + LoadTutorialService(); +#endif // FF_HELP_TUTORIAL_MERGE + SetKeyEventFlags( CAknAppUiBase::EDisableSendKeyShort | CAknAppUiBase::EDisableSendKeyLong ); + iTOC1View = CCSXHGenericView::NewL(KCSXHToc1ViewID,R_CSXH_TOC1); + AddViewL(iTOC1View); + + iTOC2View = NULL; + iKywdTOC1View = NULL; + iKywdTOC2View = NULL; + iHtmlTopicView = NULL; + iLegacyTopicView = NULL; + iLegacyContextTopicView = NULL; + + SetDefaultViewL(*iTOC1View); + + iRuntimeWatcher = CCSXHRuntimeAppWatcher::NewL(); + iRuntimeWatcher->SetObserver( this ); + iRuntimeWatcher->Start(); +#ifdef _DEBUG + RDebug::Print( _L("Help app launched") ); +#endif + } + +CCSXHAppUi::CCSXHAppUi() + { + iInstance = this; + } + +CCSXHAppUi::~CCSXHAppUi() + { +#ifdef FF_HELP_TUTORIAL_MERGE + + if(iServiceHandler) + { + delete iServiceHandler; + } + +#endif // FF_HELP_TUTORIAL_MERGE +#ifdef _DEBUG + RDebug::Print(_L("Help app ended")); +#endif + if ( iRuntimeWatcher ) + delete iRuntimeWatcher; + + } + +// -------------------------------------------------------------------------- +// Message Handler +// -------------------------------------------------------------------------- +void CCSXHAppUi::HandleCommandL(TInt aCommand) + { + switch(aCommand) + { + case EEikCmdExit: + case EAknSoftkeyExit: + case EAknSoftkeyClose: + Exit(); + break; + + case ECSXHOpenTopicText: + case ECSXHOpenItemPropagated: + case ECSXHOpenItem: + { + CAknInputBlock* inputBlock = CAknInputBlock::NewLC(); + ActivateDisplayTopicViewL(); + CleanupStack::PopAndDestroy( inputBlock ); + } + break; + case ECSXHSearchText: + { + CCSXHDocument* doc = static_cast(Document()); + doc->SetDisplayTopic(doc->GetHelpDataBase()->GetKywdTopics()); + ActivateDisplayTopicViewL(); + } + break; + default: + break; + } + } +void CCSXHAppUi::InitDisplayTopicViewL(TUid aViewID) + { + if(aViewID == KCSXHToc1ViewID) + return; + + + if(aViewID == KCSXHContextLegacyTopicViewID && iLegacyContextTopicView == NULL) + { + iLegacyContextTopicView = CCSXHLegacyTopicView::NewL (KCSXHContextLegacyTopicViewID, + R_CSHELP_TOPICFORCONTEXT, + ClientRect()); + AddViewL(iLegacyContextTopicView); + } + else if(aViewID == KCSXHToc2ViewID && iTOC2View == NULL) + { + iTOC2View = CCSXHGenericView::NewL(KCSXHToc2ViewID,R_TOPICLIST); + AddViewL(iTOC2View); + } + else if(aViewID == KCSXHKywdToc1ViewID && iKywdTOC1View == NULL) + { + iKywdTOC1View = CCSXHGenericView::NewL(KCSXHKywdToc1ViewID,R_KYWDTOC1LIST); + AddViewL(iKywdTOC1View); + } + else if(aViewID == KCSXHKywdToc2ViewID && iKywdTOC2View == NULL) + { + iKywdTOC2View = CCSXHGenericView::NewL(KCSXHKywdToc2ViewID,R_KYWDTOC2LIST); + AddViewL(iKywdTOC2View); + } + else if(aViewID == KCSXHLegacyTopicViewID && iLegacyTopicView == NULL) + { + iLegacyTopicView = CCSXHLegacyTopicView::NewL(KCSXHLegacyTopicViewID, + R_TOPICTEXTLIST,ClientRect()); + AddViewL(iLegacyTopicView); + } + + else if(aViewID == KCSXHContextHtmlTopicViewID ) + { + if(!iHtmlTopicView) + { + iHtmlTopicView = CCSXHHtmlTopicView::NewL(KCSXHHtmlTopicViewID, + R_CSHELP_HTMLTOPICFORCONTEXT, + ClientRect()); + AddViewL(iHtmlTopicView); + } + else + { + //View is already created update the softkeys to Options and Close + iHtmlTopicView->SetViewTypeL(CCSXHHtmlTopicView::EContextHtmlView); + } + } + else if(aViewID == KCSXHHtmlTopicViewID ) + { + if(!iHtmlTopicView) + { + iHtmlTopicView = CCSXHHtmlTopicView::NewL(KCSXHHtmlTopicViewID, + R_CSHELP_HTMLTOPICVIEW, + ClientRect()); + AddViewL(iHtmlTopicView); + } + else + { + //View is already created update the softkeys to Options and Back + iHtmlTopicView->SetViewTypeL(CCSXHHtmlTopicView::EHtmlView); + } + } + } +// -------------------------------------------------------------------------- +// Activates the view corresponding to the topic to be displayed +// It also sets for recreating the container dending on the view to be +// activated, +// 1) Search Pane in Search Result View will be cleared if user +// opens the Search View. +// 2)Search Pane in Application Topics view will be cleared, if user opens +// a)Help Contents View +// b)Search View +// c)Context Senisitive view +// -------------------------------------------------------------------------- +void CCSXHAppUi::ActivateDisplayTopicViewL() + { + CCSXHDocument* doc = static_cast(Document()); + TUid viewId = doc->GetDisplayTopic()->GetViewID(); + InitDisplayTopicViewL(viewId); + + if(viewId == KCSXHKywdToc1ViewID ) + { + if(iKywdTOC2View) + iKywdTOC2View->ResetContainer(); + if(iTOC2View) + iTOC2View->ResetContainer(); + } + else if(viewId == KCSXHToc1ViewID || + viewId == KCSXHContextHtmlTopicViewID || + viewId == KCSXHContextLegacyTopicViewID ) + { + if(iTOC2View) + iTOC2View->ResetContainer(); + } +/* else if(viewId == KCSXHKywdToc1ViewID) + { + doc->InitProgressBarL(); + } +*/ + if(viewId == KCSXHContextHtmlTopicViewID) + viewId = KCSXHHtmlTopicViewID; + ActivateLocalViewL(viewId); + } +void CCSXHAppUi::HandleForegroundEventL(TBool aForeground) + { + // Call Base class method + CAknAppUi::HandleForegroundEventL(aForeground); + + if(!aForeground && iView && + iView->Id() != KCSXHHtmlTopicViewID + && iHtmlTopicView) + { + //put NUll first in for bug ESXU-7JA9NS + iHtmlTopicView = NULL; + // We have lost the focus + //Check if the HTML view is the last active view. If it not delete it + //to free the memory used by the browser control + RemoveView(KCSXHHtmlTopicViewID); + //delete iHtmlTopicView; + } + } +// -------------------------------------------------------------------------- +// It sets a flag in the View for recreating the container +// -------------------------------------------------------------------------- +void CCSXHAppUi::ResetTOC2ViewContainer() + { + if(iTOC2View) + iTOC2View->ResetContainer(); + } +// -------------------------------------------------------------------------- +// Context sensitive help launch handling. Help is not running +// -------------------------------------------------------------------------- +TBool CCSXHAppUi::ProcessCommandParametersL(TApaCommand aCommand, + TFileName& /* aDocumentName */, + const TDesC8& aTail) + { + if (aCommand == EApaCommandOpen) + { // when another app launches the help app + HandleContextSensitiveLaunchL(aTail); + } + return EFalse; + } + +// -------------------------------------------------------------------------- +// Context sensitive help launch handling. Help is already running +// -------------------------------------------------------------------------- +MCoeMessageObserver::TMessageResponse CCSXHAppUi::HandleMessageL( + TUint32 aClientHandleOfTargetWindowGroup, + TUid aMessageUid, + const TDesC8& aMessageParameters) + { + if (aMessageUid == KHlpAppWsMsg) + { + HandleContextSensitiveLaunchL(aMessageParameters); + return EMessageHandled; + } + return CAknViewAppUi::HandleMessageL(aClientHandleOfTargetWindowGroup, + aMessageUid, + aMessageParameters); + } + +// -------------------------------------------------------------------------- +// Opens the context topic. If no topic is avbl then toc1 view is activated +// -------------------------------------------------------------------------- +void CCSXHAppUi::HandleContextSensitiveLaunchL(const TDesC8& aContext ) + { + CCSXHDocument* doc = static_cast(Document()); + + if(doc->SetContextTopicAsDisplayTopicL(aContext)) + { + TRAPD(res,ActivateDisplayTopicViewL()); + if(res == KErrNone) + return; + } + + //No topic avaliable, activate the TOC1 View & Pop a message + doc->SetDisplayTopic(doc->GetHelpDataBase()->GetMainTopics()); + ActivateDisplayTopicViewL(); + + HBufC* ErrorMessage = iCoeEnv->AllocReadResourceLC(R_TYPE_NO_HELP_TOPICS); + CAknGlobalNote* note = CAknGlobalNote::NewLC(); + note->ShowNoteL(EAknGlobalInformationNote, *ErrorMessage); + + CleanupStack::PopAndDestroy(note); + CleanupStack::PopAndDestroy(ErrorMessage); + } + +CCSXHAppUi* CCSXHAppUi::GetInstance() + { + return iInstance; + } +RWsSession& CCSXHAppUi::GetWsSession() + { + return iInstance->iCoeEnv->WsSession(); + } +CCoeEnv* CCSXHAppUi::GetCoeEnv() + { + return iInstance->iCoeEnv; + } + +// -------------------------------------------------------------------------- +// Launches an application based on the Application UID and a View ID +// -------------------------------------------------------------------------- +void CCSXHAppUi::AppLaunchL(TInt32& aAppId,TInt32& aVId) + { + //Convert from TInt to TUid + TUid KtestAppUid( TUid::Uid( aAppId ) ); + TUid KtestViewUid( TUid::Uid( aVId ) ); + + //Launch Application + TVwsViewId AppLaunch(KtestAppUid,KtestViewUid); + ActivateViewL(AppLaunch); + } + +// -------------------------------------------------------------------------- +// Launches an application based on the Application UID and a View ID +// -------------------------------------------------------------------------- +void CCSXHAppUi::AppLaunchL(TInt32& aAppId,TInt32& aVId, + TInt32& aMsgId, + const TBuf& aParams) + { + //Convert from TInt to TUid + TUid AplnUid( TUid::Uid( aAppId ) ); + TUid AplnViewUid( TUid::Uid( aVId ) ); + TUid MsgUid( TUid::Uid( aMsgId ) ); + + //Launch Application + TVwsViewId AppLaunch(AplnUid,AplnViewUid); + + HBufC8* params = CnvUtfConverter::ConvertFromUnicodeToUtf8L(aParams); + CleanupStack::PushL(params); + ActivateViewL(AppLaunch,MsgUid,*params); + CleanupStack::PopAndDestroy(params); + } + +void CCSXHAppUi::PropagateResourceChange(TInt aType) + { + iTOC1View->ResourceChangeHdl(aType); + if(iKywdTOC1View) + iKywdTOC1View->ResourceChangeHdl(aType); + if(iKywdTOC2View) + iKywdTOC2View->ResourceChangeHdl(aType); + if(iTOC2View) + iTOC2View->ResourceChangeHdl(aType); + if(iHtmlTopicView) + iHtmlTopicView->ResourceChangeHdl(aType); + if(iLegacyTopicView) + iLegacyTopicView->ResourceChangeHdl(aType); + if(iLegacyContextTopicView) + iLegacyContextTopicView->ResourceChangeHdl(aType); + } + +void CCSXHAppUi::RuntimeUpdateIndex() + { + CAknNoteDialog* dlg = new ( ELeave ) CAknNoteDialog(); + dlg->SetTimeout( CAknNoteDialog::EShortTimeout ); + dlg->SetTone( CAknNoteDialog::ENoTone ); + dlg->ExecuteLD( R_CSHELP_INSTALL_UNINSTALL_NOTE ); + } + + +#ifdef FF_HELP_TUTORIAL_MERGE +// -------------------------------------------------------------------------- +// CCSXHAppUi::NewParamListLC +// Create paramlist for provider. +// -------------------------------------------------------------------------- +CAiwGenericParamList* CCSXHAppUi::NewParamListLC( + const TCoeHelpContext& aContext) + { + TAiwVariant variant1; + TAiwVariant variant2; + variant1.Set(aContext.iMajor); + TAiwGenericParam param1(EGenericParamHelpItem, variant1); + variant2.Set(aContext.iContext); + TAiwGenericParam param2(EGenericParamHelpItem, variant2); + CAiwGenericParamList* list = CAiwGenericParamList::NewLC(); + list->AppendL(param1); + list->AppendL(param2); + return list; + } + +// -------------------------------------------------------------------------- +// CCSXHAppUi::LoadTutorialService +// Load service handler and attach interest for using tutorial service command. +// -------------------------------------------------------------------------- +void CCSXHAppUi::LoadTutorialService() + { + iServiceHandler = CAiwServiceHandler::NewL(); + + // Create AIW interest + RCriteriaArray interest; + + iServiceHandler->AttachL(R_AIWTUTORIALAPP_INTEREST); + + //Tutorial AIW provider exists or not + iTutorialExists = EFalse; + iServiceHandler->GetInterest(interest); + if(interest.Count() > 0) + { + FLOGF(_L("CCSXHAppUi::LoadTutorialService() - interest.Count()=%d"), interest.Count()); + CAiwCriteriaItem* testCriteria = interest[0]; + if(iServiceHandler->NbrOfProviders(interest[0]) > 0) + { + FLOGF(_L("CCSXHAppUi::LoadTutorialService() - NbrOfProviders()=%d"), iServiceHandler->NbrOfProviders(interest[0])); + iTutorialExists = ETrue; + } + } + interest.Close(); + } + +// -------------------------------------------------------------------------- +// CCSXHAppUi::CallTutorialAiwProviderL +// If tutorial exists,call play presentation command. +// -------------------------------------------------------------------------- +void CCSXHAppUi::CallTutorialAiwProviderL() + { + CAiwGenericParamList* inlist = NewParamListLC( iTCoeHelpContext ); + + iServiceHandler->ExecuteServiceCmdL( KPlayPresentation, + *inlist, + iServiceHandler->OutParamListL() ); + CleanupStack::PopAndDestroy(); //inlist + } + +// -------------------------------------------------------------------------- +// CCSXHAppUi::IsApplicationPresentInTutorialL +// If tutorial exists,identify the presentation needed exist or not. +// -------------------------------------------------------------------------- +TBool CCSXHAppUi::IsApplicationPresentInTutorialL() + { + TBool Result = EFalse; + //__ASSERT_DEBUG( iTutorialExists, User::Panic(_L("TutAiwHlp"),-1)); + if(iTutorialExists ) + { + CAiwGenericParamList* inlist = NewParamListLC(iTCoeHelpContext) ; + + CAiwGenericParamList* outlist = CAiwGenericParamList::NewLC(); + + TUid maj = iTCoeHelpContext.iMajor; + TCoeContextName con = iTCoeHelpContext.iContext; + + FLOGF(_L("CCSXHAppUi::IsApplicationPresentInTutorialL() - 0x%08x %S"),maj,&con); + + //checks if the application specific presentation exists. + //Parameter list inlist must contain AppUid which refers to presentation. + // The other parameters are not used. + //The result is returned in outlist parameter list. + //First parameter in the outlist contains ETrue if there is presentation + //available and EFalse if there is not. + iServiceHandler->ExecuteServiceCmdL( KPresentationExists, + *inlist, *outlist ); + + FLOG(_L("CCSXHAppUi::IsApplicationPresentInTutorialL() - cp-1")); + + //__ASSERT_DEBUG( outlist->Count() > 0, User::Panic(_L("TutAiwHlpO"),-1)); + __ASSERT_DEBUG(outlist->Count(), User::Panic(_L("outlist"),0)); + + FLOG(_L("CCSXHAppUi::IsApplicationPresentInTutorialL() - cp-2")); + if( outlist->Count() > 0) + { + FLOG(_L("CCSXHAppUi::IsApplicationPresentInTutorialL() - cp-2.4")); + TAiwGenericParam param = (*outlist)[0]; + TAiwVariant variant = param.Value(); + TInt32 val(0); + + if(variant.Get(val) && val) + { + Result = ETrue; + } + FLOG(_L("CCSXHAppUi::IsApplicationPresentInTutorialL() - cp-3")); + __ASSERT_DEBUG( variant.Get(val) && val, User::Panic(_L("TutAiwHlpV"),-1)); + } + CleanupStack::PopAndDestroy(); //outlist + CleanupStack::PopAndDestroy(); //inlist + } + return Result; + } + +// -------------------------------------------------------------------------- +// CCSXHAppUi::SetHelpContext +// If tutorial exists,identify the presentation needed exist or not. +// -------------------------------------------------------------------------- +void CCSXHAppUi::SetHelpContext(TCoeHelpContext aTCoeHelpContext) + { + iTCoeHelpContext = aTCoeHelpContext; + } +#endif // FF_HELP_TUTORIAL_MERGE diff -r 000000000000 -r 1f04cf54edd8 csxhelp/src/CSXHApplication.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/src/CSXHApplication.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,37 @@ +/* +* 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 "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: CCSXHApplication class definition +* +*/ + + +#include "CSXHDocument.h" +#include "CSXHApplication.h" + +// UID for the application, this should correspond to the uid defined in the mmp file +static const TUid KUidCSXHApp = {0x10005234}; + +CApaDocument* CCSXHApplication::CreateDocumentL() + { + // Create an CSXH document, and return a pointer to it + CApaDocument* document = CCSXHDocument::NewL(*this); + return document; + } + +TUid CCSXHApplication::AppDllUid() const + { + // Return the UID for the CSXH application + return KUidCSXHApp; + } + diff -r 000000000000 -r 1f04cf54edd8 csxhelp/src/CSXHDocument.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/src/CSXHDocument.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,178 @@ +/* +* 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 "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: CCSXHDocument class definition +* +*/ + + +#include "CSXHDocument.h" +#include "CSXHAppUi.h" + +#include "CSXHHelpDataBase.h" +#include "CSXHKywdTOC1.h" +#include "CSXHViewIDs.h" +#include + +#include +#include + + +// Standard Symbian OS construction sequence +CCSXHDocument* CCSXHDocument::NewL(CEikApplication& aApp) + { + CCSXHDocument* self = NewLC(aApp); + CleanupStack::Pop(self); + return self; + } + +CCSXHDocument* CCSXHDocument::NewLC(CEikApplication& aApp) + { + CCSXHDocument* self = new (ELeave) CCSXHDocument(aApp); + CleanupStack::PushL(self); + return self; + } + +CCSXHDocument::CCSXHDocument(CEikApplication& aApp) : CAknDocument(aApp) + {// no implementation required + } + +CCSXHDocument::~CCSXHDocument() + { + delete iHelpDataBase; + } + +CEikAppUi* CCSXHDocument::CreateAppUiL() + { + // Create the application user interface, and return a pointer to it, + // the framework takes ownership of this object. ConstructL of the AppUi + // object will be called by the Application Framework + iHelpAppUi = new (ELeave) CCSXHAppUi; + + iHelpDataBase = CCSXHHelpDataBase::NewL(CCSXHAppUi::GetCoeEnv(),AppCaption()); + iDisplayTopic = iHelpDataBase->GetMainTopics(); + iPrevTopic = NULL; + + iProgressDialog = NULL; + + return iHelpAppUi; + } +// -------------------------------------------------------------------------- +// Sets the topic to be displayed next +// -------------------------------------------------------------------------- +void CCSXHDocument::SetDisplayTopic(CCSXHHelpContentBase* aDisplayTopic) + { + iDisplayTopic = aDisplayTopic; + iPrevTopic = NULL; + + if(iDisplayTopic == NULL) + iDisplayTopic = iHelpDataBase->GetMainTopics(); + } +// -------------------------------------------------------------------------- +// Sets the topic to be displayed next and the previous topic +// The previous topic is needed to highlight the correct item in the listbox +// -------------------------------------------------------------------------- +void CCSXHDocument::SetDisplayAndPrevTopic(CCSXHHelpContentBase* aDisplayTopic) + { + iPrevTopic = iDisplayTopic; + iDisplayTopic = aDisplayTopic; + + if(iDisplayTopic == NULL) + iDisplayTopic = iHelpDataBase->GetMainTopics(); + + } + +void CCSXHDocument::SendMessageToAppUiL(TInt aCommand) + { + iHelpAppUi->ProcessCommandL(aCommand); + } + +// -------------------------------------------------------------------------- +// Sets the context topic as the next topic to be displayed +// -------------------------------------------------------------------------- +TBool CCSXHDocument::SetContextTopicAsDisplayTopicL(const TDesC8& aContextMessage) + { + CCSXHHelpContentBase* topic = iHelpDataBase->GetContextTopic(aContextMessage); + if(topic) + { + SetDisplayTopic(topic); + return ETrue; + } + return EFalse; + } +CCSXHHelpContentBase* CCSXHDocument::GetHtmlTopicForUrlL(const TDesC& url) + { + return iHelpDataBase->GetHtmlTopicForUrlL(url); + } + +void CCSXHDocument::InitProgressBarL() + { + + iProgressDialog = new(ELeave)CAknProgressDialog( + REINTERPRET_CAST(CEikDialog**,&iProgressDialog)); + iProgressDialog->PrepareLC(R_CSHELP_SEARCH_PROGRESS_NOTE); + + CEikProgressInfo* pBar = iProgressDialog->GetProgressInfoL(); + iTotalKeywordsInResultView = iHelpDataBase->InitGenerateKeywordTOC2ListL( + STATIC_CAST(CCSXHKywdTOC1*,iDisplayTopic)); + pBar->SetFinalValue(iTotalKeywordsInResultView); + iIdle = CIdle::NewL(CActive::EPriorityLow); + TCallBack callback(CallBack, this); + iIdle->Start(callback); + iProgressDialog->RunDlgLD(CAknNoteDialog::ENoTone); + } + +void CCSXHDocument::FreeProgressBarL() + { + delete iIdle; + iIdle = NULL; + if(iProgressDialog) + { + iProgressDialog->ProcessFinishedL(); + iProgressDialog = NULL; + } + } + +TInt CCSXHDocument::CallBack(TAny* aThis) + { + TInt err(KErrNone); + TBool res(EFalse); + CCSXHDocument* self = STATIC_CAST(CCSXHDocument*, aThis); + TRAP( err, res = self->DoCallBackL() ); + if(err != KErrNone ) + { + TRAP_IGNORE(self->FreeProgressBarL()); + } + return res; + } +TBool CCSXHDocument::DoCallBackL() + { + if(!iProgressDialog) + { + delete iIdle; + iIdle = NULL; + return EFalse; + } + + CEikProgressInfo* pBar= iProgressDialog->GetProgressInfoL(); + pBar->SetAndDraw(iHelpDataBase->GetKeywordSearchCount()); + + if(iHelpDataBase->GetKeywordSearchCount() >= iTotalKeywordsInResultView) + { + FreeProgressBarL(); + return EFalse; + } + + return ETrue; + } + diff -r 000000000000 -r 1f04cf54edd8 csxhelp/src/CSXHGenericContainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/src/CSXHGenericContainer.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,383 @@ +/* +* 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 "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: CCSXHGenericContainer class definition +* +*/ + + +#include "CSXHGenericContainer.h" +#include "CSXHGenericView.h" +#include "CSXHDocument.h" +#include "CSXHAppUi.h" +#include "CSXHHelpDataBase.h" +#include "CSXHGenericTOC1.h" +#include "CSXHGenericTOC2.h" + +#ifdef FF_HELP_TUTORIAL_MERGE +#include "CSXHHtmlTOC2.h" +#endif + +#include "CsHelp.hrh" +#include "csxhconstants.h" + +#include "CSXHViewIDs.h" +#include +#include +#include +#include + +const TInt KFindNameLength = 40; +const TInt KComponentCount = 2; + +#ifdef FF_HELP_TUTORIAL_MERGE +CCSXHGenericContainer* CCSXHGenericContainer::NewL(const TRect& aRect,CCSXHDocument& aDocument,CCSXHGenericView* aView) + { + CCSXHGenericContainer* self = CCSXHGenericContainer::NewLC(aRect,aDocument,aView); + CleanupStack::Pop(self); + return self; + } +#else +CCSXHGenericContainer* CCSXHGenericContainer::NewL(const TRect& aRect,CCSXHDocument& aDocument) + { + CCSXHGenericContainer* self = CCSXHGenericContainer::NewLC(aRect,aDocument); + CleanupStack::Pop(self); + return self; + } +#endif + +#ifdef FF_HELP_TUTORIAL_MERGE +CCSXHGenericContainer* CCSXHGenericContainer::NewLC(const TRect& aRect,CCSXHDocument& aDocument,CCSXHGenericView* aView) + { + CCSXHGenericContainer* self = new(ELeave) CCSXHGenericContainer(aDocument,aView); + CleanupStack::PushL(self); + self->ConstructL(aRect); + return self; + } +#else +CCSXHGenericContainer* CCSXHGenericContainer::NewLC(const TRect& aRect,CCSXHDocument& aDocument) + { + CCSXHGenericContainer* self = new(ELeave) CCSXHGenericContainer(aDocument); + CleanupStack::PushL(self); + self->ConstructL(aRect); + return self; + } +#endif + +#ifdef FF_HELP_TUTORIAL_MERGE +CCSXHGenericContainer::CCSXHGenericContainer(CCSXHDocument& aDocument,CCSXHGenericView* aView) : +iDocument(aDocument),iView(aView) +#else +CCSXHGenericContainer::CCSXHGenericContainer(CCSXHDocument& aDocument) : iDocument(aDocument) +#endif + {//No implementation required + } + +CCSXHGenericContainer::~CCSXHGenericContainer() + { + delete iListBox; + delete iFindPane; + } + +void CCSXHGenericContainer::ConstructL(const TRect& aRect) + { + CreateWindowL(); + + CreateAndPopulateListL(); + + iListBox->SetListBoxObserver(this); + SetRect(aRect); + ActivateL(); + } +// -------------------------------------------------------------------------- +// Does the following +// 1) Creates and populates the listbox +// 2) Highlights an item in the listbox +// 3) Check for MSK +// -------------------------------------------------------------------------- +void CCSXHGenericContainer::CreateAndPopulateListL() + { + // First phase construction + iListBox = new (ELeave) CAknSingleStyleListBox; + iListBox->SetContainerWindowL(*this); + + iListBox->ConstructL(this, 0); + iListBox->CreateScrollBarFrameL(ETrue); + iListBox->ScrollBarFrame()->SetScrollBarVisibilityL( + CEikScrollBarFrame::EOff, + CEikScrollBarFrame::EAuto); + iListBox->ItemDrawer()->ColumnData()->EnableMarqueeL(ETrue); + + CTextListBoxModel* model = iListBox->Model(); // not taking ownership + model->SetOwnershipType (ELbmOwnsItemArray); + CDesCArray* testArray = STATIC_CAST(CDesCArray*, model->ItemTextArray()); + + CCSXHGenericTOC1* displayTopic = STATIC_CAST(CCSXHGenericTOC1*,iDocument.GetDisplayTopic()); + + displayTopic->FillChildDataL(testArray); + + //Find panel Begin + CAknSearchField::TSearchFieldStyle flags(CAknSearchField::ESearch); + iFindPane = CAknSearchField::NewL(*this, flags, + NULL,KFindNameLength); + + STATIC_CAST(CAknFilteredTextListBoxModel*, iListBox->Model()) + ->CreateFilterL(iListBox, iFindPane); + + STATIC_CAST(CAknFilteredTextListBoxModel*, iListBox->Model()) + ->Filter()->HandleOfferkeyEventL(); + //Corrections to TSW Error: KMAI-6WNACA with New UI CR: EVIA-6XAJ46 + if (FeatureManager::FeatureSupported(KFeatureIdJapanese) && + (User::Language() == ELangJapanese)) + { + iFindPane->Editor().SetAknEditorInputMode(EAknEditorHiraganaKanjiInputMode); + } + else + { + iFindPane->Editor().SetAknEditorCurrentInputMode(EAknEditorTextInputMode); + } + + HightLightItemL(); + } + +void CCSXHGenericContainer::HandleListBoxEventL(CEikListBox* /*aListBox*/, TListBoxEvent aListBoxEvent) + { + switch ( aListBoxEvent ) + { + case MEikListBoxObserver::EEventEnterKeyPressed: + case MEikListBoxObserver::EEventItemSingleClicked: +#ifdef FF_HELP_TUTORIAL_MERGE + if(IsShowTutorialItemSelectedL()) + { + CCSXHAppUi::GetInstance()->CallTutorialAiwProviderL(); + } + else + +#endif + { + iDocument.SendMessageToAppUiL( ECSXHOpenItemPropagated ); + } + + break; + default: + break;// do nothing with the rest of the events + } + } + +void CCSXHGenericContainer::SizeChanged() + { + iListBox->SetRect(Rect()); + AknFind::HandleFixedFindSizeChanged(this, iListBox, iFindPane); + } + +void CCSXHGenericContainer::FocusChanged(TDrawNow aDrawNow) + { + if (iListBox) + { + iListBox->SetFocus(IsFocused(), aDrawNow); + } + if ( iFindPane ) + { + iFindPane->SetFocus( IsFocused(), aDrawNow ); + } + } + +TInt CCSXHGenericContainer::CountComponentControls() const + { + return KComponentCount; + } + +CCoeControl* CCSXHGenericContainer::ComponentControl(TInt aIndex) const + { + switch (aIndex) + { + case 0: + return iListBox; + case 1: + return iFindPane; + default: + return NULL; + } + } + +void CCSXHGenericContainer::Draw(const TRect& aRect) const + { + CWindowGc& gc = SystemGc(); + gc.Clear(aRect); + } + +TKeyResponse CCSXHGenericContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType) + { + TKeyResponse result(EKeyWasNotConsumed); + + TBool needRefresh; + result = AknFind::HandleFindOfferKeyEventL(aKeyEvent, aType, + this, iListBox, iFindPane, EFalse, needRefresh); + CheckForMSK(); + if (result == EKeyWasNotConsumed) + { + result = iListBox->OfferKeyEventL (aKeyEvent, aType); + } + return result; + } + +void CCSXHGenericContainer::HandleResourceChange(TInt aType) + { + CCSXHAppUi::GetInstance()->PropagateResourceChange(aType); + + if (KAknSplitInputEnabled == aType || KAknSplitInputDisabled == aType) + { + // Bug fixing, SetFocus can't be called with these aType, it will lead to infinite loop in fep. + return; + } + + if ( IsFocused() ) + { + SetFocus( IsFocused(), EDrawNow ); + } + + } + +void CCSXHGenericContainer::HandleResourceChangeImpl(TInt aType) + { + if (aType == KEikDynamicLayoutVariantSwitch) + { + iListBox->HandleResourceChange(aType); + TRect mainRect; + SizeChanged(); + TRect statusPaneRect; + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane,mainRect); + SetRect(mainRect); + DrawNow(); + } + else + { + CCoeControl::HandleResourceChange(aType); + } + } +// -------------------------------------------------------------------------- +// Sets the next topic to be displayed based on the selected item +// -------------------------------------------------------------------------- +void CCSXHGenericContainer::SetDisplayTopicL() + { + TInt index = iListBox->CurrentItemIndex(); + if(KErrNotFound == index) + return; + + TBuf selectedTOC2 = iListBox->Model()->ItemText(index); + selectedTOC2 = selectedTOC2.Mid(1); + + CCSXHGenericTOC1* displayTopic = STATIC_CAST(CCSXHGenericTOC1*,iDocument.GetDisplayTopic()); + if( displayTopic->GetChildL(selectedTOC2) ) + { + iDocument.SetDisplayAndPrevTopic(displayTopic->GetChildL(selectedTOC2)); + } + } + +TInt CCSXHGenericContainer::GetNumberOfListItems() + { + return iListBox->Model()->NumberOfItems(); + } + +void CCSXHGenericContainer::SetCurrentView(CCSXHGenericView* aView) + { + iView = aView; + } + +void CCSXHGenericContainer::HightLightItemL() + { + CCSXHHelpContentBase* prevTopic = iDocument.GetPrevTopic(); + if(!prevTopic) + return; + + TInt visibleItemcount = GetNumberOfListItems(); + for (TInt index = 0; index < visibleItemcount ; ++index ) + { + TBuf txt = iListBox->Model()->ItemText(index); + txt = txt.Mid(1);//remove the '/t' + if(txt.Compare(prevTopic->GetName()) == 0) + { + if(iListBox->CurrentItemIndex() != index) + iListBox->SetCurrentItemIndex(index); + return; + } + } + } + +void CCSXHGenericContainer::CheckForMSK() + { +#ifndef __SERIES60_30__ + if(AknLayoutUtils::MSKEnabled()) + { + if(iListBox->Model()->NumberOfItems()) + { + iView->SetMiddleSoftKey(ETrue); + } + else + { + iView->SetMiddleSoftKey(EFalse); + } + } +#endif + } + +#ifdef FF_HELP_TUTORIAL_MERGE +// -------------------------------------------------------------------------- +// CCSXHAppUi::IsShowTutorialItemSelectedL +// If the selected item is a tutorial item. +// -------------------------------------------------------------------------- +TBool CCSXHGenericContainer::IsShowTutorialItemSelectedL() + { + TBool bShowTutorial = EFalse; + //TODO: + // if keyword page supported tutorial, the comments should be opened + if( 0 != GetNumberOfListItems /*&& KCSXHKywdToc2ViewID != iView->Id() */) + { + TInt index = iListBox->CurrentItemIndex(); + if(KErrNotFound == index) + return bShowTutorial; + //Get Next View + TBuf selectedTOC2 = iListBox->Model()->ItemText(index); + + selectedTOC2 = selectedTOC2.Mid(1); + CCSXHGenericTOC1* displayTopic = STATIC_CAST(CCSXHGenericTOC1*, + iDocument.GetDisplayTopic()); + TUid NextViewId = displayTopic->GetChildL(selectedTOC2)->GetViewID(); + + //Check Tutorial is present for Application topic [TOC2] + if(NextViewId == KCSXHHtmlTopicViewID) + { + CCSXHHtmlTOC2* HTMLTOC2Ptr = STATIC_CAST(CCSXHHtmlTOC2*, + displayTopic->GetChildL(selectedTOC2)); + TFileName filename; + HTMLTOC2Ptr->GetHtmlUrlL( filename ); + if( KErrNotFound != filename.Find( KTutorialFileExtn )) + { + bShowTutorial = ETrue; + TCoeHelpContext helpContext; + HTMLTOC2Ptr->GetHelpContext(helpContext); + CCSXHAppUi::GetInstance()->SetHelpContext( helpContext ); + } + } + } + return bShowTutorial; + } + +#endif // FF_HELP_TUTORIAL_MERGE + + +void CCSXHGenericContainer::MakeVisible(TBool aVisible) + { + CCoeControl::MakeVisible(aVisible); + iListBox->ScrollBarFrame()->ComponentControl(0)->MakeVisible(aVisible); + } diff -r 000000000000 -r 1f04cf54edd8 csxhelp/src/CSXHGenericView.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/src/CSXHGenericView.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,251 @@ +/* +* 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 "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: CCSXHGenericView class definition +* +*/ + + +#include "CSXHGenericView.h" +#include "CSXHGenericContainer.h" +#include "CSXHAppUi.h" +#include "CSXHDocument.h" +#include +#include "CsHelp.hrh" + +#include "CSXHHelpContentBase.h" +#include "CSXHViewIDs.h" +#include "CSXHHelpDataBase.h" + +#include +#include +#include +#include + +#ifdef FF_HELP_TUTORIAL_MERGE + +#include +#include +#include +#include + +#endif // FF_HELP_TUTORIAL_MERGE + +CCSXHGenericView* CCSXHGenericView::NewL(const TUid& aUid, + const TInt& aFlags) + { + CCSXHGenericView* self = new(ELeave) CCSXHGenericView(aUid,aFlags); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +CCSXHGenericView::CCSXHGenericView(const TUid& aUid, const TInt& aFlags) + :iResetContainerInActivate(EFalse),iUid(aUid),iAppFlags(aFlags) + {//No Implementation required + } + +void CCSXHGenericView::ConstructL() + { + BaseConstructL(iAppFlags); + + } + +CCSXHGenericView::~CCSXHGenericView() + { + if(iContainer) + { + AppUi()->RemoveFromStack(iContainer); + delete iContainer; + } + } + +TUid CCSXHGenericView::Id() const + { + return iUid; + } + +// -------------------------------- +// Message Handler +// -------------------------------- +void CCSXHGenericView::HandleCommandL(TInt aCommand) + { + switch(aCommand) + { + case EAknSoftkeyBack: + { + CCSXHDocument* doc = static_cast(AppUi()->Document()); + if(iUid == KCSXHToc2ViewID) + doc->SetDisplayAndPrevTopic(doc->GetHelpDataBase()->GetMainTopics()); + else if(iUid == KCSXHKywdToc2ViewID) + doc->SetDisplayAndPrevTopic(doc->GetHelpDataBase()->GetKywdTopics()); + + AppUi()->HandleCommandL(ECSXHOpenItem); + } + break; + case ECSXHOpenItemPropagated: //Will be called for AppUi + iContainer->SetDisplayTopicL(); + break; + case ECSXHTOC1ListView: + { + CCSXHDocument* doc = static_cast(AppUi()->Document()); + doc->SetDisplayAndPrevTopic(doc->GetHelpDataBase()->GetMainTopics()); + AppUi()->HandleCommandL(ECSXHOpenItem); + } + break; + case ECSXHOpenItem: + case ECSXHOpenTopicText: +#ifdef FF_HELP_TUTORIAL_MERGE + + if(iContainer->IsShowTutorialItemSelectedL()) + { + if(CCSXHAppUi::GetInstance()->IsApplicationPresentInTutorialL()) + { + CCSXHAppUi::GetInstance()->CallTutorialAiwProviderL(); + } + else + { + HBufC* ErrorMessage = iCoeEnv->AllocReadResourceLC( + R_TYPE_NO_HELP_TOPICS); + CAknGlobalNote* note = CAknGlobalNote::NewLC(); + note->ShowNoteL(EAknGlobalInformationNote, *ErrorMessage); + + CleanupStack::PopAndDestroy(note); + CleanupStack::PopAndDestroy(ErrorMessage); + } + } + else + +#endif // FF_HELP_TUTORIAL_MERGE + { + iContainer->SetDisplayTopicL(); + AppUi()->HandleCommandL(aCommand); + } + break; + default: + AppUi()->HandleCommandL(aCommand); + break; + } + } +// -------------------------------------------------------------------------- +// Handler for view activation. If required the container object will be +// recreated. The recreation can be due to 1) Resetting the search pane +// 2) Changing the selection of the items in the list box 3) Repopulating the +// contents of the list box +// -------------------------------------------------------------------------- +void CCSXHGenericView::DoActivateL(const TVwsViewId& /*aPrevViewId*/,TUid,const TDesC8& ) + { + CCSXHDocument* doc = static_cast(AppUi()->Document()); + if(iResetContainerInActivate) + { + delete iContainer; + iContainer = NULL; + iResetContainerInActivate = EFalse; + } + if(!iContainer) + { + if(iUid == KCSXHKywdToc2ViewID) + doc->InitProgressBarL(); + +#ifdef FF_HELP_TUTORIAL_MERGE + iContainer = CCSXHGenericContainer::NewL(ClientRect(),*doc,this); +#else // !FF_HELP_TUTORIAL_MERGE + iContainer = CCSXHGenericContainer::NewL(ClientRect(),*doc); +#endif // FF_HELP_TUTORIAL_MERGE + + /*if(iUid == KCSXHKywdToc2ViewID) + doc->FreeProgressBarL();*/ + } + iContainer->HightLightItemL(); + iContainer->MakeVisible(ETrue); + iContainer->DrawNow(); + iContainer->SetMopParent(this); + //iContainer->SetRect(ClientRect()); + iContainer->SetCurrentView(this); + AppUi()->AddToStackL(*this, iContainer); + + if(iUid == KCSXHToc1ViewID || + iUid == KCSXHKywdToc1ViewID) + { + doc->GetHelpDataBase()->ClearAllTOC1Contents(); + doc->ClearPrevTopic(); + } + + iContainer->CheckForMSK(); + + //Set the title of the view + CEikStatusPane* sp = StatusPane(); + CAknTitlePane* title = STATIC_CAST(CAknTitlePane*, + sp->ControlL(TUid::Uid(EEikStatusPaneUidTitle))); + title->SetTextL(doc->GetDisplayTopic()->GetName()); + } + +void CCSXHGenericView::DoDeactivate() + { + if(iContainer) + { + iContainer->MakeVisible(EFalse); + AppUi()->RemoveFromStack(iContainer); + } + } + +void CCSXHGenericView::ResetContainer() + { + iResetContainerInActivate = ETrue; + } +// -------------------------------------------------------------------------- +// Dynamically changing the items in the Options Menu +// -------------------------------------------------------------------------- + +void CCSXHGenericView::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane) + { + if ( aResourceId == R_CSXH_MENU_TOPICLIST && + iContainer->GetNumberOfListItems()== 0 ) + { + aMenuPane->DeleteMenuItem(ECSXHOpenTopicText); + } + + if ( aResourceId == R_CSXH_MENU_KYWDTOC1LIST && + iContainer->GetNumberOfListItems()== 0 ) + { + aMenuPane->DeleteMenuItem(ECSXHOpenTopicText); + } + + if ( aResourceId == R_CSXH_MENU && + iContainer->GetNumberOfListItems()== 0 ) + { + aMenuPane->DeleteMenuItem(ECSXHOpenItem); + } + + if ( aResourceId == R_CSXH_MENU_KYWDTOC2LIST && + iContainer->GetNumberOfListItems()== 0 ) + { + aMenuPane->DeleteMenuItem(ECSXHOpenTopicText); + } + } +// -------------------------------------------------------------------------- +// MSK Handler Handling +// -------------------------------------------------------------------------- +void CCSXHGenericView::SetMiddleSoftKey(TBool aValue) + { + Cba()->MakeCommandVisible(ECSXHOpenTopicText,aValue); + Cba()->DrawDeferred(); + } +void CCSXHGenericView::ResourceChangeHdl(TInt aType) + { + if(iContainer) + iContainer->HandleResourceChangeImpl(aType); + } + + diff -r 000000000000 -r 1f04cf54edd8 csxhelp/src/CSXHHtmlTopicContainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/src/CSXHHtmlTopicContainer.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,591 @@ +/* +* 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 "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: CCSXHHtmlTopicContainer class definition +* +*/ + + +#include "CSXHHtmlTOC2.h" +#include "CSXHHtmlTOC1.h" +#include "CSXHDocument.h" +#include "CSXHAppUi.h" +#include "CSXHHtmlTopicView.h" +#include "CSXHViewIDs.h" +#include +#include "CsHelp.hrh" +#include "CSXHHtmlTopicContainer.h" +#include "AppLauncherForCSXH.h" +#include "csxhconstants.h" + + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +_LIT(KContentType,"text/html"); +_LIT(KCsstextToRemovePathinfo,""); + +// Standard construction sequence +CCSXHHtmlTopicContainer* CCSXHHtmlTopicContainer::NewL(const TRect& aRect,CCSXHDocument +&aDocument,CCSXHHtmlTopicView *aView) + { + CCSXHHtmlTopicContainer* self = CCSXHHtmlTopicContainer::NewLC(aRect,aDocument,aView); + CleanupStack::Pop(self); + return self; + } + +CCSXHHtmlTopicContainer* CCSXHHtmlTopicContainer::NewLC(const TRect& aRect,CCSXHDocument +&aDocument,CCSXHHtmlTopicView *aView) + { + CCSXHHtmlTopicContainer* self = new (ELeave) CCSXHHtmlTopicContainer(aDocument,aView); + CleanupStack::PushL(self); + self->ConstructL(aRect); + return self; + } + +CCSXHHtmlTopicContainer::CCSXHHtmlTopicContainer(CCSXHDocument &aDocument,CCSXHHtmlTopicView *aView) + : iTopic(NULL),iDocument(aDocument),iView(aView) + ,iAppLauncher(NULL), iLoadHtml(EFalse), iPrevPageCount(0), iBack(EFalse) + + { + // no implementation required + } + +CCSXHHtmlTopicContainer::~CCSXHHtmlTopicContainer() + { + if(iBrCtrl) + { + iBrCtrl->SetFocus(EFalse); + iBrCtrl->RemoveLoadEventObserver(this); + delete iBrCtrl; + iBrLibrary.Close(); + } + if(iAppLauncher) + { + delete iAppLauncher; + } + } + +void CCSXHHtmlTopicContainer::ConstructL(const TRect& aRect) + { + // Create a window for this application view + CreateWindowL(); + + // Set the windows size + SetRect(aRect); + if(KErrNone != iBrLibrary.Load(_L("BrowserEngine.dll"))) + { + HBufC* ErrorMessage = CCSXHAppUi::GetCoeEnv()->AllocReadResourceLC( + R_CSHELP_RETRIEVE_NO_MEMORY_TEXT); + CAknGlobalNote* note = CAknGlobalNote::NewLC(); + note->ShowNoteL(EAknGlobalInformationNote, *ErrorMessage); + CleanupStack::PopAndDestroy(note); + CleanupStack::PopAndDestroy(ErrorMessage); + iDocument.SetDisplayTopic(iDocument.GetPrevTopic()); + CCSXHAppUi::GetInstance()->HandleCommandL(ECSXHOpenItem); + User::Leave(KErrNoMemory); + } + +#ifdef __WINS__ + TLibraryFunction result = iBrLibrary.Lookup(10); +#else + TLibraryFunction result = iBrLibrary.Lookup(1); +#endif + + FuncPtr_CreateBrowserControlL fptr = (FuncPtr_CreateBrowserControlL)result; + + iBrCtrl = (*fptr)( + this,aRect, + TBrCtlDefs::ECapabilityDisplayScrollBar| + TBrCtlDefs::ECapabilityClientResolveEmbeddedURL| +#ifndef __SERIES60_30__ + TBrCtlDefs::ECapabilityCursorNavigation| + TBrCtlDefs::ECapabilityWebKitLite| +#endif + TBrCtlDefs::ECapabilityClientNotifyURL, + TBrCtlDefs::ECommandIdBase,this,this,NULL,this + ); + iBrCtrl->SetBrowserSettingL(TBrCtlDefs::ESettingsCSSFetchEnabled,1); + iBrCtrl->AddLoadEventObserverL(this); + + + SetSelectedFontSizeL(iView->GetCurrentFontSize()); + iBrCtrl->MakeVisible(ETrue); + + ActivateL(); + } + +void CCSXHHtmlTopicContainer::Draw(const TRect& /*aRect*/) const + { + CWindowGc& gc = SystemGc(); + TRect rect = Rect(); + gc.Clear(rect); + } +void CCSXHHtmlTopicContainer::SetAndLoadInitialTopicL(CCSXHHtmlTOC2* aTopic) + { + iTopic = aTopic; + TRAPD(err,LoadHtmlL()); + if( KErrNone != err ) + { + HBufC* ErrorMessage = CCSXHAppUi::GetCoeEnv()->AllocReadResourceLC( + R_CSHELP_RETRIEVE_NO_MEMORY_TEXT); + CAknGlobalNote* note = CAknGlobalNote::NewLC(); + note->ShowNoteL(EAknGlobalInformationNote, *ErrorMessage); + CleanupStack::PopAndDestroy(note); + CleanupStack::PopAndDestroy(ErrorMessage); + iDocument.SetDisplayTopic(iDocument.GetPrevTopic()); + CCSXHAppUi::GetInstance()->HandleCommandL(ECSXHOpenItem); + User::Leave(KErrNoMemory); + } + + } + +void CCSXHHtmlTopicContainer::LoadHtmlL() + { + HBufC8 *htmlBuffer = STATIC_CAST(HBufC8*,iTopic->GetTopicContentL()); + if(htmlBuffer) + { + CleanupStack::PushL(htmlBuffer); + TUid uid; + uid.iUid = KCharacterSetIdentifierIso88591; + _LIT8(KContentType,"text/html"); + TDataType dataType(KContentType()); + iTopic->GetHtmlUrlL(iUrlNoAnchors); + iBack = EFalse; + ClearHistoryL(); + iLoadHtml = ETrue; + + //RUNTIME + //if it is context sensitive launch, Add CSS content to remove + //Application launch link. + if(iView->GetViewType() == CCSXHHtmlTopicView::EContextHtmlView) + { + HBufC8* ContextHtmlbuffer = HBufC8::NewLC(htmlBuffer->Size() + 100); + TPtr8 bufferPtr = ContextHtmlbuffer->Des(); + bufferPtr.Copy(KCsstextToRemovePathinfo); + bufferPtr.Append(htmlBuffer->Des()); + iBrCtrl->LoadDataL(iUrlNoAnchors,*ContextHtmlbuffer,dataType,uid); + CleanupStack::PopAndDestroy(ContextHtmlbuffer); + } + else + { + iBrCtrl->LoadDataL(iUrlNoAnchors,*htmlBuffer,dataType,uid); + } + CleanupStack::PopAndDestroy(htmlBuffer); + } + else + { + iTopic->GetHtmlUrlL(iUrlNoAnchors); + iBrCtrl->LoadUrlL(iUrlNoAnchors); + } + CheckForMSK(); + } + +TKeyResponse CCSXHHtmlTopicContainer::OfferKeyEventL(const TKeyEvent & +aKeyEvent,TEventCode aType ) + { + TKeyResponse result(EKeyWasNotConsumed); + + if ((aKeyEvent.iCode == EKeyEnter )&& (aType == EEventKey) + && (IsHyperLinkFocused())) + { + HandleCommandOpenHyperLinkL(); + CheckForMSK(); + return EKeyWasConsumed; + } + + if(iBrCtrl) + { + result = iBrCtrl->OfferKeyEventL(aKeyEvent, aType); + CheckForMSK(); + } + return result; + } + +TInt CCSXHHtmlTopicContainer::CountComponentControls() const + { + return 1; + } + +CCoeControl* CCSXHHtmlTopicContainer::ComponentControl(TInt aIndex) const + { + switch (aIndex) + { + case 0: + return iBrCtrl; + default: + return NULL; + } + } + +void CCSXHHtmlTopicContainer::HandleResourceChange(TInt aType) + { + CCSXHAppUi::GetInstance()->PropagateResourceChange(aType); + } +void CCSXHHtmlTopicContainer::HandleResourceChangeImpl(TInt aType) + { + if (aType == KEikDynamicLayoutVariantSwitch) + { + iBrCtrl->HandleResourceChange(aType); + TRect mainRect; + TRect statusPaneRect; + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane,mainRect); + SetRect(mainRect); + if(iBrCtrl) +#ifndef __SERIES60_30__ + iBrCtrl->SetRect(Rect()); +#else + iBrCtrl->SetRect(mainRect); +#endif + DrawNow(); + } + else + { + CCoeControl::HandleResourceChange(aType); + } + } + +void CCSXHHtmlTopicContainer::SizeChanged() + { +#ifndef __SERIES60_30__ + if(iBrCtrl) + iBrCtrl->SetRect(Rect()); +#endif + } + +void CCSXHHtmlTopicContainer::HandleCommandBackL() + { + iBrCtrl->HandleCommandL(TBrCtlDefs::ECommandIdBase + TBrCtlDefs::ECommandBack); + } + + +TBool CCSXHHtmlTopicContainer::IsPrevPageAvbl() + { + if (iPrevPageCount > 0) + { + return ETrue; + } + else + { + return EFalse; + } + } + + + +void CCSXHHtmlTopicContainer::ClearHistoryL() + { + iBrCtrl->HandleCommandL(TBrCtlDefs::ECommandIdBase + TBrCtlDefs::ECommandClearHistory); + iPrevPageCount = 0; + } + +TBool CCSXHHtmlTopicContainer::ResolveEmbeddedLinkL(const TDesC& /*aEmbeddedUrl*/, + const TDesC& /*aCurrentUrl*/, + TBrCtlLoadContentType /*aLoadContentType*/, + MBrCtlLinkContent& /*aEmbeddedLinkContent*/) + { + return EFalse; + } +// -------------------------------------------------------------------------- +// Handling for +// 1) Compressed HTML content +// 2) Application Launch Links +// 3) External Hyperlinks +// -------------------------------------------------------------------------- +TBool CCSXHHtmlTopicContainer::ResolveLinkL(const TDesC& aUrl, const TDesC& aCurrentUrl, + MBrCtlLinkContent& aBrCtlLinkContent) + { +#ifdef FF_HELP_TUTORIAL_MERGE + if( KErrNotFound != aUrl.Find( KTutorialFileExtn )) + { + iView->LaunchTutorial(); + return ETrue; + } +#endif // FF_HELP_TUTORIAL_MERGE + if(NULL == iAppLauncher) + { + iAppLauncher = AppLauncherForCSXH::NewL(); + } + //Handling for application launch. + if(iAppLauncher->LaunchAppL(aUrl,aCurrentUrl)) + return ETrue;//Link is resolved locally. + + if(CheckForExternalLinkL(aUrl)) + return ETrue;//Link is resolved locally. + + //Remove the Anchor, if any + TInt DotPos = aUrl.LocateReverseF('.'); + TInt HashPos = aUrl.LocateReverseF('#'); + if(KErrNotFound != HashPos && HashPos > DotPos ) + { + //Direct assignment does not work + iUrlNoAnchors.Copy(KEmptyString); + iUrlNoAnchors.Append(aUrl.Mid(0,HashPos)); + } + else + { + //Direct assignment does not work + iUrlNoAnchors.Copy(KEmptyString); + iUrlNoAnchors.Append(aUrl); + } + + HBufC8 *htmlBuffer = CCSXHHtmlTOC2::GetContentsFromUrlL(iUrlNoAnchors,CCSXHAppUi::GetCoeEnv(),iFeatureControl); + if(htmlBuffer) + { + TPtrC p(NULL,0); + aBrCtlLinkContent.HandleResolveComplete(KContentType,p,htmlBuffer); + delete htmlBuffer; + iLoadHtml = EFalse; + if (iBack) + { + iPrevPageCount--; + iBack = EFalse; + } + else + { + iPrevPageCount++; + } + + return ETrue;//Link is resolved locally. + } + + return EFalse; + } + +void CCSXHHtmlTopicContainer::CancelFetchL() + { + if (iBrCtrl) + { + iBrCtrl->HandleCommandL( + (TInt)TBrCtlDefs::ECommandCancelFetch + (TInt)TBrCtlDefs::ECommandIdBase ); + } + } + +void CCSXHHtmlTopicContainer::CancelAll() + { + + } + + +void CCSXHHtmlTopicContainer::HandleResolveComplete(const TDesC& /*aContentType*/, + const TDesC& /*aCharset*/, + const HBufC8* /*aContentBuf*/) + { + + } + +void CCSXHHtmlTopicContainer::HandleResolveError(TInt /*aError*/) + { + + } +void CCSXHHtmlTopicContainer::RefreshL(CCSXHHtmlTOC2 *aTopic) + { + SetAndLoadInitialTopicL(aTopic); + } + +// -------------------------------------------------------------------------- +// This callback function is used for the following +// 1) When an HTML page is loaded, this callback function will be called. If +// this callback is invoked for hyperlink navigation, then the display topic +// has to be updated. For example, the Application Topics option menu is +// dependent on the dipslay topic. +// 2) Updation of the softkey from Options-Close to Options-Back (& Vice-Versa) +// in the context view as a result of hyperlink traveral +// -------------------------------------------------------------------------- +void CCSXHHtmlTopicContainer::HandleBrowserLoadEventL(TBrCtlDefs::TBrCtlLoadEvent aLoadEvent, + TUint /*aSize*/, TUint16 /*aTransactionId*/) + { + if(aLoadEvent == TBrCtlDefs::EEventLoadFinished) + { + + HBufC* title = iBrCtrl->PageInfoLC(TBrCtlDefs::EPageInfoTitle); + if(!title) + { + CleanupStack::PopAndDestroy(title); + return; + } + + //Update the title bar + CEikStatusPane* sp = CCSXHAppUi::GetInstance()->StatusPane(); + CAknTitlePane* titlePane = STATIC_CAST(CAknTitlePane*, + sp->ControlL(TUid::Uid(EEikStatusPaneUidTitle))); + titlePane->SetTextL(*title); + CleanupStack::PopAndDestroy(title); + + //For the context sensitive view, the softkey texts need to be changed. + //add label iLoadHtml for ESNN-7N9CLN.If the html is opened by + //loadHtmlL, the iLoadHtml will be set to ETrue, which + //can guarantee the RSK keep as "CLOSE" when context is sensitive. + if ((!iLoadHtml) && (iView->GetViewType() == CCSXHHtmlTopicView::EContextHtmlView)) + { + iView->SetViewTypeL(IsPrevHtmlPageAvblL() ? + CCSXHHtmlTopicView::EHtmlView : CCSXHHtmlTopicView::EContextHtmlView); + } + + //TSW Error:TKOI-74KE89: Help crashes when closing after viewing a link topic + //When user presses back keys very quickly, TOC2 objects use to destroy and + //then browser call back function triggers which leads to crash. This check + //will avoid crash. + TUid viewId = iDocument.GetDisplayTopic()->GetViewID(); + if(viewId == KCSXHToc1ViewID || viewId == KCSXHKywdToc1ViewID + || viewId == KCSXHToc2ViewID || viewId == KCSXHKywdToc2ViewID) + return; + + //When user clicks on Application Topics, application topics + //corresponding to the topic being displayed has to be opened + //Hence update the Display topic information if required. + + //Check if this event is triggered for the first load after construction + TFileName url; + iTopic->GetHtmlUrlL(url); + if(url.Compare(iUrlNoAnchors) == 0) + { + iDocument.SetDisplayTopic(iTopic); + iNewTopic = NULL; + //Move the code from SetAndLoadInitialTopicL + //TSW Error:EJZG-7E2BUV + ClearHistoryL(); + return; + } + + iNewTopic = iDocument.GetHtmlTopicForUrlL(iUrlNoAnchors); + CheckForMSK(); + } + } + +CCSXHHelpContentBase* CCSXHHtmlTopicContainer::GetCurrActiveObject() + { + return iNewTopic; + } +// -------------------------------------------------------------------------- +// Back Key Handling +// -------------------------------------------------------------------------- +TBool CCSXHHtmlTopicContainer::HandleBackKeyL() + { + //When this view is initially created, the HTML content is loaded + //using the LoadDataL function and hence it will not be part of the + //History stack but all other subsequest navigation by the user + //using the hyperlinks will be part of the History Stack + if(IsPrevPageAvbl()) + { + iBack = ETrue; + TRAPD(res,HandleCommandBackL()); + if(res == KErrNone) + return ETrue; + else + ClearHistoryL(); + } + ClearHistoryL(); + + return EFalse; + } +TBool CCSXHHtmlTopicContainer::IsPrevHtmlPageAvblL() + { + if(IsPrevPageAvbl()) + return ETrue; + + return EFalse; + } + +void CCSXHHtmlTopicContainer::SetSelectedFontSizeL(TInt aValue) + { + iBrCtrl->SetBrowserSettingL(TBrCtlDefs::ESettingsFontSize,aValue); + } + +TInt CCSXHHtmlTopicContainer::GetCurrentValueL(TInt aSetting) + { + return iBrCtrl->BrowserSettingL(aSetting); + } + +void CCSXHHtmlTopicContainer::UpdateSoftkeyL(TBrCtlKeySoftkey /*aKeySoftkey*/, + const TDesC& /*aLabel*/, + TUint32 /*aCommandId*/, + TBrCtlSoftkeyChangeReason /*aBrCtlSoftkeyChangeReason*/) + { + } + +void CCSXHHtmlTopicContainer::UpdateBrowserVScrollBarL(TInt /*aDocumentHeight*/, + TInt /*aDisplayHeight*/, + TInt /*aDisplayPosY*/ ) + { + if(iBrCtrl) + CheckForMSK(); +} +void CCSXHHtmlTopicContainer::UpdateBrowserHScrollBarL(TInt /*aDocumentWidth*/, + TInt /*aDisplayWidth*/, + TInt /*aDisplayPosX*/ ) + { + if(iBrCtrl) + CheckForMSK(); + } +void CCSXHHtmlTopicContainer::NotifyLayoutChange( TBrCtlLayout /*aNewLayout*/ ) + { + } + +void CCSXHHtmlTopicContainer::UpdateTitleL( const TDesC& /*aTitle*/ ) + { + } + +void CCSXHHtmlTopicContainer::CheckForMSK() + { + if(IsHyperLinkFocused()) + { + iView->SetMiddleSoftKey(ETrue); + } + else + { + iView->SetMiddleSoftKey(EFalse); + } + } + +TBool CCSXHHtmlTopicContainer::IsHyperLinkFocused() + { + if(TBrCtlDefs::EElementAnchor == iBrCtrl->FocusedElementType()) + return ETrue; + else + return EFalse; + } + +void CCSXHHtmlTopicContainer::HandleCommandOpenHyperLinkL() + { + iBrCtrl->HandleCommandL(TBrCtlDefs::ECommandIdBase + TBrCtlDefs::ECommandOpen); + } + +TBool CCSXHHtmlTopicContainer::CheckForExternalLinkL(const TDesC& aUrl) + { + TBool Result = EFalse; + + if( KErrNotFound != aUrl.Find(_L("http://")) | + KErrNotFound != aUrl.Find(_L("https://")) | + KErrNotFound != aUrl.Find(_L("ftp://"))) + { + iAppLauncher->LaunchBrowserNGL(aUrl); + Result = ETrue; + } + + return Result; + } + diff -r 000000000000 -r 1f04cf54edd8 csxhelp/src/CSXHHtmlTopicView.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/src/CSXHHtmlTopicView.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,375 @@ +/* +* 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 "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: CCSXHHtmlTopicView class definition +* +*/ + +// INCLUDES +#include "CSXHHtmlTopicView.h" +#include "CSXHHtmlTopicContainer.h" +#include "CSXHHtmlTOC2.h" +#include "CSXHAppUi.h" +#include "CSXHDocument.h" +#include +#include "CsHelp.hrh" + +#include "CSXHViewIDs.h" +#include "CSXHKywdTOC1.h" +#include "CSXHHelpDataBase.h" +#include "CSXHContextTopic.h" +#include "CSXHHtmlTOC2.h" +#include "CSXHHtmlTOC1.h" + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +TInt CCSXHHtmlTopicView::iFontSize = TBrCtlDefs::EFontSizeLevelNormal; + +CCSXHHtmlTopicView* CCSXHHtmlTopicView::NewL(const TUid& aUid, const TInt& aFlags,const +TRect& aRect) + { + CCSXHHtmlTopicView* temp = new(ELeave) CCSXHHtmlTopicView(aUid,aFlags); + CleanupStack::PushL(temp); + temp->ConstructL(aRect); + CleanupStack::Pop(temp); + return temp; + } + +CCSXHHtmlTopicView::CCSXHHtmlTopicView(const TUid& aUid, const TInt& aFlags): + iUid(aUid),iAppFlags(aFlags) + { + } +CCSXHHtmlTopicView::~CCSXHHtmlTopicView() + { + if(iBCContainer) + { + delete iBCContainer; + iBCContainer = NULL; + } + } + +void CCSXHHtmlTopicView::ConstructL(const TRect& /*aRect*/) + { + BaseConstructL(iAppFlags); + } + +void CCSXHHtmlTopicView::SetViewTypeL(TInt type) + { + if(type == iContextTopicView) + return; + + if(type == EContextHtmlView) + { + iContextTopicView = ETrue; + SetSoftKeysL(R_CSHELP_SOFTKEYS_OPTIONS_CLOSE_OPENLINK); + } + else + { + iContextTopicView = EFalse; + SetSoftKeysL(R_CSHELP_SOFTKEYS_OPTIONS_BACK_OPENLINK); + } + } + +TInt CCSXHHtmlTopicView::GetViewType() + { + return iContextTopicView ? EContextHtmlView : EHtmlView; + } + +TUid CCSXHHtmlTopicView::Id() const + { + return iUid; + } +// -------------------------------------------------------------------------- +// Launches an application based on the Application UID and a View ID +// -------------------------------------------------------------------------- +void CCSXHHtmlTopicView::HandleCommandL(TInt aCommand ) + { + switch(aCommand) + { + case EAknSoftkeyBack: + { + if(iBCContainer->HandleBackKeyL()) + return; + CCSXHDocument *doc = static_cast(AppUi()->Document()); + //if not the current view, return + TUid viewId = doc->GetDisplayTopic()->GetViewID(); + if( viewId != KCSXHHtmlTopicViewID && viewId != KCSXHKywdToc2ViewID ) + { + return; + } + CCSXHHtmlTOC2 *displayTopic = STATIC_CAST(CCSXHHtmlTOC2*,doc->GetDisplayTopic()); + CCSXHKywdTOC1* kywdParent = displayTopic->GetKywdParent(); + if(kywdParent) + { + doc->SetDisplayAndPrevTopic(kywdParent); + AppUi()->HandleCommandL(ECSXHOpenItem); + } + else + { + HandleCommandL(ECSXHOpenApplicationTopics); + } + break; + } + case ECSXHOpenApplicationTopics: + { + CCSXHDocument *doc = static_cast(AppUi()->Document()); + if(iBCContainer->GetCurrActiveObject()) + { + doc->SetDisplayTopic(iBCContainer->GetCurrActiveObject()); + CCSXHAppUi::GetInstance()->ResetTOC2ViewContainer(); + } + CCSXHHtmlTOC2 *displayTopic = STATIC_CAST(CCSXHHtmlTOC2*,doc->GetDisplayTopic()); + doc->SetDisplayAndPrevTopic(displayTopic->GetParent()); + AppUi()->HandleCommandL(ECSXHOpenItem); + } + break; + case ECSXHTOC1ListView: + { + CCSXHDocument *doc = static_cast(AppUi()->Document()); + if(iBCContainer->GetCurrActiveObject()) + { + doc->SetDisplayTopic(iBCContainer->GetCurrActiveObject()); + CCSXHAppUi::GetInstance()->ResetTOC2ViewContainer(); + } + + CCSXHHtmlTOC2 *displayTopic = STATIC_CAST(CCSXHHtmlTOC2*,doc->GetDisplayTopic()); + //These two steps are necessary to set the correct display and prev topics + doc->SetDisplayTopic(displayTopic->GetParent()); + doc->SetDisplayAndPrevTopic(doc->GetHelpDataBase()->GetMainTopics()); + AppUi()->HandleCommandL(ECSXHOpenItem); + } + break; + case ECsHelpCmdFontLarge: + { + TInt CurrentFontSize = iBCContainer->GetCurrentValueL(TBrCtlDefs::ESettingsFontSize); + iBCContainer->SetSelectedFontSizeL(++CurrentFontSize); + iFontSize = CurrentFontSize; + } + break; + case ECsHelpCmdFontSmall: + { + TInt CurrentFontSize = iBCContainer->GetCurrentValueL(TBrCtlDefs::ESettingsFontSize); + iBCContainer->SetSelectedFontSizeL(--CurrentFontSize); + iFontSize = CurrentFontSize; + } + break; + case ECSXHOpenHyperLink: + { + iBCContainer->HandleCommandOpenHyperLinkL(); + } + break; + case ECSXHSearchText: + { + CCSXHDocument *doc = static_cast(AppUi()->Document()); + if(iBCContainer->GetCurrActiveObject()) + { + doc->SetDisplayTopic(iBCContainer->GetCurrActiveObject()); + CCSXHAppUi::GetInstance()->ResetTOC2ViewContainer(); + } + } + AppUi()->HandleCommandL( aCommand ); + break; + case EAknSoftkeyExit: + case EAknSoftkeyClose: + AppUi()->HandleCommandL( aCommand ); + break; + default: + break; + } + } +// -------------------------------------------------------------------------- +// Handlign for view activation. For a context view, the actual display topic +// has to be modified +// -------------------------------------------------------------------------- +void CCSXHHtmlTopicView::DoActivateL(const TVwsViewId& aPrevViewId,TUid,const TDesC8&) + { + iPrevious = aPrevViewId; + CCSXHDocument *doc = static_cast(AppUi()->Document()); + + if(!iBCContainer) + { + TRAPD(Result,iBCContainer = CCSXHHtmlTopicContainer::NewL(ClientRect(),*doc,this)); + if(KErrNone != Result) + return; + } + + //Set the correct display topic here for context sensitive launch + if(doc->GetDisplayTopic()->GetViewID() == KCSXHContextHtmlTopicViewID) + { + CCSXHContextTopic *topic = STATIC_CAST(CCSXHContextTopic*,doc->GetDisplayTopic()); + doc->SetDisplayTopic(topic->GetTopic()); + iContextTopicView = ETrue; + } + else + { + iContextTopicView = EFalse; + } + + CCSXHHtmlTOC2 *displayTopic = STATIC_CAST(CCSXHHtmlTOC2*,doc->GetDisplayTopic()); + TRAPD(err,iBCContainer->SetAndLoadInitialTopicL(displayTopic)); + + if( KErrNone != err ) + { + delete iBCContainer; + iBCContainer = NULL; + return; + } + if( iContextTopicView ) + { + SetSoftKeysL(R_CSHELP_SOFTKEYS_OPTIONS_CLOSE_OPENLINK); + } + else + { + SetSoftKeysL(R_CSHELP_SOFTKEYS_OPTIONS_BACK_OPENLINK); + } + iBCContainer->SetMopParent(this); + iBCContainer->SetRect(ClientRect()); + AppUi()->AddToStackL(*this, iBCContainer); + iBCContainer->MakeVisible(ETrue); + } + +void CCSXHHtmlTopicView::DoDeactivate() + { + if(iBCContainer) + { + TRAP_IGNORE(iBCContainer->CancelFetchL()); + iBCContainer->MakeVisible(EFalse); + AppUi()->RemoveFromStack(iBCContainer); + } + } +// -------------------------------------------------------------------------- +// When a view which was previously activated, goes to background and gets +// activated again, the DoActivateL will not be called only ViewActivatedL +// will be called. Special handling is required for the context view for the +// scenario, open context help from any application, with out changing the +// help view, open context help from another application, the contents of the +// context view has to be refreshed with the new topic +// -------------------------------------------------------------------------- +void CCSXHHtmlTopicView::ViewActivatedL(const TVwsViewId& aPrevViewId, + TUid aCustomMessageId, + const TDesC8& aCustomMessage) + { + + if(iBCContainer) + { + //This handling is required for the following scenario + //Context sensitive help launch more than once with no + //other view navigation in the help application + CCSXHDocument *doc = static_cast(AppUi()->Document()); + if(doc->GetDisplayTopic()->GetViewID() == KCSXHContextHtmlTopicViewID) + { + CCSXHContextTopic *topic = static_cast(doc->GetDisplayTopic()); + doc->SetDisplayTopic(topic->GetTopic()); + CCSXHHtmlTOC2 *displayTopic = STATIC_CAST(CCSXHHtmlTOC2*,doc->GetDisplayTopic()); + iBCContainer->RefreshL(displayTopic); + SetSoftKeysL(R_CSHELP_SOFTKEYS_OPTIONS_CLOSE_OPENLINK); + } + iBCContainer->CheckForMSK(); + } + CAknView::ViewActivatedL(aPrevViewId,aCustomMessageId,aCustomMessage); + } + +void CCSXHHtmlTopicView::SetSoftKeysL(TInt aSoftKeys) + { + if( Cba() ) + { + Cba()->SetCommandSetL( aSoftKeys ); + Cba()->DrawDeferred(); + } + } +// -------------------------------------------------------------------------- +// Dynamically updating Options menu item +// -------------------------------------------------------------------------- +void CCSXHHtmlTopicView::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane) + { + + if( R_CSXH_MENU_HTMLTOPICVIEW == aResourceId) + { + TInt CurrentFontSize = iBCContainer->GetCurrentValueL(TBrCtlDefs::ESettingsFontSize); + + if(CurrentFontSize == TBrCtlDefs::EFontSizeLevelAllSmall) + { + aMenuPane->SetItemDimmed(ECsHelpCmdFontSmall,ETrue); + } + else if(CurrentFontSize == TBrCtlDefs::EFontSizeLevelAllLarge) + { + aMenuPane->SetItemDimmed(ECsHelpCmdFontLarge,ETrue); + } + + if(!iBCContainer->IsHyperLinkFocused()) + { + aMenuPane->SetItemDimmed(ECSXHOpenHyperLink,ETrue); + } + } + } +// -------------------------------------------------------------------------- +// MSK Handling +// -------------------------------------------------------------------------- +void CCSXHHtmlTopicView::SetMiddleSoftKey(TBool aValue) + { +#ifndef __SERIES60_30__ + if(AknLayoutUtils::MSKEnabled()) + { + Cba()->MakeCommandVisible(ECSXHOpenHyperLink,aValue); + Cba()->DrawDeferred(); + } +#endif + } + +TInt CCSXHHtmlTopicView::GetCurrentFontSize() + { + return iFontSize; + } + +void CCSXHHtmlTopicView::ResourceChangeHdl(TInt aType) + { + if(iBCContainer) + iBCContainer->HandleResourceChangeImpl(aType); + } + +#ifdef FF_HELP_TUTORIAL_MERGE + // -------------------------------------------------------------------------- +// CCSXHAppUi::LaunchTutorial +// Lauch tutorial if exist, else popup a error message. +// -------------------------------------------------------------------------- +void CCSXHHtmlTopicView::LaunchTutorial() + { + CCSXHDocument *doc = static_cast(AppUi()->Document()); + CCSXHHtmlTOC2 *displayTopic = STATIC_CAST(CCSXHHtmlTOC2*,doc->GetDisplayTopic()); + TCoeHelpContext helpContext; + displayTopic->GetHelpContext(helpContext); + CCSXHAppUi::GetInstance()->SetHelpContext(helpContext); + if( CCSXHAppUi::GetInstance()->IsApplicationPresentInTutorialL() ) + { + CCSXHAppUi::GetInstance()->CallTutorialAiwProviderL(); + } + else + { + HBufC* ErrorMessage = iCoeEnv->AllocReadResourceLC(R_TYPE_NO_HELP_TOPICS); + CAknGlobalNote* note = CAknGlobalNote::NewLC(); + note->ShowNoteL(EAknGlobalInformationNote, *ErrorMessage); + + CleanupStack::PopAndDestroy(note); + CleanupStack::PopAndDestroy(ErrorMessage); + } + } +#endif // FF_HELP_TUTORIAL_MERGE diff -r 000000000000 -r 1f04cf54edd8 csxhelp/src/CSXHLegacyTopicContainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/src/CSXHLegacyTopicContainer.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,343 @@ +/* +* 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 "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: CCSXHLegacyTopicContainer class definition +* +*/ + + +#include "CSXHLegacyTOC2.h" +#include "CSXHLegacyTopicContainer.h" +#include "CSXHDocument.h" + +#include "CSXHAppUi.h" + +#include +#include +#include +#include +#include +#include //Dynamic layout functions +#include +#include +#include +#include +#include + +CCSXHLegacyTopicContainer* CCSXHLegacyTopicContainer::NewL(const TRect& +aRect,CCSXHDocument &aDocument,CCSXHLegacyTOC2 *aTopic) + { + CCSXHLegacyTopicContainer* self = CCSXHLegacyTopicContainer::NewLC(aRect,aDocument,aTopic); + CleanupStack::Pop(self); + return self; + } + +CCSXHLegacyTopicContainer* CCSXHLegacyTopicContainer::NewLC(const TRect& +aRect,CCSXHDocument &aDocument,CCSXHLegacyTOC2 *aTopic) + { + CCSXHLegacyTopicContainer* self = new (ELeave) CCSXHLegacyTopicContainer(aDocument,aTopic); + CleanupStack::PushL(self); + self->ConstructL(aRect); + return self; + } + +CCSXHLegacyTopicContainer::CCSXHLegacyTopicContainer(CCSXHDocument +&aDocument,CCSXHLegacyTOC2 *aTopic):iDocument(aDocument),iTopic(aTopic) + { + } + +void CCSXHLegacyTopicContainer::ConstructL(const TRect& aRect/*, CRichText* aText*/) + { + CreateWindowL(); + TRect rect(0,0,0,0); + // Temporary rect is passed. Correct rect is set in SizeChanged. + iSkinContext = CAknsBasicBackgroundControlContext::NewL( + KAknsIIDQsnBgAreaMain , rect, EFalse); + + iText = STATIC_CAST(CRichText*,iTopic->GetTopicContentL()); + + GetTextFormat(); + + iEdwin = new(ELeave) CEikEdwin(); + const TInt flags(CEikEdwin::EKeepDocument | + CEikEdwin::EUserSuppliedText | + CEikEdwin::ENoAutoSelection | + CEikEdwin::EAvkonDisableCursor | + CEikEdwin::EReadOnly | + CEikEdwin::EDisplayOnly); + iEdwin->SetContainerWindowL(*this); + + iEdwin->ConstructL(flags); + iEdwin->CreatePreAllocatedScrollBarFrameL()->SetScrollBarVisibilityL( + CEikScrollBarFrame::EOff, + CEikScrollBarFrame::EAuto); + SetTextL(iText); + FormatRichTextL(*iText); + SetRect(aRect); + ActivateL(); + } + +CCSXHLegacyTopicContainer::~CCSXHLegacyTopicContainer() + { + delete iEdwin; + delete iSkinContext; + } + +void CCSXHLegacyTopicContainer::RefreshL(CCSXHLegacyTOC2 *aTopic) + { + iTopic = aTopic; + iText = STATIC_CAST(CRichText*,iTopic->GetTopicContentL()); + SetTextL(iText); + FormatRichTextL(*iText); + SizeChanged(); + } + +void CCSXHLegacyTopicContainer::SetTextL(CRichText* aText) + { + iEdwin->SetDocumentContentL(*aText, CEikEdwin::EUseText); + iEdwin->SetCursorPosL(0, EFalse); + + } + +void CCSXHLegacyTopicContainer::FocusChanged(TDrawNow aDrawNow) + { + if (iEdwin) + { + iEdwin->SetFocus(IsFocused(), aDrawNow); + } + } + +void CCSXHLegacyTopicContainer::GetTextFormat() + { + + TAknMultiLineTextLayout layoutToUse; + if( AknLayoutUtils::ScalableLayoutInterfaceAvailable() ) + { + + TAknTextLineLayout layoutnew1 = AknLayoutScalable_Apps::help_list_pane_t1(0).LayoutLine(); + + + TAknLayoutScalableParameterLimits limits1 = + AknLayoutScalable_Apps::help_list_pane_t1_ParamLimits(); + + TInt numberoflines = limits1.LastRow() + 1; + + layoutnew1.iNumberOfLinesShown = numberoflines ; + + layoutToUse.iC = layoutnew1.iC; + layoutToUse.il = layoutnew1.il; + layoutToUse.ir = layoutnew1.ir; + layoutToUse.iB = layoutnew1.iB; + layoutToUse.iW = layoutnew1.iW; + layoutToUse.iJ = layoutnew1.iJ; + layoutToUse.iFont = layoutnew1.iFont; + layoutToUse.iBaselineSkip = layoutnew1.iBaselineSkip; + layoutToUse.iNumberOfLinesShown = layoutnew1.iNumberOfLinesShown; + } + else + { + layoutToUse = AppLayout::Multiline_Help_texts_Line_1(0); + } + + const CFont* font = AknLayoutUtils::FontFromId(layoutToUse.FontId() /*iFont*/, NULL); + iCharFormat.iFontSpec = font->FontSpecInTwips(); + iCharFormatMask.SetAttrib(EAttFontTypeface); + iCharFormatMask.SetAttrib(EAttFontHeight); + + TRgb color; + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + TInt error = AknsUtils::GetCachedColor(skin, color, KAknsIIDQsnTextColors, + EAknsCIQsnTextColorsCG6 ); + if(error==KErrNone) + iCharFormat.iFontPresentation.iTextColor = color; + + iCharFormatMask.SetAttrib(EAttColor); + iCharFormatMask.SetAttrib(EAttFontPosture); + } +void CCSXHLegacyTopicContainer::FormatRichTextL( CRichText& aText ) + { + TInt length = aText.DocumentLength(); + length++; + // Apply the general formatting rules... + aText.ApplyCharFormatL( iCharFormat, iCharFormatMask, 0, length ); + + TParaFormatMask paraFormatMask; + paraFormatMask.SetAttrib( EAttBullet ); + CParaFormat *paraFormat = new ( ELeave ) CParaFormat; + CleanupStack::PushL(paraFormat); + TInt paraCount = aText.ParagraphCount(); + for(TInt i = 0; i < paraCount ; ++i) + { + TInt paraLength; + TInt paraStart = aText.CharPosOfParagraph(paraLength,i); + + aText.GetParagraphFormatL(paraFormat,paraStart); + if(paraFormat->iBullet) + { + TBullet* bullet = new ( ELeave ) TBullet; + CleanupStack::PushL(bullet); + bullet->iColor = iCharFormat.iFontPresentation.iTextColor; + bullet->iHeightInTwips = iCharFormat.iFontSpec.iHeight; + + CParaFormat* paraFormatNew = new ( ELeave ) CParaFormat; + paraFormatNew->iBullet = bullet; // ownership xfer + + CleanupStack::Pop(); + CleanupStack::PushL(paraFormatNew); + + aText.ApplyParaFormatL( paraFormatNew, paraFormatMask, paraStart, paraLength - 1); + CleanupStack::PopAndDestroy(paraFormatNew); + } + } + CleanupStack::PopAndDestroy(paraFormat); + } + + +void CCSXHLegacyTopicContainer::SizeChanged() + { + if(iSkinContext) + iSkinContext->SetRect(Rect()); + if(iEdwin) + { + TRect clientrect = Rect(); + if(AknLayoutUtils::LayoutMirrored()) + { + clientrect.iTl.iX = clientrect.iTl.iX + (iEdwin->ScrollBarFrame() + ->ScrollBarBreadth(CEikScrollBar::EVertical))* 1.1; + } + else + { + TInt RectWidth = clientrect.Width() - (iEdwin->ScrollBarFrame() + ->ScrollBarBreadth(CEikScrollBar::EVertical))* 1.1; + + clientrect.SetWidth(RectWidth); + } + + iEdwin->SetRect(clientrect); + TRAP_IGNORE(iEdwin->ForceScrollBarUpdateL()); + } + } + +// --------------------------------------------------------- +// CCsHelpTopicContainer::OfferKeyEventL(...) +// Processing a key event +// +// (other items were commented in a header). +// --------------------------------------------------------- +TKeyResponse CCSXHLegacyTopicContainer::OfferKeyEventL( + const TKeyEvent& aKeyEvent, + TEventCode aType) + { + TKeyResponse result(EKeyWasConsumed); + + switch (aKeyEvent.iCode) + { + case EKeyUpArrow: + iEdwin->MoveDisplayL(TCursorPosition::EFLineUp); + iEdwin->UpdateScrollBarsL(); + break; + case EKeyDownArrow: + iEdwin->MoveDisplayL(TCursorPosition::EFLineDown); + iEdwin->UpdateScrollBarsL(); + break; + default: + result = iEdwin->OfferKeyEventL(aKeyEvent, aType); + } + + return result; + } + + +// --------------------------------------------------------- +// CCsHelpTopicContainer::CountComponentControls() const +// +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +TInt CCSXHLegacyTopicContainer::CountComponentControls() const + { + return 1; // return nbr of controls inside this container + } + +// --------------------------------------------------------- +// CCsHelpTopicContainer::ComponentControl(TInt aIndex) const +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +CCoeControl* CCSXHLegacyTopicContainer::ComponentControl(TInt aIndex) const + { + switch ( aIndex ) + { + case 0: + return iEdwin; + default: + return NULL; + } + } + +// --------------------------------------------------------- +// CCsHelpTopicContainer::Draw(..) +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CCSXHLegacyTopicContainer::Draw(const TRect& aRect) const + { + CWindowGc& gc = SystemGc(); + gc.Clear(aRect); + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + if (iSkinContext) + {//Draw the skin background + AknsDrawUtils::Background( + skin, iSkinContext, this, gc, aRect); + } + } +void CCSXHLegacyTopicContainer::HandleResourceChange(TInt aType) + { + CCSXHAppUi::GetInstance()->PropagateResourceChange(aType); + } + +void CCSXHLegacyTopicContainer::HandleResourceChangeImpl(TInt aType) + { + if(aType == KEikDynamicLayoutVariantSwitch) + { + iEdwin->HandleResourceChange(aType); + TRect mainRect; + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane,mainRect); + SetRect(mainRect); + } + else + { + CCoeControl::HandleResourceChange(aType); + } + + } + + +// --------------------------------------------------------- +// CCsHelpTopicContainer::MopSupplyObject() +// Pass skin information if need. +// --------------------------------------------------------- + +TTypeUid::Ptr CCSXHLegacyTopicContainer::MopSupplyObject(TTypeUid aId) + { + if (aId.iUid == MAknsControlContext::ETypeId && iSkinContext) + { + return MAknsControlContext::SupplyMopObject(aId, iSkinContext); + } + + return CCoeControl::MopSupplyObject(aId); + } +// End of File diff -r 000000000000 -r 1f04cf54edd8 csxhelp/src/CSXHLegacyTopicView.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/src/CSXHLegacyTopicView.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,213 @@ +/* +* 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 "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: CCSXHLegacyTopicView class definition +* +*/ + + +// INCLUDES +#include "CSXHLegacyTopicView.h" +#include "CSXHLegacyTopicContainer.h" +#include "CSXHAppUi.h" +#include "CSXHDocument.h" +#include +#include "CsHelp.hrh" + +#include "CSXHHelpContentBase.h" +#include "CSXHLegacyTOC2.h" +#include "CSXHLegacyTOC1.h" +#include "CSXHViewIDs.h" +#include "CSXHHelpDataBase.h" +#include "CSXHContextTopic.h" + +#include + +CCSXHLegacyTopicView* CCSXHLegacyTopicView::NewL(const TUid& aUid, + const TInt& aFlags,const TRect& aRect) + { + CCSXHLegacyTopicView* temp = new(ELeave) CCSXHLegacyTopicView(aUid,aFlags); + CleanupStack::PushL(temp); + temp->ConstructL(aRect); + CleanupStack::Pop(temp); + return temp; + } + +CCSXHLegacyTopicView::CCSXHLegacyTopicView(const TUid& aUid, const TInt& aFlags) + : iUid(aUid),iAppFlags(aFlags) + { + } + +CCSXHLegacyTopicView::~CCSXHLegacyTopicView() + { + } + +void CCSXHLegacyTopicView::ConstructL(const TRect& /*aRect*/) + { + BaseConstructL(iAppFlags); + } + +TUid CCSXHLegacyTopicView::Id() const + { + return iUid; + } +// -------------------------------------------------------------------------- +// Launches an application based on the Application UID and a View ID +// -------------------------------------------------------------------------- +void CCSXHLegacyTopicView::HandleCommandL(TInt aCommand) + { + switch(aCommand) + { + case ECSXHOpenApplicationTopics: + { + CCSXHDocument* doc = static_cast(AppUi()->Document()); + CCSXHLegacyTOC2* displayTopic = STATIC_CAST(CCSXHLegacyTOC2*,doc->GetDisplayTopic()); + CCSXHLegacyTOC1* toc1 = displayTopic->GetLegacyParent(); + if(toc1) + { + doc->SetDisplayAndPrevTopic(toc1); + AppUi()->HandleCommandL(ECSXHOpenItem); + } + else + { + //Handling will be same as EAknSoftkeyBack + HandleCommandL(EAknSoftkeyBack); + } + break; + } + case EAknSoftkeyBack: + { + CCSXHDocument* doc = static_cast(AppUi()->Document()); + CCSXHLegacyTOC2* displayTopic = STATIC_CAST(CCSXHLegacyTOC2*,doc->GetDisplayTopic()); + doc->SetDisplayAndPrevTopic(displayTopic->GetParent()); + AppUi()->HandleCommandL(ECSXHOpenItem); + } + break; + case ECSXHTOC1ListView: + { + CCSXHDocument* doc = static_cast(AppUi()->Document()); + CCSXHLegacyTOC2* displayTopic = STATIC_CAST(CCSXHLegacyTOC2*,doc->GetDisplayTopic()); + CCSXHGenericTOC1* toc1 = displayTopic->GetLegacyParent(); + if(!toc1) + toc1 = displayTopic->GetParent(); + doc->SetDisplayTopic(toc1); + doc->SetDisplayAndPrevTopic(doc->GetHelpDataBase()->GetMainTopics()); + AppUi()->HandleCommandL(ECSXHOpenItem); + } + break; + default: + AppUi()->HandleCommandL(aCommand); + break; + } + } + +// -------------------------------------------------------------------------- +// Handlign for view activation. For a context view, the actual display topic +// has to be modified +// -------------------------------------------------------------------------- +void CCSXHLegacyTopicView::DoActivateL(const TVwsViewId& aPrevViewId,TUid /* aCustomMessageId */, + const TDesC8& /* aCustomMessage */) + { + iPrevious = aPrevViewId; + CCSXHDocument* doc = static_cast(AppUi()->Document()); + //Set the correct display topic here for context sensitive launch + if(iUid == KCSXHContextLegacyTopicViewID) + { + CCSXHContextTopic* topic = STATIC_CAST(CCSXHContextTopic*,doc->GetDisplayTopic()); + doc->SetDisplayTopic(topic->GetTopic()); + } + + if(!iTopicContainer) + { + CCSXHLegacyTOC2* displayTopic = STATIC_CAST(CCSXHLegacyTOC2*,doc->GetDisplayTopic()); + iTopicContainer = CCSXHLegacyTopicContainer::NewL(ClientRect(),*doc,displayTopic); + } + + iTopicContainer->SetMopParent(this); + iTopicContainer->SetRect(ClientRect()); + AppUi()->AddToStackL(*this, iTopicContainer); + iTopicContainer->MakeVisible(ETrue); + + //Set the title of the view + CEikStatusPane* sp = StatusPane(); + CAknTitlePane* title = STATIC_CAST(CAknTitlePane*, + sp->ControlL(TUid::Uid(EEikStatusPaneUidTitle))); + title->SetTextL(doc->GetDisplayTopic()->GetName()); + + //MSK: Should be Inactive in this view + //TSW Error:EAJA-6XLFTW : + //S60 3.2 Help: Selection key opens Option menu in Topic view + //If MSK is not defined, "." appears in the MSK, + //On Middle key press, Options menu items are shown to the user +#ifndef __SERIES60_30__ + if(AknLayoutUtils::MSKEnabled()) + { + Cba()->MakeCommandVisible(ECSXHDummyMSK,EFalse); + Cba()->DrawDeferred(); + } +#endif + } + +void CCSXHLegacyTopicView::DoDeactivate() + { + if(iTopicContainer) + { + iTopicContainer->MakeVisible(EFalse); + AppUi()->RemoveFromStack(iTopicContainer); + delete iTopicContainer; + iTopicContainer = NULL; + } + } +// -------------------------------------------------------------------------- +// When a view which was previously activated, goes to background and gets +// activated again, the DoActivateL will not be called only ViewActivatedL +// will be called. Special handling is required for the context view for the +// scenario, open context help from any application, with out changing the +// help view, open context help from another application, the contents of the +// context view has to be refreshed with the new topic +// -------------------------------------------------------------------------- +void CCSXHLegacyTopicView::ViewActivatedL(const TVwsViewId& aPrevViewId, + TUid aCustomMessageId, + const TDesC8& aCustomMessage) + { + if(iTopicContainer && iUid == KCSXHContextLegacyTopicViewID) + { + CCSXHDocument* doc = static_cast(AppUi()->Document()); + + if(doc->GetDisplayTopic()->GetViewID() == KCSXHContextLegacyTopicViewID) + { + CCSXHContextTopic* topic = STATIC_CAST(CCSXHContextTopic*,doc->GetDisplayTopic()); + doc->SetDisplayTopic(topic->GetTopic()); + CCSXHLegacyTOC2* displayTopic = STATIC_CAST(CCSXHLegacyTOC2*,doc->GetDisplayTopic()); + iTopicContainer->RefreshL(displayTopic); + } + + //Set the title of the view + CEikStatusPane* sp = StatusPane(); + CAknTitlePane* title = STATIC_CAST(CAknTitlePane*, + sp->ControlL(TUid::Uid(EEikStatusPaneUidTitle))); + title->SetTextL(doc->GetDisplayTopic()->GetName()); + } + + CAknView::ViewActivatedL(aPrevViewId,aCustomMessageId,aCustomMessage); + } +void CCSXHLegacyTopicView::ViewDeactivated() + { + CAknView::ViewDeactivated(); + } +void CCSXHLegacyTopicView::ResourceChangeHdl(TInt aType) + { + if(iTopicContainer) + iTopicContainer->HandleResourceChangeImpl(aType); + } + diff -r 000000000000 -r 1f04cf54edd8 csxhelp/src/csxhruntimeappwatcher.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/src/csxhruntimeappwatcher.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,87 @@ +/* +* 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 "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: CCSXHRuntimeAppWatcher class definition +* +*/ + + +#include "csxhruntimeappwatcher.h" +#include "csxhconstants.h" + +// ======================================================================== +// CCSXHRuntimeAppWatcher +// ======================================================================== +// +CCSXHRuntimeAppWatcher::CCSXHRuntimeAppWatcher() + : CActive( CActive::EPriorityIdle ) + { + } + +CCSXHRuntimeAppWatcher::~CCSXHRuntimeAppWatcher() + { + if ( IsActive() ) + Cancel(); + iFileSession.Close(); + } + +CCSXHRuntimeAppWatcher* CCSXHRuntimeAppWatcher::NewL() + { + CCSXHRuntimeAppWatcher* self = new ( ELeave ) CCSXHRuntimeAppWatcher(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +void CCSXHRuntimeAppWatcher::ConstructL() + { + CActiveScheduler::Add( this ); + User::LeaveIfError( iFileSession.Connect() ); + } + +void CCSXHRuntimeAppWatcher::RunL() + { + // iStatus equals to KErrNone means completion + // + if ( iStatus == KErrNone ) + { + iObserver->RuntimeUpdateIndex(); + Start(); + } + + } + +void CCSXHRuntimeAppWatcher::DoCancel() + { + iFileSession.NotifyChangeCancel( iStatus ); + } + +void CCSXHRuntimeAppWatcher::Start() + { + // Requests a notification of change to files or directories + // Addition or deletion of a directory entry, or changing or formatting a disk + // + TBuf obsrvPath; + obsrvPath.Append( TChar('?') ); + obsrvPath.Append( KInstallPath ); + iFileSession.NotifyChange( ENotifyEntry, iStatus, obsrvPath ); + + // starts + SetActive(); + } + +void CCSXHRuntimeAppWatcher::SetObserver( MInstallationObserver* aObserver ) + { + iObserver = aObserver; + } diff -r 000000000000 -r 1f04cf54edd8 group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/group/bld.inf Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,18 @@ +/* +* 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: +* +*/ + +#include "../csxhelp/group/bld.inf" diff -r 000000000000 -r 1f04cf54edd8 helps_info/helps_metadata/helps_metadata.mrp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/helps_info/helps_metadata/helps_metadata.mrp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,22 @@ +# +# 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: +# + +component helps_metadata +source \sf\app\helps\helps_info\helps_metadata +source \sf\app\helps\package_definition.xml +source \sf\app\helps\distribution.policy.s60 +notes_source \component_defs\release.src +ipr T diff -r 000000000000 -r 1f04cf54edd8 layers.sysdef.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/layers.sysdef.xml Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,14 @@ + + +]> + + + + + + + + + + diff -r 000000000000 -r 1f04cf54edd8 package_definition.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/package_definition.xml Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/Boss-1.hlp Binary file symhelp/helpmodel/TestData/Boss-1.hlp has changed diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/Boss-2.hlp Binary file symhelp/helpmodel/TestData/Boss-2.hlp has changed diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/ER5Help_Part1.hlp Binary file symhelp/helpmodel/TestData/ER5Help_Part1.hlp has changed diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/PlatSecSearchTestA.hlp Binary file symhelp/helpmodel/TestData/PlatSecSearchTestA.hlp has changed diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/PlatSecSearchTestC.hlp Binary file symhelp/helpmodel/TestData/PlatSecSearchTestC.hlp has changed diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/PlatSecSearchTestF.hlp Binary file symhelp/helpmodel/TestData/PlatSecSearchTestF.hlp has changed diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/PlatSecSearchTestZ.hlp Binary file symhelp/helpmodel/TestData/PlatSecSearchTestZ.hlp has changed diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/Source/Boss1/Boss1.rtf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/symhelp/helpmodel/TestData/Source/Boss1/Boss1.rtf Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,189 @@ +{\rtf1\ansi\ansicpg1252\uc1 \deff1\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;} +{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f14\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;} +{\f32\fswiss\fcharset0\fprq2{\*\panose 020b0506020202030204}Arial Narrow;}{\f40\froman\fcharset2\fprq2{\*\panose 05030102010509060703}Webdings;}{\f41\froman\fcharset238\fprq2 Times New Roman CE;}{\f42\froman\fcharset204\fprq2 Times New Roman Cyr;} +{\f44\froman\fcharset161\fprq2 Times New Roman Greek;}{\f45\froman\fcharset162\fprq2 Times New Roman Tur;}{\f46\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f47\fswiss\fcharset238\fprq2 Arial CE;}{\f48\fswiss\fcharset204\fprq2 Arial Cyr;} +{\f50\fswiss\fcharset161\fprq2 Arial Greek;}{\f51\fswiss\fcharset162\fprq2 Arial Tur;}{\f52\fswiss\fcharset186\fprq2 Arial Baltic;}{\f53\fmodern\fcharset238\fprq1 Courier New CE;}{\f54\fmodern\fcharset204\fprq1 Courier New Cyr;} +{\f56\fmodern\fcharset161\fprq1 Courier New Greek;}{\f57\fmodern\fcharset162\fprq1 Courier New Tur;}{\f58\fmodern\fcharset186\fprq1 Courier New Baltic;}{\f233\fswiss\fcharset238\fprq2 Arial Narrow CE;}{\f234\fswiss\fcharset204\fprq2 Arial Narrow Cyr;} +{\f236\fswiss\fcharset161\fprq2 Arial Narrow Greek;}{\f237\fswiss\fcharset162\fprq2 Arial Narrow Tur;}{\f238\fswiss\fcharset186\fprq2 Arial Narrow Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0; +\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128; +\red192\green192\blue192;}{\stylesheet{\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs32\lang2057\kerning28 \sbasedon0 \snext0 heading 1;}{ +\s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\adjustright \b\f1\lang2057 \sbasedon0 \snext0 heading 2;}{\s3\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 +\tqr\tx9072\adjustright \b\f1\fs28\lang2057 \sbasedon0 \snext0 heading 3;}{\s4\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072\adjustright \b\f1\lang2057 \sbasedon0 \snext0 heading 4;}{ +\s5\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs20\lang2057 \sbasedon0 \snext0 heading 5;}{\s6\sb240\sa60\nowidctlpar\widctlpar\adjustright \i\f1\fs22\lang2057 \sbasedon0 \snext0 heading 6;}{\s7\sb240\sa60\nowidctlpar\widctlpar\adjustright +\f1\fs20\lang2057 \sbasedon0 \snext0 heading 7;}{\s8\sb240\sa60\nowidctlpar\widctlpar\adjustright \i\f1\fs20\lang2057 \sbasedon0 \snext0 heading 8;}{\s9\sb240\sa60\nowidctlpar\widctlpar\adjustright \i\f1\fs18\lang2057 \sbasedon0 \snext0 heading 9;}{\* +\cs10 \additive Default Paragraph Font;}{\s15\fi-284\li284\sa120\nowidctlpar\widctlpar\tx284{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf3\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon0 \snext15 \sautoupd +List Bullet;}{\s16\li284\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 \sbasedon0 \snext16 List Continue;}{\s17\fi-284\li284\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl11\ls2047\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}} +\ls2047\ilvl11\adjustright \f1\fs20\lang2057 \sbasedon0 \snext17 List Number;}{\*\cs18 \additive \super \sbasedon10 endnote reference;}{\s19\fi-284\li568\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf3\pnstart1\pnindent283\pnhang +{\pntxtb \'b7}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon0 \snext19 \sautoupd List Bullet 2;}{\s20\sb360\sa240\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs32\cf9\lang2057\kerning28 \sbasedon0 \snext20 Category UID;}{\*\cs21 \additive +\b\f2\fs20 \sbasedon10 Key Name;}{\s22\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\cf13\lang2057 \sbasedon0 \snext22 Synonyms;}{\s23\fi-284\li284\sa120\nowidctlpar\widctlpar\tx284\adjustright \f1\fs20\lang2057 \sbasedon17 \snext23 List Manual;}{ +\s24\fi-284\li568\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl11\ls2047\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls2047\ilvl11\adjustright \f1\fs20\lang2057 \sbasedon0 \snext24 List Number 2;}{ +\s25\li566\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 \sbasedon0 \snext25 List Continue 2;}{\s26\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 \sbasedon0 \snext26 Definition Term;}{\s27\sa120\nowidctlpar\widctlpar\adjustright +\f1\fs20\cf9\lang2057 \sbasedon26 \snext27 Definition Definition;}{\s28\fi-283\li283\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf14\pnstart1\pnindent283\pnhang{\pntxtb F}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 +\sbasedon0 \snext28 Tip;}{\s29\fi-283\li283\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf14\pnstart1\pnindent283\pnhang{\pntxtb ?}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon28 \snext29 Note;}{ +\s30\fi-283\li283\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf40\pnstart1\pnindent283\pnhang{\pntxtb ~}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon29 \snext30 Important;}{\s31\fi-284\li568\sa120\nowidctlpar\widctlpar +\tx284\adjustright \f1\fs20\lang2057 \sbasedon24 \snext31 List Manual 2;}{\s32\sa120\nowidctlpar\widctlpar\tqc\tx4153\tqr\tx8306\adjustright \f1\fs20\lang2057 \sbasedon0 \snext32 footer;}{\s33\sa120\nowidctlpar\widctlpar\adjustright \i\f1\fs20\lang2057 +\sbasedon0 \snext33 Comment;}{\*\cs34 \additive \b\f1\fs20 \sbasedon10 App Text;}{\*\cs35 \additive \scaps\f32\fs20\cf13 \sbasedon10 Graphic Link;}{\s36\fi-283\li283\sa120\nowidctlpar\widctlpar\brdrb\brdrs\brdrw15\brsp20 +{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf40\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon0 \snext36 Context;}{\s37\fi-283\li283\sa120\nowidctlpar\widctlpar\brdrb\brdrs\brdrw15\brsp20 +{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf40\pnstart1\pnindent283\pnhang{\pntxtb i}}\ls2047\ilvl10\adjustright \f1\fs20\lang2057 \sbasedon0 \snext37 Index;}{\*\cs38 \additive \f1\fs20\ulnone\cf11\nosupersub \sbasedon10 Context Comment;}}{\*\listtable +{\list\listtemplateid1633989036\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li720\jclisttab\tx720 }{\listname ;}\listid-129}{\list\listtemplateid-1125073150 +\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li720\jclisttab\tx720 }{\listname ;}\listid-125}{\list\listtemplateid-1590529442\listsimple +{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid-120}{\list\listtemplateid860106858\listsimple{\listlevel\levelnfc23\leveljc0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid-119}{\list\listtemplateid-1\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat0 +\levelspace0\levelindent0{\leveltext\'01*;}{\levelnumbers;}}{\listname ;}\listid-2}{\list\listtemplateid850702968\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext +\'02\'00\u-4050 ?;}{\levelnumbers\'01;}\fi-283\li283 }{\listname ;}\listid193228087}{\list\listtemplateid850702968\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext +\'02\'00\u-4050 ?;}{\levelnumbers\'01;}\fi-283\li283 }{\listname ;}\listid480197068}{\list\listtemplateid850702968\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext +\'02\'00\u-4050 ?;}{\levelnumbers\'01;}\fi-283\li567 }{\listname ;}\listid1384720679}}{\*\listoverridetable{\listoverride\listid-119\listoverridecount0\ls1}{\listoverride\listid-120\listoverridecount0\ls2}{\listoverride\listid-125\listoverridecount0\ls3} +{\listoverride\listid-129\listoverridecount0\ls4}{\listoverride\listid-119\listoverridecount0\ls5}{\listoverride\listid-120\listoverridecount0\ls6}{\listoverride\listid-125\listoverridecount0\ls7}{\listoverride\listid-129\listoverridecount0\ls8} +{\listoverride\listid-119\listoverridecount0\ls9}{\listoverride\listid-120\listoverridecount0\ls10}{\listoverride\listid-125\listoverridecount0\ls11}{\listoverride\listid-129\listoverridecount0\ls12}{\listoverride\listid-2\listoverridecount1{\lfolevel +\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-3934 ?;}{\levelnumbers;}\f40\fbias0 \fi-283\li283 }}\ls13}{\listoverride\listid-2\listoverridecount1{\lfolevel +\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-3991 ?;}{\levelnumbers;}\f40\fbias0 \fi-283\li283 }}\ls14}{\listoverride\listid-2\listoverridecount1{\lfolevel +\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-283\li283 }}\ls15}{\listoverride\listid480197068\listoverridecount0\ls16} +{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-4033 ?;}{\levelnumbers;}\f14\fbias0 \fi-283\li283 }}\ls17} +{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-4026 ?;}{\levelnumbers;}\f14\fbias0 \fi-283\li283 }}\ls18} +{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-3970 ?;}{\levelnumbers;}\f40\fbias0 \fi-283\li283 }}\ls19} +{\listoverride\listid193228087\listoverridecount0\ls20}{\listoverride\listid1384720679\listoverridecount0\ls21}}{\info{\title Author: }{\author Alex Wilbur}{\operator EvangelosM}{\creatim\yr1999\mo8\dy5\hr11\min4}{\revtim\yr2001\mo2\dy22\hr12\min53} +{\version6}{\edmins7}{\nofpages4}{\nofwords641}{\nofchars3655}{\*\company Dell Computer Corporation}{\nofcharsws0}{\vern71}}\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 \widowctrl\ftnbj\aenddoc\hyphcaps0\formshade\viewkind1\viewscale100 +\fet0\sectd \psz9\sbknone\linex0\headery709\footery709\colsx709\endnhere\sectdefaultcl {\footer \pard\plain \qc\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {\field{\*\fldinst { PAGE }}{\fldrslt {\lang1024 1}}}{ +\par }}{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta ?}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta ?}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta ?}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta ?}} +{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}{\*\pnseclvl8 +\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}\pard\plain \s33\sa120\nowidctlpar\widctlpar\adjustright \i\f1\fs20\lang2057 {Author:Symbian Ltd. +\par Date:January 1999 +\par Version:1.0 +\par }\pard\plain \s1\sb360\sa240\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \b\f1\fs32\lang2057\kerning28 {Boss Puzzle +\par }\pard\plain \s20\sb360\sa240\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs32\cf9\lang2057\kerning28 {0x01000000 +\par }\pard\plain \s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Boss puzzle: }{\i quick}{ start +\par {\pntext\pard\plain\s36 \f40\fs20\lang2057 \loch\af40\dbch\af0\hich\f40 \'a2\tab}}\pard\plain \s36\fi-283\li283\sa120\nowidctlpar\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\ilvl0\ls13\pnrnot0\pnf40\pnstart1\pnindent283\pnhang{\pntxtb \'a2}} +\ls13\adjustright \f1\fs20\lang2057 {context1 }{\cs38\cf11 this is a comment for this context}{ +\par {\pntext\pard\plain\s36 \f40\fs20\lang2057 \loch\af40\dbch\af0\hich\f40 \'a2\tab}This is a multi word context2 }{\cs38\cf11 this is another context comment}{ +\par {\pntext\pard\plain\s36 \f40\fs20\lang2057 \loch\af40\dbch\af0\hich\f40 \'a2\tab}context3 +\par {\pntext\pard\plain\s37 \f40\fs20\lang2057 \loch\af40\dbch\af0\hich\f40 \'69\tab}}\pard\plain \s37\fi-283\li283\sa120\nowidctlpar\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\ilvl0\ls14\pnrnot0\pnf40\pnstart1\pnindent283\pnhang{\pntxtb i}} +\ls14\adjustright \f1\fs20\lang2057 {Quick start inde}{\fs28 x 1}{ +\par {\pntext\pard\plain\s37 \f40\fs20\lang2057 \loch\af40\dbch\af0\hich\f40 \'69\tab}Quick start index 2 +\par {\pntext\pard\plain\s37 \f40\fs20\lang2057 \loch\af40\dbch\af0\hich\f40 \'69\tab}this is }{\b\i the}{ final quick start index (3) +\par }\pard\plain \s22\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\cf13\lang2057 {start begin activate run +\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {The Boss Puzzle was popularized in the late 1800s by Samuel & \ldblquote Lloyd\rdblquote , an American businessman. It consists of a 4x4 grid of tiles, one of which is missing. + +\par }{\cs35\scaps\f32\cf13 archive=pictures name=zoombitmaps}{ +\par The tiles are numbered 1-15. In the original form, tiles 14 and 15 were swapped round. +\par With the Boss Puzzle application you can: +\par {\pntext\pard\plain\s15 \f3\fs20\lang2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s15\fi-284\li284\sa120\nowidctlpar\widctlpar\tx284{\*\pn \pnlvlblt\ilvl0\ls15\pnrnot0\pnf3\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\ls15\adjustright +\f1\fs20\lang2057 {move tiles on this board }{\cs35\scaps\f32\cf13 archive=pictures name=board}{ +\par {\pntext\pard\plain\s15 \f3\fs20\lang2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}pointing with the pointer +\par {\pntext\pard\plain\s15 \f3\fs20\lang2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}move them using the arrow keys +\par {\pntext\pard\plain\s15 \f3\fs20\lang2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}deal the game either fully ordered or Boss ordered +\par {\pntext\pard\plain\s15 \f3\fs20\lang2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}save games as files +\par {\pntext\pard\plain\s15 \f3\fs20\lang2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}save games as embedded objects +\par }\pard\plain \s16\li284\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {Which is a really useful thing to do +\par }\pard\plain \s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Building the &Boss Puzzle +\par {\pntext\pard\plain\s37 \f40\fs20\lang2057 \loch\af40\dbch\af0\hich\f40 \'69\tab}}\pard\plain \s37\fi-283\li283\sa120\nowidctlpar\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\ilvl0\ls14\pnrnot0\pnf40\pnstart1\pnindent283\pnhang{\pntxtb i}} +\ls14\adjustright \f1\fs20\lang2057 {this is }{\b\i the}{ index 3 +\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {All instructions in this refer to the full EIKON versions of the Boss Puzzle. Full instructions for building are contained in the EPOC32 C++ SDK, in the }{\b Practical Guide}{ +. For a very quick start, try +\par {\pntext\pard\plain\s17 \f1\fs20\lang2057 \hich\af1\dbch\af0\loch\f1 1\hich\f1 \u-4050\'3f\tab}}\pard\plain \s17\fi-284\li284\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls16\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls16\adjustright +\f1\fs20\lang2057 {cd \\boss\\group\\ +\par {\pntext\pard\plain\s17 \f1\fs20\lang2057 \hich\af1\dbch\af0\loch\f1 2\hich\f1 \u-4050\'3f\tab}}\pard \s17\fi-284\li284\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls16\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls16\adjustright { +ebld eik7 wins deb +\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {and then invoke the WINS emulator. You should see that the Boss Puzzle is available on the Extras bar. +\par }\pard\plain \s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Starting the game +\par }\pard\plain \s22\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\cf13\lang2057 {invoking initializing invoke initialize +\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {You can start the game by selecting its icon from the Extras bar, or by selecting a file from the Shell, or by selecting or creating an embedded object from a document. +\par }\pard\plain \s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Resetting the game +\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {You can reset the game to fully ordered using }{\cs35\scaps\f32\cf13 archive=pictures name=full-but}{, or to Boss ordered using }{\cs35\scaps\f32\cf13 archive=pictures name=boss-but} +{. +\par }\pard\plain \s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Playing the game +\par }\pard\plain \s22\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\cf13\lang2057 {keyboard +\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {To play the game, use the pointer to select and move tiles. Alternatively, use the arrow keys to move tiles in the direction you want to. +\par In order to show how to use simple menus, menu support for moving is also provided. But this is not a very convenient way to play the game. +\par {\pntext\pard\plain\s29 \f14\fs20\lang2057 \loch\af14\dbch\af0\hich\f14 \'3f\tab}}\pard\plain \s29\fi-283\li283\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlblt\ilvl0\ls17\pnrnot0\pnf14\pnstart1\pnindent283\pnhang{\pntxtb ?}}\ls17\adjustright +\f1\fs20\lang2057 {This is a note paragraph. +\par {\pntext\pard\plain\s28 \f14\fs20\lang2057 \loch\af14\dbch\af0\hich\f14 \'46\tab}}\pard\plain \s28\fi-283\li283\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlblt\ilvl0\ls18\pnrnot0\pnf14\pnstart1\pnindent283\pnhang{\pntxtb F}}\ls18\adjustright +\f1\fs20\lang2057 {This is a tip paragraph +\par {\pntext\pard\plain\s30 \f40\fs20\lang2057 \loch\af40\dbch\af0\hich\f40 \'7e\tab}}\pard\plain \s30\fi-283\li283\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlblt\ilvl0\ls19\pnrnot0\pnf40\pnstart1\pnindent283\pnhang{\pntxtb ~}}\ls19\adjustright +\f1\fs20\lang2057 {This is an important paragraph +\par }\pard\plain \s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Embedding objects +\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {You can embed a Boss Puzzle game into other documents. For instance, from Word, try +\par {\pntext\pard\plain\s17 \f1\fs20\lang2057 \hich\af1\dbch\af0\loch\f1 1\hich\f1 \u-4050\'3f\tab}}\pard\plain \s17\fi-284\li284\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls20\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls20\adjustright +\f1\fs20\lang2057 {insert object (}{\b CTRL+SHIFT+O}{) +\par {\pntext\pard\plain\s17 \f1\fs20\lang2057 \hich\af1\dbch\af0\loch\f1 2\hich\f1 \u-4050\'3f\tab}}\pard \s17\fi-284\li284\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls20\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls20\adjustright {select +}{\b Boss Puzzle}{ as the \ldblquote from program\rdblquote +\par {\pntext\pard\plain\s17 \f1\fs20\lang2057 \hich\af1\dbch\af0\loch\f1 3\hich\f1 \u-4050\'3f\tab}}\pard \s17\fi-284\li284\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls20\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls20\adjustright {select +}{\b Ok}{ +\par {\pntext\pard\plain\s24 \f1\fs20\lang2057 \hich\af1\dbch\af0\loch\f1 4\hich\f1 \u-4050\'3f\tab}}\pard\plain \s24\fi-284\li568\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls20\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls20\adjustright +\f1\fs20\lang2057 {This is a list within a list +\par {\pntext\pard\plain\s24 \f1\fs20\lang2057 \hich\af1\dbch\af0\loch\f1 5\hich\f1 \u-4050\'3f\tab}}\pard \s24\fi-284\li568\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls20\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls20\adjustright { +this is more of a list within a list +\par {\pntext\pard\plain\s24 \f1\fs20\lang2057 \hich\af1\dbch\af0\loch\f1 6\hich\f1 \u-4050\'3f\tab}}\pard \s24\fi-284\li568\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls20\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls20\adjustright { +and yet more +\par {\pntext\pard\plain\s17 \f1\fs20\lang2057 \hich\af1\dbch\af0\loch\f1 7\hich\f1 \u-4050\'3f\tab}}\pard\plain \s17\fi-284\li284\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls20\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls20\adjustright +\f1\fs20\lang2057 {make a few moves in the Boss Puzzle game +\par {\pntext\pard\plain\s17 \f1\fs20\lang2057 \hich\af1\dbch\af0\loch\f1 8\hich\f1 \u-4050\'3f\tab}}\pard \s17\fi-284\li284\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls20\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls20\adjustright { +exit the embedded Boss Puzzle game +\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {This is a the start of another list +\par }\pard\plain \s25\li566\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {List continue level two starting a list +\par }\pard\plain \s16\li284\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {List continue level 1 +\par {\pntext\pard\plain\s24 \f1\fs20\lang2057 \hich\af1\dbch\af0\loch\f1 1\hich\f1 \u-4050\'3f\tab}}\pard\plain \s24\fi-284\li568\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls21\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls21\adjustright +\f1\fs20\lang2057 {Level 2 list +\par {\pntext\pard\plain\s24 \f1\fs20\lang2057 \hich\af1\dbch\af0\loch\f1 2\hich\f1 \u-4050\'3f\tab}}\pard \s24\fi-284\li568\sa120\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls21\pnrnot0\pndec\pnstart1\pnindent283\pnhang{\pntxta ?}}\ls21\adjustright { +and another list entry +\par }\pard\plain \s16\li284\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {List continue level 1 +\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {The end of the list +\par The Boss Puzzle is then displayed in Word, using the glass door capability. The Boss Puzzle supports zooming: try zooming the word document in and out using }{\b CTRL+M}{ and }{\b CTRL+SHIFT+M}{. +\par }\pard\plain \s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Manual and definition list test topic +\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {This is a manually numbered list the list items must be proceeded with a number followed optionally by a period, which must be followed by a tab. +\par }\pard\plain \s23\fi-284\li284\sa120\nowidctlpar\widctlpar\tx284\adjustright \f1\fs20\lang2057 {1,\tab This is list item 1 +\par 5-\tab This is list item 2 +\par 8)\tab This is list item 3 +\par 2.\tab This is list item 4 +\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {This is a definition list +\par }\pard\plain \s26\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {Aleppo +\par }\pard\plain \s27\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\cf9\lang2057 {First Epoc Help +\par }\pard\plain \s33\sa120\nowidctlpar\widctlpar\adjustright \i\f1\fs20\lang2057 {This is a comment in a definition list +\par }\pard\plain \s26\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {This is another term +\par }\pard\plain \s27\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\cf9\lang2057 {This is the definition for the term +\par }\pard\plain \s26\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {Aleppo +\par }\pard\plain \s27\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\cf9\lang2057 {The first Epoc Help compiler. This was used as the bases for the CS-help compiler. +\par }\pard\plain \s26\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {Samaria +\par }\pard\plain \s27\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\cf9\lang2057 {Symbian\rquote s HTML authoring tool. +\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {The end of the definition list +\par }\pard\plain \s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Manual Formatting: }{\i\fs28 quick}{ start +\par {\pntext\pard\plain\s36 \f40\fs20\lang2057 \loch\af40\dbch\af0\hich\f40 \'a2\tab}}\pard\plain \s36\fi-283\li283\sa120\nowidctlpar\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\ilvl0\ls13\pnrnot0\pnf40\pnstart1\pnindent283\pnhang{\pntxtb \'a2}} +\ls13\adjustright \f1\fs20\lang2057 {newcontext1 }{\cs38\fs28\cf11 this }{\cs38\cf11 is a comment for this context}{ +\par {\pntext\pard\plain\s36 \f40\fs20\lang2057 \loch\af40\dbch\af0\hich\f40 \'a2\tab}new This is a multi word context2 }{\cs38\cf11 this is another }{\cs38\fs28\cf11 context}{\cs38\cf11 comment}{ +\par {\pntext\pard\plain\s36 \f40\fs20\lang2057 \loch\af40\dbch\af0\hich\f40 \'a2\tab}new context3 +\par {\pntext\pard\plain\s37 \f40\fs20\lang2057 \loch\af40\dbch\af0\hich\f40 \'69\tab}}\pard\plain \s37\fi-283\li283\sa120\nowidctlpar\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\ilvl0\ls14\pnrnot0\pnf40\pnstart1\pnindent283\pnhang{\pntxtb i}} +\ls14\adjustright \f1\fs20\lang2057 {this is & the index 1 +\par {\pntext\pard\plain\s37 \f40\fs20\lang2057 \loch\af40\dbch\af0\hich\f40 \'69\tab}this is }{\cf6 the \ldblquote index}{\rdblquote 2 +\par {\pntext\pard\plain\s37 \f40\fs20\lang2057 \loch\af40\dbch\af0\hich\f40 \'69\tab}this is }{\b\i the}{ index 3 +\par }\pard\plain \s22\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\cf13\lang2057 {start begin }{\cf5 activate}{ run +\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {The Boss Puzzle was popularized in the late 1800s by Samuel & \ldblquote Lloyd\rdblquote , an American businessman. It consists of a 4x4 grid of tiles, one of which is missing. + +\par The tiles are numbered 1-15. In the original form, tiles 14 and 15 were swapped round. +\par With the Boss Puzzle application you can: +\par {\pntext\pard\plain\s15 \f3\fs20\lang2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s15\fi-284\li284\sa120\nowidctlpar\widctlpar\tx284{\*\pn \pnlvlblt\ilvl0\ls15\pnrnot0\pnf3\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\ls15\adjustright +\f1\fs20\lang2057 {move tiles on this board +\par {\pntext\pard\plain\s15 \f3\fs20\lang2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}pointing with }{\fs28 the pointer}{ +\par {\pntext\pard\plain\s15 \f3\fs20\lang2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}move them using the arrow keys +\par {\pntext\pard\plain\s15 \f3\fs32\lang2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\fs32 deal the game either fully ordered or Boss ordered +\par {\pntext\pard\plain\s15 \f3\fs20\lang2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{save games as files +\par {\pntext\pard\plain\s15 \f3\fs20\lang2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}save games as embedded objects +\par }\pard\plain \s16\li284\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {Which is a }{\cf4 really}{ useful thing to do +\par }\pard\plain \s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Allowed entities +\par }\pard\plain \s22\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\cf13\lang2057 {Etities +\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {\lquote lquote \rquote rquote +\par \ldblquote ldquote \rdblquote rdquote +\par This paragraph contains\line a break in it +\par This\~sentence\~has\~non\~breaking\~spaces +\par This\_one\_has\_non\_breaking\_hyphens +\par \emdash mdash +\par \endash ndash +\par \tab tab +\par & ampersand +\par > gt +\par < lt +\par +\par }\pard\plain \s2\sb120\sa120\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\outlinelevel1\adjustright \b\f1\lang2057 {Uses the two defined character styles +\par }\pard\plain \s22\sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\cf13\lang2057 {character style +\par }\pard\plain \sa120\nowidctlpar\widctlpar\adjustright \f1\fs20\lang2057 {This topic contains text in the two defined character styles. +\par These are }{\cs34\b App Text}{ and }{\cs21\b\f2 Key name}{. +\par +\par }} \ No newline at end of file diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/Source/Boss1/Boss1.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/symhelp/helpmodel/TestData/Source/Boss1/Boss1.xml Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,19 @@ + + + + + 0x10005000 + + \hlpmodel\TestData\Source\Boss1\ + \epoc32\wins\c\system\help\ + \hlpmodel\TestData\Source\Boss1\ + \hlpmodel\TestData\Source\Boss1\Temp\ + + + + Boss1.rtf + + Boss-1.hlp + \hlpmodel\TestData\Source\Boss1\uk.alc.xml + + diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/Source/Boss1/Pictures/board.mbm Binary file symhelp/helpmodel/TestData/Source/Boss1/Pictures/board.mbm has changed diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/Source/Boss1/Pictures/boss-but.mbm Binary file symhelp/helpmodel/TestData/Source/Boss1/Pictures/boss-but.mbm has changed diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/Source/Boss1/Pictures/exit-but.mbm Binary file symhelp/helpmodel/TestData/Source/Boss1/Pictures/exit-but.mbm has changed diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/Source/Boss1/Pictures/exit.mbm Binary file symhelp/helpmodel/TestData/Source/Boss1/Pictures/exit.mbm has changed diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/Source/Boss1/Pictures/full-but.mbm Binary file symhelp/helpmodel/TestData/Source/Boss1/Pictures/full-but.mbm has changed diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/Source/Boss1/Pictures/zoombitmaps.mbm Binary file symhelp/helpmodel/TestData/Source/Boss1/Pictures/zoombitmaps.mbm has changed diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/Source/Boss1/uk.alc.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/symhelp/helpmodel/TestData/Source/Boss1/uk.alc.xml Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,12 @@ + + + + + + + + +Tip: +Note: +Important: + diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/Source/Boss2/Boss2.rtf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/symhelp/helpmodel/TestData/Source/Boss2/Boss2.rtf Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,141 @@ +{\rtf1\ansi \deff5\deflang1033{\fonttbl{\f1\froman\fcharset2\fprq2 Symbol;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f20\fnil\fcharset2\fprq2 Wingdings;} +{\f21\fswiss\fcharset0\fprq2 Arial Narrow;}{\f34\froman\fcharset2\fprq2 Webdings;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0; +\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\sa120\widctlpar +\f5\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 \sbasedon0\snext0 heading 1;}{\s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 +\sbasedon0\snext0 heading 2;}{\s3\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 \sbasedon0\snext0 heading 3;}{\s4\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 \sbasedon0\snext0 +heading 4;}{\s5\sa120\keepn\widctlpar \b\f5\fs20\lang2057 \sbasedon0\snext0 heading 5;}{\s6\sb240\sa60\widctlpar \i\f5\fs22\lang2057 \sbasedon0\snext0 heading 6;}{\s7\sb240\sa60\widctlpar \f5\fs20\lang2057 \sbasedon0\snext0 heading 7;}{ +\s8\sb240\sa60\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext0 heading 8;}{\s9\sb240\sa60\widctlpar \i\f5\fs18\lang2057 \sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvl11 +\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext15 List Bullet;}{\s16\li284\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext16 List Continue;}{\s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvl10 +\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext17 List Number;}{\*\cs18 \additive\super \sbasedon10 endnote reference;}{\s19\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}} +\f5\fs20\lang2057 \sbasedon0\snext19 List Bullet 2;}{\s20\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 \sbasedon0\snext20 Category UID;}{\*\cs21 \additive\b\f11\fs20 \sbasedon10 Key Name;}{\s22\sa120\widctlpar \f5\fs20\cf13\lang2057 +\sbasedon0\snext22 Synonyms;}{\s23\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon17\snext23 List Manual;}{\s24\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext24 +List Number 2;}{\s25\li566\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext25 List Continue 2;}{\s26\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext26 Definition Term;}{\s27\sa120\widctlpar \f5\fs20\cf9\lang2057 \sbasedon26\snext27 +Definition Definition;}{\s28\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 \sbasedon0\snext28 Tip;}{\s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}} +\f5\fs20\lang2057 \sbasedon28\snext29 Note;}{\s30\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf34\pnstart1\pnindent283\pnhang{\pntxtb ~}}\f5\fs20\lang2057 \sbasedon29\snext30 Important;}{\s31\fi-284\li568\sa120\widctlpar\tx284 \f5\fs20\lang2057 +\sbasedon24\snext31 List Manual 2;}{\s32\sa120\widctlpar\tqc\tx4153\tqr\tx8306 \f5\fs20\lang2057 \sbasedon0\snext32 footer;}{\s33\sa120\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext33 Comment;}{\*\cs34 \additive\b\f5\fs20 \sbasedon10 App Text;}{\*\cs35 +\additive\scaps\f21\fs20\cf13 \sbasedon10 Graphic Link;}{\s36\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf34\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 \sbasedon0\snext36 Context;}{ +\s37\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf34\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 \sbasedon0\snext37 Index;}{\*\cs38 \additive\f5\fs20\ulnone\cf11\nosupersub \sbasedon10 Context Comment;}}{\info +{\title Author: }{\author Alex Wilbur}{\operator Alex Wilbur}{\creatim\yr1999\mo8\dy5\hr11\min4}{\revtim\yr2000\mo6\dy27\hr10\min58}{\version2}{\edmins1}{\nofpages4}{\nofwords642}{\nofchars3662}{\*\company Dell Computer Corporation}{\vern57395}} +\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 \widowctrl\ftnbj\aenddoc\hyphcaps0\formshade \fet0\sectd \psz9\sbknone\linex0\headery709\footery709\colsx709\endnhere {\footer \pard\plain \qc\sa120\widctlpar \f5\fs20\lang2057 +{\field{\*\fldinst PAGE }{\fldrslt {\lang1024 4}}} +\par }{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5 +\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang +{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s33\sa120\widctlpar \i\f5\fs20\lang2057 Author:Symbian Ltd. +\par Date:January 1999 +\par Version:1.0 +\par \pard\plain \s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 Boss Puzzle 2 +\par \pard\plain \s20\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 0x01000001 +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Boss puzzle: {\i quick} start 2 +\par {\pntext\pard\plain\f34\fs20\lang2057 \'a2\tab}\pard\plain \s36\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\pnf34\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 context1 {\cs38\cf11 +this is a comment for this context} +\par {\pntext\pard\plain\f34\fs20\lang2057 \'a2\tab}This is a multi word context2 {\cs38\cf11 this is another context comment} +\par {\pntext\pard\plain\f34\fs20\lang2057 \'a2\tab}context3 +\par {\pntext\pard\plain\f34\fs20\lang2057 i\tab}\pard\plain \s37\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\pnf34\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 This is boss2 index 1 +\par {\pntext\pard\plain\f34\fs20\lang2057 i\tab}This is boss2 index 2 +\par {\pntext\pard\plain\f34\fs20\lang2057 i\tab}This is boss2 index 3 +\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 start begin activate run +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The Boss Puzzle was popularized in the late 1800s by Samuel & \ldblquote Lloyd\rdblquote , an American businessman. It consists of a 4x4 grid of tiles, one of which is missing. +\par {\cs35\scaps\f21\cf13 archive=pictures name=board} +\par The tiles are numbered 1-15. In the original form, tiles 14 and 15 were swapped round. +\par With the Boss Puzzle application you can: +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 move tiles on this board {\cs35\scaps\f21\cf13 archive=pictures name=board} + +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}pointing with the pointer +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}move them using the arrow keys +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}deal the game either fully ordered or Boss ordered +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}save games as files +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}save games as embedded objects +\par \pard\plain \s16\li284\sa120\widctlpar \f5\fs20\lang2057 Which is a really useful thing to do +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Building the &Boss Puzzle 2 +\par {\pntext\pard\plain\f34\fs20\lang2057 i\tab}\pard\plain \s37\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\pnf34\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 this is {\b\i the} index 3 +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 All instructions in this refer to the full EIKON versions of the Boss Puzzle. Full instructions for building are contained in the EPOC32 C++ SDK, in the {\b Practical Guide}. For a very quick start, try + +\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 cd \\boss\\group\\ +\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}ebld eik7 wins deb +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 and then invoke the WINS emulator. You should see that the Boss Puzzle is available on the Extras bar. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Starting the game 2 +\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 invoking initializing invoke initialize +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can start the game by selecting its icon from the Extras bar, or by selecting a file from the Shell, or by selecting or creating an embedded object from a document. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Resetting the game 2 +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can reset the game to fully ordered using {\cs35\scaps\f21\cf13 archive=pictures name=full-but}, or to Boss ordered using {\cs35\scaps\f21\cf13 archive=pictures name=boss-but}. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Playing the game 2 +\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 keyboard +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To play the game, use the pointer to select and move tiles. Alternatively, use the arrow keys to move tiles in the direction you want to. +\par In order to show how to use simple menus, menu support for moving is also provided. But this is not a very convenient way to play the game. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 This is a note paragraph. +\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s28\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 This is a tip paragraph +\par {\pntext\pard\plain\f34\fs20\lang2057 ~\tab}\pard\plain \s30\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf34\pnstart1\pnindent283\pnhang{\pntxtb ~}}\f5\fs20\lang2057 This is an important paragraph +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Embedding objects 2 +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can embed a Boss Puzzle game into other documents. For instance, from Word, try +\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 insert object ({\b CTRL+SHIFT+O}) +\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}select {\b Boss Puzzle} as the \ldblquote from program\rdblquote +\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}select {\b Ok} +\par {\pntext\pard\plain\f5\fs20\lang2057 4.\tab}\pard\plain \s24\fi-284\li568\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 This is a list within a list +\par {\pntext\pard\plain\f5\fs20\lang2057 5.\tab}this is more of a list within a list +\par {\pntext\pard\plain\f5\fs20\lang2057 6.\tab}and yet more +\par {\pntext\pard\plain\f5\fs20\lang2057 7.\tab}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 make a few moves in the Boss Puzzle game +\par {\pntext\pard\plain\f5\fs20\lang2057 8.\tab}exit the embedded Boss Puzzle game +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 This is a the start of another list +\par \pard\plain \s25\li566\sa120\widctlpar \f5\fs20\lang2057 List continue level two starting a list +\par \pard\plain \s16\li284\sa120\widctlpar \f5\fs20\lang2057 List continue level 1 +\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s24\fi-284\li568\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Level 2 list +\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}and another list entry +\par \pard\plain \s16\li284\sa120\widctlpar \f5\fs20\lang2057 List continue level 1 +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The end of the list +\par The Boss Puzzle is then displayed in Word, using the glass door capability. The Boss Puzzle supports zooming: try zooming the word document in and out using {\b CTRL+M} and {\b CTRL+SHIFT+M}. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Manual and definition list test topic 2 +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 This is a manually numbered list the list items must be proceeded with a number followed optionally by a period, which must be followed by a tab. +\par \pard\plain \s23\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 1,\tab This is list item 1 +\par 5-\tab This is list item 2 +\par 8)\tab This is list item 3 +\par 2.\tab This is list item 4 +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 This is a definition list +\par \pard\plain \s26\sa120\widctlpar \f5\fs20\lang2057 Aleppo +\par \pard\plain \s27\sa120\widctlpar \f5\fs20\cf9\lang2057 First Epoc Help +\par \pard\plain \s33\sa120\widctlpar \i\f5\fs20\lang2057 This is a comment in a definition list +\par \pard\plain \s26\sa120\widctlpar \f5\fs20\lang2057 This is another term +\par \pard\plain \s27\sa120\widctlpar \f5\fs20\cf9\lang2057 This is the definition for the term +\par \pard\plain \s26\sa120\widctlpar \f5\fs20\lang2057 Aleppo +\par \pard\plain \s27\sa120\widctlpar \f5\fs20\cf9\lang2057 The first Epoc Help compiler. This was used as the bases for the CS-help compiler. +\par \pard\plain \s26\sa120\widctlpar \f5\fs20\lang2057 Samaria +\par \pard\plain \s27\sa120\widctlpar \f5\fs20\cf9\lang2057 Symbian\rquote s HTML authoring tool. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The end of the definition list +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Manual Formatting: {\i\fs28 quick} start 2 +\par {\pntext\pard\plain\f34\fs20\lang2057 \'a2\tab}\pard\plain \s36\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\pnf34\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 newcontext1 {\cs38\fs28\cf11 this }{\cs38\cf11 +is a comment for this context} +\par {\pntext\pard\plain\f34\fs20\lang2057 \'a2\tab}new This is a multi word context2 {\cs38\cf11 this is another }{\cs38\fs28\cf11 context}{\cs38\cf11 comment} +\par {\pntext\pard\plain\f34\fs20\lang2057 \'a2\tab}new context3 +\par {\pntext\pard\plain\f34\fs20\lang2057 i\tab}\pard\plain \s37\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\pnf34\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 this is & the index 1 +\par {\pntext\pard\plain\f34\fs20\lang2057 i\tab}this is {\cf6 the \ldblquote index}\rdblquote 2 +\par {\pntext\pard\plain\f34\fs20\lang2057 i\tab}this is {\b\i the} index 3 +\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 start begin {\cf5 activate} run +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The Boss Puzzle was popularized in the late 1800s by Samuel & \ldblquote Lloyd\rdblquote , an American businessman. It consists of a 4x4 grid of tiles, one of which is missing. +\par The tiles are numbered 1-15. In the original form, tiles 14 and 15 were swapped round. +\par With the Boss Puzzle application you can: +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 move tiles on this board +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}pointing with {\fs28 the pointer} +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}move them using the arrow keys +\par {\pntext\pard\plain\f1\fs32\lang2057 \'b7\tab}{\fs32 deal the game either fully ordered or Boss ordered +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}}save games as files +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}save games as embedded objects +\par \pard\plain \s16\li284\sa120\widctlpar \f5\fs20\lang2057 Which is a {\cf4 really} useful thing to do +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Allowed entities 2 +\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 Etities +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 \lquote lquote \rquote rquote +\par \ldblquote ldquote \rdblquote rdquote +\par This paragraph contains\line a break in it +\par This\~sentence\~has\~non\~breaking\~spaces +\par This\_one\_has\_non\_breaking\_hyphens +\par \emdash mdash +\par \endash ndash +\par \tab tab +\par & ampersand +\par > gt +\par < lt +\par +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Uses the two defined character styles 2 +\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 character style +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 This topic contains text in the two defined character styles. +\par These are {\cs34\b App Text} and {\cs21\b\f11 Key name}. +\par +\par } \ No newline at end of file diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/Source/Boss2/Boss2.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/symhelp/helpmodel/TestData/Source/Boss2/Boss2.xml Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,19 @@ + + + + + 0x10005001 + + \hlpmodel\TestData\Source\Boss2\ + \epoc32\wins\c\system\help\ + \hlpmodel\TestData\Source\Boss2\ + \hlpmodel\TestData\Source\Boss2\Temp\ + + + + Boss2.rtf + + Boss-2.hlp + \hlpmodel\TestData\Source\Boss2\uk.alc.xml + + diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/Source/Boss2/Pictures/board.mbm Binary file symhelp/helpmodel/TestData/Source/Boss2/Pictures/board.mbm has changed diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/Source/Boss2/Pictures/boss-but.mbm Binary file symhelp/helpmodel/TestData/Source/Boss2/Pictures/boss-but.mbm has changed diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/Source/Boss2/Pictures/exit-but.mbm Binary file symhelp/helpmodel/TestData/Source/Boss2/Pictures/exit-but.mbm has changed diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/Source/Boss2/Pictures/exit.mbm Binary file symhelp/helpmodel/TestData/Source/Boss2/Pictures/exit.mbm has changed diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/Source/Boss2/Pictures/full-but.mbm Binary file symhelp/helpmodel/TestData/Source/Boss2/Pictures/full-but.mbm has changed diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/Source/Boss2/uk.alc.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/symhelp/helpmodel/TestData/Source/Boss2/uk.alc.xml Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,12 @@ + + + + + + + + +Tip: +Note: +Important: + diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/Source/ER5Help/Agen-hlp.rtf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/symhelp/helpmodel/TestData/Source/ER5Help/Agen-hlp.rtf Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,296 @@ +{\rtf1\ansi \deff5\deflang1033{\fonttbl{\f1\froman\fcharset2\fprq2 Symbol;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f20\fnil\fcharset2\fprq2 Wingdings;} +{\f23\froman\fcharset2\fprq2 Webdings;}{\f25\fswiss\fcharset0\fprq2 Arial Narrow;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0; +\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\sa120\widctlpar +\f5\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 \sbasedon0\snext0 heading 1;}{\s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 +\sbasedon0\snext0 heading 2;}{\s3\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 \sbasedon0\snext0 heading 3;}{\s4\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 \sbasedon0\snext0 +heading 4;}{\s5\sa120\keepn\widctlpar \b\f5\fs20\lang2057 \sbasedon0\snext0 heading 5;}{\s6\sb240\sa60\widctlpar \i\f5\fs22\lang2057 \sbasedon0\snext0 heading 6;}{\s7\sb240\sa60\widctlpar \f5\fs20\lang2057 \sbasedon0\snext0 heading 7;}{ +\s8\sb240\sa60\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext0 heading 8;}{\s9\sb240\sa60\widctlpar \i\f5\fs18\lang2057 \sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11 +\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 \sbasedon29\snext15 Note;}{\s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext16 List Bullet;}{ +\s17\li284\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext17 List Continue;}{\s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext18 List Number;}{\*\cs19 \additive\super +\sbasedon10 endnote reference;}{\s20\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext20 List Bullet 2;}{\s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 \sbasedon0\snext0 +Hypertext Anchor;}{\*\cs22 \additive\b\f11\fs20 \sbasedon10 Key Name;}{\s23\sa120\widctlpar \f5\fs20\cf13\lang2057 \sbasedon0\snext23 Synonyms;}{\s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon18\snext24 List Manual;}{ +\s25\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext25 List Number 2;}{\s26\li566\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext26 List Continue 2;}{\s27\sa120\widctlpar +\f5\fs20\cf11\lang2057 \sbasedon0\snext27 Definition Term;}{\s28\sa120\widctlpar \f5\fs20\cf11\lang2057 \sbasedon27\snext28 Definition Definition;}{\s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}} +\f5\fs20\lang2057 \sbasedon0\snext29 Tip;}{\s30\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb ~}}\f5\fs20\lang2057 \sbasedon15\snext30 Important;}{\s31\fi-284\li568\sa120\widctlpar\tx284 \f5\fs20\lang2057 +\sbasedon25\snext31 List Manual 2;}{\s32\sa120\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext32 Comment;}{\*\cs33 \additive\b\f5\fs20 \sbasedon10 App Text;}{\*\cs34 \additive\scaps\f25\fs20\cf13 \sbasedon10 Graphic Link;}{ +\s35\sa120\widctlpar\tqc\tx4153\tqr\tx8306 \f5\fs20\lang2057 \sbasedon0\snext35 footer;}{\*\cs36 \additive\fs16 \sbasedon10 annotation reference;}{\s37\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext37 annotation text;}{ +\s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 \sbasedon0\snext38 Category UID;}{\s39\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 +\sbasedon0\snext39 Context;}{\s40\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 \sbasedon0\snext40 Index;}{\*\cs41 \additive\i\f5\fs20\ulnone\cf0\nosupersub +\sbasedon10 Context Comment;}}{\*\revtbl {Unknown;}{Symbian;}}{\info{\title "PROTEA HELP FILE - AGENDA"," }{\author Symbian}{\operator Symbian}{\creatim\yr1997\mo2\dy18\hr15\min6}{\revtim\yr2000\mo4\dy25\hr15\min45}{\printim\yr1997\mo6\dy25\hr13\min25}{\version2}{\edmins3} +{\nofpages11}{\nofwords2968}{\nofchars16921}{\*\company Psion SW}{\vern57395}}\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 \facingp\widowctrl\ftnbj\aenddoc\revisions\linkstyles\hyphcaps0\formshade \fet0{\*\template +C:\\apps\\MSOffice\\Templates\\Other Documents\\CSHELP.DOT}\sectd \psz9\linex0\headery709\footery709\colsx709 {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3 +\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}} +{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s32\sa120\widctlpar +\i\f5\fs20\lang2057 Author: Clive Whitear +\par Date: December 18th 1998 +\par Version: ER5 release +\par \pard\plain \s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 AGENDA{\revised\revauth1\revdttm1178913770 +\par }\pard\plain \s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 {\revised\revauth1\revdttm1178913771 0x10006051} +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Agenda: Quick start +\par \pard\plain \s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 {\deleted\revauth1\revdttm1178913770 agenda.quick-start} +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax scheduler +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 +Agenda is the EPOC machine's diary program. If you have EPOC CONNECT the files created in Agenda are compatible with PC agenda applications (##names of applications##), and can be synchronised with any PC that has EPOC CONNECT installed. +\par Use Agenda to keep track of appointments, events, birthdays, anniversaries and lists of things to do. +\par The first time Agenda is used, or a new Agenda file is created , the xxx view is displayed. The current position is marked by the "cursor" (bullet). +\par Agenda has 6 views: +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Day view - view entries for one day, hour by hour. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Week view - view entries for one week, day by day. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Busy view - for an overview of free and busy time during a 4 week period. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Year planner - see an overview of entries for the year. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Anniversary view - view annual entries, such as birthdays, anniversaries, public holidays etc. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To-do view - view the lists of things to do. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To add an entry, move the cursor to the date of the entry and start typing the text, e.g. 'Lunch with John'. A dialog will then appear where you can set the entry details. +\par To add to-dos or anniversaries, move to the appropriate view first, or use {\cs33\b Create new entry }on the {\cs33\b Entry} menu. +\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 If you start typing an entry before realising you want it to be a different type - + complete it and change it using {\cs33\b Change type} on the {\cs33\b Entry} menu. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If the EPOC machine has \ldblquote dialling\rdblquote capabilities, you can automatically "dial" phone numbers stored in entries in an Agenda file. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Adding appointments (Agenda) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax midnight set alarm am pm timed entry meeting +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To add an appointment, e.g. a meeting, in the Day or Week view: +\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 +Move the cursor to the date and time and start typing the details, e.g. 'Sales meeting'. +\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Set the appointment's time and duration or remove the tick from the {\cs33\b Timed entry }box if it doesn't need a start time. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Press the relevant key to select am or pm. +\par \pard\plain \s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 3.\tab Press {\cs33\b Alarms/More} to change other settings, e.g. an alarm. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Add an appointment in other views using {\cs33\b Create new entry} on the {\cs33\b +Entry} menu. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Adding anniversaries (Agenda) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax set alarm annually anniversary birthdays yearly +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To add an anniversary, e.g. a birthday, in the Anniversary view: +\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 +Move the cursor to the month of the anniversary and start typing the details, e.g. 'Jane's birthday'. +\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Set the day of the anniversary, and the entry symbol. +\par \pard\plain \fi-357\li357\sa120\widctlpar \f5\fs20\lang2057 The entry symbol is a letter that appears on the anniversary date in all views. +\par \pard\plain \s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 3.\tab Press {\cs33\b Alarms/More} to change other settings, e.g. an alarm. You can also choose to display the anniversary with the Start year (from 30000 BC) and/or Number of years. + +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Add an anniversary in other views using {\cs33\b Anniversary} from the {\cs33\b +Create new entry }cascade on the {\cs33\b Entry} menu. +\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 +As a reminder to buy a gift for someone's birthday, add a yearly repeating to-do entry on a date a few days before it. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Adding To-do entries (Agenda) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax tasks set alarm to do todo priority task list tasklist +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To add an important task that you want to remember as a "to-do" entry in the To-do view: +\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Start typing the details of the to-do entry, e.g. 'Book tickets'. +\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Set the {\cs33\b To-do list} and {\cs33\b Priority} of the entry. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 You can use the to-do list preferences to set up a to-do list to sort by priority. + +\par \pard\plain \s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 3.\tab Press {\cs33\b Alarms/More} to change other settings, e.g. to set an alarm. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Add a to-do entry in other views using {\cs33\b To-do} from the {\cs33\b +Create new entry }cascade on the {\cs33\b Entry} menu. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To keep notes in the to-do list, attach a memo to a to-do entry, and use the memo for the notes. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 To-do lists (Agenda) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax task list project worklist todo list to do list task list tasklist +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To create a new to-do list, e.g. for a project or hobby, use {\cs33\b Create new to-do list} on the {\cs33\b To-do lists} menu. Agenda orders the to-do lists according to the page number. +\par Rename or delete a to-do list using {\cs33\b Rename to-do list} or {\cs33\b Delete to-do list} on the {\cs33\b To-do lists} menu. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Adding events (Agenda) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax midnight multiple week-long holiday +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 An "event" is an Agenda entry that can span a number of days, but does not have a start time. To add an event, e.g. a business trip, in the Year view: +\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 +Move the cursor to the first day of the event and start typing the details, e.g. 'Trip to New York'. +\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Set the duration of the event, and the entry symbol. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The entry symbol is a letter that appears on the event days in other views. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Add an event in other views using {\cs33\b Event} from the {\cs33\b Create new entry } +cascade{\cs33\b }on the {\cs33\b Entry} menu. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Setting alarms for Agenda entries +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax notify set alarm warning reminder bell chimes beeps notice alert +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Set an alarm for an entry, e.g. as a reminder that a meeting starts in 15 minutes. +\par To set an alarm while adding the entry, press {\cs33\b Alarms/More} in the New entry dialog. +\par To change the alarm details for an existing entry, move the cursor to it and use {\cs33\b Set alarm} on the {\cs33\b Entry} menu. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 If the + EPOC Record program is installed on the EPOC machine you can create your own alarm sounds. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 +If you set an alarm for an entry which has no text (e.g. if the entry consists of an object without text, perhaps a picture created with the EPOC Sketch program), a standard message is displayed when the alarm rings. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Changing entries (Agenda) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax change type edit entry +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To change the details of any entry, e.g. the time, move the cursor to the entry and tap again or press Enter. +\par To change an Agenda entry from one type to another, e.g. from an event to an anniversary, use {\cs33\b Change type} on the {\cs33\b Entry} menu. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 +Agenda automatically reclaims the space used by entries you delete or change. If you have a very large Agenda file, this may take a few moments when you are changing or deleting entries. To avoid this delay, remove the tick from the {\cs33\b +Auto compress on} box in the General preferences dialog. Note that if you do this, the unused space will not be reclaimed, so you should periodically switch auto compression on to pr +event the Agenda file from becoming too large. To do this, tick the box and close the dialog; the file will then be compressed. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Deleting entries (Agenda) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax tidy/archive file +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To delete an entry, move the cursor to it and use {\cs33\b Delete} on the {\cs33\b Edit} menu. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 +For anniversaries and repeating entries, you can delete all occurrences, or only the selected one. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}For event entries, the whole event will be deleted. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To delete all your out-of-date entries select {\cs33\b Tidy/archive file} from the {\cs33\b More }cascade on the {\cs33\b File} menu. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 To mark an entry as completed, but keep it in your Agenda, cross it out instead using +{\cs33\b Cross out} on the {\cs33\b Entry} menu. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To delete all the entries on a to-do list, delete the to-do list itself, using {\cs33\b Delete to-do list} on the {\cs33\b To-do lists} menu. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Finding entries (Agenda) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax searching go to jump +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To search the Agenda for a piece of text or for entries with particular settings, e.g. all entries with an alarm, select {\cs33\b Find} on the {\cs33\b Edit} menu. +\par Press {\cs33\b Options} to select the entry types you want to find. +\par Press {\cs33\b OK} to start the search. +\par A list of matching entries is shown. To go to an entry in the list, move the cursor to it and press {\cs33\b Enter}. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Use the {\cs33\b Date, Next entry }or{\cs33\b Previous entry }commands on the { +\cs33\b Go to }cascade on the {\cs33\b Edit} menu to go to the previous or next entry in the Agenda, or to jump to a specific date. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Inserting objects (Agenda) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax linking paint attaching edit object sketch embedding memo OLE +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If the EPOC Word, Record, Sheet or Sketch programs are included on the EPOC machine, you can add an object to an existing entry. To do this move the cursor onto the entry and select {\cs33\b Edit object} + on the {\cs33\b Edit} menu. Then select the object type you want to insert. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 A Word or Record file is inserted as an icon. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If the entry already contains an object of the type that you select, it will be opened for you to edit. +\par To insert a new handwritten entry or sketch, move the cursor to a date and time and tap {\cs33\b Sketch} on the {\cs33\b Toolbar}. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 To insert the sketch as an icon press {\cs33\b Alarms/More} in the {\cs33\b +Create new entry} dialog, go to the {\cs33\b Text} page of the {\cs33\b New entry details} dialog. Then select the Sketch and press {\cs33\b Format}. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}If you have made a large picture, it may not be fully visible in some views. (To re-edit such an entry, select {\cs33\b Sketch} from the {\cs33\b Edit object }cascade on the {\cs33\b Edit} menu.) +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Repeating entries (Agenda) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax recurring annually yearly by day of week monthly by days monthly by date daily weekly set repeat interval +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can set an entry to repeat daily, weekly, monthly or annually, e.g. a regular meeting. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 You cannot set a repeat for an event entry. +\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Move the cursor to the entry and select {\cs33\b Set repeat} on the {\cs33\b Entry} + menu. +\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Select the repeat frequency and other details, e.g. to set a repeat: +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 once every three days, select {\cs33\b Daily} and set the {\cs33\b Interval} + to 3. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}for the same days every week, e.g. for Monday and Friday every week, select {\cs33\b Weekly}, press {\cs33\b More} and tick the days you want. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}for the same dates every month, e.g. for the 7th and the 15th of each month, select {\cs33\b Monthly by date}, and press {\cs33\b More} +. For each day in the month that you want a repeat, select the date and press {\cs33\b Set day}. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}for the same day in particular weeks per month, e.g. the last Friday of each month, select {\cs33\b Monthly by days}, then press {\cs33\b More} +. For each day/week combination in the month that you want a repeat, select the day/week and press {\cs33\b Set day}. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}for the same day/week/month each year, e.g. the 3rd Tuesday in February each year, select {\cs33\b Yearly by day of week}, press {\cs33\b More} and select the day/week combination. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Crossing out entries (Agenda) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax cancelled canceled completed cross out +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To "cross out" an entry that has been completed or cancelled, move the cursor to it and use {\cs33\b Cross out} on the {\cs33\b Entry} menu. +\par The entry text will appear crossed out on the screen, and any alarm associated with it will be cancelled. +\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 If you want to remove the entry permanently, select {\cs33\b Delete} from the { +\cs33\b Edit} menu. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Cutting, copying & pasting (Agenda) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax amend alarm cut paste move +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use the {\cs33\b Cut}, {\cs33\b Copy} and {\cs33\b Paste} commands on the {\cs33\b Edit} menu to copy and move entries and all their details. +\par Alarms relative to the entry are amended accordingly, e.g. if you move a 10 o'clock entry with an alarm set for 15 minutes warning, to 12 o'clock, the alarm is also moved (in this case, to 11:45). +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 +The position of to-dos on a to-do list is determined by their sort order. If you want to be able to be able to change their positions by cutting and pasting them, set the sort order to {\cs33\b Manual} in the to-do list preferences. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Tentative entries (Agenda) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax gray greying out graying out pencil in pencilled in make tentative +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To mark an entry that has not been confirmed (one that is "pencilled in"), e.g. to reserve the time for an unconfirmed meeting, move the cursor to it and use {\cs33\b Make tentative} on the {\cs33\b Entry} + menu. +\par The entry text will be displayed in grey. +\par To confirm the entry, select the {\cs33\b Make tentative} command again. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Display preferences (Agenda) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax timeslots time slots customise customize view preferences standard entry type allowed types manual entry preferences general preferences wrapping to-do preferences +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To change the appearance of Agenda views (except the To-do view), use {\cs33\b View preferences} on the {\cs33\b Tools} menu: +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Use the {\cs33\b Standard entry type} + line to define the type of entry that will be added when you just start typing in a time slot in the associated view. E.g., you may want to add an event entry when you start typing in the Week view. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To display only certain entry types in this view, press {\cs33\b Allowed types}. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To change the way a to-do list is displayed, select {\cs33\b To-do list preferences} on the {\cs33\b To-do lists} menu: +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 The {\cs33\b Page number} + line determines the order in which to-do lists are shown in the To-do view. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Set the {\cs33\b Sort order} line to prioritise entries according to date or priority, or set it to {\cs33\b Manual} if you want to be able to arrange the to-do entries in the list yourself. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Tick the boxes according to how you want to-do entries to be displayed in the To-do view and other views. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To change the way each type of entry is displayed, and the standard settings for new entries, use the {\cs33\b Entry preferences} cascade on the {\cs33\b Tools} menu. +\par To prevent long entries taking up several lines on the screen, switch text wrapping off using {\cs33\b Wrap to screen} on the {\cs33\b View} menu. +\par To change the view displayed when Agenda is opened, use {\cs33\b General preferences} on the {\cs33\b Tools} menu. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Entry symbols (Agenda) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax entry code categories +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 An entry symbol (a letter, number or other character) can be used to identify entries of a particular type, e.g. an "A" can be used to represent anniversaries. You can: +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 +Add your own symbols to entries, to be able to identify particular projects, hobbies and so on. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Set preferences to display only one entry symbol in the Year planner. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Print only one entry symbol. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To change the standard symbols used for day entries, events, to-dos and anniversaries, use {\cs33\b Entry preferences} on the {\cs33\b Tools} menu. +\par To change the symbol for an individual entry, press {\cs33\b Alarms/More} in the create or edit dialog and go to the {\cs33\b Details} page. Then type in any letter, number or character as the entry symbol. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Keypresses - General (Agenda) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax pgup pgdn page up page down ctrl shift fn spacebar tab keyboard +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The default keypresses are: +\par Shift+Ctrl+D, W, A, Y or T - go to the Day, Week or Anniversary view, the Year planner or the To-do lists. +\par Spacebar - move between the current day (today) and the previously selected day. +\par Tap on the "dog-ears" in the bottom corners of the Agenda pages to move through the days in the Day view, the weeks in the Week view etc. +\par Arrow keys - move the cursor around the times, days, weeks etc. +\par Tab - display the built-in calendar in the Week, Day or Anniversary view. +\par Shift+Enter - while an entry is selected to add a new entry. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Keypresses - Day view (Agenda) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax pgup pgdn page up page down ctrl fn keyboard +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Ctrl+up and down arrow keys - go to the previous or next time slot. +\par Ctrl+left and right arrow keys - go to the same time slot in the previous or next day. +\par Ctrl+Fn+left and right arrow keys - go to the same day in the previous or next week. +\par Ctrl+Fn+up and down arrow keys - go to the same day in the previous or next month. +\par Fn+up and down arrow keys - page up or down. +\par Fn+left and right arrow keys - go to the first or last time slot. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Keypresses - Week view (Agenda) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax pgup pgdn page up page down ctrl fn keyboard +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Ctrl+up and down arrow keys - go to the previous or next day. +\par Ctrl+left and right arrow keys - go to the same day in the previous or next week. +\par Ctrl+Fn+left and right arrow keys - go to the same day in the previous or next month. +\par Ctrl+Fn+up and down arrow keys - go to the same day in the previous or next year. +\par Fn+up and down arrow keys - page up or down. +\par Fn+left and right arrow keys - go to the first or last day of the week. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Keypresses - Busy view (Agenda) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax pgup pgdn page up page down ctrl shift fn spacebar tab keyboard +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Tab - show a list of entries for the selected time slot. +\par Ctrl+left and right arrow keys - go to the same day in the previous or next week, leaving the cursor in the same place on the screen. +\par Shift+left and right arrow keys - go to the same day in the previous or next week. +\par Ctrl+Fn+left and right arrow keys - go to the same day in the previous or next 4 week period, leaving the cursor in the same place on the screen. +\par Fn+up and down arrow keys - go to the first or last time slot of the day. +\par Fn+left and right arrow keys - go to the first or last day of the 4 week period. +\par Tap on the date title to display the built-in calendar. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Keypresses - Year planner (Agenda) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax pgup pgdn page up page down ctrl shift fn spacebar tab keyboard +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Tab - show a list of entries for the selected day. +\par Ctrl+left and right arrow keys - go to the same day in the previous or next week. +\par Ctrl+up and down arrow keys - go to the same day in the previous or next month. +\par Shift+up and down arrow keys - move the planner up and down 1 month, leaving the cursor in the same place on the screen. +\par Fn+up and down arrow keys - move up and down 1 year, leaving the cursor in the same place on the screen. +\par Tap on the date title to display the built-in calendar. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Keypresses - Anniversary view (Agenda) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax home end ctrl tab keyboard +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Ctrl+left and right arrow keys - go to the previous or next 2, 4 or 6 months. +\par Tap on the date title or press Tab to display the built-in calendar. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Keypresses - To-do view (Agenda) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax home endfn tab keyboard +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Fn+left and right arrow keys - go to the first or last to-do list. +\par Tap on the title of a to-do list or press Tab to see a menu of all the to-do lists. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Combining Agenda files +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax merge in +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To add the entries from one Agenda file to another, e.g. to combine personal and business agendas, open the Agenda file that you wish to add the entries to and merge in the file using {\cs33\b Merge in} + from the {\cs33\b More }cascade on the {\cs33\b File} menu. +\par The entries you have added are not removed from their original file. You can delete the file whose entries you have merged in, to save disk space. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Printing Agenda entries +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax page setup print preview +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 +You can print Agenda entries to a serial, parallel or Infrared printer. If you have a fax program installed on the EPOC machine, you can also print Agenda entries to fax. Before printing, set up the page (paper size, margins, headers & footers, etc.) usin +g {\cs33\b Page setup} from the {\cs33\b Printing} cascade on the {\cs33\b File} menu. +\par When you select the {\cs33\b Print} or {\cs33\b Print preview} command, a dialog is displayed in which you can choose: +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 The date range of the entries to print and the number of copies. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 By pressing {\cs33\b Entry types}, you can also choose: +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To print all repeat entries or only the next one. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To print crossed out entries. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To print entries with a particular entry symbol. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Synchronising Agenda with a PC +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 Schedule Lotus Organizer synchonise synchronizing Agenda synchronisation private on synchronised agendas diary +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 +If you have the EPOC CONNECT program with Agenda Synchronisation you can synchronise the EPOC machine Agenda with the agenda on a PC. You can specify for each entry whether you want to transfer it to the PC agen +da, and if so, whether the entry is marked as private on the PC. +\par {\cs33\b To change the synchronisation settings:} +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 for a single entry, move the cursor to the entry and select {\cs33\b +Agenda synchronisation} on the {\cs33\b Entry} menu. Tick the {\cs33\b Synchronise with other agendas} box if you want it to be transferred to the PC, and tick the {\cs33\b Private on synchronised agendas} box to mark the entry as confidential on the PC. + +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}for a to-do list, select {\cs33\b Agenda synchronisation} on the {\cs33\b To-do lists} menu. Remove the tick from the {\cs33\b Synchronise with other agendas} + box if you don't want any of the to-dos in the list to be transferred to the PC, or tick the {\cs33\b Private on synchronised agendas} to mark all the to-dos in the list as private on the PC. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}for all new entries of one type, select {\cs33\b Entry preferences} on the {\cs33\b Tools} menu and then select an entry type. Tick the {\cs33\b Synchronise with other agendas} + box if you want this type of entry to be transferred to the PC, and tick the {\cs33\b Private on synchronised agendas} box to mark the entries as confidential on the PC. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 The settings of existing entries of this type will not be changed. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Refer to the EPOC CONNECT Documentation for details of how to synchronise diaries. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Formatting text (Agenda) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax type face typestyle type style crossout emphasis emphases bold italics underlined font +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To change the formatting of the text while adding or editing an entry, press {\cs33\b Alarms/More} in the create new entry or edit entry dialog. +\par Go to the {\cs33\b Text} page, highlight the text you want to format and tap on the buttons beneath the text box. Here you can change text to Bold, Italic or Underline, or change the {\cs33\b Font}. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 +You can make text bold, italic or underlined using the shortcut keypresses as you type. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Formatting objects (Agenda) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary filofax resize stretch rescale trim cropping resizing +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To format an object (change the size, scaling and appearance of pictures, graphs etc.), press {\cs33\b Alarms/More} in the add or edit entry dialog. +\par \pard \sa120\widctlpar Go to the {\cs33\b Text} page and select the object you want to format. Then tap on {\cs33\b Format}. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Free & busy time (Agenda) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 diary busy view month view time planner free time +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use the Busy view to see an overview of free and busy time for a 4 week period. +\par Only timed entries are shown. +\par You can add, edit, delete, cut, copy or paste entries just as in any other view. +\par Use {\cs33\b View preferences} on the {\cs33\b Tools} menu to change the start and end times of the {\cs33\b Working day} and {\cs33\b Normal day}. Zooming in the Busy view switches between the Working day, Normal day and the whole day. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 The times which you have specified as the start and end of your Working + day are shown as dotted lines. +\par } \ No newline at end of file diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/Source/ER5Help/Bomb-hlp.rtf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/symhelp/helpmodel/TestData/Source/ER5Help/Bomb-hlp.rtf Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,55 @@ +{\rtf1\ansi \deff5\deflang1033{\fonttbl{\f1\froman\fcharset2\fprq2 Symbol;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f20\fnil\fcharset2\fprq2 Wingdings;} +{\f23\froman\fcharset2\fprq2 Webdings;}{\f25\fswiss\fcharset0\fprq2 Arial Narrow;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0; +\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\sa120\widctlpar +\f5\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 \sbasedon0\snext0 heading 1;}{\s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 +\sbasedon0\snext0 heading 2;}{\s3\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 \sbasedon0\snext0 heading 3;}{\s4\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 \sbasedon0\snext0 +heading 4;}{\s5\sa120\keepn\widctlpar \b\f5\fs20\lang2057 \sbasedon0\snext0 heading 5;}{\s6\sb240\sa60\widctlpar \i\f5\fs22\lang2057 \sbasedon0\snext0 heading 6;}{\s7\sb240\sa60\widctlpar \f5\fs20\lang2057 \sbasedon0\snext0 heading 7;}{ +\s8\sb240\sa60\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext0 heading 8;}{\s9\sb240\sa60\widctlpar \i\f5\fs18\lang2057 \sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11 +\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 \sbasedon29\snext15 Note;}{\s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext16 List Bullet;}{ +\s17\li284\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext17 List Continue;}{\s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext18 List Number;}{\*\cs19 \additive\super +\sbasedon10 endnote reference;}{\s20\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext20 List Bullet 2;}{\s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 \sbasedon0\snext0 +Hypertext Anchor;}{\*\cs22 \additive\b\f11\fs20 \sbasedon10 Key Name;}{\s23\sa120\widctlpar \f5\fs20\cf13\lang2057 \sbasedon0\snext23 Synonyms;}{\s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon18\snext24 List Manual;}{ +\s25\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext25 List Number 2;}{\s26\li566\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext26 List Continue 2;}{\s27\sa120\widctlpar +\f5\fs20\cf11\lang2057 \sbasedon0\snext27 Definition Term;}{\s28\sa120\widctlpar \f5\fs20\cf11\lang2057 \sbasedon27\snext28 Definition Definition;}{\s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}} +\f5\fs20\lang2057 \sbasedon0\snext29 Tip;}{\s30\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb ~}}\f5\fs20\lang2057 \sbasedon15\snext30 Important;}{\s31\fi-284\li568\sa120\widctlpar\tx284 \f5\fs20\lang2057 +\sbasedon25\snext31 List Manual 2;}{\s32\sa120\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext32 Comment;}{\*\cs33 \additive\b\f5\fs20 \sbasedon10 App Text;}{\*\cs34 \additive\scaps\f25\fs20\cf13 \sbasedon10 Graphic Link;}{ +\s35\sa120\widctlpar\tqc\tx4153\tqr\tx8306 \f5\fs20\lang2057 \sbasedon0\snext35 footer;}{\*\cs36 \additive\fs16 \sbasedon10 annotation reference;}{\s37\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext37 annotation text;}{ +\s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 \sbasedon0\snext38 Category UID;}{\s39\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 +\sbasedon0\snext39 Context;}{\s40\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 \sbasedon0\snext40 Index;}{\*\cs41 \additive\i\f5\fs20\ulnone\cf0\nosupersub +\sbasedon10 Context Comment;}}{\*\revtbl {Unknown;}{Symbian;}}{\info{\title "PROTEA HELP FILE - "," }{\author Symbian}{\operator Symbian}{\creatim\yr1997\mo2\dy11\hr11\min7}{\revtim\yr2000\mo4\dy25\hr15\min46}{\version2}{\edmins1}{\nofpages2}{\nofwords353}{\nofchars2016} +{\*\company Psion SW}{\vern57395}}\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 \facingp\widowctrl\ftnbj\aenddoc\revisions\linkstyles\hyphcaps0\formshade \fet0{\*\template C:\\apps\\MSOffice\\Templates\\Other Documents\\CSHELP.DOT}\sectd +\psz9\linex0\headery709\footery709\colsx709 {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4 +\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (} +{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s32\sa120\widctlpar \i\f5\fs20\lang2057 Author: Clive Whitear +\par Date: December 21{\super st} 1998 +\par Version: ER5 release +\par \pard\plain \s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 BOMBS{\revised\revauth1\revdttm1178913774 +\par }\pard\plain \s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 {\revised\revauth1\revdttm1178913774 0x10006670} +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Bombs: Quick start +\par \pard\plain \s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 {\deleted\revauth1\revdttm1178913774 bombs.quick-start +\par }\pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 minesweeper mines mine-sweeper games skill level +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Bombs is a game of speed and logical thinking. The object of the game is to discover and mark the position of "bombs" concealed in a grid of s +quares as quickly as possible. Do this by "stepping" on the squares (by tapping with the pen or moving to them and pressing the Spacebar), one at a time. +\par If a square conceals a bomb, you lose and the game is over. +\par If there isn't a bomb under the square, the number of bombs in the 8 surrounding squares is shown. +\par If you uncover a blank square there are no bombs in the surrounding 8 squares, and so all of the adjacent squares are revealed. +\par If you suspect that a square conceals a bomb you can mark it with a flag, by moving to it and pressing Enter. +\par To set the skill level (easy, medium or hard), use the {\cs33\b Skill level} button on the {\cs33\b Toolbar}. The harder the skill level, the more bombs are hidden in the grid. +\par The score is the time it takes to mark all the bombs with a flag. The time starts when you "step" on the first square. The top two scores for each level, together with the name of the player, are kept in the {\cs33\b Best times} list. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Keypresses (Bombs) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 minesweeper games flag keyboard +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The default keypresses are: +\par Highlight a square by tapping on it or by moving to it with the arrow keys. +\par To "step" on the highlighted square, tap on it, tap on the {\cs33\b Bombs} counter or press the Spacebar. +\par To mark a square with a flag, hold down the shift key and tap on the square, tap on the {\cs33\b Flags} counter or highlight the square and press Enter. Remove a flag in the same way. +\par When you think that all the bombs surrounding a numbered square have been marked with a flag, tap on the square or press the Spacebar to uncover all the surrounding squares. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Preferences (Bombs) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 minesweeper games align play area auto complete double tap to expose difficulty skill level +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Tap on {\cs33\b Skill level} to select the degree of difficulty and grid size. For the 'Custom' level you can specify how many bombs are hidden in the grid. +\par To change the position of the grid on the screen use {\cs33\b Align play area} on the {\cs33\b View} menu. +\par Set the following preferences from the {\cs33\b Tools} menu: +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Remove the tick from {\cs33\b Auto complete} +, if you want to have to mark all bombs with a flag, before the game is complete. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Remove the tick from {\cs33\b Double tap to expose}, to use a single tap to "step" on a square. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 +\par } \ No newline at end of file diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/Source/ER5Help/CONT-HLP.RTF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/symhelp/helpmodel/TestData/Source/ER5Help/CONT-HLP.RTF Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,164 @@ +{\rtf1\ansi \deff5\deflang1033{\fonttbl{\f1\froman\fcharset2\fprq2 Symbol;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f20\fnil\fcharset2\fprq2 Wingdings;} +{\f23\froman\fcharset2\fprq2 Webdings;}{\f25\fswiss\fcharset0\fprq2 Arial Narrow;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0; +\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\sa120\widctlpar +\f5\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 \sbasedon0\snext0 heading 1;}{\s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 +\sbasedon0\snext0 heading 2;}{\s3\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 \sbasedon0\snext0 heading 3;}{\s4\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 \sbasedon0\snext0 +heading 4;}{\s5\sa120\keepn\widctlpar \b\f5\fs20\lang2057 \sbasedon0\snext0 heading 5;}{\s6\sb240\sa60\widctlpar \i\f5\fs22\lang2057 \sbasedon0\snext0 heading 6;}{\s7\sb240\sa60\widctlpar \f5\fs20\lang2057 \sbasedon0\snext0 heading 7;}{ +\s8\sb240\sa60\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext0 heading 8;}{\s9\sb240\sa60\widctlpar \i\f5\fs18\lang2057 \sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11 +\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 \sbasedon29\snext15 Note;}{\s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext16 List Bullet;}{ +\s17\li284\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext17 List Continue;}{\s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext18 List Number;}{\*\cs19 \additive\super +\sbasedon10 endnote reference;}{\s20\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext20 List Bullet 2;}{\s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 \sbasedon0\snext0 +Hypertext Anchor;}{\*\cs22 \additive\b\f11\fs20 \sbasedon10 Key Name;}{\s23\sa120\widctlpar \f5\fs20\cf13\lang2057 \sbasedon0\snext23 Synonyms;}{\s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon18\snext24 List Manual;}{ +\s25\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext25 List Number 2;}{\s26\li566\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext26 List Continue 2;}{\s27\sa120\widctlpar +\f5\fs20\cf11\lang2057 \sbasedon0\snext27 Definition Term;}{\s28\sa120\widctlpar \f5\fs20\cf11\lang2057 \sbasedon27\snext28 Definition Definition;}{\s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}} +\f5\fs20\lang2057 \sbasedon0\snext29 Tip;}{\s30\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb ~}}\f5\fs20\lang2057 \sbasedon15\snext30 Important;}{\s31\fi-284\li568\sa120\widctlpar\tx284 \f5\fs20\lang2057 +\sbasedon25\snext31 List Manual 2;}{\s32\sa120\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext32 Comment;}{\*\cs33 \additive\b\f5\fs20 \sbasedon10 App Text;}{\*\cs34 \additive\scaps\f25\fs20\cf13 \sbasedon10 Graphic Link;}{ +\s35\sa120\widctlpar\tqc\tx4153\tqr\tx8306 \f5\fs20\lang2057 \sbasedon0\snext35 footer;}{\*\cs36 \additive\fs16 \sbasedon10 annotation reference;}{\s37\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext37 annotation text;}{ +\s38\fi-357\li357\sa120\sl-184\slmult0\widctlpar \f5\fs20\lang2057 \sbasedon0\snext38 bullet;}{\s39\fi-300\li420\ri140\sb100\sl-210\slmult0\widctlpar\tx140\tx420 \f25\fs19 \snext39 *Cbx;}{\s40\fi-851\li851\sa60\widctlpar\tx284\tx851 \f5\fs20\lang2057 +\sbasedon0\snext40 Icon hanging 2cm;}{\s41\fi-357\li357\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext41 Number;}{\s42\qc\sb80\sa120\sl184\slmult0\widctlpar \f5\fs20\lang2057 \sbasedon0\snext42 picture;}{\s43\sb360\sa240\keepn\widctlpar +\b\f5\fs32\cf9\lang2057\kerning28 \sbasedon0\snext43 Category UID;}{\s44\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 \sbasedon0\snext44 Context;}{ +\s45\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 \sbasedon0\snext45 Index;}{\*\cs46 \additive\i\f5\fs20\ulnone\cf0\nosupersub \sbasedon10 Context Comment;}}{\*\revtbl {Unknown;}{Symbian;}} +{\info{\title "PROTEA HELP FILE - DATA"," }{\author Symbian}{\operator Symbian}{\creatim\yr1997\mo3\dy21\hr18\min49}{\revtim\yr2000\mo4\dy25\hr16\min21}{\printim\yr1997\mo4\dy28\hr14\min21}{\version2}{\edmins1}{\nofpages6}{\nofwords1413}{\nofchars8056} +{\*\company Psion SW}{\vern57395}}\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 \facingp\widowctrl\ftnbj\aenddoc\revisions\linkstyles\hyphcaps0\formshade \fet0{\*\template C:\\apps\\MSOffice\\Templates\\Other Documents\\CSHELP.DOT}\sectd +\psz9\linex0\headery709\footery709\colsx709 {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4 +\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (} +{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s32\sa120\widctlpar \i\f5\fs20\lang2057 Author: Clive Whitear +\par Date: February 18{\super th} 1999 +\par Version: ER5 release (generic) +\par \pard\plain \s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 Contacts{\revised\revauth1\revdttm1178913812 +\par }\pard\plain \s43\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 {\revised\revauth1\revdttm1178913812 0x10004df4} +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Contacts: Quick start +\par \pard\plain \s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 {\deleted\revauth1\revdttm1178913813 contacts.quick-start +\par }\pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 address book telephone numbers +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Contacts is the EPOC machine's name and address book. The contact list on your EPOC machine can be synchronised with a PC scheduler on any PC that has EPOC Connect. +\par When the Contacts program is first used you'll see an empty contact list on the left of the screen and an empty contact \ldblquote card\rdblquote on the right. +\par To add new entries straight away: tap {\cs33\b New contact} on the {\cs33\b Toolbar}. Type in the first entry, press {\cs33\b Save} to add it, then add further entries in the same way. +\par To sort contacts in a different way, tap the {\cs33\b Sort} button on the {\cs33\b Toolbar}. +\par To move between the contacts list and the contact card, use the left and right arrow keys. +\par \pard\plain \s16\sa120\widctlpar\tx284 \f5\fs20\lang2057 To move between contacts use the up and down arrow keys to move up and down the list. Use the up and down arrow keys in the contact card to scroll the contact details. +\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 You can change the labels of all new contact cards using {\cs33\b Setup labels} + on the {\cs33\b Tools} menu. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Adding contacts (Contacts) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 add entry new entry new contact add contact +\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Tap {\cs33\b New contact} on the {\cs33\b Toolbar}. +\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Type in the information next to the appropriate labels. +\par \pard\plain \s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 3.\tab Tap on the line you want to type on or use the up and down arrow keys to move between the lines. +\par 4.\tab Move to the other pages of the dialog to enter the appropriate details there. +\par 5.\tab When the entry is complete, press {\cs33\b Save}. +\par 6.\tab Add the next entry in the same way. +\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 You can change the labels in the contact card using {\cs33\b Setup labels} on the { +\cs33\b Tools} menu. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Changing contacts (Contacts) +\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 edit contact +\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 To change a contact, e.g. to update someone's address, find and select it in the contact list and then press {\cs33\b Edit contact} on the {\cs33\b Toolbar}. +\par Tap on the line for the information to be changed, or use the up and down arrow keys to move to it and edit the text as required. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 To add new labels to the contact, tap the {\cs33\b New item} button. +\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 You can change the labels in the contact card using {\cs33\b Setup labels} on the { +\cs33\b Tools} menu. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Deleting contacts (Contacts) +\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 undo delete contact remove contact erase contact +\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 To delete a single contact, find it in the list view and use {\cs33\b Delete contact} on the {\cs33\b File} menu. +\par If a contact is accidentally deleted, use {\cs33\b Undo delete} on the {\cs33\b Edit} menu to get it back again. +\par To delete all contacts, use {\cs33\b More|Delete all contacts} on the {\cs33\b File} menu. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Changing the labels (Contacts) +\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 field order Setup labels +\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 To change the labels or their order in the contact card use {\cs33\b Setup labels} on the {\cs33\b Tools} menu. +\par Use the buttons on the dialog to move labels around, to add new labels or to delete unwanted labels or to rename them. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 The changes you make here will only affect new contacts and not existing ones. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Finding contacts (Contacts) +\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 wild cards strings searching wildcards search esc unknown +\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 To search for contacts in type a "search clue" in the '{\cs33\b Find:}' box and press Enter. +\par All matching contacts are shown. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Only the \lquote First name\rquote , \lquote Last name\rquote and \lquote Company +\rquote labels are searched. To search all labels, use the {\cs33\b Find} command on the {\cs33\b Edit} menu. +\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 If you want to search for a person\rquote s full name (e.g. \lquote Thomas Daniels +\rquote ), use the \lquote {\cs33\b Find:}\rquote box as this will search the \lquote First name\rquote and \lquote Last name\rquote labels together. +\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 {\cs33\b To remove the search clue:} +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Press Esc to go to the {\cs33\b Find:} box, then ty +pe a new clue, or press Del. +\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 {\cs33\b To find entries using any of the last 5 search clues you typed in:} +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Tap on the menu button, then tap on the clue you want to use, or +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Press Tab, use the up and down arrow keys to select the clue and press Enter. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs33\b Search clues} +\par This is a p +iece of text contained within the entry; it might be a person's name, e.g. 'Patterson-Reid', or part of the other text in the contact details, e.g. 'Bream Road'. Contacts looks for an exact match for the text entered as a search clue, disregarding differe +nces in case. So if the search clue 'tony' is entered, Contacts will find: Tony, tony, TONY, Antony etc. but will not find: Paignton Yachtclub +\par {\cs33\b Wildcards} +\par You can use wildcards in the {\cs33\b Find in all text} dialog. Type a ? for a single unknown letter or a * for any number of unknown letters (known as "wildcards"). +\par If 'sm?th' is entered, Contacts will find: Smethwick, Smith, Smyth etc. +\par If 'sm*th' is entered, Contacts will find: Smiley-Thomas, Smethwick etc. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Labels (Contacts) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 first name surname company phone address fields +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Names, addresses, and other contact details are identified by \ldblquote labels\rdblquote which appear next to boxes in the New contact dialog. +\par Each contact can have a different set of labels. +\par To add new labels, e.g. to add further phone numbers, tap the {\cs33\b New item} button on the {\cs33\b Add contact} or {\cs33\b Edit contact} dialog. Then select the type of label you want to add. +\par If you add a label to a particular contact, it does not mean that the label will be available when adding new contacts. +\par You can have more than one label of the same type in the contact list although this may cause synchronisation problems with a PC based contacts list. +\par Unwanted duplicate labels are not displayed if they contain no information.. +\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 You can change the labels and their order in the contact card using {\cs33\b +Setup labels} on the {\cs33\b Tools} menu. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Adding labels (Contacts) +\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 add fields change fields change labels add labels +\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 To add new labels tap the {\cs33\b New item} button on the {\cs33\b Add contact} or {\cs33\b Edit contact} dialog. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 +You can only add a label to a dialog page if that label type doesn't already appear on a different dialog page. +\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 Add any further labels, as required. +\par If you add a label to a particular contact, it does not mean that the label will be available when adding new contacts. +\par You can have more than one label of the same type in the contact list although this may cause synchronisation problems with a PC based contacts list. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Deleting labels (Contacts) +\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 delete labels change labels change fields delete fields +\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 You can delete a label for all new contacts using {\cs33\b Setup labels} on the {\cs33\b Tools} menu. +\par You can't delete a label for an existing contact, but you can hide a label that\rquote s no longer required by deleting the information contained in it in the {\cs33\b Edit contact} dialog. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Sorting contacts (Contacts) +\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 sort contacts alphabetical order reorder rearrange +\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 Contacts are listed alphabetically as they are added. To change the sort order, tap the {\cs33\b Sort} button on the {\cs33\b Toolbar} and select the required sort order. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Keypresses (Contacts) +\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 esc ctrl tab keyboard +\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 The default keypresses are: +\par Use the left and right arrow keys to move between the contact card and the contact list. +\par Use the up and down arrow keys to move up and down in the contact card or contact list. +\par Press Esc twice to clear the {\cs33\b Find:} line. +\par Hold the Shift key down and use the left and right arrow keys to select text in a contact card. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Contact store +\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 move contacts file compression file size +\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 The file containing the contacts list (the \ldblquote contacts store\rdblquote ) is normally stored on the C: disk. You can move the file to the D: disk using the {\b Preferences} + command on the {\cs33\b Tools} menu. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 It is not possible to have two contacts lists simultaneously +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To see the number of contacts in the contacts store and its size in K, use the {\cs33\b Contacts store info} command on the {\cs33\b Tools} menu. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 +The contact store is automatically compressed every time Contacts is opened to reclaim any space that may become free when contacts are deleted. If you rarely close Contacts, you can manually compress the contact store using the {\cs33\b Compress} + button on the Contacts store info dialog. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Printing contacts +\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 page setup print setup +\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 Contacts can be printed to a serial, parallel or Infrared printer. Before printing, set up the page (paper size, margins, headers & footers, etc.) using {\cs33\b Page setup }from the { +\cs33\b Printing }cascade on the {\cs33\b File} menu. +\par Use {\cs33\b Page setup }from the {\cs33\b Printing }cascade on the {\cs33\b File} + menu to specify whether you want to print 'All contacts in view' (i.e. all the contacts that result from a search, or the entire contact list if you haven't done a search), or only the current one, and to indicate the number of copies required. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\pndec }\b\f5\lang2057 Display preferences (Contacts) +\par \pard\plain \s23\sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\cf13\lang2057 view preferences +\par \pard\plain \sa120\widctlpar{\*\pn \pnlvlcont\pndec }\f5\fs20\lang2057 To change the way Contacts looks use {\cs33\b View preferences} on the {\cs33\b Tools} menu. +\par To make more space in the Card view, change the width of the card or hide the labels. +\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 Use the {\cs33\b Flip screen layout} command on the {\cs33\b View} + menu to swap the position of the contact card and contact list. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Dialling from Contacts +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 telephoning DTMF dialing +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Phone numbers entered in Contacts can be \ldblquote dialled\rdblquote automatically, by tapping the {\cs33\b Dial} button on the {\cs33\b Toolbar}. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 +To be able to dial a phone number, it must be in a phone number label and the label may not contain any text. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Importing into Contacts +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 import contacts import vCard +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To import a vCard file into the contact list use the {\b More|Import contact} command on the {\cs33\b File} + menu and select the file to be imported. All labels from the imported vCard file will appear in the resulting contact entry. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Exporting from Contacts +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 export contacts export vCard +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To export a contact as a vCard file use the {\b More|Export contact} command on the {\cs33\b File} menu and select the location for the exported file. +\par To export a number of contacts into the same vCard file, display the set of contacts you want to export (by searching for a piece of text contained in all of them) before using the {\b More|Export contact} command. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Exchanging contacts using infrared +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 export contacts export vCard import contacts import vCard infrared palm pilot irobex +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 You can transfer a contact to another EPOC machine or to another device that supports IrObex and the vCard format. +\par Select the contact to be transferred and use the {\cs33\b Infrared} commands on the {\cs33\b Tools} menu to transfer the contact. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Synchronising contacts with a PC +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 synchronize synchronizing contacts synchronisation +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If you have EPOC Connect version 2.1 or higher, you can synchronise the contacts on your EPOC machine with a contacts database on a PC. +\par Refer to EPOC Connect documentation for details of how to synchronise contacts. +\par } \ No newline at end of file diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/Source/ER5Help/Calc-hlp.rtf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/symhelp/helpmodel/TestData/Source/ER5Help/Calc-hlp.rtf Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,295 @@ +{\rtf1\ansi \deff5\deflang1033{\fonttbl{\f1\froman\fcharset2\fprq2 Symbol;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f20\fnil\fcharset2\fprq2 Wingdings;} +{\f23\froman\fcharset2\fprq2 Webdings;}{\f25\fswiss\fcharset0\fprq2 Arial Narrow;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0; +\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\sa120\widctlpar +\f5\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 \sbasedon0\snext0 heading 1;}{\s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 +\sbasedon0\snext0 heading 2;}{\s3\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 \sbasedon0\snext0 heading 3;}{\s4\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 \sbasedon0\snext0 +heading 4;}{\s5\sa120\keepn\widctlpar \b\f5\fs20\lang2057 \sbasedon0\snext0 heading 5;}{\s6\sb240\sa60\widctlpar \i\f5\fs22\lang2057 \sbasedon0\snext0 heading 6;}{\s7\sb240\sa60\widctlpar \f5\fs20\lang2057 \sbasedon0\snext0 heading 7;}{ +\s8\sb240\sa60\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext0 heading 8;}{\s9\sb240\sa60\widctlpar \i\f5\fs18\lang2057 \sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11 +\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 \sbasedon29\snext15 Note;}{\s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext16 List Bullet;}{ +\s17\li284\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext17 List Continue;}{\s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext18 List Number;}{\*\cs19 \additive\super +\sbasedon10 endnote reference;}{\s20\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext20 List Bullet 2;}{\s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 \sbasedon0\snext0 +Hypertext Anchor;}{\*\cs22 \additive\b\f11\fs20 \sbasedon10 Key Name;}{\s23\sa120\widctlpar \f5\fs20\cf13\lang2057 \sbasedon0\snext23 Synonyms;}{\s24\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon18\snext24 List Manual;}{ +\s25\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext25 List Number 2;}{\s26\li566\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext26 List Continue 2;}{\s27\sa120\widctlpar +\f5\fs20\cf11\lang2057 \sbasedon0\snext27 Definition Term;}{\s28\sa120\widctlpar \f5\fs20\cf11\lang2057 \sbasedon27\snext28 Definition Definition;}{\s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}} +\f5\fs20\lang2057 \sbasedon0\snext29 Tip;}{\s30\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb ~}}\f5\fs20\lang2057 \sbasedon15\snext30 Important;}{\s31\fi-284\li568\sa120\widctlpar\tx284 \f5\fs20\lang2057 +\sbasedon25\snext31 List Manual 2;}{\s32\sa120\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext32 Comment;}{\*\cs33 \additive\b\f5\fs20 \sbasedon10 App Text;}{\*\cs34 \additive\scaps\f25\fs20\cf13 \sbasedon10 Graphic Link;}{ +\s35\sa120\widctlpar\tqc\tx4153\tqr\tx8306 \f5\fs20\lang2057 \sbasedon0\snext35 footer;}{\*\cs36 \additive\fs16 \sbasedon10 annotation reference;}{\s37\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext37 annotation text;}{ +\s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 \sbasedon0\snext38 Category UID;}{\s39\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 +\sbasedon0\snext39 Context;}{\s40\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 \sbasedon0\snext40 Index;}{\*\cs41 \additive\i\f5\fs20\ulnone\cf0\nosupersub +\sbasedon10 Context Comment;}}{\*\revtbl {Unknown;}{Symbian;}}{\info{\title "PROTEA HELP FILE - "," }{\author Symbian}{\operator Symbian}{\creatim\yr1997\mo4\dy23\hr10\min3}{\revtim\yr2000\mo4\dy25\hr16\min12}{\version2}{\edmins10}{\nofpages10}{\nofwords2704} +{\nofchars15413}{\*\company Psion SW}{\vern57395}}\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 \facingp\widowctrl\ftnbj\aenddoc\revisions\linkstyles\hyphcaps0\formshade \fet0{\*\template +C:\\apps\\MSOffice\\Templates\\Other Documents\\CSHELP.DOT}\sectd \psz9\linex0\headery709\footery709\colsx709 {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3 +\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}} +{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s32\sa120\widctlpar +\i\f5\fs20\lang2057 Author: Clive Whitear +\par Date: December 21{\super st} 1998 +\par Version: ER5 release +\par \pard\plain \s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 Calc{\revised\revauth1\revdttm1178913775 +\par }\pard\plain \s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 {\revised\revauth1\revdttm1178913804 0x100056B3} +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Calc: Quick start +\par \pard\plain \s21\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 {\deleted\revauth1\revdttm1178913804 calc.quick-start} +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 calculator adding machine +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Calc is the EPOC machine\rquote s calculator program. It has two views: a desktop calculator, Desk, and a scientific calculator, Sci. +\par The first time Calc is used the xxx view opens. To switch between the views: +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Tap {\cs33\b Desk} or {\cs33\b Sci} on the {\cs33\b Toolbar}, or use { +\cs33\b Desk} or {\cs33\b Scientific} from the {\cs33\b Switch view} cascade on the {\cs33\b View} menu. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 +The calculators are separate, so calculations carried out in one view do not appear in the other. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To perform a calculation: +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 +Press the number and operator buttons to enter the calculation. Tap the = button or press Enter to get the result. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 In the Desk view, use the up and down keys to browse the "till roll" to view previous calculations. +\par In the Scientific view, there are two types of function: +\par Prefix functions: these include all functions using sin, cos or tan, roots, e{\super x}, 10{\super x}, ln and log. For these, press the function button BEFORE entering the value to which the function refers. +\par Postfix functions: these include reciprocals, squares, cubes and x{\super y}. For these, press the function button AFTER entering the value to which the function refers. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Calculations in Desk view (Calc) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR clear operators till roll flip screen layout esc +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The Desk view is a desktop-style calculator with a single memory. Use it for ordinary calculations, and those involving percentages. +\par To perform a calculation in Desk: +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Enter the calculation, then tap =. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use the +, -, \'d7 and \'f7 operators. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 +There is no "operator precedence" in Desk view. Calculations are solved as you enter them. So, 10 + 5 \'d7 3 = 45 (not 25). +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To clear the display and end the current calculation, tap {\cs33\b AC} or press Esc. +\par To remove a number from the display without losing the rest of the current calculation: press C. +\par To delete the furthest right digit on the calculation line, press Del. +\par To change the sign of a number: tap the +/- button. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Tap {\cs33\b Shortcuts} on the {\cs33\b Toolbar} + to display the keyboard equivalents of on-screen buttons. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs33\b The "till roll": +\par }Desk prints results on a "till roll", displayed to one side of the keypad. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 +Use the scroll bar, the up and down arrow keys or the arrow keys combined with the Fn key to browse the till roll. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To clear the till roll use Clear till roll on the {\cs33\b Tools} menu. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Tap Flip layout on the {\cs33\b Toolbar}, or use {\cs33\b Flip screen layout} on the {\cs33\b View} menu, to swap the till roll to the other side of the screen. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 +'E' appears in the calculator display when there has been an error entering the calculation. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Memory in desk view (Calc) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR memories memory save in mr recall add to subtract from Min MR+ M- +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The Desk view has a single memory. If you need more, use the Scientific view; which has 26. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To store a number, tap {\cs33\b Min} or select {\cs33\b Save in} from the { +\cs33\b Memory }cascade on the {\cs33\b Tools} menu while the value is on the calculation line. An '{\cs33\b M}' will be displayed. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To retrieve a number, tap {\cs33\b MR} or select {\cs33\b Recall} from the {\cs33\b Memory} cascade on the {\cs33\b Tools} menu. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To add the current number to the stored number, tap {\cs33\b M+} or choose {\cs33\b Add to} from the {\cs33\b Memory }cascade on the {\cs33\b Tools} menu. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To subtract the current number from the stored number, tap {\cs33\b M-} or choose {\cs33\b Subtract} from from the {\cs33\b Memory} cascade on the {\cs33\b Tools} menu. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To clear the memory, select {\cs33\b Clear} from the {\cs33\b Memory} cascade on the {\cs33\b Tools} menu, or tap {\cs33\b Min} while 0 is on the calculation line. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Memories in Sci view (Calc) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR storing recall remember assign to show all clear all memory Mem +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The 26 memories in Scientific view are named A through to Z. You can assign a number to each of these names, and then incorporate the names into calculations. +\par \pard \fi-357\li357\sa120\widctlpar To assign a number to a memory: +\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 +Enter the number. If the number you want to store is currently displayed as a result, go on to the next step. +\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Tap the {\cs33\b ->} button, or select {\cs33\b Assign to} from the {\cs33\b Memories }cascade from the {\cs33\b Tools} menu and type the memory letter (upper case). +\par \pard\plain \s17\li284\sa120\widctlpar \f5\fs20\lang2057 Alternatively, tap {\cs33\b Mem}, choose the memory you want to use and press {\cs33\b Assign to}. +\par Press -> again to assign the same number to more than one memory. When you have finished specifying the memories you want the number to be stored in, tap {\cs33\b =}. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 +If you try to assign a calculation to a memory before pressing Enter to get the result, the scientific calculator will store the RESULT of that expression. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To display a list of memories, tap {\cs33\b Mem}, or use {\cs33\b Show all} from the {\cs33\b Memories} cascade on the {\cs33\b Tools} menu. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To use a stored number in a calculation, type the capital letter corresponding to the memory (this will normally require you to hold down Shift whilst pressing the appropriate key). Alternatively, tap { +\cs33\b Mem} to display the list of memories, highlight the memory you want, and tap {\cs33\b Select}. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To clear a memory, assign it a value of zero, e.g. 0\endash >A. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To clear all memories, select {\cs33\b Clear all} from the {\cs33\b Memories} cascade on the {\cs33\b Tools} menu. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Operator precedence (Calc) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR priority parenthesis parentheses +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Operator precedence is the order in which calculators solve expressions. This order affects the result of calculations. The two views have different rules for precedence: +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 +There is no operator precedence in the Desk view; calculations are solved as they are entered. So, 10 + 5 \'d7 3 = 45 (not 25). +\par \pard\plain \fi-357\li357\sa120\widctlpar \f5\fs20\lang2057 The Scientific view solves expressions in the following order: +\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s18\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Information in brackets. +\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Functions which come after the value they refer to, e.g. 'x!'. These are called "postfix" functions. +\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Powers (e.g. squares and cubes). +\par {\pntext\pard\plain\f5\fs20\lang2057 4.\tab}Implicit multiplication before a memory value, e.g. 30A. +\par {\pntext\pard\plain\f5\fs20\lang2057 5.\tab}Functions which come before the value they refer to, e.g. 'sin'. These are called "prefix" functions. +\par {\pntext\pard\plain\f5\fs20\lang2057 6.\tab}Implicit multiplication before prefix functions, such as 5sin, or before brackets, as in 3(10+5). +\par {\pntext\pard\plain\f5\fs20\lang2057 7.\tab}Multiplication and division equal, solved left to right. +\par {\pntext\pard\plain\f5\fs20\lang2057 8.\tab}Addition and subtraction equal, solved left to right. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Percentage calculations (Calc) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR percentages %age +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use the % button in the Desk view to calculate percentages. +\par E.g., to calculate 30% of 80: +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Enter 80 \'d7 30, then tap %. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The % button can be used in a number of other ways: +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To increase 80 by 30%, enter 80 + 30, then tap %. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To decrease 80 by 30%, enter 80 - 30, tap %. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To calculate what % 80 is of 400, enter 80 \'f7 400, then tap %. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To find the number that 80 is 25% of, enter 80 \'f7 25, then tap %. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Keypresses (Calc) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR keyboard +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The default keypresses are: +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Tap {\cs33\b Shortcuts} on the {\cs33\b Toolbar} + to see a list of shortcut keypresses. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Use the up and down arrow keys to scroll the till roll in the Desk view or to move through the last 10 calculations in the Scientific view. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Use the M key to change the sign of a number. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Scientific view (Calc) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR esc +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The Scientific view is a powerful scientific calculator with 26 memories for storing values. Use this view for calculations involving trigonometry, logarithms etc. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 +To perform a calculation, enter the expression and tap = or press Enter to display the result. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 In the Scientific view, there are two types of function: +\par Prefix functions: these include all functions using sin, cos or tan, roots, e{\super x}, 10{\super x}, ln and log. For these, press the function button BEFORE entering the value to which the function refers. +\par Postfix functions: these include reciprocals, squares, cubes and x{\super y}. For these, press the function button AFTER entering the value to which the function refers. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To clear the calculator display, tap {\cs33\b AC} or press Esc. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}To remove the item to the left of the cursor, press Del. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Tap {\cs33\b Shortcuts} on the {\cs33\b Toolbar} to display th +e keyboard equivalents of on-screen buttons. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Scientific buttons (Calc) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR keys +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The scientific keypad buttons perform the following actions: +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 {\cs33\b inv} + inverts the next scientific operation, so a square becomes a square root etc. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b ( )} brackets for separating and assigning precedence to parts of expressions. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Ans} inserts the last answer at the cursor. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b hyp} sets the hyperbolic function for sin, cosine and tangent. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b sin}, {\cs33\b cos}, {\cs33\b tan} calculate the sine, cosine or tangent of a number. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b x!} calculates the factorial of a number. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs34\scaps\f25\cf13 archive=Calc name=squareroot} calculates the square root of a number. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs34\scaps\f25\cf13 archive=Calc name=squareroot}{\super 3} calculates the cube root of a number. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs34\scaps\f25\cf13 archive=Calc name=squareroot}{\super X} calculates the xth root of a number. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b ex} calculates e raised to the power of a given number. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b 10x} calculates 10 raised to the power of a given number. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b ->} assigns a value to memory. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Mem} displays all memories. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b ln} calculates the natural log (base e) of a number. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b log} calculates the log (base 10) or a number. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs34\scaps\f25\cf13 archive=Calc name=pisymbol} inserts the pi symbol at the cursor. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b exp} inserts an exponent. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Previous calculations (Calc) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR answers results incorporate edit previous edit next +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 In the Desk view previous calculations are shown on the till roll. Look over these using the scroll bar or arrow keys. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 To clear the till roll, select {\cs33\b Clear till roll} on the {\cs33\b +Tools} menu. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 In the Scientific view: +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Use the up and down arrow keys, or {\cs33\b Edit previous} and {\cs33\b +Edit next} on the {\cs33\b Edit} menu, to move backwards and forwards through the last 10 calculations. To repeat any of these calculations press = while it is on the calculation line. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 +When re-using expressions containing 'Ans', the value inserted for 'Ans' will be the most recent answer calculated. This means using an old expression again may not give the original result. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Re-using results & calculations (Calc) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR incorporate edit previous edit next +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To edit and re-use previous calculations in the Scientific view, use the up and down keys, or {\cs33\b Edit previous} and {\cs33\b Edit next} on the {\cs33\b Edit} + menu, to move backwards and forwards through the list of previous expressions. These are displayed one by one on the calculation line. When the required calculation is displayed, remove or change any part of it and proceed as normal. +\par To start a new expression with the answer to the last calculation, enter the rest of the calculation as though the answer was already written at the start. The calculator prefixes the expression with 'Ans'. +\par To insert the last answer anywhere in an expression, with the cursor at the appropriate point, tap {\cs33\b Ans}. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Trigonometric functions (Calc) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR arctangent arccosine trigs asine acosine atangent arcsine +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The trigonometric functions in the Scientific view include: +\par \tab Sin \tab aSin +\par \tab Cos\tab aCos +\par \tab Tan\tab aTan +\par To calculate the trigometric sine, cosine or tangent of a number, tap {\cs33\b sin}, {\cs33\b cos} or {\cs33\b tan}, enter the value and tap {\cs33\b =}. +\par To calculate the inverse trigonometric sine (arcSine), arcCosine or arcTangent of a value, tap {\cs33\b inv} once to depress it. Tap {\cs33\b sin}, {\cs33\b cos} or {\cs33\b tan}, enter the value and tap {\cs33\b =}. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 +Results of trigonometric calculations vary according to the angle format selected. To choose between degrees, radians and gradients, use {\cs33\b Formats} on the {\cs33\b Tools} menu. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Hyperbolic functions +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR hyps arctanh arccosh arcsinh +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The hyperbolic functions in the Scientific view include: +\par \tab Sinh\tab aSinh +\par \tab Cosh\tab aCosh +\par \tab Tanh\tab aTanh +\par To calculate the hyperbolic sine, cosine or tangent of a value, tap {\cs33\b hyp} once to depress it. Tap {\cs33\b sin}, {\cs33\b cos} or {\cs33\b tan}, enter the value and tap {\cs33\b =}. +\par To calculate the inverse hyperbolic sine (hyperbolic arcSine), arcCosine or arcTangent of a value, tap {\cs33\b hyp} and {\cs33\b inv} once each to depress them, then tap {\cs33\b sin}, {\cs33\b cos} or {\cs33\b tan}. Enter the value and tap {\cs33\b =}. + +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Logarithms (Calc) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR natural logs etothex e to the x common logs logarithmic ln +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To calculate a common logarithm (base 10) in the Scientific view: +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Tap {\cs33\b log}, enter the value you want to find the log of and tap { +\cs33\b =}. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To calculate a natural logarithm (base e), tap {\cs33\b ln}, enter the value you want to find the natural log of and tap {\cs33\b =}. +\par To calculate e to the power of a given value, tap the {\cs33\b ex} button, enter the value you want to find e to the power of and tap {\cs33\b =}. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Angle formats (Calc) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR degrees radians gradients formats +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The Scientific view displays angles in degrees, radians or gradients. An abbreviation: DEG, RAD or GRAD, appears in the calculator display. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 The angle units chosen affect the outcome of trigonometric calculations. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The relationships between the three types of unit are: 360 degrees = 400 gradients = 2\'d7Pi radians. +\par To change the current angle units, tap on the abbreviation in the display, or use {\cs33\b Formats} on the {\cs33\b Tools} menu. +\par To convert results displayed in one format to another format tap on the format abbreviation or use {\cs33\b Formats} on the {\cs33\b Tools} menu while the result is displayed. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Number formats (Calc) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR normal fixed scientific formats +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 The Scientific view can display numbers in three formats: Normal, Fixed and Scientific. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 {\cs33\b Normal}: suitable for most calculations. Numbers are present +ed in standard notation, with decimal places and exponents if they are required. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Fixed}: numbers are always displayed with a specified number of digits after the decimal point. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}{\cs33\b Scientific}: useful for very large or small numbers. Numbers are displayed as a single digit to the left of the decimal point, a specified number of significant figures, and then an exponent. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To change the number format, select {\cs33\b Formats} on the {\cs33\b Tools} + menu and choose the format you want. If you choose Fixed or Scientific, set the number of decimal places or significant figures in the box below. +\par To convert an answer to a different format, change the number format while the result is in the display. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Squares, cubes & powers (Calc) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR power second third second third fourth fifth biquadratic 10x x2 x3 x^y +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use the Scientific view for calculating squares and cubes. +\par To calculate a square, enter the number you want to square, then tap the {\cs33\b x2} button and tap {\cs33\b =}. +\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 When squaring a negative number, put it in brackets. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To calculate a cube, enter the number you want to cube, then tap the {\cs33\b x3} button and tap {\cs33\b =}. +\par To raise a number to a given power, enter the number you want to raise and tap the {\cs33\b x^y} button. Enter the power to which you want your value to be raised, e.g. 12x^y4 raises 12 to the 4th power, and tap {\cs33\b =}. +\par You can raise ten to a given power to save you entering long numbers. This is sometimes known as the common antilogarithm. +\par To raise ten to a given power, tap the {\cs33\b 10x} button, enter the power you want to raise 10 to, and tap {\cs33\b =}. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Reciprocals (Calc) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR one over x x-1 +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To calculate the reciprocal of a number in the Scientific view: +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Enter the value you want to find the reciprocal of, tap the {\cs33\b x-1} + button, and tap {\cs33\b =}. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Square & other roots (Calc) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR square root cube root +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To calculate the square root of a number in the Scientific view, tap the square root button {\cs34\scaps\f25\cf13 archive=Calc name=squareroot} +, enter the number of which you want to find the square root and tap =. +\par To calculate a cube root, tap the cube root button {\cs34\scaps\f25\cf13 archive=Calc name=squareroot}{\super 3}, enter the number of which you want to find the cube root and tap {\cs33\b =}. +\par To calculate the xth root of a number, enter the number corresponding to x, the root you want to find. E.g. 4 for the 4th root, 5 for the 5th root and so on. Tap the xth root button {\cs34\scaps\f25\cf13 archive=Calc name=squareroot}{\super X} + and enter the number you want to find the x root of. Tap {\cs33\b =}. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Factorials (Calc) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR x! +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To calculate the factorial of a number in the Scientific view, enter the number of which you want to find the factorial, tap the {\cs33\b x!} button, then tap {\cs33\b =}. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 +A factorial is the result of multiplying all the whole numbers from a given starting number down to one. So, the factorial of 4 (written as 4!) is +\par \pard\plain \s17\li284\sa120\widctlpar \f5\fs20\lang2057 4 \'d7 3 \'d7 2 \'d7 1 = 24 +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Factorials are useful for calculating how many different ways things can be arranged. For example, if you know the four digits of a security code, but cannot remember their orde +r, you now know that there are 24 different combinations to try. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s15\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 +Factorials are the product of all POSITIVE integers from a number down to one, so you cannot calculate the factorial of a negative number or of a fraction. The factorial of zero is 1. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Exponents (Calc) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use the exponents function in the Scientific view to express long numbers more concisely. +\par Exponents are of the form: +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 +A value between 1 and ten (the "mantissa"), followed by an E, followed by another value. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If the second value is +positive, it indicates the number of places the decimal point of the first value should be moved to the right to get the number as it would be written in standard notation. Use positive exponents for large numbers. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 +To enter a positive exponent, enter the first part of the number, normally as a decimal fraction. Tap the {\cs33\b exp} button. An 'E' will be displayed. Enter the number of places the decimal point should be moved to the right. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If the second value is negative, it indicates the number of places the decimal point should be moved left. Use negative exponents for small numbers. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 +To enter a negative exponent, enter the first part of the number, tap exp and then tap the {\cs33\b +/-} button. Enter the number of places the decimal point should be moved to the left. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Maths error message (Calc) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR problems errors mistakes +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 A 'Maths error' message indicates a problem with the mathematical logic of an expression. +\par Check, e.g., that you have not: +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Tried to calculate the square root, factorial or log of a negative number. + +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Tried to calculate the factorial of a fraction. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Entered an expression involving division by zero. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Tap {\cs33\b AC} to clear the message, or press the up arrow key to return to the expression. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Overflow error message (Calc) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR problems errors mistakes large numbers +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 An 'Overflow error' message appears when a result: +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Is out of the calculator's range. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Cannot be displayed in the present number format. If you are using Fixed format, try decreasing the number of decimal places or changing the number format to Normal or Scientific using {\cs33\b Formats} + on the {\cs33\b Tools} menu. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Tap {\cs33\b AC} to clear the message, or press the up arrow key to return to the expression. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Syntax error message (Calc) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR errors problems parenthesis parentheses mistakes +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 A 'Syntax error' indicates that the calculator cannot understand the expression entered. Check that you have not: +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Missed an opening or closing bracket. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Used two operators in a row. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Included two decimal points in a number. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Used the subtract operator as a negative sign, or vice versa. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Put the number before the function in a trigonometric or logarithmic expression. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Tap {\cs33\b AC} to clear the message, or press the up key to return to the expression. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Copying & pasting numbers (Calc) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR cut paste +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s16\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 +In the Desk view you can copy whatever is currently on the calculation line using {\cs33\b Copy} on the {\cs33\b Edit} menu. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}In the Scientific view copy the last result calculated using {\cs33\b Copy} on the {\cs33\b Edit} menu. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Paste numbers from other programs into either view, using {\cs33\b Paste} on the {\cs33\b Edit} menu. You can also copy and paste between the two calculator views. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Display preferences (Calc) +\par \pard\plain \s23\sa120\widctlpar \f5\fs20\cf13\lang2057 CALCULATOR show toolbar flip layout lefthanded left handed +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To swap the right side of the calculator screen over to the left, and vice versa, tap {\cs33\b Flip layout} on the {\cs33\b Toolbar}. +\par To hide the Toolbar, deselect {\cs33\b Show toolbar} on the {\cs33\b View} menu. Choose this command again to return the {\cs33\b Toolbar} to the display. +\par +\par } \ No newline at end of file diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/Source/ER5Help/Calc/PiSymbol.mbm Binary file symhelp/helpmodel/TestData/Source/ER5Help/Calc/PiSymbol.mbm has changed diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/Source/ER5Help/Calc/SquareRoot.mbm Binary file symhelp/helpmodel/TestData/Source/ER5Help/Calc/SquareRoot.mbm has changed diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/Source/ER5Help/Calc/readme.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/symhelp/helpmodel/TestData/Source/ER5Help/Calc/readme.txt Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,36 @@ +This directory contains a Protea sketch file of: + + a square root symbol + a pi symbol + + +for insertion into the Protea Word version of the file CALC-HLP.DOC held on this drive. + +The square root symbol should be inserted as it is in the following places: + + Scientific buttons (Calc) topic: in place of the start of the line + "Sqrt calculates the square root of a number." + + Square & other roots (Calc) topic: in place of "the square root button" + in the second line. + + +It needs to be inserted prefixed with a superscript 3 in the following +places: + + Scientific buttons (Calc) topic: in place of the start of the line + "Cbrt calculates the cube root of a number." + + Square & other roots (Calc) topic: in place of "the cube root button" in the + second point. + +It needs to be inserted prefixed with a superscript x in the following places: + + Scientific buttons (Calc) topic: in place of the start of the line + "Xthrt calculates the xth root of a number." + + Square & other roots (Calc) topic: in place of "the xth root button" in the + last point. + +The pi symbol should be inserted in the Scientific buttons (Calc) topic in front of 'inserts +the pi symbol at the cursor'. \ No newline at end of file diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/Source/ER5Help/Calc/squareroot.jpg Binary file symhelp/helpmodel/TestData/Source/ER5Help/Calc/squareroot.jpg has changed diff -r 000000000000 -r 1f04cf54edd8 symhelp/helpmodel/TestData/Source/ER5Help/Comm-hlp.rtf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/symhelp/helpmodel/TestData/Source/ER5Help/Comm-hlp.rtf Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,259 @@ +{\rtf1\ansi \deff5\deflang1033{\fonttbl{\f1\froman\fcharset2\fprq2 Symbol;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f20\fnil\fcharset2\fprq2 Wingdings;} +{\f23\froman\fcharset2\fprq2 Webdings;}{\f25\fswiss\fcharset0\fprq2 Arial Narrow;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0; +\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\sa120\widctlpar +\f5\fs20\lang2057 \snext0 Normal;}{\s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 \sbasedon0\snext0 heading 1;}{\s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 +\sbasedon0\snext0 heading 2;}{\s3\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\fs28\lang2057 \sbasedon0\snext0 heading 3;}{\s4\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072 \b\f5\lang2057 \sbasedon0\snext0 +heading 4;}{\s5\sa120\keepn\widctlpar \b\f5\fs20\lang2057 \sbasedon0\snext0 heading 5;}{\s6\sb240\sa60\widctlpar \i\f5\fs22\lang2057 \sbasedon0\snext0 heading 6;}{\s7\sb240\sa60\widctlpar \f5\fs20\lang2057 \sbasedon0\snext0 heading 7;}{ +\s8\sb240\sa60\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext0 heading 8;}{\s9\sb240\sa60\widctlpar \i\f5\fs18\lang2057 \sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvl11 +\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 \sbasedon0\snext15 List Bullet;}{\s16\li284\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext16 List Continue;}{\s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvl10 +\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext17 List Number;}{\*\cs18 \additive\super \sbasedon10 endnote reference;}{\s19\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl11\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}} +\f5\fs20\lang2057 \sbasedon0\snext19 List Bullet 2;}{\s20\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 \sbasedon0\snext0 Hypertext Anchor;}{\*\cs21 \additive\b\f11\fs20 \sbasedon10 Key Name;}{\s22\sa120\widctlpar \f5\fs20\cf13\lang2057 \sbasedon0\snext22 +Synonyms;}{\s23\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon17\snext23 List Manual;}{\s24\fi-284\li568\sa120\widctlpar{\*\pn \pnlvl10\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 \sbasedon0\snext24 List Number 2;}{ +\s25\li566\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext25 List Continue 2;}{\s26\sa120\widctlpar \f5\fs20\cf11\lang2057 \sbasedon0\snext26 Definition Term;}{\s27\sa120\widctlpar \f5\fs20\cf11\lang2057 \sbasedon26\snext27 Definition Definition;}{ +\s28\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 \sbasedon0\snext28 Tip;}{\s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 +\sbasedon28\snext29 Note;}{\s30\fi-283\li283\sa120\widctlpar{\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb ~}}\f5\fs20\lang2057 \sbasedon29\snext30 Important;}{\s31\fi-284\li568\sa120\widctlpar\tx284 \f5\fs20\lang2057 \sbasedon24\snext31 +List Manual 2;}{\s32\sa120\widctlpar \i\f5\fs20\lang2057 \sbasedon0\snext32 Comment;}{\*\cs33 \additive\b\f5\fs20 \sbasedon10 App Text;}{\*\cs34 \additive\scaps\f25\fs20\cf13 \sbasedon10 Graphic Link;}{\s35\sa120\widctlpar\tqc\tx4153\tqr\tx8306 +\f5\fs20\lang2057 \sbasedon0\snext35 footer;}{\*\cs36 \additive\fs16 \sbasedon10 annotation reference;}{\s37\sa120\widctlpar \f5\fs20\lang2057 \sbasedon0\snext37 annotation text;}{\s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 +\sbasedon0\snext38 Category UID;}{\s39\fi-283\li283\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb \'a2}}\f5\fs20\lang2057 \sbasedon0\snext39 Context;}{\s40\fi-283\li283\sa120\widctlpar\brdrb +\brdrs\brdrw15\brsp20 {\*\pn \pnlvl11\pnf23\pnstart1\pnindent283\pnhang{\pntxtb i}}\f5\fs20\lang2057 \sbasedon0\snext40 Index;}{\*\cs41 \additive\i\f5\fs20\ulnone\cf0\nosupersub \sbasedon10 Context Comment;}}{\*\revtbl {Unknown;}{Symbian;}}{\info +{\title "PROTEA HELP FILE - "," }{\author Symbian}{\operator Symbian}{\creatim\yr1997\mo2\dy11\hr11\min7}{\revtim\yr2000\mo4\dy25\hr16\min19}{\version2}{\edmins1}{\nofpages8}{\nofwords1832}{\nofchars10444}{\*\company Psion SW}{\vern57395}} +\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 \facingp\widowctrl\ftnbj\aenddoc\revisions\linkstyles\hyphcaps0\formshade \fet0{\*\template C:\\apps\\MSOffice\\Templates\\Other Documents\\CSHELP.DOT}\sectd +\psz9\linex0\headery709\footery709\colsx709 {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4 +\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (} +{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s32\sa120\widctlpar \i\f5\fs20\lang2057 Author: Clive Whitear +\par Date: December 21{\super st} 1998 +\par Version: ER5 release +\par \pard\plain \s1\sb360\sa240\keepn\widctlpar \b\f5\fs32\lang2057\kerning28 Comms{\revised\revauth1\revdttm1178913809 +\par }\pard\plain \s38\sb360\sa240\keepn\widctlpar \b\f5\fs32\cf9\lang2057\kerning28 {\revised\revauth1\revdttm1178913809 0x}{\revised\revauth1\revdttm1178913811 10000087} +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Comms: Quick start +\par \pard\plain \s20\sa120\widctlpar \f5\fs20\ul\cf13\lang1024 {\deleted\revauth1\revdttm1178913809 comms.quick-start +\par }\pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 terminal emulation online offline +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Comms provides terminal emulation and file transfer to and from other computers. +\par To exchange files with another computer, the other computer must have communications software that supports terminal emulation, that can transmit and receive ASCII files, or that is capable of XMODEM or YMODEM file transfer. +\par \ldblquote Scripts\rdblquote can also be created to automate dialling, logging on and file transfer. +\par Further information about Comms can be obtained from the Comms documentation, available from xxxxxxx. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Using Comms +\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 link cable off-line on-line on line off line online offline +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 If you have EPOC CONNECT use the link cable supplied to connect the EPOC machine to the serial port o +f the other computer. Set up the EPOC machine's port to have the same settings as the port on the computer you are connected to using {\cs33\b Set up} on the {\cs33\b Toolbar}. +\par The EPOC machine can also be connected to a remote computer via a modem, e.g. to access electronic mail or a bulletin board. In this case you need a modem adaptor. See your supplier for details. +\par When Comms is started the terminal emulation screen is displayed. The status bar at the bottom of the screen shows if you are online or offline. Each character +typed in will be transmitted via the serial port. When a character is received it is displayed on the screen. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 +If the desktop link is on then Comms will be offline when opened. To go on-line, go to the System screen and switch the link off, using {\cs33\b Link to desktop} on the {\cs33\b Tools} menu. Then go back to Comms and select {\cs33\b Port active} on the { +\cs33\b Transfer} menu. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Scripts & names (Comms) +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use Comms to create "Scripts" to automate dialling, logging on and file transfer, by using the commands on the {\cs33\b Scripts} menu. +\par Set up script variables (or "names"), e.g. for log-on details, and password protect them using the commands on the {\cs33\b Names} menu. +\par To copy sample scripts to a selected folder, select {\cs33\b Create standard files} on the {\cs33\b Tools} menu. The sample scripts can then be used directly, or edited to suit your needs. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Setting up (Comms) +\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 handshaking flow control stop bits parity teletype VT100 +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Select {\cs33\b Communication settings} on the {\cs33\b Tools} menu. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Set the {\cs33\b Use comms port} line to 'Serial port 0\rquote + if you're using a docking cable and adaptor connection to a modem or 'Infrared\rquote to use infrared communications. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Set the {\cs33\b Baud rate} line to the data communication speed. It should match the speed setting on the remote machine, and should not exceed the maximum speed of the modem being used. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 +Modern modems can sense and adjust to the transmission speed. With older modems, it may be necessary to specify the exact speed of the connection. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 Set the {\cs33\b Data bits}, {\cs33\b Stop bits} and {\cs33\b Parity} + lines to the same settings as the remote machine. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}Use the tick boxes on the {\cs33\b Handshaking} + page to select the flow control required.For a modem connection, XON/XOFF, DSR/DTR and RTS/CTS should normally be set, but this depends on the remote setup and the modem manufacturer\rquote s guidelines. For \lquote Hardware\rquote + flow control, tick the \lquote RTS/CTS\rquote box. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Comms is initially set to emulate a VT100 terminal. To select a teletype terminal, select Terminal emulation on the Tools menu and set the {\cs33\b Terminal to emulate} + line to 'TTY'. Set the screen width and height as the number of characters. +\par Comms is initially set to add a \ldblquote line feed\rdblquote character to incoming and outgoing \ldblquote carriage returns\rdblquote . To change this select {\cs33\b Translate codes} on the {\cs33\b Tools} menu, then use the {\cs33\b +Add LF to incoming CR} and {\cs33\b Add LF to outgoing CR} lines. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Connecting to another machine (Comms) +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To communicate between the EPOC machine and, say, a PC: +\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Connect the serial linkcable to the serial port and to a COM port on the PC. +\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Make sure neither machine is running software that uses the communications ports (e.g. EPOC CONNECT on the PC). Make sure the EPOC machine has the {\cs33\b Link to desktop} + switched off, and is not trying to carry out an infrared transfer. +\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Start Comms on the EPOC machine, and run a Terminal application on the PC. If using Windows 95, this may be HyperTerminal. +\par {\pntext\pard\plain\f5\fs20\lang2057 4.\tab} +Set both pieces of software to use the appropriate ports, and to use identical settings for Baud rate, Data bits, Stop bits, Parity and Handshaking. The two machines are now ready to exchange characters and files. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Connecting via a modem (Comms) +\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 pause pausing +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To communicate using a modem: +\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 +Connect the EPOC machine to the modem using the Docking cable and a modem adaptor lead. Connect the modem to a telephone socket. +\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Use {\cs33\b Link to desktop} on the {\cs33\b Tools} menu in the System screen and set the {\cs33\b Link} line to 'Off'. +\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s28\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 When you want to turn the link back on again later, you should close Comms first. + +\par \pard\plain \s23\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 3.\tab Set the communication settings appropriate to the modem\rquote s maximum speed, and identical to the remote machine\rquote +s settings. Check that the Baud rate used does not exceed the maximum for the two machines. +\par 4.\tab To start communications with the modem, type "AT" and press Enter. +\par \pard\plain \s16\li284\sa120\widctlpar \f5\fs20\lang2057 The modem will return \lquote OK\rquote , in the Terminal emulation screen. If it doesn\rquote +t, make sure all cables are connected correctly and the communication settings are appropriate to the modem according to the manufacturer\rquote s instructions. +\par \pard\plain \s23\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 5.\tab Type the modem initialisation string appropriate to the modem. This may be \lquote ATZ\rquote or \lquote AT&F\rquote ; check the modem manual for details. +\par 6.\tab Type \lquote ATDT\rquote followed by the telephone number (including any dial-out prefix required) of the remote modem. When the other modem answers, \lquote CONNECT\rquote + will be displayed in the Terminal window, and you can begin to log in. This may require pressing the Enter key a few times to get a \ldblquote prompt\rdblquote (a line of text sent by the remote machine, such as \lquote username:\rquote + which waits for a command or a response). +\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s28\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 If characters from a remote host are received too quickly to read, use {\cs33\b Pause} + on the {\cs33\b Transfer} menu to temporarily stop incoming information. Use {\cs33\b Pause} again to resume the transfer. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 +If handshaking cannot be used, data may be lost if the EPOC machine is paused while the other machine is sending information. To avoid this, set a lower Baud rate. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Connecting via infrared (Comms) +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To communicate with another EPOC machine, an infrared-enabled PC or an infrared-enabled modem: +\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select {\cs33\b Communication settings} on the {\cs33\b Tools} + menu and set the comms port to \lquote Infrared\rquote . +\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}When the other machine is ready to communicate with the EPOC machine via infrared, continue as you would normally using the serial link cable. +\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s28\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 +Use Comms to transfer multiple files between two EPOC machines using YModem (batch) protocol (multiple files can't be transferred using normal infrared transfer). +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Sending & receiving files (Comms) +\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 capture to file transferring files +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Before files can be transferred, you must establish a connection to the remote machine. +\par \pard \fi-357\li357\sa120\widctlpar {\cs33\b To send a file:} +\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select {\cs33\b Send file} on the {\cs33\b Transfer} menu, or tap {\cs33\b Send file} + on the Toolbar. +\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Select the transfer protocol in the {\cs33\b Send file} dialog. Make sure it is one the remote machine supports and is prepared to receive. +\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Use the {\cs33\b Name}, {\cs33\b Folder} and {\cs33\b Disk} lines to locate the file to be sent. +\par {\pntext\pard\plain\f5\fs20\lang2057 4.\tab}Press {\cs33\b OK} on the EPOC machine and prepare the other machine to receive a file. If possible, perform these actions simultaneously. +\par \pard\plain \fi-357\li357\sa120\widctlpar \f5\fs20\lang2057 {\cs33\b To send more than one file:} +\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 +Create a folder specifically for the files to be sent, place all the relevant files in it and select {\cs33\b Send file} on the {\cs33\b Transfer} menu. +\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Select the \lquote YModem (batch)\rquote protocol, then select the folder containing the files to be sent in the {\cs33\b Folder} line. +\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Press the Tab key in the {\cs33\b Name} line, hold down Shift while using the down arrow key to select all the files in the folder, then press Enter. Press {\cs33\b OK} + and prepare the remote machine to receive a file. +\par \pard\plain \fi-357\li357\sa120\widctlpar \f5\fs20\lang2057 {\cs33\b To receive files:} +\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select {\cs33\b Receive file} on the {\cs33\b Transfer} menu, or tap {\cs33\b +Receive file} on the Toolbar. +\par {\pntext\pard\plain\f5\fs20\lang2057 2.\tab}Select the transfer protocol in the {\cs33\b Receive file} dialog. Make sure it is the one the remote machine will use to send the file. Use Ymodem (batch) protocol for multiple files. +\par {\pntext\pard\plain\f5\fs20\lang2057 3.\tab}Choose a folder for the file to be saved in. If a file is being received using either the ASCII or XModem protocol, specify a filename (YModem transfers take the filename from the sending machine). +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Remember to include filename extensions where appropriate. +\par \pard\plain \s23\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 4.\tab Press {\cs33\b OK} on the EPOC machine and instruct the remote machine to send the file. If possible, perform these actions simultaneously. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 To stop transfer at any time, tap the {\cs33\b Cancel} button in the + file transfer dialog. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 {\cs33\b {\*\bkmkstart _Toc389538043}{\*\bkmkstart _Toc389564382}Receiving information with no protocol{\*\bkmkend _Toc389538043}{\*\bkmkend _Toc389564382}: +\par }If information is being received as plain ASCII characters, e.g. e-mail from a server, it can be "captured" to a file. To do this: +\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select {\cs33\b Capture to file} on the {\cs33\b Transfer} menu and type filename. + +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}\pard\plain \s15\fi-284\li284\sa120\widctlpar\tx284{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent283\pnhang{\pntxtb \'b7}}\f5\fs20\lang2057 +For the new information to be added to the end of an existing file, enter the name of the existing file and tick the {\cs33\b Append} box. +\par {\pntext\pard\plain\f1\fs20\lang2057 \'b7\tab}For incoming control characters to be recorded in angled brackets, e.g. \lquote <13>\rquote for a carriage return, tick the {\cs33\b Debug} box. +\par \pard\plain \s23\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 2.\tab To end the capture, deselect the {\cs33\b Capture to file} menu option. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Captures are stored as plain text files. A plain text file can be viewed in Word, by using the {\cs33\b More|Import text file} command on the {\cs33\b File} menu. +\par If problems are encountered when transferring information with no protocol, try setting both computers to use a lower Baud rate. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Creating & running scripts (Comms) +\par \pard\plain \s22\sa120\widctlpar \f5\fs20\cf13\lang2057 run script create standard files edit script stop script +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Use a "Scripts" to automate dialling, logging on and file transfer, by using the commands on the {\cs33\b Scripts} menu. +\par {\pntext\pard\plain\f5\fs20\lang2057 1.\tab}\pard\plain \s17\fi-284\li284\sa120\widctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent283\pnhang{\pntxta .}}\f5\fs20\lang2057 Select {\cs33\b Create new script} from the {\cs33\b Scripts} + menu. Enter a name and location for the script and press {\cs33\b OK}. +\par {\pntext\pard\plain\f20\fs20\lang2057 ?\tab}\pard\plain \s29\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb ?}}\f5\fs20\lang2057 Script names must have a \lquote .scr\rquote + extension. When a script is saved, Comms will add \lquote .scr\rquote to the end of its name. +\par \pard\plain \s23\fi-284\li284\sa120\widctlpar\tx284 \f5\fs20\lang2057 2.\tab Comms will move to the script editor and you can type in the script. +\par 3.\tab Tap {\cs33\b Save} to return to the main Comms view. +\par {\pntext\pard\plain\f20\fs20\lang2057 F\tab}\pard\plain \s28\fi-283\li283\sa120\widctlpar{\*\pn \pnlvlblt\pnf20\pnstart1\pnindent283\pnhang{\pntxtb F}}\f5\fs20\lang2057 +When creating a new script for, e.g., a connection to a BBS system, it can be useful to first record the logging in process using {\cs33\b Capture to file }on the {\cs33\b Transfer} + menu. This records the prompts sent from the remote machine when connecting, and can be used as the starting point for your script. +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 To access the EPOC machine's example script, select {\cs33\b Create standard files} on the {\cs33\b Tools} menu. Select a folder for Comms to place the example script in, and press {\cs33\b OK}. +\par To edit the example script or one of your own, select {\cs33\b Open} on the {\cs33\b Scripts} menu, and choose the script to be worked on. Press {\cs33\b OK}. +\par To check a script, select {\cs33\b Syntax check} on the {\cs33\b Scripts} menu and specify the script to be checked. +\par {\cs33\b To run a script: +\par }Select {\cs33\b Start Script} from the {\cs33\b Scripts} menu, and choose the appropriate script in the {\cs33\b Start} {\cs33\b script} dialog. +\par The name of the running script is displayed at the bottom of the Terminal emulation screen. +\par {\cs33\b To stop a script:} +\par Select {\cs33\b Stop script} from the {\cs33\b Scripts} menu. +\par \pard\plain \s2\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072 \b\f5\lang2057 Script commands (Comms) +\par \pard\plain \sa120\widctlpar \f5\fs20\lang2057 Here is a summary of commands for the Script language. +\par & see Send +\par // +\par ALERT [,] +\par AND +\par AS see Open +\par ASC () +\par BEEP , +\par BREAK +\par CALL +\par CAPTURE ,[APPEND[,DEBUG]] +\par CAPTURE OFF +\par CATCH [INCLUDE/EXCLUDE] ,, , , GOTO