Re-revert "Auto-adjust fecdec output buffer size."
[paraslash.git] / gui_theme.c
1 /*
2  * Copyright (C) 2005-2009 Andre Noll <maan@systemlinux.org>
3  *
4  * Licensed under the GPL v2. For licencing details see COPYING.
5  */
6
7 #include "para.h"
8 #include "gui.h"
9 #include <curses.h>
10
11 #define NUM_THEMES 2
12
13
14 static int current_theme_num;
15
16 static void init_theme_simple(struct gui_theme *t)
17 {
18         struct stat_item_data *d = t->data;
19         t->name = "simple";
20         t->author = "Andre Noll";
21         t->lines_min = 5;
22         t->top_lines_min = 2;
23         t->cols_min = 40;
24         t->top_lines_default = 2;
25         t->sb_bg = COLOR_CYAN;
26         t->sb_fg = COLOR_BLACK;
27         t->cmd_bg = COLOR_WHITE;
28         t->cmd_fg = COLOR_BLACK;
29         t->output_bg = COLOR_BLUE;
30         t->output_fg = COLOR_WHITE;
31         t->msg_bg = COLOR_BLUE;
32         t->msg_fg = COLOR_YELLOW;
33         t->err_msg_bg = COLOR_RED;
34         t->err_msg_fg = COLOR_WHITE;
35         t->welcome_bg = COLOR_BLUE;
36         t->welcome_fg = COLOR_WHITE;
37         t->sep_bg = COLOR_BLUE;
38         t->sep_fg = COLOR_CYAN;
39         t->default_fg = COLOR_WHITE;
40         t->default_bg = COLOR_BLUE;
41         t->sep_str = "*";
42
43         d[SI_BASENAME].prefix = "";
44         d[SI_BASENAME].postfix = "";
45         d[SI_BASENAME].fg = COLOR_WHITE;
46         d[SI_BASENAME].bg = COLOR_BLUE;
47         d[SI_BASENAME].align = CENTER;
48         d[SI_BASENAME].x = 0;
49         d[SI_BASENAME].y = 7;
50         d[SI_BASENAME].len = 100;
51
52         d[SI_STATUS].prefix = "para_server: ";
53         d[SI_STATUS].postfix = "";
54         d[SI_STATUS].fg = COLOR_WHITE;
55         d[SI_STATUS].bg = COLOR_BLUE;
56         d[SI_STATUS].align = CENTER;
57         d[SI_STATUS].x = 0;
58         d[SI_STATUS].y = 60;
59         d[SI_STATUS].len = 50;
60
61         d[SI_AUDIOD_STATUS].prefix = "para_audiod: ";
62         d[SI_AUDIOD_STATUS].postfix = "";
63         d[SI_AUDIOD_STATUS].fg = COLOR_WHITE;
64         d[SI_AUDIOD_STATUS].bg = COLOR_BLUE;
65         d[SI_AUDIOD_STATUS].align = CENTER;
66         d[SI_AUDIOD_STATUS].x = 50;
67         d[SI_AUDIOD_STATUS].y = 60;
68         d[SI_AUDIOD_STATUS].len = 50;
69
70 }
71
72 static void init_theme_colorful_blackness(struct gui_theme *t)
73 {
74         struct stat_item_data *d = t->data;
75         t->name = "colorful blackness";
76         t->author = "Andre Noll";
77         /* minimal number of lines that is needed to display all
78          * information provided by this theme
79          */
80         t->lines_min = 15;
81         t->cols_min = 80;
82         t->top_lines_min = 9;
83         t->top_lines_default = 11; /* default number of lines */
84
85         t->sb_bg = COLOR_GREEN; /* status bar background */
86         t->sb_fg = COLOR_BLACK; /* status bar foreground */
87         t->cmd_bg = COLOR_BLACK;
88         t->cmd_fg = COLOR_YELLOW;
89         t->output_bg = COLOR_BLACK;
90         t->output_fg = COLOR_CYAN;
91         t->msg_bg = COLOR_BLACK;
92         t->msg_fg = COLOR_WHITE;
93         t->err_msg_bg = COLOR_RED;
94         t->err_msg_fg = COLOR_WHITE;
95         t->welcome_bg = COLOR_BLUE;
96         t->welcome_fg = COLOR_WHITE;
97         t->sep_bg = COLOR_BLACK; /* color of the separator */
98         t->sep_fg = COLOR_BLUE;
99         t->sep_str = "-";
100         t->default_bg = COLOR_BLACK;
101         t->default_fg = COLOR_MAGENTA;
102
103
104         d[SI_PLAY_TIME].prefix = "";
105         d[SI_PLAY_TIME].postfix = "";
106         d[SI_PLAY_TIME].fg = COLOR_CYAN;
107         d[SI_PLAY_TIME].bg = COLOR_BLACK;
108         d[SI_PLAY_TIME].align = CENTER;
109         d[SI_PLAY_TIME].x = 0;
110         d[SI_PLAY_TIME].y = 7;
111         d[SI_PLAY_TIME].len = 35;
112
113         d[SI_BASENAME].prefix = "";
114         d[SI_BASENAME].postfix = "";
115         d[SI_BASENAME].fg = COLOR_CYAN;
116         d[SI_BASENAME].bg = COLOR_BLACK;
117         d[SI_BASENAME].align = LEFT;
118         d[SI_BASENAME].x = 35;
119         d[SI_BASENAME].y = 7;
120         d[SI_BASENAME].len = 65;
121
122         d[SI_STATUS].prefix = "";
123         d[SI_STATUS].postfix = " ";
124         d[SI_STATUS].fg = COLOR_RED;
125         d[SI_STATUS].bg = COLOR_BLACK;
126         d[SI_STATUS].align = RIGHT;
127         d[SI_STATUS].x = 0;
128         d[SI_STATUS].y = 17;
129         d[SI_STATUS].len = 11;
130
131         d[SI_STATUS_FLAGS].prefix = "(";
132         d[SI_STATUS_FLAGS].postfix = ")";
133         d[SI_STATUS_FLAGS].fg = COLOR_RED;
134         d[SI_STATUS_FLAGS].bg = COLOR_BLACK;
135         d[SI_STATUS_FLAGS].align = LEFT;
136         d[SI_STATUS_FLAGS].x = 11;
137         d[SI_STATUS_FLAGS].y = 17;
138         d[SI_STATUS_FLAGS].len = 10;
139
140         d[SI_IMAGE_ID].prefix = "img: ";
141         d[SI_IMAGE_ID].postfix = "";
142         d[SI_IMAGE_ID].fg = COLOR_RED;
143         d[SI_IMAGE_ID].bg = COLOR_BLACK;
144         d[SI_IMAGE_ID].align = CENTER;
145         d[SI_IMAGE_ID].x = 21;
146         d[SI_IMAGE_ID].y = 17;
147         d[SI_IMAGE_ID].len = 10;
148
149         d[SI_LYRICS_ID].prefix = "lyr: ";
150         d[SI_LYRICS_ID].postfix = "";
151         d[SI_LYRICS_ID].fg = COLOR_RED;
152         d[SI_LYRICS_ID].bg = COLOR_BLACK;
153         d[SI_LYRICS_ID].align = CENTER;
154         d[SI_LYRICS_ID].x = 31;
155         d[SI_LYRICS_ID].y = 17;
156         d[SI_LYRICS_ID].len = 11;
157
158         d[SI_FORMAT].prefix = "format: ";
159         d[SI_FORMAT].postfix = "";
160         d[SI_FORMAT].fg = COLOR_RED;
161         d[SI_FORMAT].bg = COLOR_BLACK;
162         d[SI_FORMAT].align = CENTER;
163         d[SI_FORMAT].x = 42;
164         d[SI_FORMAT].y = 17;
165         d[SI_FORMAT].len = 18;
166
167         d[SI_NUM_PLAYED].prefix = "#";
168         d[SI_NUM_PLAYED].postfix = "";
169         d[SI_NUM_PLAYED].fg = COLOR_RED;
170         d[SI_NUM_PLAYED].bg = COLOR_BLACK;
171         d[SI_NUM_PLAYED].align = LEFT;
172         d[SI_NUM_PLAYED].x = 60;
173         d[SI_NUM_PLAYED].y = 17;
174         d[SI_NUM_PLAYED].len = 5;
175
176         d[SI_BITRATE].prefix = "";
177         d[SI_BITRATE].postfix = "";
178         d[SI_BITRATE].fg = COLOR_RED;
179         d[SI_BITRATE].bg = COLOR_BLACK;
180         d[SI_BITRATE].align = CENTER;
181         d[SI_BITRATE].x = 65;
182         d[SI_BITRATE].y = 17;
183         d[SI_BITRATE].len = 13;
184
185         d[SI_FREQUENCY].prefix = "";
186         d[SI_FREQUENCY].postfix = "";
187         d[SI_FREQUENCY].fg = COLOR_RED;
188         d[SI_FREQUENCY].bg = COLOR_BLACK;
189         d[SI_FREQUENCY].align = CENTER;
190         d[SI_FREQUENCY].x = 78;
191         d[SI_FREQUENCY].y = 17;
192         d[SI_FREQUENCY].len = 10;
193
194         d[SI_SCORE].prefix = "sc: ";
195         d[SI_SCORE].postfix = "";
196         d[SI_SCORE].fg = COLOR_RED;
197         d[SI_SCORE].bg = COLOR_BLACK;
198         d[SI_SCORE].align = CENTER;
199         d[SI_SCORE].x = 88;
200         d[SI_SCORE].y = 17;
201         d[SI_SCORE].len = 10;
202
203         d[SI_AUDIOD_STATUS].prefix = "";
204         d[SI_AUDIOD_STATUS].postfix = "";
205         d[SI_AUDIOD_STATUS].fg = COLOR_MAGENTA;
206         d[SI_AUDIOD_STATUS].bg = COLOR_BLACK;
207         d[SI_AUDIOD_STATUS].align = CENTER;
208         d[SI_AUDIOD_STATUS].x = 0;
209         d[SI_AUDIOD_STATUS].y = 27;
210         d[SI_AUDIOD_STATUS].len = 5;
211
212         d[SI_DECODER_FLAGS].prefix = "[";
213         d[SI_DECODER_FLAGS].postfix = "]";
214         d[SI_DECODER_FLAGS].fg = COLOR_MAGENTA;
215         d[SI_DECODER_FLAGS].bg = COLOR_BLACK;
216         d[SI_DECODER_FLAGS].align = CENTER;
217         d[SI_DECODER_FLAGS].x = 5;
218         d[SI_DECODER_FLAGS].y = 27;
219         d[SI_DECODER_FLAGS].len = 10;
220
221         d[SI_MTIME].prefix = "mod: ";
222         d[SI_MTIME].postfix = "";
223         d[SI_MTIME].fg = COLOR_MAGENTA;
224         d[SI_MTIME].bg = COLOR_BLACK;
225         d[SI_MTIME].align = CENTER;
226         d[SI_MTIME].x = 15;
227         d[SI_MTIME].y = 27;
228         d[SI_MTIME].len = 22;
229
230         d[SI_FILE_SIZE].prefix = "";
231         d[SI_FILE_SIZE].postfix = "kb";
232         d[SI_FILE_SIZE].fg = COLOR_MAGENTA;
233         d[SI_FILE_SIZE].bg = COLOR_BLACK;
234         d[SI_FILE_SIZE].align = CENTER;
235         d[SI_FILE_SIZE].x = 37;
236         d[SI_FILE_SIZE].y = 27;
237         d[SI_FILE_SIZE].len = 10;
238
239         d[SI_CHANNELS].prefix = "";
240         d[SI_CHANNELS].postfix = "ch";
241         d[SI_CHANNELS].fg = COLOR_MAGENTA;
242         d[SI_CHANNELS].bg = COLOR_BLACK;
243         d[SI_CHANNELS].align = CENTER;
244         d[SI_CHANNELS].x = 47;
245         d[SI_CHANNELS].y = 27;
246         d[SI_CHANNELS].len = 5;
247
248         d[SI_LAST_PLAYED].prefix = "lp: ";
249         d[SI_LAST_PLAYED].postfix = "";
250         d[SI_LAST_PLAYED].fg = COLOR_MAGENTA;
251         d[SI_LAST_PLAYED].bg = COLOR_BLACK;
252         d[SI_LAST_PLAYED].align = CENTER;
253         d[SI_LAST_PLAYED].x = 52;
254         d[SI_LAST_PLAYED].y = 27;
255         d[SI_LAST_PLAYED].len = 21;
256
257         d[SI_NUM_CHUNKS].prefix = "";
258         d[SI_NUM_CHUNKS].postfix = "x";
259         d[SI_NUM_CHUNKS].fg = COLOR_MAGENTA;
260         d[SI_NUM_CHUNKS].bg = COLOR_BLACK;
261         d[SI_NUM_CHUNKS].align = RIGHT;
262         d[SI_NUM_CHUNKS].x = 73;
263         d[SI_NUM_CHUNKS].y = 27;
264         d[SI_NUM_CHUNKS].len = 11;
265
266         d[SI_CHUNK_TIME].prefix = "";
267         d[SI_CHUNK_TIME].postfix = "ms";
268         d[SI_CHUNK_TIME].fg = COLOR_MAGENTA;
269         d[SI_CHUNK_TIME].bg = COLOR_BLACK;
270         d[SI_CHUNK_TIME].align = LEFT;
271         d[SI_CHUNK_TIME].x = 84;
272         d[SI_CHUNK_TIME].y = 27;
273         d[SI_CHUNK_TIME].len = 8;
274
275         d[SI_AMPLIFICATION].prefix = "amp:";
276         d[SI_AMPLIFICATION].postfix = "";
277         d[SI_AMPLIFICATION].fg = COLOR_MAGENTA;
278         d[SI_AMPLIFICATION].bg = COLOR_BLACK;
279         d[SI_AMPLIFICATION].align = RIGHT;
280         d[SI_AMPLIFICATION].x = 92;
281         d[SI_AMPLIFICATION].y = 27;
282         d[SI_AMPLIFICATION].len = 8;
283
284         d[SI_AUDIO_FILE_INFO].prefix = "";
285         d[SI_AUDIO_FILE_INFO].postfix = "";
286         d[SI_AUDIO_FILE_INFO].fg = COLOR_GREEN;
287         d[SI_AUDIO_FILE_INFO].bg = COLOR_BLACK;
288         d[SI_AUDIO_FILE_INFO].align = CENTER;
289         d[SI_AUDIO_FILE_INFO].x = 0;
290         d[SI_AUDIO_FILE_INFO].y = 43;
291         d[SI_AUDIO_FILE_INFO].len = 100;
292
293         d[SI_TAGINFO1].prefix = "";
294         d[SI_TAGINFO1].postfix = "";
295         d[SI_TAGINFO1].fg = COLOR_GREEN;
296         d[SI_TAGINFO1].bg = COLOR_BLACK;
297         d[SI_TAGINFO1].align = CENTER;
298         d[SI_TAGINFO1].x = 0;
299         d[SI_TAGINFO1].y = 53;
300         d[SI_TAGINFO1].len = 100;
301
302         d[SI_TAGINFO2].prefix = "";
303         d[SI_TAGINFO2].postfix = "";
304         d[SI_TAGINFO2].fg = COLOR_GREEN;
305         d[SI_TAGINFO2].bg = COLOR_BLACK;
306         d[SI_TAGINFO2].align = CENTER;
307         d[SI_TAGINFO2].x = 0;
308         d[SI_TAGINFO2].y = 63;
309         d[SI_TAGINFO2].len = 100;
310
311         d[SI_AFS_MODE].prefix = "";
312         d[SI_AFS_MODE].postfix = "";
313         d[SI_AFS_MODE].fg = COLOR_YELLOW;
314         d[SI_AFS_MODE].bg = COLOR_BLACK;
315         d[SI_AFS_MODE].align = CENTER;
316         d[SI_AFS_MODE].x = 0;
317         d[SI_AFS_MODE].y = 77;
318         d[SI_AFS_MODE].len = 100;
319
320         d[SI_ATTRIBUTES_TXT].prefix = "";
321         d[SI_ATTRIBUTES_TXT].postfix = "";
322         d[SI_ATTRIBUTES_TXT].fg = COLOR_YELLOW;
323         d[SI_ATTRIBUTES_TXT].bg = COLOR_BLACK;
324         d[SI_ATTRIBUTES_TXT].align = CENTER;
325         d[SI_ATTRIBUTES_TXT].x = 0;
326         d[SI_ATTRIBUTES_TXT].y = 87;
327         d[SI_ATTRIBUTES_TXT].len = 100;
328
329         d[SI_DIRECTORY].prefix = "dir: ";
330         d[SI_DIRECTORY].postfix = "";
331         d[SI_DIRECTORY].fg = COLOR_YELLOW;
332         d[SI_DIRECTORY].bg = COLOR_BLACK;
333         d[SI_DIRECTORY].align = CENTER;
334         d[SI_DIRECTORY].x = 0;
335         d[SI_DIRECTORY].y = 97;
336         d[SI_DIRECTORY].len = 100;
337 }
338
339 void init_theme(int num, struct gui_theme *t)
340 {
341         int i;
342         FOR_EACH_STATUS_ITEM(i)
343                 t->data[i].len = 0;
344         current_theme_num = num;
345
346         return (num % NUM_THEMES)?
347                 init_theme_simple(t) : init_theme_colorful_blackness(t);
348 }
349
350 void prev_theme(struct gui_theme *t)
351 {
352         return init_theme(++current_theme_num, t);
353 }
354
355 void next_theme(struct gui_theme *t)
356 {
357         return init_theme(--current_theme_num, t);
358 }
359