X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=gui_theme.c;h=745abe286c3c3ce8f966660e6907e2417e588c4a;hp=647eb66f97b2801e607c6fca2b420ab406a11fcd;hb=04c943a4cbf81efc78854731196fb269883053f6;hpb=6668ac4a8c7f2a92efb9e6d405d954beff77d230 diff --git a/gui_theme.c b/gui_theme.c index 647eb66f..745abe28 100644 --- a/gui_theme.c +++ b/gui_theme.c @@ -1,78 +1,67 @@ -/* - * Copyright (C) 2005-2010 Andre Noll - * - * Licensed under the GPL v2. For licencing details see COPYING. - */ +/* Copyright (C) 2005 Andre Noll , see file 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_BASENAME].prefix = ""; - d[SI_BASENAME].postfix = ""; - d[SI_BASENAME].fg = COLOR_WHITE; - d[SI_BASENAME].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].align = CENTER; - d[SI_STATUS].x = 0; - d[SI_STATUS].y = 60; - d[SI_STATUS].len = 50; - - 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].align = CENTER; - d[SI_AUDIOD_STATUS].x = 50; - d[SI_AUDIOD_STATUS].y = 60; - d[SI_AUDIOD_STATUS].len = 50; + 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].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; + d[SI_status].len = 50; + + d[SI_audiod_status].prefix = "para_audiod: "; + d[SI_audiod_status].postfix = ""; + 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; + d[SI_audiod_status].len = 50; } 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 @@ -82,305 +71,365 @@ 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; - - - 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].align = CENTER; - d[SI_PLAY_TIME].x = 0; - d[SI_PLAY_TIME].y = 7; - d[SI_PLAY_TIME].len = 35; - - d[SI_BASENAME].prefix = ""; - d[SI_BASENAME].postfix = ""; - d[SI_BASENAME].fg = COLOR_CYAN; - d[SI_BASENAME].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].align = RIGHT; - d[SI_STATUS].x = 0; - d[SI_STATUS].y = 17; - d[SI_STATUS].len = 11; - - 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].align = LEFT; - d[SI_STATUS_FLAGS].x = 11; - d[SI_STATUS_FLAGS].y = 17; - d[SI_STATUS_FLAGS].len = 10; - - d[SI_IMAGE_ID].prefix = "img: "; - d[SI_IMAGE_ID].postfix = ""; - d[SI_IMAGE_ID].fg = COLOR_RED; - d[SI_IMAGE_ID].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].fg = COLOR_RED; - d[SI_LYRICS_ID].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].align = CENTER; - d[SI_FORMAT].x = 42; - d[SI_FORMAT].y = 17; - 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 = LEFT; - d[SI_NUM_PLAYED].x = 60; - d[SI_NUM_PLAYED].y = 17; - d[SI_NUM_PLAYED].len = 5; - - d[SI_BITRATE].prefix = ""; - d[SI_BITRATE].postfix = ""; - d[SI_BITRATE].fg = COLOR_RED; - d[SI_BITRATE].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].fg = COLOR_RED; - d[SI_FREQUENCY].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].fg = COLOR_RED; - d[SI_SCORE].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 = CENTER; - d[SI_AUDIOD_STATUS].x = 0; - d[SI_AUDIOD_STATUS].y = 27; - 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 = CENTER; - d[SI_DECODER_FLAGS].x = 5; - d[SI_DECODER_FLAGS].y = 27; - d[SI_DECODER_FLAGS].len = 10; - - d[SI_MTIME].prefix = "mod: "; - d[SI_MTIME].postfix = ""; - d[SI_MTIME].fg = COLOR_MAGENTA; - d[SI_MTIME].bg = COLOR_BLACK; - d[SI_MTIME].align = CENTER; - d[SI_MTIME].x = 15; - d[SI_MTIME].y = 27; - d[SI_MTIME].len = 22; - - d[SI_FILE_SIZE].prefix = ""; - d[SI_FILE_SIZE].postfix = "kb"; - d[SI_FILE_SIZE].fg = COLOR_MAGENTA; - d[SI_FILE_SIZE].bg = COLOR_BLACK; - d[SI_FILE_SIZE].align = CENTER; - d[SI_FILE_SIZE].x = 37; - d[SI_FILE_SIZE].y = 27; - d[SI_FILE_SIZE].len = 10; - - d[SI_CHANNELS].prefix = ""; - d[SI_CHANNELS].postfix = "ch"; - d[SI_CHANNELS].fg = COLOR_MAGENTA; - d[SI_CHANNELS].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].fg = COLOR_MAGENTA; - d[SI_LAST_PLAYED].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].fg = COLOR_MAGENTA; - d[SI_NUM_CHUNKS].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].fg = COLOR_MAGENTA; - d[SI_CHUNK_TIME].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].fg = COLOR_MAGENTA; - d[SI_AMPLIFICATION].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].fg = COLOR_GREEN; - d[SI_TECHINFO].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].fg = COLOR_GREEN; - d[SI_TITLE].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].fg = COLOR_GREEN; - d[SI_ARTIST].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].fg = COLOR_GREEN; - d[SI_YEAR].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].fg = COLOR_GREEN; - d[SI_ALBUM].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].fg = COLOR_GREEN; - d[SI_COMMENT].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].fg = COLOR_YELLOW; - d[SI_AFS_MODE].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].fg = COLOR_YELLOW; - d[SI_ATTRIBUTES_TXT].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].fg = COLOR_YELLOW; - d[SI_DIRECTORY].bg = COLOR_BLACK; - d[SI_DIRECTORY].align = CENTER; - d[SI_DIRECTORY].x = 0; - d[SI_DIRECTORY].y = 97; - d[SI_DIRECTORY].len = 100; + 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].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_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].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; + d[SI_status].len = 11; + + d[SI_status_flags].prefix = "("; + d[SI_status_flags].postfix = ")"; + 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_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].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 = 18; + + d[SI_num_played].prefix = "#"; + d[SI_num_played].postfix = ""; + 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 = 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].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 = 5; + + d[SI_decoder_flags].prefix = "["; + d[SI_decoder_flags].postfix = "]"; + 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 = 10; + + d[SI_mtime].prefix = "mod: "; + d[SI_mtime].postfix = ""; + d[SI_mtime].color.fg = COLOR_MAGENTA; + d[SI_mtime].color.bg = COLOR_BLACK; + d[SI_mtime].align = CENTER; + d[SI_mtime].x = 15; + d[SI_mtime].y = 27; + d[SI_mtime].len = 22; + + 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 = 37; + d[SI_file_size].y = 27; + 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_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); +}