epoc32/include/mw/mtmuibas.h
branchSymbian2
changeset 3 e1b950c65cb4
parent 2 2fe1408b6811
child 4 837f303aceeb
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/epoc32/include/mw/mtmuibas.h	Wed Mar 31 12:27:01 2010 +0100
     1.3 @@ -0,0 +1,527 @@
     1.4 +// Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
     1.5 +// All rights reserved.
     1.6 +// This component and the accompanying materials are made available
     1.7 +// under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
     1.8 +// which accompanies this distribution, and is available
     1.9 +// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
    1.10 +//
    1.11 +// Initial Contributors:
    1.12 +// Nokia Corporation - initial contribution.
    1.13 +//
    1.14 +// Contributors:
    1.15 +//
    1.16 +// Description:
    1.17 +//
    1.18 +
    1.19 +#if !defined(__MTMUIBAS_H__)
    1.20 +#define __MTMUIBAS_H__
    1.21 +
    1.22 +#if !defined(__MSVSTD_H__)
    1.23 +#include <msvstd.h>
    1.24 +#endif
    1.25 +#if !defined(__MTCLBASE_H__)
    1.26 +#include <mtclbase.h>
    1.27 +#endif
    1.28 +
    1.29 +// Forward references
    1.30 +class CMsvSession;
    1.31 +class CMsvOperation;
    1.32 +class CCoeEnv;
    1.33 +
    1.34 +///////////////////////////////////
    1.35 +// CBaseMtmUi - MTMUi base API   //
    1.36 +///////////////////////////////////
    1.37 +class CBaseMtmUi : public CBase
    1.38 +/** Provides MTM-specific user interaction, such as editing, viewing, deleting, 
    1.39 +and copying of message entries. 
    1.40 +
    1.41 +Message client applications use the class to access such functionality polymorphically. 
    1.42 +MTM implementers implement a derived class to provide such functionality for 
    1.43 +their message protocol.
    1.44 +
    1.45 +The base class is largely an interface definition: it implements little important 
    1.46 +functionality itself. For implementers, this documentation defines conditions 
    1.47 +that any implementation must fulfil, plus suggested semantics for behaviour. 
    1.48 +This still leaves many decisions in the hands of the implementer. A key design 
    1.49 +time activity is to define how the particular characteristics of the implemented 
    1.50 +protocol are best mapped to the interface. As this class is concerned with 
    1.51 +user interfaces, implementers should be sensitive to the look and feel of 
    1.52 +the target phone.
    1.53 +
    1.54 +Many functions are required to return an instance of a CMsvOperation-derived 
    1.55 +class to provide asynchronous control and monitoring to the caller of the 
    1.56 +operation being performed. 
    1.57 +
    1.58 +The following are some significant groups of functions:
    1.59 +
    1.60 +Entry manipulation functions: OpenL(), CloseL(), EditL(), and ViewL() are 
    1.61 +all available in two overloaded versions. The first version operates on the 
    1.62 +current context. The second version operates upon groups of entries specified 
    1.63 +by a CMsvEntrySelection argument. All entries must be in same folder and all 
    1.64 +of the correct MTM type. The context may change after calling these functions. 
    1.65 +Concrete User Interface MTMs can legally ignore any of the entries within 
    1.66 +the selection - many may, for example, simply open the first entry.
    1.67 +
    1.68 +Copying and moving functions: the CopyToL(), CopyFromL(), MoveToL(), and MoveFromL() 
    1.69 +functions are concerned with copying and moving entries to and from remote 
    1.70 +servers. MTMs can implement these functions to provide any user interaction 
    1.71 +needed before copying or moving can proceed, such as dialogs to confirm settings; 
    1.72 +and, any protocol-specific setup steps that can be done at this stage: for 
    1.73 +example, a fax MTM could render messages into the required image format.
    1.74 +
    1.75 +Progress information functions: DisplayProgressSummary() and GetProgress() 
    1.76 +convert MTM-specific progress information about some asynchronous operation, 
    1.77 +such as message sending, to a human-readable form. The progress information 
    1.78 +to pass into these functions is, in general, obtained from an on-going CMsvOperation 
    1.79 +by calling CMsvOperation::Progress(). The nature of any information provided 
    1.80 +is MTM-specific. 
    1.81 +
    1.82 +MTM-specific UI functions: MTM components can offer protocol-specific functionality 
    1.83 +not provided by base class interface functions. MTM components define IDs 
    1.84 +that correspond to each protocol-specific operation offered, and implement 
    1.85 +the InvokeSyncFunctionL() and InvokeAsyncFunctionL() functions to allow clients 
    1.86 +to access these operations by passing in the appropriate ID. Two functions 
    1.87 +are provided to allow the MTM component to offer both synchronous and asynchronous 
    1.88 +functionality. Message client applications can dynamically add user-interface 
    1.89 +features for these operations using CBaseMtmUiData::MtmSpecificFunctions(). 
    1.90 +MTM developers should document the IDs if they wish to make the operations 
    1.91 +available to clients. 
    1.92 +@publishedAll
    1.93 +@released
    1.94 +*/
    1.95 +	{
    1.96 +public:
    1.97 +	//  --- enums ---
    1.98 +	/** Progress information buffer length. */
    1.99 +	enum {
   1.100 +	/** Defines the maximum buffer length used in GetProgress() to hold progress information. */
   1.101 +	EProgressStringMaxLen=255};
   1.102 +	//
   1.103 +	// --- Set up functionality ---
   1.104 +	IMPORT_C void SetPreferences(TUint aFlags);
   1.105 +	IMPORT_C TUint Preferences() const;
   1.106 +	//
   1.107 +	// --- Destruction ---
   1.108 +	IMPORT_C virtual ~CBaseMtmUi();
   1.109 +	//
   1.110 +	// --- Accessor functions ---
   1.111 +	IMPORT_C TUid Type() const;
   1.112 +	IMPORT_C CBaseMtm& BaseMtm() const;
   1.113 +	//
   1.114 +	// --- Functions NOT dependent on the current context ---
   1.115 +	IMPORT_C virtual CMsvOperation* CreateL(const TMsvEntry& aEntry, CMsvEntry& aParent, TRequestStatus& aStatus);
   1.116 +	//
   1.117 +	// --- Functions dependent on the current context ---
   1.118 +	/** Opens an entry. 
   1.119 +	
   1.120 +	The behaviour that this implies is dependent on the current context:
   1.121 +	
   1.122 +	1. for message contexts, OpenL() is the equivalent of EditL(), or for read-only 
   1.123 +	messages, ViewL(). Whether opening of remote messages is allowed is MTM-specific.
   1.124 +	
   1.125 +	2. for service contexts, the function may initiate a connection to obtain the 
   1.126 +	service contents from the server, completing asynchronously
   1.127 +	
   1.128 +	3. for remote folder contexts, dependent on implementation, the function may 
   1.129 +	initiate a connection to obtain the folder contents from the server, completing 
   1.130 +	asynchronously
   1.131 +	
   1.132 +	The returned CMsvOperation object completes when opening is complete.
   1.133 +	
   1.134 +	Requirements:
   1.135 +	
   1.136 +	If opening entries is not supported, implementations should leave with KErrNotSupported. 
   1.137 +	Otherwise, implementations should:
   1.138 +	
   1.139 +	1. check aEntry.iType.iUid to ensure that they can open the requested type of 
   1.140 +	entry and leave with code KErrNotSupported if they cannot
   1.141 +	
   1.142 +	2. return a CMsvOperation-derived object to provide asynchronous control and 
   1.143 +	monitoring of the operation
   1.144 +	
   1.145 +	3. for remote messages, typically, copy the messages to the Inbox
   1.146 +	
   1.147 +	@param aStatus The request status to be completed when the operation has finished 
   1.148 +	
   1.149 +	@leave KErrNotSupported The User Interface MTM does not support open operations, 
   1.150 +	or opening is inappropriate to the current context 
   1.151 +	@leave Other Dependent on implementation 
   1.152 +	@return If successful, this is an asynchronously completing open operation. 
   1.153 +	If failed, this is a completed operation, with status set to the relevant 
   1.154 +	error code. */
   1.155 +	virtual CMsvOperation* OpenL(TRequestStatus& aStatus) = 0; 
   1.156 +	/** Closes an entry. The behaviour that this implies is dependent on the current 
   1.157 +	context:
   1.158 +	
   1.159 +	1. for message contexts, this usually closes any launched editors or viewers
   1.160 +	
   1.161 +	2. for folder contexts, leaves with KErrNotSupported
   1.162 +	
   1.163 +	3. for service contexts, causes closure of a connection to a server
   1.164 +	
   1.165 +	The returned CMsvOperation object completes when closing is complete.
   1.166 +	
   1.167 +	Requirements:
   1.168 +	
   1.169 +	Implementations should:
   1.170 +	
   1.171 +	1. check aEntry.iType.iUid to ensure that they can close the requested type of 
   1.172 +	entry and leave with code KErrNotSupported if they cannot
   1.173 +	
   1.174 +	2. return a CMsvOperation-derived object to provide asynchronous control and 
   1.175 +	monitoring of the operation
   1.176 +	
   1.177 +	@param aStatus The request status to be completed when the operation has finished 
   1.178 +	
   1.179 +	@leave KErrNotSupported The User Interface MTM does not support close operations, 
   1.180 +	or closing is inappropriate to the current context 
   1.181 +	@leave Other Dependent on implementation 
   1.182 +	@return If successful, this is an asynchronously completing close operation. 
   1.183 +	If failed, this is a completed operation, with status set to the relevant 
   1.184 +	error code. */
   1.185 +	virtual CMsvOperation* CloseL(TRequestStatus& aStatus) = 0;
   1.186 +	/** Edits an entry. 
   1.187 +	
   1.188 +	The behaviour that this implies is dependent on the current 
   1.189 +	context:
   1.190 +	
   1.191 +	1. for message contexts, this usually launches the appropriate message editor, 
   1.192 +	or returns status KErrReadOnly if the message is not editable
   1.193 +	
   1.194 +	2. for remote folder contexts, launches a settings dialog, for example to rename 
   1.195 +	the folder, completing asynchronously
   1.196 +	
   1.197 +	3. for service contexts, launches a service settings dialog, completing asynchronously
   1.198 +	
   1.199 +	The returned CMsvOperation object completes when editing is complete.
   1.200 +	
   1.201 +	Requirements:
   1.202 +	
   1.203 +	Implementations should:
   1.204 +	
   1.205 +	1. check aEntry.iType.iUid to ensure that they can edit the requested type of 
   1.206 +	entry and leave with code KErrNotSupported if they cannot
   1.207 +	
   1.208 +	2. return a CMsvOperation-derived object to provide asynchronous control and 
   1.209 +	monitoring of the operation
   1.210 +	
   1.211 +	3. for remote messages, typically, copy the messages to the Inbox
   1.212 +	
   1.213 +	4. follow the leave protocols described in Leave considerations below
   1.214 +	
   1.215 +	@param aStatus The request status to be completed when the operation has finished 
   1.216 +	@leave KErrNotSupported The User Interface MTM does not support edit operations, 
   1.217 +	or editing is inappropriate to the current context 
   1.218 +	@leave KErrReadOnly Context is read-only 
   1.219 +	@leave Other Dependent on implementation 
   1.220 +	@return If successful, this is an asynchronously completing edit operation. 
   1.221 +	If failed, this is a completed operation, with status set to the relevant 
   1.222 +	error code. */
   1.223 +	virtual CMsvOperation* EditL(TRequestStatus& aStatus) = 0;// Launches editor/settings dialog as appropriate  
   1.224 +	/** Views an entry. 
   1.225 +	
   1.226 +	For message contexts, this usually launches the appropriate 
   1.227 +	message viewer. Other context types leave with KErrNotSupported. The returned 
   1.228 +	CMsvOperation object completes when viewing is complete.
   1.229 +	
   1.230 +	Requirements:
   1.231 +	
   1.232 +	Implementations should:
   1.233 +	
   1.234 +	1. check aEntry.iType.iUid to ensure that they can view the requested type of 
   1.235 +	entry and leave with code KErrNotSupported if they cannot
   1.236 +	
   1.237 +	2. return a CMsvOperation-derived object to provide asynchronous control and 
   1.238 +	monitoring of the operation
   1.239 +	
   1.240 +	@param aStatus The request status to be completed when the operation has finished 
   1.241 +	@leave KErrNotSupported The User Interface MTM does not support view operations, 
   1.242 +	or viewing is inappropriate to the current context 
   1.243 +	@leave Other Dependent on implementation 
   1.244 +	@return If successful, this is an asynchronously completing view operation. 
   1.245 +	If failed, this is a completed operation, with status set to the relevant 
   1.246 +	error code. */
   1.247 +	virtual CMsvOperation* ViewL(TRequestStatus& aStatus) = 0;// Launches viewer/settings dialog as appropriate  
   1.248 +	//
   1.249 +	// --- Actions upon message selections ---
   1.250 +	// --- Selections must be in same folder and all of the correct MTM type ---
   1.251 +	// --- Context may change after calling these functions ---
   1.252 +	/** Opens a selection of entries. 
   1.253 +	
   1.254 +	The behaviour that this implies is dependent on the current context:
   1.255 +	
   1.256 +	1. for message contexts, OpenL() is the equivalent of EditL(), or for read-only 
   1.257 +	messages, ViewL(). Whether opening of remote messages is allowed is MTM-specific.
   1.258 +	
   1.259 +	2. for service contexts, the function may initiate a connection to obtain the 
   1.260 +	service contents from the server, completing asynchronously
   1.261 +	
   1.262 +	3. for remote folder contexts, dependent on implementation, the function may 
   1.263 +	initiate a connection to obtain the folder contents from the server, completing 
   1.264 +	asynchronously
   1.265 +	
   1.266 +	The returned CMsvOperation object completes when opening is complete.
   1.267 +	
   1.268 +	Requirements:
   1.269 +	
   1.270 +	If opening entries is not supported, implementations should leave with KErrNotSupported. 
   1.271 +	Otherwise, implementations should:
   1.272 +	
   1.273 +	1. check aEntry.iType.iUid to ensure that they can open the requested type of 
   1.274 +	entry and leave with code KErrNotSupported if they cannot
   1.275 +	
   1.276 +	2. return a CMsvOperation-derived object to provide asynchronous control and 
   1.277 +	monitoring of the operation
   1.278 +	
   1.279 +	3. for remote messages, typically, copy the messages to the Inbox
   1.280 +	
   1.281 +	@param aStatus The request status to be completed when the operation has finished 
   1.282 +	@param aSelection Selection of message entries 
   1.283 +	@leave KErrNotSupported The User Interface MTM does not support open operations, 
   1.284 +	or opening is inappropriate to the current context 
   1.285 +	@leave Other Dependent on implementation 
   1.286 +	@return If successful, this is an asynchronously completing open operation. 
   1.287 +	If failed, this is a completed operation, with status set to the relevant 
   1.288 +	error code. */
   1.289 +	virtual CMsvOperation* OpenL(TRequestStatus& aStatus, const CMsvEntrySelection& aSelection) = 0; 
   1.290 +	/** Closes a selection of entries. 
   1.291 +	
   1.292 +	The behaviour that this implies is dependent on the current context:
   1.293 +	
   1.294 +	1. for message contexts, this usually closes any launched editors or viewers
   1.295 +	
   1.296 +	2. for folder contexts, leaves with KErrNotSupported
   1.297 +	
   1.298 +	3. for service contexts, causes closure of a connection to a server
   1.299 +	
   1.300 +	The returned CMsvOperation object completes when closing is complete.
   1.301 +	
   1.302 +	Requirements:
   1.303 +	
   1.304 +	Implementations should:
   1.305 +	
   1.306 +	1. check aEntry.iType.iUid to ensure that they can close the requested type of 
   1.307 +	entry and leave with code KErrNotSupported if they cannot
   1.308 +	
   1.309 +	2. return a CMsvOperation-derived object to provide asynchronous control and 
   1.310 +	monitoring of the operation
   1.311 +	
   1.312 +	@param aStatus The request status to be completed when the operation has finished 
   1.313 +	@param aSelection Selection of message entries 
   1.314 +	@leave KErrNotSupported The User Interface MTM does not support close operations, 
   1.315 +	or closing is inappropriate to the current context 
   1.316 +	@leave Other Dependent on implementation 
   1.317 +	@return If successful, this is an asynchronously completing close operation. 
   1.318 +	If failed, this is a completed operation, with status set to the relevant 
   1.319 +	error code. */
   1.320 +	virtual CMsvOperation* CloseL(TRequestStatus& aStatus, const CMsvEntrySelection& aSelection) = 0;
   1.321 +	/** Edits a selection of entries. 
   1.322 +	
   1.323 +	The behaviour that this implies is dependent on the current context:
   1.324 +	
   1.325 +	1. for message contexts, this usually launches the appropriate message editor, 
   1.326 +	or returns status KErrReadOnly if the message is not editable
   1.327 +	
   1.328 +	2. for remote folder contexts, launches a settings dialog, for example to rename 
   1.329 +	the folder, completing asynchronously
   1.330 +	
   1.331 +	3. for service contexts, launches a service settings dialog, completing asynchronously
   1.332 +	
   1.333 +	The returned CMsvOperation object completes when editing is complete.
   1.334 +	
   1.335 +	Requirements:
   1.336 +	
   1.337 +	Implementations should:
   1.338 +	
   1.339 +	1. check aEntry.iType.iUid to ensure that they can edit the requested type of 
   1.340 +	entry and leave with code KErrNotSupported if they cannot
   1.341 +	
   1.342 +	2. return a CMsvOperation-derived object to provide asynchronous control and 
   1.343 +	monitoring of the operation
   1.344 +	
   1.345 +	3. for remote messages, typically, copy the messages to the Inbox
   1.346 +	
   1.347 +	4. follow the leave protocols described in Leave considerations below
   1.348 +	
   1.349 +	@param aStatus The request status to be completed when the operation has finished 
   1.350 +	@param aSelection Selection of message entries 
   1.351 +	@leave KErrNotSupported The User Interface MTM does not support edit operations, 
   1.352 +	or editing is inappropriate to the current context 
   1.353 +	@leave KErrReadOnly Context is read-only 
   1.354 +	@leave Other Dependent on implementation 
   1.355 +	@return If successful, this is an asynchronously completing edit operation. 
   1.356 +	If failed, this is a completed operation, with status set to the relevant 
   1.357 +	error code. */
   1.358 +	virtual CMsvOperation* EditL(TRequestStatus& aStatus, const CMsvEntrySelection& aSelection) = 0;// Launches editor/settings dialog as appropriate  
   1.359 +	/** Views a selection of entries. 
   1.360 +	
   1.361 +	For message contexts, this usually launches the appropriate 
   1.362 +	message viewer. Other context types leave with KErrNotSupported. The returned 
   1.363 +	CMsvOperation object completes when viewing is complete.
   1.364 +	
   1.365 +	Requirements:
   1.366 +	
   1.367 +	Implementations should:
   1.368 +	
   1.369 +	1. check aEntry.iType.iUid to ensure that they can view the requested type of 
   1.370 +	entry and leave with code KErrNotSupported if they cannot
   1.371 +	
   1.372 +	2. return a CMsvOperation-derived object to provide asynchronous control and 
   1.373 +	monitoring of the operation
   1.374 +	
   1.375 +	@param aStatus The request status to be completed when the operation has finished 
   1.376 +	@param aSelection Selection of message entries 
   1.377 +	@leave KErrNotSupported The User Interface MTM does not support view operations, 
   1.378 +	or viewing is inappropriate to the current context 
   1.379 +	@leave Other Dependent on implementation 
   1.380 +	@return If successful, this is an asynchronously completing view operation. 
   1.381 +	If failed, this is a completed operation, with status set to the relevant 
   1.382 +	error code. */
   1.383 +	virtual CMsvOperation* ViewL(TRequestStatus& aStatus, const CMsvEntrySelection& aSelection) = 0;// Launches viewer/settings dialog as appropriate  
   1.384 +	/** Cancels the sending of specified messages.
   1.385 +	
   1.386 +	@param aStatus The request status to be completed when the operation has finished 	
   1.387 +	@param aSelection Selection of message entries 
   1.388 +	@leave KErrNotSupported The User Interface MTM does not support cancel operations, 
   1.389 +	or cancelling is inappropriate to the current context 
   1.390 +	@leave Other Dependent on implementation 
   1.391 +	@return If successful, this is an asynchronously completing cancel operation. 
   1.392 +	If failed, this is a completed operation, with status set to the relevant 
   1.393 +	error code. */
   1.394 +	virtual CMsvOperation* CancelL(TRequestStatus& aStatus, const CMsvEntrySelection& aSelection) = 0;
   1.395 +	//
   1.396 +	// --- Deletion ---
   1.397 +	// --- Deletes entries from the current context, which must be a folder or service of the relevant MTM ---
   1.398 +	IMPORT_C virtual CMsvOperation* DeleteFromL(const CMsvEntrySelection& aSelection, TRequestStatus& aStatus);//Deletes selection from current context
   1.399 +	// --- Un-deletes entries from the current context, which must be a folder or service of the relevant MTM ---
   1.400 +	IMPORT_C virtual CMsvOperation* UnDeleteFromL(const CMsvEntrySelection& aSelection, TRequestStatus& aStatus);//Un-deletes selection from current context
   1.401 +	// --- Deletes service, which need not be the current context ---
   1.402 +	IMPORT_C virtual CMsvOperation* DeleteServiceL(const TMsvEntry& aService, TRequestStatus& aStatus); // default implementation simply delegates to the server
   1.403 +	//
   1.404 +	// --- Message responding ---
   1.405 +	/** Creates a reply message to the current message context, and allows the user 
   1.406 +	to edit it through a message-type specific editor. 
   1.407 +	
   1.408 +	Some MTMs may support inclusion of elements, specified by aPartlist, from the original message in the reply. 
   1.409 +	The parent for the new entry is specified in aDestination. The returned CMsvOperation 
   1.410 +	object completes when editing the reply is complete. On completion, the context 
   1.411 +	is set to the reply message.
   1.412 +	
   1.413 +	Requirements:
   1.414 +	
   1.415 +	A typical implementation for this function would include the following steps: 
   1.416 +	
   1.417 +	1. create a new reply entry by calling CBaseMtm::ReplyL()
   1.418 +	
   1.419 +	2. call EditL() allow the user to edit the reply
   1.420 +	
   1.421 +	3. return a CMsvOperation-derived object to provide asynchronous control and 
   1.422 +	monitoring of the operation
   1.423 +	
   1.424 +	If message replies are not supported, implementations should leave with KErrNotSupported.
   1.425 +	
   1.426 +	@param aDestination The entry to which to assign the reply 
   1.427 +	@param aPartlist Defines the parts which are to be copied from the original 
   1.428 +	message into the reply. See CBaseMtm::ReplyL() for details. 
   1.429 +	@param aCompletionStatus The request status to be completed when the operation 
   1.430 +	has finished 
   1.431 +	@leave KErrNotSupported The User Interface MTM does not support reply operations 
   1.432 +	@leave Other Dependent on implementation 
   1.433 +	@return If successful, this is an asynchronously completing reply operation. 
   1.434 +	If failed, this is a completed operation, with status set to the relevant 
   1.435 +	error code. */
   1.436 +	virtual CMsvOperation* ReplyL(TMsvId aDestination, TMsvPartList aPartlist, TRequestStatus& aCompletionStatus) = 0;
   1.437 +	/**
   1.438 +	Creates a forwarded message from the current message context, and allows the user to edit it through a message-type 
   1.439 +	specific editor. 
   1.440 +	
   1.441 +	Some MTMs may support inclusion of elements, specified by aPartlist, from the original message in the 
   1.442 +	forwarded message. The parent for the new entry is specified in aDestination. The returned CMsvOperation 
   1.443 +	object completes when editing the forwarded message is complete. On completion, the context is set to the forwarded message.
   1.444 +
   1.445 +	Requirements:
   1.446 +
   1.447 +	A typical implementation for this function would include the following steps:
   1.448 +
   1.449 +	1. create a new forwarded message entry by calling CBaseMtm::ForwardL()
   1.450 +
   1.451 +	2. call EditL() allow the user to edit the forwarded message
   1.452 +
   1.453 +	3. return a CMsvOperation-derived object to provide asynchronous control and monitoring of the operation
   1.454 +
   1.455 +	If forwarded messages are not supported, implementations should leave with KErrNotSupported.
   1.456 +
   1.457 +	@return	If successful, this is an asynchronously completing forward message operation. If failed, 
   1.458 +	this is a completed operation, with status set to the relevant error code. 	
   1.459 +	@param aDestination The entry to which to assign the forwarded message 
   1.460 +	@param aPartList Defines the parts which are to be copied from the original message into the forwarded message 
   1.461 +	@param aCompletionStatus The request status to be completed when the operation has finished 
   1.462 +	@leave KErrNotSupported The User Interface MTM does not support message forwarding operations 
   1.463 +	@leave Other Dependent on implementation 
   1.464 +	*/
   1.465 +	virtual CMsvOperation* ForwardL(TMsvId aDestination, TMsvPartList aPartList, TRequestStatus& aCompletionStatus) = 0;
   1.466 +
   1.467 +	//
   1.468 +	// --- Copy and move functions ---
   1.469 +	// --- Context should be set to folder or entry of this MTM ---
   1.470 +	// --- Default implementations imply call the relevant CMsvEntry functions ---
   1.471 +	IMPORT_C virtual CMsvOperation* CopyToL(const CMsvEntrySelection& aSelection, TRequestStatus& aStatus);// Context should be MTM folder/service to copy to
   1.472 +	IMPORT_C virtual CMsvOperation* MoveToL(const CMsvEntrySelection& aSelection, TRequestStatus& aStatus);// Context should be MTM folder/service to move to
   1.473 +	IMPORT_C virtual CMsvOperation* CopyFromL(const CMsvEntrySelection& aSelection, TMsvId aTargetId, TRequestStatus& aStatus);// Context should be MTM folder/service to copy from
   1.474 +	IMPORT_C virtual CMsvOperation* MoveFromL(const CMsvEntrySelection& aSelection, TMsvId aTargetId, TRequestStatus& aStatus);// Context should be MTM folder/service to move from
   1.475 +	//
   1.476 +	// --- Interpret transfer progress ---
   1.477 +	IMPORT_C virtual TInt DisplayProgressSummary(const TDesC8& aProgress) const;// Used for display operation summary (usually completed operations). Default implementation returns KErrNotSupported. 
   1.478 +	IMPORT_C virtual TInt GetProgress(const TDesC8& aProgress, TBuf<EProgressStringMaxLen>& aReturnString, TInt& aTotalEntryCount, TInt& aEntriesDone,
   1.479 +		TInt& aCurrentEntrySize, TInt& aCurrentBytesTrans) const;// Default implementation returns KErrNotSupported
   1.480 +	//	
   1.481 +	// --- RTTI functions ---
   1.482 +	IMPORT_C virtual TInt QueryCapability(TUid aCapability, TInt& aResponse);
   1.483 +	IMPORT_C virtual void InvokeSyncFunctionL(TInt aFunctionId, const CMsvEntrySelection& aSelection, TDes8& aParameter);
   1.484 +	IMPORT_C virtual CMsvOperation* InvokeAsyncFunctionL(TInt aFunctionId, const CMsvEntrySelection& aSelection, TRequestStatus& aCompletionStatus, 
   1.485 +		TDes8& aParameter);
   1.486 +
   1.487 +protected:
   1.488 +	// --- Construction ---
   1.489 +	IMPORT_C CBaseMtmUi(CBaseMtm& aBaseMtm, CRegisteredMtmDll& aRegisteredMtmDll);
   1.490 +	IMPORT_C virtual void ConstructL();
   1.491 +	/** Sets the full path and name of the resource file associated with the User Interface MTM. 
   1.492 +	
   1.493 +	Client applications do not use this function. It is relevant only to implementers of derived classes.
   1.494 +	
   1.495 +	Requirements:
   1.496 +	
   1.497 +	The function is called by CBaseMtmUi::ConstructL(), which then loads the resource 
   1.498 +	file.
   1.499 +	
   1.500 +	@param aFileName Filename buffer to be filled with the resource file path 
   1.501 +	and name */
   1.502 +	virtual void GetResourceFileName(TFileName& aFileName) const = 0;
   1.503 +	//
   1.504 +	// --- Utility functions ---
   1.505 +	IMPORT_C CMsvSession& Session() const;
   1.506 +
   1.507 +	// Method used for extension: called by non virtual methods that need 
   1.508 +	// to have a polymorphic behaviour.
   1.509 +	IMPORT_C virtual TAny* GetInterface(TUid aUid);
   1.510 +
   1.511 +protected:
   1.512 +	// --- Data ---
   1.513 +	/** The CBaseMtm-derived object (Client-side MTM) that requested the User Interface 
   1.514 +	MTM. It is set by the constructor. */
   1.515 +	CBaseMtm&			iBaseMtm;
   1.516 +	/** Control environment object. It is set by the constructor. */
   1.517 +	CCoeEnv*			iCoeEnv;
   1.518 +	/** This flag records the preferences as set by SetPreferences(). */
   1.519 +	TUint				iFlags;
   1.520 +
   1.521 +private:
   1.522 +	// --- Data ---
   1.523 +	CRegisteredMtmDll&	iRegisteredMtmDll;
   1.524 +	TInt				iResourceFileOffset;
   1.525 +	// Extra data member to allow for future extensions
   1.526 +	TAny* iExtensionData;
   1.527 +	};
   1.528 +
   1.529 +
   1.530 +#endif // __MTMUIBAS_H__