Amtk Introduction: Tepl 3 Reference Manual

## Amtk Introduction Amtk Introduction — Introduction to the Actions, Menus and Toolbars Kit for GTK+ |

Amtk is the acronym for “Actions, Menus and Toolbars Kit”. It is a basic GtkUIManager replacement based on GAction. GtkUIManager has been deprecated in GTK+ 3, without a good replacement for applications that want to keep a traditional UI (with a GtkMenuBar, a GtkToolbar and a GtkStatusbar; in contrast to the new UI with a GtkHeaderBar and a “hamburger menu”).

Amtk is developed inside the Tepl repository, but is a separate shared library so that applications can use it without depending on Tepl, GtkSourceView, etc.

With Amtk, menus and toolbars are created programmatically, but with convenient APIs (the support for an XML format will maybe be added in the future, contributions welcome). GMenu is not used, a menubar is created with GtkMenuItem's, although the support for GMenu could easily be added.

There are currently several things that are not possible to do with the support of GMenu in GTK+, that Amtk solves:

- Primarily, encoding the information about an action only once, to create both a menu item and a toolbar item for that action. The information needed: a label (i.e. a short description), an icon, a tooltip (i.e. a longer description) and keyboard shortcuts. This is implemented by AmtkActionInfo, with AmtkFactory classes to create menu and toolbar items.

  When writing an XML file to create a GMenu with the format understood by GtkBuilder (see the class description of GtkApplicationWindow), the information in the XML file can be used only to create a GMenu, not a toolbar. It would not be convenient to duplicate the information.

- When a GtkMenuItem is selected (e.g. when the mouse hovers it), showing a longer description in the GtkStatusbar. This is implemented by AmtkApplicationWindow. It makes the UI better self-discoverable, to improve the usability.

- Related to the previous point: having a GtkRecentChooser menu that shows in a GtkStatusbar the full file path when a menu item is selected. This is implemented by amtk_application_window_connect_recent_chooser_menu_to_statusbar().

- Additionally, the Amtk infrastructure permits to share AmtkActionInfo's in a library (with translations); this is a bit similar to GtkStockItem, to reduce the amount of work that an application (and translators) need to do.

## Sanity checks

Amtk has several functions to do various sanity checks. They normally don't impact too much the performances, so it is recommended to always run them, although they could be disabled on production. The functions:

- amtk_action_map_add_action_entries_check_dups()

- amtk_action_info_store_check_all_used()

- Another sanity check, but which cannot be disabled: the AmtkActionInfoCentralStore checks that each AmtkActionInfo has a unique action name. Which means that AmtkActionInfo's provided by a library must be namespaced.

## GTK+ dependency

Amtk 3 depends on GTK+ 3.

## pkg-config name

For Amtk 3, the pkg-config name is: `amtk-3`

To compile a program that uses Amtk 3, you can for example use the following command:

`$ gcc hello.c `pkg-config --cflags --libs amtk-3` -o hello`