aboutsummaryrefslogtreecommitdiffstats
path: root/demos/modules/gwin
diff options
context:
space:
mode:
authorinmarket <andrewh@inmarket.com.au>2013-07-07 19:43:34 +1000
committerinmarket <andrewh@inmarket.com.au>2013-07-07 19:43:34 +1000
commitba264ef1add20e8ede39fde1ceae1d57687498d1 (patch)
treee7257e96275c5a5d164dc49ee6f8a736bbed7446 /demos/modules/gwin
parent8681e85ba6028287bf202d8b8a86a7d0a0d49101 (diff)
downloaduGFX-ba264ef1add20e8ede39fde1ceae1d57687498d1.tar.gz
uGFX-ba264ef1add20e8ede39fde1ceae1d57687498d1.tar.bz2
uGFX-ba264ef1add20e8ede39fde1ceae1d57687498d1.zip
Update GWIN demos
Diffstat (limited to 'demos/modules/gwin')
-rw-r--r--demos/modules/gwin/basic/main.c14
-rw-r--r--demos/modules/gwin/console/main.c41
-rw-r--r--demos/modules/gwin/widgets/main.c330
-rw-r--r--demos/modules/gwin/widgets/readme.txt4
4 files changed, 257 insertions, 132 deletions
diff --git a/demos/modules/gwin/basic/main.c b/demos/modules/gwin/basic/main.c
index 5dc1bab7..c46e6969 100644
--- a/demos/modules/gwin/basic/main.c
+++ b/demos/modules/gwin/basic/main.c
@@ -40,8 +40,14 @@ int main(void) {
gdispClear(Lime);
/* Create two windows */
- GW1 = gwinCreateWindow(NULL, 20, 10, 200, 150);
- GW2 = gwinCreateWindow(NULL, 50, 190, 150, 100);
+ {
+ GWindowInit wi;
+
+ wi.show = TRUE; wi.x = 20; wi.y = 10; wi.width = 200; wi.height = 150;
+ GW1 = gwinWindowCreate(NULL, &wi);
+ wi.show = TRUE; wi.x = 50; wi.y = 190; wi.width = 150; wi.height = 100;
+ GW2 = gwinWindowCreate(NULL, &wi);
+ }
/* Set fore- and background colors for both windows */
gwinSetColor(GW1, Black);
@@ -53,9 +59,9 @@ int main(void) {
gwinClear(GW1);
gwinClear(GW2);
- gwinDrawLine (GW1, 5, 30, 150, 110);
+ gwinDrawLine(GW1, 5, 30, 150, 110);
for(i=5, j=0; i < 200 && j < 150; i+=3, j+=i/20)
- gwinDrawPixel (GW1, i, j);
+ gwinDrawPixel(GW1, i, j);
/*
* Draw two filled circles at the same coordinate
diff --git a/demos/modules/gwin/console/main.c b/demos/modules/gwin/console/main.c
index aa3de40d..197a8ad6 100644
--- a/demos/modules/gwin/console/main.c
+++ b/demos/modules/gwin/console/main.c
@@ -28,27 +28,37 @@
*/
#include "gfx.h"
-#include "chprintf.h"
/* The handles for our three consoles */
GHandle GW1, GW2, GW3;
-/* The streams for our three consoles */
-BaseSequentialStream *S1, *S2, *S3;
-
int main(void) {
uint8_t i;
font_t font1, font2;
/* initialize and clear the display */
gfxInit();
- font1 = gdispOpenFont("UI2 Double");
- font2 = gdispOpenFont("Small");
- /* create the three console windows and set a font for each */
- GW1 = gwinCreateConsole(NULL, 0, 0, gdispGetWidth(), gdispGetHeight()/2, font1);
- GW2 = gwinCreateConsole(NULL, 0, gdispGetHeight()/2, gdispGetWidth()/2, gdispGetHeight(), font2);
- GW3 = gwinCreateConsole(NULL, gdispGetWidth()/2, gdispGetHeight()/2, gdispGetWidth(), gdispGetHeight(), font2);
+ /* Set some fonts */
+ font1 = gdispOpenFont("Small");
+ font2 = gdispOpenFont("UI2 Double");
+ gwinSetDefaultFont(font1);
+
+ /* create the three console windows */
+ {
+ GWindowInit wi;
+
+ wi.show = TRUE;
+ wi.x = 0; wi.y = 0; wi.width = gdispGetWidth(); wi.height = gdispGetHeight()/2;
+ GW1 = gwinConsoleCreate(NULL, &wi);
+ wi.y = gdispGetHeight()/2; wi.width = gdispGetWidth()/2; wi.height = gdispGetHeight();
+ GW2 = gwinConsoleCreate(NULL, &wi);
+ wi.x = gdispGetWidth()/2; wi.height = gdispGetHeight();
+ GW3 = gwinConsoleCreate(NULL, &wi);
+ }
+
+ /* Use a special font for GW1 */
+ gwinSetFont(GW1, font2);
/* Set the fore- and background colors for each console */
gwinSetColor(GW1, Green);
@@ -63,24 +73,19 @@ int main(void) {
gwinClear(GW2);
gwinClear(GW3);
- /* receive the stream pointers of each console */
- S1 = gwinGetConsoleStream(GW1);
- S2 = gwinGetConsoleStream(GW2);
- S3 = gwinGetConsoleStream(GW3);
-
/* Output some data on the first console */
for(i = 0; i < 10; i++) {
- chprintf(S1, "Hello ChibiOS/GFX!\r\n");
+ gwinPrintf(GW1, "Hello ChibiOS/GFX!\r\n");
}
/* Output some data on the second console */
for(i = 0; i < 16; i++) {
- chprintf(S2, "Message Nr.: %d\r\n", i+1);
+ gwinPrintf(GW2, "Message Nr.: %d\r\n", i+1);
}
/* Output some data on the third console */
for(i = 0; i < 18; i++) {
- chprintf(S3, "Message Nr.: %d\r\n", i+1);
+ gwinPrintf(GW3, "Message Nr.: %d\r\n", i+1);
}
while(TRUE) {
diff --git a/demos/modules/gwin/widgets/main.c b/demos/modules/gwin/widgets/main.c
index e44ce6b0..4d485186 100644
--- a/demos/modules/gwin/widgets/main.c
+++ b/demos/modules/gwin/widgets/main.c
@@ -28,37 +28,186 @@
#include "gfx.h"
+/**
+ * This demo demonstrates many of the GWIN widgets.
+ * On the "Radio" tab try playing with the color radio buttons.
+ * On the "Checkbox" tab try playing with the "Disable All" checkbox.
+ */
+
+/* Our custom yellow style */
+static const GWidgetStyle YellowWidgetStyle = {
+ Yellow, // window background
+
+ // enabled color set
+ {
+ HTML2COLOR(0x0000FF), // text
+ HTML2COLOR(0x404040), // edge
+ HTML2COLOR(0xE0E0E0), // fill
+ HTML2COLOR(0xE0E0E0), // progress - inactive area
+ },
+
+ // disabled color set
+ {
+ HTML2COLOR(0xC0C0C0), // text
+ HTML2COLOR(0x808080), // edge
+ HTML2COLOR(0xE0E0E0), // fill
+ HTML2COLOR(0xC0E0C0), // progress - active area
+ },
+
+ // pressed color set
+ {
+ HTML2COLOR(0xFF00FF), // text
+ HTML2COLOR(0x404040), // edge
+ HTML2COLOR(0x808080), // fill
+ HTML2COLOR(0x00E000), // progress - active area
+ },
+};
+
+/* The variables we need */
static GListener gl;
static GHandle ghConsole;
static GHandle ghTabButtons, ghTabSliders, ghTabCheckboxes, ghTabLabels, ghTabRadios, ghTabImages;
static GHandle ghButton1, ghButton2, ghButton3, ghButton4;
static GHandle ghSlider1, ghSlider2, ghSlider3, ghSlider4;
-static GHandle ghCheckbox1, ghCheckbox2;
+static GHandle ghCheckbox1, ghCheckbox2, ghCheckDisableAll;
static GHandle ghLabel1;
static GHandle ghRadio1, ghRadio2;
+static GHandle ghRadioBlack, ghRadioWhite, ghRadioYellow;
//static GHandle ghImage1;
+/* Some useful macros */
#define ScrWidth gdispGetWidth()
#define ScrHeight gdispGetHeight()
-#define TAB_HEIGHT 30
-#define BUTTON_WIDTH 50
-#define BUTTON_HEIGHT 30
-#define SLIDER_WIDTH 20
-#define CHECKBOX_WIDTH 80
-#define CHECKBOX_HEIGHT 20
-#define RADIO_WIDTH 50
-#define RADIO_HEIGHT 20
-#define GROUP_TABS 0
-#define GROUP_R1R2 1
-
-static GHandle createTab(GWidgetInit *pwi) {
- GHandle gh;
-
- gh = gwinCreateRadio(NULL, pwi, GROUP_TABS);
- gwinSetCustomDraw(gh, gwinRadioDraw_Tab, 0);
- gwinSetVisible(gh, TRUE);
- return gh;
+#define TAB_HEIGHT 30
+#define LABEL_HEIGHT 40
+#define BUTTON_WIDTH 50
+#define BUTTON_HEIGHT 30
+#define SLIDER_WIDTH 20
+#define CHECKBOX_WIDTH 80
+#define CHECKBOX_HEIGHT 20
+#define RADIO_WIDTH 50
+#define RADIO_HEIGHT 20
+#define COLOR_WIDTH 80
+#define DISABLEALL_WIDTH 100
+#define GROUP_TABS 0
+#define GROUP_YESNO 1
+#define GROUP_COLORS 2
+
+/**
+ * Create all the widgets.
+ * With the exception of the Tabs they are all created invisible.
+ */
+static void createWidgets(void) {
+ GWidgetInit wi;
+
+ wi.customDraw = 0; wi.customParam = 0; wi.customStyle = 0;
+
+ // Create the Tabs
+ wi.g.show = TRUE; wi.customDraw = gwinRadioDraw_Tab;
+ wi.g.width = ScrWidth/6; wi.g.height = TAB_HEIGHT; wi.g.y = 0;
+ wi.g.x = 0*wi.g.width; wi.text = "Buttons"; ghTabButtons = gwinRadioCreate(NULL, &wi, GROUP_TABS);
+ wi.g.x = 1*wi.g.width; wi.text = "Sliders"; ghTabSliders = gwinRadioCreate(NULL, &wi, GROUP_TABS);
+ wi.g.x = 2*wi.g.width; wi.text = "Checkbox"; ghTabCheckboxes = gwinRadioCreate(NULL, &wi, GROUP_TABS);
+ wi.g.x = 3*wi.g.width; wi.text = "Radios"; ghTabRadios = gwinRadioCreate(NULL, &wi, GROUP_TABS);
+ wi.g.x = 4*wi.g.width; wi.text = "Labels"; ghTabLabels = gwinRadioCreate(NULL, &wi, GROUP_TABS);
+ wi.g.x = 5*wi.g.width; wi.text = "Images"; ghTabImages = gwinRadioCreate(NULL, &wi, GROUP_TABS);
+
+ // Buttons
+ wi.g.show = FALSE; wi.customDraw = 0;
+ wi.g.width = BUTTON_WIDTH; wi.g.height = BUTTON_HEIGHT; wi.g.y = TAB_HEIGHT+5;
+ wi.g.x = 0+0*(BUTTON_WIDTH+1); wi.text = "B1"; ghButton1 = gwinButtonCreate(NULL, &wi);
+ wi.g.x = 0+1*(BUTTON_WIDTH+1); wi.text = "B2"; ghButton2 = gwinButtonCreate(NULL, &wi);
+ wi.g.x = 0+2*(BUTTON_WIDTH+1); wi.text = "B3"; ghButton3 = gwinButtonCreate(NULL, &wi);
+ wi.g.x = 0+3*(BUTTON_WIDTH+1); wi.text = "B4"; ghButton4 = gwinButtonCreate(NULL, &wi);
+
+ // Horizontal Sliders
+ wi.g.width = ScrWidth/2-2; wi.g.height = SLIDER_WIDTH; wi.g.x = ScrWidth/2+1;
+ wi.g.y = ScrHeight/2-2*(SLIDER_WIDTH+1); wi.text = "S1"; ghSlider1 = gwinSliderCreate(NULL, &wi);
+ wi.g.y = ScrHeight/2-1*(SLIDER_WIDTH+1); wi.text = "S2"; ghSlider2 = gwinSliderCreate(NULL, &wi);
+
+ // Vertical Sliders
+ wi.g.width = SLIDER_WIDTH; wi.g.height = ScrHeight/2-2; wi.g.y = ScrHeight/2+1;
+ wi.g.x = 0+0*(SLIDER_WIDTH+1); wi.text = "S3"; ghSlider3 = gwinSliderCreate(NULL, &wi);
+ wi.g.x = 0+1*(SLIDER_WIDTH+1); wi.text = "S4"; ghSlider4 = gwinSliderCreate(NULL, &wi);
+
+ // Checkboxes - for the 2nd checkbox we apply special drawing before making it visible
+ wi.g.width = CHECKBOX_WIDTH; wi.g.height = CHECKBOX_HEIGHT; wi.g.x = 0;
+ wi.g.y = TAB_HEIGHT+5+0*(CHECKBOX_HEIGHT+1); wi.text = "C1"; ghCheckbox1 = gwinCheckboxCreate(NULL, &wi);
+ wi.customDraw = gwinCheckboxDraw_CheckOnRight;
+ wi.g.y = TAB_HEIGHT+5+1*(CHECKBOX_HEIGHT+1); wi.text = "C2"; ghCheckbox2 = gwinCheckboxCreate(NULL, &wi);
+ wi.customDraw = 0; wi.g.width = DISABLEALL_WIDTH;
+ wi.g.y = TAB_HEIGHT+5+2*(CHECKBOX_HEIGHT+1); wi.text = "Disable All"; ghCheckDisableAll = gwinCheckboxCreate(NULL, &wi);
+
+ // Labels
+ wi.g.width = 0; wi.g.height = LABEL_HEIGHT; // dynamic width, fixed height
+ wi.g.y = TAB_HEIGHT+5+2*(CHECKBOX_HEIGHT+1); wi.text = "Label"; ghLabel1 = gwinLabelCreate(NULL, &wi);
+
+ // Radio Buttons
+ wi.g.width = RADIO_WIDTH; wi.g.height = RADIO_HEIGHT; wi.g.y = TAB_HEIGHT+5;
+ wi.g.x = 0*wi.g.width; wi.text = "Yes"; ghRadio1 = gwinRadioCreate(NULL, &wi, GROUP_YESNO);
+ wi.g.x = 1*wi.g.width; wi.text = "No"; ghRadio2 = gwinRadioCreate(NULL, &wi, GROUP_YESNO);
+ wi.g.width = COLOR_WIDTH; wi.g.y += RADIO_HEIGHT+5;
+ wi.g.x = 0*wi.g.width; wi.text = "Black"; ghRadioBlack = gwinRadioCreate(NULL, &wi, GROUP_COLORS);
+ wi.g.x = 1*wi.g.width; wi.text = "White"; ghRadioWhite = gwinRadioCreate(NULL, &wi, GROUP_COLORS);
+ wi.g.x = 2*wi.g.width; wi.text = "Yellow"; ghRadioYellow = gwinRadioCreate(NULL, &wi, GROUP_COLORS);
+ gwinRadioPress(ghRadioWhite);
+
+ // Console - we apply some special colors before making it visible
+ wi.g.width = ScrWidth/2-1; wi.g.height = ScrHeight/2-1;
+ wi.g.x = ScrWidth/2+1; wi.g.y = ScrHeight/2+1;
+ ghConsole = gwinConsoleCreate(NULL, &wi.g);
+ gwinSetColor(ghConsole, Yellow);
+ gwinSetBgColor(ghConsole, Black);
+}
+
+/**
+ * Set the visibility of widgets based on which tab is selected.
+ */
+static void setTab(GHandle tab) {
+ /* Make sure everything is invisible first */
+ gwinSetVisible(ghButton1, FALSE); gwinSetVisible(ghButton2, FALSE);
+ gwinSetVisible(ghButton3, FALSE); gwinSetVisible(ghButton4, FALSE);
+ gwinSetVisible(ghSlider1, FALSE); gwinSetVisible(ghSlider2, FALSE);
+ gwinSetVisible(ghSlider3, FALSE); gwinSetVisible(ghSlider4, FALSE);
+ gwinSetVisible(ghCheckbox1, FALSE); gwinSetVisible(ghCheckbox2, FALSE); gwinSetVisible(ghCheckDisableAll, FALSE);
+ gwinSetVisible(ghLabel1, FALSE);
+ gwinSetVisible(ghRadio1, FALSE); gwinSetVisible(ghRadio2, FALSE);
+ gwinSetVisible(ghRadioWhite, FALSE);gwinSetVisible(ghRadioBlack, FALSE);gwinSetVisible(ghRadioYellow, FALSE);
+ //gwinSetVisible(ghImage1, FALSE);
+
+ /* Turn on widgets depending on the tab selected */
+ if (tab == ghTabButtons) {
+ gwinSetVisible(ghButton1, TRUE); gwinSetVisible(ghButton2, TRUE);
+ gwinSetVisible(ghButton3, TRUE); gwinSetVisible(ghButton4, TRUE);
+ } else if (tab == ghTabSliders) {
+ gwinSetVisible(ghSlider1, TRUE); gwinSetVisible(ghSlider2, TRUE);
+ gwinSetVisible(ghSlider3, TRUE); gwinSetVisible(ghSlider4, TRUE);
+ } else if (tab == ghTabCheckboxes) {
+ gwinSetVisible(ghCheckbox1, TRUE); gwinSetVisible(ghCheckbox2, TRUE); gwinSetVisible(ghCheckDisableAll, TRUE);
+ } else if (tab == ghTabLabels) {
+ gwinSetVisible(ghLabel1, TRUE);
+ } else if (tab == ghTabRadios) {
+ gwinSetVisible(ghRadio1, TRUE); gwinSetVisible(ghRadio2, TRUE);
+ gwinSetVisible(ghRadioWhite, TRUE); gwinSetVisible(ghRadioBlack, TRUE); gwinSetVisible(ghRadioYellow, TRUE);
+ } else if (tab == ghTabImages) {
+ //gwinSetVisible(ghImage1, TRUE);
+ }
+}
+
+/**
+ * Set the enabled state of every widget (except the tabs etc)
+ */
+static void setEnabled(bool_t ena) {
+ gwinSetEnabled(ghButton1, ena); gwinSetEnabled(ghButton2, ena);
+ gwinSetEnabled(ghButton3, ena); gwinSetEnabled(ghButton4, ena);
+ gwinSetEnabled(ghSlider1, ena); gwinSetEnabled(ghSlider2, ena);
+ gwinSetEnabled(ghSlider3, ena); gwinSetEnabled(ghSlider4, ena);
+ gwinSetEnabled(ghCheckbox1, ena); gwinSetEnabled(ghCheckbox2, ena); //gwinSetEnabled(ghCheckDisableAll, TRUE);
+ gwinSetEnabled(ghLabel1, ena);
+ gwinSetEnabled(ghRadio1, ena); gwinSetEnabled(ghRadio2, ena);
+ gwinSetEnabled(ghRadioWhite, ena); gwinSetEnabled(ghRadioBlack, ena); gwinSetEnabled(ghRadioYellow, ena);
+ //gwinSetEnabled(ghImage1, ena);
}
int main(void) {
@@ -66,16 +215,11 @@ int main(void) {
// Initialize the display
gfxInit();
- gdispClear(White);
// Set the widget defaults
gwinSetDefaultFont(gdispOpenFont("UI2"));
- gwinSetDefaultColor(Black);
- gwinSetDefaultBgColor(White);
-
- // We want to listen for widget events
- geventListenerInit(&gl);
- gwinAttachListener(&gl);
+ gwinSetDefaultStyle(&WhiteWidgetStyle, FALSE);
+ gdispClear(White);
// Connect the mouse
#if GINPUT_NEED_MOUSE
@@ -83,59 +227,9 @@ int main(void) {
#endif
// Create the gwin windows/widgets
- {
- GWidgetInit wi;
-
- // Create the Tabs
- wi.g.show = FALSE; wi.g.width = ScrWidth/6; wi.g.height = TAB_HEIGHT; wi.g.y = 0;
- wi.g.x = 0*wi.g.width; wi.text = "Buttons"; ghTabButtons = createTab(&wi);
- wi.g.x = 1*wi.g.width; wi.text = "Sliders"; ghTabSliders = createTab(&wi);
- wi.g.x = 2*wi.g.width; wi.text = "Checkbox"; ghTabCheckboxes = createTab(&wi);
- wi.g.x = 3*wi.g.width; wi.text = "Labels"; ghTabLabels = createTab(&wi);
- wi.g.x = 4*wi.g.width; wi.text = "Radios"; ghTabRadios = createTab(&wi);
- wi.g.x = 5*wi.g.width; wi.text = "Images"; ghTabImages = createTab(&wi);
-
- // Buttons
- wi.g.width = BUTTON_WIDTH; wi.g.height = BUTTON_HEIGHT; wi.g.y = TAB_HEIGHT+5;
- wi.g.x = 0+0*(BUTTON_WIDTH+1); wi.text = "B1"; ghButton1 = gwinCreateButton(NULL, &wi);
- wi.g.x = 0+1*(BUTTON_WIDTH+1); wi.text = "B2"; ghButton2 = gwinCreateButton(NULL, &wi);
- wi.g.x = 0+2*(BUTTON_WIDTH+1); wi.text = "B3"; ghButton3 = gwinCreateButton(NULL, &wi);
- wi.g.x = 0+3*(BUTTON_WIDTH+1); wi.text = "B4"; ghButton4 = gwinCreateButton(NULL, &wi);
-
- // Horizontal Sliders
- wi.g.width = ScrWidth/2-2; wi.g.height = SLIDER_WIDTH; wi.g.x = ScrWidth/2+1;
- wi.g.y = ScrHeight/2-2*(SLIDER_WIDTH+1); wi.text = "S1"; ghSlider1 = gwinCreateSlider(NULL, &wi);
- wi.g.y = ScrHeight/2-1*(SLIDER_WIDTH+1); wi.text = "S2"; ghSlider2 = gwinCreateSlider(NULL, &wi);
-
- // Vertical Sliders
- wi.g.width = SLIDER_WIDTH; wi.g.height = ScrHeight/2-2; wi.g.y = ScrHeight/2+1;
- wi.g.x = 0+0*(SLIDER_WIDTH+1); wi.text = "S3"; ghSlider3 = gwinCreateSlider(NULL, &wi);
- wi.g.x = 0+1*(SLIDER_WIDTH+1); wi.text = "S4"; ghSlider4 = gwinCreateSlider(NULL, &wi);
-
- // Checkboxes - for the 2nd checkbox we apply special drawing before making it visible
- wi.g.width = CHECKBOX_WIDTH; wi.g.height = CHECKBOX_HEIGHT; wi.g.x = 0;
- wi.g.y = TAB_HEIGHT+5+0*(CHECKBOX_HEIGHT+1); wi.text = "C1"; ghCheckbox1 = gwinCreateCheckbox(NULL, &wi);
- wi.g.y = TAB_HEIGHT+5+1*(CHECKBOX_HEIGHT+1); wi.text = "C2"; ghCheckbox2 = gwinCreateCheckbox(NULL, &wi);
- gwinSetCustomDraw(ghCheckbox2, gwinCheckboxDraw_CheckOnRight, 0);
-
- // Labels
- wi.g.width = 0; // dynamic width
- wi.g.y = TAB_HEIGHT+5+2*(CHECKBOX_HEIGHT+1); wi.text = "L1"; ghLabel1 = gwinLabelCreate(NULL, &wi);
-
- // Radio Buttons
- wi.g.width = RADIO_WIDTH; wi.g.height = RADIO_HEIGHT; wi.g.y = TAB_HEIGHT+5;
- wi.g.x = 0*wi.g.width; wi.text = "Yes"; ghRadio1 = gwinCreateRadio(NULL, &wi, GROUP_R1R2);
- wi.g.x = 1*wi.g.width; wi.text = "No"; ghRadio2 = gwinCreateRadio(NULL, &wi, GROUP_R1R2);
-
- // Console - we apply some special colors before making it visible
- wi.g.width = ScrWidth/2-1; wi.g.height = ScrHeight/2-1;
- wi.g.x = ScrWidth/2+1; wi.g.y = ScrHeight/2+1;
- ghConsole = gwinCreateConsole(NULL, &wi.g);
- gwinSetColor(ghConsole, Yellow);
- gwinSetBgColor(ghConsole, Black);
- }
+ createWidgets();
- // Assign toggles and dials to the buttons & sliders etc.
+ // Assign toggles and dials to specific buttons & sliders etc.
#if GINPUT_NEED_TOGGLE
gwinAttachToggle(ghButton1, 0, 0);
gwinAttachToggle(ghButton2, 0, 1);
@@ -149,8 +243,12 @@ int main(void) {
gwinSetVisible(ghConsole, TRUE);
gwinClear(ghConsole);
- // Press the Buttons Tab
- gwinPressRadio(ghTabButtons);
+ // We want to listen for widget events
+ geventListenerInit(&gl);
+ gwinAttachListener(&gl);
+
+ // Press the Tab we want visible
+ gwinRadioPress(ghTabButtons);
while(1) {
// Get an Event
@@ -160,54 +258,68 @@ int main(void) {
case GEVENT_GWIN_BUTTON:
gwinPrintf(ghConsole, "Button %s\n", gwinGetText(((GEventGWinButton *)pe)->button));
break;
+
case GEVENT_GWIN_SLIDER:
gwinPrintf(ghConsole, "Slider %s=%d\n", gwinGetText(((GEventGWinSlider *)pe)->slider), ((GEventGWinSlider *)pe)->position);
break;
+
case GEVENT_GWIN_CHECKBOX:
gwinPrintf(ghConsole, "Checkbox %s=%s\n", gwinGetText(((GEventGWinCheckbox *)pe)->checkbox), ((GEventGWinCheckbox *)pe)->isChecked ? "Checked" : "UnChecked");
+
+ // If it is the Disable All checkbox then do that.
+ if (((GEventGWinCheckbox *)pe)->checkbox == ghCheckDisableAll) {
+ gwinPrintf(ghConsole, "%s All\n", ((GEventGWinCheckbox *)pe)->isChecked ? "Disable" : "Enable");
+ setEnabled(!((GEventGWinCheckbox *)pe)->isChecked);
+ }
break;
+
case GEVENT_GWIN_RADIO:
gwinPrintf(ghConsole, "Radio Group %u=%s\n", ((GEventGWinRadio *)pe)->group, gwinGetText(((GEventGWinRadio *)pe)->radio));
- // Is this the tab radio's
- if (((GEventGWinRadio *)pe)->group == GROUP_TABS) {
-
- // Do some special animation for Label1
- if (((GEventGWinRadio *)pe)->radio == ghTabLabels) {
- gwinSetBgColor(ghLabel1, gwinGetDefaultBgColor());
- gwinSetColor(ghLabel1, gwinGetDefaultColor());
- }
+ switch(((GEventGWinRadio *)pe)->group) {
+ case GROUP_TABS:
// Set control visibility depending on the tab selected
- gwinSetVisible(ghButton1, ((GEventGWinRadio *)pe)->radio == ghTabButtons);
- gwinSetVisible(ghButton2, ((GEventGWinRadio *)pe)->radio == ghTabButtons);
- gwinSetVisible(ghButton3, ((GEventGWinRadio *)pe)->radio == ghTabButtons);
- gwinSetVisible(ghButton4, ((GEventGWinRadio *)pe)->radio == ghTabButtons);
- gwinSetVisible(ghSlider1, ((GEventGWinRadio *)pe)->radio == ghTabSliders);
- gwinSetVisible(ghSlider2, ((GEventGWinRadio *)pe)->radio == ghTabSliders);
- gwinSetVisible(ghSlider3, ((GEventGWinRadio *)pe)->radio == ghTabSliders);
- gwinSetVisible(ghSlider4, ((GEventGWinRadio *)pe)->radio == ghTabSliders);
- gwinSetVisible(ghCheckbox1, ((GEventGWinRadio *)pe)->radio == ghTabCheckboxes);
- gwinSetVisible(ghCheckbox2, ((GEventGWinRadio *)pe)->radio == ghTabCheckboxes);
- gwinSetVisible(ghLabel1, ((GEventGWinRadio *)pe)->radio == ghTabLabels);
- gwinSetVisible(ghRadio1, ((GEventGWinRadio *)pe)->radio == ghTabRadios);
- gwinSetVisible(ghRadio2, ((GEventGWinRadio *)pe)->radio == ghTabRadios);
- //gwinSetVisible(ghImage1, ((GEventGWinRadio *)pe)->radio == ghTabImages);
-
- // Do some special animation for Label1
+ setTab(((GEventGWinRadio *)pe)->radio);
+
+ // Do some special animation for Label1 to demonstrate auto width sizing
if (((GEventGWinRadio *)pe)->radio == ghTabLabels) {
+ gwinPrintf(ghConsole, "Change Label Text\n");
gfxSleepMilliseconds(1000);
- gwinSetBgColor(ghLabel1, Blue);
- gwinSetColor(ghLabel1, Yellow);
gwinSetText(ghLabel1, "Very Big Label", FALSE);
gfxSleepMilliseconds(1000);
- gwinSetBgColor(ghLabel1, Yellow);
- gwinSetColor(ghLabel1, Red);
- gwinSetText(ghLabel1, "L1", FALSE);
+ gwinSetText(ghLabel1, "Label", FALSE);
}
+ break;
+
+ case GROUP_COLORS:
+ {
+ const GWidgetStyle *pstyle;
+
+ gwinPrintf(ghConsole, "Change Color Scheme\n");
+
+ if (((GEventGWinRadio *)pe)->radio == ghRadioYellow)
+ pstyle = &YellowWidgetStyle;
+ else if (((GEventGWinRadio *)pe)->radio == ghRadioBlack)
+ pstyle = &BlackWidgetStyle;
+ else
+ pstyle = &WhiteWidgetStyle;
+
+ // Clear the screen to the new color - we avoid the console area as it can't redraw itself
+ #if GDISP_NEED_CLIP
+ gdispUnsetClip();
+ #endif
+ gdispFillArea(0, 0, ScrWidth, ScrHeight/2, pstyle->background);
+ gdispFillArea(0, ScrHeight/2, ScrWidth/2, ScrHeight/2, pstyle->background);
+
+ // Update the style on all controls
+ gwinSetDefaultStyle(pstyle, TRUE);
+ }
+ break;
}
break;
+
default:
gwinPrintf(ghConsole, "Unknown %d\n", pe->type);
break;
diff --git a/demos/modules/gwin/widgets/readme.txt b/demos/modules/gwin/widgets/readme.txt
index 02d733e9..b5777061 100644
--- a/demos/modules/gwin/widgets/readme.txt
+++ b/demos/modules/gwin/widgets/readme.txt
@@ -1,6 +1,8 @@
-This demo supports input from both a mouse/touch and/or a dial input.
+This demo supports input from both a mouse/touch, toggles and/or a dial input.
If your platform does not support one or the other, turn it off in
gfxconf.h
Note that you will need to include the drivers into your project
makefile for whichever inputs you decide to use.
+
+For some fun have a play with the "colors" radio group and the "Disable All" checkbox.