/* * 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 checkboxes. * * @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 isChecked; // Is the checkbox currently checked or unchecked? } GEventGWinCheckbox; typedef enum GCheckboxState_e { GCHBX_UNCHECKED, GCHBX_CHECKED } GCheckboxState; typedef struct GCheckboxColor_t { color_t border; color_t checked; color_t bg; } GCheckboxColor; /* 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; GCheckboxColor *colors; bool_t isChecked; 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 Set the callback routine to perform a custom drawing. * * @param[in] gh The window handle (must be a checkbox window) * @param[in] fn The function to use to draw the checkbox * @param[in] param A parameter to pass to the checkbox drawing function * * @api */ void gwinCheckboxSetCustom(GHandle gh, GCheckboxDrawFunction fn, void *param); /** * @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_CHECKED or GCHBX_UNCHECKED) * * @api */ #define gwinCheckboxGetState(gh) (((GCheckboxObject *)(gh))->isChecked) /** * @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 /* GFX_USE_GINPUT && GINPUT_NEED_MOUSE */ #endif /* _GWIN_NEED_CHECKBOX */ #endif /* _GWIN_CHECKBOX_H */ /** @} */