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

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        : 
  16. Purpose     : Dialog box include
  17. ----------------------------------------------------------------------
  18. Open items:
  19. None
  20. --------------------END-OF-HEADER-------------------------------------
  21. */
  22. #include <stddef.h>           /* needed for definition of NULL */
  23. #include "Dialog.h"
  24. #include "Widget.h"
  25. #include "WM_Intern.h"
  26. #if GUI_WINSUPPORT
  27. /*********************************************************************
  28. *
  29. *       Private config defaults
  30. *
  31. **********************************************************************
  32. */
  33. /* Define colors */
  34. #ifndef DIALOG_BKCOLOR0_DEFAULT
  35.   #define DIALOG_BKCOLOR0_DEFAULT 0xc0c0c0
  36. #endif
  37. /*********************************************************************
  38. *
  39. *           static data;
  40. *
  41. **********************************************************************
  42. */
  43. static WM_CALLBACK* _cb;
  44. static int _r;
  45. static LCD_COLOR _BkColor = DIALOG_BKCOLOR0_DEFAULT;
  46. /*********************************************************************
  47. *
  48. *           static code: API functions
  49. *
  50. **********************************************************************
  51. */
  52. /************************************************************
  53. *
  54. *           _cbDialog
  55.   This callback is hooked before the user callback in order to be
  56.   able to intercept some messages.
  57. */
  58. static void _cbDialog(WM_MESSAGE* pMsg) {
  59.   if (_cb) {
  60.     (*_cb)(pMsg);
  61.   }
  62. }
  63. /*********************************************************************
  64. *
  65. *           Public code: API functions
  66. *
  67. **********************************************************************
  68. */
  69. /************************************************************
  70. *
  71. *           GUI_CreateDialogbox
  72. */
  73. WM_HWIN GUI_CreateDialogBox(const GUI_WIDGET_CREATE_INFO* paWidget, int NumWidgets, WM_CALLBACK* cb, WM_HWIN hParent,
  74.                             int x0, int y0)
  75. {
  76.   WM_HWIN hDialog = paWidget->pfCreateIndirect(paWidget, hParent, x0, y0, cb);     /* Create parent window */
  77.   WM_HWIN hDialogClient = WM_GetClientWindow(hDialog);
  78.   WIDGET_OrState(hDialog, paWidget->Flags);
  79.   WM_ShowWindow(hDialog);
  80.   WM_ShowWindow(hDialogClient);
  81.   while (--NumWidgets > 0) {
  82.     WM_HWIN hChild;
  83.     paWidget++;
  84.     hChild = paWidget->pfCreateIndirect(paWidget, hDialogClient, 0, 0, 0);     /* Create child window */
  85.     WM_ShowWindow(hChild);
  86.   }
  87.   WM_SetFocusOnNextChild(hDialog);     /* Set the focus to the first child */
  88.   WM__SendMessageNoPara(hDialogClient, WM_INIT_DIALOG);
  89.   return hDialog;
  90. }
  91. /************************************************************
  92. *
  93. *           GUI_EndDialog
  94. */
  95. void GUI_EndDialog(WM_HWIN hWin, int r) {
  96.   _cb = NULL;
  97.   _r = r;
  98.   WM_DeleteWindow(hWin);
  99. }
  100. /************************************************************
  101. *
  102. *           DIALOG_GetBkColor()
  103. */
  104. LCD_COLOR DIALOG_GetBkColor(void) {
  105.   return _BkColor;
  106. }
  107. /************************************************************
  108. *
  109. *           DIALOG_SetBkColor()
  110. */
  111. LCD_COLOR DIALOG_SetBkColor(LCD_COLOR BkColor) {
  112.   LCD_COLOR r;
  113.   r = _BkColor;
  114.   _BkColor = BkColor;
  115.   return r;
  116. }
  117. /************************************************************
  118. *
  119. *           GUI_ExecDialogbox
  120. */
  121. int     GUI_ExecDialogBox(const GUI_WIDGET_CREATE_INFO* paWidget,
  122.                           int NumWidgets, WM_CALLBACK* cb, WM_HWIN hParent,
  123.                           int x0, int y0)
  124. {
  125.   _cb = cb;
  126.   GUI_CreateDialogBox(paWidget, NumWidgets, _cbDialog, hParent, x0, y0);
  127.   while (_cb) {
  128.     if (!GUI_Exec())
  129.       GUI_X_ExecIdle();
  130.   }
  131.   return _r;
  132. }
  133. #else
  134.   void Dialog_c(void);    /* Avoid problems with empty object modules */
  135. #endif   /* GUI_WINSUPPORT */