Пример #1
0
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;
}
Пример #2
0
int iModalDialogOpen(int iDlgId, char const * sBtns, char const * sHdr, char const* sMsg){
  xModalDialog * xDlg;
  xModalDialog * xDlgNext;

  /*/Проверка ограничения макс. количества открытых диалогов
  if(cDialogCount >= MODAL_DIALOG_MAX_COUNT){
    vInterfaceOpenWindow(WINDOW_MODAL);
    return -1;
  }*/

  //Если такой диалог уже активен - Сбросить его обработчики и конфигурацию.
  if((xDlg = prvDlgIsActive(iDlgId))){
    prvDlgRefresh(xDlg, sBtns, sHdr, sMsg);
    prvDlgShowActive();
    vInterfaceOpenWindow(WINDOW_MODAL);
    return -1;
  }

  //Диалог есть где-то в стеке, его надо поднять
  if((xDlg = prvDlgIsOpened(iDlgId, &xDlgNext))){
    prvDlgRefresh(xDlg, sBtns, sHdr, sMsg);
    prvDelDlgFromStack(xDlg, xDlgNext);
  }else{
    //Диалога в стеке нет, создаем новую структуру
    xDlg = pvMemoryMalloc(sizeof(xModalDialog), MEMORY_EXT);
    //cDialogCount ++;
    memcpy(xDlg->sDialogConfig, sBtns, MODAL_DIALOG_MAX_BUTTONS + 1);
    xDlg->sDialogConfig[MODAL_DIALOG_MAX_BUTTONS] = '\0';
    xDlg->sHdr = sHdr;
    xDlg->sMsg = sMsg;
    xDlg->cProgress = -1;
    xDlg->bCanClose = TRUE;
    xDlg->pxDefaultHandler = NULL;
    
    for(int c = 0; c < MODAL_DIALOG_MAX_BUTTONS; c++)
      xDlg->pxClickHandlers[c] = NULL;

    //Выставляем идентификатор диалога, по которому
    //будет возможность дальнейшей работы с этим диалогом.
    if(iDlgId != MODAL_AUTO)
      xDlg->usDlgID = iDlgId;
    else{
      xDlg->usDlgID = usDlgID;
      prvIncDlgId();
    }
  }
  
  //делаем диалог активным
  xDlg->pxPrev = xMDActive;
  xMDActive = xDlg;

  prvDlgShowActive();
  
  vInterfaceOpenWindow(WINDOW_MODAL);
  vWidgetInvalidate(xThisWnd);
  
  return xDlg->usDlgID;
}
Пример #3
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;
}
Пример #4
0
xPictureStack *pxPictureStackCreate(u16 usX, u16 usY, xPicture xPic, xWidget *pxWidParent){
  xPictureStack *pxW;
  xPictureStackProps *xP;
  xPictureStackItem *xI;
  
  pxW = pvMemoryMalloc(sizeof(xWidget), MEMORY_EXT);
  
  if(bWidgetInit(pxW, usX, usY, 1, 1, pxWidParent, TRUE)){
    
    bWidgetSetBgPicture(pxW, xPic);
    
    xI = pvMemoryMalloc(sizeof(xPictureStackItem), MEMORY_EXT);

    if(!xI)
      return NULL;

    xI->xPic = xPic;
    xI->pxNext = NULL;

    xP = pvMemoryMalloc(sizeof(xPictureStackProps), MEMORY_EXT);
    
    if(!xP)
      return NULL;

    xP->cItemNumber = 0;
    xP->cItemCount = 1;

    xP->xItems = xI;
    
    pxW->pvProp = xP;
        
    pxW->eType = WidgetPictureStack;
      
    pxW->pxDrawHandler = prvDraw;
    
    return pxW;
  }
  else{
    vMemoryFree(pxW);
    return NULL;
  }
}
Пример #5
0
xWidget * pxWidgetCreate(u16 usX0, u16 usY0, u16 usX1, u16 usY1, xWidget *pxWidParent, bool bUseWH){
  xWidget *pxW;
  pxW = pvMemoryMalloc(sizeof(xWidget), MEMORY_EXT);
  
  if(!pxW)
    return NULL;
  
  if(bWidgetInit(pxW, usX0, usY0, usX1, usY1, pxWidParent, bUseWH))
    return pxW;
  else{
    vMemoryFree(pxW);
    return NULL;
  }
}
Пример #6
0
bool bPictureStackAddItem(xWidget *pxW, xPicture xPic){
  xPictureStackProps *xP;
  xPictureStackItem *xI;
  xPictureStackItem *xNext;
  
  if(!pxW)
    return FALSE;
  
  if(pxW->eType != WidgetPictureStack)
    return FALSE;
  
  xP = pxW->pvProp;
  
  if(xP->cItemCount == PICTURE_STACK_MAX_SIZE)
    return FALSE;
  
  //Находим последний элемент в списке
  xNext = xP->xItems;

  while(xNext){
    xI = xNext;
    xNext = xI->pxNext;
  }

  //Allocate memory for new Item
  xNext = pvMemoryMalloc(sizeof(xPictureStackItem), MEMORY_EXT);

  if(!xNext)
    return NULL;

  xNext->xPic = xPic;
  xNext->pxNext = NULL;

  //TODO: Check Picture Dimensions here
  xI->pxNext = xNext;
  xP->cItemCount++;

  return TRUE;
}
Пример #7
0
xWidget * pxWidgetAlloc(){
  return pvMemoryMalloc(sizeof(xWidget), MEMORY_EXT);
}