diff options
Diffstat (limited to 'apps/gui/buttonbar.c')
-rw-r--r-- | apps/gui/buttonbar.c | 126 |
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 | |||
30 | void gui_buttonbar_init(struct gui_buttonbar * buttonbar) | ||
31 | { | ||
32 | gui_buttonbar_unset(buttonbar); | ||
33 | } | ||
34 | |||
35 | void gui_buttonbar_set_display(struct gui_buttonbar * buttonbar, | ||
36 | struct screen * display) | ||
37 | { | ||
38 | buttonbar->display = display; | ||
39 | } | ||
40 | |||
41 | void 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 | |||
68 | void 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 | |||
91 | void 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 | |||
98 | void 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 | |||
114 | bool 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 */ | ||