GUIDEMO.c
上传用户:zbk8730
上传日期:2017-08-10
资源大小:12168k
文件大小:11k
源码类别:

uCOS

开发平台:

C/C++

  1. /*
  2. *********************************************************************************************************
  3. *                                                uC/GUI
  4. *                        Universal graphic software for embedded applications
  5. *
  6. *                       (c) Copyright 2002, Micrium Inc., Weston, FL
  7. *                       (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
  8. *
  9. *              礐/GUI is protected by international copyright laws. Knowledge of the
  10. *              source code may not be used to write a similar product. This file may
  11. *              only be used in accordance with a license and should not be redistributed
  12. *              in any way. We appreciate your understanding and fairness.
  13. *
  14. ----------------------------------------------------------------------
  15. File        : GUIDEMO.c
  16. Purpose     : Several GUIDEMO routines
  17. ----------------------------------------------------------------------
  18. */
  19. #include <stddef.h>
  20. #include "GUI.h"
  21. #include "Progbar.h"
  22. #include "LISTBOX.h"
  23. #include "FrameWin.h"
  24. #include "BUTTON.H"
  25. #include "GUIDEMO.H"
  26. /*********************************************************************
  27. *
  28. *       Static variables
  29. *
  30. **********************************************************************
  31. */
  32. #if GUI_WINSUPPORT
  33.   static BUTTON_Handle   _ahButton[2];
  34.   static FRAMEWIN_Handle _ahFrameWin[2];
  35.   static FRAMEWIN_Handle _ahInfoWin[2];
  36.   static int             _FrameWinPosX[2],  _FrameWinPosY[2];
  37.   static int             _FrameWinSizeX[2], _FrameWinSizeY[2];
  38.   static int             _ButtonSizeX,      _ButtonSizeY;
  39. #endif
  40. static int         _iTest, _iTestMinor;
  41. static char        _CmdNext;
  42. static const char* _sInfo;
  43. static const char* _sExplain;
  44. #define countof(Obj) (sizeof(Obj)/sizeof(Obj[0]))
  45. /*********************************************************************
  46. *
  47. *       Routine table
  48. *
  49. **********************************************************************
  50.   The routines to be called are listed here. The advantage to calling
  51.   directly is that we can execute some code before and after.
  52. */
  53. typedef void fVoidVoid(void);
  54. static fVoidVoid * _apfTest[] = {
  55.   GUIDEMO_HardwareInfo,
  56.   GUIDEMO_Speed,
  57.   #if GUI_SUPPORT_MEMDEV
  58.     GUIDEMO_Graph,
  59.   #endif
  60.   GUIDEMO_Bitmap,
  61.   GUIDEMO_ShowInternationalFonts,
  62.   GUIDEMO_Dialog,
  63.   GUIDEMO_ShowColorBar,
  64.   GUIDEMO_ShowColorList,
  65.   GUIDEMO_DemoLUT,
  66.   GUIDEMO_DemoPolygon,
  67.   GUIDEMO_Circle,
  68.   GUIDEMO_ShowMemoryDevice,
  69.   GUIDEMO_Automotive,
  70.   GUIDEMO_Navigation,
  71.   #if GUI_WINSUPPORT
  72.     GUIDEMO_DemoProgBar,
  73.     GUIDEMO_DemoFrameWin,
  74.     #if GUI_SUPPORT_TOUCH
  75.       GUIDEMO_Touch,
  76.     #endif
  77.   #endif
  78.     0
  79. };
  80. /*********************************************************************
  81. *
  82. *       Static routines
  83. *
  84. **********************************************************************
  85. */
  86. static void _UpdateCmdWin(void) {
  87.   #if GUI_WINSUPPORT && GUIDEMO_LARGE
  88.     /* Update info in command window */
  89.     WM_HWIN hWin;
  90.     GUI_CONTEXT ContextOld;
  91.     GUI_SaveContext(&ContextOld);
  92.     hWin = WM_SelectWindow(_ahInfoWin[1]);
  93.     GUI_SetDefault();
  94.     GUI_SetBkColor(GUI_GRAY);
  95.     GUI_Clear();
  96.     GUI_DispStringAt("Demo ", 0, 0);
  97.     GUI_DispDecMin(_iTest + 1);
  98.     GUI_DispString(".");
  99.     GUI_DispDecMin(_iTestMinor);
  100.     GUI_DispString("/");
  101.     GUI_DispDecMin(countof(_apfTest));
  102.     WM_SelectWindow(hWin);
  103.     GUI_RestoreContext(&ContextOld);
  104.   #endif
  105. }
  106. static void _UpdateInfoWin(void) {
  107.   #if GUI_WINSUPPORT && GUIDEMO_LARGE
  108.     GUI_RECT rClient;
  109.     WM_HWIN hWin;
  110.     GUI_CONTEXT ContextOld;
  111.     GUI_SaveContext(&ContextOld);
  112.     /* Update info  window */
  113.     WM_ShowWindow(_ahInfoWin[0]);
  114.     WM_ShowWindow(_ahFrameWin[0]);
  115.     hWin = WM_SelectWindow(_ahInfoWin[0]);
  116.     GUI_GetClientRect(&rClient);
  117.     GUI_SetBkColor(GUI_WHITE);
  118.     GUI_Clear();
  119.     GUI_SetColor(GUI_BLACK);
  120.     GUI_SetFont(&GUI_Font13_1);
  121.     GUI_SetTextAlign(GUI_TA_HCENTER);
  122.     GUI_DispStringHCenterAt(_sInfo, (rClient.x1 - rClient.x0) / 2, 0);
  123.     GUI_SetTextAlign(GUI_TA_LEFT);
  124.     GUI_SetFont(&GUI_Font8_ASCII);
  125.     GUI_DispStringAt(_sExplain, 0, 20);
  126.     WM_SelectWindow(hWin);
  127.     GUI_RestoreContext(&ContextOld);
  128.   #endif
  129. }
  130. /*********************************************************************
  131. *
  132. *       Exported routines
  133. *
  134. **********************************************************************
  135. */
  136. int GUIDEMO_Delay(int t) {
  137.   int r = 0;
  138.   #if GUI_WINSUPPORT
  139.     int tRem, tEnd = GUI_GetTime() + t;
  140.     PROGBAR_Handle hProg;
  141.     WM_SetForegroundWindow(_ahButton[0]);
  142.     hProg = (t >100) ? PROGBAR_Create(_FrameWinPosX[1]  + 10,
  143.                                       _FrameWinPosY[1]  + 25,
  144.                                       _FrameWinSizeX[1] - 20,
  145.                                       7,
  146.                                       WM_CF_SHOW|WM_CF_STAYONTOP) : 0;
  147.     #if GUI_SUPPORT_MEMDEV
  148.       PROGBAR_EnableMemdev(hProg);  
  149.     #endif
  150.     PROGBAR_SetMinMax(hProg, 0, t);
  151.     for (; tRem = tEnd - GUI_GetTime(), (tRem > 0) && !GUIDEMO_CheckCancel();) {
  152.       PROGBAR_SetValue(hProg, t - tRem);
  153.       WM_ExecIdle();
  154.       GUI_Delay(10);
  155.     }
  156.     PROGBAR_Delete(hProg);
  157.     _UpdateCmdWin();
  158.     WM_ExecIdle();
  159.   #else
  160.     GUI_Delay(t);
  161.   #endif
  162.   return r;
  163. }
  164. void GUIDEMO_Wait(void) {
  165.   GUIDEMO_Delay(500);
  166.   GUIDEMO_NotifyStartNext();
  167. }
  168. int GUIDEMO_CheckCancel(void) {
  169.   int c = GUI_GetKey();
  170.   #if GUI_WINSUPPORT
  171.     WM_ExecIdle();
  172.   #endif
  173.   if ((c == 'n') || (c=='N'))
  174.     _CmdNext =1;
  175.   if ((c == 's') || (c=='S')) {
  176.     GUI_Delay(500);
  177.     do {
  178.       GUI_Delay(10);
  179.       #if GUI_WINSUPPORT
  180.         WM_ExecIdle();
  181.       #endif
  182.       c = GUI_GetKey();
  183.     } while (!c);
  184.   }
  185.   return _CmdNext;
  186. }
  187. void GUIDEMO_ShowInfo(const char* s) {
  188.   _sExplain = s;
  189.   _UpdateInfoWin();
  190. }
  191. void GUIDEMO_HideInfoWin(void) {
  192.   #if GUI_WINSUPPORT
  193.     WM_HideWindow(_ahFrameWin[0]);
  194.   #endif
  195. }
  196. void GUIDEMO_NotifyStartNext(void) {
  197.   _CmdNext = 0;
  198.   _UpdateCmdWin();
  199.   _iTestMinor++;
  200. }
  201. int GUIDEMO_WaitKey(void) {
  202.   int r = 0;
  203.   int tMax = GUI_GetTime() + 500;
  204.   int tDiff; 
  205.   #if GUI_WINSUPPORT
  206.     PROGBAR_Handle hProg = PROGBAR_Create(LCD_GetXSize() - 70, 
  207.                                           LCD_GetYSize() - 40, 
  208.                                           80, 5, WM_CF_SHOW);
  209.   #endif
  210.   while (tDiff = tMax-GUI_GetTime(), (tDiff > 0) && !GUIDEMO_CheckCancel()) {
  211.     if ((r = GUI_GetKey()) != 0)
  212.       break;
  213.   }
  214.   #if GUI_WINSUPPORT
  215.     PROGBAR_Delete(hProg);
  216.     WM_ExecIdle();
  217.   #endif
  218.   return r;
  219. }
  220. void GUIDEMO_ShowIntro(const char * s, const char * sExp) {
  221.   GUI_CONTEXT ContextOld;
  222.   GUI_SaveContext(&ContextOld);
  223.   _sInfo = s;
  224.   _sExplain = sExp;
  225.   GUI_SetDefault();
  226.   GUIDEMO_HideInfoWin();
  227.   GUI_SetBkColor(GUI_BLUE);
  228.   GUI_SetColor(GUI_WHITE);
  229.   GUI_Clear();
  230.   GUI_SetFont(&GUI_FontComic18B_ASCII);
  231.   GUI_DispStringHCenterAt(s, LCD_GET_XSIZE() / 2, LCD_GET_YSIZE() / 3 - 10);
  232.   if (_sExplain) {
  233.     GUI_SetFont(&GUI_Font8_ASCII);
  234.     GUI_DispStringHCenterAt(_sExplain, LCD_GET_XSIZE() / 2, LCD_GET_YSIZE() / 2 - 10);
  235.   }
  236.   GUIDEMO_Delay(_sExplain ? 2000 : 500);
  237. #if GUI_WINSUPPORT
  238.   _UpdateInfoWin();
  239.   _UpdateCmdWin();
  240. #endif
  241.   GUI_RestoreContext(&ContextOld);
  242.   #if GUI_WINSUPPORT
  243.     WM_ExecIdle();
  244.   #endif
  245.   GUIDEMO_NotifyStartNext();
  246.   GUI_SetBkColor(GUI_RED);
  247.   GUI_Clear();
  248. }
  249. /*********************************************************************
  250. *
  251. *       GUIDEMO_main(): Complete Demo
  252. *
  253. **********************************************************************
  254. */
  255. #if GUIDEMO_LARGE
  256. void GUIDEMO_main(void) {
  257.   #if GUI_WINSUPPORT
  258.     int i;
  259.   #endif
  260.   GUI_Clear();
  261.   #if GUI_WINSUPPORT
  262.     WM_SetCreateFlags(WM_CF_MEMDEV);  /* Automatically use memory devices on all windows */
  263.     /* Calculate position and size of FrameWin[1] */
  264.     _FrameWinSizeX[1] = 120;
  265.     _FrameWinSizeY[1] = 70;
  266.     _FrameWinPosX[1] = LCD_GetXSize() - _FrameWinSizeX[1];
  267.     _FrameWinPosY[1] = LCD_GetYSize() - _FrameWinSizeY[1];
  268.     _ButtonSizeX = (_FrameWinSizeX[1] - 20) / 2;
  269.     _ButtonSizeY = 20;
  270.     /* Create the control window incl. buttons */
  271.     _ahFrameWin[1] = FRAMEWIN_Create("Control", NULL, WM_CF_SHOW | WM_CF_STAYONTOP,
  272.                                      _FrameWinPosX[1], _FrameWinPosY[1],
  273.                                      _FrameWinSizeX[1], _FrameWinSizeY[1]);
  274.     _ahInfoWin[1] = WM_CreateWindowAsChild(0, 0, 0, 0, _ahFrameWin[1], 
  275.                                            WM_CF_SHOW | WM_CF_STAYONTOP, 0, 0);
  276.     _ahButton[0] = BUTTON_CreateAsChild(_FrameWinSizeX[1] / 20,
  277.                                  + 20, _ButtonSizeX, _ButtonSizeY, _ahFrameWin[1], 
  278.                                  'H' , WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV);
  279.     _ahButton[1] = BUTTON_CreateAsChild(_FrameWinSizeX[1] / 2,
  280.                                  + 20, _ButtonSizeX, _ButtonSizeY, _ahFrameWin[1], 
  281.                                  'N' , WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV);
  282.     BUTTON_SetText(_ahButton[0], "Stop");
  283.     BUTTON_SetText(_ahButton[1], "Next");
  284.     _UpdateCmdWin();
  285.     WM_ExecIdle();
  286.   #endif
  287.   /* Show Intro */
  288.   GUIDEMO_Intro();
  289.   #if GUI_WINSUPPORT
  290.     /* Calculate position and size of FrameWin[0] */
  291.     _FrameWinSizeX[0] = LCD_GetXSize() / 2;
  292.     _FrameWinSizeY[0] = 65;
  293.     _FrameWinPosX[0] = LCD_GetXSize() - _FrameWinSizeX[0];
  294.     _FrameWinPosY[0] = 0;
  295.     /* Create info window and run the individual demos */
  296.     _ahFrameWin[0] = FRAMEWIN_Create("礐/GUI Demo", NULL, WM_CF_STAYONTOP, 
  297.                                      _FrameWinPosX[0], _FrameWinPosY[0], _FrameWinSizeX[0], _FrameWinSizeY[0]);
  298.     _ahInfoWin[0] = WM_CreateWindowAsChild(0, 0, 0, 0, _ahFrameWin[0], WM_CF_STAYONTOP, 0, 0);
  299.     WM_ExecIdle();
  300.   #endif
  301.   /* Run the individual demos !  */
  302.   for (_iTest = 0; _apfTest[_iTest]; _iTest++) {
  303.     GUI_CONTEXT ContextOld;
  304.     GUI_SaveContext(&ContextOld);
  305.     _iTestMinor = 0;
  306.     _UpdateCmdWin();
  307.     (*_apfTest[_iTest])();
  308.     _CmdNext = 0;
  309.     GUI_RestoreContext(&ContextOld);
  310.   }
  311.   /* Cleanup */
  312.   #if GUI_WINSUPPORT
  313.     for (i = 0; i < countof(_ahFrameWin); i++) {
  314.       WM_DeleteWindow(_ahFrameWin[i]);
  315.     }
  316.     for (i = 0; i < countof(_ahInfoWin); i++) {
  317.       WM_DeleteWindow(_ahInfoWin[i]);
  318.     }
  319.   #endif
  320. }
  321. #else /* GUIDEMO_LARGE */
  322. void GUIDEMO_main(void) {
  323.   #if GUI_WINSUPPORT
  324.     int i;
  325.   #endif
  326.   #if GUI_WINSUPPORT
  327.     WM_SetCreateFlags(WM_CF_MEMDEV);  /* Automatically use memory devices on all windows */
  328.     _ButtonSizeX = 27;
  329.     _ButtonSizeY = 14;
  330.     _ahButton[0] = BUTTON_Create(LCD_GetXSize() - _ButtonSizeX * 2 - 5,
  331.                                  LCD_GetYSize() - _ButtonSizeY - 3,
  332.                                  _ButtonSizeX, _ButtonSizeY, 
  333.                                  'H' , WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV);
  334.     _ahButton[1] = BUTTON_Create(LCD_GetXSize() - _ButtonSizeX - 3,
  335.                                  LCD_GetYSize() - _ButtonSizeY - 3,
  336.                                  _ButtonSizeX, _ButtonSizeY, 
  337.                                  'N' , WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV);
  338.     BUTTON_SetFont(_ahButton[0], &GUI_Font8_ASCII);
  339.     BUTTON_SetFont(_ahButton[1], &GUI_Font8_ASCII);
  340.     BUTTON_SetText(_ahButton[0], "Stop");
  341.     BUTTON_SetText(_ahButton[1], "Next");
  342.     _UpdateCmdWin();
  343.     WM_ExecIdle();
  344.   #endif
  345.   /* Show Intro */
  346.   GUIDEMO_Intro();
  347.   /* Run the individual demos !  */
  348.   for (_iTest = 0; _apfTest[_iTest]; _iTest++) {
  349.     GUI_CONTEXT ContextOld;
  350.     GUI_SaveContext(&ContextOld);
  351.     _iTestMinor = 0;
  352.     _UpdateCmdWin();
  353.     (*_apfTest[_iTest])();
  354.     _CmdNext = 0;
  355.     GUI_RestoreContext(&ContextOld);
  356.   }
  357.   /* Cleanup */
  358.   #if GUI_WINSUPPORT
  359.     for (i = 0; i < countof(_ahButton); i++) {
  360.       BUTTON_Delete(_ahButton[i]);
  361.     }
  362.   #endif
  363. }
  364. #endif /* GUIDEMO_LARGE */