idlefw/plugins/shortcutplugin/inc/taiscutparser.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:54:17 +0200
changeset 0 79c6a41cd166
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 2005-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:  Shortcut definition parser.
*
*/


#ifndef TAISCUTPARSER_H
#define TAISCUTPARSER_H
#include <uri16.h>                  // For TUriParser16
#include <AknsItemID.h> 

// =============================================================================
// ========================= Supported URI schemes =============================
/** URI scheme for local application shortcuts */
_LIT( KScutURISchemeLocalApp, "localapp" );

/** URI sheme for normal web addresses */
_LIT( KScutURISchemeHttp,     "http" );
/**  URI sheme for secure web addresses */
_LIT( KScutURISchemeHttps,    "https" );
// =============================================================================

// =============================================================================
// ============= Application shortcut formatting literals ======================

/** Literal to format an application shortcut without parameters */
_LIT( KScutFormatApplication,                "localapp:0x%x" );

/** Literal to format an application shortcut with parameter name and value */
_LIT( KScutFormatApplicationWithParams,      "localapp:0x%x?%S=%S" );

/** Literal to format an application shortcut with a single parameter string */
_LIT( KScutFormatApplicationWithParamString, "localapp:0x%x?%S" );

// =============================================================================

// =============================================================================
// ============ Shortcut parameter name and value literals =====================

/** Parameter name for view ids */
_LIT( KScutParamNameView,           "view" );

/** Parameter name for remote mailboxes. Specific to messaging shortcuts */
_LIT( KScutParamNameMailbox,        "mailbox" );

/** Parameter name for new message and new email. Specific to messaging shortcuts */
_LIT( KScutParamNameNew,            "new" );

/** Parameter value for new message shortcuts. */
_LIT( KScutParamValueMsg,           "msg" );

/** Parameter value for new email shortcuts */
_LIT( KScutParamValueEmail,         "email" );

/** Parameter value for new syncml mail shortcuts */
_LIT( KScutParamValueSyncMLMail,    "syncmlmail" );

/** Parameter value for new postcard shortcuts */
_LIT( KScutParamValuePostcard,      "postcard" );

/** Parameter value for new audio message shortcuts */
_LIT( KScutParamValueAudioMsg,      "audiomsg" );

/** Parameter value for the connectivity status view shortcut */
const TUid KScutParamValueConnectivityView = { 0x10207250 };

/** Parameter name for enable keylock */
_LIT( KScutParamNameOn,             "on" );

/** Parameter name for missed calls view */
_LIT( KScutParamValueMissedCalls,   "missed" );

/** Parameter name for dialled calls view */
_LIT( KScutParamValueDialledCalls,  "dialled" );

/** Parameter name for received calls view */
_LIT( KScutParamValueReceivedCalls, "received" );

/** Parameter name for logs main view */
_LIT( KScutParamValueMainView,      "counters" );

/** Parameter name for bookmark ids */
_LIT( KScutParamNameBookmark,       "bkm" );

/** Parameter name for icon id in skin
  Format localapp:0xUID?iconid=majorid;minorid;optionalColourGroup */   
_LIT( KScutParamNameIconSkinId,       "iconid" );

/** Parameter name for icon path. Left here for backward
    compatibility.
    Format localapp:0xUID?iconmifpath=mif_file.mif;index */
_LIT( KScutParamNameIconMifPath,       "iconmifpath" );

/** Parameter name for icon path. MBM and MIF supported
    Format localapp:0xUID?iconmifpath=mif_file.mif;index */
_LIT( KScutParamNameIconPath,       "iconpath" );
/** Parameter name for custom URL title.
    Format http://www.url.com?customtitle=Here is my great title */
_LIT( KScutParamNameCustomTitle,       "customtitle" );
/** Parameter name for CBA icon
    Format localapp:0xUID?iconid=majorid;minorid;optionalColourGroup&cba=1 */   
_LIT( KScutParamNameCBAIcon,       "cba" );

/** Parameter name for toolbar icon */
_LIT( KScutParamNameToolbarIcon,       "toolbar" );

/** Shortcut definition parameter for "no effect" */
_LIT( KScutParamNoEffect,           "noeffect" );

// =============================================================================
// =============================================================================
// ============ Shortcut parameter name and value literals =====================

/** Alias for messaging shortcuts */
_LIT( KScutTargetAliasMessaging, "msg" );

/** Alias for keylock shortcuts */
_LIT( KScutTargetAliasKeylock,   "keylock" );

/** Alias for logs shortcuts */
_LIT( KScutTargetAliasLogs,      "logs" );

/** Alias for voice dialer shortcuts */
_LIT( KScutTargetAliasVoiceDial, "voicedial" );

// =============================================================================
/** Maximum length of shortcut definition. Used when composing a definition */
const TInt KMaxDefinitionLength = 100;

/** Shortcut parameter value separator character */
const TText KParamValueSeparator = '=';

/** Shortcut parameter next param separator */
const TText KParamNextSeparator = '&';

_LIT( KScutMIFExtension, ".mif" );  
_LIT( KScutMBMExtension, ".mbm" );  
_LIT( KScutSkinItemSeparator, ";" );

/**
 * Shortcut definition components
 */
enum TScutDefComponent
{
	EScutDefScheme,    
	EScutDefTarget,        
	EScutDefParamName,        
	EScutDefParamValue,    
	EScutDefParamNameAndValue,    
	EScutDefComplete
};

/**
 * Shortcut types
 */
enum TShortcutType
{
	EScutUnknown,
	EScutAnyType = 0,
	EScutNoEffect,
	EScutApplication,
	EScutApplicationView,
	EScutApplicationWithParams,
	EScutNewMessage,
	EScutNewEmail,
	EScutNewSyncMLMail,
	EScutNewPostcard,
	EScutNewAudioMsg,
	EScutNewMsgType,
	EScutMailbox,
	EScutChangeTheme,
	EScutWebAddress,
	EScutBookmark,
	EScutKeylock,
	EScutLogsMissedCallsView,
	EScutLogsDialledCallsView,
	EScutLogsReceivedCallsView,
	EScutLogsMainView,
	EScutConnectivityStatusView,
	EScutApplicationManagerView
};

/**
 * Icon type
 */
enum TShortcutIconType
{
	EScutIconNone,
	EScutIconSkin,
    EScutIconMif,
    EScutIconMbm
};

enum TShortcutIconDestination
{
	EScutDestinationNormal,
	EScutDestinationSoftkey,
	EScutDestinationToolbar
};

class TAiScutIcon
{
	public:
        /**
        * Index of the icon in icon file
        */
        TInt iIconId;

        /**
        * Path to the icon file
        */
		TFileName iPath;
		 
		/**
		 * Skin item id of the icon
		 */
		TAknsItemID iSkinId;
		
		/**
		 * Colour groups id in skin
		 */
		TInt iColourGroup;
		
		/**
		 * Type of the icon. From skin or from mif
		 */
		TShortcutIconType iType;
		
		/**
		 * AppUid that this icon belongs to
		 */
		TUid iAppUid;
		
		/**
		 * Possible view id
		 */
		TUid iViewId;
		
		/**
		 * Type of the shortcut
		 */
		TShortcutType iShortcutType;
		
		/**
		 * Is this CBA specific icon
		 */
		TShortcutIconDestination iDestination;
		
};

/**
 *  Shortcuf definition parser
 *
 *  @since S60 v3.2
 */
class TAiScutParser
{

public:
	TAiScutParser();
	
	/**
	 * Static utility function to parse an uid from the given descriptor
	 *
	 * @since S60 v3.2
	 * @param aString The String to parse
	 * @return Parsed application uid
	 */
	 static TUid ParseUid( const TDesC& aDesC );
	
	/**
	 * Parses a shortcut definition
	 *
	 * @since S60 v3.2
	 * @param aDefinition Shortcut definition
	 * @return System wide error code. KErrCorrupt if not recognized
	 */
	 TInt Parse( const TDesC& aDefinition );
	
	/**
	 * Checks if the shortcut definition was valid
	 *
	 * @since S60 v3.2
	 * @return ETrue if valid, EFalse if not
	 */
	 TBool IsValid() const;
	
	/**
	 * Returns the shortcut target type
	 *
	 * @since S60 v3.2
	 * @return Shortcut target type
	 */
	 TShortcutType Type() const;
	 
	/**
	 * Returns the possible shortcut overriding icon 
	 * that has been defined in the URL either with the format 
	 *  localapp:0xUID?iconid=majorid;minorid;colourgroup
	 * or
	 *  localapp:0xUID?iconmifpath=mif_file.mif;index
	 *
	 * @since S60 v3.2
	 * @return Shortcut icon override
	 */
	 TAiScutIcon Icon() const;
	
	/**
	 * Returns the shortcut target uid. Used for application shortcuts
	 *
	 * @since S60 v3.2
	 * @return Shortcut target uid
	 */
	 TUid Uid() const;
	 
	/**
	 * Returns a shortcut definition component value
	 *
	 * @since S60 v3.2
	 * @param aComponent Shortcut definition component
	 * @return Pointer descriptor to component value
	 */
	 TPtrC Get( TScutDefComponent aComponent ) const;
	 
	/**
	 * Composes a shortcut definition string from given parameters
	 *
	 * @since S60 v3.2
	 * @param aDes On return, the shortcut definition. Transfers ownership
	 * @param aUid Application uid
	 * @param aParamName Parameter name
	 * @param aParamValue Parameter value
	 */
	 void ComposeL( HBufC*& aDes, const TUid aUid,
	 	const TDesC& aParamName, const TDesC& aParamValue );
	
	/**
	 * Composes a shortcut definition string from given parameters
	 *
	 * @since S60 v3.2
	 * @param aDes On return, the shortcut definition. Transfers ownership
	 * @param aUid Application uid
	 * @param aParamString Parameter string
	 */
	 void ComposeL( HBufC*& aDes, const TUid aUid,
	 	const TDesC& aParamString );
	 	
    /**
     * Creates a checksum for the given aDefinition. This is used
     * in URL matching so that no string need to be stored. Checksum is 
     * done checksum = positionInString * charValue
     *
     * @since S60 v3.2 
     * @param aDefinition The definition to calculate the checksum from
     * @return TInt The checksum
     */
    TInt ChecksumForString( const TDesC& aDefinition) const; 

    /**
     * Removes icon definitions from the given string. Icon definitions are
     * KScutParamNameIconSkinId, KScutParamNameIconSkinPath, KScutParamNameCBAIcon
     * KScutParamNameCustomTitle
     * 
     * @since S60 v3.2
     */
    void RemoveExtraDefinitionsL( TDes &aString ) const;
    /**
     * Parses the custom title from the current definition.
     * Returns ETrue on success and places the extracted 
     * custom title to the aTarget
     * 
     * @param aTarget Where to place the custom title. It is callers responsibility
     *  to provide a descriptor with enough room for the custom title.
     * 
     * @return KErrNone if everything is fine, KErrNotFound
     *  if there is no custom title in the definition, KErrNoMemory in
     *  case there is not enough room to place the result (low memory situations
     *  or too small descriptor provided)
     */
    TInt CustomTitle( TDes& aTarget ) const;

protected:
private:

	/**
	 * Checks if an alias was used in shortcut definition and parses an uid from it
	 *
	 * @since S60 v3.2
	 * @return ETrue if alias was found and parsed, EFalse if not
	 */
	 TBool ParseAlias();
	 
	/**
	 * Parses the possible application shortcut parameters
	 *
	 * @since S60 v3.2
	 */
	 void ParseParams();
	 
private:  // data
	/**
	 * URI Parser
	 */
	 TUriParser iUriParser;
	 
	/**
	 * Pointer to the full shortcut definition
	 */
	 TPtrC iDefinition;
	 
	/**
	 * Shortcut target type
	 */
	 TShortcutType iType;
	 
	/**
	 * Shortcut application uid
	 */
	 TUid iUid;
	 
	 /**
	  * Pointer to shortcut parameter name
	  */
	  TPtrC iParamName;
	  
	 /**
	  * Pointer to shortcut parameter value
	  */
	  TPtrC iParamValue;
	 /**
	  * Shortcut icon that has been given with the
	  * URL-string
	  */
	  TAiScutIcon iIcon;
	  };
	  
#endif // TAISCUTPARSER_H

// End of File.