diff options
author | inmarket <andrewh@inmarket.com.au> | 2015-01-03 18:46:46 +1000 |
---|---|---|
committer | inmarket <andrewh@inmarket.com.au> | 2015-01-03 18:46:46 +1000 |
commit | 128a3b972cc50b084415b5fb69fc355fe5db9520 (patch) | |
tree | 0b619a2704bacc0020acfe15939e9c4c4365e524 /src/gwin/gwin_tabset.h | |
parent | bc9d3a1305905abe56933fb68cd9fb2062861f73 (diff) | |
download | uGFX-128a3b972cc50b084415b5fb69fc355fe5db9520.tar.gz uGFX-128a3b972cc50b084415b5fb69fc355fe5db9520.tar.bz2 uGFX-128a3b972cc50b084415b5fb69fc355fe5db9520.zip |
New Tabset Widget.
Widgets demo updated to (optionally) use the new tabset.
Diffstat (limited to 'src/gwin/gwin_tabset.h')
-rw-r--r-- | src/gwin/gwin_tabset.h | 206 |
1 files changed, 206 insertions, 0 deletions
diff --git a/src/gwin/gwin_tabset.h b/src/gwin/gwin_tabset.h new file mode 100644 index 00000000..f1d98adb --- /dev/null +++ b/src/gwin/gwin_tabset.h @@ -0,0 +1,206 @@ +/* + * 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 src/gwin/gwin_tabset.h + * @brief GWIN Graphic window subsystem header file. + * + * @defgroup Tabset Tabset + * @ingroup Containers + * + * @details A tabset is a set of tabs that control visibility of a number of pages of widgets. + * Note: Although the tabset is implemented as a container - you don't put your controls + * directly on the tabset. Instead you create a page and put your widgets on the page. + * + * @pre GFX_USE_GWIN must be set to TRUE in your gfxconf.h + * @pre GWIN_NEED_TABSET must be set to TRUE in your gfxconf.h + * @{ + */ + +#ifndef _GWIN_TABSET_H +#define _GWIN_TABSET_H + +/* This file is included from src/gwin/gwin_container.h */ + +/** + * @brief The Event Type for a Tabset Event + */ +#define GEVENT_GWIN_TABSET (GEVENT_GWIN_CTRL_FIRST+5) + +/** + * @brief A Tabset Event + * @note There are currently no GEventGWinTabset listening flags - use 0 as the flags to @p gwinAttachListener() + */ +typedef struct GEventGWinTabset { + GEventType type; // The type of this event (GEVENT_GWIN_TABSET) + GHandle gwin; // The tabset window handle + #if GWIN_NEED_WIDGET && GWIN_WIDGET_TAGS + WidgetTag tag; // The tag of the tabset + #endif + // Above are the generic widget event elements, below the tabset specific elements + GHandle ghPage; // The tabpage window handle that has been selected + int nPage; // The page number (0 to n-1) that has been selected + } GEventGWinTabset; + +/** + * @brief Flags for gwinTabsetCreate() + * @{ + */ +#define GWIN_TABSET_BORDER 0x00000001 // Should the tab pages have a border? +/** @} */ + +typedef struct GTabsetObject { + GContainerObject c; + coord_t border_top; + } GTabsetObject; + +#ifdef __cplusplus +extern "C" { +#endif + + /** + * @brief Create a tabset widget + * + * @details This widget provides a set of tabs. + * + * @param[in] g The GDisplay to display this window on + * @param[in] fo The GTabsetObject structure to initialize. If this is NULL the structure is dynamically allocated. + * @param[in] pInit The initialization parameters + * @param[in] flags Some flags, see notes. + * + * @note Possible flags are: GWIN_TABSET_BORDER + * + * @return NULL if there is no resulting widget. A valid GHandle otherwise. + * + * @api + */ + GHandle gwinGTabsetCreate(GDisplay *g, GTabsetObject *fo, GWidgetInit *pInit, uint32_t flags); + #define gwinTabsetCreate(fo, pInit, flags) gwinGTabsetCreate(GDISP, fo, pInit, flags); + + /** + * @brief Add a tab-page to the tabset + * @returns The GHandle of the tab-page container. + * + * @param[in] gh The tabset handle + * @param[in] title The text to set. This must be a constant string unless useAlloc is set. + * @param[in] useAlloc If TRUE the string specified will be copied into dynamically allocated memory. + * + * @api + */ + GHandle gwinTabsetAddTab(GHandle gh, const char *title, bool_t useAlloc); + + /** + * @brief Delete a tab-page. + * @details Any widgets on the page will also be destroyed + * + * @param[in] gh The tab-page handle + * + * @note The index position of all tabs after this tab in the tabset are automatically renumbered. + * + * @api + */ + #define gwinTabsetDeleteTab(gh) gwinDestroy(gh) + + /** + * @brief Count the number of tabs in the tabset + * @returns The number of tabs or zero if none exist. + * + * @param[in] gh The tabset handle + * + * @api + */ + int gwinTabsetCountTabs(GHandle gh); + + /** + * @brief Get the GHandle of a tab based on its position + * @returns The GHandle of the tab-page container or NULL if that tab-page doesn't exist. + * + * @param[in] gh The tabset handle + * @param[in] index The tab-page handle to return (0 to number of pages - 1) + * + * @api + */ + GHandle gwinTabsetGetTabByIndex(GHandle gh, int index); + + /** + * @brief Get the GHandle of a tab based on its title + * @returns The GHandle of the tab-page container or NULL if that tab-page doesn't exist. + * + * @param[in] gh The tabset handle + * @param[in] title The title to search for + * + * @api + */ + GHandle gwinTabsetGetTabByTitle(GHandle gh, const char *title); + + /** + * @brief Set the title of a tab-page. + * + * @param[in] gh The tab-page handle (NB: Use the page handle NOT the tabset handle) + * @param[in] title The text to set. This must be a constant string unless useAlloc is set. + * @param[in] useAlloc If TRUE the string specified will be copied into dynamically allocated memory. + * + * @note This function should be used to change the text associated with a tab-page + * rather than @p gwinSetText(). + * + * @api + */ + void gwinTabsetSetTitle(GHandle gh, const char *title, bool_t useAlloc); + + /** + * @brief Get the title of a tab-page. + * @return The title of the tab. + * + * @param[in] gh The tab-page handle (NB: Use the page handle NOT the tabset handle) + * + * @api + */ + #define gwinTabsetGetTitle(gh) gwinGetText(gh) + + /** + * @brief Set the active tab in a tabset. + * + * @param[in] gh The tab-page handle (NB: Use the page handle NOT the tabset handle) + * + * @api + */ + void gwinTabsetSetTab(GHandle gh); + + /** + * @brief The custom draw routines for a frame window + * @details These function may be passed to @p gwinSetCustomDraw() to get different frame drawing styles + * + * @param[in] gw The widget object (in this case a frame) + * @param[in] param A parameter passed in from the user + * + * @note In your own custom drawing function you may optionally call these + * standard functions and then draw your extra details on top. + * + * @note gwinTabsetDraw_Std() will fill the client area with the background color.<br/> + * gwinTabsetDraw_Transparent() will not fill the client area at all.<br/> + * gwinTabsetDraw_Image() will tile the image throughout the client area.<br/> + * All these drawing functions draw the frame itself the same way. + * + * @note The standard functions below ignore the param parameter except for @p gwinTabsetDraw_Image(). + * @note The image custom draw function @p gwinTabsetDraw_Image() uses param to pass in the gdispImage pointer. + * The image must be already opened before calling @p gwinSetCustomDraw(). + * + * @api + * @{ + */ + void gwinTabsetDraw_Std(GWidgetObject *gw, void *param); + void gwinTabsetDraw_Transparent(GWidgetObject *gw, void *param); + void gwinTabsetDraw_Image(GWidgetObject *gw, void *param); + /** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* _GWIN_TABSET_H */ +/** @} */ + |