diff options
Diffstat (limited to 'include/gwin/checkbox.h')
-rw-r--r-- | include/gwin/checkbox.h | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/include/gwin/checkbox.h b/include/gwin/checkbox.h new file mode 100644 index 00000000..84ecd65a --- /dev/null +++ b/include/gwin/checkbox.h @@ -0,0 +1,177 @@ +/* + * This file is subject to the terms of the GFX License, v1.0. If a copy of + * the license was not distributed with this file, you can obtain one at: + * + * http://chibios-gfx.com/license.html + */ + +/** + * @file include/gwin/checkbox.h + * @brief GWIN Graphic window subsystem header file. + * + * @defgroup Checkbox Checkbox + * @ingroup GWIN + * + * @details GWIN allows it to easily create a group of checkbox buttons. + * + * @pre GFX_USE_GWIN must be set to TRUE in your gfxconf.h + * @pre GWIN_NEED_CHECKBOX must be set to TRUE in your gfxconf.h + * @{ + */ + +#ifndef _GWIN_CHECKBOX_H +#define _GWIN_CHECKBOX_H + +#if GWIN_NEED_CHECKBOX || defined(__DOXYGEN__) + +/*===========================================================================*/ +/* Driver constants. */ +/*===========================================================================*/ + +#define GW_CHECKBOX 0x0005 +#define GEVENT_GWIN_CHECKBOX (GEVENT_GWIN_FIRST+2) + +/*===========================================================================*/ +/* Type definitions */ +/*===========================================================================*/ + +typedef struct GEventGWinCheckbox_t { + GEventType type; // The type of this event (GEVENT_GWIN_CHECKBOX) + GHandle checkbox; // The checkbox that has been depressed (actually triggered on release) + bool_t state; // The state of the checkbox (selected or unselected) +} GEventGWinCheckbox; + +typedef enum GCheckboxShape_e { + GCHBX_NORMAL, GCKBX_CUSTOM +} GCheckboxShape; + +typedef enum GCheckboxState_e { + GCHBX_SET, GCHBX_UNSET +} GCheckboxState; + +typedef struct GCheckboxDrawStyle_t { + color_t color; +} GCheckboxDrawStyle; + +/* custom rendering interface */ +typedef void (*GCheckboxDrawFunction)(GHandle gh, bool_t enabled, bool_t state, void* param); + +/* A Checkbox window */ +typedef struct GCheckboxObject_t { + GWindowObject gwin; + GListener listener; + + GCheckboxDrawFunction fn; + GCheckboxDrawStyle set; + GCheckboxDrawStyle unset; + bool_t state; + void *param; +} GCheckboxObject; + +/** + * @brief Create a checkbox window. + * + * @param[in] gb The GCheckboxObject structure to initialise. If this is NULL, the structure is dynamically allocated. + * @param[in] x,y The screen co-ordinates for the bottom left corner of the window + * @param[in] width The width of the window + * @param[in] height The height of the window + * + * @note The checkbox is not automatically drawn. Call gwinCheckboxDraw() after changing the checkbox style. + * + * @return NULL if there is no resultant drawing area, otherwise a window handle. + * + * @api + */ +GHandle gwinCheckboxCreate(GCheckboxObject *gb, coord_t x, coord_t y, coord_t width, coord_t height); + +/** + * @brief Redraw a checkbox + * + * @param[in] gh The window handle (must be a checkbox window) + * + * @api + */ +void gwinCheckboxDraw(GHandle gh); + +/** + * @brief Enable or disable a button + * + * @param[in] gh The window handle (must be a checkbox window) + * @param[in] enabled Enable or disable the button + * + * @api + */ +void gwinCheckboxSetEnabled(GHandle gh, bool_t enabled); + +/** + * @brief Enable a checkbox + * + * @api + */ +#define gwinCheckboxEnable(gh) gwinCheckboxSetEnabled( ((GCheckboxObject *)(gh)), TRUE) + +/** + * @brief Disable a checkbox + * + * @api +*/ +#define gwinCheckboxDisable(gh) gwinCheckboxSetEnabled( ((GCheckboxObject *)(gh)), FALSE) + +/** + * @brief Get the state of a checkbox + * + * @param[in] gh The window handle (must be a checkbox window) + * + * @return The state of the checkbox (GCHBX_SET or GCHBX_UNSET) + * + * @api + */ +#define gwinCheckboxGetState(gh) (((GCheckboxObject *)(gh))->state) + +/** + * @brief Get the source handle of a checkbox + * @details Get the source handle of a checkbox so the application can listen for events + * + * @param[in] gh The window handle (must be a checkbox window) + * + * @api + */ +#define gwinCheckboxGetSource(gh) ((GSourceHandle)(gh)) + +#if GFX_USE_GINPUT && GINPUT_NEED_MOUSE + /** + * @brief Attach a mouse to a checkbox + * + * @param[in] gh The checkbox handle + * @param[in] instance The mouse instance + * + * @api + */ + bool_t gwinCheckboxAttachMouse(GHandle gh, uint16_t instance); +#endif + +/** + * @brief Standard checkbox drawing routines + * @details These routines are called to draw the standard checkbox styles. + * + * @param[in] gh The checkbox handle + * @param[in] enabled Is the checkbox currently enabled or disabled + * @param[in] state Is the checkbox currently set or unset + * @param[in] param A parameter passed from the user + * + * @note In your custom checkbox drawing function, you may optionally call these + * standard functions and then draw your extra details on top. + * @note The standard functions below ignore the param parameter. It is there only + * to ensure the functions match the GCheckboxDrawFunction type. + * + * @api + * @{ + */ +void gwinCheckboxDraw_Normal(GHandle gh, bool_t enabled, bool_t state, void *param); +/** @} */ + +#endif /* _GWIN_NEED_CHECKBOX */ + +#endif /* _GWIN_CHECKBOX_H */ +/** @} */ + |