From e55dc82402d200c735c875975e2d1068a8193d90 Mon Sep 17 00:00:00 2001 From: marschap Date: Thu, 4 Oct 2007 17:15:41 +0000 Subject: [PATCH] allow wrapping slider menu items with <= 4 keys (M. Dolze) --- ChangeLog | 4 +++- server/menuitem.c | 15 +++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index b48ecd3..80e5cfb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -12,7 +12,7 @@ v.0.5dev (ongoing development) * glk driver: bignum support fixed * update local snprintf to the last one, which is GPL - server core: cleanup - remove unnecessary cruft - * server core: refactor renderin code + * server core: refactor rendering code + LCDd: config options TitleSpeed= and Heartbeat= * overhauled CwLnx driver (Dave Platt) * overhauled picolcd driver (Nicu Pavel) @@ -27,6 +27,8 @@ v.0.5dev (ongoing development) + key support for hd44780/lcd2usb (M. Dolze) + option Priority for NoritakeVFD (idea: Richard Muratti) * overhauled NoritakeVFD driver (idea: Richard Muratti) + * allow wrapping slider menu items with <= 4 keys (M. Dolze) + * a bit more Doxygen-ation v.0.5.2 * fix switching on/off the Load screen in lcdproc client using the menu diff --git a/server/menuitem.c b/server/menuitem.c index e2001d8..aa45e07 100644 --- a/server/menuitem.c +++ b/server/menuitem.c @@ -991,14 +991,25 @@ MenuResult menuitem_process_input_slider(MenuItem *item, MenuToken token, const item->successor_id, MENURESULT_CLOSE); case MENUTOKEN_UP: case MENUTOKEN_RIGHT: - item->data.slider.value = min(item->data.slider.maxvalue, + /* Wrap slider around if max value is reached. + * Note: The max value is actually reached, + * because of min(maxvalue, value + stepsize) below. + * Wrapping then happens on the next key press. + */ + if ((!extended) && (item->data.slider.value == item->data.slider.maxvalue)) + item->data.slider.value = item->data.slider.minvalue; + else + item->data.slider.value = min(item->data.slider.maxvalue, item->data.slider.value + item->data.slider.stepsize); if (item->event_func) item->event_func(item, MENUEVENT_PLUS); return MENURESULT_NONE; case MENUTOKEN_DOWN: case MENUTOKEN_LEFT: - item->data.slider.value = max(item->data.slider.minvalue, + if ((!extended) && item->data.slider.value == item->data.slider.minvalue)) + item->data.slider.value = item->data.slider.maxvalue; + else + item->data.slider.value = max(item->data.slider.minvalue, item->data.slider.value - item->data.slider.stepsize); if (item->event_func) item->event_func(item, MENUEVENT_MINUS);