Project members: Bitmap resource variant

With a bitmap resource variant member you can override another bitmap resource member existing in your project. Once overridden, the variant member can retrospectively modify the attributes of the original bitmap resource member. Bitmap resource variant members are represented in Composer by following bricks. Please note the additional small overlay in the icon of the brick:

The derivation of variants provides the fundamental technique to manage several product and design versions within one and the same GUI application. The selection of the appropriate variant occurs automatically depending on the condition specified in the VariantCond attribute of the variant member. Depending on this condition, Embedded Wizard distinguishes between following two types of a variant:

Type

Short description

Static

The condition for the selection of the respective variant results in a value well known at the code compilation time and immutable at the runtime. If this condition is true, the affected variant overrides the original bitmap resource member permanently. If the condition is false, the variant has no effect.

Dynamic

The condition for the variant selection depends on styles. Since styles can be activated and deactivated individually at the runtime, the overriding changes dynamically.

A bitmap resource member, which has been overridden by a variant member is considered as being multi-variant. You can derive as many variants of an original member as you want. Moreover, one bitmap resource variant can override another bitmap resource variant resulting in a hierarchy of variants. With the Browser window you can inspect this hierarchy. Please note, a member overridden by a variant is signed in the Browser with an additional small icon. You can thus recognize multi-variant members easily. Additionally, the corresponding variant condition is shown between a pair of [...] (squared brackets):

The original bitmap resource member is overridden by a variant, which, in turn, is overridden by another variant. Both variants specify as condition true and are thus static.

Create new bitmap resource variant

You create a new bitmap resource variant by simply deriving it from an existing bitmap resource or another bitmap resource variant. In the simplest case, if both, the original member and the variant are defined within the same unit, do following:

First ensure, that the original bitmap resource member is selected.

Then drag and drop the selected member while holding the keys CtrlShiftAlt pressed.

Deriving a new variant from a bitmap resource member existing within the same unit.

If the original member is not defined within the same unit, you can use the Browser window:

First switch to the Composer page for the respective unit member, where you want to add the new variant member.

Then ensure that the Browser window is visible.

Within the Browser locate the desired bitmap resource member. This can be done easily with Browser's own filter function.

Select the found bitmap resource member in the Browser window.

Drag and drop the selected member into the Composer area while holding the keys CtrlShiftAlt pressed.

Deriving a new variant by using the Browser window.

Alternatively, you can derive a new variant by using the clipboard functions Copy & Paste:

First ensure, that the original bitmap resource member is selected (e.g. in Composer, Inspector or Browser).

Press the keys CtrlC or use the menu item EDITCopy to copy the selected bitmap resource into the clipboard.

Eventually switch to the Composer page for the respective unit member, where you want to add the new variant.

Press the keys CtrlShiftAltV or use the menu item EDITVariant paste to add a new variant by deriving it from the bitmap resource stored in the clipboard.

Name the bitmap resource variant

First ensure, that the bitmap resource variant member is selected.

Press the key F2 or select the menu item EDITRename ....

Enter the new name in the Inspector window.

Variant members have a global character - they can be accessed from everywhere within your project. To address a variant member, you must always use its full name, which is composed of the unit name, the member is defined inside, and the name of the member itself, both separated by :: (double colon) signs. For example Examples::ButtonOkIconDarkVariant.

Specify the variant condition

The effect of an overriding depends on the condition you specify in the attribute VariantCond of the respective variant member. Per default newly derived variants are configured with the condition true. They overrides thus statically and permanently the original member. You should therefore always review this attribute after deriving a new variant.

Please note, if two variants override the same original member and both variants are configured with the same condition, Embedded Wizard will report a compilation error because of the ambiguity.

Override inherited attributes

The variant exposes all attributes of the original bitmap resource member. The attributes can be inspected or modified with new initialization expressions. As long as not modified, the bitmap resource variant uses the expression inherited from its original member. When you modify an attribute, its original value is overridden.

If your project is localized for several languages, you can override the expressions for every language individually. If neither the variant nor the original bitmap resource specify a particular language specific value for an attribute, the value from the fallback language Default is used automatically.

Once overridden values can be removed easily by pressing the keys CtrlR when the affected value is selected in Inspector. Thereupon, the value inherited from the original member is restored again.

Duplicate an existing bitmap resource variant

You can create any number of copies of an already existing bitmap resource variant member.

First ensure, that the variant member is selected.

Press the keys CtrlC and CtrlV in succession ...

... or hold the key Ctrl pressed while you drag and drop the selected variant member.

Finally rename the just duplicated bitmap resource variant member ...

... and review its variant condition.

You can also Drag & Drop a bitmap resource variant member from the Browser into the Composer window and create so a duplicate of the affected member:

First switch to the Composer page for the respective unit member, where you want to add the duplicate of the bitmap resource variant.

Then ensure that the Browser window is visible.

Within the Browser window locate the desired bitmap resource variant member. This can be done easily with Browser's own filter function.

Select this bitmap resource variant member in the Browser window.

Drag and drop the selected bitmap resource variant member into the Composer:

Duplicating a bitmap resource variant by simply Drag & Drop it between the Browser and Composer windows

Finally rename the just duplicated bitmap resource variant member ...

... and review its variant condition.

Please note, when you have two bitmap resource variant members configured with one and the same image file, then Embedded Wizard will treat both individually. In other words, the image file is converted twice and it is stored twice in the generated code.

Use the bitmap resource variant

Embedded Wizard selects the appropriate variant automatically either at the code generation time or just at the moment when the corresponding original bitmap resource is evaluated within an expression. Accessing the bitmap resource variants individually is not possible. The selection is controlled by the attribute VariantCond.

Delete a bitmap resource variant

First ensure, that the variant member is selected.

Press the key DEL or select the menu item EDITDelete.

Attributes of a bitmap resource variant

The following table shows the complete list of attributes provided by the bitmap resource variant member:

Attribute name

Short description

Brick

Determines the position and the size of a variant member brick within the Composer window.

Description

Contains the description for the variant member.

Dithering

Controls the color optimization of a bitmap resource. If not modified, contains the value inherited from the original member.

FileName

Determines an image file with color and/or opacity information to use by a bitmap resource variant member. If not modified, contains the value inherited from the original member.

Format

Specifies the desired color format for a bitmap resource. If not modified, contains the value inherited from the original member.

FrameDelay

Controls the playback speed of an animated bitmap sequence represented by a bitmap resource variant member. If not modified, contains the value inherited from the original member.

FrameSize

Determines the size of a single bitmap frame in a multi-frame bitmap resource variant member. If not modified, contains the value inherited from the original member.

Mode

Controls the conversion of a bitmap resource variant when generating code for a particular profile member.

ResourceClass

Determines the class of a resource member. Please note, this attribute can't be modified in derived variants.

VariantCond

Determines the condition to activate a particular variant member.

VariantOf

Determines the original bitmap resource member to override by the variant member.