## GdauiDataProxy GdauiDataProxy — Displaying and modifying data in a GdaDataProxy |

## Stability Level

Stable, unless otherwise indicated

## Synopsis

                        GdauiDataProxy;
                        GdauiDataProxyIface;
    GdaDataProxy *      gdaui_data_proxy_get_proxy          (GdauiDataProxy *iface);
    GtkActionGroup *    gdaui_data_proxy_get_actions_group  (GdauiDataProxy *iface);
    enum                GdauiAction;
    void                gdaui_data_proxy_perform_action     (GdauiDataProxy *iface,
                                                             GdauiAction action);
    void                gdaui_data_proxy_column_set_editable
                                                            (GdauiDataProxy *iface,
                                                             gint column,
                                                             gboolean editable);
    void                gdaui_data_proxy_column_show_actions
                                                            (GdauiDataProxy *iface,
                                                             gint column,
                                                             gboolean show_actions);
    enum                GdauiDataProxyWriteMode;
    gboolean            gdaui_data_proxy_set_write_mode     (GdauiDataProxy *iface,
                                                             GdauiDataProxyWriteMode mode);
    GdauiDataProxyWriteMode gdaui_data_proxy_get_write_mode (GdauiDataProxy *iface);

## Object Hierarchy

      GInterface
       +----GdauiDataProxy

## Prerequisites

GdauiDataProxy requires GObject.

## Known Implementations

GdauiDataProxy is implemented by GdauiForm, GdauiGrid, GdauiRawForm and GdauiRawGrid.

## Signals

      "proxy-changed"                                  : Run First

## Description

The GdauiDataProxy interface is implemented by widgets which allow modifications to a GdaDataModel (through a GdaDataProxy to actually proxy the changes before they are written to the data model).

## Details

### GdauiDataProxy

    typedef struct _GdauiDataProxy GdauiDataProxy;

### GdauiDataProxyIface

    typedef struct {
    	GTypeInterface           g_iface;

    	/* virtual table */
    	GdaDataProxy        *(* get_proxy)           (GdauiDataProxy *iface);
    	void                 (* set_column_editable) (GdauiDataProxy *iface, gint column, gboolean editable);
    	void                 (* show_column_actions) (GdauiDataProxy *iface, gint column, gboolean show_actions);
    	GtkActionGroup      *(* get_actions_group)   (GdauiDataProxy *iface);
    	gboolean             (* set_write_mode)      (GdauiDataProxy *iface, GdauiDataProxyWriteMode mode);
    	GdauiDataProxyWriteMode (* get_write_mode)(GdauiDataProxy *iface);

    	/* signals */
    	void                 (* proxy_changed)       (GdauiDataProxy *iface, GdaDataProxy *proxy);
    } GdauiDataProxyIface;

### gdaui_data_proxy_get_proxy ()

    GdaDataProxy *      gdaui_data_proxy_get_proxy          (GdauiDataProxy *iface);

Get a pointer to the GdaDataProxy being used by `iface`

`iface` : | an object which implements the GdauiDataProxy interface
Returns : | a GdaDataProxy pointer. [transfer none]

Since 4.2

### gdaui_data_proxy_get_actions_group ()

    GtkActionGroup *    gdaui_data_proxy_get_actions_group  (GdauiDataProxy *iface);

Each widget imlplementing the GdauiDataProxy interface provides actions. Actions can be triggered using the `gdaui_data_proxy_perform_action()` method, but using this method allows for the creation of toolbars, menus, etc calling these actions.

The actions are among:

- Data edition actions: "ActionNew", "ActionCommit", "ActionDelete", "ActionReset". Note that the "ActionDelete" action is actually a GtkToggleAction action which can be used to delete a row or undelete it.

- Record by record moving: "ActionFirstRecord", "ActionPrevRecord", "ActionNextRecord", "ActionLastRecord".

- Chuncks of records moving: "ActionFirstChunck", "ActionPrevChunck", "ActionNextChunck", "ActionLastChunck".

- Filtering: "ActionFilter".

`iface` : | an object which implements the GdauiDataProxy interface
Returns : | the GtkActionGroup with all the possible actions on the widget. [transfer none]

Since 4.2

### enum GdauiAction

    typedef enum {
    	/* actions in GdauiDataWidget widgets */
    	GDAUI_ACTION_NEW_DATA,
    	GDAUI_ACTION_WRITE_MODIFIED_DATA,
    	GDAUI_ACTION_DELETE_SELECTED_DATA,
    	GDAUI_ACTION_UNDELETE_SELECTED_DATA,
    	GDAUI_ACTION_RESET_DATA,
    	GDAUI_ACTION_MOVE_FIRST_RECORD,
    	GDAUI_ACTION_MOVE_PREV_RECORD,
    	GDAUI_ACTION_MOVE_NEXT_RECORD,
    	GDAUI_ACTION_MOVE_LAST_RECORD,
    	GDAUI_ACTION_MOVE_FIRST_CHUNCK,
            GDAUI_ACTION_MOVE_PREV_CHUNCK,
            GDAUI_ACTION_MOVE_NEXT_CHUNCK,
            GDAUI_ACTION_MOVE_LAST_CHUNCK
    } GdauiAction;

`GDAUI_ACTION_NEW_DATA` |
`GDAUI_ACTION_WRITE_MODIFIED_DATA` |
`GDAUI_ACTION_DELETE_SELECTED_DATA` |
`GDAUI_ACTION_UNDELETE_SELECTED_DATA` |
`GDAUI_ACTION_RESET_DATA` |
`GDAUI_ACTION_MOVE_FIRST_RECORD` |
`GDAUI_ACTION_MOVE_PREV_RECORD` |
`GDAUI_ACTION_MOVE_NEXT_RECORD` |
`GDAUI_ACTION_MOVE_LAST_RECORD` |
`GDAUI_ACTION_MOVE_FIRST_CHUNCK` |
`GDAUI_ACTION_MOVE_PREV_CHUNCK` |
`GDAUI_ACTION_MOVE_NEXT_CHUNCK` |
`GDAUI_ACTION_MOVE_LAST_CHUNCK` |

### gdaui_data_proxy_perform_action ()

    void                gdaui_data_proxy_perform_action     (GdauiDataProxy *iface,
                                                             GdauiAction action);

Forces the widget to perform the selected `action`, as if the user had pressed on the corresponding action button in the `iface` widget, if the corresponding action is possible and if the `iface` widget supports the action.

`iface` : | an object which implements the GdauiDataProxy interface
`action` : | a GdauiAction action

Since 4.2

### gdaui_data_proxy_column_set_editable ()

    void                gdaui_data_proxy_column_set_editable
                                                            (GdauiDataProxy *iface,
                                                             gint column,
                                                             gboolean editable);

Sets if the data entry in the `iface` widget at `column` (in the data model `iface` operates on) can be edited or not.

`iface` : | an object which implements the GdauiDataProxy interface
`column` : | column number of the data
`editable` : | set to `TRUE` to make the column editable

Since 4.2

### gdaui_data_proxy_column_show_actions ()

    void                gdaui_data_proxy_column_show_actions
                                                            (GdauiDataProxy *iface,
                                                             gint column,
                                                             gboolean show_actions);

Sets if the data entry in the `iface` widget at `column` (in the data model `iface` operates on) must show its actions menu or not.

`iface` : | an object which implements the GdauiDataProxy interface
`column` : | column number of the data, or -1 to apply the setting to all the columns
`show_actions` : | set to `TRUE` if the actions menu must be shown

Since 4.2

### enum GdauiDataProxyWriteMode

    typedef enum {
    	GDAUI_DATA_PROXY_WRITE_ON_DEMAND           = 0,
    	GDAUI_DATA_PROXY_WRITE_ON_ROW_CHANGE       = 1,
    	GDAUI_DATA_PROXY_WRITE_ON_VALUE_ACTIVATED  = 2,
    	GDAUI_DATA_PROXY_WRITE_ON_VALUE_CHANGE     = 3
    } GdauiDataProxyWriteMode;

Defines when the data modifications held in the underlying GdaDataProxy are written to the data model being proxied (using `gda_data_proxy_apply_row_changes()`).

`GDAUI_DATA_PROXY_WRITE_ON_DEMAND` | write only when explicitly requested
`GDAUI_DATA_PROXY_WRITE_ON_ROW_CHANGE` | write when the current selected row changes
`GDAUI_DATA_PROXY_WRITE_ON_VALUE_ACTIVATED` | write when user activates a value change
`GDAUI_DATA_PROXY_WRITE_ON_VALUE_CHANGE` | write when a parameters's value changes

### gdaui_data_proxy_set_write_mode ()

    gboolean            gdaui_data_proxy_set_write_mode     (GdauiDataProxy *iface,
                                                             GdauiDataProxyWriteMode mode);

Specifies the way the modifications stored in the GdaDataProxy used internally by `iface` are written back to the GdaDataModel which holds the data displayed in `iface`.

`iface` : | an object which implements the GdauiDataProxy interface
`mode` : | the requested GdauiDataProxyWriteMode mode
Returns : | TRUE if the proposed mode has been taken into account

Since 4.2

### gdaui_data_proxy_get_write_mode ()

    GdauiDataProxyWriteMode gdaui_data_proxy_get_write_mode (GdauiDataProxy *iface);

Get the way the modifications stored in the GdaDataProxy used internally by `iface` are written back to the GdaDataModel which holds the data displayed in `iface`.

`iface` : | an object which implements the GdauiDataProxy interface
Returns : | the write mode used by `iface`

Since 4.2

## Signal Details

### The `"proxy-changed"` signal

    void                user_function                      (GdauiDataProxy *gdauidataproxy,
                                                            GdaDataProxy   *arg1,
                                                            gpointer        user_data)           : Run First

The ::proxy-changed signal is emitted each time the GdaDataProxy which would be returned by `gdaui_data_proxy_get_proxy()` changes. This is generally the result of changes in the structure of the proxied data model (different number and/or type of columns for example).

`gdauidataproxy` : | the GdauiDataProxy
`arg1` : | the GdaDataProxy which would be returned by `gdaui_data_proxy_get_proxy()`
`user_data` : | user data set when the signal handler was connected.

## See Also

The GdauiDataSelector interface which is usually also implemented by the widgets which implement the GdauiDataProxy interface.