From 3a08f65cfcd884b454e835e6319d949e51e0b428 Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Sat, 18 Jan 2014 20:28:28 +0100 Subject: [PATCH] initial work on GGroup --- include/gwin/ggroup.h | 46 +++++++++++++++++++++++++++++++++++++++++++ include/gwin/gwin.h | 9 +++++++-- src/gwin/ggroup.c | 26 ++++++++++++++++++++++++ 3 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 include/gwin/ggroup.h create mode 100644 src/gwin/ggroup.c diff --git a/include/gwin/ggroup.h b/include/gwin/ggroup.h new file mode 100644 index 00000000..b58f415b --- /dev/null +++ b/include/gwin/ggroup.h @@ -0,0 +1,46 @@ +/* + * This file is subject to the terms of the GFX License. If a copy of + * the license was not distributed with this file, you can obtain one at: + * + * http://ugfx.org/license.html + */ + +/** + * @file include/gwin/ggroup.h + * @brief GWIN Widgets header file. + */ + +#ifndef _GGROUP_H +#define _GGROUP_H + +/* This file is included within "gwin/gwin.h" */ + +/** + * @defgroup Widget Widget + * @ingroup GWIN + * + * @details Groups provide parent/child relation features and dynamic layouts. + * + * @pre GFX_NEED_GWIN needs to be set to TRUE in your gfxconf.h. + * @pre GWIN_NEED_GROUPS needs to be set to TRUE in your gfxconf.h. + * + * @{ + */ + +/** + * @brief A group object structure + * @note Do not access the members directly. Treat it as a black-box and use the method functions. + * @{ + */ +typedef struct GGroupObject { + GWindowObject g; + + GHandle parent; // @< The parent widget + GHandle sibling; // @< The widget to its left (add right later as well) + GHandle child; // @< The child widget +} GGroupObject; +/** @} */ + + +#endif /* _GGROUP_H */ + diff --git a/include/gwin/gwin.h b/include/gwin/gwin.h index e74927ae..8e570229 100644 --- a/include/gwin/gwin.h +++ b/include/gwin/gwin.h @@ -55,7 +55,7 @@ typedef struct GWindowObject { GHandle child; // @< The child widget #endif } GWindowObject, * GHandle; -/* @} */ +/** @} */ /** * @brief The structure to initialise a GWIN. @@ -70,7 +70,7 @@ typedef struct GWindowInit { coord_t width, height; // @< The initial dimension bool_t show; // @< Should the window be visible initially } GWindowInit; -/* @} */ +/** @} */ /** * @brief A window's minimized, maximized or normal size @@ -906,6 +906,11 @@ extern "C" { * Additional functionality *-------------------------------------------------*/ + /* Include groups */ + #if GWIN_NEED_GROUPS || defined(__DOXYGEN__) + #include "gwin/ggroup.h" + #endif + /* Include widgets */ #if GWIN_NEED_WIDGET || defined(__DOXYGEN__) #include "gwin/gwidget.h" diff --git a/src/gwin/ggroup.c b/src/gwin/ggroup.c new file mode 100644 index 00000000..3bfefe38 --- /dev/null +++ b/src/gwin/ggroup.c @@ -0,0 +1,26 @@ +/* + * This file is subject to the terms of the GFX License. If a copy of + * the license was not distributed with this file, you can obtain one at: + * + * http://ugfx.org/license.html + */ + +#include "gfx.h" + +#if GFX_USE_GWIN && GWIN_NEED_GROUPS + +#include "gwin/class_gwin.h" + +GHandle _ggroupCreate(GDisplay *g, GGroupObject *go, const GGroupInit *pInit) { + if (!(go = (GGroupObject *)_gwindowCreate(g, &go->g, &pInit->g, &vmt->g, GWIN_FLG_GROUP|GWIN_FLG_ENABLED))) + return NULL; + + go->parent = NULL; + go->sibling = NULL; + go->child = NULL; + + return &go->g; +} + +#endif /* GFX_USE_GWIN && GWIN_NEED_GROUPS */ +