X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=gui_theme.c;h=fb8f2f9c367101eb3b4111fe133df9c8806b72c0;hp=029e043a867c32f13897baf9c19a1546f6b2ffd3;hb=eacc2982fbf7e0c0b69508b57f85e839d1ba1013;hpb=1f556ae88bd8c85d4452f689f532f5a6abeabe92 diff --git a/gui_theme.c b/gui_theme.c index 029e043a..fb8f2f9c 100644 --- a/gui_theme.c +++ b/gui_theme.c @@ -1,69 +1,52 @@ /* - * Copyright (C) 2005 Andre Noll + * Copyright (C) 2005 Andre Noll * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + * Licensed under the GPL v2. For licencing details see COPYING. */ +/** \file gui_theme.c Theme definitions. */ + #include "para.h" +#include "gui.h" #include -#define NUM_THEMES 2 - - -static int current_theme_num; - static void init_theme_simple(struct gui_theme *t) { struct stat_item_data *d = t->data; - t->name = "simple"; t->author = "Andre Noll"; t->lines_min = 5; t->top_lines_min = 2; t->cols_min = 40; t->top_lines_default = 2; - t->sb_bg = COLOR_CYAN; - t->sb_fg = COLOR_BLACK; - t->cmd_bg = COLOR_WHITE; - t->cmd_fg = COLOR_BLACK; - t->output_bg = COLOR_BLUE; - t->output_fg = COLOR_WHITE; - t->msg_bg = COLOR_BLUE; - t->msg_fg = COLOR_YELLOW; - t->err_msg_bg = COLOR_RED; - t->err_msg_fg = COLOR_WHITE; - t->welcome_bg = COLOR_BLUE; - t->welcome_fg = COLOR_WHITE; - t->sep_bg = COLOR_BLUE; - t->sep_fg = COLOR_CYAN; - t->default_fg = COLOR_WHITE; - t->default_bg = COLOR_BLUE; - t->sep_str = "*"; - - d[SI_STATUS_BAR].prefix = ""; - d[SI_STATUS_BAR].postfix = ""; - d[SI_STATUS_BAR].fg = COLOR_WHITE; - d[SI_STATUS_BAR].bg = COLOR_BLUE; - d[SI_STATUS_BAR].align = CENTER; - d[SI_STATUS_BAR].x = 0; - d[SI_STATUS_BAR].y = 7; - d[SI_STATUS_BAR].len = 100; + t->sb.bg = COLOR_CYAN; + t->sb.fg = COLOR_BLACK; + t->cmd.bg = COLOR_WHITE; + t->cmd.fg = COLOR_BLACK; + t->output.bg = COLOR_BLUE; + t->output.fg = COLOR_WHITE; + t->msg.bg = COLOR_BLUE; + t->msg.fg = COLOR_YELLOW; + t->err_msg.bg = COLOR_RED; + t->err_msg.fg = COLOR_WHITE; + t->sep.bg = COLOR_BLUE; + t->sep.fg = COLOR_CYAN; + t->dflt.fg = COLOR_WHITE; + t->dflt.bg = COLOR_BLUE; + t->sep_char = '*'; + + d[SI_BASENAME].prefix = ""; + d[SI_BASENAME].postfix = ""; + d[SI_BASENAME].color.fg = COLOR_WHITE; + d[SI_BASENAME].color.bg = COLOR_BLUE; + d[SI_BASENAME].align = CENTER; + d[SI_BASENAME].x = 0; + d[SI_BASENAME].y = 7; + d[SI_BASENAME].len = 100; d[SI_STATUS].prefix = "para_server: "; d[SI_STATUS].postfix = ""; - d[SI_STATUS].fg = COLOR_WHITE; - d[SI_STATUS].bg = COLOR_BLUE; + d[SI_STATUS].color.fg = COLOR_WHITE; + d[SI_STATUS].color.bg = COLOR_BLUE; d[SI_STATUS].align = CENTER; d[SI_STATUS].x = 0; d[SI_STATUS].y = 60; @@ -71,8 +54,8 @@ static void init_theme_simple(struct gui_theme *t) d[SI_AUDIOD_STATUS].prefix = "para_audiod: "; d[SI_AUDIOD_STATUS].postfix = ""; - d[SI_AUDIOD_STATUS].fg = COLOR_WHITE; - d[SI_AUDIOD_STATUS].bg = COLOR_BLUE; + d[SI_AUDIOD_STATUS].color.fg = COLOR_WHITE; + d[SI_AUDIOD_STATUS].color.bg = COLOR_BLUE; d[SI_AUDIOD_STATUS].align = CENTER; d[SI_AUDIOD_STATUS].x = 50; d[SI_AUDIOD_STATUS].y = 60; @@ -83,7 +66,6 @@ static void init_theme_simple(struct gui_theme *t) static void init_theme_colorful_blackness(struct gui_theme *t) { struct stat_item_data *d = t->data; - t->name = "colorful blackness"; t->author = "Andre Noll"; /* minimal number of lines that is needed to display all * information provided by this theme @@ -93,47 +75,45 @@ static void init_theme_colorful_blackness(struct gui_theme *t) t->top_lines_min = 9; t->top_lines_default = 11; /* default number of lines */ - t->sb_bg = COLOR_GREEN; /* status bar background */ - t->sb_fg = COLOR_BLACK; /* status bar foreground */ - t->cmd_bg = COLOR_BLACK; - t->cmd_fg = COLOR_YELLOW; - t->output_bg = COLOR_BLACK; - t->output_fg = COLOR_CYAN; - t->msg_bg = COLOR_BLACK; - t->msg_fg = COLOR_WHITE; - t->err_msg_bg = COLOR_RED; - t->err_msg_fg = COLOR_WHITE; - t->welcome_bg = COLOR_BLUE; - t->welcome_fg = COLOR_WHITE; - t->sep_bg = COLOR_BLACK; /* color of the separator */ - t->sep_fg = COLOR_BLUE; - t->sep_str = "-"; - t->default_bg = COLOR_BLACK; - t->default_fg = COLOR_MAGENTA; + t->sb.bg = COLOR_GREEN; /* status bar background */ + t->sb.fg = COLOR_BLACK; /* status bar foreground */ + t->cmd.bg = COLOR_BLACK; + t->cmd.fg = COLOR_YELLOW; + t->output.bg = COLOR_BLACK; + t->output.fg = COLOR_CYAN; + t->msg.bg = COLOR_BLACK; + t->msg.fg = COLOR_WHITE; + t->err_msg.bg = COLOR_RED; + t->err_msg.fg = COLOR_WHITE; + t->sep.bg = COLOR_BLACK; /* color of the separator */ + t->sep.fg = COLOR_BLUE; + t->sep_char = 0; /* default (ACS_HLINE) */ + t->dflt.bg = COLOR_BLACK; + t->dflt.fg = COLOR_MAGENTA; d[SI_PLAY_TIME].prefix = ""; d[SI_PLAY_TIME].postfix = ""; - d[SI_PLAY_TIME].fg = COLOR_CYAN; - d[SI_PLAY_TIME].bg = COLOR_BLACK; + d[SI_PLAY_TIME].color.fg = COLOR_CYAN; + d[SI_PLAY_TIME].color.bg = COLOR_BLACK; d[SI_PLAY_TIME].align = CENTER; d[SI_PLAY_TIME].x = 0; d[SI_PLAY_TIME].y = 7; d[SI_PLAY_TIME].len = 35; - d[SI_STATUS_BAR].prefix = ""; - d[SI_STATUS_BAR].postfix = ""; - d[SI_STATUS_BAR].fg = COLOR_CYAN; - d[SI_STATUS_BAR].bg = COLOR_BLACK; - d[SI_STATUS_BAR].align = LEFT; - d[SI_STATUS_BAR].x = 35; - d[SI_STATUS_BAR].y = 7; - d[SI_STATUS_BAR].len = 65; + d[SI_BASENAME].prefix = ""; + d[SI_BASENAME].postfix = ""; + d[SI_BASENAME].color.fg = COLOR_CYAN; + d[SI_BASENAME].color.bg = COLOR_BLACK; + d[SI_BASENAME].align = LEFT; + d[SI_BASENAME].x = 35; + d[SI_BASENAME].y = 7; + d[SI_BASENAME].len = 65; d[SI_STATUS].prefix = ""; d[SI_STATUS].postfix = " "; - d[SI_STATUS].fg = COLOR_RED; - d[SI_STATUS].bg = COLOR_BLACK; + d[SI_STATUS].color.fg = COLOR_RED; + d[SI_STATUS].color.bg = COLOR_BLACK; d[SI_STATUS].align = RIGHT; d[SI_STATUS].x = 0; d[SI_STATUS].y = 17; @@ -141,171 +121,319 @@ static void init_theme_colorful_blackness(struct gui_theme *t) d[SI_STATUS_FLAGS].prefix = "("; d[SI_STATUS_FLAGS].postfix = ")"; - d[SI_STATUS_FLAGS].fg = COLOR_RED; - d[SI_STATUS_FLAGS].bg = COLOR_BLACK; + d[SI_STATUS_FLAGS].color.fg = COLOR_RED; + d[SI_STATUS_FLAGS].color.bg = COLOR_BLACK; d[SI_STATUS_FLAGS].align = LEFT; d[SI_STATUS_FLAGS].x = 11; d[SI_STATUS_FLAGS].y = 17; d[SI_STATUS_FLAGS].len = 10; - d[SI_SELECTOR].prefix = "selector: "; - d[SI_SELECTOR].postfix = ""; - d[SI_SELECTOR].fg = COLOR_RED; - d[SI_SELECTOR].bg = COLOR_BLACK; - d[SI_SELECTOR].align = CENTER; - d[SI_SELECTOR].x = 21; - d[SI_SELECTOR].y = 17; - d[SI_SELECTOR].len = 20; + d[SI_IMAGE_ID].prefix = "img: "; + d[SI_IMAGE_ID].postfix = ""; + d[SI_IMAGE_ID].color.fg = COLOR_RED; + d[SI_IMAGE_ID].color.bg = COLOR_BLACK; + d[SI_IMAGE_ID].align = CENTER; + d[SI_IMAGE_ID].x = 21; + d[SI_IMAGE_ID].y = 17; + d[SI_IMAGE_ID].len = 10; + + d[SI_LYRICS_ID].prefix = "lyr: "; + d[SI_LYRICS_ID].postfix = ""; + d[SI_LYRICS_ID].color.fg = COLOR_RED; + d[SI_LYRICS_ID].color.bg = COLOR_BLACK; + d[SI_LYRICS_ID].align = CENTER; + d[SI_LYRICS_ID].x = 31; + d[SI_LYRICS_ID].y = 17; + d[SI_LYRICS_ID].len = 11; d[SI_FORMAT].prefix = "format: "; d[SI_FORMAT].postfix = ""; - d[SI_FORMAT].fg = COLOR_RED; - d[SI_FORMAT].bg = COLOR_BLACK; + d[SI_FORMAT].color.fg = COLOR_RED; + d[SI_FORMAT].color.bg = COLOR_BLACK; d[SI_FORMAT].align = CENTER; d[SI_FORMAT].x = 42; d[SI_FORMAT].y = 17; - d[SI_FORMAT].len = 14; - + d[SI_FORMAT].len = 18; d[SI_NUM_PLAYED].prefix = "#"; d[SI_NUM_PLAYED].postfix = ""; - d[SI_NUM_PLAYED].fg = COLOR_RED; - d[SI_NUM_PLAYED].bg = COLOR_BLACK; - d[SI_NUM_PLAYED].align = CENTER; + d[SI_NUM_PLAYED].color.fg = COLOR_RED; + d[SI_NUM_PLAYED].color.bg = COLOR_BLACK; + d[SI_NUM_PLAYED].align = LEFT; d[SI_NUM_PLAYED].x = 60; d[SI_NUM_PLAYED].y = 17; - d[SI_NUM_PLAYED].len = 15; - - d[SI_UPTIME].prefix = "SUp: "; - d[SI_UPTIME].postfix = ""; - d[SI_UPTIME].fg = COLOR_RED; - d[SI_UPTIME].bg = COLOR_BLACK; - d[SI_UPTIME].align = CENTER; - d[SI_UPTIME].x = 75; - d[SI_UPTIME].y = 17; - d[SI_UPTIME].len = 25; - - d[SI_AUDIOD_STATUS].prefix = "audiod: "; + d[SI_NUM_PLAYED].len = 5; + + d[SI_BITRATE].prefix = ""; + d[SI_BITRATE].postfix = ""; + d[SI_BITRATE].color.fg = COLOR_RED; + d[SI_BITRATE].color.bg = COLOR_BLACK; + d[SI_BITRATE].align = CENTER; + d[SI_BITRATE].x = 65; + d[SI_BITRATE].y = 17; + d[SI_BITRATE].len = 13; + + d[SI_FREQUENCY].prefix = ""; + d[SI_FREQUENCY].postfix = ""; + d[SI_FREQUENCY].color.fg = COLOR_RED; + d[SI_FREQUENCY].color.bg = COLOR_BLACK; + d[SI_FREQUENCY].align = CENTER; + d[SI_FREQUENCY].x = 78; + d[SI_FREQUENCY].y = 17; + d[SI_FREQUENCY].len = 10; + + d[SI_SCORE].prefix = "sc: "; + d[SI_SCORE].postfix = ""; + d[SI_SCORE].color.fg = COLOR_RED; + d[SI_SCORE].color.bg = COLOR_BLACK; + d[SI_SCORE].align = CENTER; + d[SI_SCORE].x = 88; + d[SI_SCORE].y = 17; + d[SI_SCORE].len = 10; + + d[SI_AUDIOD_STATUS].prefix = ""; d[SI_AUDIOD_STATUS].postfix = ""; - d[SI_AUDIOD_STATUS].fg = COLOR_MAGENTA; - d[SI_AUDIOD_STATUS].bg = COLOR_BLACK; - d[SI_AUDIOD_STATUS].align = RIGHT; + d[SI_AUDIOD_STATUS].color.fg = COLOR_MAGENTA; + d[SI_AUDIOD_STATUS].color.bg = COLOR_BLACK; + d[SI_AUDIOD_STATUS].align = CENTER; d[SI_AUDIOD_STATUS].x = 0; d[SI_AUDIOD_STATUS].y = 27; - d[SI_AUDIOD_STATUS].len = 13; - + d[SI_AUDIOD_STATUS].len = 5; d[SI_DECODER_FLAGS].prefix = "["; d[SI_DECODER_FLAGS].postfix = "]"; - d[SI_DECODER_FLAGS].fg = COLOR_MAGENTA; - d[SI_DECODER_FLAGS].bg = COLOR_BLACK; - d[SI_DECODER_FLAGS].align = LEFT; - d[SI_DECODER_FLAGS].x = 14; + d[SI_DECODER_FLAGS].color.fg = COLOR_MAGENTA; + d[SI_DECODER_FLAGS].color.bg = COLOR_BLACK; + d[SI_DECODER_FLAGS].align = CENTER; + d[SI_DECODER_FLAGS].x = 5; d[SI_DECODER_FLAGS].y = 27; - d[SI_DECODER_FLAGS].len = 8; + d[SI_DECODER_FLAGS].len = 10; - d[SI_MTIME].prefix = "Mtime: "; + d[SI_MTIME].prefix = "mod: "; d[SI_MTIME].postfix = ""; - d[SI_MTIME].fg = COLOR_MAGENTA; - d[SI_MTIME].bg = COLOR_BLACK; + d[SI_MTIME].color.fg = COLOR_MAGENTA; + d[SI_MTIME].color.bg = COLOR_BLACK; d[SI_MTIME].align = CENTER; - d[SI_MTIME].x = 22; + d[SI_MTIME].x = 15; d[SI_MTIME].y = 27; - d[SI_MTIME].len = 30; + d[SI_MTIME].len = 22; - d[SI_FILE_SIZE].prefix = "Size: "; - d[SI_FILE_SIZE].postfix = " kb"; - d[SI_FILE_SIZE].fg = COLOR_MAGENTA; - d[SI_FILE_SIZE].bg = COLOR_BLACK; + d[SI_FILE_SIZE].prefix = ""; + d[SI_FILE_SIZE].postfix = "kb"; + d[SI_FILE_SIZE].color.fg = COLOR_MAGENTA; + d[SI_FILE_SIZE].color.bg = COLOR_BLACK; d[SI_FILE_SIZE].align = CENTER; - d[SI_FILE_SIZE].x = 52; + d[SI_FILE_SIZE].x = 37; d[SI_FILE_SIZE].y = 27; - d[SI_FILE_SIZE].len = 26; - - d[SI_AUDIOD_UPTIME].prefix = "AUp: "; - d[SI_AUDIOD_UPTIME].postfix = ""; - d[SI_AUDIOD_UPTIME].fg = COLOR_MAGENTA; - d[SI_AUDIOD_UPTIME].bg = COLOR_BLACK; - d[SI_AUDIOD_UPTIME].align = CENTER; - d[SI_AUDIOD_UPTIME].x = 78; - d[SI_AUDIOD_UPTIME].y = 27; - d[SI_AUDIOD_UPTIME].len = 22; - - - d[SI_AUDIO_INFO1].prefix = ""; - d[SI_AUDIO_INFO1].postfix = ""; - d[SI_AUDIO_INFO1].fg = COLOR_GREEN; - d[SI_AUDIO_INFO1].bg = COLOR_BLACK; - d[SI_AUDIO_INFO1].align = CENTER; - d[SI_AUDIO_INFO1].x = 0; - d[SI_AUDIO_INFO1].y = 43; - d[SI_AUDIO_INFO1].len = 100; - - d[SI_AUDIO_INFO2].prefix = ""; - d[SI_AUDIO_INFO2].postfix = ""; - d[SI_AUDIO_INFO2].fg = COLOR_GREEN; - d[SI_AUDIO_INFO2].bg = COLOR_BLACK; - d[SI_AUDIO_INFO2].align = CENTER; - d[SI_AUDIO_INFO2].x = 0; - d[SI_AUDIO_INFO2].y = 53; - d[SI_AUDIO_INFO2].len = 100; - - d[SI_AUDIO_INFO3].prefix = ""; - d[SI_AUDIO_INFO3].postfix = ""; - d[SI_AUDIO_INFO3].fg = COLOR_GREEN; - d[SI_AUDIO_INFO3].bg = COLOR_BLACK; - d[SI_AUDIO_INFO3].align = CENTER; - d[SI_AUDIO_INFO3].x = 0; - d[SI_AUDIO_INFO3].y = 63; - d[SI_AUDIO_INFO3].len = 100; - - d[SI_DBINFO1].prefix = ""; - d[SI_DBINFO1].postfix = ""; - d[SI_DBINFO1].fg = COLOR_YELLOW; - d[SI_DBINFO1].bg = COLOR_BLACK; - d[SI_DBINFO1].align = CENTER; - d[SI_DBINFO1].x = 0; - d[SI_DBINFO1].y = 77; - d[SI_DBINFO1].len = 100; - - d[SI_DBINFO2].prefix = ""; - d[SI_DBINFO2].postfix = ""; - d[SI_DBINFO2].fg = COLOR_YELLOW; - d[SI_DBINFO2].bg = COLOR_BLACK; - d[SI_DBINFO2].align = CENTER; - d[SI_DBINFO2].x = 0; - d[SI_DBINFO2].y = 87; - d[SI_DBINFO2].len = 100; - - d[SI_DBINFO3].prefix = ""; - d[SI_DBINFO3].postfix = ""; - d[SI_DBINFO3].fg = COLOR_YELLOW; - d[SI_DBINFO3].bg = COLOR_BLACK; - d[SI_DBINFO3].align = CENTER; - d[SI_DBINFO3].x = 0; - d[SI_DBINFO3].y = 97; - d[SI_DBINFO3].len = 100; + d[SI_FILE_SIZE].len = 10; + + d[SI_CHANNELS].prefix = ""; + d[SI_CHANNELS].postfix = "ch"; + d[SI_CHANNELS].color.fg = COLOR_MAGENTA; + d[SI_CHANNELS].color.bg = COLOR_BLACK; + d[SI_CHANNELS].align = CENTER; + d[SI_CHANNELS].x = 47; + d[SI_CHANNELS].y = 27; + d[SI_CHANNELS].len = 5; + + d[SI_LAST_PLAYED].prefix = "lp: "; + d[SI_LAST_PLAYED].postfix = ""; + d[SI_LAST_PLAYED].color.fg = COLOR_MAGENTA; + d[SI_LAST_PLAYED].color.bg = COLOR_BLACK; + d[SI_LAST_PLAYED].align = CENTER; + d[SI_LAST_PLAYED].x = 52; + d[SI_LAST_PLAYED].y = 27; + d[SI_LAST_PLAYED].len = 21; + + d[SI_NUM_CHUNKS].prefix = ""; + d[SI_NUM_CHUNKS].postfix = "x"; + d[SI_NUM_CHUNKS].color.fg = COLOR_MAGENTA; + d[SI_NUM_CHUNKS].color.bg = COLOR_BLACK; + d[SI_NUM_CHUNKS].align = RIGHT; + d[SI_NUM_CHUNKS].x = 73; + d[SI_NUM_CHUNKS].y = 27; + d[SI_NUM_CHUNKS].len = 11; + + d[SI_CHUNK_TIME].prefix = ""; + d[SI_CHUNK_TIME].postfix = "ms"; + d[SI_CHUNK_TIME].color.fg = COLOR_MAGENTA; + d[SI_CHUNK_TIME].color.bg = COLOR_BLACK; + d[SI_CHUNK_TIME].align = LEFT; + d[SI_CHUNK_TIME].x = 84; + d[SI_CHUNK_TIME].y = 27; + d[SI_CHUNK_TIME].len = 8; + + d[SI_AMPLIFICATION].prefix = "amp:"; + d[SI_AMPLIFICATION].postfix = ""; + d[SI_AMPLIFICATION].color.fg = COLOR_MAGENTA; + d[SI_AMPLIFICATION].color.bg = COLOR_BLACK; + d[SI_AMPLIFICATION].align = RIGHT; + d[SI_AMPLIFICATION].x = 92; + d[SI_AMPLIFICATION].y = 27; + d[SI_AMPLIFICATION].len = 8; + + d[SI_TECHINFO].prefix = ""; + d[SI_TECHINFO].postfix = ""; + d[SI_TECHINFO].color.fg = COLOR_GREEN; + d[SI_TECHINFO].color.bg = COLOR_BLACK; + d[SI_TECHINFO].align = CENTER; + d[SI_TECHINFO].x = 0; + d[SI_TECHINFO].y = 43; + d[SI_TECHINFO].len = 100; + + d[SI_TITLE].prefix = ""; + d[SI_TITLE].postfix = ","; + d[SI_TITLE].color.fg = COLOR_GREEN; + d[SI_TITLE].color.bg = COLOR_BLACK; + d[SI_TITLE].align = RIGHT; + d[SI_TITLE].x = 0; + d[SI_TITLE].y = 53; + d[SI_TITLE].len = 45; + + d[SI_ARTIST].prefix = " by "; + d[SI_ARTIST].postfix = ""; + d[SI_ARTIST].color.fg = COLOR_GREEN; + d[SI_ARTIST].color.bg = COLOR_BLACK; + d[SI_ARTIST].align = LEFT; + d[SI_ARTIST].x = 45; + d[SI_ARTIST].y = 53; + d[SI_ARTIST].len = 45; + + d[SI_YEAR].prefix = "("; + d[SI_YEAR].postfix = ")"; + d[SI_YEAR].color.fg = COLOR_GREEN; + d[SI_YEAR].color.bg = COLOR_BLACK; + d[SI_YEAR].align = RIGHT; + d[SI_YEAR].x = 90; + d[SI_YEAR].y = 53; + d[SI_YEAR].len = 10; + + d[SI_ALBUM].prefix = "A: "; + d[SI_ALBUM].postfix = ","; + d[SI_ALBUM].color.fg = COLOR_GREEN; + d[SI_ALBUM].color.bg = COLOR_BLACK; + d[SI_ALBUM].align = RIGHT; + d[SI_ALBUM].x = 0; + d[SI_ALBUM].y = 63; + d[SI_ALBUM].len = 50; + + d[SI_COMMENT].prefix = " C: "; + d[SI_COMMENT].postfix = ""; + d[SI_COMMENT].color.fg = COLOR_GREEN; + d[SI_COMMENT].color.bg = COLOR_BLACK; + d[SI_COMMENT].align = LEFT; + d[SI_COMMENT].x = 50; + d[SI_COMMENT].y = 63; + d[SI_COMMENT].len = 50; + + d[SI_AFS_MODE].prefix = ""; + d[SI_AFS_MODE].postfix = ""; + d[SI_AFS_MODE].color.fg = COLOR_YELLOW; + d[SI_AFS_MODE].color.bg = COLOR_BLACK; + d[SI_AFS_MODE].align = CENTER; + d[SI_AFS_MODE].x = 0; + d[SI_AFS_MODE].y = 77; + d[SI_AFS_MODE].len = 100; + + d[SI_ATTRIBUTES_TXT].prefix = ""; + d[SI_ATTRIBUTES_TXT].postfix = ""; + d[SI_ATTRIBUTES_TXT].color.fg = COLOR_YELLOW; + d[SI_ATTRIBUTES_TXT].color.bg = COLOR_BLACK; + d[SI_ATTRIBUTES_TXT].align = CENTER; + d[SI_ATTRIBUTES_TXT].x = 0; + d[SI_ATTRIBUTES_TXT].y = 87; + d[SI_ATTRIBUTES_TXT].len = 100; + + d[SI_DIRECTORY].prefix = "dir: "; + d[SI_DIRECTORY].postfix = ""; + d[SI_DIRECTORY].color.fg = COLOR_YELLOW; + d[SI_DIRECTORY].color.bg = COLOR_BLACK; + d[SI_DIRECTORY].align = CENTER; + d[SI_DIRECTORY].x = 0; + d[SI_DIRECTORY].y = 97; + d[SI_DIRECTORY].len = 100; } -void init_theme(int num, struct gui_theme *t) +struct theme_description { + const char *name; + void (*init)(struct gui_theme *t); +}; + +static struct theme_description themes[] = { + { + .name = "colorful blackness", + .init = init_theme_colorful_blackness, + }, + { + .name = "simple", + .init = init_theme_simple, + }, +}; + +/** Number of elements in the \a themes array. */ +#define NUM_THEMES (ARRAY_SIZE(themes)) + +static int current_theme_num; + +static void set_theme(int num, struct gui_theme *t) { int i; - - for (i = 0; i < NUM_STAT_ITEMS; i++) + FOR_EACH_STATUS_ITEM(i) t->data[i].len = 0; + num %= NUM_THEMES; + t->name = themes[num].name; + themes[num].init(t); current_theme_num = num; - - return (num % NUM_THEMES)? - init_theme_simple(t) : init_theme_colorful_blackness(t); + PARA_NOTICE_LOG("theme: %s\n", t->name); } -void prev_theme(struct gui_theme *t) +/** + * Initialize a theme. + * + * \param name Name of the theme to be initialized. + * \param t The function fills out this structure. + * + * This function exits if there is no theme called \a name. + */ +void theme_init(const char *name, struct gui_theme *t) { - return init_theme(++current_theme_num, t); + int i; + + if (!name) + return set_theme(0, t); + for (i = 0; i < NUM_THEMES; i++) + if (strcmp(name, themes[i].name) == 0) + return set_theme(i, t); + fprintf(stderr, "Available themes:\n"); + for (i = 0; i < NUM_THEMES; i++) + fprintf(stderr, "\t%s\n", themes[i].name); + exit(EXIT_FAILURE); } -void next_theme(struct gui_theme *t) +/** + * Activate the previous available theme. + * + * \param t Theme definition is stored here. + * + * This picks the theme that comes before the currently active one, or the last + * available theme, if the current one is the first. + * + * \sa \ref theme_next(). + */ +void theme_prev(struct gui_theme *t) { - return init_theme(--current_theme_num, t); + return set_theme(++current_theme_num, t); } +/** + * Activate the next available theme. + * + * \param t Theme definition is stored here. + * + * This works exactly as theme_prev() but cycles forwards through the list of + * available themes. + */ +void theme_next(struct gui_theme *t) +{ + return set_theme(--current_theme_num, t); +}