summaryrefslogtreecommitdiff
path: root/apps/gui/buttonbar.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/gui/buttonbar.c')
-rw-r--r--apps/gui/buttonbar.c126
1 files changed, 126 insertions, 0 deletions
diff --git a/apps/gui/buttonbar.c b/apps/gui/buttonbar.c
new file mode 100644
index 0000000000..be87b1b81f
--- /dev/null
+++ b/apps/gui/buttonbar.c
@@ -0,0 +1,126 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) Linus Nielsen Feltzing (2002), Kévin FERRARE (2005)
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20#include "config.h"
21#include "buttonbar.h"
22
23#ifdef HAS_BUTTONBAR
24
25#include "lcd.h"
26#include "font.h"
27#include "string.h"
28#include "settings.h"
29
30void gui_buttonbar_init(struct gui_buttonbar * buttonbar)
31{
32 gui_buttonbar_unset(buttonbar);
33}
34
35void gui_buttonbar_set_display(struct gui_buttonbar * buttonbar,
36 struct screen * display)
37{
38 buttonbar->display = display;
39}
40
41void gui_buttonbar_draw_button(struct gui_buttonbar * buttonbar, int num)
42{
43 int xpos, ypos, button_width, text_width;
44 int fw, fh;
45 struct screen * display = buttonbar->display;
46
47 display->setfont(FONT_SYSFIXED);
48 display->getstringsize("M", &fw, &fh);
49
50 button_width = display->width/BUTTONBAR_MAX_BUTTONS;
51 xpos = num * button_width;
52 ypos = display->height - fh;
53
54 if(buttonbar->caption[num][0] != 0)
55 {
56 /* center the text */
57 text_width = fw * strlen(buttonbar->caption[num]);
58 display->putsxy(xpos + (button_width - text_width)/2,
59 ypos, buttonbar->caption[num]);
60 }
61
62 display->set_drawmode(DRMODE_COMPLEMENT);
63 display->fillrect(xpos, ypos, button_width - 1, fh);
64 display->set_drawmode(DRMODE_SOLID);
65 display->setfont(FONT_UI);
66}
67
68void gui_buttonbar_set(struct gui_buttonbar * buttonbar,
69 const char *caption1,
70 const char *caption2,
71 const char *caption3)
72{
73 gui_buttonbar_unset(buttonbar);
74 if(caption1)
75 {
76 strncpy(buttonbar->caption[0], caption1, 7);
77 buttonbar->caption[0][7] = 0;
78 }
79 if(caption2)
80 {
81 strncpy(buttonbar->caption[1], caption2, 7);
82 buttonbar->caption[1][7] = 0;
83 }
84 if(caption3)
85 {
86 strncpy(buttonbar->caption[2], caption3, 7);
87 buttonbar->caption[2][7] = 0;
88 }
89}
90
91void gui_buttonbar_unset(struct gui_buttonbar * buttonbar)
92{
93 int i;
94 for(i = 0;i < BUTTONBAR_MAX_BUTTONS;++i)
95 buttonbar->caption[i][0] = 0;
96}
97
98void gui_buttonbar_draw(struct gui_buttonbar * buttonbar)
99{
100 struct screen * display = buttonbar->display;
101 int i;
102
103 display->set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
104 display->fillrect(0, display->height - BUTTONBAR_HEIGHT,
105 display->width, BUTTONBAR_HEIGHT);
106 display->set_drawmode(DRMODE_SOLID);
107
108 for(i = 0;i < BUTTONBAR_MAX_BUTTONS;++i)
109 gui_buttonbar_draw_button(buttonbar, i);
110 display->update_rect(0, display->height - BUTTONBAR_HEIGHT,
111 display->width, BUTTONBAR_HEIGHT);
112}
113
114bool gui_buttonbar_isset(struct gui_buttonbar * buttonbar)
115{
116 /* If all buttons are unset, the button bar is considered disabled */
117 if(!global_settings.buttonbar)
118 return(false);
119 int i;
120 for(i = 0;i < BUTTONBAR_MAX_BUTTONS;++i)
121 if(buttonbar->caption[i] != 0)
122 return true;
123 return false;
124}
125
126#endif /* HAS_BUTTONBAR */