Doxygen file headers for most files
[disorder] / disobedience / queue-generic.h
1 /*
2 * This file is part of DisOrder
3 * Copyright (C) 2006-2008 Richard Kettlewell
4 *
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 3 of the License, or
8 * (at your option) any later version.
9 *
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 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18 /** @file disobedience/queue-generic.h
19 * @brief Disobedience queue widgets
20 */
21 #ifndef QUEUE_GENERIC_H
22 #define QUEUE_GENERIC_H
23
24 /** @brief Definition of a column */
25 struct 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
36 /** @brief Flags word */
37 unsigned flags;
38 };
39
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
49 /** @brief Definition of a queue-like window */
50 struct queuelike {
51
52 /* Things filled in by the caller: */
53
54 /** @brief Name for this tab */
55 const char *name;
56
57 /** @brief Initialization function */
58 void (*init)(void);
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 */
67 struct menuitem *menuitems;
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;
90
91 /** @brief Menu callbacks */
92 struct tabtype tabtype;
93 };
94
95 enum {
96 QUEUEPOINTER_COLUMN,
97 FOREGROUND_COLUMN,
98 BACKGROUND_COLUMN,
99
100 EXTRA_COLUMNS
101 };
102
103 /* TODO probably need to set "horizontal-separator" to 0, but can't find any
104 * coherent description of how to set style properties in isolation. */
105 #define BG_PLAYING 0
106 #define FG_PLAYING 0
107
108 #ifndef BG_PLAYING
109 # define BG_PLAYING "#e0ffe0"
110 # define FG_PLAYING "black"
111 #endif
112
113 extern struct queuelike ql_queue;
114 extern struct queuelike ql_recent;
115 extern struct queuelike ql_added;
116
117 extern time_t last_playing;
118
119 int ql_selectall_sensitive(void *extra);
120 void ql_selectall_activate(GtkMenuItem *menuitem,
121 gpointer user_data);
122 int ql_selectnone_sensitive(void *extra);
123 void ql_selectnone_activate(GtkMenuItem *menuitem,
124 gpointer user_data);
125 int ql_properties_sensitive(void *extra);
126 void ql_properties_activate(GtkMenuItem *menuitem,
127 gpointer user_data);
128 int ql_scratch_sensitive(void *extra);
129 void ql_scratch_activate(GtkMenuItem *menuitem,
130 gpointer user_data);
131 int ql_remove_sensitive(void *extra);
132 void ql_remove_activate(GtkMenuItem *menuitem,
133 gpointer user_data);
134 int ql_play_sensitive(void *extra);
135 void ql_play_activate(GtkMenuItem *menuitem,
136 gpointer user_data);
137 gboolean ql_button_release(GtkWidget *widget,
138 GdkEventButton *event,
139 gpointer user_data);
140 GtkWidget *init_queuelike(struct queuelike *ql);
141 void ql_update_list_store(struct queuelike *ql) ;
142 void ql_update_row(struct queue_entry *q,
143 GtkTreeIter *iter);
144 void ql_new_queue(struct queuelike *ql,
145 struct queue_entry *newq);
146 const char *column_when(const struct queue_entry *q,
147 const char *data);
148 const char *column_who(const struct queue_entry *q,
149 const char *data);
150 const char *column_namepart(const struct queue_entry *q,
151 const char *data);
152 const char *column_length(const struct queue_entry *q,
153 const char *data);
154 struct tabtype *ql_tabtype(struct queuelike *ql);
155 struct queue_entry *ql_iter_to_q(GtkTreeModel *model,
156 GtkTreeIter *iter);
157
158 #endif /* QUEUE_GENERIC_H */
159
160 /*
161 Local Variables:
162 c-basic-offset:2
163 comment-column:40
164 fill-column:79
165 indent-tabs-mode:nil
166 End:
167 */