2 * This file is part of DisOrder
3 * Copyright (C) 2006-2008 Richard Kettlewell
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
20 #ifndef QUEUE_GENERIC_H
21 #define QUEUE_GENERIC_H
23 /** @brief Definition of a column */
25 /** @brief Column name */
28 /** @brief Compute value for this column */
29 const char *(*value
)(const struct queue_entry
*q
,
32 /** @brief Passed to value() */
35 /** @brief Flags word */
39 /** @brief Ellipsize column if too wide */
40 #define COL_ELLIPSIZE 0x0001
42 /** @brief Set expand property */
43 #define COL_EXPAND 0x0002
45 /** @brief Right-algin column */
46 #define COL_RIGHT 0x0004
48 /** @brief Definition of a queue-like window */
51 /* Things filled in by the caller: */
53 /** @brief Name for this tab */
56 /** @brief Initialization function */
60 const struct queue_column
*columns
;
62 /** @brief Number of columns in this queuelike */
65 /** @brief Items for popup menu */
66 struct menuitem
*menuitems
;
68 /** @brief Number of menu items */
73 /** @brief The head of the queue */
74 struct queue_entry
*q
;
76 /* Things created by the implementation: */
78 /** @brief The list store */
81 /** @brief The tree view */
84 /** @brief The selection */
85 GtkTreeSelection
*selection
;
87 /** @brief The popup menu */
90 /** @brief Menu callbacks */
91 struct tabtype tabtype
;
93 /** @brief Drag-drop callback, or NULL for no drag+drop
94 * @param src Row to move
95 * @param dst Destination position
97 * If the rearrangement is impossible then the displayed queue must be put
100 void (*drop
)(int src
, int dst
);
102 /** @brief Stashed drag target row */
103 GtkTreePath
*drag_target
;
114 /* TODO probably need to set "horizontal-separator" to 0, but can't find any
115 * coherent description of how to set style properties in isolation. */
120 # define BG_PLAYING "#e0ffe0"
121 # define FG_PLAYING "black"
124 extern struct queuelike ql_queue
;
125 extern struct queuelike ql_recent
;
126 extern struct queuelike ql_added
;
128 extern time_t last_playing
;
130 int ql_selectall_sensitive(void *extra
);
131 void ql_selectall_activate(GtkMenuItem
*menuitem
,
133 int ql_selectnone_sensitive(void *extra
);
134 void ql_selectnone_activate(GtkMenuItem
*menuitem
,
136 int ql_properties_sensitive(void *extra
);
137 void ql_properties_activate(GtkMenuItem
*menuitem
,
139 int ql_scratch_sensitive(void *extra
);
140 void ql_scratch_activate(GtkMenuItem
*menuitem
,
142 int ql_remove_sensitive(void *extra
);
143 void ql_remove_activate(GtkMenuItem
*menuitem
,
145 int ql_play_sensitive(void *extra
);
146 void ql_play_activate(GtkMenuItem
*menuitem
,
148 gboolean
ql_button_release(GtkWidget
*widget
,
149 GdkEventButton
*event
,
151 GtkWidget
*init_queuelike(struct queuelike
*ql
);
152 void ql_update_list_store(struct queuelike
*ql
) ;
153 void ql_update_row(struct queue_entry
*q
,
155 void ql_new_queue(struct queuelike
*ql
,
156 struct queue_entry
*newq
);
157 const char *column_when(const struct queue_entry
*q
,
159 const char *column_who(const struct queue_entry
*q
,
161 const char *column_namepart(const struct queue_entry
*q
,
163 const char *column_length(const struct queue_entry
*q
,
165 struct tabtype
*ql_tabtype(struct queuelike
*ql
);
166 struct queue_entry
*ql_iter_to_q(GtkTreeModel
*model
,
169 #endif /* QUEUE_GENERIC_H */