Getting started

The Columns UI SDK provides interfaces you can use to:

  • create windows controlled by a host and embedded in the host’s window

  • provide information about commands to be used as a toolbar button

Installation

You’ll need:

To install, download the SDK and extract the archive alongside the foobar2000 subdirectory of your foobar2000 SDK.

Usage

Insert the columns_ui-sdk project into your solution, and add it as a dependency for your project. Then #include "columns_ui-sdk/ui_extension.h" in your project as needed.

Examples

Two examples are published on GitHub:

Panel APIs

APIs

Components wishing to provide a panel or toolbar should implement uie::window. Specific subclasses exist for:

Components wishing to host panels and toolbars should implement uie::window_host.

Helpers

uie::container_uie_window_v3 aims to simplify the implementation of a panel or toolbar, creating a window for you and partially implementing uie::window. It may not be suitable if you want to support multiple UI components, or you wish to also allow your panel to be opened as a pop-up window.

Button APIs

APIs

The base class for buttons is uie::button.

If you wish to provide default bitmaps and additional information for your menu items, derive from uie::menu_button. If you wish to implement a custom button not based upon a menu item, derive from uie::custom_button.

Exception handling

Implementations of virtual functions are not expected to throw C++ exceptions unless the documentation for the method mentions that exceptions may be thrown. It’s recommended that you declare implementations of virtual functions as noexcept when exceptions are not expected.

Additionally, callback functions that are passed to the Win32 API, such as window procedures, are generally not expected to throw C++ exceptions and hence declaring them noexcept is recommended.

noexcept will cause std::terminate() to be called if the function does throw an exception. This will result in an immediate crash, rather than allowing the exception to escape and cause messier crashes or other problems.

Standard windows

The GUIDs for the standard panels may be found in the cui::panels namespace. The GUIDs for the standard toolbars may be found in the cui::toolbars namespace.

You may use these GUIDs to create the standard windows in your own component; do not use them as GUIDs for your own windows.