From 5939b5f6ac3e2afccece4ec5649598d23ae6d98e Mon Sep 17 00:00:00 2001 From: "bernard.xiong" Date: Fri, 8 Jan 2010 00:02:24 +0000 Subject: add more widgets. git-svn-id: https://rt-thread.googlecode.com/svn/trunk@291 bbd45198-f89e-11dd-88c7-29a3b14d5316 --- rtgui/include/rtgui/rtgui_theme.h | 8 ++++++ rtgui/include/rtgui/widgets/checkbox.h | 36 +++++++++++++++++++++++++++ rtgui/include/rtgui/widgets/progressbar.h | 41 +++++++++++++++++++++++++++++++ rtgui/include/rtgui/widgets/radiobox.h | 36 +++++++++++++++++++++++++++ rtgui/include/rtgui/widgets/slider.h | 39 +++++++++++++++++++++++++++++ rtgui/include/rtgui/widgets/staticline.h | 34 +++++++++++++++++++++++++ rtgui/include/rtgui/widgets/textbox.h | 12 +++++---- rtgui/include/rtgui/widgets/widget.h | 6 ++++- 8 files changed, 206 insertions(+), 6 deletions(-) create mode 100644 rtgui/include/rtgui/widgets/checkbox.h create mode 100644 rtgui/include/rtgui/widgets/progressbar.h create mode 100644 rtgui/include/rtgui/widgets/radiobox.h create mode 100644 rtgui/include/rtgui/widgets/slider.h create mode 100644 rtgui/include/rtgui/widgets/staticline.h (limited to 'rtgui/include') diff --git a/rtgui/include/rtgui/rtgui_theme.h b/rtgui/include/rtgui/rtgui_theme.h index 0efde47cad..9f0ddba0e8 100644 --- a/rtgui/include/rtgui/rtgui_theme.h +++ b/rtgui/include/rtgui/rtgui_theme.h @@ -21,6 +21,10 @@ #include #include #include +#include +#include +#include +#include #ifdef __cplusplus extern "C" { @@ -33,6 +37,10 @@ void rtgui_theme_draw_button(rtgui_button_t* btn); void rtgui_theme_draw_label(rtgui_label_t* label); void rtgui_theme_draw_textbox(rtgui_textbox_t* box); void rtgui_theme_draw_iconbox(rtgui_iconbox_t* iconbox); +void rtgui_theme_draw_checkbox(rtgui_checkbox_t* checkbox); +void rtgui_theme_draw_slider(struct rtgui_slider* slider); +void rtgui_theme_draw_progressbar(struct rtgui_progressbar* bar); +void rtgui_theme_draw_staticline(struct rtgui_staticline* staticline); rt_uint16_t rtgui_theme_get_selected_height(void); void rtgui_theme_draw_selected(struct rtgui_dc* dc, rtgui_rect_t *rect); diff --git a/rtgui/include/rtgui/widgets/checkbox.h b/rtgui/include/rtgui/widgets/checkbox.h new file mode 100644 index 0000000000..0498435a4f --- /dev/null +++ b/rtgui/include/rtgui/widgets/checkbox.h @@ -0,0 +1,36 @@ +#ifndef __RTGUI_CHECKBOX_H__ +#define __RTGUI_CHECKBOX_H__ + +#include +#include +#include + +/** Gets the type of a button */ +#define RTGUI_CHECKBOX_TYPE (rtgui_checkbox_type_get()) +/** Casts the object to an rtgui_button */ +#define RTGUI_CHECKBOX(obj) (RTGUI_OBJECT_CAST((obj), RTGUI_CHECKBOX_TYPE, rtgui_checkbox)) +/** Checks if the object is an rtgui_button */ +#define RTGUI_IS_CHECKBOX(obj) (RTGUI_OBJECT_CHECK_TYPE((obj), RTGUI_CHECKBOX_TYPE)) + +#define RTGUI_CHECKBOX_STATUS_CHECKED 0 +#define RTGUI_CHECKBOX_STATUS_UNCHECKED 1 + +struct rtgui_checkbox +{ + /* inherit from label */ + struct rtgui_label parent; + + /* check box status */ + rt_uint8_t status_down; +}; +typedef struct rtgui_checkbox rtgui_checkbox_t; + +rtgui_type_t *rtgui_checkbox_type_get(void); + +rtgui_checkbox_t* rtgui_checkbox_create(unsigned char* text); +void rtgui_checkbox_destroy(rtgui_checkbox_t* checkbox); + +void rtgui_checkbox_ondraw(rtgui_checkbox_t* checkbox); +rt_bool_t rtgui_checkbox_event_handler(struct rtgui_widget* widget, struct rtgui_event* event); + +#endif diff --git a/rtgui/include/rtgui/widgets/progressbar.h b/rtgui/include/rtgui/widgets/progressbar.h new file mode 100644 index 0000000000..cf3c2ce4c5 --- /dev/null +++ b/rtgui/include/rtgui/widgets/progressbar.h @@ -0,0 +1,41 @@ +#ifndef __RTGUI_PROGRESSBAR_H__ +#define __RTGUI_PROGRESSBAR_H__ + +#include +#include + +/** Gets the type of a progressbar */ +#define RTGUI_PROGRESSBAR_TYPE (rtgui_progressbar_type_get()) +/** Casts the object to a rtgui_progressbar */ +#define RTGUI_PROGRESSBAR(obj) (RTGUI_OBJECT_CAST((obj), RTGUI_PROGRESSBAR_TYPE, rtgui_progressbar_t)) +/** Checks if the object is a rtgui_progressbar */ +#define RTGUI_IS_PROGRESSBAR(obj) (RTGUI_OBJECT_CHECK_TYPE((obj), RTGUI_PROGRESSBAR_TYPE)) + +#define DEFAULT_WIDTH 100 +#define DEFAULT_HEIGHT 20 + +struct rtgui_progressbar +{ + struct rtgui_widget parent; + + int orientation; + + int range; + int position; +}; +typedef struct rtgui_progressbar rtgui_progressbar_t; + +rtgui_type_t *rtgui_progressbar_type_get(void); + +struct rtgui_progressbar* rtgui_progressbar_create(int orientation, int range, rtgui_rect_t* r); +void rtgui_progressbar_destroy(struct rtgui_progressbar* p_bar); + +rt_bool_t rtgui_progressbar_event_handler(struct rtgui_widget* widget, + struct rtgui_event* event); + +void rtgui_progressbar_set_value(struct rtgui_progressbar *p_bar, int value); +int rtgui_progressbar_get_value(struct rtgui_progressbar *p_bar); +void rtgui_progressbar_set_range(struct rtgui_progressbar *p_bar, int range); +int rtgui_progressbar_get_range(struct rtgui_progressbar *p_bar); + +#endif diff --git a/rtgui/include/rtgui/widgets/radiobox.h b/rtgui/include/rtgui/widgets/radiobox.h new file mode 100644 index 0000000000..dfd563ff9e --- /dev/null +++ b/rtgui/include/rtgui/widgets/radiobox.h @@ -0,0 +1,36 @@ +#ifndef __RTGUI_RADIOBOX_H__ +#define __RTGUI_RADIOBOX_H__ + +#include +#include + +/** Gets the type of a radiobox */ +#define RTGUI_RADIOBOX_TYPE (rtgui_radiobox_type_get()) +/** Casts the object to an rtgui_radiobox */ +#define RTGUI_SLIDER(obj) (RTGUI_OBJECT_CAST((obj), RTGUI_RADIOBOX_TYPE, rtgui_radiobox_t)) +/** Checks if the object is an rtgui_radiobox */ +#define RTGUI_IS_SLIDER(obj) (RTGUI_OBJECT_CHECK_TYPE((obj), RTGUI_RADIOBOX_TYPE)) + +struct rtgui_radiobox +{ + struct rtgui_widget parent; + + /* widget private data */ + int orient; + + char* items; + int item_count, item_selection; +}; +typedef struct rtgui_radiobox rtgui_radiobox_t; + +rtgui_type_t *rtgui_radiobox_type_get(void); + +struct rtgui_radiobox* rtgui_radiobox_create(int orient, char** radio_items, int number); +void rtgui_radiobox_destroy(struct rtgui_radiobox* radiobox); + +void rtgui_radiobox_set_selection(struct rtgui_radiobox* radiobox, int selection); +int rtgui_radiobox_get_selection(struct rtgui_radiobox* radiobox); + +rt_bool_t rtgui_radiobox_event_handler(struct rtgui_widget* widget, struct rtgui_event* event); + +#endif diff --git a/rtgui/include/rtgui/widgets/slider.h b/rtgui/include/rtgui/widgets/slider.h new file mode 100644 index 0000000000..d657790899 --- /dev/null +++ b/rtgui/include/rtgui/widgets/slider.h @@ -0,0 +1,39 @@ +#ifndef __RTGUI_SLIDER_H__ +#define __RTGUI_SLIDER_H__ + +#include +#include + +/** Gets the type of a slider */ +#define RTGUI_SLIDER_TYPE (rtgui_slider_type_get()) +/** Casts the object to an rtgui_slider */ +#define RTGUI_SLIDER(obj) (RTGUI_OBJECT_CAST((obj), RTGUI_SLIDER_TYPE, rtgui_slider_t)) +/** Checks if the object is an rtgui_slider */ +#define RTGUI_IS_SLIDER(obj) (RTGUI_OBJECT_CHECK_TYPE((obj), RTGUI_SLIDER_TYPE)) + +struct rtgui_slider +{ + struct rtgui_widget parent; + + /* widget private data */ + rt_size_t min, max, value, ticks; + rt_size_t thumb_width; + + int orient; +}; +typedef struct rtgui_slider rtgui_slider_t; + +rtgui_type_t *rtgui_slider_type_get(void); + +struct rtgui_slider* rtgui_slider_create(rt_size_t min, rt_size_t max, int orient); +void rtgui_slider_destroy(struct rtgui_slider* slider); + +rt_bool_t rtgui_slider_event_handler(struct rtgui_widget* widget, struct rtgui_event* event); + +void rtgui_slider_set_range(struct rtgui_slider* slider, rt_size_t min, rt_size_t max); +void rtgui_slider_set_value(struct rtgui_slider* slider, rt_size_t value); +void rtgui_slider_set_orientation(struct rtgui_slider* slider, int orientation); + +rt_size_t rtgui_slider_get_value(struct rtgui_slider* slider); + +#endif diff --git a/rtgui/include/rtgui/widgets/staticline.h b/rtgui/include/rtgui/widgets/staticline.h new file mode 100644 index 0000000000..287f57410e --- /dev/null +++ b/rtgui/include/rtgui/widgets/staticline.h @@ -0,0 +1,34 @@ +#ifndef __RTGUI_STATICLINE__H__ +#define __RTGUI_STATICLINE__H__ + +#include +#include + +/* + * the static line widget + */ + +/** Gets the type of a staticline */ +#define RTGUI_STATICLINE_TYPE (rtgui_staticline_type_get()) +/** Casts the object to an rtgui_staticline */ +#define RTGUI_STATICLINE(obj) (RTGUI_OBJECT_CAST((obj), RTGUI_STATICLINE_TYPE, rtgui_staticline_t)) +/** Checks if the object is an rtgui_staticline */ +#define RTGUI_IS_STATICLINE(obj) (RTGUI_OBJECT_CHECK_TYPE((obj), RTGUI_STATICLINE_TYPE)) + +struct rtgui_staticline +{ + /* inherit from widget */ + struct rtgui_widget parent; + + int orientation; +}; +typedef struct rtgui_staticline rtgui_staticline_t; + +rtgui_staticline_t *rtgui_staticline_create(int orientation); +void rtgui_staticline_destroy(rtgui_staticline_t* staticline); + +rt_bool_t rtgui_staticline_event_handler(struct rtgui_widget* widget, struct rtgui_event* event); +void rtgui_staticline_set_orientation(rtgui_staticline_t* staticline, int orientation); + +#endif + diff --git a/rtgui/include/rtgui/widgets/textbox.h b/rtgui/include/rtgui/widgets/textbox.h index 5ee22ca4d3..95259e9b0e 100644 --- a/rtgui/include/rtgui/widgets/textbox.h +++ b/rtgui/include/rtgui/widgets/textbox.h @@ -27,8 +27,10 @@ #define RTGUI_TEXTBOX_DEFAULT_WIDTH 80 #define RTGUI_TEXTBOX_DEFAULT_HEIGHT 20 -#define RTGUI_TEXTBOX_SINGLE 0x00 -#define RTGUI_TEXTBOX_MULTI 0x00 +#define RTGUI_TEXTBOX_SINGLE 0x00 +#define RTGUI_TEXTBOX_MULTI 0x01 +#define RTGUI_TEXTBOX_CARET_SHOW 0x10 +#define RTGUI_TEXTBOX_CARET_HIDE 0x00 struct rtgui_textbox_line { @@ -42,11 +44,11 @@ struct rtgui_textbox /* inherit from widget */ struct rtgui_widget parent; - /* text box type */ - rt_ubase_t type; + /* text box flag */ + rt_uint8_t flag; /* current line and position */ - rt_size_t line, line_begin, position, line_length; + rt_uint16_t line, line_begin, position, line_length; rt_uint8_t* text; rt_size_t font_width; diff --git a/rtgui/include/rtgui/widgets/widget.h b/rtgui/include/rtgui/widgets/widget.h index 56fbe650d6..8f71629031 100644 --- a/rtgui/include/rtgui/widgets/widget.h +++ b/rtgui/include/rtgui/widgets/widget.h @@ -42,7 +42,7 @@ extern "C" { #define RTGUI_WIDGET_UNFOCUS(w) (w)->flag &= ~RTGUI_WIDGET_FLAG_FOCUS #define RTGUI_WIDGET_FOCUS(w) (w)->flag |= RTGUI_WIDGET_FLAG_FOCUS -#define RTGUI_WIDGET_IS_FOCUS(w) ((w)->flag & RTGUI_WIDGET_FLAG_FOCUS) +#define RTGUI_WIDGET_IS_FOCUSED(w) ((w)->flag & RTGUI_WIDGET_FLAG_FOCUS) #define RTGUI_WIDGET_IS_FOCUSABLE(w) ((w)->flag & RTGUI_WIDGET_FLAG_FOCUSABLE) @@ -195,6 +195,10 @@ void rtgui_widget_show(rtgui_widget_t* widget); void rtgui_widget_hide(rtgui_widget_t* widget); void rtgui_widget_update(rtgui_widget_t* widget); +/* get parent color */ +rtgui_color_t rtgui_widget_get_parent_foreground(rtgui_widget_t* widget); +rtgui_color_t rtgui_widget_get_parent_background(rtgui_widget_t* widget); + /* get the next sibling of widget */ rtgui_widget_t* rtgui_widget_get_next_sibling(rtgui_widget_t* widget); /* get the prev sibling of widget */ -- cgit v1.3.1