/********************************************************************* * * _cbFrameWinControl */ static void _cbFrameWinControl(WM_MESSAGE * pMsg) { WM_HWIN hItem; int xSize; int ySize; int NCode; int Id; switch (pMsg->MsgId) { case WM_KEY: WM_SendMessage(WM_HBKWIN, pMsg); break; case WM_INIT_DIALOG: hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_PROGBAR0); PROGBAR_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER); PROGBAR_SetFont(hItem, &GUI_FontD6x8); hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_HALT); BUTTON_SetFocussable(hItem, 0); hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_NEXT); BUTTON_SetFocussable(hItem, 0); hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT0); TEXT_SetText(hItem, "Intro"); TEXT_SetFont(hItem, &GUI_Font8_ASCII); break; case WM_PAINT: xSize = WM_GetWindowSizeX(pMsg->hWin); ySize = WM_GetWindowSizeY(pMsg->hWin); GUI_DrawGradientV(0, 0, xSize - 1, ySize - 1, 0xFFFFFF, 0xDCCEC0); break; case WM_NOTIFY_PARENT: Id = WM_GetId(pMsg->hWinSrc); NCode = pMsg->Data.v; switch (NCode) { case WM_NOTIFICATION_RELEASED: switch (Id) { case GUI_ID_HALT: if (_Halt) { _Halt = 0; _HaltTime = GUI_GetTime() - _HaltTimeStart; WM_MakeModal(0); } else { _Halt = 1; _HaltTimeStart = GUI_GetTime() - _HaltTime; WM_MakeModal(pMsg->hWin); } break; case GUI_ID_NEXT: _Next = 1; // Will be set to 0 by GUIDEMO_GetNextState() _ClearHalt(); // Clear _Halt, so the next sample demonstrates immediately break; } break; } break; default: WM_DefaultProc(pMsg); } }
/********************************************************************* * * _Paint */ static void _Paint(PROGBAR_Handle hObj) { PROGBAR_Obj* pObj = PROGBAR_H2P(hObj); WM_HWIN hWin = hObj; int xsize = WM_GetWindowSizeX(hWin); int ysize = WM_GetWindowSizeY(hWin); int tm; GUI_SetFont(pObj->pFont); { int x1; int FontSizeY = GUI_GetFontSizeY(); int xText = 0; int yText = (ysize-FontSizeY)/2; GUI_RECT r; int XSizeChar; char ac[5]; /* Just enough for the percentage */ char*s = ac; const char* pText; if (pObj->hpText != WM_HMEM_NULL) { pText = (const char*) WM_HMEM2Ptr(pObj->hpText); } else { GUI_AddDecMin((100*(I32)(pObj->v-pObj->Min))/(pObj->Max-pObj->Min), &s); *s = '%'; *(s+1) =0; pText = &ac[0]; } /* Calculate text positions */ XSizeChar = GUI_GetStringDistX(pText); x1 = _Value2X(hObj, pObj->v); switch (pObj->TextAlign &GUI_TA_HORIZONTAL) { case GUI_TA_CENTER: xText = (xsize-XSizeChar)/2; break; case GUI_TA_LEFT: xText = 0; break; case GUI_TA_RIGHT: xText = xsize-XSizeChar-1; break; } xText += pObj->XOff; yText += pObj->YOff; tm = GUI_SetTextMode(GUI_TM_TRANS); /* Draw left bar */ r.x0=0; r.x1=x1-1; r.y0=0; r.y1 = GUI_YMAX; WM_SetUserClipArea(&r); _DrawPart(pObj, 0, xText, yText, pText); /* Draw right bar */ r.x0=r.x1+1; r.x1=GUI_XMAX; WM_SetUserClipArea(&r); _DrawPart(pObj, 1, xText, yText, pText); } WM_SetUserClipArea(NULL); GUI_SetTextMode(tm); }
/********************************************************************* * * _Value2X */ static int _Value2X(PROGBAR_Handle hObj, int v) { PROGBAR_Obj* pObj = PROGBAR_H2P(hObj); int xsize = WM_GetWindowSizeX(hObj); int Min = pObj->Min; int Max = pObj->Max; if (v<Min) v = Min; if (v> Max) v = Max; return (xsize* (I32)(v-Min)) / (Max-Min); }
/** * @brief Callback routine of the status bar * @param pMsg: pointer to a data structure of type WM_MESSAGE * @retval None */ static void _cbStatus(WM_MESSAGE* pMsg) { int xSize, ySize; static uint8_t TempStr[50]; static WM_HTIMER hTimerTime; WM_HWIN hWin; hWin = pMsg->hWin; switch (pMsg->MsgId) { case WM_CREATE: hTimerTime = WM_CreateTimer(hWin, ID_TIMER_TIME, 1000, 0); break; case WM_DELETE: WM_DeleteTimer(hTimerTime); break; case WM_TIMER: WM_InvalidateWindow(hWin); WM_RestartTimer(pMsg->Data.v, 0); break; case WM_PAINT: xSize = WM_GetWindowSizeX(hWin); ySize = WM_GetWindowSizeY(hWin); /* Draw background */ GUI_SetColor(0x303030); GUI_FillRect(0, 0, xSize, ySize - 3); GUI_SetColor(0x808080); GUI_DrawHLine(ySize - 2, 0, xSize); GUI_SetColor(0x404040); GUI_DrawHLine(ySize - 1, 0, xSize); GUI_SetTextMode(GUI_TM_TRANS); GUI_SetColor(GUI_WHITE); GUI_SetFont(GUI_FONT_13B_ASCII); /* Serial port*/ if (pdTRUE == BluetoothReady) { GUI_DrawBitmap(&bmICON_BluetoothStatus, xSize - 155, 0); } if (pdTRUE == GPSReady) { GUI_DrawBitmap(&bmICON_GPS_Status, xSize - 125, 0); } sprintf((char *)TempStr, "CPU : %d %%", FreeRTOS_GetCPUUsage()); if (75 > FreeRTOS_GetCPUUsage()) { GUI_SetColor(GUI_WHITE); } else { GUI_SetColor(GUI_RED); } GUI_DispStringAt((char *)TempStr, 4, 4); GUI_SetColor(GUI_WHITE); break; default: WM_DefaultProc(pMsg); break; } }
/********************************************************************* * * _ShowDemo */ static void _ShowDemo(void) { WM_HWIN hWin0, hWin1, hWin2, hFrame1, hFrame2, hClient1, hClient2; WM_SetCallback(WM_HBKWIN, _cbBkWin); hFrame1 = FRAMEWIN_CreateEx( 10, 30, 140, 140, 0, WM_CF_SHOW, FRAMEWIN_CF_MOVEABLE, 0, "Early Clipping", _cbFrameWin1); hFrame2 = FRAMEWIN_CreateEx(170, 30, 140, 140, 0, WM_CF_SHOW, FRAMEWIN_CF_MOVEABLE, 0, "Late Clipping", _cbFrameWin2); hClient1 = WM_GetClientWindow(hFrame1); hClient2 = WM_GetClientWindow(hFrame2); _hWin1 = WM_CreateWindowAsChild(0, 0, WM_GetWindowSizeX(hClient1), WM_GetWindowSizeY(hClient1), hClient1, WM_CF_SHOW, _cbFrameWin1, 0); _hWin2 = WM_CreateWindowAsChild(0, 0, WM_GetWindowSizeX(hClient2), WM_GetWindowSizeY(hClient2), hClient2, WM_CF_SHOW | WM_CF_LATE_CLIP, _cbFrameWin2, 0); _hBut1 = BUTTON_CreateEx( 10, 210, 140, 20, 0, WM_CF_SHOW, 0, 1); _hBut2 = BUTTON_CreateEx(170, 210, 140, 20, 0, WM_CF_SHOW, 0, 2); hWin0 = FRAMEWIN_CreateEx( 60, 80, 40, 40, 0, WM_CF_SHOW | WM_CF_STAYONTOP, FRAMEWIN_CF_MOVEABLE, 0, "Top 0", _cbTop); hWin1 = FRAMEWIN_CreateEx(220, 80, 40, 40, 0, WM_CF_SHOW | WM_CF_STAYONTOP, FRAMEWIN_CF_MOVEABLE, 0, "Top 1", _cbTop); hWin2 = FRAMEWIN_CreateEx(140, 170, 40, 40, 0, WM_CF_SHOW | WM_CF_STAYONTOP, FRAMEWIN_CF_MOVEABLE, 0, "Top 2", _cbTop); FRAMEWIN_SetResizeable(hWin0, 1); FRAMEWIN_SetResizeable(hWin1, 1); FRAMEWIN_SetResizeable(hWin2, 1); BUTTON_SetText(_hBut1, "Invalidate"); BUTTON_SetText(_hBut2, "Reset counters"); while(1) { GUI_Delay(50); } }
/******************************************************************* * * _cbChild */ static void _cbChild(WM_MESSAGE* pMsg) { int x, y; switch (pMsg->MsgId) { case WM_PAINT: GUI_SetBkColor(_ChildColor); GUI_Clear(); GUI_SetColor(GUI_RED); GUI_SetFont(&GUI_Font24_ASCII); x = WM_GetWindowSizeX(pMsg->hWin); y = WM_GetWindowSizeY(pMsg->hWin); GUI_DispStringHCenterAt("Child window", x / 2, (y / 2) - 12); break; default: WM_DefaultProc(pMsg); } }
/******************************************************************* * * _cbDemoCallback2 */ static void _cbDemoCallback2(WM_MESSAGE* pMsg) { int x, y; switch (pMsg->MsgId) { case WM_PAINT: GUI_SetBkColor(GUI_MAGENTA); GUI_Clear(); GUI_SetColor(GUI_YELLOW); GUI_SetFont(&GUI_FontComic18B_1); x = WM_GetWindowSizeX(pMsg->hWin); y = WM_GetWindowSizeY(pMsg->hWin); GUI_DispStringHCenterAt("Window 2\nanother Callback", x / 2, (y / 4) - 18); break; default: WM_DefaultProc(pMsg); } }
/******************************************************************* * * _cbWindow2 */ static void _cbWindow2(WM_MESSAGE* pMsg) { int x, y; switch (pMsg->MsgId) { case WM_PAINT: GUI_SetBkColor(_WindowColor2); GUI_Clear(); GUI_SetColor(GUI_WHITE); GUI_SetFont(&GUI_Font24_ASCII); x = WM_GetWindowSizeX(pMsg->hWin); y = WM_GetWindowSizeY(pMsg->hWin); GUI_DispStringHCenterAt("Window 2", x / 2, (y / 4) - 12); break; case WM_SIZE: WM_InvalidateWindow(_hChild); break; default: WM_DefaultProc(pMsg); } }
/******************************************************************* * * _cbWindow2 */ static void _cbWindow2(WM_MESSAGE* pMsg) { GUI_RECT Rect; int x, y; switch (pMsg->MsgId) { case WM_PAINT: WM_GetInsideRect(&Rect); GUI_SetBkColor(_WindowColor2); GUI_SetColor(_FrameColor2); GUI_ClearRectEx(&Rect); GUI_DrawRectEx(&Rect); GUI_SetColor(GUI_WHITE); GUI_SetFont(&GUI_Font24_ASCII); x = WM_GetWindowSizeX(pMsg->hWin); y = WM_GetWindowSizeY(pMsg->hWin); GUI_DispStringHCenterAt("Window 2", x / 2, (y / 4) - 12); break; default: WM_DefaultProc(pMsg); } }
/********************************************************************* * * _cbFrameWinInfo */ static void _cbFrameWinInfo(WM_MESSAGE * pMsg) { int xSize, ySize; switch (pMsg->MsgId) { case WM_KEY: WM_SendMessage(WM_HBKWIN, pMsg); break; case WM_CREATE: xSize = LCD_GetXSize(); WM_SetWindowPos(pMsg->hWin, xSize >> 1, 0, xSize >> 1, INFO_SIZE_Y); break; case WM_PAINT: xSize = WM_GetWindowSizeX(pMsg->hWin); ySize = WM_GetWindowSizeY(pMsg->hWin); GUI_DrawGradientV(0, 0, xSize - 1, ySize - 1, 0xFFFFFF, 0xDCCEC0); break; default: WM_DefaultProc(pMsg); } }
/******************************************************************* * * _cbChild */ static void _cbChild(WM_MESSAGE * pMsg) { GUI_RECT Rect; int x; int y; switch (pMsg->MsgId) { case WM_PAINT: WM_GetInsideRect(&Rect); GUI_SetBkColor(_ChildColor); GUI_SetColor(_ChildFrame); GUI_ClearRectEx(&Rect); GUI_DrawRectEx(&Rect); GUI_SetColor(GUI_RED); GUI_SetFont(&GUI_Font24_ASCII); x = WM_GetWindowSizeX(pMsg->hWin); y = WM_GetWindowSizeY(pMsg->hWin); GUI_DispStringHCenterAt("Child window", x / 2, (y / 2) - 12); break; default: WM_DefaultProc(pMsg); } }
/********************************************************************* * * _CreateMenu */ static WM_HWIN _CreateMenu(WM_HWIN hParent) { MENU_Handle hMenu, hMenuFile, hMenuEdit, hMenuHelp, hMenuRecent; // Create main menu hMenu = MENU_CreateEx(0, 0, 0, 0, WM_UNATTACHED, 0, MENU_CF_HORIZONTAL, ID_MENU); // Create sub menus hMenuFile = MENU_CreateEx(0, 0, 0, 0, WM_UNATTACHED, 0, MENU_CF_VERTICAL, 0); hMenuEdit = MENU_CreateEx(0, 0, 0, 0, WM_UNATTACHED, 0, MENU_CF_VERTICAL, 0); hMenuHelp = MENU_CreateEx(0, 0, 0, 0, WM_UNATTACHED, 0, MENU_CF_VERTICAL, 0); hMenuRecent = MENU_CreateEx(0, 0, 0, 0, WM_UNATTACHED, 0, MENU_CF_VERTICAL, 0); // Add menu items to menu 'Recent' _AddMenuItem(hMenuRecent, 0, "File 0", ID_MENU_RECENT_0, 0); _AddMenuItem(hMenuRecent, 0, "File 1", ID_MENU_RECENT_1, 0); _AddMenuItem(hMenuRecent, 0, "File 2", ID_MENU_RECENT_2, 0); _AddMenuItem(hMenuRecent, 0, "File 3", ID_MENU_RECENT_3, 0); // Add menu items to menu 'File' _AddMenuItem(hMenuFile, 0, "New", ID_MENU_FILE_NEW, 0); _AddMenuItem(hMenuFile, 0, "Open", ID_MENU_FILE_OPEN, 0); _AddMenuItem(hMenuFile, 0, "Close", ID_MENU_FILE_CLOSE, 0); _AddMenuItem(hMenuFile, 0, 0, 0, MENU_IF_SEPARATOR); _AddMenuItem(hMenuFile, hMenuRecent, "Files...", ID_MENU_FILE_RECENT, 0); _AddMenuItem(hMenuFile, 0, 0, 0, MENU_IF_SEPARATOR); _AddMenuItem(hMenuFile, 0, "Exit", ID_MENU_FILE_EXIT, 0); // Add menu items to menu 'Edit' _AddMenuItem(hMenuEdit, 0, "Undo", ID_MENU_EDIT_UNDO, 0); _AddMenuItem(hMenuEdit, 0, "Redo", ID_MENU_EDIT_REDO, 0); _AddMenuItem(hMenuEdit, 0, 0, 0, MENU_IF_SEPARATOR); _AddMenuItem(hMenuEdit, 0, "Copy", ID_MENU_EDIT_COPY, 0); _AddMenuItem(hMenuEdit, 0, "Paste", ID_MENU_EDIT_PASTE, 0); _AddMenuItem(hMenuEdit, 0, "Delete", ID_MENU_EDIT_DELETE, 0); // Add menu items to menu 'Help' _AddMenuItem(hMenuHelp, 0, "About", ID_MENU_HELP_ABOUT, 0); // Add menu items to main menu _AddMenuItem(hMenu, hMenuFile, "File", 0, 0); _AddMenuItem(hMenu, hMenuEdit, "Edit", 0, 0); _AddMenuItem(hMenu, hMenuHelp, "Help", 0, 0); // Attach menu to parent window MENU_Attach(hMenu, hParent, 0, 0, WM_GetWindowSizeX(hParent), 0, 0); return hMenu; }
/********************************************************************* * * EDIT_SetCursorAtPixel */ void EDIT_SetCursorAtPixel(EDIT_Handle hObj, int xPos) { if (hObj) { EDIT_Obj* pObj; WM_LOCK(); pObj = EDIT_H2P(hObj); if (pObj->hpText) { const GUI_FONT GUI_UNI_PTR *pOldFont; int xSize, TextWidth, NumChars; const char GUI_UNI_PTR * pText; pText = (char*) GUI_ALLOC_h2p(pObj->hpText); pOldFont = GUI_SetFont(pObj->Props.pFont); xSize = WM_GetWindowSizeX(hObj); TextWidth = GUI_GetStringDistX(pText); switch (pObj->Props.Align & GUI_TA_HORIZONTAL) { case GUI_TA_HCENTER: xPos -= (xSize - TextWidth + 1) / 2; break; case GUI_TA_RIGHT: xPos -= xSize - TextWidth - (pObj->Props.Border + EDIT_XOFF); break; default: xPos -= (pObj->Props.Border + EDIT_XOFF) + pObj->Widget.pEffect->EffectSize; } NumChars = GUI__GetNumChars(pText); if (xPos < 0) { EDIT__SetCursorPos(pObj, 0); } else if (xPos > TextWidth) { EDIT__SetCursorPos(pObj, NumChars); } else { EDIT__SetCursorPos(pObj, GUI__GetCursorPosChar(pText, xPos, NumChars)); } GUI_SetFont(pOldFont); EDIT_Invalidate(hObj); } WM_UNLOCK(); } }
/********************************************************************* * * _SetCursor */ static void _SetCursor(EDIT_Handle hObj, EDIT_Obj* pObj, int x) { int xPos, xSize, PixelLen, Len; char * s = (char*) WM_HMEM2Ptr(pObj->hpText); const GUI_FONT *pOldFont = GUI_SetFont(pObj->pFont); xSize = WM_GetWindowSizeX(hObj); PixelLen = GUI_GetStringDistX(s); xPos = x; switch (pObj->Align & GUI_TA_HORIZONTAL) { case GUI_TA_CENTER: xPos -= (xSize - PixelLen + 1) / 2; break; case GUI_TA_LEFT: xPos -= (pObj->Border + EDIT_XOFF); break; case GUI_TA_RIGHT: xPos -= xSize - PixelLen - (pObj->Border + EDIT_XOFF); break; } Len = (int)strlen(s); if (xPos < 0) { pObj->CursorPos = 0; } else if (xPos > PixelLen) { pObj->CursorPos = Len; } else { int i, x; for (i = 0, x = 0; (i < Len) && (x < xPos); i++) { int xLenChar = GUI_GetCharDistX(*(s + i)); if (xPos < (x + xLenChar)) break; x += xLenChar; } pObj->CursorPos = i; EDIT_Invalidate(hObj); } GUI_SetFont(pOldFont); }
/** * @brief Callback routine of desktop window status. * @param pMsg: pointer to data structure of type WM_MESSAGE * @retval None */ static void _cbStatus(WM_MESSAGE * pMsg) { int xSize, ySize; static uint8_t TempStr[50]; static WM_HTIMER hTimerTime; static WM_HTIMER hSpriteTime; RTC_TimeTypeDef RTC_Time; RTC_DateTypeDef RTC_DateStructure; uint8_t sec, min, hour, day, month; uint16_t year; WM_HWIN hWin; hWin = pMsg->hWin; switch (pMsg->MsgId) { case WM_CREATE: hTimerTime = WM_CreateTimer(hWin, ID_TIMER_TIME, 1000, 0); if(settings.b.enable_sprite) { hSpriteTime = WM_CreateTimer(hWin, ID_SPRITE_TIME, 50, 0); } break; case WM_DELETE: WM_DeleteTimer(hTimerTime); if(settings.b.enable_sprite) { WM_DeleteTimer(hSpriteTime); } break; case WM_TIMER: if( WM_GetTimerId(pMsg->Data.v) == ID_TIMER_TIME) { WM_InvalidateWindow(hWin); WM_RestartTimer(pMsg->Data.v, 1000); } else if( WM_GetTimerId(pMsg->Data.v) == ID_SPRITE_TIME) { if(settings.b.enable_sprite) { if(SpriteDisabled == 0) { _MoveSprite(&_aSprite[0]); } } WM_RestartTimer(pMsg->Data.v, 100); } break; case WM_PAINT: xSize = WM_GetWindowSizeX(hWin); ySize = WM_GetWindowSizeY(hWin); /* Draw background */ GUI_SetColor(0x40303030); GUI_FillRect(0, 0, xSize , ySize - 3); GUI_SetColor(0x808080); GUI_DrawHLine(ySize - 2, 0, xSize ); GUI_SetColor(0x404040); GUI_DrawHLine(ySize - 1, 0, xSize ); /* Draw time & Date */ GUI_SetTextMode(GUI_TM_TRANS); GUI_SetColor(GUI_WHITE); GUI_SetFont(GUI_FONT_13B_ASCII); k_GetTime(&RTC_Time); sec = RTC_Time.Seconds; min = RTC_Time.Minutes; hour = RTC_Time.Hours; k_GetDate(&RTC_DateStructure); sprintf((char *)TempStr, "%02d:%02d:%02d", hour , min, sec); GUI_DispStringAt((char *)TempStr, xSize - 50, 4); year = RTC_DateStructure.Year + 2014; month = RTC_DateStructure.Month; day = RTC_DateStructure.Date; if((day > 0) && (day <= 31) && (month > 0)&& (month <= 12) && (year >= 1900)) { sprintf((char *)TempStr, "%02d, %s, %04d", day , strMonth[month-1], year); } else { sprintf((char *)TempStr, "01, January, 2014"); } GUI_DispStringHCenterAt((char *)TempStr, xSize / 2, 4); /* USB */ if(k_StorageGetStatus(USB_DISK_UNIT)) { GUI_DrawBitmap(&bmusbdisk, xSize - 80, 0); } /* MSD */ if(k_StorageGetStatus(MSD_DISK_UNIT)) { GUI_DrawBitmap(&bmmicrosd, xSize - 80 - 35 * k_StorageGetStatus(USB_DISK_UNIT) , 0); } sprintf((char *)TempStr, "CPU : %d %%", osGetCPUUsage()); if(osGetCPUUsage() > 95 ) { /* waiting for user input when using dialog box*/ sprintf((char *)TempStr, "CPU : 95 %%"); } GUI_DispStringAt( (char *)TempStr, 50, 4); break; default: WM_DefaultProc(pMsg); } }
static void SynthProc(WM_MESSAGE* pMsg) { int x; int NCode,Id; ProcessCommComponent(pMsg, &hCOMPcomm); switch (pMsg->MsgId) { case WM_CREATE: SynthCreateItems(pMsg->hWin); hCurSynthStringPanel = 0; break; case WM_DELETE: SynthDeleteItems(); break; case WM_PAINT: GUI_SetBkColor(GUI_BLACK); GUI_Clear(); GUI_SetTextMode(GUI_TEXTMODE_TRANS); GUI_DrawBitmap(&bmEMPTYTITLEBAR, 0, 0); GUI_SetFont(&GUI_Font32B_ASCII); x = WM_GetWindowSizeX(pMsg->hWin); { std::string title("Synth / MIDI"); GUI_DispStringHCenterAt(GetTitleWithPreset(title).c_str(), x / 2, 5); } //PaintSynthCombo(); break; case WM_NOTIFY_PARENT: if(DispatchCommComponent(pMsg,&hCOMPcomm)) { Id = WM_GetId(pMsg->hWinSrc); NCode = pMsg->Data.v; switch(NCode) { case WM_NOTIFICATION_ADDVOICE: switch(Id) { case SYNTH_ID_STRINGPANEL1: SynthInsertVoice(0,0); break; case SYNTH_ID_STRINGPANEL2: SynthInsertVoice(1,0); break; case SYNTH_ID_STRINGPANEL3: SynthInsertVoice(2,0); break; case SYNTH_ID_STRINGPANEL4: SynthInsertVoice(3,0); break; case SYNTH_ID_STRINGPANEL5: SynthInsertVoice(4,0); break; case SYNTH_ID_STRINGPANEL6: SynthInsertVoice(5,0); break; } hCurSynthStringPanel = pMsg->hWinSrc; UpdateSynthSettingEx(MISAMODULE_SYNTH); UpdateVoiceInfo((PVOICE_INFO)MisaSynthString_GetVoice(hCurSynthStringPanel,MisaSynthString_GetVoiceIndex(hCurSynthStringPanel))); TopVoiceScreen(pMsg->hWin); break; case WM_NOTIFICATION_CLICKED: DEBUG_STDOUT("SYNTH button clicked!"); break; case WM_NOTIFICATION_RELEASED: switch(Id) { case SYNTH_ID_MIDICTRL: TopControlAssignmentsScreen(pMsg->hWin); break; case SYNTH_ID_STRINGPANEL1: case SYNTH_ID_STRINGPANEL2: case SYNTH_ID_STRINGPANEL3: case SYNTH_ID_STRINGPANEL4: case SYNTH_ID_STRINGPANEL5: case SYNTH_ID_STRINGPANEL6: hCurSynthStringPanel = pMsg->hWinSrc; //UpdateSynthSettingEx(MISAMODULE_SYNTH); UpdateVoiceInfo((PVOICE_INFO)MisaSynthString_GetVoice(hCurSynthStringPanel,MisaSynthString_GetVoiceIndex(hCurSynthStringPanel))); TopVoiceScreen(pMsg->hWin); break; case CTL_NONE_ID: case CTL_TOUCH_X_ID: case CTL_TOUCH_Y_ID: case CTL_DRAG_X_ID: case CTL_DRAG_Y_ID: case CTL_BALL_X_ID: case CTL_BALL_Y_ID: case CTL_VARIATION_ID: break; default: ; } DEBUG_STDOUT("SYNTH button released!"); break; case WM_NOTIFICATION_VALUE_CHANGED: SynthTurnNotesOff(); switch(Id) { case SYNTH_ID_STRINGPANEL1: SynthTuning(0,MisaSynthString_GetTune(pMsg->hWinSrc)); break; case SYNTH_ID_STRINGPANEL2: SynthTuning(1,MisaSynthString_GetTune(pMsg->hWinSrc)); break; case SYNTH_ID_STRINGPANEL3: SynthTuning(2,MisaSynthString_GetTune(pMsg->hWinSrc)); break; case SYNTH_ID_STRINGPANEL4: SynthTuning(3,MisaSynthString_GetTune(pMsg->hWinSrc)); break; case SYNTH_ID_STRINGPANEL5: SynthTuning(4,MisaSynthString_GetTune(pMsg->hWinSrc)); break; case SYNTH_ID_STRINGPANEL6: SynthTuning(5,MisaSynthString_GetTune(pMsg->hWinSrc)); break; default: ; } break; case WM_NOTIFICATION_SEL_CHANGED: switch(Id) { case SYNTH_ID_STRINGPANEL1: SynthSetMidiOutChannel(0,MisaSynthString_GetChannel(pMsg->hWinSrc)); break; case SYNTH_ID_STRINGPANEL2: SynthSetMidiOutChannel(1,MisaSynthString_GetChannel(pMsg->hWinSrc)); break; case SYNTH_ID_STRINGPANEL3: SynthSetMidiOutChannel(2,MisaSynthString_GetChannel(pMsg->hWinSrc)); break; case SYNTH_ID_STRINGPANEL4: SynthSetMidiOutChannel(3,MisaSynthString_GetChannel(pMsg->hWinSrc)); break; case SYNTH_ID_STRINGPANEL5: SynthSetMidiOutChannel(4,MisaSynthString_GetChannel(pMsg->hWinSrc)); break; case SYNTH_ID_STRINGPANEL6: SynthSetMidiOutChannel(5,MisaSynthString_GetChannel(pMsg->hWinSrc)); break; default: ; } break; case WM_NOTIFICATION_STRINGPANEL_SYNTH: switch(Id) { case SYNTH_ID_STRINGPANEL1: SynthSetMidiOutChannel(0,-1); break; case SYNTH_ID_STRINGPANEL2: SynthSetMidiOutChannel(1,-1); break; case SYNTH_ID_STRINGPANEL3: SynthSetMidiOutChannel(2,-1); break; case SYNTH_ID_STRINGPANEL4: SynthSetMidiOutChannel(3,-1); break; case SYNTH_ID_STRINGPANEL5: SynthSetMidiOutChannel(4,-1); break; case SYNTH_ID_STRINGPANEL6: SynthSetMidiOutChannel(5,-1); break; default: ; } break; } } break; case WM_TOUCH: break; default: WM_DefaultProc(pMsg); } }
static void DistortionProc(WM_MESSAGE* pMsg) { int x, y; int NCode,Id; ProcessCommComponent(pMsg, &hCOMPcomm); switch (pMsg->MsgId) { case WM_CREATE: DistortionCreateItems(pMsg->hWin); break; case WM_DELETE: DistortionDeleteItems(); break; case WM_PAINT: GUI_SetBkColor(GUI_BLACK); GUI_Clear(); GUI_SetTextMode(GUI_TEXTMODE_TRANS); GUI_DrawBitmap(&bmEMPTYTITLEBAR, 0, 0); x = 222; y = bmEMPTYTITLEBAR.YSize; GUI_DrawBitmap(&bmDISTYPEAREA, x, y); GUI_SetFont(&GUI_Font32B_ASCII); x = WM_GetWindowSizeX(pMsg->hWin); { std::string title("Distortion"); GUI_DispStringHCenterAt(GetTitleWithPreset(title).c_str(), x / 2, 5); } y += 20; GUI_DispStringHCenterAt(strDistype[disIndex], x / 2, y); break; case WM_NOTIFY_PARENT: if(DispatchCommComponent(pMsg,&hCOMPcomm)) { Id = WM_GetId(pMsg->hWinSrc); NCode = pMsg->Data.v; switch(NCode) { case WM_NOTIFICATION_CLICKED: DEBUG_STDOUT("Distortion button clicked!"); break; case WM_NOTIFICATION_RELEASED: switch(Id) { case DISTORTION_ID_LEFTARROW: --disIndex; if(0>disIndex) { disIndex = sizeof(strDistype)/4-1; } WM_InvalidateRect(pMsg->hWin, &rectDisType); DistortionSetType(DistortionGetFX(),disIndex); break; case DISTORTION_ID_RIGHTARROW: ++disIndex; if(sizeof(strDistype)/4 <= disIndex) { disIndex = 0; } WM_InvalidateRect(pMsg->hWin, &rectDisType); DistortionSetType(DistortionGetFX(),disIndex); break; case COMMON_ID_CHECKON: DistortionOn(DistortionGetFX(), MisaCheckbox_GetStatus(hCOMPcomm.hCheckOn)?true:false); break; case COMMON_ID_FX1: case COMMON_ID_FX2: case COMMON_ID_CLOSE: UpdateSynthSettingEx(MISAMODULE_DISTORTION); break; case CTL_NONE_ID: case CTL_TOUCH_X_ID: case CTL_TOUCH_Y_ID: case CTL_DRAG_X_ID: case CTL_DRAG_Y_ID: case CTL_BALL_X_ID: case CTL_BALL_Y_ID: case CTL_VARIATION_ID: DistortionControlMenuProc(Id); break; #if 0 case DISTORTION_ID_PROGDRIVE: x = MisaProgressbar_GetPercent(pMsg->hWinSrc); DistortionSetDrive(DistortionGetFX(),x<127?x:127); break; case DISTORTION_ID_PROGTONE: x = MisaProgressbar_GetPercent(pMsg->hWinSrc); DistortionSetTone(DistortionGetFX(),x<127?x:127); break; case DISTORTION_ID_PROGLEVEL: x = MisaProgressbar_GetPercent(pMsg->hWinSrc); DistortionSetLevel(DistortionGetFX(),x<127?x:127); break; #endif default: ; } DEBUG_STDOUT("Distortion button released!"); break; case WM_NOTIFICATION_VALUE_CHANGED: switch(Id) { case DISTORTION_ID_PROGDRIVE: x = MisaProgressbar_GetPercent(pMsg->hWinSrc); DistortionSetDrive(DistortionGetFX(),x<127?x:127); break; case DISTORTION_ID_PROGTONE: x = MisaProgressbar_GetPercent(pMsg->hWinSrc); DistortionSetTone(DistortionGetFX(),x<127?x:127); break; case DISTORTION_ID_PROGLEVEL: x = MisaProgressbar_GetPercent(pMsg->hWinSrc); DistortionSetLevel(DistortionGetFX(),x<127?x:127); break; case DISTORTION_ID_PROGNOISEREDUCTION: x = MisaProgressbar_GetPercent(pMsg->hWinSrc); DistortionNoiseReduction(DistortionGetFX(),x); break; case DISTORTION_ID_PROGBOOSTER: x = MisaProgressbar_GetPercent(pMsg->hWinSrc); DistortionSetBooster(DistortionGetFX(),x<127?x/32:3); break; default: ; } break; case WM_NOTIFICATION_SEL_CHANGED: if(hDistortionItems[DISTORTION_PROGNOISEREDUCTION]!=pMsg->hWinSrc && hDistortionItems[DISTORTION_PROGBOOSTER]!=pMsg->hWinSrc) { std::vector<int> effect; x = WM_GetWindowOrgX(pMsg->hWinSrc)+50; y = WM_GetWindowOrgY(pMsg->hWinSrc)+340; MisaSetcontrolmenu_Popup(pMsg->hWin,pMsg->hWinSrc,x,y); effect = SynthFindEffect(SynthTranslateEffect(Id),DistortionGetFX()); y = effect.size(); for(x=0;x<y;x++) { if(-1 != effect[x]) { MisaMenu_SetStatus(AssigneMentMenuTranslate(effect[x]&0x000000FF),2,0,(effect[x]>>8)&0x000000FF); MisaMenu_SetStatus(CTL_VARMIN,0,(effect[x]>>16)&0x000000FF,(effect[x]>>8)&0x000000FF); MisaMenu_SetStatus(CTL_VARMAX,0,(effect[x]>>24)&0x000000FF,(effect[x]>>8)&0x000000FF); } } } break; }
/** * @brief Callback routine of desktop window status. * @param pMsg: pointer to data structure of type WM_MESSAGE * @retval None */ static void _cbStatus(WM_MESSAGE * pMsg) { int xSize, ySize; static uint8_t TempStr[50]; static WM_HTIMER hTimerTime; uint8_t res = 0; //static WM_HTIMER hSpriteTime; RTC_TimeTypeDef RTC_Time; RTC_DateTypeDef RTC_DateStructure; uint8_t sec, min, hour, day, month; uint16_t year; WM_HWIN hWin; uint16_t PosDisplay; hWin = pMsg->hWin; switch (pMsg->MsgId) { case WM_CREATE: hTimerTime = WM_CreateTimer(hWin, ID_TIMER_TIME, 1000, 0); break; case WM_DELETE: WM_DeleteTimer(hTimerTime); break; case WM_TIMER: if( WM_GetTimerId(pMsg->Data.v) == ID_TIMER_TIME) { WM_InvalidateWindow(hWin); WM_RestartTimer(pMsg->Data.v, 1000); } break; case WM_PAINT: xSize = WM_GetWindowSizeX(hWin); ySize = WM_GetWindowSizeY(hWin); PosDisplay = xSize; /* Draw background */ //GUI_SetColor(0x808080); //GUI_SetColor(0x742E1B); GUI_SetColor(0x000000); GUI_FillRect(0, 0, xSize - 1, ySize - 1); // status GUI_SetTextMode(GUI_TM_TRANS); GUI_SetColor(GUI_WHITE); GUI_SetFont(&GUI_FontHZ_Song_16); GUI_DispStringAt( (char *)StatusText, 4, 4); /* Draw time & Date */ GUI_SetTextMode(GUI_TM_TRANS); GUI_SetColor(GUI_WHITE); GUI_SetFont(GUI_FONT_13B_ASCII); //time k_GetTime(&RTC_Time); sec = RTC_Time.Seconds; min = RTC_Time.Minutes; hour = RTC_Time.Hours; sprintf((char *)TempStr, "%02d:%02d:%02d", hour , min, sec); //sprintf((char *)TempStr, "%02d:%02d", hour , min); PosDisplay-=60; GUI_DispStringAt((char *)TempStr, PosDisplay, 0); //date k_GetDate(&RTC_DateStructure); year = RTC_DateStructure.Year + 2014; month = RTC_DateStructure.Month; day = RTC_DateStructure.Date; if((day > 0) && (day <= 31) && (month > 0)&& (month <= 12) && (year >= 1900)) { sprintf((char *)TempStr, "%04d/%s/%02d", year, strMonth[month-1], day); } else { sprintf((char *)TempStr, "2014/01/01"); } PosDisplay-=10; GUI_DispStringAt((char *)TempStr, PosDisplay, 11); /* USB */ if(k_StorageGetStatus(USB_DISK_UNIT)) { PosDisplay-=35; GUI_DrawBitmap(&bmusbdisk, PosDisplay, 3); } /* MSD */ if(k_StorageGetStatus(MSD_DISK_UNIT)) { PosDisplay-=35; GUI_DrawBitmap(&bmmicrosd, PosDisplay, 3); } /* CPU */ sprintf((char *)TempStr, "%d %%", osGetCPUUsage()); if(osGetCPUUsage() > 95 ) { /* waiting for user input when using dialog box*/ sprintf((char *)TempStr, "95 %%"); } PosDisplay-=35; GUI_DispStringAt( (char *)TempStr, PosDisplay, 6); if(WT_Config.Print == 1 && PrintFile.print_status == 4)//本地打印Yes //print_status 0-stop 1-wait, 2-print ok, 3-print run, 4-print error { // WT_PrintFolder_Init(); // res=WT_PrintFiles_Init((char *)PrintFolder.FilesName[WT_Config.Print_ID]);//0-not init, 1-inited, 2-no files, 3-hardware error, 4-no folder // if(res != 1) wt_SetText_Status("打印文件错误"); wt_SetText_Status("打印文件错误"); } break; default: WM_DefaultProc(pMsg); } }
static void _cbWindow(WM_MESSAGE * pMsg) { const WM_KEY_INFO* pInfo; WM_HWIN thisFrame = pMsg->hWin; int NCode; int Id; int xSize; int ySize; switch (pMsg->MsgId) { case WM_SET_FOCUS: if(pMsg->Data.v) { // WM_GetUserData(pMsg->hWin,&UserData,4); if(UserData==MONITMMSI_FULL || UserData == MONITMMSI_FIRST) { WM_SetFocus(buttons[2]); } else { UserData = 0; WM_SetFocus(buttons[0]); } } break; case WM_PAINT: xSize = WM_GetWindowSizeX(pMsg->hWin); ySize = WM_GetWindowSizeY(pMsg->hWin); // hMem0 = GUI_MEMDEV_Create(0, 0, xSize, ySize); // GUI_MEMDEV_Select(hMem0); GUI_DrawGradientRoundedV(0, 0, xSize - 1, ySize - 1, 20, pColors->bkTopColor,pColors->bkBottomColor); // GUI_MEMDEV_Select(0); // GUI_MEMDEV_CopyToLCD(hMem0); // GUI_MEMDEV_Delete(hMem0); break; case USER_MSG_SKIN: pColors = &(confirmWinColors[pMsg->Data.v]); BUTTON_SetBkColor(buttons[0], BUTTON_BI_UNPRESSED, pColors->btBkColor); BUTTON_SetBkColor(buttons[1], BUTTON_BI_UNPRESSED, pColors->btBkColor); BUTTON_SetBkColor(buttons[2], BUTTON_BI_UNPRESSED, pColors->btBkColor); BUTTON_SetFocusColor(buttons[0], pColors->btFocusBkColor); BUTTON_SetFocusColor(buttons[1], pColors->btFocusBkColor); BUTTON_SetFocusColor(buttons[2], pColors->btFocusBkColor); TEXT_SetTextColor(dlgTextContent, pColors->textColor); break; case WM_CREATE: pColors = &confirmWinColors[t90_set.sys.nightmode]; BUTTON_CreateEx (60,110,80,40,thisFrame, WM_CF_HASTRANS ,0,GUI_ID_BUTTON0); buttons[0] = WM_GetDialogItem(pMsg->hWin, GUI_ID_BUTTON0); BUTTON_SetFocusColor(buttons[0],pColors->btFocusBkColor); WM_ShowWindow (buttons[0]); BUTTON_SetText(buttons[0], "确定"); BUTTON_SetFont(buttons[0], &GUI_Font_T90_30); WM_SetCallback(buttons[0], &myButton); BUTTON_SetBkColor(buttons[0],BUTTON_BI_UNPRESSED,pColors->btBkColor); BUTTON_SetTextColor(buttons[0],BUTTON_BI_UNPRESSED,pColors->btTextColor); BUTTON_CreateEx(260, 110, 80, 40,thisFrame,WM_CF_HASTRANS,0,GUI_ID_BUTTON1); buttons[1] = WM_GetDialogItem(pMsg->hWin, GUI_ID_BUTTON1); BUTTON_SetFocusColor(buttons[1],pColors->btFocusBkColor); WM_ShowWindow (buttons[1]); BUTTON_SetText(buttons[1], "取消"); BUTTON_SetFont(buttons[1], &GUI_Font_T90_30); WM_SetCallback(buttons[1], &myButton); BUTTON_SetBkColor(buttons[1],BUTTON_BI_UNPRESSED,pColors->btBkColor); BUTTON_SetTextColor(buttons[1],BUTTON_BI_UNPRESSED,pColors->btTextColor); buttons[2] = BUTTON_CreateEx (160,110,80,40,thisFrame, WM_CF_HASTRANS ,0,GUI_ID_BUTTON2); WM_HideWin(buttons[2]); BUTTON_SetText(buttons[2], "确定"); BUTTON_SetFont(buttons[2], &GUI_Font_T90_30); WM_SetCallback(buttons[2], &myButton); BUTTON_SetFocusColor(buttons[2],pColors->btFocusBkColor); BUTTON_SetBkColor(buttons[2],BUTTON_BI_UNPRESSED,pColors->btBkColor); BUTTON_SetTextColor(buttons[2],BUTTON_BI_UNPRESSED,pColors->btTextColor); TEXT_CreateEx (0, 35, 400, 80, thisFrame,WM_CF_SHOW,0,ID_TEXT_CONTENT,NULL); dlgTextContent = WM_GetDialogItem(pMsg->hWin, ID_TEXT_CONTENT); TEXT_SetTextAlign(dlgTextContent,TEXT_CF_HCENTER); TEXT_SetFont(dlgTextContent, &GUI_Font_T90_30); TEXT_SetTextColor (dlgTextContent,pColors->textColor); break; case WM_KEY: pInfo = (WM_KEY_INFO*)pMsg->Data.p; switch(pInfo->Key) { case GUI_KEY_LEFT: case GUI_KEY_RIGHT: // WM_GetUserData(pMsg->hWin,&UserData,4); if(UserData==MONITMMSI_FULL || UserData == MONITMMSI_FIRST) { WM_SetFocus(buttons[2]); } else { if(WM_HasFocus(buttons[0])) { WM_SetFocus(buttons[1]); } else { WM_SetFocus(buttons[0]); } } break; default: break; } break; case WM_NOTIFY_PARENT: Id = WM_GetId(pMsg->hWinSrc); // Id of widget NCode = pMsg->Data.v; // Notification code switch (NCode) { case WM_NOTIFICATION_RELEASED: // React only if released switch (Id) { case GUI_ID_BUTTON0: // if(myMsg.Data.v == UPDATA) // { // updata[2] = 0x01; // if(UART_Send(UART_1, updata, 18, BLOCKING) == 18) // { // GUI_Delay(100); // NVIC_SystemReset(); // } // break; // } myMsg.hWin = myMsg.hWinSrc; myMsg.hWinSrc = pMsg->hWin; myMsg.MsgId = USER_MSG_REPLY; myMsg.Data.v = REPLY_OK; WM_SendMessage(myMsg.hWin, &myMsg); break; case GUI_ID_BUTTON1: // if(myMsg.Data.v == UPDATA) // { // UART_Send(UART_1, updata, 18, BLOCKING); // WM_SetFocus(myMsg.hWinSrc); // break; // } WM_SetFocusOnPrevChild(confirmWin); myMsg.hWin = myMsg.hWinSrc; myMsg.hWinSrc = pMsg->hWin; myMsg.MsgId = USER_MSG_REPLY; myMsg.Data.v = REPLY_CANCEL; WM_SendMessage(myMsg.hWin, &myMsg); break; case GUI_ID_BUTTON2: myMsg.hWin = myMsg.hWinSrc; myMsg.hWinSrc = pMsg->hWin; myMsg.MsgId = USER_MSG_REPLY; myMsg.Data.v = REPLY_OK; WM_SendMessage(myMsg.hWin, &myMsg); { WM_ShowWin(buttons[0]); WM_ShowWin(buttons[1]); WM_HideWin(buttons[2]); } break; } WM_BringToBottom(confirmWin); break; } break; case USER_MSG_CHOOSE: Option = pMsg->Data.v; myMsg.hWinSrc = pMsg->hWinSrc; myMsg.Data.v = Option; switch(Option) { case CANCEL_MONITED: TEXT_SetText(dlgTextContent, "??????????"); break; case STORE_SETTING: TEXT_SetText(dlgTextContent, "??????????"); break; case ADD_MONITED: TEXT_SetText(dlgTextContent, "????????????"); break; case SYS_SETTING: TEXT_SetText(dlgTextContent, "是否更改设置内容?"); UserData = SYS_SETTING; // WM_SetUserData(pMsg->hWin,&UserData,4); break; case SYS_RESET: TEXT_SetText(dlgTextContent, "是否恢复出厂设置?"); UserData = SYS_RESET; // WM_SetUserData(pMsg->hWin,&UserData,4); break; case MONITMMSI_SET: MMSI = getMMSItmp(); sprintf(pstring,"您输入的辅船九位码为: \n%09ld,是否确定?",MMSI); TEXT_SetText(dlgTextContent, pstring); UserData = MONITMMSI_SET; // WM_SetUserData(pMsg->hWin,&UserData,4); break; case MONITMMSI_ADD: MMSI = getMMSItmp(); sprintf(pstring, "确定将船只 %09ld \n加入船队?",MMSI); TEXT_SetText(dlgTextContent, pstring); UserData = MONITMMSI_ADD; // WM_SetUserData(pMsg->hWin,&UserData,4); break; case MONITMMSI_DEL: TEXT_SetText(dlgTextContent, "删除后,对该船只报警功能\n恢复正常,是否确认删除?"); UserData = MONITMMSI_DEL; WM_SetUserData(pMsg->hWin,&UserData,4); break; case MONITMMSI_FULL: TEXT_SetText(dlgTextContent, "已经达到设置上限,请删\n除后再进行添加!"); WM_HideWin(buttons[0]); WM_HideWin(buttons[1]); WM_ShowWin(buttons[2]); UserData = MONITMMSI_FULL; // WM_SetUserData(pMsg->hWin,&UserData,4); break; case MONITMMSI_NINE: TEXT_SetText(dlgTextContent, "你输入的九位码不足九位, \n确定继续修改?"); break; case MONITMMSI_FIRST: TEXT_SetText(dlgTextContent, "你输入的九位码不足九位, \n请继续输入!"); WM_HideWin(buttons[0]); WM_HideWin(buttons[1]); WM_ShowWin(buttons[2]); UserData = MONITMMSI_FIRST; // WM_SetUserData(pMsg->hWin,&UserData,4); break; // case UPDATA: // TEXT_SetText(dlgTextContent,"是否进行更新?"); default: break; } break; default: WM_DefaultProc(pMsg); break; } }