X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/c133bd3c7f6d982e5447acf61e0b32853e34459b..319d7107dfbed2e6248f61ad463fa6ac55ebe178:/disobedience/queue-generic.h diff --git a/disobedience/queue-generic.h b/disobedience/queue-generic.h index 7ee93b6..1888602 100644 --- a/disobedience/queue-generic.h +++ b/disobedience/queue-generic.h @@ -32,37 +32,27 @@ struct queue_column { /** @brief Passed to value() */ const char *data; - /** @brief TODO */ - gfloat xalign; + /** @brief Flags word */ + unsigned flags; }; -/** @brief An item in the queue's popup menu */ -struct queue_menuitem { - /** @brief Menu item name */ - const char *name; - - /** @brief Called to activate the menu item */ - void (*activate)(GtkMenuItem *menuitem, - gpointer user_data); - - /** @brief Called to determine whether the menu item is usable. - * - * Returns @c TRUE if it should be sensitive and @c FALSE otherwise. - */ - int (*sensitive)(struct queuelike *ql); +/** @brief Ellipsize column if too wide */ +#define COL_ELLIPSIZE 0x0001 - /** @brief Signal handler ID */ - gulong handlerid; +/** @brief Set expand property */ +#define COL_EXPAND 0x0002 - /** @brief Widget for menu item */ - GtkWidget *w; -}; +/** @brief Right-algin column */ +#define COL_RIGHT 0x0004 /** @brief Definition of a queue-like window */ struct queuelike { /* Things filled in by the caller: */ + /** @brief Name for this tab */ + const char *name; + /** @brief Initialization function */ void (*init)(void); @@ -73,7 +63,7 @@ struct queuelike { int ncolumns; /** @brief Items for popup menu */ - struct queue_menuitem *menuitems; + struct menuitem *menuitems; /** @brief Number of menu items */ int nmenuitems; @@ -96,30 +86,51 @@ struct queuelike { /** @brief The popup menu */ GtkWidget *menu; + + /** @brief Menu callbacks */ + struct tabtype tabtype; +}; + +enum { + QUEUEPOINTER_COLUMN, + FOREGROUND_COLUMN, + BACKGROUND_COLUMN, + + EXTRA_COLUMNS }; +/* TODO probably need to set "horizontal-separator" to 0, but can't find any + * coherent description of how to set style properties in isolation. */ +#define BG_PLAYING 0 +#define FG_PLAYING 0 + +#ifndef BG_PLAYING +# define BG_PLAYING "#e0ffe0" +# define FG_PLAYING "black" +#endif + extern struct queuelike ql_queue; extern struct queuelike ql_recent; extern struct queuelike ql_added; extern time_t last_playing; -int ql_selectall_sensitive(struct queuelike *ql); +int ql_selectall_sensitive(void *extra); void ql_selectall_activate(GtkMenuItem *menuitem, gpointer user_data); -int ql_selectnone_sensitive(struct queuelike *ql); +int ql_selectnone_sensitive(void *extra); void ql_selectnone_activate(GtkMenuItem *menuitem, gpointer user_data); -int ql_properties_sensitive(struct queuelike *ql); +int ql_properties_sensitive(void *extra); void ql_properties_activate(GtkMenuItem *menuitem, gpointer user_data); -int ql_scratch_sensitive(struct queuelike *ql); +int ql_scratch_sensitive(void *extra); void ql_scratch_activate(GtkMenuItem *menuitem, gpointer user_data); -int ql_remove_sensitive(struct queuelike *ql); +int ql_remove_sensitive(void *extra); void ql_remove_activate(GtkMenuItem *menuitem, gpointer user_data); -int ql_play_sensitive(struct queuelike *ql); +int ql_play_sensitive(void *extra); void ql_play_activate(GtkMenuItem *menuitem, gpointer user_data); gboolean ql_button_release(GtkWidget *widget, @@ -139,6 +150,9 @@ const char *column_namepart(const struct queue_entry *q, const char *data); const char *column_length(const struct queue_entry *q, const char *data); +struct tabtype *ql_tabtype(struct queuelike *ql); +struct queue_entry *ql_iter_to_q(GtkTreeModel *model, + GtkTreeIter *iter); #endif /* QUEUE_GENERIC_H */