xWindow * pxWindowCreate(int eWnd) { xWindowProps *xP; if (pxWindowManagerGetWindow(eWnd)) // window with such id is already created return NULL; xWindow *pxW = pxWidgetCreate(usWindowManagerGetWindowX(), usWindowManagerGetWindowY(), usWindowManagerGetWindowW(), usWindowManagerGetWindowH(), pxWindowManagerGet(), true); if (pxW) { pxW->eType = WidgetWindow; pxW->pxOnDispose = prvDispose; vWidgetSetBgColor(pxW, EMGUI_COLOR_WHITE, false); vWidgetSetVisible(pxW, false); xP = malloc(sizeof(xWindowProps)); if (!xP) { vWidgetDispose(pxW); return NULL; } memset(xP, 0, sizeof(xWindowProps)); pxW->pvProp = xP; xP->eId = eWnd; xP->strHeader = (char*)malloc(EMGUI_WINDOW_HEADER_LENGTH + 1); xP->strHeader[0] = '\0'; } return pxW; }
xProgressBar* pxProgressBarCreate(u16 usX, u16 usY, u16 usW, u16 usH, xWidget *pxWidParent){ xProgressBar *pxW; xProgressBarProps *xP; if (usH < usFontGetStrH(pcBarText, FONT_ASCII_16_X) + 4) usH = usFontGetStrH(pcBarText, FONT_ASCII_16_X) + 4; pxW = pxWidgetCreate(usX, usY, usW, usH, pxWidParent, TRUE); pxW->eType = WidgetProgressBar; vWidgetSetBgColor(pxW, 65535, FALSE); vWidgetSetTransparency(pxW, FALSE); vWidgesSetClickable(pxW, FALSE); pxW->pxDrawHandler = prvDraw; xP = pvMemoryMalloc(sizeof(xProgressBarProps), MEMORY_EXT); xP->usBarColor = ColorMessageHeaderBackground; xP->usExProc = 0; xP->pxBarLabel = pxLabelCreate(0, 0, usW, usFontGetStrH(pcBarText, FONT_ASCII_16_X) + 2, pcBarText, FONT_ASCII_16_X, strlen(pcBarText) + 5, pxW); vLabelSetTextAlign(xP->pxBarLabel, LABEL_ALIGN_CENTER); vLabelSetVerticalAlign(xP->pxBarLabel, LABEL_ALIGN_MIDDLE); pxW->pvProp = xP; return pxW; }
xConsole * pxConsoleCreate(){ xConsole *pxW; xConsoleProps *xP; u16 usX0, usY0, usX1, usY1; xConsoleWnd = pxWindowCreate(WINDOW_CONSOLE); vWindowSetFullScreen(xConsoleWnd, TRUE); usX0 = 0; usY0 = 0; usX1 = usWidgetGetW(xConsoleWnd); usY1 = usWidgetGetH(xConsoleWnd); if(xDefCon) return NULL; //Console is singleton ATM. if(!xConsoleWnd) return NULL; //У консоли всегда должен быть родитель. Пока должен быть. pxW = pxWidgetAlloc(); if(bWidgetInit(pxW, usX0, usY0, usX1, usY1, xConsoleWnd, TRUE)){ pxW->eType = WidgetConsole; vWidgetSetClickable(pxW, FALSE); vWidgetSetBgColor(pxW, 0, FALSE); xP = pvMemoryMalloc(sizeof(xConsoleProps), MEMORY_EXT); if(!xP) return NULL; xP->ucChXCount = usWidgetGetW(pxW)/CHAR_PLACE_WIDTH; //TODO: Get FontHeight here xP->ucChYCount = usWidgetGetH(pxW)/CHAR_PLACE_HEIGHT; //Using Monotype xP->ucCaretX = 0; xP->ucCaretY = 0; xP->usScroll = 0; xP->xqConsole = xQueueCreate(xP->ucChXCount * xP->ucChYCount, sizeof(char)); if(!xP->xqConsole) return NULL; pxW->pvProp = xP; pxW->pxDrawHandler = prvConsoleDraw; vWriteSetCallback(vConsoleDefPutChar); xDefCon = pxW; return pxW; } vMemoryFree(pxW); return NULL; }
xWidget * pxModalDialogWindowCreate(){ // X0, Y0 - координаты расположения виджетов u16 usX, usY; xThisWnd = pxWindowCreate(WINDOW_MODAL); vWidgetSetBgColor(xThisWnd, ColorEcgBackground, FALSE); vWindowSetOnOpenHandler(xThisWnd, prvOnOpenHandler); vWindowSetOnOpenRequestHandler(xThisWnd, prvOnOpenRequestHandler); vWindowSetOnCloseHandler(xThisWnd, prvOnCloseHandler); vWindowSetOnCloseRequestHandler(xThisWnd, prvOnCloseRequestHandler); xMessageHeader = pxLabelCreate(0, 0, usWidgetGetW(xThisWnd), usStatusBarGetH(), "ModalDialogHeader", FONT_ASCII_16_X, 0, xThisWnd); vWidgetSetBgColor(xMessageHeader, ColorMessageHeaderBackground, FALSE); vLabelSetTextAlign(xMessageHeader, LABEL_ALIGN_CENTER); vLabelSetVerticalAlign(xMessageHeader, LABEL_ALIGN_MIDDLE); vLabelSetTextColor(xMessageHeader, ColorMessageHeaderText); usY = (usInterfaceGetWindowH() * 4 )/10 - usStatusBarGetH(); xMessage = pxLabelCreate(0, usWidgetGetH(xMessageHeader), usWidgetGetW(xThisWnd), usY, "ModalDialogText", FONT_ASCII_16_X, MODAL_DIALOG_MAX_MSG_LENGTH, xThisWnd); bLabelSetMultiline(xMessage, TRUE); vLabelSetTextAlign(xMessage, LABEL_ALIGN_CENTER); vLabelSetVerticalAlign(xMessage, LABEL_ALIGN_MIDDLE); usY = usWidgetGetY1(xMessage, FALSE); xPBar = pxProgressBarCreate(PB_BORDER, usY, usWidgetGetW(xThisWnd) - PB_BORDER * 2, 30, xThisWnd); vProgressBarSetProcExec(xPBar, 55); usY = (usInterfaceGetWindowH()/2 + LCD_TsBtn_SIZE/3); usX = 0; for(int c = 0; c < MODAL_DIALOG_MAX_BUTTONS; c++){ xButtons[c] = pxMenuButtonCreate(usX, usY, pxPictureGet(Pic_ButtonOk), "", prvButtonHandler, xThisWnd); usX += LCD_TsBtn_SIZE; vWidgetHide(xButtons[c]); } return xThisWnd; }