From 6792a2e204d6e845a0cff61bc5dbe49b03a58d6e Mon Sep 17 00:00:00 2001
From: Lukas Fleischer <calcurse@cryptocrack.de>
Date: Thu, 17 Jul 2014 08:49:16 +0200
Subject: Split out code to set bindings

Split wins_status_bar() into wins_set_bindings(), wins_update_bindings()
and wins_status_bar(). This allows for using wins_set_bindings() to set
custom key bindings to be displayed.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
---
 src/calcurse.h |  2 ++
 src/wins.c     | 42 ++++++++++++++++++++++++++----------------
 2 files changed, 28 insertions(+), 16 deletions(-)

(limited to 'src')

diff --git a/src/calcurse.h b/src/calcurse.h
index 34e74b5..e125021 100644
--- a/src/calcurse.h
+++ b/src/calcurse.h
@@ -1125,6 +1125,8 @@ void wins_reset(void);
 void wins_prepare_external(void);
 void wins_unprepare_external(void);
 void wins_launch_external(const char *[]);
+void wins_set_bindings(struct binding **, int);
+void wins_update_bindings(void);
 void wins_status_bar(void);
 void wins_erase_status_bar(void);
 void wins_other_status_page(int);
diff --git a/src/wins.c b/src/wins.c
index 0abd4b6..5f8d877 100644
--- a/src/wins.c
+++ b/src/wins.c
@@ -544,8 +544,10 @@ void wins_update(int flags)
 {
 	wins_update_border(flags);
 	wins_update_panels(flags);
-	if (flags & FLAG_STA)
+	if (flags & FLAG_STA) {
+		wins_update_bindings();
 		wins_status_bar();
+	}
 	if ((flags & FLAG_NOT) && notify_bar())
 		notify_update_bar();
 	wmove(win[STA].p, 0, 0);
@@ -610,16 +612,24 @@ void wins_launch_external(const char *arg[])
 	wins_unprepare_external();
 }
 
+static struct binding **bindings;
+static int bindings_size;
 static unsigned status_page;
-static unsigned nb_items;
+
+/* Sets the current set of key bindings to display in the status bar. */
+void wins_set_bindings(struct binding **new_bindings, int size)
+{
+	bindings = new_bindings;
+	bindings_size = size;
+}
 
 /*
- * Draws the status bar.
+ * Obtains the set of key bindings to display for the active panel.
  *
  * To add a key binding, insert a new binding_t item and add it to the binding
  * table.
  */
-void wins_status_bar()
+void wins_update_bindings(void)
 {
 	struct binding help = { _("Help"), KEY_GENERIC_HELP };
 	struct binding quit = { _("Quit"), KEY_GENERIC_QUIT };
@@ -664,7 +674,6 @@ void wins_status_bar()
 	struct binding vnote = { _("ViewNote"), KEY_VIEW_NOTE };
 	struct binding rprio = { _("Prio.+"), KEY_RAISE_PRIORITY };
 	struct binding lprio = { _("Prio.-"), KEY_LOWER_PRIORITY };
-	struct binding othr = { _("OtherCmd"), KEY_GENERIC_OTHER_CMD };
 
 	struct binding *bindings_cal[] = {
 		&help, &quit, &save, &reload, &chgvu, &nview, &pview, &up,
@@ -691,32 +700,33 @@ void wins_status_bar()
 
 	enum win active_panel = wins_slctd();
 
-	struct binding **bindings;
-	int bindings_size;
 
 	switch (active_panel) {
 	case CAL:
-		bindings = bindings_cal;
-		bindings_size = ARRAY_SIZE(bindings_cal);
+		wins_set_bindings(bindings_cal, ARRAY_SIZE(bindings_cal));
 		break;
 	case APP:
-		bindings = bindings_apoint;
-		bindings_size = ARRAY_SIZE(bindings_apoint);
+		wins_set_bindings(bindings_apoint,
+				ARRAY_SIZE(bindings_apoint));
 		break;
 	case TOD:
-		bindings = bindings_todo;
-		bindings_size = ARRAY_SIZE(bindings_todo);
+		wins_set_bindings(bindings_todo, ARRAY_SIZE(bindings_todo));
 		break;
 	default:
 		EXIT(_("unknown panel"));
 		/* NOTREACHED */
 	}
+}
+
+/* Draws the status bar. */
+void wins_status_bar(void)
+{
+	struct binding othr = { _("OtherCmd"), KEY_GENERIC_OTHER_CMD };
 
 	keys_display_bindings_bar(win[STA].p, bindings, bindings_size,
 				  (KEYS_CMDS_PER_LINE * 2 -
 				   1) * (status_page - 1),
 				  KEYS_CMDS_PER_LINE * 2, &othr);
-	nb_items = bindings_size;
 }
 
 /* Erase status bar. */
@@ -728,10 +738,10 @@ void wins_erase_status_bar(void)
 /* Update the status bar page number to display other commands. */
 void wins_other_status_page(int panel)
 {
-	int max_page = nb_items / (KEYS_CMDS_PER_LINE * 2 - 1) + 1;
+	int max_page = bindings_size / (KEYS_CMDS_PER_LINE * 2 - 1) + 1;
 
 	/* There is no "OtherCmd" on the last page. */
-	if (nb_items % (KEYS_CMDS_PER_LINE * 2 - 1) == 1)
+	if (bindings_size % (KEYS_CMDS_PER_LINE * 2 - 1) == 1)
 		max_page--;
 
 	status_page = (status_page % max_page) + 1;
-- 
cgit v1.2.3-70-g09d2