int evtLogin(struct pgEvent *evt){ picosmUI *interface = (picosmUI *)evt->extra; /* Advance focus to the password field if the username field is nonempty */ if (pgGetString(pgGetWidget(interface->wLogin,PG_WP_TEXT))[0]) pgFocus(interface->wPasswd); return 1; }
int PG_HandleMouseButton(struct pgEvent *evt) { /* We need to focus the canvas when it's clicked */ if (evt->extra) { SDL_VideoDevice *this = (SDL_VideoDevice *) evt->extra; pgFocus(this->hidden->wCanvas); } SDL_PrivateMouseButton(evt->type == PG_WE_PNTR_DOWN, evt->e.pntr.chbtn, evt->e.pntr.x, evt->e.pntr.y); return 0; }
int evtClear(struct pgEvent *evt){ picosmUI *interface = (picosmUI *)evt->extra; pgEnterContext(); pgSetWidget(interface->wPasswd, PG_WP_TEXT, pgNewString(""), 0); pgSetWidget(interface->wLogin, PG_WP_TEXT, pgNewString(""), 0); pgFocus(interface->wLogin); pgLeaveContext(); return 1; }
void PG_InitEvents(_THIS) { /* Turn on all the mouse and keyboard triggers for our canvas, normally less important * events like mouse movement are ignored to save bandwidth. */ pgSetWidget(this->hidden->wCanvas, PG_WP_TRIGGERMASK, pgGetWidget(this->hidden->wCanvas, PG_WP_TRIGGERMASK) | PG_TRIGGER_UP | PG_TRIGGER_DOWN | PG_TRIGGER_MOVE | PG_TRIGGER_KEYUP | PG_TRIGGER_KEYDOWN | PG_TRIGGER_CHAR,0); /* Start our canvas out focused, so we get keyboard input */ pgFocus(this->hidden->wCanvas); /* Set up bindings for all the above event handlers */ pgBind(this->hidden->wApp, PG_WE_CLOSE, &PG_HandleClose, NULL); pgBind(this->hidden->wCanvas, PG_WE_BUILD, &PG_HandleResize, NULL); pgBind(this->hidden->wCanvas, PG_WE_KBD_CHAR, &PG_HandleChar, NULL); pgBind(this->hidden->wCanvas, PG_WE_KBD_KEYUP, &PG_HandleKey, NULL); pgBind(this->hidden->wCanvas, PG_WE_KBD_KEYDOWN, &PG_HandleKey, NULL); pgBind(this->hidden->wCanvas, PG_WE_PNTR_MOVE, &PG_HandleMouseMotion, NULL); pgBind(this->hidden->wCanvas, PG_WE_PNTR_UP, &PG_HandleMouseButton, NULL); pgBind(this->hidden->wCanvas, PG_WE_PNTR_DOWN, &PG_HandleMouseButton, this); }
picosmUI *buildUI(void){ picosmUI *newUI = (picosmUI *)malloc(sizeof(picosmUI)); if(!(newUI->wApp = pgFindWidget("PSMApp"))){ newUI->wApp = pgCreateWidget(PG_WIDGET_DIALOGBOX); pgSetWidget(newUI->wApp, PG_WP_NAME,pgNewString("PSMApp"), PG_WP_TEXT,pgNewString("PicoGUI Login"), 0); } if(!(newUI->wButtonBox = pgFindWidget("PSMButtonBox"))){ newUI->wButtonBox = pgNewWidget(PG_WIDGET_TOOLBAR, PG_DERIVE_INSIDE, newUI->wApp); pgSetWidget(newUI->wButtonBox, PG_WP_NAME,pgNewString("PSMButtonBox"), PG_WP_SIDE, PG_S_BOTTOM, 0); } if(!(newUI->wPasswdBox = pgFindWidget("PSMPasswdBox"))){ newUI->wPasswdBox = pgNewWidget(PG_WIDGET_BOX, PG_DERIVE_INSIDE, newUI->wApp); pgSetWidget(newUI->wPasswdBox, PG_WP_NAME,pgNewString("PSMPasswdBox"), PG_WP_TRANSPARENT, 1, 0); } if(!(newUI->wLoginBox = pgFindWidget("PSMLoginBox"))){ newUI->wLoginBox = pgNewWidget(PG_WIDGET_BOX, PG_DERIVE_INSIDE, newUI->wApp); pgSetWidget(newUI->wLoginBox, PG_WP_NAME,pgNewString("PSMLoginBox"), PG_WP_TRANSPARENT, 1, 0); } if(!(newUI->wLoginLabel = pgFindWidget("PSMLoginLabel"))){ newUI->wLoginLabel = pgNewWidget(PG_WIDGET_LABEL, PG_DERIVE_INSIDE, newUI->wLoginBox); pgSetWidget(newUI->wLoginLabel, PG_WP_NAME,pgNewString("PSMLoginLabel"), PG_WP_TEXT, pgNewString("Login: "******"PSMLogin"))){ newUI->wLogin = pgNewWidget(PG_WIDGET_FIELD, PG_DERIVE_INSIDE, newUI->wLoginBox); pgSetWidget(newUI->wLogin, PG_WP_NAME,pgNewString("PSMLogin"), PG_WP_SIDE, PG_S_RIGHT, PG_WP_SIZEMODE, PG_SZMODE_PERCENT, PG_WP_SIZE, 70, 0); pgFocus(newUI->wLogin); } if(!(newUI->wPasswdLabel = pgFindWidget("PSMPasswdLabel"))){ newUI->wPasswdLabel = pgNewWidget(PG_WIDGET_LABEL, PG_DERIVE_INSIDE, newUI->wPasswdBox); pgSetWidget(newUI->wPasswdLabel, PG_WP_NAME,pgNewString("PSMPasswdLabel"), PG_WP_TEXT, pgNewString("Password: "******"PSMPasswd"))){ newUI->wPasswd = pgNewWidget(PG_WIDGET_FIELD, PG_DERIVE_INSIDE, newUI->wPasswdBox); pgSetWidget(newUI->wPasswd, PG_WP_NAME,pgNewString("PSMPasswd"), PG_WP_SIDE, PG_S_RIGHT, PG_WP_SIZEMODE, PG_SZMODE_PERCENT, PG_WP_PASSWORD, '*', PG_WP_SIZE, 70, 0); } if(!(newUI->wClear = pgFindWidget("PSMClear"))){ newUI->wClear = pgNewWidget(PG_WIDGET_BUTTON, PG_DERIVE_INSIDE, newUI->wButtonBox); pgSetWidget(newUI->wClear, PG_WP_NAME,pgNewString("PSMClear"), PG_WP_ALIGN, PG_A_CENTER, PG_WP_SIDE, PG_S_RIGHT, PG_WP_TEXT, pgNewString("Clear"), 0); } if(!(newUI->wLogon = pgFindWidget("PSMLogon"))){ newUI->wLogon = pgNewWidget(PG_WIDGET_BUTTON, PG_DERIVE_INSIDE, newUI->wButtonBox); pgSetWidget(newUI->wLogon, PG_WP_NAME,pgNewString("PSMLogon"), PG_WP_ALIGN, PG_A_CENTER, PG_WP_SIDE, PG_S_RIGHT, PG_WP_TEXT, pgNewString("Log On"), 0); } if(!(newUI->wReboot = pgFindWidget("PSMReboot"))){ newUI->wReboot = pgNewWidget(PG_WIDGET_BUTTON, PG_DERIVE_INSIDE, newUI->wButtonBox); pgSetWidget(newUI->wReboot, PG_WP_NAME,pgNewString("PSMReboot"), PG_WP_ALIGN, PG_A_CENTER, PG_WP_SIDE, PG_S_LEFT, PG_WP_TEXT, pgNewString("Reboot"), 0); } if(!(newUI->wPowerOff = pgFindWidget("PSMPowerOff"))){ newUI->wPowerOff = pgNewWidget(PG_WIDGET_BUTTON, PG_DERIVE_INSIDE, newUI->wButtonBox); pgSetWidget(newUI->wPowerOff, PG_WP_NAME,pgNewString("PSMPowerOff"), PG_WP_ALIGN, PG_A_CENTER, PG_WP_SIDE, PG_S_LEFT, PG_WP_TEXT, pgNewString("Power Off"), 0); } return newUI; }
/* Like a messge dialog, with an input field */ pghandle pgInputDialog(const char *title, const char *message, pghandle deftxt) { pghandle wToolbar,wField,wOk,wCancel,from; pghandle str = 0; /* New context for us! */ pgEnterContext(); /* Create the important widgets */ pgDialogBox(title); wToolbar = pgNewWidget(PG_WIDGET_TOOLBAR,0,0); pgSetWidget(PGDEFAULT, PG_WP_SIDE,PG_S_BOTTOM, 0); wField = pgNewWidget(PG_WIDGET_TOOLBAR,0,0); pgSetWidget(PGDEFAULT, PG_WP_SIDE,PG_S_BOTTOM, 0); pgNewWidget(PG_WIDGET_LABEL,0,0); pgSetWidget(PGDEFAULT, PG_WP_SIDE,PG_S_ALL, PG_WP_TEXT,pgNewString(message), 0); wField = pgNewWidget(PG_WIDGET_FIELD,PG_DERIVE_INSIDE,wField); pgSetWidget(PGDEFAULT, PG_WP_SIDE,PG_S_BOTTOM, PG_WP_SIDE,PG_S_ALL, /* Only set the property if nonzero */ deftxt ? PG_WP_TEXT : 0,deftxt, 0); /* buttons */ wCancel = pgNewWidget(PG_WIDGET_BUTTON,PG_DERIVE_INSIDE,wToolbar); pgSetWidget(PGDEFAULT, PG_WP_TEXT,pgGetServerRes(PGRES_STRING_CANCEL), PG_WP_SIDE,PG_S_RIGHT, PG_WP_HOTKEY,pgThemeLookup(PGTH_O_POPUP_MESSAGEDLG, PGTH_P_HOTKEY_CANCEL), PG_WP_IMAGE,pgThemeLookup(PGTH_O_POPUP_MESSAGEDLG, PGTH_P_ICON_CANCEL), PG_WP_BITMASK,pgThemeLookup(PGTH_O_POPUP_MESSAGEDLG, PGTH_P_ICON_CANCEL_MASK), 0); wOk = pgNewWidget(PG_WIDGET_BUTTON,PG_DERIVE_INSIDE,wToolbar); pgSetWidget(PGDEFAULT, PG_WP_TEXT,pgGetServerRes(PGRES_STRING_OK), PG_WP_SIDE,PG_S_RIGHT, PG_WP_HOTKEY,pgThemeLookup(PGTH_O_POPUP_MESSAGEDLG, PGTH_P_HOTKEY_OK), PG_WP_IMAGE,pgThemeLookup(PGTH_O_POPUP_MESSAGEDLG, PGTH_P_ICON_OK), PG_WP_BITMASK,pgThemeLookup(PGTH_O_POPUP_MESSAGEDLG, PGTH_P_ICON_OK_MASK), 0); /* Run */ pgFocus(wField); for (;;) { from = pgGetEvent()->from; if (from == wOk) { /* Make a copy, because the one used in PG_WP_TEXT is deleted * automatically by the field widget on deletion. */ str = pgDup(pgGetWidget(wField,PG_WP_TEXT)); /* Send it back up to the caller's context */ pgChangeContext(str,-1); break; } else if (from == wCancel) break; } pgLeaveContext(); return str; }