Example #1
0
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;
}
Example #2
0
static bool prvDraw(xWidget *pxW){
  xProgressBarProps *xP;

  if (!(xP = pxWidgetGetProps(pxW, WidgetProgressBar)))
    return FALSE;

  if(pxW->bValid)
    return FALSE;
// Draw:
  bWidgetDraw(pxW);

  u16 usXfrom = pxW->usX0 + 1;
  u16 usXto = pxW->usX0 + ((pxW->usX1 - 1 - pxW->usX0) * xP->usExProc) / 100;
  u16 usYfrom = pxW->usY0 + usWidgetGetH(xP->pxBarLabel);
  u16 usYto = pxW->usY1 - 1;

  vFramebufferRectangle(pxW->usX0, usYfrom, pxW->usX1 - 1, usYto, 0, FALSE);

  usYfrom++;
  usYto--;
  while (usXfrom <= usXto - 1){
    vFramebufferVLine(usXfrom, usYfrom, usYto, xP->usBarColor);
    ++usXfrom;
  }

  return TRUE;
}
Example #3
0
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;
}
Example #4
0
bool prvDraw(xConsole *pxW){
  xConsoleProps *xP;
  u16 usX, usY;
  
  char cCharOffs = 0;
  u8   ucPrintChar;
  
  u16  usMaxCharPrint;
  
  bool bClearRow = FALSE;
  
  bool bRedraw = FALSE;
  
  xP = pxW->pvProp;
  
  usMaxCharPrint = xP->ucChXCount * xP->ucChXCount;
    
  if(!xP->xqConsole)
    return FALSE;
  
  while(xQueueReceive( xP->xqConsole, &( ucPrintChar ), 0 ) == pdTRUE){
        
    bRedraw = TRUE;
    
    cCharOffs = (CHAR_PLACE_WIDTH - ucFontGetCharW(ucPrintChar, CONSOLE_FONT)) / 2;
    
    usX = xP->ucCaretX * CHAR_PLACE_WIDTH + pxW->usX0;
    usY = xP->ucCaretY * CHAR_PLACE_HEIGHT + pxW->usY0;
    
    usX += cCharOffs;
    
    if(ucPrintChar != '\n' && ucPrintChar != '\r') {
      vFramebufferPutChar(usX, usY, ucPrintChar, EM_GUI_SMALL_FONT, CONSOLE_COLOR_FG, CONSOLE_COLOR_BG, FALSE);
      xP->ucCaretX++;
    }
    else{
      xP->ucCaretX = 0;
      xP->ucCaretY++;
      bClearRow = TRUE;
    }
    
    if(xP->ucCaretX >= xP->ucChXCount){
      xP->ucCaretX = 0;
      xP->ucCaretY++;
      bClearRow = TRUE;
    }
    
    if(xP->ucCaretY >= xP->ucChYCount){
      xP->ucCaretY = 0;
      bClearRow = TRUE;
      xP->usScroll = 1;
    }
    
    if(xP->usScroll){
      xP->usScroll = CHAR_PLACE_WIDTH * (xP->ucCaretY + 1);
    }
    
    if(xP->usScroll > usWidgetGetH(pxW))
      xP->usScroll = 1;
    
    vFramebufferScroll(xP->usScroll);
    
    //Был перенос строки
    if(bClearRow){
      usX = xP->ucCaretX * CHAR_PLACE_WIDTH + pxW->usX0;
      usY = xP->ucCaretY * CHAR_PLACE_HEIGHT + pxW->usY0;
      if(xP->ucCaretY != xP->ucChXCount - 1)
        vFramebufferRectangle(pxW->usX0, usY, pxW->usX1, usY + CHAR_PLACE_HEIGHT, CONSOLE_COLOR_BG, TRUE);
      else
        vFramebufferRectangle(pxW->usX0, usY, pxW->usX1, usY + CHAR_PLACE_HEIGHT, CONSOLE_COLOR_BG, TRUE);
      bClearRow = FALSE;
    }
        
    if(!usMaxCharPrint)
      break;
    usMaxCharPrint--;
  }
  
  return bRedraw;
}
Example #5
0
bool bWidgetSetBgPicture(xWidget *pxW, unsigned short const* pusBgPicture){
  if(!pxW)
    return FALSE;
  bool bInvalidateParent = FALSE;
  
  if(usPictureGetW(pusBgPicture) < usWidgetGetW(pxW) || usPictureGetH(pusBgPicture) < usWidgetGetH(pxW))
    bInvalidateParent = TRUE;
  
  if(!bWidgetResize(pxW, usPictureGetW(pusBgPicture), usPictureGetH(pusBgPicture)))
    return FALSE;
  //do not invalidate if picture is not changed
  if(pxW->pusBgPicture != pusBgPicture){
    pxW->pusBgPicture = pusBgPicture;
    vWidgetInvalidate(pxW);
  }
  if(!pusBgPicture || bInvalidateParent)
    pxW->bInvalidateParent = TRUE;
  return TRUE;
};