Merge /fml/ag-raetsch/home/maan/scm/paraslash_meins/paraslash/
[paraslash.git] / gui_theme.c
1 /*
2  * Copyright (C) 2005-2007 Andre Noll <maan@systemlinux.org>
3  *
4  *     This program is free software; you can redistribute it and/or modify
5  *     it under the terms of the GNU General Public License as published by
6  *     the Free Software Foundation; either version 2 of the License, or
7  *     (at your option) any later version.
8  *
9  *     This program is distributed in the hope that it will be useful,
10  *     but WITHOUT ANY WARRANTY; without even the implied warranty of
11  *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  *     GNU General Public License for more details.
13  *
14  *     You should have received a copy of the GNU General Public License
15  *     along with this program; if not, write to the Free Software
16  *     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
17  */
18
19 #include "para.h"
20 #include "gui.h"
21 #include <curses.h>
22
23 #define NUM_THEMES 2
24
25
26 static int current_theme_num;
27
28 static void init_theme_simple(struct gui_theme *t)
29 {
30         struct stat_item_data *d = t->data;
31         t->name = "simple";
32         t->author = "Andre Noll";
33         t->lines_min = 5;
34         t->top_lines_min = 2;
35         t->cols_min = 40;
36         t->top_lines_default = 2;
37         t->sb_bg = COLOR_CYAN;
38         t->sb_fg = COLOR_BLACK;
39         t->cmd_bg = COLOR_WHITE;
40         t->cmd_fg = COLOR_BLACK;
41         t->output_bg = COLOR_BLUE;
42         t->output_fg = COLOR_WHITE;
43         t->msg_bg = COLOR_BLUE;
44         t->msg_fg = COLOR_YELLOW;
45         t->err_msg_bg = COLOR_RED;
46         t->err_msg_fg = COLOR_WHITE;
47         t->welcome_bg = COLOR_BLUE;
48         t->welcome_fg = COLOR_WHITE;
49         t->sep_bg = COLOR_BLUE;
50         t->sep_fg = COLOR_CYAN;
51         t->default_fg = COLOR_WHITE;
52         t->default_bg = COLOR_BLUE;
53         t->sep_str = "*";
54
55         d[SI_STATUS_BAR].prefix = "";
56         d[SI_STATUS_BAR].postfix = "";
57         d[SI_STATUS_BAR].fg = COLOR_WHITE;
58         d[SI_STATUS_BAR].bg = COLOR_BLUE;
59         d[SI_STATUS_BAR].align = CENTER;
60         d[SI_STATUS_BAR].x = 0;
61         d[SI_STATUS_BAR].y = 7;
62         d[SI_STATUS_BAR].len = 100;
63
64         d[SI_STATUS].prefix = "para_server: ";
65         d[SI_STATUS].postfix = "";
66         d[SI_STATUS].fg = COLOR_WHITE;
67         d[SI_STATUS].bg = COLOR_BLUE;
68         d[SI_STATUS].align = CENTER;
69         d[SI_STATUS].x = 0;
70         d[SI_STATUS].y = 60;
71         d[SI_STATUS].len = 50;
72
73         d[SI_AUDIOD_STATUS].prefix = "para_audiod: ";
74         d[SI_AUDIOD_STATUS].postfix = "";
75         d[SI_AUDIOD_STATUS].fg = COLOR_WHITE;
76         d[SI_AUDIOD_STATUS].bg = COLOR_BLUE;
77         d[SI_AUDIOD_STATUS].align = CENTER;
78         d[SI_AUDIOD_STATUS].x = 50;
79         d[SI_AUDIOD_STATUS].y = 60;
80         d[SI_AUDIOD_STATUS].len = 50;
81
82 }
83
84 static void init_theme_colorful_blackness(struct gui_theme *t)
85 {
86         struct stat_item_data *d = t->data;
87         t->name = "colorful blackness";
88         t->author = "Andre Noll";
89         /* minimal number of lines that is needed to display all
90          * information provided by this theme
91          */
92         t->lines_min = 15;
93         t->cols_min = 80;
94         t->top_lines_min = 9;
95         t->top_lines_default = 11; /* default number of lines */
96
97         t->sb_bg = COLOR_GREEN; /* status bar background */
98         t->sb_fg = COLOR_BLACK; /* status bar foreground */
99         t->cmd_bg = COLOR_BLACK;
100         t->cmd_fg = COLOR_YELLOW;
101         t->output_bg = COLOR_BLACK;
102         t->output_fg = COLOR_CYAN;
103         t->msg_bg = COLOR_BLACK;
104         t->msg_fg = COLOR_WHITE;
105         t->err_msg_bg = COLOR_RED;
106         t->err_msg_fg = COLOR_WHITE;
107         t->welcome_bg = COLOR_BLUE;
108         t->welcome_fg = COLOR_WHITE;
109         t->sep_bg = COLOR_BLACK; /* color of the separator */
110         t->sep_fg = COLOR_BLUE;
111         t->sep_str = "-";
112         t->default_bg = COLOR_BLACK;
113         t->default_fg = COLOR_MAGENTA;
114
115
116         d[SI_PLAY_TIME].prefix = "";
117         d[SI_PLAY_TIME].postfix = "";
118         d[SI_PLAY_TIME].fg = COLOR_CYAN;
119         d[SI_PLAY_TIME].bg = COLOR_BLACK;
120         d[SI_PLAY_TIME].align = CENTER;
121         d[SI_PLAY_TIME].x = 0;
122         d[SI_PLAY_TIME].y = 7;
123         d[SI_PLAY_TIME].len = 35;
124
125         d[SI_STATUS_BAR].prefix = "";
126         d[SI_STATUS_BAR].postfix = "";
127         d[SI_STATUS_BAR].fg = COLOR_CYAN;
128         d[SI_STATUS_BAR].bg = COLOR_BLACK;
129         d[SI_STATUS_BAR].align = LEFT;
130         d[SI_STATUS_BAR].x = 35;
131         d[SI_STATUS_BAR].y = 7;
132         d[SI_STATUS_BAR].len = 65;
133
134         d[SI_STATUS].prefix = "";
135         d[SI_STATUS].postfix = " ";
136         d[SI_STATUS].fg = COLOR_RED;
137         d[SI_STATUS].bg = COLOR_BLACK;
138         d[SI_STATUS].align = RIGHT;
139         d[SI_STATUS].x = 0;
140         d[SI_STATUS].y = 17;
141         d[SI_STATUS].len = 11;
142
143         d[SI_STATUS_FLAGS].prefix = "(";
144         d[SI_STATUS_FLAGS].postfix = ")";
145         d[SI_STATUS_FLAGS].fg = COLOR_RED;
146         d[SI_STATUS_FLAGS].bg = COLOR_BLACK;
147         d[SI_STATUS_FLAGS].align = LEFT;
148         d[SI_STATUS_FLAGS].x = 11;
149         d[SI_STATUS_FLAGS].y = 17;
150         d[SI_STATUS_FLAGS].len = 10;
151
152         d[SI_SELECTOR].prefix = "selector: ";
153         d[SI_SELECTOR].postfix = "";
154         d[SI_SELECTOR].fg = COLOR_RED;
155         d[SI_SELECTOR].bg = COLOR_BLACK;
156         d[SI_SELECTOR].align = CENTER;
157         d[SI_SELECTOR].x = 21;
158         d[SI_SELECTOR].y = 17;
159         d[SI_SELECTOR].len = 21;
160
161         d[SI_FORMAT].prefix = "format: ";
162         d[SI_FORMAT].postfix = "";
163         d[SI_FORMAT].fg = COLOR_RED;
164         d[SI_FORMAT].bg = COLOR_BLACK;
165         d[SI_FORMAT].align = CENTER;
166         d[SI_FORMAT].x = 42;
167         d[SI_FORMAT].y = 17;
168         d[SI_FORMAT].len = 18;
169
170         d[SI_NUM_PLAYED].prefix = "#";
171         d[SI_NUM_PLAYED].postfix = "";
172         d[SI_NUM_PLAYED].fg = COLOR_RED;
173         d[SI_NUM_PLAYED].bg = COLOR_BLACK;
174         d[SI_NUM_PLAYED].align = CENTER;
175         d[SI_NUM_PLAYED].x = 60;
176         d[SI_NUM_PLAYED].y = 17;
177         d[SI_NUM_PLAYED].len = 15;
178
179         d[SI_UPTIME].prefix = "SUp: ";
180         d[SI_UPTIME].postfix = "";
181         d[SI_UPTIME].fg = COLOR_RED;
182         d[SI_UPTIME].bg = COLOR_BLACK;
183         d[SI_UPTIME].align = CENTER;
184         d[SI_UPTIME].x = 75;
185         d[SI_UPTIME].y = 17;
186         d[SI_UPTIME].len = 25;
187
188         d[SI_AUDIOD_STATUS].prefix = "audiod: ";
189         d[SI_AUDIOD_STATUS].postfix = "";
190         d[SI_AUDIOD_STATUS].fg = COLOR_MAGENTA;
191         d[SI_AUDIOD_STATUS].bg = COLOR_BLACK;
192         d[SI_AUDIOD_STATUS].align = RIGHT;
193         d[SI_AUDIOD_STATUS].x = 0;
194         d[SI_AUDIOD_STATUS].y = 27;
195         d[SI_AUDIOD_STATUS].len = 14;
196
197
198         d[SI_DECODER_FLAGS].prefix = "[";
199         d[SI_DECODER_FLAGS].postfix = "]";
200         d[SI_DECODER_FLAGS].fg = COLOR_MAGENTA;
201         d[SI_DECODER_FLAGS].bg = COLOR_BLACK;
202         d[SI_DECODER_FLAGS].align = LEFT;
203         d[SI_DECODER_FLAGS].x = 15;
204         d[SI_DECODER_FLAGS].y = 27;
205         d[SI_DECODER_FLAGS].len = 10;
206
207         d[SI_MTIME].prefix = "Mtime: ";
208         d[SI_MTIME].postfix = "";
209         d[SI_MTIME].fg = COLOR_MAGENTA;
210         d[SI_MTIME].bg = COLOR_BLACK;
211         d[SI_MTIME].align = CENTER;
212         d[SI_MTIME].x = 25;
213         d[SI_MTIME].y = 27;
214         d[SI_MTIME].len = 29;
215
216         d[SI_FILE_SIZE].prefix = "Size: ";
217         d[SI_FILE_SIZE].postfix = " kb";
218         d[SI_FILE_SIZE].fg = COLOR_MAGENTA;
219         d[SI_FILE_SIZE].bg = COLOR_BLACK;
220         d[SI_FILE_SIZE].align = CENTER;
221         d[SI_FILE_SIZE].x = 54;
222         d[SI_FILE_SIZE].y = 27;
223         d[SI_FILE_SIZE].len = 24;
224
225         d[SI_AUDIOD_UPTIME].prefix = "AUp: ";
226         d[SI_AUDIOD_UPTIME].postfix = "";
227         d[SI_AUDIOD_UPTIME].fg = COLOR_MAGENTA;
228         d[SI_AUDIOD_UPTIME].bg = COLOR_BLACK;
229         d[SI_AUDIOD_UPTIME].align = CENTER;
230         d[SI_AUDIOD_UPTIME].x = 78;
231         d[SI_AUDIOD_UPTIME].y = 27;
232         d[SI_AUDIOD_UPTIME].len = 22;
233
234
235         d[SI_AUDIO_INFO1].prefix = "";
236         d[SI_AUDIO_INFO1].postfix = "";
237         d[SI_AUDIO_INFO1].fg = COLOR_GREEN;
238         d[SI_AUDIO_INFO1].bg = COLOR_BLACK;
239         d[SI_AUDIO_INFO1].align = CENTER;
240         d[SI_AUDIO_INFO1].x = 0;
241         d[SI_AUDIO_INFO1].y = 43;
242         d[SI_AUDIO_INFO1].len = 100;
243
244         d[SI_AUDIO_INFO2].prefix = "";
245         d[SI_AUDIO_INFO2].postfix = "";
246         d[SI_AUDIO_INFO2].fg = COLOR_GREEN;
247         d[SI_AUDIO_INFO2].bg = COLOR_BLACK;
248         d[SI_AUDIO_INFO2].align = CENTER;
249         d[SI_AUDIO_INFO2].x = 0;
250         d[SI_AUDIO_INFO2].y = 53;
251         d[SI_AUDIO_INFO2].len = 100;
252
253         d[SI_AUDIO_INFO3].prefix = "";
254         d[SI_AUDIO_INFO3].postfix = "";
255         d[SI_AUDIO_INFO3].fg = COLOR_GREEN;
256         d[SI_AUDIO_INFO3].bg = COLOR_BLACK;
257         d[SI_AUDIO_INFO3].align = CENTER;
258         d[SI_AUDIO_INFO3].x = 0;
259         d[SI_AUDIO_INFO3].y = 63;
260         d[SI_AUDIO_INFO3].len = 100;
261
262         d[SI_DBINFO1].prefix = "";
263         d[SI_DBINFO1].postfix = "";
264         d[SI_DBINFO1].fg = COLOR_YELLOW;
265         d[SI_DBINFO1].bg = COLOR_BLACK;
266         d[SI_DBINFO1].align = CENTER;
267         d[SI_DBINFO1].x = 0;
268         d[SI_DBINFO1].y = 77;
269         d[SI_DBINFO1].len = 100;
270
271         d[SI_DBINFO2].prefix = "";
272         d[SI_DBINFO2].postfix = "";
273         d[SI_DBINFO2].fg = COLOR_YELLOW;
274         d[SI_DBINFO2].bg = COLOR_BLACK;
275         d[SI_DBINFO2].align = CENTER;
276         d[SI_DBINFO2].x = 0;
277         d[SI_DBINFO2].y = 87;
278         d[SI_DBINFO2].len = 100;
279
280         d[SI_DBINFO3].prefix = "";
281         d[SI_DBINFO3].postfix = "";
282         d[SI_DBINFO3].fg = COLOR_YELLOW;
283         d[SI_DBINFO3].bg = COLOR_BLACK;
284         d[SI_DBINFO3].align = CENTER;
285         d[SI_DBINFO3].x = 0;
286         d[SI_DBINFO3].y = 97;
287         d[SI_DBINFO3].len = 100;
288 }
289
290 void init_theme(int num, struct gui_theme *t)
291 {
292         int i;
293
294         for (i = 0; i < NUM_STAT_ITEMS; i++)
295                 t->data[i].len = 0;
296         current_theme_num = num;
297
298         return (num % NUM_THEMES)?
299                 init_theme_simple(t) : init_theme_colorful_blackness(t);
300 }
301
302 void prev_theme(struct gui_theme *t)
303 {
304         return init_theme(++current_theme_num, t);
305 }
306
307 void next_theme(struct gui_theme *t)
308 {
309         return init_theme(--current_theme_num, t);
310 }
311