## GwyResourceEditor

GwyResourceEditor — Base/helper class for resource editors

## Synopsis

    #include <app/gwyapp.h>

                        GwyResourceEditor;
                        GwyResourceEditorClass;
    GwyResource*        gwy_resource_editor_get_edited      (GwyResourceEditor *editor);
    void                gwy_resource_editor_queue_commit    (GwyResourceEditor *editor);
    gboolean            gwy_resource_editor_commit          (GwyResourceEditor *editor);
    void                gwy_resource_editor_setup           (GwyResourceEditor *editor);
    void                gwy_resource_editor_class_setup     (GwyResourceEditorClass *klass);

## Object Hierarchy

      GObject
       +----GInitiallyUnowned
             +----GtkObject
                   +----GtkWidget
                         +----GtkContainer
                               +----GtkBin
                                     +----GtkWindow
                                           +----GwyResourceEditor

## Implemented Interfaces

GwyResourceEditor implements AtkImplementorIface and GtkBuildable.

## Description

The base class contains all the methods that handle the resource list, set defaults, or sync resource list with disk. Particular editors (subclasses) have to override (in fact, to fill, because GwyResourceEditor does not define them) the methods and class data in their class init methods. Then they generally only need to care about widgets inside their edit windows.

## Details

### GwyResourceEditor

    typedef struct _GwyResourceEditor GwyResourceEditor;

### GwyResourceEditorClass

    typedef struct {
        GtkWindowClass parent_class;

        GType resource_type;
        const gchar *base_resource;
        const gchar *window_title;
        const gchar *editor_title;

        gchar *settings_prefix;

        GtkWidget* (*construct_treeview)(GCallback callback,
                                         gpointer cbdata,
                                         const gchar *active);
        void (*construct_editor)(GwyResourceEditor *editor);
        void (*apply_changes)(GwyResourceEditor *editor);
        void (*switch_resource)(GwyResourceEditor *editor);

        void (*reserved1)(void);
        void (*reserved2)(void);

        GwyResourceEditor *instance;
    } GwyResourceEditorClass;

The resource editor class.

GtkWindowClass `parent_class`; |
GType `resource_type`; | The GType of edited resources. It must be a type derived from GwyResource.
const gchar *`base_resource`; | The name of vanilla, default resource. The `New' button creates a new resource as a copy of this one.
const gchar *`window_title`; | Resource list window title. It should be already translated.
const gchar *`editor_title`; | Editor window title template. It must contain one ``s`` that will be replaced with edited resource name. It should be already translated.
gchar *`settings_prefix`; | Settings prefix for saved state, filled by `gwy_resource_editor_class_setup()`.
`construct_treeview` () | Method to create the resource list widget, it is of the `gwy_gradients_tree_view_new()` signature. There are currently some hardcoded assumptions about the tree view columns, so it cannot be completely arbitrary.
`construct_editor` () | Method to construct editor window contents (the window itself is managed by GwyResourceEditor, its contents by a particular editor).
`apply_changes` () | Method called on commit (before resource is written to disk). It should obtain values from the editor widgets and actually update the resource.
`switch_resource` () | Method to update editor window widgets to display another resource.
`reserved1` () |
`reserved2` () |
GwyResourceEditor *`instance`; | Editor instance. Resource editors are singletons so if an instance exists, pointer to it is kept here.

### gwy_resource_editor_get_edited ()

    GwyResource*        gwy_resource_editor_get_edited      (GwyResourceEditor *editor);

Gets the currently edited resource.

It is an error to call this method when no resource is being edited.

`editor` : | A resource editor.
Returns : | The currently edited resource.

### gwy_resource_editor_queue_commit ()

    void                gwy_resource_editor_queue_commit    (GwyResourceEditor *editor);

Queues commit of resource changes, marking the currently edited resource `dirty'.

Call this method in particular resource editor subclass whenever user changes some editor property.

To flush pending commit, call `gwy_resource_editor_commit()`. To immediately commit a change, call this method and then `gwy_resource_editor_commit()`.

`editor` : | A resource editor.

### gwy_resource_editor_commit ()

    gboolean            gwy_resource_editor_commit          (GwyResourceEditor *editor);

Commits pending resource changes, if there are any.

It calls `apply_changes` method first (if it exists), then saves resource to disk.

Changes are always immediately committed (if there are any pending): before the editor is destroyed, when a resource stops being edited, before a resource is deleted, before a resource is renamed. When a resource is newly created, it is immediately created on disk too.

`editor` : | A resource editor.
Returns : | Always `FALSE` (to be usable as GSourceFunc).

### gwy_resource_editor_setup ()

    void                gwy_resource_editor_setup           (GwyResourceEditor *editor);

Sets up particular resource editor.

Helper method only intended for resource editor implementation. To be called in particular resource initialization methods.

`editor` : | A resource editor.

### gwy_resource_editor_class_setup ()

    void                gwy_resource_editor_class_setup     (GwyResourceEditorClass *klass);

Sets up particular resource editor class.

Helper class method only intended for resource editor implementation. To be called in particular class initialization methods.

`klass` : | A resource editor class.