diff options
author | Ole Loots <ole@monochrom.net> | 2012-06-23 00:16:12 +0000 |
---|---|---|
committer | Ole Loots <ole@monochrom.net> | 2012-06-23 00:16:12 +0000 |
commit | ad656167dc66d8474eeef01ba14d7a053fecec9b (patch) | |
tree | ff45a4d93ffd11a92db70abc4b1c32bd5297c0d8 /atari | |
parent | d2e7e3546c799f2d8bfbc589cd63042a390051e1 (diff) | |
download | netsurf-ad656167dc66d8474eeef01ba14d7a053fecec9b.tar.gz netsurf-ad656167dc66d8474eeef01ba14d7a053fecec9b.tar.bz2 |
Handle new toolbar options (background color, iconset)
svn path=/trunk/netsurf/; revision=13984
Diffstat (limited to 'atari')
-rw-r--r-- | atari/settings.c | 121 |
1 files changed, 119 insertions, 2 deletions
diff --git a/atari/settings.c b/atari/settings.c index 2732fe3a5..0d95fb2ff 100644 --- a/atari/settings.c +++ b/atari/settings.c @@ -1,5 +1,6 @@ #include <sys/types.h>
-#include <sys/stat.h>
+#include <sys/stat.h> +#include <dirent.h> #include <fcntl.h>
#include <time.h>
#include <limits.h>
@@ -13,6 +14,7 @@ #include "atari/settings.h" #include "atari/global_evnt.h" #include "atari/misc.h" +#include "atari/findfile.h" extern char options[PATH_MAX]; @@ -28,6 +30,7 @@ static unsigned int tmp_option_min_reflow_period; static unsigned int tmp_option_max_fetchers; static unsigned int tmp_option_max_fetchers_per_host; static unsigned int tmp_option_max_cached_fetch_handles; +static unsigned int tmp_option_atari_toolbar_bg; /* Tab forms and their buttons: */ static int frms[] = { @@ -69,6 +72,7 @@ static int buts[] = { #define INPUT_MIN_REFLOW_PERIOD_MAX_LEN 4 #define LABEL_FONT_RENDERER_MAX_LEN 8 #define LABEL_PATH_MAX_LEN 43 +#define LABEL_ICONSET_MAX_LEN 8 static void toggle_objects( void ); static void display_settings( void ); @@ -136,6 +140,10 @@ WINDOW * open_settings() form_event, NULL); ObjcAttachFormFunc( dlgwin, CHOICES_BT_SEL_LOCALE, form_event, NULL); + ObjcAttachFormFunc( dlgwin, CHOICES_BT_TOOLBAR_BGCOLOR, + form_event, NULL); + ObjcAttachFormFunc( dlgwin, CHOICES_BT_TOOLBAR_ICONSET, + form_event, NULL); ObjcAttachFormFunc( dlgwin, CHOICES_BT_CLEAR_HISTORY, clear_history, NULL); @@ -206,6 +214,76 @@ static void __CDECL clear_history( WINDOW *win, int index, int unused, } +/** +* Displays a popup to select available icon sets, + the returned string is no longer than 8 characters. +* \param x x pos of popup +* \param y y pos of popup +* \return the selected string or NULL on failure. +*/ +static char * toolbar_iconset_popup( int x, int y ) +{ + #define MAX_SETS 24 + DIR *dp; + struct dirent *ep; + struct stat statbuf; + char * current = NULL; + char *avail[MAX_SETS]; + int selected = 0, navail = 0, i, choice=-1; + static char toolbar_folder[PATH_MAX]; + char fullpath[PATH_MAX]; + + strncpy( fullpath, nsoption_charp(tree_icons_path), 255 ); + path_add_part( fullpath, 255, "toolbar/" ); + + /* Get current set (for pre-selection): */ + memset( avail, 0, MAX_SETS ); + current = nsoption_charp(atari_image_toolbar_folder); + + /* locate the toolbar folder: */ + atari_find_resource( toolbar_folder, fullpath, fullpath ); + + /* search for iconset folders: */ + dp = opendir (toolbar_folder); + if (dp != NULL){ + while (ep = readdir (dp)) { + if (strlen(ep->d_name) < 3) + continue; + snprintf(fullpath, PATH_MAX-1, "%s/%s", toolbar_folder, ep->d_name ); + if (stat(fullpath, &statbuf) == 0) { + if (S_ISDIR(statbuf.st_mode)) { + if (strcmp(ep->d_name, current) == 0) + selected = navail; + /* store the folder name: */ + avail[navail] = malloc( strlen(ep->d_name)+1 ); + sprintf( avail[navail], "%s", ep->d_name ); + navail++; + if( navail >= MAX_SETS ) + break; + } + } + } + (void) closedir (dp); + } + + + if (navail > 0){ + choice = MenuPopUp( avail, x, y, navail, + -1, selected, P_LIST | P_CHCK ); + if (choice > 0) + snprintf( toolbar_folder, 9, "%s", avail[choice-1] ); + } + + for (i=0;i<navail; i++ ) { + free( avail[i] ); + } + if (choice > 0) + return( toolbar_folder ); + else + return( NULL ); + #undef MAX_SETS +} + static void __CDECL form_event( WINDOW *win, int index, int external, void *unused2) { @@ -297,6 +375,31 @@ form_event( WINDOW *win, int index, int external, void *unused2) ObjcChange( OC_FORM, win, index, NORMAL, TRUE); break; + case CHOICES_BT_TOOLBAR_BGCOLOR: + objc_offset( FORM(win), CHOICES_BT_TOOLBAR_BGCOLOR, &x, &y ); + choice = MenuPopUp( get_tree(POP_COLOR), x, y, -1, + -1, -1, P_WNDW + P_CHCK ); + if( choice >= 0 && choice <= 15 ){ + snprintf( spare, 255, "%02d", choice-1 ); + tmp_option_atari_toolbar_bg = choice-1; + ObjcStrCpy( dlgtree, CHOICES_BT_TOOLBAR_BGCOLOR, + spare ); + + } + is_button = true; + ObjcChange( OC_FORM, win, index, NORMAL, TRUE); + break; + + case CHOICES_BT_TOOLBAR_ICONSET: + objc_offset( FORM(win), CHOICES_BT_TOOLBAR_ICONSET, &x, &y ); + tmp = toolbar_iconset_popup(x,y); + if( tmp != NULL ){ + ObjcStrCpy( dlgtree, CHOICES_BT_TOOLBAR_ICONSET, tmp ); + } + is_button = true; + ObjcChange( OC_FORM, win, index, NORMAL, TRUE); + break; + case CHOICES_INC_MEM_CACHE: case CHOICES_DEC_MEM_CACHE: if( index == CHOICES_DEC_MEM_CACHE ) @@ -461,7 +564,10 @@ form_event( WINDOW *win, int index, int external, void *unused2) } } - +/** + * Toogle all objects which are directly influenced by other GUI elements + * ( like checkbox ) + */ static void toggle_objects( void ) { /* enable / disable (refresh) objects depending on radio button values: */ @@ -590,6 +696,13 @@ static void display_settings( void ) snprintf( spare, 255, "%3d", nsoption_int(font_size) ); set_text( CHOICES_EDIT_DEF_FONT_SIZE, spare , 3 ); + set_text(CHOICES_BT_TOOLBAR_ICONSET, + nsoption_charp(atari_image_toolbar_folder), LABEL_ICONSET_MAX_LEN); + + tmp_option_atari_toolbar_bg = nsoption_int(atari_toolbar_bg); + snprintf( spare, 255, "%2d", tmp_option_atari_toolbar_bg); + set_text( CHOICES_BT_TOOLBAR_BGCOLOR, spare , 2 ); + /* Only first tab is refreshed: */ ObjcDraw( OC_FORM, dlgwin, CHOICES_TAB_BROWSER, 4 ); @@ -628,6 +741,10 @@ static void apply_settings( void ) /* "Style" tab: */ nsoption_set_int(font_min_size, tmp_option_font_min_size); nsoption_set_int(font_size, tmp_option_font_size); + nsoption_set_int(atari_toolbar_bg, tmp_option_atari_toolbar_bg); + nsoption_set_charp(atari_image_toolbar_folder, + ObjcString( dlgtree, CHOICES_BT_TOOLBAR_ICONSET, NULL) + ); /* "Rendering" tab: */ nsoption_set_charp(atari_font_driver, |