chiark / gitweb /
Merge from Disobedience branch
[disorder] / disobedience / queue-generic.h
CommitLineData
c133bd3c
RK
1/*
2 * This file is part of DisOrder
6bfaa2a1 3 * Copyright (C) 2006-2009 Richard Kettlewell
c133bd3c 4 *
e7eb3a27 5 * This program is free software: you can redistribute it and/or modify
c133bd3c 6 * it under the terms of the GNU General Public License as published by
e7eb3a27 7 * the Free Software Foundation, either version 3 of the License, or
c133bd3c
RK
8 * (at your option) any later version.
9 *
e7eb3a27
RK
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
c133bd3c 15 * You should have received a copy of the GNU General Public License
e7eb3a27 16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
c133bd3c 17 */
132a5a4a
RK
18/** @file disobedience/queue-generic.h
19 * @brief Disobedience queue widgets
20 */
c133bd3c
RK
21#ifndef QUEUE_GENERIC_H
22#define QUEUE_GENERIC_H
23
24/** @brief Definition of a column */
25struct queue_column {
26 /** @brief Column name */
27 const char *name;
28
29 /** @brief Compute value for this column */
30 const char *(*value)(const struct queue_entry *q,
31 const char *data);
32
33 /** @brief Passed to value() */
34 const char *data;
35
b0b15b7c
RK
36 /** @brief Flags word */
37 unsigned flags;
c133bd3c
RK
38};
39
b0b15b7c
RK
40/** @brief Ellipsize column if too wide */
41#define COL_ELLIPSIZE 0x0001
42
43/** @brief Set expand property */
44#define COL_EXPAND 0x0002
45
46/** @brief Right-algin column */
47#define COL_RIGHT 0x0004
48
c133bd3c
RK
49/** @brief Definition of a queue-like window */
50struct queuelike {
51
52 /* Things filled in by the caller: */
53
ee7552f8
RK
54 /** @brief Name for this tab */
55 const char *name;
56
c133bd3c 57 /** @brief Initialization function */
a8c0e917 58 void (*init)(struct queuelike *ql);
c133bd3c
RK
59
60 /** @brief Columns */
61 const struct queue_column *columns;
62
63 /** @brief Number of columns in this queuelike */
64 int ncolumns;
65
66 /** @brief Items for popup menu */
6982880f 67 struct menuitem *menuitems;
c133bd3c
RK
68
69 /** @brief Number of menu items */
70 int nmenuitems;
71
72 /* Dynamic state: */
73
74 /** @brief The head of the queue */
75 struct queue_entry *q;
76
77 /* Things created by the implementation: */
78
79 /** @brief The list store */
80 GtkListStore *store;
81
82 /** @brief The tree view */
83 GtkWidget *view;
84
85 /** @brief The selection */
86 GtkTreeSelection *selection;
87
88 /** @brief The popup menu */
89 GtkWidget *menu;
54156c62
RK
90
91 /** @brief Menu callbacks */
92 struct tabtype tabtype;
82db9336
RK
93
94 /** @brief Drag-drop callback, or NULL for no drag+drop
0beb320e
RK
95 * @param ql Owning queuelike
96 * @param ntracks Number of tracks to be dropped
97 * @param tracks List of track names
98 * @param ids List of track IDs
99 * @param after_me Drop after this or NULL to drop at head
82db9336
RK
100 *
101 * If the rearrangement is impossible then the displayed queue must be put
102 * back.
103 */
0beb320e
RK
104 void (*drop)(struct queuelike *ql, int ntracks, char **tracks, char **ids,
105 struct queue_entry *after_me);
82db9336 106
a6712ea8
RK
107 /** @brief Source target list */
108 const GtkTargetEntry *drag_source_targets;
109
110 /** @brief Drag source actions */
111 GdkDragAction drag_source_actions;
112
113 /** @brief Destination target list */
114 const GtkTargetEntry *drag_dest_targets;
115
116 /** @brief Drag destination actions */
117 GdkDragAction drag_dest_actions;
118
c133bd3c
RK
119};
120
a6712ea8
RK
121enum {
122 PLAYABLE_TRACKS_ID,
123 QUEUED_TRACKS_ID,
124 PLAYLIST_TRACKS_ID
125};
126
127#define PLAYABLE_TRACKS (char *)"text/x-disorder-playable-tracks"
128#define QUEUED_TRACKS (char *)"text/x-disorder-queued-tracks"
129#define PLAYLIST_TRACKS (char *)"text/x-disorder-playlist-tracks"
130
0fb5e8f3
RK
131enum {
132 QUEUEPOINTER_COLUMN,
133 FOREGROUND_COLUMN,
134 BACKGROUND_COLUMN,
135
136 EXTRA_COLUMNS
137};
138
9b44040b
RK
139#define BG_PLAYING "#e0ffe0"
140#define FG_PLAYING "black"
0fb5e8f3 141
c133bd3c
RK
142extern struct queuelike ql_queue;
143extern struct queuelike ql_recent;
144extern struct queuelike ql_added;
145
146extern time_t last_playing;
147
6982880f 148int ql_selectall_sensitive(void *extra);
c133bd3c
RK
149void ql_selectall_activate(GtkMenuItem *menuitem,
150 gpointer user_data);
6982880f 151int ql_selectnone_sensitive(void *extra);
c133bd3c
RK
152void ql_selectnone_activate(GtkMenuItem *menuitem,
153 gpointer user_data);
6982880f 154int ql_properties_sensitive(void *extra);
c133bd3c
RK
155void ql_properties_activate(GtkMenuItem *menuitem,
156 gpointer user_data);
6982880f 157int ql_scratch_sensitive(void *extra);
c133bd3c
RK
158void ql_scratch_activate(GtkMenuItem *menuitem,
159 gpointer user_data);
6982880f 160int ql_remove_sensitive(void *extra);
c133bd3c
RK
161void ql_remove_activate(GtkMenuItem *menuitem,
162 gpointer user_data);
6982880f 163int ql_play_sensitive(void *extra);
c133bd3c
RK
164void ql_play_activate(GtkMenuItem *menuitem,
165 gpointer user_data);
a49c2c0f
RK
166int ql_adopt_sensitive(void *extra);
167void ql_adopt_activate(GtkMenuItem *menuitem,
168 gpointer user_data);
c133bd3c
RK
169gboolean ql_button_release(GtkWidget *widget,
170 GdkEventButton *event,
171 gpointer user_data);
172GtkWidget *init_queuelike(struct queuelike *ql);
6bfaa2a1 173void destroy_queuelike(struct queuelike *ql);
c133bd3c
RK
174void ql_update_list_store(struct queuelike *ql) ;
175void ql_update_row(struct queue_entry *q,
176 GtkTreeIter *iter);
177void ql_new_queue(struct queuelike *ql,
178 struct queue_entry *newq);
179const char *column_when(const struct queue_entry *q,
180 const char *data);
181const char *column_who(const struct queue_entry *q,
182 const char *data);
183const char *column_namepart(const struct queue_entry *q,
184 const char *data);
185const char *column_length(const struct queue_entry *q,
186 const char *data);
ee7552f8 187struct tabtype *ql_tabtype(struct queuelike *ql);
83fb99f9 188struct queue_entry *ql_iter_to_q(GtkTreeModel *model,
22717074 189 GtkTreeIter *iter);
0beb320e
RK
190struct queue_entry *ql_path_to_q(GtkTreeModel *model,
191 GtkTreePath *path);
c133bd3c
RK
192
193#endif /* QUEUE_GENERIC_H */
194
195/*
196Local Variables:
197c-basic-offset:2
198comment-column:40
199fill-column:79
200indent-tabs-mode:nil
201End:
202*/