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

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_Dialog.c
  16. Purpose     : Automotive samples
  17. ----------------------------------------------------------------------
  18. */
  19. #include <stddef.h>           /* needed for definition of NULL */
  20. #include "GUI.H"
  21. #include "GUIDEMO.H"
  22. //#include "LCD_ConfDefaults.h"
  23. #include "WM.h"
  24. #include "Dialog.h"
  25. #include "LISTBOX.h"
  26. #include "EDIT.h"
  27. #include "SLIDER.h"
  28. #include "FRAMEWIN.h"
  29. #if GUI_SUPPORT_MEMDEV && GUI_WINSUPPORT
  30. /*********************************************************************
  31. *
  32. *       defines
  33. *
  34. **********************************************************************
  35. */
  36. /*********************************************************************
  37. *
  38. *       static data
  39. *
  40. **********************************************************************
  41. */
  42. /*********************************************************************
  43. *
  44. *       Dialog resource
  45. *
  46. * This table conatins the info required to create the dialog.
  47. * It has been created manually, but could also be created by a GUI-builder.
  48. */
  49. static const GUI_WIDGET_CREATE_INFO aDialogCreate[] = {
  50.   { FRAMEWIN_CreateIndirect, "Dialog", 0,               10,   10, 180, 230, FRAMEWIN_CF_MOVEABLE, 0 },
  51.   { BUTTON_CreateIndirect,   "OK",     GUI_ID_OK,      100,    5,  60,  20, 0, 0 },
  52.   { BUTTON_CreateIndirect,   "Cancel", GUI_ID_CANCEL,  100,   30,  60,  20, 0, 0 },
  53.   { TEXT_CreateIndirect,     "LText",  0,               10,   55,  48,  15, 0, GUI_TA_VCENTER | GUI_TA_LEFT  },
  54.   { TEXT_CreateIndirect,     "RText",  0,               10,   80,  48,  15, 0, GUI_TA_VCENTER | GUI_TA_RIGHT },
  55.   { EDIT_CreateIndirect,     "",       GUI_ID_EDIT0,    60,   55, 100,  15, 0, 50 },
  56.   { EDIT_CreateIndirect,     "",       GUI_ID_EDIT1,    60,   80, 100,  15, 0, 50 },
  57.   { TEXT_CreateIndirect,     "Hex",    0,               10,  100,  48,  15, 0, GUI_TA_VCENTER | GUI_TA_RIGHT },
  58.   { EDIT_CreateIndirect,     "",       GUI_ID_EDIT2,    60,  100, 100,  15, 0, 6 },
  59.   { TEXT_CreateIndirect,     "Bin",    0,               10,  120,  48,  15, 0, GUI_TA_VCENTER | GUI_TA_RIGHT },
  60.   { EDIT_CreateIndirect,     "",       GUI_ID_EDIT3,    60,  120, 100,  15, 0, 0 },
  61.   { LISTBOX_CreateIndirect,  "",       GUI_ID_LISTBOX0, 10,    5,  48,  40, 0, 0 },
  62.   { SLIDER_CreateIndirect,   NULL,     GUI_ID_SLIDER0,  10,  140, 100,  20, 0, 0 },
  63.   { SLIDER_CreateIndirect,   NULL,     GUI_ID_SLIDER1,  10,  170, 140,  30, 0, 0 }
  64. };
  65. /*********************************************************************
  66. *
  67. *              Initializers for listbox
  68. */
  69. static const GUI_ConstString _apListBox[] = {
  70.   "English", "Deutsch", "France", "Japanese", "Italiano", NULL
  71. };
  72. /*********************************************************************
  73. *
  74. *              Keys for demonstration of dialog box
  75. */
  76. typedef struct {
  77.   unsigned char Id;
  78.   int Time;
  79. } KEYSIM;
  80. static KEYSIM _aID[] = {
  81.   { GUI_KEY_TAB, 500 },
  82.   { GUI_KEY_TAB, 500 },
  83.   { GUI_KEY_TAB, 500 },
  84.   { GUI_KEY_TAB, 500 },
  85.   { GUI_KEY_TAB, 500 },
  86.   { GUI_KEY_TAB, 500 },
  87.   { GUI_KEY_DOWN, 500 },
  88.   { GUI_KEY_DOWN, 500 },
  89.   { GUI_KEY_DOWN, 500 },
  90.   { GUI_KEY_DOWN, 500 },
  91.   { GUI_KEY_UP, 100 }
  92. };
  93. /*********************************************************************
  94. *
  95. *       static code
  96. *
  97. **********************************************************************
  98. */
  99. /*********************************************************************
  100. *
  101. *       Dialog callback routine
  102. */
  103. static void _cbCallback(WM_MESSAGE * pMsg) {
  104.   int NCode, Id;
  105.   WM_HWIN hEdit0, hEdit1, hEdit2, hEdit3, hListBox;
  106.   WM_HWIN hWin = pMsg->hWin;
  107.   switch (pMsg->MsgId) {
  108.     case WM_INIT_DIALOG:
  109.       /* Get window handles for all widgets */
  110.       hEdit0   = WM_GetDialogItem(hWin, GUI_ID_EDIT0);
  111.       hEdit1   = WM_GetDialogItem(hWin, GUI_ID_EDIT1);
  112.       hEdit2   = WM_GetDialogItem(hWin, GUI_ID_EDIT2);
  113.       hEdit3   = WM_GetDialogItem(hWin, GUI_ID_EDIT3);
  114.       hListBox = WM_GetDialogItem(hWin, GUI_ID_LISTBOX0);
  115.       /* Initialize all widgets */
  116.       EDIT_SetText(hEdit0, "EDIT widget 0");
  117.       EDIT_SetText(hEdit1, "EDIT widget 1");
  118.       EDIT_SetTextAlign(hEdit1, GUI_TA_LEFT);
  119.       EDIT_SetHexMode(hEdit2, 0x1234, 0, 0xffff);
  120.       EDIT_SetBinMode(hEdit3, 0x1234, 0, 0xffff);
  121.       LISTBOX_SetText(hListBox, _apListBox);
  122.       SCROLLBAR_CreateAttached(hListBox, SCROLLBAR_CF_VERTICAL);
  123.       break;
  124.     case WM_KEY:
  125.       switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key) {
  126.       case GUI_KEY_ESCAPE:
  127.         GUI_EndDialog(hWin, 1);
  128.         break;
  129.       case GUI_KEY_ENTER:
  130.         GUI_EndDialog(hWin, 0);
  131.         break;
  132.       }
  133.       break;
  134.     case WM_NOTIFY_PARENT:
  135.       Id    = WM_GetId(pMsg->hWinSrc);    /* Id of widget */
  136.       NCode = pMsg->Data.v;               /* Notification code */
  137.       switch (NCode) {
  138.         case WM_NOTIFICATION_RELEASED:    /* React only if released */
  139.           if (Id == GUI_ID_OK) {          /* OK Button */
  140.             GUI_EndDialog(hWin, 0);
  141.           }
  142.           if (Id == GUI_ID_CANCEL) {      /* Cancel Button */
  143.             GUI_EndDialog(hWin, 1);
  144.           }
  145.           break;
  146.         case WM_NOTIFICATION_SEL_CHANGED: /* Selection changed */
  147.           FRAMEWIN_SetText(hWin, "Dialog - sel changed");
  148.           break;
  149.         default:
  150.           FRAMEWIN_SetText(hWin, "Dialog - notification received");
  151.       }
  152.       break;
  153.     default:
  154.       WM_DefaultProc(pMsg);
  155.   }
  156. }
  157. /*********************************************************************
  158. *
  159. *       GUIDEMO_Dialog
  160. *
  161. **********************************************************************
  162. */
  163. void GUIDEMO_Dialog(void) {
  164.   int i;
  165.   WM_HWIN hWin;
  166.   GUI_COLOR DesktopColorOld;
  167.   GUI_CURSOR_Show();
  168.   GUIDEMO_ShowIntro("Dialog boxes",
  169.                     "Dialog boxes"
  170.                     "ncan easily be created");
  171.   GUIDEMO_HideInfoWin();
  172.   DesktopColorOld = WM_SetDesktopColor(GUI_RED);      /* Automatically update desktop window */
  173.   hWin = GUI_CreateDialogBox(aDialogCreate, GUI_COUNTOF(aDialogCreate), _cbCallback, 0, 0, 0);
  174.   for (i = 0; i < GUI_COUNTOF(_aID); i++) {
  175.     GUIDEMO_Delay(_aID[i].Time);
  176.     GUI_SendKeyMsg(_aID[i].Id, 1);
  177.   }
  178.   GUIDEMO_Delay(1000);
  179.   for (i = 0; i <= 100; i+=10) {
  180.     if (WM_IsWindow(hWin)) {
  181.       SLIDER_SetValue(WM_GetDialogItem(hWin, GUI_ID_SLIDER1), i);
  182.     }
  183.     GUIDEMO_Delay(100);
  184.   }
  185.   if (WM_IsWindow(hWin)) {
  186.     GUIDEMO_Delay(1000);
  187.     WM_MoveTo(hWin, 20,50);
  188.   }
  189.   if (WM_IsWindow(hWin)) {
  190.     GUI_Delay(1000);
  191.     WM_MoveTo(hWin,120,50);
  192.   }
  193.   /* Cleanup ... */
  194.   if (WM_IsWindow(hWin)) {
  195.     GUI_Delay(1000);
  196.     WM_DeleteWindow(hWin);
  197.   }
  198.   GUIDEMO_NotifyStartNext();
  199.   WM_SetDesktopColor(DesktopColorOld);      /* Restore old settings */
  200. }
  201. #else
  202. void GUIDEMO_Dialog(void) {}
  203. #endif /* GUI_SUPPORT_MEMDEV */