The individual tool icons created by
toolboxlayoutmanager.C
are nothing more than customized radio buttons. Existing radio buttons
have all the needed functionality to implement typical toolbox
behavior: choosing a new icon automatically deselects the previous icon.
This is stock radio button functionality: selecting one radio button
deselects the previous one. All that's needed is to create a radio
button with a custom appearance by using a custom
appearance object for the radio
button.
toolboxlayoutmanager.C
shows two approaches for
creating custom appearance objects. The first approach creates a
custom appearance object directly:
x::w::const_image_button_appearance custom= x::w::image_button_appearance::base::radio_theme()->modify ([&] (const x::w::image_button_appearance &appearance) { appearance->focus_border= x::w::focus_border_appearance::base::visible_thin_theme(); appearance->set_distinct_focusoff_border(); appearance->images={icon_set[0], icon_set[1]}; }); auto b=f->create_radio(rg, [](const auto &f) {}, custom);
This is an example of
customizing a radio button's
appearance.
A factory's create_radio
() method takes
an optional custom appearance object parameter that controls the radio
button's visual look.
Its images
member is a vector of custom images for
the radio button: typically two filenames, the normal and the selected
radio button image.
All toolbox icon images should have the same width and height, for best
results using the toolbox layout manager. Image files can be
png,
gif, and
jpg images; in addition to
the LibCXXW-specific
SXG format.
png,
gif, and
jpg images have a fixed size.
SXG images are scalable.
toolboxlayoutmanager.C
loads a set of SXG images from LibCXXW's default theme, whose
size gets automatically scaled in sync with the current display theme.
Custom application image filenames should include a path component.
Use “./filename
” to load an
image file from the current directory. This is because filenames
without a path components are also searched in LibCXXW's theme
directory.