summaryrefslogtreecommitdiffstats
path: root/apps/screens.c
diff options
context:
space:
mode:
authorBjörn Stenberg <bjorn@haxx.se>2002-09-24 17:22:12 +0000
committerBjörn Stenberg <bjorn@haxx.se>2002-09-24 17:22:12 +0000
commitb1b8bd4dd159e90f9e197c8870953da079162639 (patch)
tree27238f1b5a1535de0604e423ca91236bb3e2f833 /apps/screens.c
parentc909b4b42e88a8e797e58a5e3e5ecf3716ae4783 (diff)
downloadrockbox-b1b8bd4dd159e90f9e197c8870953da079162639.tar.gz
rockbox-b1b8bd4dd159e90f9e197c8870953da079162639.tar.bz2
rockbox-b1b8bd4dd159e90f9e197c8870953da079162639.zip
Moved on_screen, f2_screen, f3_screen and handle_usb (renamed usb_screen) to a new file: screens.c.
typedef Menu replaced with a bool. All code now calls usb_screen() for usb handling. Nearly all code now deals with USB connect/disconnect properly. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2401 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/screens.c')
-rw-r--r--apps/screens.c292
1 files changed, 292 insertions, 0 deletions
diff --git a/apps/screens.c b/apps/screens.c
new file mode 100644
index 0000000000..04870d1f1a
--- /dev/null
+++ b/apps/screens.c
@@ -0,0 +1,292 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2002 Bjrn Stenberg
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+#include <stdbool.h>
+#include <string.h>
+#include <stdio.h>
+#include "backlight.h"
+#include "button.h"
+#include "lcd.h"
+#include "lang.h"
+#include "icons.h"
+#include "font.h"
+#include "mpeg.h"
+#include "usb.h"
+#include "settings.h"
+#include "playlist.h"
+
+void usb_screen(void)
+{
+#ifndef SIMULATOR
+ backlight_on();
+ usb_acknowledge(SYS_USB_CONNECTED_ACK);
+ usb_wait_for_disconnect(&button_queue);
+ backlight_on();
+#endif
+}
+
+#ifdef HAVE_RECORDER_KEYPAD
+/* returns:
+ 0 if no key was pressed
+ 1 if a key was pressed (or if ON was held down long enough to repeat)
+ 2 if USB was connected */
+int on_screen(void)
+{
+ static int pitch = 100;
+ bool exit = false;
+ bool used = false;
+
+ while (!exit) {
+
+ if ( used ) {
+ char* ptr;
+ char buf[32];
+ int w, h;
+
+ lcd_scroll_pause();
+ lcd_clear_display();
+
+ ptr = str(LANG_PITCH_UP);
+ lcd_getstringsize(ptr,FONT_UI,&w,&h);
+ lcd_putsxy((LCD_WIDTH-w)/2, 0, ptr, FONT_UI);
+ lcd_bitmap(bitmap_icons_7x8[Icon_UpArrow],
+ LCD_WIDTH/2 - 3, h*2, 7, 8, true);
+
+ snprintf(buf, sizeof buf, "%d%%", pitch);
+ lcd_getstringsize(buf,FONT_UI,&w,&h);
+ lcd_putsxy((LCD_WIDTH-w)/2, h, buf, FONT_UI);
+
+ ptr = str(LANG_PITCH_DOWN);
+ lcd_getstringsize(ptr,FONT_UI,&w,&h);
+ lcd_putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h, ptr, FONT_UI);
+ lcd_bitmap(bitmap_icons_7x8[Icon_DownArrow],
+ LCD_WIDTH/2 - 3, LCD_HEIGHT - h*3, 7, 8, true);
+
+ ptr = str(LANG_PAUSE);
+ lcd_getstringsize(ptr,FONT_UI,&w,&h);
+ lcd_putsxy((LCD_WIDTH-(w/2))/2, LCD_HEIGHT/2 - h/2, ptr, FONT_UI);
+ lcd_bitmap(bitmap_icons_7x8[Icon_Pause],
+ (LCD_WIDTH-(w/2))/2-10, LCD_HEIGHT/2 - h/2, 7, 8, true);
+
+ lcd_update();
+ }
+
+ /* use lastbutton, so the main loop can decide whether to
+ exit to browser or not */
+ switch (button_get(true)) {
+ case BUTTON_UP:
+ case BUTTON_ON | BUTTON_UP:
+ case BUTTON_ON | BUTTON_UP | BUTTON_REPEAT:
+ used = true;
+ pitch++;
+ if ( pitch > 200 )
+ pitch = 200;
+#ifdef HAVE_MAS3587F
+ mpeg_set_pitch(pitch);
+#endif
+ break;
+
+ case BUTTON_DOWN:
+ case BUTTON_ON | BUTTON_DOWN:
+ case BUTTON_ON | BUTTON_DOWN | BUTTON_REPEAT:
+ used = true;
+ pitch--;
+ if ( pitch < 50 )
+ pitch = 50;
+#ifdef HAVE_MAS3587F
+ mpeg_set_pitch(pitch);
+#endif
+ break;
+
+ case BUTTON_ON | BUTTON_PLAY:
+ mpeg_pause();
+ used = true;
+ break;
+
+ case BUTTON_PLAY | BUTTON_REL:
+ mpeg_resume();
+ used = true;
+ break;
+
+ case BUTTON_ON | BUTTON_PLAY | BUTTON_REL:
+ mpeg_resume();
+ exit = true;
+ break;
+
+#ifdef SIMULATOR
+ case BUTTON_ON:
+#else
+ case BUTTON_ON | BUTTON_REL:
+ case BUTTON_ON | BUTTON_UP | BUTTON_REL:
+ case BUTTON_ON | BUTTON_DOWN | BUTTON_REL:
+#endif
+ exit = true;
+ break;
+
+ case BUTTON_ON | BUTTON_REPEAT:
+ used = true;
+ break;
+
+ case SYS_USB_CONNECTED:
+ usb_screen();
+ return 2;
+ }
+ }
+
+ if ( used )
+ return 1;
+ else
+ return 0;
+}
+
+bool f2_screen(void)
+{
+ bool exit = false;
+ bool used = false;
+ int w, h;
+ char buf[32];
+
+ /* Get the font height */
+ lcd_getstringsize("A",FONT_UI,&w,&h);
+
+ lcd_stop_scroll();
+
+ while (!exit) {
+ lcd_clear_display();
+
+ lcd_putsxy(0, LCD_HEIGHT/2 - h*2, str(LANG_SHUFFLE), FONT_UI);
+ lcd_putsxy(0, LCD_HEIGHT/2 - h, str(LANG_F2_MODE), FONT_UI);
+ lcd_putsxy(0, LCD_HEIGHT/2,
+ global_settings.playlist_shuffle ?
+ str(LANG_ON) : str(LANG_OFF), FONT_UI);
+ lcd_bitmap(bitmap_icons_7x8[Icon_FastBackward],
+ LCD_WIDTH/2 - 16, LCD_HEIGHT/2 - 4, 7, 8, true);
+
+ snprintf(buf, sizeof buf, str(LANG_DIR_FILTER),
+ global_settings.mp3filter ? str(LANG_ON) : str(LANG_OFF));
+
+ /* Get the string width and height */
+ lcd_getstringsize(buf,FONT_UI,&w,&h);
+ lcd_putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h, buf, FONT_UI);
+ lcd_bitmap(bitmap_icons_7x8[Icon_DownArrow],
+ LCD_WIDTH/2 - 3, LCD_HEIGHT - h*3, 7, 8, true);
+
+ lcd_update();
+
+ switch (button_get(true)) {
+ case BUTTON_LEFT:
+ case BUTTON_F2 | BUTTON_LEFT:
+ global_settings.playlist_shuffle =
+ !global_settings.playlist_shuffle;
+
+ if (global_settings.playlist_shuffle)
+ randomise_playlist(current_tick);
+ else
+ sort_playlist(true);
+ used = true;
+ break;
+
+ case BUTTON_DOWN:
+ case BUTTON_F2 | BUTTON_DOWN:
+ global_settings.mp3filter = !global_settings.mp3filter;
+ used = true;
+ break;
+
+ case BUTTON_F2 | BUTTON_REL:
+ if ( used )
+ exit = true;
+ used = true;
+ break;
+
+ case SYS_USB_CONNECTED:
+ usb_screen();
+ return true;
+ }
+ }
+
+ settings_save();
+
+ return false;
+}
+
+bool f3_screen(void)
+{
+ bool exit = false;
+ bool used = false;
+
+ lcd_stop_scroll();
+
+ while (!exit) {
+ int w,h;
+ char* ptr;
+
+ ptr = str(LANG_F3_STATUS);
+ lcd_getstringsize(ptr,FONT_UI,&w,&h);
+ lcd_clear_display();
+
+ lcd_putsxy(0, LCD_HEIGHT/2 - h*2, str(LANG_F3_SCROLL), FONT_UI);
+ lcd_putsxy(0, LCD_HEIGHT/2 - h, str(LANG_F3_BAR), FONT_UI);
+ lcd_putsxy(0, LCD_HEIGHT/2,
+ global_settings.scrollbar ? str(LANG_ON) : str(LANG_OFF), FONT_UI);
+ lcd_bitmap(bitmap_icons_7x8[Icon_FastBackward],
+ LCD_WIDTH/2 - 16, LCD_HEIGHT/2 - 4, 7, 8, true);
+
+ lcd_putsxy(LCD_WIDTH - w, LCD_HEIGHT/2 - h*2, ptr, FONT_UI);
+ lcd_putsxy(LCD_WIDTH - w, LCD_HEIGHT/2 - h, str(LANG_F3_BAR), FONT_UI);
+ lcd_putsxy(LCD_WIDTH - w, LCD_HEIGHT/2,
+ global_settings.statusbar ? str(LANG_ON) : str(LANG_OFF), FONT_UI);
+ lcd_bitmap(bitmap_icons_7x8[Icon_FastForward],
+ LCD_WIDTH/2 + 8, LCD_HEIGHT/2 - 4, 7, 8, true);
+ lcd_update();
+
+ switch (button_get(true)) {
+ case BUTTON_LEFT:
+ case BUTTON_F3 | BUTTON_LEFT:
+ global_settings.scrollbar = !global_settings.scrollbar;
+ used = true;
+ break;
+
+ case BUTTON_RIGHT:
+ case BUTTON_F3 | BUTTON_RIGHT:
+ global_settings.statusbar = !global_settings.statusbar;
+ used = true;
+ break;
+
+ case BUTTON_F3 | BUTTON_REL:
+ if ( used )
+ exit = true;
+ used = true;
+ break;
+
+ case SYS_USB_CONNECTED:
+ usb_screen();
+ return true;
+ }
+ }
+
+ settings_save();
+ if (global_settings.statusbar)
+ lcd_setmargins(0, STATUSBAR_HEIGHT);
+ else
+ lcd_setmargins(0, 0);
+
+ return false;
+}
+#endif
+
+