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

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_Combo_Btn.c $
  6. *
  7. * Description:
  8. * ============
  9. * bitmaps buttons
  10. *
  11. * Log:
  12. * ====
  13. * $Revision: 7 $
  14. * Last Modified by $Author: Rogerl $ at $Modtime: 03-02-20 22:14 $
  15. ****************************************************************************************
  16. * Updates:
  17. ****************************************************************************************
  18. * $Log: /SourceCode/I64_Common/I64_Reference/UI/Menu_sys/MS_Combo_Btn.c $
  19.  * 
  20.  * 7     03-02-20 22:24 Rogerl
  21.  * Fix help text remain garbage bug
  22.  * 
  23.  * 6     03-02-14 16:01 Rogerl
  24.  * Don't show helptext when combo_button is in companion
  25.  * 
  26.  * 5     03-02-11 16:35 Rogerl
  27.  * Add MS_COMBO_ICON_BUTTON support
  28.  * 
  29.  * 4     03-02-09 14:28 Rogerl
  30.  * Fix combo button companion display
  31.  * 
  32.  * 3     03-01-27 17:31 Rogerl
  33.  * Show act color when in companion
  34.  * 
  35.  * 2     03-01-18 12:07 Rogerl
  36.  * Handle MS_UOP_ENTER
  37.  * 
  38.  * 1     03-01-17 11:54 Rogerl
  39.  * Add New widgets: MS_COMBO_BUTTON,MS_EXT_BUTTON,MS_choice_ex,ms_slider_e
  40.  * x
  41.  * 
  42.  * 3     23/04/02 9:39 Nirm
  43.  * - Added dependency in "Config.h".
  44.  * 
  45.  * 2     4/22/02 18:22 Rinata
  46.  * add USE_SMALL_ext_BUTTONS buttons
  47.  * 
  48.  * 1     4/22/02 14:46 Rinata
  49. *
  50. *
  51. *****************************************************************************************/
  52. #include "Config.h" // Global Configuration - do not remove!
  53. #define USE_COMBO_BUTTON 1
  54. #ifdef USE_COMBO_BUTTON
  55. #ifdef _DEBUG
  56. #include "DebugDbgMain.h"
  57. #undef IFTRACE
  58. #define IFTRACE if (gTraceMenu)
  59. #endif //_DEBUG
  60. #include <stdio.h>
  61. #include <stdlib.h>
  62. #include <string.h>
  63. #include "Includesysdefs.h"
  64. #include "Decoderosdrendr.h"
  65. #include "PlaycoreScPadScMgr.h"
  66. #include "UIMenu_Sysms_lib.h"
  67. #include "UIMenu_Sysosd_drv.h"
  68. #include "UIMenu_Sysms_wdgt.h"
  69. #define MS_MAX_ASCII_BUTTON_TEXT_LENGTH   MS_STATIC_MAX_LENGTH
  70. extern MS_SCREEN *screen;
  71. static void display (MS_WIDGET *widget, char focus)
  72. {
  73. wchar_t *text = ((MS_COMBO_BUTTON *)widget)->present.text;
  74. // We need a character for ESCSQ_FONT0 (at the beginning) and a NULL_CHAR at the end
  75. wchar_t str[MS_MAX_ASCII_BUTTON_TEXT_LENGTH + 2];
  76. unsigned char ucBgColor ;
  77. if( TRUE!= ((MS_COMBO_BUTTON *)widget)->is_in_companion)
  78. {
  79. ucBgColor = BACK_COLOR( widget, focus );
  80. }
  81. else
  82. {
  83. ucBgColor = ACT_COLOR( widget->color );
  84. }
  85. if (MS_IS_USE_SC(widget)) {
  86. if ( NULL_HANDLE != (WORD)text )
  87. sc_GetBytes((WORD)text, 0, MS_MAX_ASCII_BUTTON_TEXT_LENGTH, (BYTE*)str);
  88. }
  89. if ( MS_IS_ASCII(widget) )
  90. {
  91. if (MS_IS_USE_SC(widget)) {
  92. if (NULL_HANDLE != (WORD)text) {
  93. text= str;
  94. }
  95. else
  96. text= NULL;
  97. }
  98. if (NULL == text)
  99. text= "";
  100. }
  101. OSD_PutText(
  102. widget->pos.x,
  103. widget->pos.y,
  104. widget->pos.w,widget->pos.h,
  105. #ifdef D_MS_EXTENSIONS
  106. FOREGROUND_COLOR(widget->color, focus),
  107. #else
  108. FG_COLOR(widget->color),
  109. #endif // MS_EXTENSIONS
  110. ucBgColor,
  111. text, MS_JUST(widget), MS_IS_ASCII(widget) );
  112. if (focus)
  113. {
  114.        OSD_PutRect(
  115. ((MS_COMBO_BUTTON *)widget)->helptext->widget.pos.x,
  116. ((MS_COMBO_BUTTON *)widget)->helptext->widget.pos.y,
  117. ((MS_COMBO_BUTTON *)widget)->helptext->widget.pos.w,
  118. ((MS_COMBO_BUTTON *)widget)->helptext->widget.pos.h,
  119. BG_COLOR(((MS_COMBO_BUTTON *)widget)->helptext->widget.color));
  120.     MS_CALL_USER_OP(((MS_COMBO_BUTTON *)widget)->helptext, MS_UOP_DISPLAY, !focus);
  121. }
  122. else
  123. {
  124. if (NO_PARENT == widget->parent )
  125. {
  126. MS_hide(((MS_COMBO_BUTTON *)widget)->helptext, (MS_DIALOG *) screen);
  127. }
  128. else
  129. {
  130. MS_hide(((MS_COMBO_BUTTON *)widget)->helptext, widget->parent);
  131. }
  132. }
  133. }
  134. MS_UOP combo_button_user_op(MS_WIDGET *widget,MS_UOP uop,char param) 
  135. {
  136. MS_COMBO_BUTTON *button = (MS_COMBO_BUTTON *)widget;
  137. switch (uop)
  138. {
  139.   case MS_UOP_DELETE:
  140.   uop = MS_UOP_NOP;
  141.   break;
  142.   case MS_UOP_DISPLAY:
  143.   display(widget,param);
  144.   if (NULL != button->companion)
  145.    if (C_FOCUSED == param)
  146.    {
  147.    MS_CALL_USER_OP(button->companion,MS_UOP_DISPLAY,(TRUE == button->is_in_companion)?C_FOCUSED:!C_FOCUSED);
  148.    }
  149.    else
  150.   {
  151. if (NO_PARENT == widget->parent)
  152. {
  153. MS_hide(button->companion, (MS_DIALOG *) screen);
  154. }
  155. else
  156. {
  157. MS_hide(button->companion, widget->parent);
  158. }
  159.   }
  160.   uop = MS_UOP_NOP;
  161.   break;
  162.   case MS_UOP_RIGHT:
  163.   if (NULL != button->companion)
  164.    if (FALSE == button->is_in_companion)
  165.    {
  166. button->is_in_companion = TRUE;
  167.    display(widget,!C_FOCUSED);
  168. MS_CALL_USER_OP(button->companion,MS_UOP_DISPLAY,C_FOCUSED);
  169.    }
  170.   
  171.   uop = MS_UOP_NOP;
  172.      break;
  173.      
  174.   case MS_UOP_LEFT:
  175.   if (NULL != button->companion)
  176.    if (TRUE == button->is_in_companion)
  177.    {
  178. MS_CALL_USER_OP(button->companion,MS_UOP_CLEAR,!C_FOCUSED);
  179. button->is_in_companion = FALSE;
  180. display(widget,C_FOCUSED);
  181.    MS_CALL_USER_OP(button->companion,MS_UOP_DISPLAY,!C_FOCUSED);
  182.    }
  183.   
  184.   uop = MS_UOP_NOP;
  185.      break;
  186.     case MS_UOP_UP:
  187.     case MS_UOP_DOWN:
  188.   if (NULL != button->companion)
  189.    if (TRUE == button->is_in_companion)
  190.    {
  191. return MS_CALL_USER_OP(button->companion,uop,param);
  192.    }
  193.   break;
  194.   
  195.   case MS_UOP_ENTER:
  196.   if (NULL != button->companion)
  197.    if (TRUE == button->is_in_companion)
  198.    {
  199. return MS_CALL_USER_OP(button->companion,uop,param);
  200.    }
  201.   if (NULL != button ->action )
  202.    {
  203.    button->action();
  204.    uop = MS_UOP_NOP;
  205.    }
  206.   break;
  207. }
  208. return uop;
  209. }
  210. void MS_init_combo_button(MS_COMBO_BUTTON *msb, MS_POS *pos,MS_COLOR color,
  211. MS_UOP (*user_op)(MS_WIDGET *,MS_UOP,char),
  212. void *text,void (* action)(void), 
  213. unsigned char attr,
  214. unsigned char attrh,
  215. MS_STATIC  * helptext,
  216. MS_WIDGET *companion)
  217. {
  218. #ifdef _DEBUG
  219. if (NULL == msb) {
  220. tr_printf(("FATAL: MS_init_combo_button() Failed: NULL control.n"));
  221. return;
  222. }
  223. #endif
  224. ((MS_WIDGET *)msb)->pos = *pos;
  225. ((MS_WIDGET *)msb)->parent = NO_PARENT;
  226. msb->present.text = text;
  227. msb->action = action;
  228. ((MS_WIDGET *)msb)->attr = attr;
  229. ((MS_WIDGET *)msb)->color = color;
  230. if (NULL != user_op)
  231. ((MS_WIDGET *)msb)->user_op = user_op;
  232. else
  233. ((MS_WIDGET *)msb)->user_op = combo_button_user_op;
  234. ((MS_WIDGET *)msb)->attrh = attrh;
  235. msb->helptext = helptext;
  236. msb->companion = companion;
  237. msb->is_in_companion = FALSE;
  238. }
  239. MS_COMBO_BUTTON *MS_create_combo_button(MS_POS *pos, MS_COLOR color,
  240. MS_UOP (*user_op)(MS_WIDGET *,MS_UOP,char),
  241. void *text,
  242. void (* action)(void), 
  243. unsigned char attr,
  244. unsigned char attrh,
  245. MS_STATIC  * helptext,
  246. MS_WIDGET *companion)
  247. {
  248. MS_COMBO_BUTTON *msb;
  249. dbg_printf(("MS_create_combo_buttonn"));
  250. msb = (MS_COMBO_BUTTON *) malloc (sizeof(MS_COMBO_BUTTON));
  251. #ifdef _DEBUG
  252. if (NULL == msb) {
  253. tr_printf(("FATAL: MS_create_combo_button() Failed: Low system resources.n"));
  254. return NULL;
  255. }
  256. #endif //_DEBUG
  257. MS_init_combo_button(msb, pos, color, user_op, text, action, attr,attrh,helptext,companion);
  258. return msb;
  259. }
  260. MS_UOP combo_icon_button_user_op(MS_WIDGET *widget,MS_UOP uop,char param) 
  261. {
  262. MS_COMBO_ICON_BUTTON *button = (MS_COMBO_ICON_BUTTON *)widget;
  263. switch (uop)
  264. {
  265. case MS_UOP_DELETE:
  266. uop = MS_UOP_NOP;
  267. break;
  268. case MS_UOP_DISPLAY:
  269. combo_button_user_op(widget, MS_UOP_DISPLAY, param);
  270. if (NULL != button->icon)
  271.    MS_CALL_USER_OP(button->icon, MS_UOP_DISPLAY, param);
  272.    uop = MS_UOP_NOP;
  273.    break;
  274. case MS_UOP_RIGHT:
  275. case MS_UOP_LEFT:
  276. case MS_UOP_UP:
  277.     case MS_UOP_DOWN:
  278. case MS_UOP_ENTER:
  279. default:
  280. return combo_button_user_op(widget, uop, param);
  281.    break;
  282. }
  283. return uop;
  284. }
  285. void MS_init_combo_icon_button(MS_COMBO_ICON_BUTTON *msb, MS_POS *pos,MS_COLOR color,
  286. MS_UOP (*user_op)(MS_WIDGET *,MS_UOP,char),
  287. void *text,void (* action)(void), 
  288. unsigned char attr,
  289. unsigned char attrh,
  290. MS_STATIC  * helptext,
  291. MS_WIDGET *companion,
  292. MS_WIDGET *icon)
  293. {
  294. #ifdef _DEBUG
  295. if (NULL == msb) {
  296. tr_printf(("FATAL: MS_init_combo_icon_button() Failed: NULL control.n"));
  297. return;
  298. }
  299. #endif
  300. MS_init_combo_button((MS_COMBO_BUTTON*)msb, pos, color, user_op, text, action, attr,attrh,helptext,companion);
  301. if (NULL != user_op)
  302. ((MS_WIDGET *)msb)->user_op = user_op;
  303. else
  304. ((MS_WIDGET *)msb)->user_op = combo_icon_button_user_op;
  305. msb->icon = icon;
  306. }
  307. MS_COMBO_ICON_BUTTON *MS_create_combo_icon_button(MS_POS *pos, MS_COLOR color,
  308. MS_UOP (*user_op)(MS_WIDGET *,MS_UOP,char),
  309. void *text,
  310. void (* action)(void), 
  311. unsigned char attr,
  312. unsigned char attrh,
  313. MS_STATIC  * helptext,
  314. MS_WIDGET *companion,
  315. MS_WIDGET *icon)
  316. {
  317. MS_COMBO_ICON_BUTTON *msb;
  318. dbg_printf(("MS_create_combo_icon_buttonn"));
  319. msb = (MS_COMBO_ICON_BUTTON *) malloc (sizeof(MS_COMBO_ICON_BUTTON));
  320. #ifdef _DEBUG
  321. if (NULL == msb) {
  322. tr_printf(("FATAL: MS_create_combo_icon_button() Failed: Low system resources.n"));
  323. return NULL;
  324. }
  325. #endif //_DEBUG
  326. MS_init_combo_icon_button(msb, pos, color, user_op, text, action, attr,attrh,helptext,companion,icon);
  327. return msb;
  328. }
  329. #endif // USE_COMBO_BUTTON