8d5a6609a3
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8409 a1c6a512-1295-4272-9138-f99709370657
202 lines
6.9 KiB
C
202 lines
6.9 KiB
C
/***************************************************************************
|
|
* __________ __ ___.
|
|
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
* \/ \/ \/ \/ \/
|
|
* $Id$
|
|
*
|
|
* Copyright (C) 2005 by Kevin Ferrare
|
|
*
|
|
* 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 "quickscreen.h"
|
|
#ifdef HAS_QUICKSCREEN
|
|
|
|
#include "system.h"
|
|
#include "icons.h"
|
|
#include "textarea.h"
|
|
#include "font.h"
|
|
#include "kernel.h"
|
|
#include "misc.h"
|
|
#include "statusbar.h"
|
|
|
|
void gui_quickscreen_init(struct gui_quickscreen * qs,
|
|
struct option_select *left_option,
|
|
struct option_select *bottom_option,
|
|
struct option_select *right_option,
|
|
char * left_right_title,
|
|
quickscreen_callback callback)
|
|
{
|
|
qs->left_option=left_option;
|
|
qs->bottom_option=bottom_option;
|
|
qs->right_option=right_option;
|
|
qs->left_right_title=left_right_title;
|
|
qs->callback=callback;
|
|
}
|
|
|
|
void gui_quickscreen_draw(struct gui_quickscreen * qs, struct screen * display)
|
|
{
|
|
int w,h;
|
|
char buffer[30];
|
|
const unsigned char *option;
|
|
const unsigned char *title;
|
|
#ifdef HAS_BUTTONBAR
|
|
display->has_buttonbar=false;
|
|
#endif
|
|
gui_textarea_clear(display);
|
|
display->setfont(FONT_SYSFIXED);
|
|
display->getstringsize((unsigned char *)"M", NULL, &h);
|
|
/* Displays the icons */
|
|
display->mono_bitmap(bitmap_icons_7x8[Icon_FastBackward],
|
|
display->width/2 - 16,
|
|
display->height/2 - 4, 7, 8);
|
|
display->mono_bitmap(bitmap_icons_7x8[Icon_DownArrow],
|
|
display->width/2 - 3,
|
|
display->height - h*3, 7, 8);
|
|
display->mono_bitmap(bitmap_icons_7x8[Icon_FastForward],
|
|
display->width/2 + 8,
|
|
display->height/2 - 4, 7, 8);
|
|
|
|
/* Displays the left's text */
|
|
title=(unsigned char *)qs->left_option->title;
|
|
option=(unsigned char *)option_select_get_text(qs->left_option, buffer,
|
|
sizeof buffer);
|
|
display->putsxy(0, display->height/2 - h*2, title);
|
|
display->putsxy(0, display->height/2 - h,
|
|
(unsigned char *)qs->left_right_title);
|
|
display->putsxy(0, display->height/2, option);
|
|
|
|
/* Displays the bottom's text */
|
|
title=(unsigned char *)qs->bottom_option->title;
|
|
option=(unsigned char *)option_select_get_text(qs->bottom_option, buffer,
|
|
sizeof buffer);
|
|
display->getstringsize(title, &w, &h);
|
|
display->putsxy((display->width-w)/2, display->height - h*2, title);
|
|
display->getstringsize(option, &w, &h);
|
|
display->putsxy((display->width-w)/2, display->height - h, option);
|
|
|
|
/* Displays the right's text */
|
|
title=(unsigned char *)qs->right_option->title;
|
|
option=(unsigned char *)option_select_get_text(qs->right_option, buffer,
|
|
sizeof buffer);
|
|
display->getstringsize(title,&w,&h);
|
|
display->putsxy(display->width - w, display->height/2 - h*2, title);
|
|
display->getstringsize((unsigned char *)qs->left_right_title, &w, &h);
|
|
display->putsxy(display->width - w, display->height/2 - h,
|
|
(unsigned char *)qs->left_right_title);
|
|
display->getstringsize(option,&w,&h);
|
|
display->putsxy(display->width - w, display->height/2, option);
|
|
|
|
gui_textarea_update(display);
|
|
display->setfont(FONT_UI);
|
|
}
|
|
|
|
void gui_syncquickscreen_draw(struct gui_quickscreen * qs)
|
|
{
|
|
int i;
|
|
FOR_NB_SCREENS(i)
|
|
gui_quickscreen_draw(qs, &screens[i]);
|
|
}
|
|
|
|
bool gui_quickscreen_do_button(struct gui_quickscreen * qs, int button)
|
|
{
|
|
|
|
switch(button)
|
|
{
|
|
case QUICKSCREEN_LEFT :
|
|
case QUICKSCREEN_LEFT | BUTTON_REPEAT :
|
|
#ifdef QUICKSCREEN_RC_LEFT
|
|
case QUICKSCREEN_RC_LEFT :
|
|
case QUICKSCREEN_RC_LEFT | BUTTON_REPEAT :
|
|
#endif
|
|
option_select_next(qs->left_option);
|
|
return(true);
|
|
|
|
case QUICKSCREEN_BOTTOM :
|
|
case QUICKSCREEN_BOTTOM | BUTTON_REPEAT :
|
|
#ifdef QUICKSCREEN_RC_BOTTOM
|
|
case QUICKSCREEN_RC_BOTTOM :
|
|
case QUICKSCREEN_RC_BOTTOM | BUTTON_REPEAT :
|
|
#endif
|
|
option_select_next(qs->bottom_option);
|
|
return(true);
|
|
|
|
case QUICKSCREEN_RIGHT :
|
|
case QUICKSCREEN_RIGHT | BUTTON_REPEAT :
|
|
#ifdef QUICKSCREEN_RC_RIGHT
|
|
case QUICKSCREEN_RC_RIGHT :
|
|
case QUICKSCREEN_RC_RIGHT | BUTTON_REPEAT :
|
|
#endif
|
|
option_select_next(qs->right_option);
|
|
return(true);
|
|
|
|
case QUICKSCREEN_BOTTOM_INV :
|
|
case QUICKSCREEN_BOTTOM_INV | BUTTON_REPEAT :
|
|
#ifdef QUICKSCREEN_RC_BOTTOM_INV
|
|
case QUICKSCREEN_RC_BOTTOM_INV :
|
|
case QUICKSCREEN_RC_BOTTOM_INV | BUTTON_REPEAT :
|
|
#endif
|
|
option_select_prev(qs->bottom_option);
|
|
return(true);
|
|
}
|
|
return(false);
|
|
}
|
|
#ifdef BUTTON_REMOTE
|
|
#define uncombine_button(key_read, combined_button) \
|
|
key_read & ~(combined_button & ~BUTTON_REMOTE)
|
|
#else
|
|
#define uncombine_button(key_read, combined_button) \
|
|
key_read & ~combined_button
|
|
#endif
|
|
|
|
bool gui_syncquickscreen_run(struct gui_quickscreen * qs, int button_enter)
|
|
{
|
|
int raw_key, button;
|
|
/* To quit we need either :
|
|
* - a second press on the button that made us enter
|
|
* - an action taken while pressing the enter button,
|
|
* then release the enter button*/
|
|
bool can_quit=false;
|
|
gui_syncquickscreen_draw(qs);
|
|
gui_syncstatusbar_draw(&statusbars, true);
|
|
while (true) {
|
|
raw_key = button_get(true);
|
|
button=uncombine_button(raw_key, button_enter);
|
|
if(default_event_handler(button) == SYS_USB_CONNECTED)
|
|
return(true);
|
|
if(gui_quickscreen_do_button(qs, button))
|
|
{
|
|
can_quit=true;
|
|
if(qs->callback)
|
|
qs->callback(qs);
|
|
gui_syncquickscreen_draw(qs);
|
|
}
|
|
else if(raw_key==button_enter)
|
|
can_quit=true;
|
|
if(raw_key==(button_enter | BUTTON_REL) && can_quit)
|
|
return(false);
|
|
#ifdef QUICKSCREEN_QUIT
|
|
if(raw_key==QUICKSCREEN_QUIT
|
|
#ifdef QUICKSCREEN_QUIT2
|
|
|| raw_key==QUICKSCREEN_QUIT2
|
|
#endif
|
|
#if QUICKSCREEN_RC_QUIT
|
|
|| raw_key==QUICKSCREEN_RC_QUIT
|
|
#endif
|
|
)
|
|
return(false);
|
|
#endif /* QUICKSCREEN_QUIT */
|
|
gui_syncstatusbar_draw(&statusbars, false);
|
|
}
|
|
}
|
|
|
|
#endif /* HAS_QUICKSCREEN */
|
|
|