## rb-play-order

rb-play-order

## Synopsis

    typedef             RBPlayOrderPrivate;
    RBPlayOrder*        rb_play_order_new                   (const char *play_order_name,
                                                             RBShellPlayer *player);
                        RBPlayOrderDescription;
    const RBPlayOrderDescription* rb_play_order_get_orders  (void);
    void                rb_play_order_playing_source_changed
                                                            (RBPlayOrder *porder,
                                                             RBSource *source);
    gboolean            rb_play_order_has_next              (RBPlayOrder *porder);
    RhythmDBEntry*      rb_play_order_get_next              (RBPlayOrder *porder);
    void                rb_play_order_go_next               (RBPlayOrder *porder);
    gboolean            rb_play_order_has_previous          (RBPlayOrder *porder);
    RhythmDBEntry*      rb_play_order_get_previous          (RBPlayOrder *porder);
    void                rb_play_order_go_previous           (RBPlayOrder *porder);
    RBShellPlayer*      rb_play_order_get_player            (RBPlayOrder *porder);
    RBSource*           rb_play_order_get_source            (RBPlayOrder *porder);
    RhythmDB*           rb_play_order_get_db                (RBPlayOrder *porder);
    RhythmDBEntry*      rb_play_order_get_playing_entry     (RBPlayOrder *porder);
    gboolean            rb_play_order_player_is_playing     (RBPlayOrder *porder);

## Description

## Details

### RBPlayOrderPrivate

### rb_play_order_new ()

    RBPlayOrder*        rb_play_order_new                   (const char *play_order_name,
                                                             RBShellPlayer *player);

Creates a new RBPlayOrder of the specified type.

`play_order_name` : |
`player` : | RBShellPlayer instance to attach to
Returns : | RBPlayOrder instance

### RBPlayOrderDescription

    typedef struct {
    	/** Value of the state/play-order gconf key */
    	char *name;
    	/** Contents of the play order dropdown; should be gettext()ed before use. */
    	char *description;
    	/** the play order's _new function */
    	RBPlayOrder *(*constructor)(RBShellPlayer *player);
    	/** TRUE if the play order should appear in the dropdown */
    	gboolean is_in_dropdown;
    	/** If the value of the state/play-order gconf key isn't found, the one
    	 * with is_default==TRUE will be used. */
    	gboolean is_default;
    } RBPlayOrderDescription;

### rb_play_order_get_orders ()

    const RBPlayOrderDescription* rb_play_order_get_orders  (void);

Defines the set of available play orders, their translatable descriptions, their constructor functions, whether they should appear in a drop-down list of play orders, and which one is the default.

This should be the only function with full knowledge of what play orders are available.

Returns : |

### rb_play_order_playing_source_changed ()

    void                rb_play_order_playing_source_changed
                                                            (RBPlayOrder *porder,
                                                             RBSource *source);

Sets the playing RBSource for the play order. Should be called by RBShellPlayer when the active source changes. Subclasses should implement `playing_source_changed()` to make any necessary changes.

`porder` : | RBPlayOrder instance
`source` : | New playing RBSource

### rb_play_order_has_next ()

    gboolean            rb_play_order_has_next              (RBPlayOrder *porder);

If there is no current playing entry, returns true if the play order is non-empty.

`porder` : | RBPlayOrder instance.
Returns : | true if there is an entry after the current playing entry in the play order.

### rb_play_order_get_next ()

    RhythmDBEntry*      rb_play_order_get_next              (RBPlayOrder *porder);

`porder` : | RBPlayOrder instance
Returns : | the next entry in the play order, or the first if not currently playing.

### rb_play_order_go_next ()

    void                rb_play_order_go_next               (RBPlayOrder *porder);

Moves to the next entry in the play order. If not currently playing, sets the first entry in the play order as the playing entry.

`porder` : | RBPlayOrder instance

### rb_play_order_has_previous ()

    gboolean            rb_play_order_has_previous          (RBPlayOrder *porder);

`porder` : | RBPlayOrder instance
Returns : | true if there is an entry before the current entry in the play order. If not currently playing, returns false.

### rb_play_order_get_previous ()

    RhythmDBEntry*      rb_play_order_get_previous          (RBPlayOrder *porder);

`porder` : | RBPlayOrder instance
Returns : | the previous entry in the play order, or NULL if not currently playing.

### rb_play_order_go_previous ()

    void                rb_play_order_go_previous           (RBPlayOrder *porder);

Moves to the previous entry in the play order. If not currently playing, does nothing.

`porder` : | RBPlayOrder instance

### rb_play_order_get_player ()

    RBShellPlayer*      rb_play_order_get_player            (RBPlayOrder *porder);

Only for use by RBPlayOrder subclasses.

`porder` : | RBPlayOrder instance
Returns : | RBShellPlayer instance

### rb_play_order_get_source ()

    RBSource*           rb_play_order_get_source            (RBPlayOrder *porder);

Only for use by RBPlayOrder subclasses.

`porder` : | RBPlayOrder instance
Returns : | the playing RBSource instance.

### rb_play_order_get_db ()

    RhythmDB*           rb_play_order_get_db                (RBPlayOrder *porder);

Only for use by RBPlayOrder subclasses.

`porder` : | RBPlayOrder instance
Returns : | the RhythmDB instance.

### rb_play_order_get_playing_entry ()

    RhythmDBEntry*      rb_play_order_get_playing_entry     (RBPlayOrder *porder);

`porder` : | RBPlayOrder instance
Returns : | the current playing entry in the play order.

### rb_play_order_player_is_playing ()

    gboolean            rb_play_order_player_is_playing     (RBPlayOrder *porder);

`porder` : | RBPlayOrder instance
Returns : | true if there is a current playing entry in the play order.