aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorJoel Bodenmann <joel@unormal.org>2013-06-02 06:13:28 +0200
committerJoel Bodenmann <joel@unormal.org>2013-06-02 06:13:28 +0200
commitd0f5d9c7f9b8e0901d82fabb0210231f53734a70 (patch)
tree10c6c4fa278b55b1b304a6fed01b2e1f1319e968 /include
parente12a213ff1d02a2f56b7d21208e3a30329605bc1 (diff)
downloaduGFX-d0f5d9c7f9b8e0901d82fabb0210231f53734a70.tar.gz
uGFX-d0f5d9c7f9b8e0901d82fabb0210231f53734a70.tar.bz2
uGFX-d0f5d9c7f9b8e0901d82fabb0210231f53734a70.zip
added basic implementation of checkboxes (functional)
Diffstat (limited to 'include')
-rw-r--r--include/gwin/checkbox.h177
-rw-r--r--include/gwin/gwin.h9
2 files changed, 182 insertions, 4 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 */
+/** @} */
+
diff --git a/include/gwin/gwin.h b/include/gwin/gwin.h
index 710c86ba..6441e5f8 100644
--- a/include/gwin/gwin.h
+++ b/include/gwin/gwin.h
@@ -539,10 +539,11 @@ void gwinBlitArea(GHandle gh, coord_t x, coord_t y, coord_t cx, coord_t cy, coor
#endif
/* Include extra window types */
-#include "gwin/console.h"
-#include "gwin/button.h"
-#include "gwin/graph.h"
-#include "gwin/slider.h"
+#include "gwin/console.h" /* 0x0001 */
+#include "gwin/button.h" /* 0x0002 */
+#include "gwin/graph.h" /* 0x0003 */
+#include "gwin/slider.h" /* 0x0004 */
+#include "gwin/checkbox.h" /* 0x0005 */
#endif /* GFX_USE_GWIN */