The control environment packages the interface to the window server and
provides an environment for creating controls. It is implemented in a single
class, CCoeEnv
, which encapsulates active objects and an
active scheduler for receiving events from the window server. Each application
has exactly one CCoeEnv
object which is stored in Thread
Local Storage (TLS).
CCoeEnv
also provides a number of utilities which are
useful to most applications. These utilities include:
creating a graphics
context, the system graphics context. This is the standard
graphics context which is normally used for drawing controls. It may be accessed
using CCoeEnv::SystemGc()
but controls should get their
graphics context using CCoeControl::SystemGc()
rather than
directly from the environment.
access to the window server session
utilities for using fonts
utilities for reading resource values from resource files
Support for singleton (static) objects
CCoeEnv
maintains
a list of the resource files used by the application. Files may be added to
the list using AddResourceFileL()
and removed using DeleteResourceFile()
.
The utility functions provided by the control environment read resources and resource data from the resource files in its list.
A resource file consists
of a list of resources, each identified by a resource ID. Each resource consists
of a list of resource values in the form of binary data. The order and lengths
of the values for each resource type are defined in a resource definition
(generally stored in a file with an .rh
extension).
Reading data from a resource file requires two stages:
read a resource from the resource file into a buffer
read values from the resource using a resource reader
CCoeEnv
provides utility functions to perform the
first of these stages and functions to create resource readers.
An application's default resource file, one which has the same name as the application, is loaded automatically.
It should be noted that stage two can be omitted if the resource contains only one value, or if it is read into a formatted buffer. In both of these cases the resource data can be read straight from the buffer.
The CCoeStatic
base
class is closely associated with CCoeEnv
. Between them
they allow singleton objects to be created and stored in Thread Local Storage
(TLS). By doing so they provide an equivalent to writeable global static data.
Classes
derived from CCoeStatic
are automatically added to the
environment when they are instantiated for the first time. Subsequent attempts
to instantiate an object of the same type will result in a panic (with error
code ECoePanicDuplicateObjectUid
).
Each singleton
requires a UID and may be given a destruction priority (relative to other
singletons and the AppUi) and a scope (EThread
or EApp
).
Once
a singleton has been created it may be accessed through the CCoeEnv
API.
// Singleton access IMPORT_C static CCoeStatic* Static( TUid aUid ) ; IMPORT_C CCoeStatic* FindStatic( TUid aUid ) ;
CCoeStatic
has
no public functions.