## menu

menu — Menu and sensitivity functions

## Synopsis

    #include <app/gwyapp.h>

    enum                GwyMenuSensFlags;
    GtkWidget*          gwy_app_build_process_menu          (GtkAccelGroup *accel_group);
    void                gwy_app_process_menu_add_run_last   (GtkWidget *menu);
    GwyRunType          gwy_app_run_process_func            (const gchar *name);
    void                gwy_app_run_process_func_in_mode    (const gchar *name,
                                                             GwyRunType run);
    GtkWidget*          gwy_app_build_graph_menu            (GtkAccelGroup *accel_group);
    void                gwy_app_run_graph_func              (const gchar *name);
    void                gwy_app_menu_recent_files_update    (GList *recent_files);
    GtkWidget*          gwy_app_menu_recent_files_get       (void);
    GtkTooltips*        gwy_app_get_tooltips                (void);
    GwySensitivityGroup* gwy_app_sensitivity_get_group      (void);
    void                gwy_app_sensitivity_add_widget      (GtkWidget *widget,
                                                             GwyMenuSensFlags mask);
    void                gwy_app_sensitivity_set_state       (GwyMenuSensFlags affected_mask,
                                                             GwyMenuSensFlags state);

## Description

Menu and toolbox item sensitivity is updated by main application whenever its state changes. Possible states that may affect widget sesitivity are defined in GwyMenuSensFlags.

## Details

### enum GwyMenuSensFlags

    typedef enum {
        GWY_MENU_FLAG_DATA       = 1 << 0,
        GWY_MENU_FLAG_UNDO       = 1 << 1,
        GWY_MENU_FLAG_REDO       = 1 << 2,
        GWY_MENU_FLAG_GRAPH      = 1 << 3,
        GWY_MENU_FLAG_LAST_PROC  = 1 << 4,
        GWY_MENU_FLAG_LAST_GRAPH = 1 << 5,
        GWY_MENU_FLAG_DATA_MASK  = 1 << 6,
        GWY_MENU_FLAG_DATA_SHOW  = 1 << 7,
        GWY_MENU_FLAG_3D         = 1 << 8,
        GWY_MENU_FLAG_FILE       = 1 << 9,
        GWY_MENU_FLAG_MASK       = 0x1ff
    } GwyMenuSensFlags;

Global application sensitivity flags.

They represent various application states that may be preconditions for widgets to become sensitive.

`GWY_MENU_FLAG_DATA` | There's at least a one data window present.
`GWY_MENU_FLAG_UNDO` | There's something to undo (for current data window).
`GWY_MENU_FLAG_REDO` | There's something to redo (for current data window).
`GWY_MENU_FLAG_GRAPH` | There's at least a one graph window present.
`GWY_MENU_FLAG_LAST_PROC` | There is a last-run data processing function to rerun.
`GWY_MENU_FLAG_LAST_GRAPH` | There is a last-run graph function to rerun.
`GWY_MENU_FLAG_DATA_MASK` | There is a mask on the data.
`GWY_MENU_FLAG_DATA_SHOW` | There is a presentation on the data.
`GWY_MENU_FLAG_3D` | A 3D view is present.
`GWY_MENU_FLAG_FILE` | A file is open, with any type of data (Since: 2.5).
`GWY_MENU_FLAG_MASK` | All the bits combined.

### gwy_app_build_process_menu ()

    GtkWidget*          gwy_app_build_process_menu          (GtkAccelGroup *accel_group);

Constructs the application Data Process menu.

The menu is created from data processing functions registered by modules, therefore module registeration has to be performed first for this function to make sense.

`accel_group` : | Acceleration group to be associated with the menu.
Returns : | A newly ceated data processing menu (a GtkMenu).

### gwy_app_process_menu_add_run_last ()

    void                gwy_app_process_menu_add_run_last   (GtkWidget *menu);

Adds Re-show Last and Repeat Last items to application data process menu.

This function is essentially useful only for toolbox construction.

`menu` : | Menu created with `gwy_app_build_process_menu()`.

### gwy_app_run_process_func ()

    GwyRunType          gwy_app_run_process_func            (const gchar *name);

Runs a data processing function on the current data.

From the run modes function `name` supports, the most interactive one is selected.

`name` : | A data processing function name.
Returns : | The actually used mode (nonzero), or 0 on failure.

### gwy_app_run_process_func_in_mode ()

    void                gwy_app_run_process_func_in_mode    (const gchar *name,
                                                             GwyRunType run);

Runs a data processing function on current data in specified mode.

`name` : | A data processing function name.
`run` : | A run mode.

### gwy_app_build_graph_menu ()

    GtkWidget*          gwy_app_build_graph_menu            (GtkAccelGroup *accel_group);

Constructs the application Graph menu.

The menu is created from graph functions registered by modules, therefore module registeration has to be performed first for this function to make sense.

`accel_group` : | Acceleration group to be associated with the menu.
Returns : | A newly ceated graph menu (a GtkMenu).

### gwy_app_run_graph_func ()

    void                gwy_app_run_graph_func              (const gchar *name);

Runs a graph function on the current graph.

`name` : | A graph function name.

### gwy_app_menu_recent_files_update ()

    void                gwy_app_menu_recent_files_update    (GList *recent_files);

Updates recent file menu.

If the list of files is longer than the maximum number of recent file menu items, only the maximum number is shown.

`recent_files` : | A list of recent file names, in UTF-8.

### gwy_app_menu_recent_files_get ()

    GtkWidget*          gwy_app_menu_recent_files_get       (void);

Gets the application recent files menu.

The menu is initially empty and can be updated with `gwy_app_menu_recent_files_update()`. This function is essentially useful only for toolbox construction.

Returns : | The recent files menu (a GtkMenu).

### gwy_app_get_tooltips ()

    GtkTooltips*        gwy_app_get_tooltips                (void);

Gets the application-wide tooltips instance.

Returns : | The global tooltips instance. No reference is added, you can add yours, but the returned object will exist to the end of program anyway.

### gwy_app_sensitivity_get_group ()

    GwySensitivityGroup* gwy_app_sensitivity_get_group      (void);

Gets the application-wide widget sensitvity group.

The flags to be used with this sensitvity group are defined in GwyMenuSensFlags.

Returns : | The global sensitvity group instead. No reference is added, you can add yours, but the returned object will exist to the end of program anyway.

### gwy_app_sensitivity_add_widget ()

    void                gwy_app_sensitivity_add_widget      (GtkWidget *widget,
                                                             GwyMenuSensFlags mask);

Adds a widget to the application-wide widget sensitvity group.

The semantics of this function is the same as `gwy_sensitivity_group_add_widget()` (in fact, it's a simple wrapper around it).

`widget` : | Widget to add.
`mask` : | Which flags the widget is sensitive to.

### gwy_app_sensitivity_set_state ()

    void                gwy_app_sensitivity_set_state       (GwyMenuSensFlags affected_mask,
                                                             GwyMenuSensFlags state);

Sets the state of application-wide widget sensitvity group.

The semantics of this function is the same as `gwy_sensitivity_group_set_state()` (in fact, it's a simple wrapper around it).

`affected_mask` : | Which bits in `state` to copy to state.
`state` : | The new state (masked with `affected_mask`).