forked from len0rd/rockbox
Rewrote the clock plugin in a cleaner and more modular way so that it can scale on remote screens. Use left-right keys to change the type of clock displayed (analogic, digital, binary) and up/downto change the look of the clock
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14174 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
ffbbc60f38
commit
93b2f9fd44
56 changed files with 1969 additions and 1746 deletions
199
apps/plugins/clock/clock.c
Normal file
199
apps/plugins/clock/clock.c
Normal file
|
@ -0,0 +1,199 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id: clock.c 14095 2007-07-31 10:53:53Z nls $
|
||||
*
|
||||
* Copyright (C) 2007 Kévin 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 "plugin.h"
|
||||
#include "time.h"
|
||||
#include "pluginlib_actions.h"
|
||||
#include "xlcd.h"
|
||||
|
||||
#include "clock.h"
|
||||
#include "clock_counter.h"
|
||||
#include "clock_draw.h"
|
||||
#include "clock_menu.h"
|
||||
#include "clock_settings.h"
|
||||
|
||||
PLUGIN_HEADER
|
||||
|
||||
/* Keymaps */
|
||||
const struct button_mapping* plugin_contexts[]={
|
||||
generic_actions,
|
||||
generic_directions,
|
||||
#if NB_SCREENS == 2
|
||||
remote_directions
|
||||
#endif
|
||||
};
|
||||
#define NB_ACTION_CONTEXTS sizeof(plugin_contexts)/sizeof(plugin_contexts[0])
|
||||
#define ACTION_COUNTER_TOGGLE PLA_FIRE
|
||||
#define ACTION_COUNTER_RESET PLA_FIRE_REPEAT
|
||||
#define ACTION_MENU PLA_MENU
|
||||
#define ACTION_EXIT PLA_QUIT
|
||||
#define ACTION_MODE_NEXT PLA_RIGHT
|
||||
#define ACTION_MODE_PREV PLA_LEFT
|
||||
#define ACTION_SKIN_NEXT PLA_UP
|
||||
#define ACTION_SKIN_PREV PLA_DOWN
|
||||
|
||||
extern struct plugin_api* rb;
|
||||
|
||||
/**************************
|
||||
* Cleanup on plugin return
|
||||
*************************/
|
||||
void cleanup(void *parameter)
|
||||
{
|
||||
(void)parameter;
|
||||
clock_draw_restore_colors();
|
||||
if(clock_settings.general.save_settings == 1)
|
||||
save_settings();
|
||||
|
||||
/* restore set backlight timeout */
|
||||
rb->backlight_set_timeout(rb->global_settings->backlight_timeout);
|
||||
}
|
||||
|
||||
/* puts the current time into the time struct */
|
||||
void clock_update_time( struct time* time){
|
||||
struct tm* current_time = rb->get_time();
|
||||
time->hour = current_time->tm_hour;
|
||||
time->minute = current_time->tm_min;
|
||||
time->second = current_time->tm_sec;
|
||||
|
||||
/*********************
|
||||
* Date info
|
||||
*********************/
|
||||
time->year = current_time->tm_year + 1900;
|
||||
time->day = current_time->tm_mday;
|
||||
time->month = current_time->tm_mon + 1;
|
||||
|
||||
}
|
||||
|
||||
void format_date(char* buffer, struct time* time, enum date_format format){
|
||||
switch(format){
|
||||
case JAPANESE:
|
||||
rb->snprintf(buffer, 20, "%04d/%02d/%02d",
|
||||
time->year, time->month, time->day);
|
||||
break;
|
||||
case EUROPEAN:
|
||||
rb->snprintf(buffer, 20, "%02d/%02d/%04d",
|
||||
time->day, time->month, time->year);
|
||||
break;
|
||||
case ENGLISH:
|
||||
rb->snprintf(buffer, 20, "%02d/%02d/%04d",
|
||||
time->month, time->day, time->year);
|
||||
break;
|
||||
case NONE:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
* Plugin starts here
|
||||
**********************************************************************/
|
||||
enum plugin_status plugin_start(struct plugin_api* api, void* parameter){
|
||||
int button;
|
||||
int last_second = -1;
|
||||
bool redraw=true;
|
||||
int i;
|
||||
struct time time;
|
||||
struct counter counter;
|
||||
bool exit_clock = false;
|
||||
(void)parameter;
|
||||
rb = api;
|
||||
|
||||
#if LCD_DEPTH > 1
|
||||
rb->lcd_set_backdrop(NULL);
|
||||
#endif
|
||||
|
||||
load_settings();
|
||||
|
||||
/* init xlcd functions */
|
||||
xlcd_init(rb);
|
||||
counter_init(&counter);
|
||||
clock_draw_set_colors();
|
||||
|
||||
while(!exit_clock){
|
||||
clock_update_time(&time);
|
||||
|
||||
if(!clock_settings.general.idle_poweroff)
|
||||
rb->reset_poweroff_timer();
|
||||
|
||||
/*************************
|
||||
* Scan for button presses
|
||||
************************/
|
||||
button = pluginlib_getaction(rb, HZ/10, plugin_contexts, NB_ACTION_CONTEXTS);
|
||||
redraw=true;/* we'll set it to false afterwards if there was no action */
|
||||
switch (button){
|
||||
case ACTION_COUNTER_TOGGLE: /* start/stop counter */
|
||||
if(clock_settings.general.show_counter)
|
||||
counter_toggle(&counter);
|
||||
break;
|
||||
|
||||
case ACTION_COUNTER_RESET: /* reset counter */
|
||||
if(clock_settings.general.show_counter)
|
||||
counter_reset(&counter);
|
||||
break;
|
||||
|
||||
case ACTION_MODE_NEXT:
|
||||
clock_settings.mode++;
|
||||
if(clock_settings.mode >= NB_CLOCK_MODES)
|
||||
clock_settings.mode = 0;
|
||||
break;
|
||||
|
||||
case ACTION_MODE_PREV:
|
||||
clock_settings.mode--;
|
||||
if(clock_settings.mode < 0)
|
||||
clock_settings.mode = NB_CLOCK_MODES-1;
|
||||
break;
|
||||
case ACTION_SKIN_PREV:
|
||||
clock_settings_skin_next(&clock_settings);
|
||||
break;
|
||||
case ACTION_SKIN_NEXT:
|
||||
clock_settings_skin_previous(&clock_settings);
|
||||
break;
|
||||
case ACTION_MENU:
|
||||
clock_draw_restore_colors();
|
||||
exit_clock=main_menu();
|
||||
break;
|
||||
|
||||
case ACTION_EXIT:
|
||||
/*clock_draw_restore_colors();
|
||||
exit_clock=main_menu();*/
|
||||
exit_clock=true;
|
||||
break;
|
||||
|
||||
default:
|
||||
redraw=false;
|
||||
if(rb->default_event_handler_ex(button, cleanup, NULL)
|
||||
== SYS_USB_CONNECTED)
|
||||
return PLUGIN_USB_CONNECTED;
|
||||
break;
|
||||
}
|
||||
if(time.second != last_second){
|
||||
last_second=time.second;
|
||||
redraw=true;
|
||||
}
|
||||
if(redraw){
|
||||
clock_draw_set_colors();
|
||||
FOR_NB_SCREENS(i)
|
||||
clock_draw(rb->screens[i], &time, &counter);
|
||||
redraw=false;
|
||||
}
|
||||
}
|
||||
|
||||
cleanup(NULL);
|
||||
return PLUGIN_OK;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue