## RBSourceList RBSourceList — source list widget |

## Synopsis

                        RBSourceList;
                        RBSourceListClass;
    GtkWidget *         rb_sourcelist_new                   (RBShell *shell);
    void                rb_sourcelist_append                (RBSourceList *sourcelist,
                                                             RBSource *source,
                                                             RBSource *parent);
    void                rb_sourcelist_set_playing_source    (RBSourceList *sourcelist,
                                                             RBSource *source);
    void                rb_sourcelist_edit_source_name      (RBSourceList *sourcelist,
                                                             RBSource *source);
    void                rb_sourcelist_remove                (RBSourceList *sourcelist,
                                                             RBSource *source);
    void                rb_sourcelist_select                (RBSourceList *sourcelist,
                                                             RBSource *source);

## Object Hierarchy

      GObject
       +----GInitiallyUnowned
             +----GtkObject
                   +----GtkWidget
                         +----GtkContainer
                               +----GtkBin
                                     +----GtkScrolledWindow
                                           +----RBSourceList

## Implemented Interfaces

RBSourceList implements AtkImplementorIface and GtkBuildable.

## Properties

      "model"                    GtkTreeModel*         : Read
      "shell"                    RBShell*              : Read / Write / Construct Only

## Signals

      "drop-received"                                  : Run Last
      "selected"                                       : Run Last
      "show-popup"                                     : Run Last
      "source-activated"                               : Run Last

## Description

The source list widget is a GtkTreeView backed by a GtkListStore containing the sources and some extra data used to structure the tree view.

The source list widget displays the available sources. Sources are divided into groups - library, stores, playlists, devices, network shares. Groups are displayed as headers, with expanders for hiding and showing the sources in the group. Sources themselves may also have child sources, such as playlists on portable audio players.

Sources are displayed with an icon and a name. If the source is currently playing, the name is displayed in bold.

## Details

### RBSourceList

    typedef struct _RBSourceList RBSourceList;

### RBSourceListClass

    typedef struct {
    	GtkScrolledWindowClass parent_class;

    	/* signals */
    	void (*selected) (RBSourceList *list, RBSource *source);

    	void (*drop_received) (RBSourceList *list, RBSource *target, GtkSelectionData *data);

    	void (*source_activated) (RBSourceList *list, RBSource *target);

    	gboolean (*show_popup) (RBSourceList *list, RBSource *target);
    } RBSourceListClass;

### rb_sourcelist_new ()

    GtkWidget *         rb_sourcelist_new                   (RBShell *shell);

Creates the source list widget.

`shell` : | the RBShell instance
Returns : | the source list widget.

### rb_sourcelist_append ()

    void                rb_sourcelist_append                (RBSourceList *sourcelist,
                                                             RBSource *source,
                                                             RBSource *parent);

Adds a new source to the source list. If `parent` is not NULL, the new source is added beneath it. Otherwise, it is added to the end of the source group specified by the source's source-group property.

`sourcelist` : | the RBSourceList
`source` : | the RBSource to add
`parent` : | the RBSource below which to add the new source, or NULL

### rb_sourcelist_set_playing_source ()

    void                rb_sourcelist_set_playing_source    (RBSourceList *sourcelist,
                                                             RBSource *source);

Updates the source list with the new playing source. The source list tracks which source is playing in order to display the name of the playing source in bold type.

`sourcelist` : | the RBSourceList
`source` : | the new playing RBSource

### rb_sourcelist_edit_source_name ()

    void                rb_sourcelist_edit_source_name      (RBSourceList *sourcelist,
                                                             RBSource *source);

Initiates editing of the name of the specified source. The row for the source is selected and given input focus, allowing the user to edit the name. source_name_edited_cb is called when the user finishes editing.

`sourcelist` : | the RBSourceList
`source` : | the RBSource to edit

### rb_sourcelist_remove ()

    void                rb_sourcelist_remove                (RBSourceList *sourcelist,
                                                             RBSource *source);

Removes a source from the source list. Disconnects signal handlers, removes the source from the underlying model, and updates the visibility of the group containing the source.

`sourcelist` : | the RBSourceList
`source` : | the RBSource being removed

### rb_sourcelist_select ()

    void                rb_sourcelist_select                (RBSourceList *sourcelist,
                                                             RBSource *source);

Selects the specified source in the source list. This will result in the 'selected' signal being emitted.

`sourcelist` : | the RBSourceList
`source` : | the RBSource to select

## Property Details

### The `"model"` property

      "model"                    GtkTreeModel*         : Read

The GtkTreeModel for the source list

### The `"shell"` property

      "shell"                    RBShell*              : Read / Write / Construct Only

The RBShell instance

## Signal Details

### The `"drop-received"` signal

    void                user_function                      (RBSourceList *list,
                                                            gpointer      target,
                                                            gpointer      data,
                                                            gpointer      user_data)      : Run Last

Emitted when a drag and drop to the source list completes.

`list` : | the RBSourceList
`target` : | the RBSource receiving the drop
`data` : | the drop data
`user_data` : | user data set when the signal handler was connected.

### The `"selected"` signal

    void                user_function                      (RBSourceList *list,
                                                            GObject      *source,
                                                            gpointer      user_data)      : Run Last

Emitted when a source is selected from the source list

`list` : | the RBSourceList
`source` : | the newly selected RBSource
`user_data` : | user data set when the signal handler was connected.

### The `"show-popup"` signal

    gboolean            user_function                      (RBSourceList *list,
                                                            RBSource     *target,
                                                            gpointer      user_data)      : Run Last

Emitted when a source should display a popup menu in response to some user action, such as right clicking or pressing shift-f10.

`list` : | the RBSourceList
`target` : | the RBSource for which a popup menu should be shown
`user_data` : | user data set when the signal handler was connected.

### The `"source-activated"` signal

    void                user_function                      (RBSourceList *list,
                                                            GObject      *target,
                                                            gpointer      user_data)      : Run Last

Emitted when a source is activated (by double clicking or hitting the enter key)

`list` : | the RBSourceList
`target` : | the activated RBSource
`user_data` : | user data set when the signal handler was connected.