diff options
author | James Booth <boothj5@gmail.com> | 2018-03-08 23:11:49 +0000 |
---|---|---|
committer | James Booth <boothj5@gmail.com> | 2018-03-08 23:11:49 +0000 |
commit | a957c545d30750776e5b3307e71d4069e56a9ea5 (patch) | |
tree | 908e66be6668b743c9cf6f406c86defb27606d35 /src | |
parent | 720dce866eb759a7b5ecdaff7c7d9ceeb6e2487c (diff) | |
download | profani-tty-a957c545d30750776e5b3307e71d4069e56a9ea5.tar.gz |
Add max tabs preference for statusbar
Diffstat (limited to 'src')
-rw-r--r-- | src/command/cmd_ac.c | 1 | ||||
-rw-r--r-- | src/command/cmd_defs.c | 6 | ||||
-rw-r--r-- | src/command/cmd_funcs.c | 27 | ||||
-rw-r--r-- | src/config/preferences.c | 17 | ||||
-rw-r--r-- | src/config/preferences.h | 3 | ||||
-rw-r--r-- | src/ui/console.c | 4 | ||||
-rw-r--r-- | src/ui/statusbar.c | 112 |
7 files changed, 111 insertions, 59 deletions
diff --git a/src/command/cmd_ac.c b/src/command/cmd_ac.c index ec572325..75638cae 100644 --- a/src/command/cmd_ac.c +++ b/src/command/cmd_ac.c @@ -783,6 +783,7 @@ cmd_ac_init(void) autocomplete_add(statusbar_ac, "down"); autocomplete_add(statusbar_ac, "show"); autocomplete_add(statusbar_ac, "hide"); + autocomplete_add(statusbar_ac, "maxtabs"); statusbar_show_ac = autocomplete_new(); autocomplete_add(statusbar_show_ac, "empty"); diff --git a/src/command/cmd_defs.c b/src/command/cmd_defs.c index f8c50739..2634645f 100644 --- a/src/command/cmd_defs.c +++ b/src/command/cmd_defs.c @@ -1366,19 +1366,19 @@ static struct cmd_t command_defs[] = CMD_SYN( "/statusbar show empty|name", "/statusbar hide empty|name", -// "/statusbar maxtabs <value>", + "/statusbar maxtabs <value>", "/statusbar up", "/statusbar down") CMD_DESC( "Manage statusbar display preferences.") CMD_ARGS( -// { "maxtabs <value>", "Set the maximum number of tabs to display, <value> must be between 0 and 10" }, + { "maxtabs <value>", "Set the maximum number of tabs to display, <value> must be between 0 and 10" }, { "show|hide empty", "Show or hide empty tabs." }, { "show|hide name", "Show or hide names in tabs." }, { "up", "Move the status bar up the screen." }, { "down", "Move the status bar down the screen." }) CMD_EXAMPLES( -// "/statusbar maxtabs 5", + "/statusbar maxtabs 5", "/statusbar show empty", "/statusbar hide name") }, diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c index 1e5b3b55..8901fbca 100644 --- a/src/command/cmd_funcs.c +++ b/src/command/cmd_funcs.c @@ -5827,7 +5827,34 @@ cmd_statusbar(ProfWin *window, const char *const command, gchar **args) } if (g_strcmp0(args[0], "maxtabs") == 0) { + if (args[1] == NULL) { + cons_bad_cmd_usage(command); + return TRUE; + } + + char *value = args[1]; + int intval = 0; + char *err_msg = NULL; + gboolean res = strtoi_range(value, &intval, 0, INT_MAX, &err_msg); + if (res) { + if (intval < 0 || intval > 10) { + cons_bad_cmd_usage(command); + return TRUE; + } + prefs_set_statusbartabs(intval); + if (intval == 0) { + cons_show("Status bar tabs disabled."); + } else { + cons_show("Status bar tabs set to %d.", intval); + } + return TRUE; + } else { + cons_show(err_msg); + cons_bad_cmd_usage(command); + free(err_msg); + return TRUE; + } } if (g_strcmp0(args[0], "up") == 0) { diff --git a/src/config/preferences.c b/src/config/preferences.c index 63089a20..8166e3bd 100644 --- a/src/config/preferences.c +++ b/src/config/preferences.c @@ -663,6 +663,23 @@ prefs_get_tray_timer(void) } } +gint +prefs_get_statusbartabs(void) +{ + if (!g_key_file_has_key(prefs, PREF_GROUP_UI, "statusbar.tabs", NULL)) { + return 10; + } else { + return g_key_file_get_integer(prefs, PREF_GROUP_UI, "statusbar.tabs", NULL); + } +} + +void +prefs_set_statusbartabs(gint value) +{ + g_key_file_set_integer(prefs, PREF_GROUP_UI, "statusbar.tabs", value); + _save_prefs(); +} + gchar** prefs_get_plugins(void) { diff --git a/src/config/preferences.h b/src/config/preferences.h index 183d033a..4e6bff97 100644 --- a/src/config/preferences.h +++ b/src/config/preferences.h @@ -190,6 +190,9 @@ gint prefs_get_autoping_timeout(void); gint prefs_get_inpblock(void); void prefs_set_inpblock(gint value); +void prefs_set_statusbartabs(gint value); +gint prefs_get_statusbartabs(void); + void prefs_set_occupants_size(gint value); gint prefs_get_occupants_size(void); void prefs_set_roster_size(gint value); diff --git a/src/ui/console.c b/src/ui/console.c index 84e7b59b..a6948c5b 100644 --- a/src/ui/console.c +++ b/src/ui/console.c @@ -1544,6 +1544,7 @@ cons_show_ui_prefs(void) cons_presence_setting(); cons_inpblock_setting(); cons_tlsshow_setting(); + cons_statusbar_setting(); cons_alert(); } @@ -1750,7 +1751,6 @@ cons_inpblock_setting(void) void cons_statusbar_setting(void) { - cons_winpos_setting(); if (prefs_get_boolean(PREF_STATUSBAR_SHOW_EMPTY)) { cons_show("Show empty tabs (/statusbar) : ON"); } else { @@ -1761,6 +1761,8 @@ cons_statusbar_setting(void) } else { cons_show("Show tab names (/statusbar) : OFF"); } + cons_show("Max tabs (/statusbar) : %d", prefs_get_statusbartabs()); + } void diff --git a/src/ui/statusbar.c b/src/ui/statusbar.c index ca8e8a47..d16e0660 100644 --- a/src/ui/statusbar.c +++ b/src/ui/statusbar.c @@ -63,24 +63,13 @@ typedef struct _status_bar_t { int current_tab; } StatusBar; -#define MAX_TABS 10 - static GTimeZone *tz; static StatusBar *statusbar; static WINDOW *statusbar_win; static void _status_bar_draw(void); - -void -_destroy_tab(StatusBarTab *tab) -{ - if (tab) { - if (tab->display_name) { - free(tab->display_name); - } - free(tab); - } -} +static void _destroy_tab(StatusBarTab *tab); +static int _tabs_width(void); void status_bar_init(void) @@ -241,47 +230,6 @@ status_bar_clear_message(void) _status_bar_draw(); } -static int -_tabs_width(void) -{ - gboolean show_empty = prefs_get_boolean(PREF_STATUSBAR_SHOW_EMPTY); - gboolean show_name = prefs_get_boolean(PREF_STATUSBAR_SHOW_NAME); - - if (show_name) { - if (show_empty) { - int width = 4; - int i = 0; - for (i = 1; i <= MAX_TABS; i++) { - StatusBarTab *tab = g_hash_table_lookup(statusbar->tabs, GINT_TO_POINTER(i)); - if (tab) { - width += strlen(tab->display_name); - width += 4; - } else { - width += 3; - } - } - return width; - } else { - int width = 4; - int i = 0; - for (i = 1; i <= MAX_TABS; i++) { - StatusBarTab *tab = g_hash_table_lookup(statusbar->tabs, GINT_TO_POINTER(i)); - if (tab) { - width += strlen(tab->display_name); - width += 4; - } - } - return width; - } - } else { - if (show_empty) { - return MAX_TABS * 3 + 4; - } else { - return g_hash_table_size(statusbar->tabs) * 3 + 4; - } - } -} - static void _status_bar_draw(void) { @@ -339,9 +287,10 @@ _status_bar_draw(void) gboolean show_empty = prefs_get_boolean(PREF_STATUSBAR_SHOW_EMPTY); gboolean show_name = prefs_get_boolean(PREF_STATUSBAR_SHOW_NAME); + gint max_tabs = prefs_get_statusbartabs(); int i = 1; - for (i = 1; i <= MAX_TABS; i++) { + for (i = 1; i <= max_tabs; i++) { int display_num = i == 10 ? 0 : i; StatusBarTab *tab = g_hash_table_lookup(statusbar->tabs, GINT_TO_POINTER(i)); @@ -409,3 +358,56 @@ _status_bar_draw(void) wnoutrefresh(statusbar_win); inp_put_back(); } + +static void +_destroy_tab(StatusBarTab *tab) +{ + if (tab) { + if (tab->display_name) { + free(tab->display_name); + } + free(tab); + } +} + +static int +_tabs_width(void) +{ + gboolean show_empty = prefs_get_boolean(PREF_STATUSBAR_SHOW_EMPTY); + gboolean show_name = prefs_get_boolean(PREF_STATUSBAR_SHOW_NAME); + gint max_tabs = prefs_get_statusbartabs(); + + if (show_name) { + if (show_empty) { + int width = 4; + int i = 0; + for (i = 1; i <= max_tabs; i++) { + StatusBarTab *tab = g_hash_table_lookup(statusbar->tabs, GINT_TO_POINTER(i)); + if (tab) { + width += strlen(tab->display_name); + width += 4; + } else { + width += 3; + } + } + return width; + } else { + int width = 4; + int i = 0; + for (i = 1; i <= max_tabs; i++) { + StatusBarTab *tab = g_hash_table_lookup(statusbar->tabs, GINT_TO_POINTER(i)); + if (tab) { + width += strlen(tab->display_name); + width += 4; + } + } + return width; + } + } else { + if (show_empty) { + return max_tabs * 3 + 4; + } else { + return g_hash_table_size(statusbar->tabs) * 3 + 4; + } + } +} |