summaryrefslogtreecommitdiff
path: root/components/rtgui/widgets/progressbar.c
blob: c140342c72f2c51e6f031bdd7f108643a740e6a1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include <rtgui/dc.h>
#include <rtgui/rtgui_theme.h>
#include <rtgui/widgets/progressbar.h>

#define RTGUI_PROGRESSBAR_DEFAULT_RANGE 100

static void _rtgui_progressbar_constructor(rtgui_progressbar_t *bar)
{
    rtgui_rect_t rect = {0, 0, DEFAULT_WIDTH, DEFAULT_HEIGHT};

    rtgui_object_set_event_handler(RTGUI_OBJECT(bar), rtgui_progressbar_event_handler);
    rtgui_widget_set_rect(RTGUI_WIDGET(bar), &rect);

    bar->orient = RTGUI_HORIZONTAL;
    bar->range = RTGUI_PROGRESSBAR_DEFAULT_RANGE;
    bar->position = 0;

    /* set gc */
    RTGUI_WIDGET_TEXTALIGN(bar) = RTGUI_ALIGN_CENTER_HORIZONTAL | RTGUI_ALIGN_CENTER_VERTICAL;
}

DEFINE_CLASS_TYPE(progressbar, "progressbar",
                  RTGUI_WIDGET_TYPE,
                  _rtgui_progressbar_constructor,
                  RT_NULL,
                  sizeof(struct rtgui_progressbar));

rt_bool_t rtgui_progressbar_event_handler(struct rtgui_object *object,
        struct rtgui_event *event)
{
    struct rtgui_progressbar *bar;
    RTGUI_WIDGET_EVENT_HANDLER_PREPARE

    bar = RTGUI_PROGRESSBAR(object);

    switch (event->type)
    {
    case RTGUI_EVENT_PAINT:
        rtgui_theme_draw_progressbar(bar);
        break;
    default:
        return rtgui_widget_event_handler(object, event);
    }

    return RT_FALSE;
}

struct rtgui_progressbar *rtgui_progressbar_create(int orientation, int range,
        rtgui_rect_t *r)
{
    struct rtgui_progressbar *bar;

    bar = (struct rtgui_progressbar *) rtgui_widget_create(RTGUI_PROGRESSBAR_TYPE);
    if (bar != RT_NULL)
    {
        if (r != RT_NULL)
            rtgui_widget_set_rect(RTGUI_WIDGET(bar), r);

        bar->orient = orientation;
        bar->range = range;
    }

    return bar;
}

void rtgui_progressbar_destroy(struct rtgui_progressbar *bar)
{
    rtgui_widget_destroy(RTGUI_WIDGET(bar));
}

void rtgui_progressbar_set_value(struct rtgui_progressbar *bar, int value)
{
    RT_ASSERT(bar != RT_NULL);

    if (!RTGUI_WIDGET_IS_ENABLE(bar)) return;

    bar->position = value;

    rtgui_theme_draw_progressbar(bar);
    return;
}

int rtgui_progressbar_get_value(struct rtgui_progressbar *bar)
{
    RT_ASSERT(bar != RT_NULL);

    return bar->position;
}

void rtgui_progressbar_set_range(struct rtgui_progressbar *bar, int range)
{
    RT_ASSERT(bar != RT_NULL);

    bar->range = range;

    rtgui_theme_draw_progressbar(bar);
    return;
}

int rtgui_progressbar_get_range(struct rtgui_progressbar *bar)
{
    RT_ASSERT(bar != RT_NULL);

    return bar->range;
}