QMK/lib/ugfx/demos/modules/gwin/container_nested/main.c

156 lines
3.8 KiB
C

#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 = gFalse;
// 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 = gTrue;
// 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();
// Set the widget defaults
gwinSetDefaultFont(gdispOpenFont("*"));
gwinSetDefaultStyle(&WhiteWidgetStyle, gFalse);
gdispClear(GFX_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, gTrue);
gwinCheckboxCheck(ghCheckbox2, gTrue);
gwinCheckboxCheck(ghCheckbox3, gTrue);
while(1) {
// Get an Event
pe = geventEventWait(&gl, gDelayForever);
switch(pe->type) {
case GEVENT_GWIN_CHECKBOX:
if (((GEventGWinCheckbox*)pe)->gwin == ghCheckbox1) {
gwinSetVisible(ghContainer2, gwinCheckboxIsChecked(ghCheckbox1));
}
else if (((GEventGWinCheckbox*)pe)->gwin == ghCheckbox2) {
gwinSetVisible(ghContainer3, gwinCheckboxIsChecked(ghCheckbox2));
}
else if (((GEventGWinCheckbox*)pe)->gwin == ghCheckbox3) {
gwinSetVisible(ghContainer1, gwinCheckboxIsChecked(ghCheckbox3));
}
break;
}
}
return 0;
}