## RBSourceGroup RBSourceGroup — Source list grouping |

## Synopsis

    enum                RBSourceGroupCategory;
    typedef             RBSourceGroup;
    #define             RB_SOURCE_GROUP_LIBRARY
    #define             RB_SOURCE_GROUP_PLAYLISTS
    #define             RB_SOURCE_GROUP_DEVICES
    #define             RB_SOURCE_GROUP_SHARED
    void                rb_source_group_init                (void);
    RBSourceGroup *     rb_source_group_get_by_name         (const char *name);
    RBSourceGroup *     rb_source_group_register            (const char *name,
                                                             const char *display_name,
                                                             RBSourceGroupCategory category);
    RBSourceGroup *     rb_source_group_library_get_type    (void);
    RBSourceGroup *     rb_source_group_playlists_get_type  (void);
    RBSourceGroup *     rb_source_group_devices_get_type    (void);
    RBSourceGroup *     rb_source_group_shared_get_type     (void);

## Description

Source groups define sections of the source list. A source group consists of an internal name, a display name, and a category. The internal name can be used to locate a registered source group. The category is used to sort the source groups.

## Details

### enum RBSourceGroupCategory

    typedef enum {
    	RB_SOURCE_GROUP_CATEGORY_FIXED = 0, /* library, iradio, podcast, queue */
    	RB_SOURCE_GROUP_CATEGORY_REMOVABLE, /* ipod, generic audio player, audio CD */
    	RB_SOURCE_GROUP_CATEGORY_PERSISTENT, /* playlists */
    	RB_SOURCE_GROUP_CATEGORY_TRANSIENT, /* DAAP shares */
    	RB_SOURCE_GROUP_CATEGORY_LAST
    } RBSourceGroupCategory;

### RBSourceGroup

    typedef struct RBSourceGroup RBSourceGroup;

### RB_SOURCE_GROUP_LIBRARY

    #define RB_SOURCE_GROUP_LIBRARY           (rb_source_group_library_get_type ())

### RB_SOURCE_GROUP_PLAYLISTS

    #define RB_SOURCE_GROUP_PLAYLISTS         (rb_source_group_playlists_get_type ())

### RB_SOURCE_GROUP_DEVICES

    #define RB_SOURCE_GROUP_DEVICES           (rb_source_group_devices_get_type ())

### RB_SOURCE_GROUP_SHARED

    #define RB_SOURCE_GROUP_SHARED            (rb_source_group_shared_get_type ())

### rb_source_group_init ()

    void                rb_source_group_init                (void);

Initializes source groups.

### rb_source_group_get_by_name ()

    RBSourceGroup *     rb_source_group_get_by_name         (const char *name);

Locates a source group by name. If the source group has not been registered yet, returns NULL instead.

`name` : | name of source group to find
Returns : | existing source group, or NULL.

### rb_source_group_register ()

    RBSourceGroup *     rb_source_group_register            (const char *name,
                                                             const char *display_name,
                                                             RBSourceGroupCategory category);

Registers and returns a new source group. Registering a source group that already exists will probably do bad things.

`name` : | name of the source group (untranslated, used in code)
`display_name` : | display name of the source group (translated)
`category` : | category for the source group
Returns : | new source group

### rb_source_group_library_get_type ()

    RBSourceGroup *     rb_source_group_library_get_type    (void);

Returns : | the predefined library source group

### rb_source_group_playlists_get_type ()

    RBSourceGroup *     rb_source_group_playlists_get_type  (void);

Returns : | the predefined playlists source group

### rb_source_group_devices_get_type ()

    RBSourceGroup *     rb_source_group_devices_get_type    (void);

Returns : | the predefined devices source group

### rb_source_group_shared_get_type ()

    RBSourceGroup *     rb_source_group_shared_get_type     (void);

Returns : | the predefined shared source group