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

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_BTN.C $             
  6.  *
  7.  * Description:
  8.  * ============
  9.  * manipulation of menu buttons
  10.  * 
  11.  * Log:
  12.  * ====
  13.  * $Revision: 4 $
  14.  * Last Modified by $Author: Williaml $ at $Modtime: 04-03-30 11:13 $ 
  15.  ****************************************************************************************
  16.  * Updates:
  17.  ****************************************************************************************
  18.  * $Log: /I76/I76_Common/I76_Reference/UI/Menu_sys/MS_BTN.C $
  19.  * 
  20.  * 4     04-03-30 11:14 Williaml
  21.  * add the switch D_DIRECTION_KEY_IN_SETUP_MENU for using
  22.  * up/down/left/right key select or open the set up menu
  23.  * 
  24.  * 3     03-01-09 4:43 Leslie
  25.  * Unicode support
  26.  * 
  27.  * 12    23/04/02 9:39 Nirm
  28.  * - Added dependency in "Config.h".
  29.  * 
  30.  * 11    11/03/02 12:41 Nirm
  31.  * Debug message in case of memory allocation failure.
  32.  * 
  33.  * 10    11/03/02 12:27 Nirm
  34.  * Debug message in case of memory allocation failure.
  35.  * 
  36.  * 9     2/27/02 7:02a Tomasp
  37.  * Changed get_blk/rel_blk to malloc,free.
  38.  * 
  39.  * 8     18/02/02 20:41 Nirm
  40.  * Exported essential methods.
  41.  * 
  42.  * 7     14/02/02 18:11 Nirm
  43.  * - Fixed handling of strings that reside in the SDRAM;
  44.  * - Fixed prototype of MS_create_button().
  45.  * 
  46.  * 5     16/01/02 8:57 Nirm
  47.  * Fixed debug-messages.
  48.  * 
  49.  * 4     9/01/02 18:23 Nirm
  50.  * Corrected Include-Paths.
  51.  * 
  52.  * 3     30/12/01 9:58 Atai
  53.  * Add explicit casting
  54.  * 
  55.  * 2     25/12/01 10:27 Atai
  56.  * Code cleaning
  57.  **************************************************************************************** */
  58. #include "Config.h" // Global Configuration - do not remove!
  59. #ifdef _DEBUG
  60. #include "DebugDbgMain.h"
  61. #undef IFTRACE
  62. #define IFTRACE if (gTraceMenu)
  63. #endif //_DEBUG
  64. #include <stdio.h>
  65. #include <stdlib.h>
  66. #include <string.h>
  67. #include "Includesysdefs.h"
  68. #include "Decoderosdrendr.h"
  69. #include "PlaycoreScPadScMgr.h"
  70. #include "UIMenu_Sysms_lib.h"
  71. #include "UIMenu_Sysosd_drv.h"
  72. #include "UIMenu_Sysms_wdgt.h"
  73. #define MS_MAX_ASCII_BUTTON_TEXT_LENGTH   (MS_STATIC_MAX_LENGTH/2)
  74. //add by wl03304
  75. #ifdef D_DIRECTION_KEY_IN_SETUP_MENU
  76. extern void load_defaults_action(void);
  77. #endif
  78. //add by wl033004
  79. static void display (MS_WIDGET *widget, char focus)
  80. {
  81. wchar_t *text = ((MS_BUTTON *)widget)->present.text;
  82. // We need a character for ESCSQ_FONT0 (at the beginning) and a NULL_CHAR at the end
  83. wchar_t str[MS_MAX_ASCII_BUTTON_TEXT_LENGTH + 2];
  84. unsigned char ucBgColor = BACK_COLOR( widget, focus );
  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. }
  113. MS_UOP button_user_op(MS_WIDGET *widget,MS_UOP uop,char param) 
  114. {
  115. MS_BUTTON *button = (MS_BUTTON *)widget;
  116. switch (uop)
  117. {
  118.   case MS_UOP_DELETE:
  119.   uop = MS_UOP_NOP;
  120.   break;
  121.   case MS_UOP_DISPLAY:
  122.   display(widget,param);
  123.   uop = MS_UOP_NOP;
  124.   break;
  125.   case MS_UOP_ENTER:
  126.   button->action();
  127.   uop = MS_UOP_NOP;
  128.   break;
  129. //add by wl033004
  130. #ifdef D_DIRECTION_KEY_IN_SETUP_MENU
  131.   case MS_UOP_DOWN:
  132. if( (g_ui_active_menu_id == SETUP_MENU_ID)&&(button->action != load_defaults_action) )
  133. {
  134.   button->action();
  135.   uop = MS_UOP_NOP;
  136. }
  137.   break;
  138. #endif
  139. //add by wl033004
  140. }
  141. return uop;
  142. }
  143. void MS_init_button(MS_BUTTON *msb, MS_POS *pos,MS_COLOR color,
  144. MS_UOP (*user_op)(MS_WIDGET *,MS_UOP,char),
  145. void *text,void (* action)(void), 
  146. unsigned char attr)
  147. {
  148. #ifdef _DEBUG
  149. if (NULL == msb) {
  150. tr_printf(("FATAL: MS_init_button() Failed: NULL control.n"));
  151. return;
  152. }
  153. #endif
  154. ((MS_WIDGET *)msb)->pos = *pos;
  155. ((MS_WIDGET *)msb)->parent = NO_PARENT;
  156. msb->present.text = text;
  157. msb->action = action;
  158. ((MS_WIDGET *)msb)->attr = attr;
  159. ((MS_WIDGET *)msb)->color = color;
  160. if (NULL != user_op)
  161. ((MS_WIDGET *)msb)->user_op = user_op;
  162. else
  163. ((MS_WIDGET *)msb)->user_op = button_user_op;
  164. ((MS_WIDGET *)msb)->attrh = ALIGN_CENTER;
  165. }
  166. MS_BUTTON *MS_create_button(MS_POS *pos, MS_COLOR color,
  167. MS_UOP (*user_op)(MS_WIDGET *,MS_UOP,char),
  168. void *text,
  169. void (* action)(void), 
  170. unsigned char attr)
  171. {
  172. MS_BUTTON *msb;
  173. dbg_printf(("MS_create_buttonn"));
  174. msb = (MS_BUTTON *) malloc (sizeof(MS_BUTTON));
  175. #ifdef _DEBUG
  176. if (NULL == msb) {
  177. tr_printf(("FATAL: MS_create_button() Failed: Low system resources.n"));
  178. return NULL;
  179. }
  180. #endif //_DEBUG
  181. MS_init_button(msb, pos, color, user_op, text, action, attr);
  182. return msb;
  183. }