aboutsummaryrefslogtreecommitdiffstats
path: root/demos/modules
diff options
context:
space:
mode:
Diffstat (limited to 'demos/modules')
-rw-r--r--demos/modules/gwin/container_nested/demo.mk3
-rw-r--r--demos/modules/gwin/container_nested/gfxconf.h88
-rw-r--r--demos/modules/gwin/container_nested/main.c158
3 files changed, 249 insertions, 0 deletions
diff --git a/demos/modules/gwin/container_nested/demo.mk b/demos/modules/gwin/container_nested/demo.mk
new file mode 100644
index 00000000..a587383a
--- /dev/null
+++ b/demos/modules/gwin/container_nested/demo.mk
@@ -0,0 +1,3 @@
+DEMODIR = $(GFXLIB)/demos/modules/gwin/container_nested
+GFXINC += $(DEMODIR)
+GFXSRC += $(DEMODIR)/main.c
diff --git a/demos/modules/gwin/container_nested/gfxconf.h b/demos/modules/gwin/container_nested/gfxconf.h
new file mode 100644
index 00000000..ef2ff2bc
--- /dev/null
+++ b/demos/modules/gwin/container_nested/gfxconf.h
@@ -0,0 +1,88 @@
+/**
+ * This file has a different license to the rest of the uGFX system.
+ * You can copy, modify and distribute this file as you see fit.
+ * You do not need to publish your source modifications to this file.
+ * The only thing you are not permitted to do is to relicense it
+ * under a different license.
+ */
+
+/**
+ * Copy this file into your project directory and rename it as gfxconf.h
+ * Edit your copy to turn on the uGFX features you want to use.
+ * The values below are the defaults. You should delete anything
+ * you are leaving as default.
+ *
+ * Please use spaces instead of tabs in this file.
+ */
+
+#ifndef _GFXCONF_H
+#define _GFXCONF_H
+
+/* The operating system to use. One of these must be defined - preferably in your Makefile */
+//#define GFX_USE_OS_CHIBIOS TRUE
+//#define GFX_USE_OS_WIN32 TRUE
+//#define GFX_USE_OS_LINUX TRUE
+//#define GFX_USE_OS_OSX TRUE
+
+
+///////////////////////////////////////////////////////////////////////////
+// GDISP //
+///////////////////////////////////////////////////////////////////////////
+#define GFX_USE_GDISP TRUE
+
+#define GDISP_NEED_VALIDATION TRUE
+#define GDISP_NEED_CLIP TRUE
+#define GDISP_NEED_TEXT TRUE
+ #define GDISP_INCLUDE_FONT_UI2 TRUE
+#define GDISP_NEED_MULTITHREAD TRUE
+
+
+///////////////////////////////////////////////////////////////////////////
+// GWIN //
+///////////////////////////////////////////////////////////////////////////
+#define GFX_USE_GWIN TRUE
+
+#define GWIN_NEED_WINDOWMANAGER TRUE
+
+#define GWIN_NEED_CONSOLE TRUE
+ #define GWIN_CONSOLE_USE_HISTORY TRUE
+ #define GWIN_CONSOLE_HISTORY_AVERAGING TRUE
+ #define GWIN_CONSOLE_HISTORY_ATCREATE TRUE
+ #define GWIN_CONSOLE_ESCSEQ TRUE
+ #define GWIN_CONSOLE_USE_BASESTREAM TRUE
+#define GWIN_NEED_GRAPH TRUE
+
+#define GWIN_NEED_WIDGET TRUE
+ #define GWIN_NEED_BUTTON TRUE
+ #define GWIN_BUTTON_LAZY_RELEASE TRUE
+ #define GWIN_NEED_CHECKBOX TRUE
+#define GWIN_NEED_CONTAINERS TRUE
+ #define GWIN_NEED_CONTAINER TRUE
+
+
+///////////////////////////////////////////////////////////////////////////
+// GEVENT //
+///////////////////////////////////////////////////////////////////////////
+#define GFX_USE_GEVENT TRUE
+
+///////////////////////////////////////////////////////////////////////////
+// GTIMER //
+///////////////////////////////////////////////////////////////////////////
+#define GFX_USE_GTIMER TRUE
+
+///////////////////////////////////////////////////////////////////////////
+// GQUEUE //
+///////////////////////////////////////////////////////////////////////////
+#define GFX_USE_GQUEUE TRUE
+
+#define GQUEUE_NEED_ASYNC TRUE
+#define GQUEUE_NEED_GSYNC TRUE
+
+///////////////////////////////////////////////////////////////////////////
+// GINPUT //
+///////////////////////////////////////////////////////////////////////////
+#define GFX_USE_GINPUT TRUE
+
+#define GINPUT_NEED_MOUSE TRUE
+
+#endif /* _GFXCONF_H */
diff --git a/demos/modules/gwin/container_nested/main.c b/demos/modules/gwin/container_nested/main.c
new file mode 100644
index 00000000..94285afa
--- /dev/null
+++ b/demos/modules/gwin/container_nested/main.c
@@ -0,0 +1,158 @@
+#include "gfx.h"
+
+static GListener gl;
+static GHandle ghContainer1, ghContainer2, ghContainer3;
+static GHandle ghButton1, ghButton2, ghButton3, ghButton4;
+static GHandle ghCheckbox1, ghCheckbox2, ghCheckbox3;
+
+static void createWidgets(void) {
+ GWidgetInit wi;
+
+ // Apply some default values for GWIN
+ gwinWidgetClearInit(&wi);
+ wi.g.show = FALSE;
+
+ // Container 1
+ wi.g.width = 300;
+ wi.g.height = 220;
+ wi.g.y = 40;
+ wi.g.x = 10;
+ wi.text = "Container 1";
+ ghContainer1 = gwinContainerCreate(0, &wi, GWIN_CONTAINER_BORDER);
+
+ wi.g.show = TRUE;
+
+ // Container 2
+ wi.g.width = 100;
+ wi.g.height = 150;
+ wi.g.y = 55;
+ wi.g.x = 10;
+ wi.g.parent = ghContainer1;
+ wi.text = "Container 2";
+ ghContainer2 = gwinContainerCreate(0, &wi, GWIN_CONTAINER_BORDER);
+
+ // Container 3
+ wi.g.width = 100;
+ wi.g.height = 150;
+ wi.g.y = 55;
+ wi.g.x = 185;
+ wi.g.parent = ghContainer1;
+ wi.text = "Container 3";
+ ghContainer3 = gwinContainerCreate(0, &wi, GWIN_CONTAINER_BORDER);
+
+ // Button 1
+ wi.g.width = 80;
+ wi.g.height = 20;
+ wi.g.y = 10;
+ wi.g.x = 10;
+ wi.text = "Button 1";
+ wi.g.parent = ghContainer2;
+ ghButton1 = gwinButtonCreate(0, &wi);
+
+ // Button 2
+ wi.g.width = 80;
+ wi.g.height = 20;
+ wi.g.y = 40;
+ wi.g.x = 10;
+ wi.text = "Button 2";
+ wi.g.parent = ghContainer2;
+ ghButton2 = gwinButtonCreate(0, &wi);
+
+ // Button 3
+ wi.g.width = 80;
+ wi.g.height = 20;
+ wi.g.y = 10;
+ wi.g.x = 10;
+ wi.text = "Button 3";
+ wi.g.parent = ghContainer3;
+ ghButton3 = gwinButtonCreate(0, &wi);
+
+ // Button 4
+ wi.g.width = 80;
+ wi.g.height = 20;
+ wi.g.y = 40;
+ wi.g.x = 10;
+ wi.text = "Button 4";
+ wi.g.parent = ghContainer3;
+ ghButton4 = gwinButtonCreate(0, &wi);
+
+ // Checkbox 1
+ wi.g.width = 80;
+ wi.g.height = 20;
+ wi.g.y = 25;
+ wi.g.x = 10;
+ wi.text = " Visible C2";
+ wi.g.parent = ghContainer1;
+ ghCheckbox1 = gwinCheckboxCreate(0, &wi);
+
+ // Checkbox 2
+ wi.g.width = 80;
+ wi.g.height = 20;
+ wi.g.y = 25;
+ wi.g.x = 185;
+ wi.text = " Visible C3";
+ wi.g.parent = ghContainer1;
+ ghCheckbox2 = gwinCheckboxCreate(0, &wi);
+
+ // Checkbox 3
+ wi.g.width = 80;
+ wi.g.height = 20;
+ wi.g.y = 10;
+ wi.g.x = 10;
+ wi.text = " Visible C1";
+ wi.g.parent = 0;
+ ghCheckbox3 = gwinCheckboxCreate(0, &wi);
+
+
+ // Make the container become visible - therefore all its children
+ // become visible as well
+ gwinShow(ghContainer1);
+}
+
+int main(void) {
+ GEvent* pe;
+
+ // Initialize the display
+ gfxInit();
+
+ // Attach the mouse input
+ gwinAttachMouse(0);
+
+ // Set the widget defaults
+ gwinSetDefaultFont(gdispOpenFont("*"));
+ gwinSetDefaultStyle(&WhiteWidgetStyle, FALSE);
+ gdispClear(White);
+
+ // Create the widget
+ createWidgets();
+
+ // We want to listen for widget events
+ geventListenerInit(&gl);
+ gwinAttachListener(&gl);
+
+ // Set the initial state of the checkboxes
+ gwinCheckboxCheck(ghCheckbox1, TRUE);
+ gwinCheckboxCheck(ghCheckbox2, TRUE);
+ gwinCheckboxCheck(ghCheckbox3, TRUE);
+
+ while(1) {
+ // Get an Event
+ pe = geventEventWait(&gl, TIME_INFINITE);
+
+ switch(pe->type) {
+ case GEVENT_GWIN_CHECKBOX:
+ if (((GEventGWinCheckbox*)pe)->checkbox == ghCheckbox1) {
+ gwinSetVisible(ghContainer2, gwinCheckboxIsChecked(ghCheckbox1));
+ }
+ else if (((GEventGWinCheckbox*)pe)->checkbox == ghCheckbox2) {
+ gwinSetVisible(ghContainer3, gwinCheckboxIsChecked(ghCheckbox2));
+ }
+ else if (((GEventGWinCheckbox*)pe)->checkbox == ghCheckbox3) {
+ gwinSetVisible(ghContainer1, gwinCheckboxIsChecked(ghCheckbox3));
+ }
+ break;
+ }
+ }
+
+ return 0;
+}