summaryrefslogtreecommitdiff
path: root/components/rtgui/widgets/listctrl.c
diff options
context:
space:
mode:
author[email protected] <[email protected]>2012-12-14 03:34:24 +0000
committer[email protected] <[email protected]>2012-12-14 03:34:24 +0000
commit601eb6fe70aa10e4bf62f7a68915dc1ad7b37553 (patch)
tree129551544b46d6005dfdab4d4d9b09648114df15 /components/rtgui/widgets/listctrl.c
parent5927bf0ac16df159910058ceffc798d07cbdc973 (diff)
sync RTGUI with github(https://github.com/RT-Thread/RTGUI) c4b8c0ac2a3de482357b88d584931831aed7c8ae
As always, full log is in GitHub. git-svn-id: https://rt-thread.googlecode.com/svn/trunk@2481 bbd45198-f89e-11dd-88c7-29a3b14d5316
Diffstat (limited to 'components/rtgui/widgets/listctrl.c')
-rw-r--r--components/rtgui/widgets/listctrl.c61
1 files changed, 23 insertions, 38 deletions
diff --git a/components/rtgui/widgets/listctrl.c b/components/rtgui/widgets/listctrl.c
index 8c6409c084..ee74bb2615 100644
--- a/components/rtgui/widgets/listctrl.c
+++ b/components/rtgui/widgets/listctrl.c
@@ -105,16 +105,18 @@ static void _rtgui_listctrl_scrollbar_onmouse(struct rtgui_listctrl *ctrl, struc
if (mouse->y < rect.y1)
{
if (ctrl->current_item - ctrl->page_items >= 0)
- ctrl->current_item -= ctrl->page_items;
- rtgui_listctrl_update_current(ctrl, old_item);
+ rtgui_listctrl_set_current_item(ctrl, ctrl->current_item - ctrl->page_items);
+ else
+ rtgui_listctrl_update_current(ctrl, old_item);
}
else if (mouse->y > rect.y2)
{
+ rt_uint16_t new_item;
if (ctrl->current_item + ctrl->page_items < ctrl->items_count - 1)
- ctrl->current_item += ctrl->page_items;
+ new_item = ctrl->current_item + ctrl->page_items;
else
- ctrl->current_item = ((ctrl->current_item / ctrl->page_items) + 1) * ctrl->page_items;
- rtgui_listctrl_update_current(ctrl, old_item);
+ new_item = ((ctrl->current_item / ctrl->page_items) + 1) * ctrl->page_items;
+ rtgui_listctrl_set_current_item(ctrl, new_item);
}
}
@@ -166,7 +168,7 @@ static void _rtgui_listctrl_ondraw(struct rtgui_listctrl *ctrl)
rtgui_dc_end_drawing(dc);
}
-void rtgui_listctrl_update_current(struct rtgui_listctrl *ctrl, rt_uint16_t old_item)
+static void rtgui_listctrl_update_current(struct rtgui_listctrl *ctrl, rt_uint16_t old_item)
{
struct rtgui_dc *dc;
rtgui_rect_t rect, item_rect;
@@ -214,7 +216,6 @@ void rtgui_listctrl_update_current(struct rtgui_listctrl *ctrl, rt_uint16_t old_
rtgui_dc_end_drawing(dc);
}
-RTM_EXPORT(rtgui_listctrl_update_current);
rt_bool_t rtgui_listctrl_event_handler(struct rtgui_object *object, struct rtgui_event *event)
{
@@ -288,24 +289,10 @@ rt_bool_t rtgui_listctrl_event_handler(struct rtgui_object *object, struct rtgui
if ((index < ctrl->page_items) &&
(ctrl->current_item / ctrl->page_items)* ctrl->page_items + index < ctrl->items_count)
{
- rt_uint16_t old_item;
-
- old_item = ctrl->current_item;
-
- /* set selected item */
- ctrl->current_item = (ctrl->current_item / ctrl->page_items) * ctrl->page_items + index;
if (emouse->button & RTGUI_MOUSE_BUTTON_DOWN)
{
- /* down event */
- rtgui_listctrl_update_current(ctrl, old_item);
- }
- else
- {
- /* up event */
- if (ctrl->on_item != RT_NULL)
- {
- ctrl->on_item(RTGUI_OBJECT(ctrl), RT_NULL);
- }
+ rtgui_listctrl_set_current_item(ctrl,
+ (ctrl->current_item / ctrl->page_items) * ctrl->page_items + index);
}
}
}
@@ -318,38 +305,36 @@ rt_bool_t rtgui_listctrl_event_handler(struct rtgui_object *object, struct rtgui
struct rtgui_event_kbd *ekbd = (struct rtgui_event_kbd *)event;
if ((ekbd->type == RTGUI_KEYDOWN) && (ctrl->items_count > 0))
{
- rt_uint16_t old_item;
-
- old_item = ctrl->current_item;
switch (ekbd->key)
{
case RTGUIK_LEFT:
if (ctrl->current_item - ctrl->page_items >= 0)
- ctrl->current_item -= ctrl->page_items;
- rtgui_listctrl_update_current(ctrl, old_item);
+ rtgui_listctrl_set_current_item(ctrl, ctrl->current_item - ctrl->page_items);
return RT_TRUE;
case RTGUIK_UP:
if (ctrl->current_item > 0)
- ctrl->current_item --;
- rtgui_listctrl_update_current(ctrl, old_item);
+ rtgui_listctrl_set_current_item(ctrl, ctrl->current_item-1);
return RT_TRUE;
case RTGUIK_RIGHT:
- if (ctrl->current_item + ctrl->page_items < ctrl->items_count - 1)
- ctrl->current_item += ctrl->page_items;
- else
{
- if ((((ctrl->current_item / ctrl->page_items) + 1) * ctrl->page_items) < ctrl->items_count - 1)
- ctrl->current_item = ((ctrl->current_item / ctrl->page_items) + 1) * ctrl->page_items;
+ rt_uint16_t new_item = ctrl->items_count;
+ if (ctrl->current_item + ctrl->page_items < ctrl->items_count - 1)
+ new_item = ctrl->current_item + ctrl->page_items;
+ else
+ {
+ if ((((ctrl->current_item / ctrl->page_items) + 1) * ctrl->page_items)
+ < ctrl->items_count - 1)
+ new_item = ((ctrl->current_item / ctrl->page_items) + 1) * ctrl->page_items;
+ }
+ rtgui_listctrl_set_current_item(ctrl, new_item);
}
- rtgui_listctrl_update_current(ctrl, old_item);
return RT_TRUE;
case RTGUIK_DOWN:
if (ctrl->current_item < ctrl->items_count - 1)
- ctrl->current_item ++;
- rtgui_listctrl_update_current(ctrl, old_item);
+ rtgui_listctrl_set_current_item(ctrl, ctrl->current_item+1);
return RT_TRUE;
case RTGUIK_RETURN: