1 /***************************************************************************
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
10 * Copyright (C) 2007 Jonathan Gordon
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
20 ****************************************************************************/
33 #include "color_picker.h"
35 #ifdef HAVE_REMOTE_LCD
36 #include "lcd-remote.h"
39 #include "exported_menus.h"
40 #include "appevents.h"
42 #include "statusbar-skinned.h"
43 #include "skin_engine/skin_engine.h"
46 #ifdef HAVE_BACKDROP_IMAGE
48 * Menu to clear the backdrop image
50 static int clear_main_backdrop(void)
52 global_settings
.backdrop_file
[0] = '-';
53 global_settings
.backdrop_file
[1] = '\0';
54 skin_backdrop_load_setting();
55 viewportmanager_theme_enable(SCREEN_MAIN
, false, NULL
);
56 viewportmanager_theme_undo(SCREEN_MAIN
, true);
60 MENUITEM_FUNCTION(clear_main_bd
, 0, ID2P(LANG_CLEAR_BACKDROP
),
61 clear_main_backdrop
, NULL
, NULL
, Icon_NOICON
);
73 static struct colour_info
77 } colors
[COLOR_COUNT
] = {
78 [COLOR_FG
] = {&global_settings
.fg_color
, LANG_FOREGROUND_COLOR
},
79 [COLOR_BG
] = {&global_settings
.bg_color
, LANG_BACKGROUND_COLOR
},
80 [COLOR_LSS
] = {&global_settings
.lss_color
, LANG_SELECTOR_START_COLOR
},
81 [COLOR_LSE
] = {&global_settings
.lse_color
, LANG_SELECTOR_END_COLOR
},
82 [COLOR_LST
] = {&global_settings
.lst_color
, LANG_SELECTOR_TEXT_COLOR
},
86 * Menu for fore/back/selection colors
88 static int set_color_func(void* color
)
90 int res
, c
= (intptr_t)color
, banned_color
=-1, old_color
;
91 /* Don't let foreground be set the same as background and vice-versa */
93 banned_color
= *colors
[COLOR_FG
].setting
;
94 else if (c
== COLOR_FG
)
95 banned_color
= *colors
[COLOR_BG
].setting
;
97 old_color
= *colors
[c
].setting
;
98 res
= (int)set_color(&screens
[SCREEN_MAIN
],str(colors
[c
].lang_id
),
99 colors
[c
].setting
, banned_color
);
100 if (old_color
!= *colors
[c
].setting
)
103 settings_apply(false);
104 settings_apply_skins();
109 static int reset_color(void)
111 global_settings
.fg_color
= LCD_DEFAULT_FG
;
112 global_settings
.bg_color
= LCD_DEFAULT_BG
;
113 global_settings
.lss_color
= LCD_DEFAULT_LS
;
114 global_settings
.lse_color
= LCD_DEFAULT_BG
;
115 global_settings
.lst_color
= LCD_DEFAULT_FG
;
118 settings_apply(false);
119 settings_apply_skins();
122 MENUITEM_FUNCTION(set_bg_col
, MENU_FUNC_USEPARAM
, ID2P(LANG_BACKGROUND_COLOR
),
123 set_color_func
, (void*)COLOR_BG
, NULL
, Icon_NOICON
);
124 MENUITEM_FUNCTION(set_fg_col
, MENU_FUNC_USEPARAM
, ID2P(LANG_FOREGROUND_COLOR
),
125 set_color_func
, (void*)COLOR_FG
, NULL
, Icon_NOICON
);
126 MENUITEM_FUNCTION(set_lss_col
, MENU_FUNC_USEPARAM
, ID2P(LANG_SELECTOR_START_COLOR
),
127 set_color_func
, (void*)COLOR_LSS
, NULL
, Icon_NOICON
);
128 MENUITEM_FUNCTION(set_lse_col
, MENU_FUNC_USEPARAM
, ID2P(LANG_SELECTOR_END_COLOR
),
129 set_color_func
, (void*)COLOR_LSE
, NULL
, Icon_NOICON
);
130 MENUITEM_FUNCTION(set_lst_col
, MENU_FUNC_USEPARAM
, ID2P(LANG_SELECTOR_TEXT_COLOR
),
131 set_color_func
, (void*)COLOR_LST
, NULL
, Icon_NOICON
);
132 MENUITEM_FUNCTION(reset_colors
, 0, ID2P(LANG_RESET_COLORS
),
133 reset_color
, NULL
, NULL
, Icon_NOICON
);
135 MAKE_MENU(lss_settings
, ID2P(LANG_SELECTOR_COLOR_MENU
),
137 &set_lss_col
, &set_lse_col
, &set_lst_col
140 /* now the actual menu */
141 MAKE_MENU(colors_settings
, ID2P(LANG_COLORS_MENU
),
142 NULL
, Icon_Display_menu
,
144 &set_bg_col
, &set_fg_col
, &reset_colors
147 #endif /* HAVE_LCD_COLOR */
149 /***********************************/
152 /************************************/
157 #ifdef HAVE_LCD_BITMAP
158 static int statusbar_callback_ex(int action
,const struct menu_item_ex
*this_item
,
159 enum screen_type screen
)
162 /* we save the old statusbar value here, so the old statusbars can get
163 * removed and cleared from the display properly on exiting
164 * (in gui_statusbar_changed() ) */
165 static enum statusbar_values old_bar
[NB_SCREENS
];
168 case ACTION_ENTER_MENUITEM
:
169 old_bar
[screen
] = statusbar_position(screen
);
171 case ACTION_EXIT_MENUITEM
:
172 if (old_bar
[screen
] != statusbar_position(screen
))
173 settings_apply_skins();
176 return ACTION_REDRAW
;
179 #ifdef HAVE_REMOTE_LCD
180 static int statusbar_callback_remote(int action
,const struct menu_item_ex
*this_item
)
182 return statusbar_callback_ex(action
, this_item
, SCREEN_REMOTE
);
185 static int statusbar_callback(int action
,const struct menu_item_ex
*this_item
)
187 return statusbar_callback_ex(action
, this_item
, SCREEN_MAIN
);
190 #ifdef HAVE_BUTTONBAR
191 static int buttonbar_callback(int action
, const struct menu_item_ex
*this_item
)
196 case ACTION_EXIT_MENUITEM
:
197 viewportmanager_theme_changed(THEME_BUTTONBAR
);
200 return ACTION_REDRAW
;
203 MENUITEM_SETTING(scrollbar_item
, &global_settings
.scrollbar
, NULL
);
204 MENUITEM_SETTING(scrollbar_width
, &global_settings
.scrollbar_width
, NULL
);
205 MENUITEM_SETTING(statusbar
, &global_settings
.statusbar
,
207 #ifdef HAVE_REMOTE_LCD
208 MENUITEM_SETTING(remote_statusbar
, &global_settings
.remote_statusbar
,
209 statusbar_callback_remote
);
211 #ifdef HAVE_BUTTONBAR
212 MENUITEM_SETTING(buttonbar
, &global_settings
.buttonbar
, buttonbar_callback
);
214 MENUITEM_SETTING(volume_type
, &global_settings
.volume_type
, NULL
);
215 MENUITEM_SETTING(battery_display
, &global_settings
.battery_display
, NULL
);
216 MAKE_MENU(bars_menu
, ID2P(LANG_BARS_MENU
), 0, Icon_NOICON
,
217 &scrollbar_item
, &scrollbar_width
, &statusbar
,
218 #ifdef HAVE_REMOTE_LCD
221 #if CONFIG_KEYPAD == RECORDER_PAD
225 #if (CONFIG_BATTERY_MEASURE != 0)
229 #endif /* HAVE_LCD_BITMAP */
233 /************************************/
235 #ifdef HAVE_LCD_BITMAP
236 static struct browse_folder_info fonts
= {FONT_DIR
, SHOW_FONT
};
237 static struct browse_folder_info sbs
= {SBS_DIR
, SHOW_SBS
};
239 static struct browse_folder_info fms
= {WPS_DIR
, SHOW_FMS
};
242 static struct browse_folder_info wps
= {WPS_DIR
, SHOW_WPS
};
243 #ifdef HAVE_REMOTE_LCD
244 static struct browse_folder_info rwps
= {WPS_DIR
, SHOW_RWPS
};
245 static struct browse_folder_info rsbs
= {SBS_DIR
, SHOW_RSBS
};
247 static struct browse_folder_info rfms
= {WPS_DIR
, SHOW_RFMS
};
250 static struct browse_folder_info themes
= {THEME_DIR
, SHOW_CFG
};
252 int browse_folder(void *param
)
254 const char *ext
, *setting
;
256 char selected
[MAX_FILENAME
+10];
257 const struct browse_folder_info
*info
=
258 (const struct browse_folder_info
*)param
;
259 struct browse_context browse
;
260 browse_context_init(&browse
, info
->show_options
, 0,
261 NULL
, NOICON
, info
->dir
, NULL
);
263 /* if we are in a special settings folder, center the current setting */
264 switch(info
->show_options
)
268 if (global_settings
.lang_file
[0])
269 setting
= global_settings
.lang_file
;
272 lang_id
= LANG_LANGUAGE
;
276 setting
= global_settings
.wps_file
;
277 lang_id
= LANG_WHILE_PLAYING
;
279 #ifdef HAVE_LCD_BITMAP
282 setting
= global_settings
.font_file
;
283 lang_id
= LANG_CUSTOM_FONT
;
287 setting
= global_settings
.sbs_file
;
288 lang_id
= LANG_BASE_SKIN
;
293 setting
= global_settings
.fms_file
;
294 lang_id
= LANG_RADIOSCREEN
;
296 #endif /* CONFIG_TUNER */
298 #ifdef HAVE_REMOTE_LCD
301 setting
= global_settings
.rwps_file
;
302 lang_id
= LANG_REMOTE_WHILE_PLAYING
;
306 setting
= global_settings
.rsbs_file
;
307 lang_id
= LANG_REMOTE_BASE_SKIN
;
312 setting
= global_settings
.rfms_file
;
313 lang_id
= LANG_REMOTE_RADIOSCREEN
;
315 #endif /* CONFIG_TUNER */
318 ext
= setting
= NULL
;
322 /* If we've found a file to center on, do it */
325 /* if setting != NULL, ext is initialized */
326 snprintf(selected
, sizeof(selected
), "%s.%s", setting
, ext
);
327 browse
.selected
= selected
;
328 browse
.icon
= Icon_Questionmark
;
329 browse
.title
= str(lang_id
);
332 return rockbox_browse(&browse
);
335 #ifdef HAVE_LCD_BITMAP
336 MENUITEM_FUNCTION(browse_fonts
, MENU_FUNC_USEPARAM
,
337 ID2P(LANG_CUSTOM_FONT
),
338 browse_folder
, (void*)&fonts
, NULL
, Icon_Font
);
340 MENUITEM_FUNCTION(browse_sbs
, MENU_FUNC_USEPARAM
,
341 ID2P(LANG_BASE_SKIN
),
342 browse_folder
, (void*)&sbs
, NULL
, Icon_Wps
);
344 MENUITEM_FUNCTION(browse_fms
, MENU_FUNC_USEPARAM
,
345 ID2P(LANG_RADIOSCREEN
),
346 browse_folder
, (void*)&fms
, NULL
, Icon_Wps
);
349 MENUITEM_FUNCTION(browse_wps
, MENU_FUNC_USEPARAM
,
350 ID2P(LANG_WHILE_PLAYING
),
351 browse_folder
, (void*)&wps
, NULL
, Icon_Wps
);
352 #ifdef HAVE_REMOTE_LCD
353 MENUITEM_FUNCTION(browse_rwps
, MENU_FUNC_USEPARAM
,
354 ID2P(LANG_REMOTE_WHILE_PLAYING
),
355 browse_folder
, (void*)&rwps
, NULL
, Icon_Wps
);
356 MENUITEM_FUNCTION(browse_rsbs
, MENU_FUNC_USEPARAM
,
357 ID2P(LANG_REMOTE_BASE_SKIN
),
358 browse_folder
, (void*)&rsbs
, NULL
, Icon_Wps
);
360 MENUITEM_FUNCTION(browse_rfms
, MENU_FUNC_USEPARAM
,
361 ID2P(LANG_REMOTE_RADIOSCREEN
),
362 browse_folder
, (void*)&rfms
, NULL
, Icon_Wps
);
367 static int showicons_callback(int action
, const struct menu_item_ex
*this_item
)
370 static bool old_icons
;
373 case ACTION_ENTER_MENUITEM
:
374 old_icons
= global_settings
.show_icons
;
376 case ACTION_EXIT_MENUITEM
:
377 if (old_icons
!= global_settings
.show_icons
)
381 return ACTION_REDRAW
;
384 MENUITEM_SETTING(show_icons
, &global_settings
.show_icons
, showicons_callback
);
385 MENUITEM_FUNCTION(browse_themes
, MENU_FUNC_USEPARAM
,
386 ID2P(LANG_CUSTOM_THEME
),
387 browse_folder
, (void*)&themes
, NULL
, Icon_Config
);
388 #ifdef HAVE_LCD_BITMAP
389 MENUITEM_SETTING(cursor_style
, &global_settings
.cursor_style
, NULL
);
392 MAKE_MENU(theme_menu
, ID2P(LANG_THEME_MENU
),
395 #ifdef HAVE_LCD_BITMAP
399 #ifdef HAVE_REMOTE_LCD
404 #ifdef HAVE_REMOTE_LCD
408 #ifdef HAVE_LCD_BITMAP
411 #ifdef HAVE_REMOTE_LCD
415 #ifdef HAVE_BACKDROP_IMAGE
418 #ifdef HAVE_LCD_BITMAP
422 #ifdef HAVE_LCD_COLOR