X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/812b526d127c6657e571db8b33a58137af6709cd..HEAD:/disobedience/queue-generic.h diff --git a/disobedience/queue-generic.h b/disobedience/queue-generic.h index 8dd9fdb..b774f22 100644 --- a/disobedience/queue-generic.h +++ b/disobedience/queue-generic.h @@ -1,6 +1,6 @@ /* * This file is part of DisOrder - * Copyright (C) 2006-2008 Richard Kettlewell + * Copyright (C) 2006-2009 Richard Kettlewell * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -55,7 +55,7 @@ struct queuelike { const char *name; /** @brief Initialization function */ - void (*init)(void); + void (*init)(struct queuelike *ql); /** @brief Columns */ const struct queue_column *columns; @@ -92,18 +92,42 @@ struct queuelike { struct tabtype tabtype; /** @brief Drag-drop callback, or NULL for no drag+drop - * @param src Row to move - * @param dst Destination position + * @param ql Owning queuelike + * @param ntracks Number of tracks to be dropped + * @param tracks List of track names + * @param ids List of track IDs + * @param after_me Drop after this or NULL to drop at head * * If the rearrangement is impossible then the displayed queue must be put * back. */ - void (*drop)(int src, int dst); + void (*drop)(struct queuelike *ql, int ntracks, char **tracks, char **ids, + struct queue_entry *after_me); - /** @brief Stashed drag target row */ - GtkTreePath *drag_target; + /** @brief Source target list */ + const GtkTargetEntry *drag_source_targets; + + /** @brief Drag source actions */ + GdkDragAction drag_source_actions; + + /** @brief Destination target list */ + const GtkTargetEntry *drag_dest_targets; + + /** @brief Drag destination actions */ + GdkDragAction drag_dest_actions; + }; +enum { + PLAYABLE_TRACKS_ID, + QUEUED_TRACKS_ID, + PLAYLIST_TRACKS_ID +}; + +#define PLAYABLE_TRACKS (char *)"text/x-disorder-playable-tracks" +#define QUEUED_TRACKS (char *)"text/x-disorder-queued-tracks" +#define PLAYLIST_TRACKS (char *)"text/x-disorder-playlist-tracks" + enum { QUEUEPOINTER_COLUMN, FOREGROUND_COLUMN, @@ -112,15 +136,8 @@ enum { 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 +#define BG_PLAYING "#e0ffe0" +#define FG_PLAYING "black" extern struct queuelike ql_queue; extern struct queuelike ql_recent; @@ -153,6 +170,7 @@ gboolean ql_button_release(GtkWidget *widget, GdkEventButton *event, gpointer user_data); GtkWidget *init_queuelike(struct queuelike *ql); +void destroy_queuelike(struct queuelike *ql); void ql_update_list_store(struct queuelike *ql) ; void ql_update_row(struct queue_entry *q, GtkTreeIter *iter); @@ -169,6 +187,8 @@ const char *column_length(const struct queue_entry *q, struct tabtype *ql_tabtype(struct queuelike *ql); struct queue_entry *ql_iter_to_q(GtkTreeModel *model, GtkTreeIter *iter); +struct queue_entry *ql_path_to_q(GtkTreeModel *model, + GtkTreePath *path); #endif /* QUEUE_GENERIC_H */