User Interface (UI) MTMs offer user interface capabilities, such as viewing, editing and copying of messages. Users interact with different message types in different ways. For example, a messaging protocol that supports attachments needs a more feature-rich editor than one that only supports text. UI MTMs allows a developer to produce user interface components to suit these differing requirements. Some Messaging protocols do not need any user interaction at all: in such cases, a UI MTM component does not need to be implemented.
UI MTMs offer some or all of the following capabilities:
Message viewing
Message editing
Folder manipulation
Editing service settings
Providing pre-transfer or connection settings UI
Providing pre-transfer preparation of messages before sending
Interpreting and displaying mail transfer progress
Interpreting and displaying error conditions
The base class for UI MTMs is CBaseMtmUi
.
Message client applications use the class to access the functionality polymorphically.
Many functions are required to return an instance of a CMsvOperation
derived
class to provide asynchronous control and monitoring to the caller of the
operation being performed.
The following are some significant functions
that can be implemented in a class derived from the CBaseMtmUi
base
class:
Entry manipulation functions
The CBaseMtmUi::OpenL()
, CBaseMtmUi::CloseL()
, CBaseMtmUi::EditL()
, and CBaseMtmUi::ViewL()
functions are entry manipulation
functions. They are all available in two overloaded versions. The first version
operates on the current context. The second version operates upon groups of
entries specified by a CMsvEntrySelection
argument. All
entries must be in same folder and all of the correct MTM type. The context
may change after calling these functions.
Copying and moving functions
The CBaseMtmUi::CopyToL()
, CBaseMtmUi::CopyFromL()
, CBaseMtmUi::MoveToL()
, and CBaseMtmUi::MoveFromL()
functions copy and move
entries to and from remote servers. MTMs can implement these functions to
provide any user interaction needed before copying or moving can proceed,
such as dialog to confirm settings.
Progress information functions
The CBaseMtmUi::DisplayProgressSummary()
and CBaseMtmUi::GetProgress()
progress
information functions convert MTM-specific progress information about some
asynchronous operation, such as message sending, to a human-readable form.
The progress information to pass into these functions is, in general, obtained
from an on-going CMsvOperation
by calling CMsvOperation::Progress()
.
The nature of any information provided by these functions is MTM-specific.
MTM-specific UI functions
MTM components can offer protocol-specific functionality
not provided by base class interface functions. MTM components define IDs
that correspond to each protocol-specific operation offered, and implement
the CBaseMtmUi::InvokeSyncFunctionL()
and CBaseMtmUi::InvokeAsyncFunctionL()
functions
to allow clients to access these operations by passing in the appropriate
ID. Two functions are provided to allow the MTM component to offer both synchronous
and asynchronous functionality. Message client applications can dynamically
add user-interface features for these operations using CBaseMtmUiData::MtmSpecificFunctions()
.
The CBaseMtmUi
class provides the virtual functions
for overriding in derived classes.
Functionality to edit and view messages may be one of the larger programming tasks in creating an MTM. Such functionality is typically implemented in separate DLLs that the UI MTM loads as required, to reduce the memory footprint of a UI MTM.