MS_Ext_Btn.c
上传用户:super_houu
上传日期:2008-09-21
资源大小:4099k
文件大小:6k
源码类别:

DVD

开发平台:

Others

  1. /* **************************************************************************************
  2. *  Copyright (c) 2002 ZORAN Corporation, All Rights Reserved
  3. *  THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF ZORAN CORPORATION
  4. *
  5. *  File: $Workfile: MS_Ext_Btn.c $
  6. *
  7. * Description:
  8. * ============
  9. * bitmaps buttons
  10. *
  11. * Log:
  12. * ====
  13. * $Revision: 2 $
  14. * Last Modified by $Author: Rogerl $ at $Modtime: 03-02-11 14:48 $
  15. ****************************************************************************************
  16. * Updates:
  17. ****************************************************************************************
  18. * $Log: /SourceCode/I64_Common/I64_Reference/UI/Menu_sys/MS_Ext_Btn.c $
  19.  * 
  20.  * 2     03-02-11 16:36 Rogerl
  21.  * Add MS_EXT_ICON_BUTTON support
  22.  * 
  23.  * 1     03-01-17 11:54 Rogerl
  24.  * Add New widgets: MS_COMBO_BUTTON,MS_EXT_BUTTON,MS_choice_ex,ms_slider_e
  25.  * x
  26.  * 
  27.  * 3     23/04/02 9:39 Nirm
  28.  * - Added dependency in "Config.h".
  29.  * 
  30.  * 2     4/22/02 18:22 Rinata
  31.  * add USE_SMALL_ext_BUTTONS buttons
  32.  * 
  33.  * 1     4/22/02 14:46 Rinata
  34. *
  35. *
  36. *****************************************************************************************/
  37. #include "Config.h" // Global Configuration - do not remove!
  38. #define USE_EXT_BUTTON 1
  39. #ifdef USE_EXT_BUTTON
  40. #ifdef _DEBUG
  41. #include "DebugDbgMain.h"
  42. #undef IFTRACE
  43. #define IFTRACE if (gTraceMenu)
  44. #endif //_DEBUG
  45. #include <stdio.h>
  46. #include <stdlib.h>
  47. #include <string.h>
  48. #include "Includesysdefs.h"
  49. #include "Decoderosdrendr.h"
  50. #include "PlaycoreScPadScMgr.h"
  51. #include "UIMenu_Sysms_lib.h"
  52. #include "UIMenu_Sysosd_drv.h"
  53. #include "UIMenu_Sysms_wdgt.h"
  54. #define MS_MAX_ASCII_BUTTON_TEXT_LENGTH   MS_STATIC_MAX_LENGTH
  55. extern MS_SCREEN *screen;
  56. static void display (MS_WIDGET *widget, char focus)
  57. {
  58. wchar_t *text = ((MS_EXT_BUTTON *)widget)->present.text;
  59. // We need a character for ESCSQ_FONT0 (at the beginning) and a NULL_CHAR at the end
  60. wchar_t str[MS_MAX_ASCII_BUTTON_TEXT_LENGTH + 2];
  61. unsigned char ucBgColor = BACK_COLOR( widget, focus );
  62. if (MS_IS_USE_SC(widget)) {
  63. if ( NULL_HANDLE != (WORD)text )
  64. sc_GetBytes((WORD)text, 0, MS_MAX_ASCII_BUTTON_TEXT_LENGTH, (BYTE*)str);
  65. }
  66. if ( MS_IS_ASCII(widget) )
  67. {
  68. if (MS_IS_USE_SC(widget)) {
  69. if (NULL_HANDLE != (WORD)text) {
  70. text= str;
  71. }
  72. else
  73. text= NULL;
  74. }
  75. if (NULL == text)
  76. text= "";
  77. }
  78. OSD_PutText(
  79. widget->pos.x,
  80. widget->pos.y,
  81. widget->pos.w,widget->pos.h,
  82. #ifdef D_MS_EXTENSIONS
  83. FOREGROUND_COLOR(widget->color, focus),
  84. #else
  85. FG_COLOR(widget->color),
  86. #endif // MS_EXTENSIONS
  87. ucBgColor,
  88. text, MS_JUST(widget), MS_IS_ASCII(widget) );
  89. if (focus)
  90. {
  91.     MS_CALL_USER_OP(&((MS_EXT_BUTTON *)widget)->helptext, MS_UOP_DISPLAY, !focus);
  92. }
  93. else
  94. {
  95. MS_hide(&((MS_EXT_BUTTON *)widget)->helptext, (MS_DIALOG *) screen);
  96. }
  97. }
  98. MS_UOP ext_button_user_op(MS_WIDGET *widget,MS_UOP uop,char param) 
  99. {
  100. MS_EXT_BUTTON *button = (MS_EXT_BUTTON *)widget;
  101. switch (uop)
  102. {
  103.   case MS_UOP_DELETE:
  104.   uop = MS_UOP_NOP;
  105.   break;
  106.   case MS_UOP_DISPLAY:
  107.   display(widget,param);
  108.   uop = MS_UOP_NOP;
  109.   break;
  110.   case MS_UOP_ENTER:
  111.   button->action();
  112.   uop = MS_UOP_NOP;
  113.   break;
  114. }
  115. return uop;
  116. }
  117. void MS_init_ext_button(MS_EXT_BUTTON *msb, MS_POS *pos,MS_COLOR color,
  118. MS_UOP (*user_op)(MS_WIDGET *,MS_UOP,char),
  119. void *text,void (* action)(void), 
  120. unsigned char attr)
  121. {
  122. #ifdef _DEBUG
  123. if (NULL == msb) {
  124. tr_printf(("FATAL: MS_init_ext_button() Failed: NULL control.n"));
  125. return;
  126. }
  127. #endif
  128. ((MS_WIDGET *)msb)->pos = *pos;
  129. ((MS_WIDGET *)msb)->parent = NO_PARENT;
  130. msb->present.text = text;
  131. msb->action = action;
  132. ((MS_WIDGET *)msb)->attr = attr;
  133. ((MS_WIDGET *)msb)->color = color;
  134. if (NULL != user_op)
  135. ((MS_WIDGET *)msb)->user_op = user_op;
  136. else
  137. ((MS_WIDGET *)msb)->user_op = ext_button_user_op;
  138. ((MS_WIDGET *)msb)->attrh = ALIGN_CENTER;
  139. }
  140. MS_EXT_BUTTON *MS_create_ext_button(MS_POS *pos, MS_COLOR color,
  141. MS_UOP (*user_op)(MS_WIDGET *,MS_UOP,char),
  142. void *text,
  143. void (* action)(void), 
  144. unsigned char attr)
  145. {
  146. MS_EXT_BUTTON *msb;
  147. dbg_printf(("MS_create_ext_buttonn"));
  148. msb = (MS_EXT_BUTTON *) malloc (sizeof(MS_EXT_BUTTON));
  149. #ifdef _DEBUG
  150. if (NULL == msb) {
  151. tr_printf(("FATAL: MS_create_ext_button() Failed: Low system resources.n"));
  152. return NULL;
  153. }
  154. #endif //_DEBUG
  155. MS_init_ext_button(msb, pos, color, user_op, text, action, attr);
  156. return msb;
  157. }
  158. MS_UOP ext_icon_button_user_op(MS_WIDGET *widget,MS_UOP uop,char param) 
  159. {
  160. MS_EXT_ICON_BUTTON *button = (MS_EXT_ICON_BUTTON *)widget;
  161. switch (uop)
  162. {
  163.   case MS_UOP_DELETE:
  164.   uop = MS_UOP_NOP;
  165.   break;
  166.   case MS_UOP_DISPLAY:
  167.   display(widget,param);
  168.   if (NULL != button->icon)
  169.    MS_CALL_USER_OP(button->icon, uop, param);
  170.   uop = MS_UOP_NOP;
  171.   break;
  172.   case MS_UOP_ENTER:
  173.   button->button.action();
  174.   uop = MS_UOP_NOP;
  175.   break;
  176. }
  177. return uop;
  178. }
  179. void MS_init_ext_icon_button(MS_EXT_ICON_BUTTON *msb, MS_POS *pos,MS_COLOR color,
  180. MS_UOP (*user_op)(MS_WIDGET *,MS_UOP,char),
  181. void *text,void (* action)(void), 
  182. unsigned char attr,
  183. MS_WIDGET *widget)
  184. {
  185. #ifdef _DEBUG
  186. if (NULL == msb) {
  187. tr_printf(("FATAL: MS_init_ext_icon_button() Failed: NULL control.n"));
  188. return;
  189. }
  190. #endif
  191. MS_init_ext_button((MS_EXT_BUTTON*)msb, pos, color, user_op, text, action, attr);
  192. if (NULL != user_op)
  193. ((MS_WIDGET *)msb)->user_op = user_op;
  194. else
  195. ((MS_WIDGET *)msb)->user_op = ext_icon_button_user_op;
  196. msb->icon = widget;
  197. }
  198. MS_EXT_ICON_BUTTON *MS_create_ext_icon_button(MS_POS *pos, MS_COLOR color,
  199. MS_UOP (*user_op)(MS_WIDGET *,MS_UOP,char),
  200. void *text,
  201. void (* action)(void), 
  202. unsigned char attr,
  203. MS_WIDGET * widget)
  204. {
  205. MS_EXT_ICON_BUTTON *msb;
  206. dbg_printf(("MS_create_ext_icon_buttonn"));
  207. msb = (MS_EXT_ICON_BUTTON *) malloc (sizeof(MS_EXT_ICON_BUTTON));
  208. #ifdef _DEBUG
  209. if (NULL == msb) {
  210. tr_printf(("FATAL: MS_create_ext_icon_button() Failed: Low system resources.n"));
  211. return NULL;
  212. }
  213. #endif //_DEBUG
  214. MS_init_ext_icon_button(msb, pos, color, user_op, text, action, attr,widget);
  215. return msb;
  216. }
  217. #endif // USE_EXT_BUTTON