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

DVD

开发平台:

Others

  1. /* **************************************************************************************
  2.  *  Copyright (c) 2000 ZORAN Corporation, All Rights Reserved
  3.  *  THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF ZORAN CORPORATION
  4.  *
  5.  *  File: $Workfile: MS_WDGT.H $             
  6.  *
  7.  * Description:
  8.  * ============
  9.  * 
  10.  * 
  11.  * Log:
  12.  * ====
  13.  * $Revision: 26 $
  14.  * Last Modified by $Author: Chaol $ at $Modtime: 1/18/04 5:36a $ 
  15.  ****************************************************************************************
  16.  * Updates:
  17.  ****************************************************************************************
  18.  * $Log: /I76/I76_Common/I76_Reference/UI/Menu_sys/MS_WDGT.H $
  19.  * 
  20.  * 26    1/18/04 5:36a Chaol
  21.  * extend MS_JUST_MASK to 8 for new justifications
  22.  * 
  23.  * 25    03-07-24 10:37 Frankm
  24.  * Modify MS_remove_item_rapidly().
  25.  * 
  26.  * 24    03-07-11 15:42 Leonm
  27.  * 
  28.  * 23    03-06-19 16:34 Leonh
  29.  * add the function to assign the override color
  30.  * 
  31.  * 22    03-06-14 23:34 Leslie
  32.  * Change MS_JUST_MASK to be 4 bits with comile switch
  33.  * USE_4BITS_FOR_ALIGN_ATTR
  34.  * 
  35.  * 21    03-05-27 15:25 Leonh
  36.  * add the icon bmp backgroup value
  37.  * 
  38.  * 20    03-05-16 19:07 Rogerl
  39.  * Add defines and prototypes to SUPPORT_TIME_EDIT_LEFT_TO_RIGHT
  40.  * 
  41.  * 19    03-05-15 20:46 Rogerl
  42.  * add MS_UOP_REPEAT
  43.  * 
  44.  * 18    03-05-09 14:42 Jerryc
  45.  * support explorer style clips menu.
  46.  * 
  47.  * 17    4/13/03 4:53p Rinata
  48.  * fix password ibehave on parental control n case it is 0000
  49.  * 
  50.  * 16    03-03-27 15:06 Jerryc
  51.  * add new event for vestel.
  52.  * 
  53.  * 15    03-03-26 15:47 Rogerl
  54.  * Add support to scrollable choice
  55.  * 
  56.  * 14    2/28/03 4:41p Jasonh
  57.  * added new uop items: MS_UOP_PROGRAM, MS_UOP_SEARCH, MS_UOP_TIME 
  58.  * 
  59.  * 13    03-02-19 15:07 Rogerl
  60.  * Add MS_DIALOG_CYCLIC_SELECTION support
  61.  * 
  62.  * 12    03-02-14 16:03 Rogerl
  63.  * Add MS_EXT_HELP_CHOICE typedef and prototypes
  64.  * 
  65.  * 11    03-02-13 10:30 Rogerl
  66.  * Add MS_ICON support
  67.  * 
  68.  * 10    03-02-11 16:38 Rogerl
  69.  * Add typedefs and function prototypes for MS_EXT_ICON_BUTTON and
  70.  * MS_COMBO_ICON_BUTTON .
  71.  * 
  72.  * 9     03-02-08 18:17 Royz
  73.  * 
  74.  * 8     03-01-17 11:55 Rogerl
  75.  * New definitons and  prototypes for new widgets
  76.  * 
  77.  * 7     03-01-15 15:55 Royz
  78.  * 
  79.  * 6     03-01-10 20:07 Mikelv
  80.  * 
  81.  * 5     03-01-09 4:43 Leslie
  82.  * Unicode support
  83.  * 
  84.  * 4     10/30/02 18:03 Rond
  85.  * 
  86.  * 13    15/05/02 9:30 Ettim
  87.  * Added UI support for L/R (Transition) and Angle buttons (no OSD yet).
  88.  * 
  89.  * 12    23/04/02 9:39 Nirm
  90.  * - Added dependency in "Config.h".
  91.  * 
  92.  * 11    4/22/02 14:50 Rinata
  93.  * under USE_BMP_BUTTON setup menu with bitmap buttons
  94.  * 
  95.  * 10    19/03/02 20:54 Nirm
  96.  * Added new control: MS_FRAME.
  97.  * 
  98.  * 9     18/02/02 20:41 Nirm
  99.  * Exported essential methods.
  100.  * 
  101.  * 8     14/02/02 18:10 Nirm
  102.  * Fixed prototype of MS_create_button().
  103.  * 
  104.  * 7     13/01/02 16:40 Atai
  105.  * Remove old Defines
  106.  * 
  107.  * 6     8/01/02 16:25 Nirm
  108.  * Corrected Include-Paths.
  109.  * 
  110.  * 5     23/12/01 17:33 Atai
  111.  * Code cleaning
  112.  * 
  113.  * 4     23/12/01 17:09 Atai
  114.  * 
  115.  * 3     23/12/01 17:06 Atai
  116.  * 
  117.  * 
  118.  **************************************************************************************** */
  119. /***********************************************************************/
  120. #include "Config.h" // Global Configuration - do not remove!
  121. #ifndef _MS_WDGT_H_
  122. #define _MS_WDGT_H_
  123. #include "IncludeSysDefs.h"
  124. // for Milleno menu system extensions
  125. #ifdef D_MS_EXTENSIONS
  126. //
  127. // Base attributes for all widgets
  128. //
  129. // -- These should not shared to specify any other attributes
  130. //
  131. #define MS_SELECTABLE 0x01 // This widget is selectable
  132. #define MS_DIALOG_BOX 0x02 // This widget is dialog box
  133. //
  134. // Attributes for widgets with text
  135. //
  136. // -- These should not be shared to specify any other attributes
  137. #define MS_STRING_ON_SC 0x04 // The strings on this widget locate in the scretch pad
  138. #define MS_ASCII 0x08 // The string contain ASCII characters
  139. //
  140. // Attributes specific to MS_DIALOG's
  141. //
  142. // -- These can be shared to specify attributes for non-MS_DIALOG's
  143. #define MS_NO_BACKGROUND 0x10 // Screen without BG
  144. #define MS_DLG_CLOSE_ON_UP_FAIL 0x20 // Close dialog box if up opration is fail
  145. #define MS_DIALOG_IS_GROUP 0x40 // Dialog is a group ( all items displayed the same way )
  146. #define MS_DIALOG_IS_HIGHLIGHT_AS_GROUP 0x80 // Dialog is a group ( all items displayed the same way )
  147. //
  148. // Attributes specific to MS_CHOICE's
  149. //
  150. // -- These can be shared to specify attributes for non-MS_CHOICE's
  151. #define MS_CHOICE_ACTION_ON_ENTER   0x10   // Perform action on ENTER
  152. #define MS_CHOICE_WRAP 0x20 // Wrap current_choice when limits reached
  153. #define MS_CHOICE_OPEN 0x40 // Choice window is open
  154. #define MS_CHOICE_KEEP_OPEN 0x80 // Choice should initially be open and stay open
  155. //
  156. // Attributes specific to MS_EDIT's
  157. //
  158. #define MS_EDIT_HEX 0x40 // Number is hex
  159. #ifdef D_MS_EXTENSIONS
  160. #define MS_EDIT_ACTION_ON_INC_DEC 0x80
  161. #else
  162. #define MS_EDIT_ATTR_UNUSED 0x80 // Available for extensions (rename when used)
  163. #endif // D_MS_EXTENSIONS
  164. // Attributes specific to MS_SLIDER's
  165. //
  166. // -- These can be shared to specify attributes for non-MS_SLIDER's
  167. #define MS_SLIDER_POINT 0x40 // Slider is Point or Relative
  168. #define MS_SLIDER_ATTR_UNUSED 0x80 // Available for extensions (renamed when used)
  169. //
  170. // Test macros for the above attributes:
  171. //
  172. #define MS_IS_SELECTABLE(_widget_) (((MS_WIDGET *)(_widget_))->attr & MS_SELECTABLE)
  173. #define MS_HOT_SPOT (MS_SELECTABLE)
  174. #define MS_IS_HOT_SPOT(_widget_) ((((MS_WIDGET *)(_widget_))->attr & MS_HOT_SPOT) == MS_HOT_SPOT)
  175. #define MS_IS_DIALOG_BOX(_widget_) (((MS_WIDGET *)(_widget_))->attr & MS_DIALOG_BOX)
  176. #define MS_IS_GROUP(_widget_) (((MS_WIDGET *)(_widget_))->attr & MS_DIALOG_IS_GROUP)
  177. #define MS_IS_HIGHLIGHT_AS_GROUP(_widget_) (((MS_WIDGET *)(_widget_))->attr & MS_DIALOG_IS_HIGHLIGHT_AS_GROUP)
  178. #define MS_IS_USE_SC(_widget_) (((MS_WIDGET *)(_widget_))->attr & MS_STRING_ON_SC)
  179. #define MS_IS_ASCII(_widget_) ( (((MS_WIDGET *)(_widget_))->attr & MS_ASCII) ? C_ASCII : !C_ASCII )
  180. #define MS_HAS_NO_BACKGROUND(_widget_) (((MS_WIDGET *)(_widget_))->attr & MS_NO_BACKGROUND)
  181. #define MS_IS_CLOSE_ON_UP(_widget_) (((MS_WIDGET *)(_widget_))->attr & MS_DLG_CLOSE_ON_UP_FAIL)
  182. #define MS_IS_CHOICE_ACTION_ON_ENTER(_widget_)   (((MS_WIDGET *)(_widget_))->attr & MS_CHOICE_ACTION_ON_ENTER)
  183. #define MS_IS_CHOICE_WRAP(_widget_)   (((MS_WIDGET *)(_widget_))->attr & MS_CHOICE_WRAP)
  184. #define MS_IS_CHOICE_OPEN(_widget_)   (((MS_WIDGET *)(_widget_))->attr & MS_CHOICE_OPEN)
  185. #define MS_IS_CHOICE_KEEP_OPEN(_widget_)   (((MS_WIDGET *)(_widget_))->attr & MS_CHOICE_KEEP_OPEN)
  186. #define MS_IS_EDIT_HEX(_widget_) ( ((MS_WIDGET *)(_widget_))->attr & MS_EDIT_HEX )
  187. #ifdef D_MS_EXTENSIONS
  188. #define MS_IS_EDIT_ACTION_ON_INC_DEC(_widget_) ( ((MS_WIDGET *)(_widget_))->attr & MS_EDIT_ACTION_ON_INC_DEC )
  189. #endif
  190. #define MS_IS_SLIDER_POINT(_widget_) (((MS_WIDGET *)(_widget_))->attr & MS_SLIDER_POINT)
  191. //
  192. // Extended attributes for all widgets:
  193. //
  194. #define MS_JUST_MASK 0x03 // Justification mask for MS_CHOICE, MS_STAT
  195. // Currently only used for MS_CHOICE_EXT
  196. //#define MS_ATTR_MASK_UNUSED_3 0x10 // Available for extensions (rename when used)
  197. #define MS_ATTR_MASK_UNUSED_4 0x20 // Available for extensions (rename when used)
  198. #define MS_ATTR_MASK_UNUSED_5 0x40 // Available for extensions (rename when used)
  199. #define MS_ATTR_MASK_UNUSED_6 0x80 // Available for extensions (rename when used)
  200. // Extended attributes specific to MS_CHOICE's
  201. #define MS_ATTR_MASK_CHOICE_LR 0x04 // Toggle choice on left/right keys
  202. #define MS_ATTR_MASK_CHOICE_UD 0x08 // Toggle choice on up/down keys
  203. // Support MS_CHOICE_EXT
  204. #define MS_ATTR_MASK_CHOICE_EXT_OPENABLE 0x10 // Choice is openable
  205. // Extended attributes specific to MS_EDIT's
  206. #define MS_ATTR_MASK_EDIT_LR 0x04 // Increment/decrement edit on left/right keys
  207. #define MS_ATTR_MASK_EDIT_UD 0x08 // Increment/decrement edit on up/down keys
  208. #define MS_ATTR_MASK_EDIT_ACTION_PENDING 0x10
  209. #define MS_ATTR_MASK_DIALOG_WRAP_LR   0x04   // Wrap at leftmost and rightmost items
  210. #define MS_SET_CHOICE_LR(_choice_) ((MS_WIDGET *)(_choice_))->attrh |= MS_ATTR_MASK_CHOICE_LR
  211. #define MS_SET_CHOICE_UD(_choice_) ((MS_WIDGET *)(_choice_))->attrh |= MS_ATTR_MASK_CHOICE_UD
  212. #define MS_SET_CHOICE_ENTER(_choice_) ((MS_WIDGET *)(_choice_))->attrh &= ~(MS_ATTR_MASK_CHOICE_LR | MS_ATTR_MASK_CHOICE_UD)
  213. #define MS_SET_CHOICE_EXT_OPENABLE(_choice_) ((MS_WIDGET *)(_choice_))->attrh |= MS_ATTR_MASK_CHOICE_EXT_OPENABLE
  214. //   Support increment/decrement on arrows
  215. #define MS_SET_EDIT_LR(_edit_) ((MS_WIDGET *)(_edit_))->attrh |= MS_ATTR_MASK_EDIT_LR
  216. #define MS_SET_EDIT_UD(_edit_) ((MS_WIDGET *)(_edit_))->attrh |= MS_ATTR_MASK_EDIT_UD
  217. #define MS_SET_ACTION_PENDING(_edit_)   ((MS_WIDGET *)(_edit_))->attrh |= MS_ATTR_MASK_EDIT_ACTION_PENDING
  218. #define MS_RESET_ACTION_PENDING(_edit_)   ((MS_WIDGET *)(_edit_))->attrh &= ~MS_ATTR_MASK_EDIT_ACTION_PENDING
  219. #define MS_SET_DIALOG_WRAP_LR(_dialog_)   ((MS_WIDGET *)(_dialog_))->attrh |= MS_ATTR_MASK_DIALOG_WRAP_LR
  220. // Extraction and test macros for the above extended attributes
  221. #define MS_JUST(widget)   (((MS_WIDGET *)(widget))->attrh & MS_JUST_MASK)
  222. #define MS_IS_CHOICE_LR(_choice_)   (((MS_WIDGET *)(_choice_))->attrh & MS_ATTR_MASK_CHOICE_LR)
  223. #define MS_IS_CHOICE_UD(_choice_)   (((MS_WIDGET *)(_choice_))->attrh & MS_ATTR_MASK_CHOICE_UD)
  224. #define MS_IS_CHOICE_ENTER(_choice_) ( !(MS_IS_CHOICE_LR(_choice_) || MS_IS_CHOICE_UD(_choice_)) )
  225. //  Support increment/decrement on arrows
  226. #define MS_IS_EDIT_LR(_edit_)   (((MS_WIDGET *)(_edit_))->attrh & MS_ATTR_MASK_EDIT_LR)
  227. #define MS_IS_EDIT_UD(_edit_)   (((MS_WIDGET *)(_edit_))->attrh & MS_ATTR_MASK_EDIT_UD)
  228. //  Support action_pending
  229. #define MS_IS_EDIT_ACTION_PENDING(_edit_)   (((MS_WIDGET *)(_edit_))->attrh & MS_ATTR_MASK_EDIT_ACTION_PENDING)
  230. #define MS_IS_DIALOG_WRAP_LR(_dialog_)   (((MS_WIDGET *)(_dialog_))->attrh & MS_ATTR_MASK_DIALOG_WRAP_LR)
  231. #else // D_MS_EXTENSIONS
  232. #define MS_SELECTABLE 0x01 // This widget is selectable
  233. #define MS_SLIDER_POINT 0x02 // Slider is Point or Relative
  234. #define MS_DIALOG_BOX 0x04 // This widget is dialog box
  235. #define MS_STRING_ON_SC 0x08 // The strings on this widget locate in the scretch pad
  236. #define MS_NO_BACKGROUND 0x10 // Screen without BG
  237. #define MS_ASCII 0x20 // The string contain ASCII characters
  238. #define MS_CHOICE_OPEN 0x40 // Choice window is open
  239. #define MS_CHOICE_SCROLLABLE 0x80 // Choice window is scrollable
  240. #define MS_DIALOG_CYCLIC_SELECTION 0x40 // Dialog is cyclic selectable
  241. #define MS_DLG_CLOSE_ON_UP_FAIL 0x80 // Close dialog box if up opration is fail
  242. #define MS_TIME_EDIT_LEFT_TO_RIGHT 0x40  // Fill time edit from left to right
  243. #define MS_JUST_MASK 0x07 // Justification mask for MS_CHOICE, MS_STAT, use 3bits means the max justification is 8
  244. #define MS_ATTR_LIST_ITEM 0x08 // This widget is a list item
  245. #define MS_CHOICE_SCROLL_RANGE_MASK  0xF0        // choice scroll range: visible items
  246. #define MS_HOT_SPOT (MS_SELECTABLE)
  247. #define MS_IS_HOT_SPOT(widget) ((((MS_WIDGET *)(widget))->attr & MS_HOT_SPOT) == MS_HOT_SPOT)
  248. #define MS_IS_DIALOG_BOX(widget) (((MS_WIDGET *)(widget))->attr & MS_DIALOG_BOX)
  249. // Needed for MS_dlg.c
  250. #define MS_IS_GROUP(_widget_) (FALSE)
  251. // Needed for MS_dlg.c
  252. #define MS_IS_HIGHLIGHT_AS_GROUP(_widget_) (FALSE)
  253. #define MS_IS_SELECTABLE(widget) (((MS_WIDGET *)(widget))->attr & MS_SELECTABLE)
  254. #define MS_SET_SELECTABLE(widget)   ((MS_WIDGET *)(widget))->attr |= MS_SELECTABLE
  255. #define MS_RESET_SELECTABLE(widget)   ((MS_WIDGET *)(widget))->attr &= ~MS_SELECTABLE
  256. #define MS_IS_USE_SC(widget) (((MS_WIDGET *)(widget))->attr & MS_STRING_ON_SC)
  257. #define MS_IS_CHOICE_OPEN(widget) (((MS_WIDGET *)(widget))->attr & MS_CHOICE_OPEN)
  258. #define MS_IS_CHOICE_SCROLLABLE(widget) (((MS_WIDGET *)(widget))->attr & MS_CHOICE_SCROLLABLE)
  259. #define MS_IS_TIME_EDIT_LEFT_TO_RIGHT(widget) (((MS_WIDGET *)(widget))->attr & MS_TIME_EDIT_LEFT_TO_RIGHT)
  260. #define MS_IS_CLOSE_ON_UP(widget) (((MS_WIDGET *)(widget))->attr & MS_DLG_CLOSE_ON_UP_FAIL)
  261. #define MS_IS_DIALOG_CYCLIC_SELECTION(widget) (((MS_WIDGET *)(widget))->attr & MS_DIALOG_CYCLIC_SELECTION)
  262. #define MS_IS_ASCII(widget) ( (((MS_WIDGET *)(widget))->attr & MS_ASCII) ? C_ASCII : !C_ASCII )
  263. #define MS_IS_SLIDER_POINT(widget) (((MS_WIDGET *)(widget))->attr & MS_SLIDER_POINT)
  264. #define MS_HAS_NO_BACKGROUND(widget) (((MS_WIDGET *)(widget))->attr & MS_NO_BACKGROUND)
  265. #define MS_JUST(widget) (((MS_WIDGET *)(widget))->attrh & MS_JUST_MASK)
  266. #define MS_IS_LIST_ITEM(widget) (((MS_WIDGET *)(widget))->attrh & MS_ATTR_LIST_ITEM)
  267. #define MS_GET_CHOICE_SCROLL_RANGE(widget) ((((MS_WIDGET *)(widget))->attrh & MS_CHOICE_SCROLL_RANGE_MASK)>>4 )
  268. #define MS_SET_CHOICE_SCROLL_RANGE(_widget_, _value_)   ((MS_WIDGET *)(_widget_))->attrh &= ~MS_CHOICE_SCROLL_RANGE_MASK; 
  269. ((MS_WIDGET *)(_widget_))->attrh |= ((_value_ << 4) &MS_CHOICE_SCROLL_RANGE_MASK)
  270. #endif // D_MS_EXTENSIONS
  271. // Set macros for the above extended attributes
  272. #define MS_SET_JUST(_widget_, _value_)   ((MS_WIDGET *)(_widget_))->attrh &= ~MS_JUST_MASK; 
  273. ((MS_WIDGET *)(_widget_))->attrh |= _value_
  274. #define NO_PARENT ((MS_DIALOG *)-1)
  275. #define PARENT_SCREEN NO_PARENT
  276. #define PARENT_DIALOG ((MS_DIALOG *) 0)
  277. #define C_FOCUSED   1
  278. #define C_ASCII   1
  279. #define MS_ATTR_HELP_TEXT   0x10       // widght has help text
  280. #define IS_OPENABLE_LIST(_pChoice_)   ((_pChoice_)->choice_pos.w)
  281. #define IS_TOGGLE(_pChoice_)   (!IS_OPENABLE_LIST(_pChoice_))
  282. #define NO_CHOICE 0xffff
  283. #define IS_CHOICE_EXT_OPENABLE(_pChoice_)   ( ((MS_WIDGET *)(_pChoice_))->attrh & MS_ATTR_MASK_CHOICE_EXT_OPENABLE)
  284. #define IS_CHOICE_EXT_TOGGLE(_pChoice_)   (!IS_CHOICE_EXT_OPENABLE(_pChoice_))
  285. #define IS_HELP_TEXT(_pwidget_) (((MS_WIDGET*)(_pwidget_))->attrh & MS_ATTR_HELP_TEXT)
  286. typedef enum {
  287. MS_UOP_NOP = 0,
  288. // Arrow functionality 
  289. MS_UOP_UP = 1,
  290. MS_UOP_DOWN = 2,
  291. MS_UOP_LEFT = 3,
  292. MS_UOP_RIGHT = 4,
  293. // Play button - this is usually a shortcut for some formal menu behavior
  294. MS_UOP_PLAY = 5,
  295. // Skip right button (obsolete)
  296. MS_UOP_SKIP_RIGHT = 6,
  297. // Select/Enter button
  298. MS_UOP_ENTER = 7,
  299. // Clear button
  300. MS_UOP_CLEAR = 8,
  301. // Number for Edit box
  302. MS_UOP_0 = 10,
  303. MS_UOP_1 = 11,
  304. MS_UOP_2 = 12,
  305. MS_UOP_3 = 13,
  306. MS_UOP_4 = 14,
  307. MS_UOP_5 = 15,
  308. MS_UOP_6 = 16,
  309. MS_UOP_7 = 17,
  310. MS_UOP_8 = 18,
  311. MS_UOP_9 = 19,
  312. // Enable RETURN in menus
  313. MS_UOP_RETURN = 20,
  314. //  Support MS_EDIT_HEX
  315. #ifdef D_MS_EXTENSIONS
  316. // UOP's for hex digits
  317. // This block can be moved to another range in the enum,
  318. // but must retain its ordering
  319. MS_UOP_A = 21,
  320. MS_UOP_B = 22,
  321. MS_UOP_C = 23,
  322. MS_UOP_D = 24,
  323. MS_UOP_E = 25,
  324. MS_UOP_F = 26,
  325. #endif // D_MS_EXTENSIONS
  326. MS_UOP_STOP = 27,
  327. MS_UOP_POWER = 28,
  328. MS_UOP_EJECT = 29,
  329. MS_UOP_SKIPF = 30,
  330. MS_UOP_SKIPB = 31,
  331. MS_UOP_PAUSE = 32,
  332. MS_UOP_STATUS = 33,
  333. MS_UOP_ANGLE = 34,
  334. MS_UOP_MODE = 35,
  335. MS_UOP_MENU = 36,
  336. MS_UOP_TRANSITION = 37,
  337. MS_UOP_PROGRAM = 38,
  338. MS_UOP_SEARCH = 39,
  339. MS_UOP_TIME = 40,
  340. MS_UOP_REPEAT = 41,
  341. // Internal MS use !
  342. MS_UOP_DISPLAY = 100,
  343. MS_UOP_DELETE = 102,
  344. #ifdef D_MS_EXTENSIONS
  345. MS_UOP_EXT_VALIDATE   = 103,
  346. MS_UOP_EXT_CHOICE_DISPLAY_CLOSED_VALUE   = 104,
  347. MS_UOP_EXT_CHOICE_DISPLAY_OPEN_VALUE   = 105,
  348. MS_UOP_EXT_ACTION   = 106,
  349. MS_UOP_EXT_CHOICE_CLOSE   = 107,
  350. MS_UOP_EXT_CHOICE_NEXT   = 108,
  351. MS_UOP_EXT_HELP   = 109,
  352. #endif // D_MS_EXTENSIONS
  353. MS_UOP_GET_HELP_TEXT = 110,
  354. MS_UOP_10P = 111,
  355. #ifdef MANUAL_DIRECTORY_EXPLORER
  356. MS_UOP_MOVE_CURSOR_TO_FILEWINDOW = 112,
  357. #endif
  358. } MS_UOP;
  359. #ifdef D_COLOR_STRUCT
  360. typedef struct {
  361. unsigned int foreground : 4;
  362. unsigned int background : 4;
  363. unsigned int activate : 4;
  364. unsigned int focused : 4;
  365. } MS_COLOR;
  366. #else
  367. typedef WORD  MS_COLOR;
  368. #endif
  369. #define FG_COLOR_MASK 0xf000
  370. #define FG_COLOR_SHIFT 12
  371. #define BG_COLOR_MASK 0x0f00
  372. #define BG_COLOR_SHIFT 8
  373. #define ACT_COLOR_MASK 0x00f0
  374. #define ACT_COLOR_SHIFT 4
  375. #define FOCUS_COLOR_MASK  0x000f
  376. #define FOCUS_COLOR_SHIFT 0
  377. #define EXTRACT_COLOR(_msColor_, _mask_, _shift_) (((_msColor_) & (_mask_)) >> (_shift_)) 
  378. #define FG_COLOR(_msColor_) EXTRACT_COLOR((_msColor_), FG_COLOR_MASK, FG_COLOR_SHIFT)
  379. #define BG_COLOR(_msColor_) EXTRACT_COLOR((_msColor_), BG_COLOR_MASK, BG_COLOR_SHIFT)
  380. #define ACT_COLOR(_msColor_) EXTRACT_COLOR((_msColor_), ACT_COLOR_MASK, ACT_COLOR_SHIFT)
  381. #define FOCUS_COLOR(_msColor_) ((_msColor_) & FOCUS_COLOR_MASK)
  382. #define BACKGROUND_COLOR(_color_, _focus_) (unsigned char) ( (_focus_) == C_FOCUSED ? FOCUS_COLOR(_color_) : BG_COLOR(_color_) )
  383. #define BACK_COLOR(_widget_, _focus_) BACKGROUND_COLOR(((MS_WIDGET *)(_widget_))->color, (_focus_) )
  384. #define FOREGROUND_COLOR(_color_, _focus_) (unsigned char) ( (_focus_) == C_FOCUSED ? ACT_COLOR(_color_) : FG_COLOR(_color_) )
  385. #define FORE_COLOR(_widget_, _focus_) FOREGROUND_COLOR(((MS_WIDGET *)(_widget_))->color, (_focus_) )
  386. #define MAKE_MS_COLOR(_ifg_, _ibg_, _if_) ( (WORD)(((_ifg_)<<FG_COLOR_SHIFT) + ((_ibg_)<<BG_COLOR_SHIFT) + (_if_)))
  387. typedef struct {
  388. unsigned short x;
  389. unsigned short y;
  390. unsigned short w;
  391. unsigned short h;
  392. } MS_POS;
  393. typedef struct ms_text_list {
  394. unsigned short size;
  395. int *head;  // SC or array of strings
  396. } MS_TEXT_LIST;
  397. typedef struct  ms_widget {
  398. unsigned char attr;
  399. unsigned char attrh;
  400. MS_COLOR color;
  401. MS_POS pos;
  402. struct  ms_dialog *parent;
  403. MS_UOP (*user_op) (struct ms_widget *widget,MS_UOP uop,char param);
  404. } MS_WIDGET;
  405. typedef struct widget_list_item {
  406. struct widget_list_item *next;
  407. struct widget_list_item *prev;
  408. MS_WIDGET *widget;
  409. } WIDGET_LIST_ITEM;
  410. typedef struct ms_dialog{
  411. MS_WIDGET widget;
  412. WIDGET_LIST_ITEM *pwli_widget_list;
  413. WIDGET_LIST_ITEM *pwli_focus;
  414. #ifdef D_MS_EXTENSIONS
  415. #else
  416. WIDGET_LIST_ITEM *pwli_prev_focused;
  417. #endif // D_MS_EXTENSIONS
  418. void (*on_close)(void);
  419. } MS_DIALOG;
  420. typedef struct ms_screen{
  421. MS_DIALOG dialog;
  422. void (*layout)(void);
  423. } MS_SCREEN;
  424. #ifdef D_MS_EXTENSIONS
  425. typedef MS_UOP (*USER_OP)(MS_WIDGET *, MS_UOP, char);
  426. typedef struct ms_group_button{
  427. MS_DIALOG dialog;
  428. void (*action)(void);
  429. } MS_GROUP_BUTTON;
  430. #endif // D_MS_EXTENSIONS
  431. typedef struct  ms_static {
  432. MS_WIDGET widget;
  433. void *text;
  434. } MS_STATIC;
  435. typedef struct  ms_frame {
  436. MS_WIDGET widget;
  437. unsigned char frame_type;
  438. unsigned char thickness;
  439. unsigned char vert_len;
  440. unsigned char horiz_len;
  441. } MS_FRAME;
  442. typedef struct  ms_slider {
  443. MS_WIDGET widget;
  444. unsigned char max_value; // Value represent by the slider [0..value]
  445. unsigned char cur_ratio; // Current ratio [0..value]
  446. unsigned char step;
  447. void (*action)(unsigned char cur_ratio);
  448. int tick_ratio;
  449. } MS_SLIDER;
  450. typedef struct  ms_button {
  451. MS_STATIC present;
  452. void (*action)(void);
  453. } MS_BUTTON;
  454. typedef struct ms_icon {   
  455. MS_WIDGET widget;
  456. CONST BYTE *icon_buff;
  457. }MS_ICON;
  458. typedef struct ms_bitmap {   
  459. MS_POS bitmap_pos;
  460. CONST BYTE *bitmap_buff;
  461. }MS_BITMAP;
  462. typedef struct  ms_bmp_button {
  463. MS_STATIC present;
  464. MS_BITMAP bitmap;
  465. void (*action)(void);
  466. } MS_BMP_BUTTON;
  467. typedef struct  ms_ext_button {
  468. MS_STATIC present;
  469. MS_STATIC helptext;
  470. void (*action)(void);
  471. } MS_EXT_BUTTON;
  472. typedef struct  ms_ext_icon_button {
  473. MS_EXT_BUTTON button;
  474. MS_WIDGET *icon;
  475. } MS_EXT_ICON_BUTTON;
  476. typedef struct  ms_combo_button {
  477. MS_STATIC  present;
  478. MS_STATIC *helptext;
  479. void (*action)(void);
  480. MS_WIDGET *companion;
  481. BYTE is_in_companion;
  482. } MS_COMBO_BUTTON;
  483. typedef struct  ms_combo_icon_button {
  484. MS_COMBO_BUTTON button;
  485. MS_WIDGET *icon;
  486. } MS_COMBO_ICON_BUTTON;
  487. typedef struct ms_list_item {
  488. unsigned char attr;
  489. unsigned char attrh;
  490. unsigned short x;
  491. unsigned short y;
  492. struct MS_WIDGET *mswProto;
  493. } MS_LIST_ITEM;
  494. typedef struct  ms_choice {
  495. MS_WIDGET widget;
  496. const MS_TEXT_LIST *text_list;
  497. void (*action)(int selected_text_no);
  498. //Exchanged choice_pos and current_choice
  499. MS_POS choice_pos;
  500. unsigned short current_choice;
  501. } MS_CHOICE;
  502. typedef struct  ms_ext_help_choice {
  503. MS_CHOICE    choice;
  504. MS_STATIC *helptext;
  505. const MS_TEXT_LIST  *on_help_list;
  506. const MS_TEXT_LIST  *done_help_list;
  507. } MS_EXT_HELP_CHOICE;
  508. #define MS_UOP_EXT MS_UOP
  509. typedef MS_UOP_EXT (*USER_OP_EXT)(MS_WIDGET *, MS_UOP, char, void *);
  510. typedef struct  ms_choice_ext {
  511. MS_WIDGET widget;
  512. USER_OP_EXT m_user_op_ext;
  513. WORD m_wNumItems;
  514. WORD current_choice;
  515. } MS_CHOICE_EXT;
  516. typedef struct ms_choice_std {
  517. MS_CHOICE_EXT choice_ext;
  518. MS_TEXT_LIST *text_list;
  519. void (*action)(int selected_text_no);
  520. MS_POS choice_pos;
  521. } MS_CHOICE_STD;
  522. //<<<ml 0109
  523. #ifdef D_ENABLE_LANGUAGE_POP_OUT
  524. typedef struct  ms_open_choice {
  525. MS_WIDGET widget;
  526. const MS_TEXT_LIST *text_list;
  527. void (*action)(int selected_text_no);
  528. unsigned short current_choice;
  529. MS_POS choice_pos;
  530. void * text;
  531. } MS_OPEN_CHOICE;
  532. #endif  //D_ENABLE_LANGUAGE_POP_OUT
  533. //>>>ml 0109
  534. typedef struct  ms_edit {
  535. MS_STATIC present;
  536. void (*action)(void *text);
  537. unsigned char max_width;
  538. unsigned char current_num;
  539. } MS_EDIT;
  540. typedef struct  ms_valid_edit {
  541. MS_STATIC present;
  542. void (*action)(void *text);
  543. unsigned char max_width;
  544. unsigned char current_num;
  545. BOOL (*validate)( struct ms_valid_edit *pmsve, DWORD *pdw, MS_UOP uop);
  546. void (*format)( struct ms_valid_edit *pmsve, DWORD dw);
  547. } MS_VALID_EDIT;
  548. typedef struct ms_static_bitmap {
  549. MS_WIDGET widget;
  550. void *bmp;
  551. } MS_STATIC_BITMAP;
  552. typedef struct  ms_password {
  553. MS_EDIT msEdit;
  554. } MS_PASSWORD;
  555. typedef struct  ms_time {
  556. MS_EDIT msEdit;
  557. } MS_TIME;
  558. MS_STATIC *MS_create_static(MS_POS *pos,
  559. MS_COLOR color,
  560. void *text, 
  561. unsigned char attr);
  562. void MS_init_static(MS_STATIC *mss, MS_POS *pos, MS_COLOR color, 
  563. void (* user_op)(MS_WIDGET *, MS_UOP, char), 
  564. void *text, unsigned char attr);
  565. typedef enum {
  566. MS_FRAME_TYPE_CORNERED,
  567. MS_FRAME_TYPE_CROSSHAIR
  568. } MS_FRAME_TYPE;
  569. MS_FRAME *MS_create_frame(MS_POS *pos,
  570.   MS_COLOR color,
  571.   MS_FRAME_TYPE frame_type,
  572.   unsigned char thickness,
  573.   unsigned char vertical_side_len,
  574.   unsigned char horizontal_side_len,
  575.   unsigned char attr);
  576. void MS_init_frame(MS_FRAME *msf, MS_POS *pos, MS_COLOR color,
  577. void (* user_op)(MS_WIDGET *, MS_UOP, char),
  578. MS_FRAME_TYPE frame_type,
  579. unsigned char thickness,
  580. unsigned char vertical_side_len,
  581. unsigned char horizontal_side_len,
  582. unsigned char attr);
  583. #ifdef USE_BMP_BUTTON
  584. MS_STATIC_BITMAP *MS_create_bitmap(MS_POS *pos,
  585. MS_COLOR color,
  586. void *pvImg,
  587. unsigned char attr);
  588. #endif
  589. MS_ICON *MS_create_icon(MS_POS *pos,
  590. MS_COLOR color,
  591. void *icon_buff, 
  592. unsigned char attr,
  593. BYTE bg_idx);
  594. void MS_init_icon(MS_ICON *msi, MS_POS *pos, MS_COLOR color, 
  595. void (* user_op)(MS_WIDGET *, MS_UOP, char), 
  596. void *icon_buff, unsigned char attr);
  597. MS_BUTTON *MS_create_button(MS_POS *pos,
  598. MS_COLOR color,
  599. MS_UOP (*userop)(MS_WIDGET *,MS_UOP,char),
  600. void *text,
  601. void (* action)(void), 
  602. unsigned char attr);
  603. void MS_init_button(MS_BUTTON *msb, MS_POS *pos, MS_COLOR color,
  604. MS_UOP (*user_op)(MS_WIDGET *, MS_UOP,char),
  605. void *text, void (* action)(void), 
  606. unsigned char attr);
  607. MS_EXT_BUTTON *MS_create_ext_button(MS_POS *pos, MS_COLOR color,
  608. MS_UOP (*user_op)(MS_WIDGET *,MS_UOP,char),
  609. void *text,
  610. void (* action)(void), 
  611. unsigned char attr);
  612. void MS_init_ext_button(MS_EXT_BUTTON *msb, MS_POS *pos,MS_COLOR color,
  613. MS_UOP (*user_op)(MS_WIDGET *,MS_UOP,char),
  614. void *text,void (* action)(void), 
  615. unsigned char attr);
  616. MS_EXT_ICON_BUTTON *MS_create_ext_icon_button(MS_POS *pos, MS_COLOR color,
  617. MS_UOP (*user_op)(MS_WIDGET *,MS_UOP,char),
  618. void *text,
  619. void (* action)(void), 
  620. unsigned char attr,
  621. MS_WIDGET * widget);
  622. void MS_init_ext_icon_button(MS_EXT_ICON_BUTTON *msb, MS_POS *pos,MS_COLOR color,
  623. MS_UOP (*user_op)(MS_WIDGET *,MS_UOP,char),
  624. void *text,void (* action)(void), 
  625. unsigned char attr,
  626. MS_WIDGET *widget);
  627. MS_COMBO_BUTTON *MS_create_combo_button(MS_POS *pos, MS_COLOR color,
  628. MS_UOP (*user_op)(MS_WIDGET *,MS_UOP,char),
  629. void *text,
  630. void (* action)(void), 
  631. unsigned char attr,
  632. unsigned char attrh,
  633. MS_STATIC  *helptext,
  634. MS_WIDGET *companion);
  635. void MS_init_combo_button(MS_COMBO_BUTTON *msb, MS_POS *pos,MS_COLOR color,
  636. MS_UOP (*user_op)(MS_WIDGET *,MS_UOP,char),
  637. void *text,void (* action)(void), 
  638. unsigned char attr,
  639. unsigned char attrh,
  640. MS_STATIC  *helptext,
  641. MS_WIDGET *companion);
  642. MS_COMBO_ICON_BUTTON *MS_create_combo_icon_button(MS_POS *pos, MS_COLOR color,
  643. MS_UOP (*user_op)(MS_WIDGET *,MS_UOP,char),
  644. void *text,
  645. void (* action)(void), 
  646. unsigned char attr,
  647. unsigned char attrh,
  648. MS_STATIC  * helptext,
  649. MS_WIDGET *companion,
  650. MS_WIDGET *icon);
  651. void MS_init_combo_icon_button(MS_COMBO_ICON_BUTTON *msb, MS_POS *pos,MS_COLOR color,
  652. MS_UOP (*user_op)(MS_WIDGET *,MS_UOP,char),
  653. void *text,void (* action)(void), 
  654. unsigned char attr,
  655. unsigned char attrh,
  656. MS_STATIC  * helptext,
  657. MS_WIDGET *companion,
  658. MS_WIDGET *icon);
  659. MS_EDIT *MS_create_edit(MS_POS *pos,
  660. MS_COLOR color,
  661. void *text,
  662. void (* action)(void *), 
  663. unsigned char max_width,
  664. unsigned char attr);
  665. #ifdef D_MS_EXTENSIONS
  666. MS_VALID_EDIT *MS_create_valid_edit(MS_POS *pos,
  667. MS_COLOR color,
  668. void *text,
  669. void (* action)(void *), 
  670. unsigned char max_width,
  671. //  Added formatting capability
  672. BOOL (*validate)(struct ms_valid_edit *, DWORD *, MS_UOP),
  673. void (*format)(struct ms_valid_edit *, DWORD),
  674. unsigned char attr);
  675. #endif // D_MS_EXTENSIONS
  676. MS_TIME *MS_create_time(MS_POS *pos,
  677. MS_COLOR color,
  678. void *text,
  679. void (* action)(void *), 
  680. unsigned char max_width,
  681. unsigned char attr);
  682. MS_PASSWORD *MS_create_password(MS_POS *pos,
  683. MS_COLOR color,
  684. void *text,
  685. void (* action)(void *), 
  686. unsigned char max_width,
  687. unsigned char attr);
  688. MS_DIALOG *MS_create_dialog(MS_POS *pos,
  689. MS_COLOR color,
  690. MS_DIALOG *parent,
  691. void (*on_close)(void),
  692. unsigned short attr);
  693. MS_SCREEN *MS_create_screen(MS_POS *pos,
  694. MS_COLOR color, 
  695. unsigned short attr,
  696. void (*on_close)(void),
  697. void(*layout)(void));
  698. MS_SLIDER *MS_create_slider(MS_POS *pos,
  699. MS_COLOR color,
  700. unsigned char max_value,
  701. unsigned char cur_ratio,
  702. unsigned char step,
  703. void (* action)(unsigned char cur_ratio),
  704. int tick_ratio,
  705. unsigned char attr);
  706. #ifdef D_MS_EXTENSIONS
  707. MS_GROUP_BUTTON *MS_create_group_button(MS_POS *pos, MS_COLOR color, void (*on_close)(void), void (* action)(void), unsigned char attr);
  708. #endif // D_MS_EXTENSIONS
  709. void MS_hide(MS_WIDGET *widget,MS_DIALOG *parent);
  710. void MS_add_item(MS_DIALOG *dialog,MS_WIDGET *widget, char focus);
  711. void MS_remove_item_rapidly(MS_DIALOG *dialog,MS_WIDGET *widget);
  712. #define MS_ADD_TO_CONTAINER(_pmsd_, _pmsw_, _cFocused_) 
  713. MS_add_item( (MS_DIALOG *) (_pmsd_), (MS_WIDGET *) (_pmsw_), (_cFocused_) )
  714. // Implement YesNo items for password dialog
  715. #ifdef ZS5XX_PASSWORD
  716. int MS_detach_item(MS_WIDGET *widget);
  717. #endif // ZS5XX_PASSWORD
  718. int MS_remove_item(MS_WIDGET *widget);
  719. int MS_refresh(MS_DIALOG *dialog);
  720. void MS_dialog_display(MS_DIALOG *dialog);
  721. MS_UOP MS_user_operation(MS_SCREEN *screen,MS_UOP uop,char param);
  722. void MS_delete(MS_WIDGET *widget);
  723. MS_CHOICE *MS_create_choice(const MS_POS *pos, MS_COLOR color, const MS_TEXT_LIST *text_list, const MS_POS *choice_pos, void (* action)(int), unsigned char attr);
  724. #ifdef D_ENABLE_LANGUAGE_POP_OUT
  725. MS_OPEN_CHOICE *MS_create_open_choice(const MS_POS *pos, MS_COLOR color, const MS_TEXT_LIST *text_list, const MS_POS *choice_pos, void (* action)(int), unsigned char attr,void * text);
  726. //ml 0110
  727. #endif //D_ENABLE_LANGUAGE_POP_OUT
  728. #ifdef D_PUSHABLE_MENU
  729. MS_CHOICE *MS_create_choice_ex(CONST MS_POS *pos, MS_COLOR color, CONST MS_TEXT_LIST *text_list, CONST MS_POS *choice_pos, void (* action)(int), unsigned char attr);
  730. MS_CHOICE *MS_create_choice_ex_scroll(CONST MS_POS *pos, MS_COLOR color, CONST MS_TEXT_LIST *text_list, CONST MS_POS *choice_pos, void (* action)(int), unsigned char attr,BYTE visible_items);
  731. #else
  732. MS_CHOICE *MS_create_choice_ex(CONST MS_POS *pos, MS_COLOR color, CONST MS_TEXT_LIST *text_list,  void (* action)(int), unsigned char attr);
  733. MS_CHOICE *MS_create_choice_ex_scroll(CONST MS_POS *pos, MS_COLOR color, CONST MS_TEXT_LIST *text_list,  void (* action)(int), unsigned char attr,BYTE visible_items);
  734. #endif
  735. MS_EXT_HELP_CHOICE *MS_create_ext_help_choice(CONST MS_POS *pos, MS_COLOR color, 
  736. CONST MS_TEXT_LIST *text_list,  
  737. void (* action)(int),unsigned char attr,
  738.                                         MS_STATIC *helptext, 
  739.                                         CONST MS_TEXT_LIST *on_help_list,
  740.                                         CONST MS_TEXT_LIST *done_help_list);
  741.                                        
  742. MS_EXT_HELP_CHOICE *MS_create_ext_help_choice_scroll(CONST MS_POS *pos, MS_COLOR color, 
  743. CONST MS_TEXT_LIST *text_list,  
  744. void (* action)(int),unsigned char attr,
  745.                                         MS_STATIC *helptext, 
  746.                                         CONST MS_TEXT_LIST *on_help_list,
  747.                                         CONST MS_TEXT_LIST *done_help_list,
  748.                                         BYTE visible_items);
  749. void MS_change_focus(MS_DIALOG *pDialog, MS_WIDGET *pWidget);
  750. // Support external display of open choices
  751. void choice_display_open_value(MS_CHOICE *pmsc, WORD wItemNum, char focus );
  752. void MS_create_list_item(unsigned short x, unsigned short y, MS_WIDGET *pProto, unsigned short usSize);
  753. // Standard user-ops for some menu system types
  754. MS_UOP static_user_op(MS_WIDGET *widget,MS_UOP uop,char param);
  755. MS_UOP frame_user_op(MS_WIDGET *widget,MS_UOP uop,char param);
  756. MS_UOP button_user_op(MS_WIDGET *widget,MS_UOP uop,char param);
  757. MS_UOP ext_button_user_op(MS_WIDGET *widget,MS_UOP uop,char param);
  758. MS_UOP ext_icon_button_user_op(MS_WIDGET *widget,MS_UOP uop,char param) ;
  759. MS_UOP combo_button_user_op(MS_WIDGET *widget,MS_UOP uop,char param) ;
  760. MS_UOP combo_icon_button_user_op(MS_WIDGET *widget,MS_UOP uop,char param);
  761. MS_UOP choice_user_op(MS_WIDGET *widget,MS_UOP uop,char param);
  762. MS_UOP choice_ex_user_op(MS_WIDGET *widget, MS_UOP uop, char param); 
  763. MS_UOP ext_help_choice_user_op(MS_WIDGET *widget, MS_UOP uop, char param); 
  764. MS_UOP dialog_user_op (MS_WIDGET *widget,MS_UOP uop, char param);
  765. MS_UOP edit_user_op(MS_WIDGET *widget,MS_UOP uop,char param);
  766. //  Expose user_op for MS_PASSWORD
  767. MS_UOP password_user_op(MS_WIDGET *widget,MS_UOP uop,char param);
  768. #ifdef USE_BMP_BUTTON
  769. MS_UOP bmp_button_user_op(MS_WIDGET *widget,MS_UOP uop,char param);
  770. #endif
  771. unsigned char edit_number_select(MS_EDIT *edit, unsigned char num);
  772. void edit_display (MS_WIDGET *widget, char focus);
  773. void init_edit(MS_EDIT *pmse,
  774. MS_POS *pos,
  775. MS_COLOR color,
  776. void *text,
  777. void (*action)(void *),
  778. unsigned char max_width,
  779. unsigned char attr);
  780. // Optimize MS_create_dialog, MS_create_screen, MS_create_group_button
  781. #ifdef USE_BMP_BUTTON
  782. MS_UOP bitmap_user_op(MS_WIDGET *widget,MS_UOP uop,char param);
  783. #endif
  784. MS_UOP icon_user_op(MS_WIDGET *widget,MS_UOP uop,char param); 
  785. MS_UOP time_user_op(MS_WIDGET *widget,MS_UOP uop,char param);
  786. #ifdef D_MS_EXTENSIONS
  787. MS_UOP group_button_user_op(MS_WIDGET *widget,MS_UOP uop,char param);
  788. #endif // MS_EXTENSIONS
  789. void MS_init_dialog(MS_DIALOG *dialog,
  790. MS_POS *pos,
  791. MS_COLOR color,
  792. MS_DIALOG *parent,
  793. void (*on_close)(void),
  794. unsigned short attr);
  795. // Shorthand for displaying an unfocused widget
  796. void MS_display(MS_WIDGET *widget);
  797. // Utility functions
  798. BOOL text_to_num(wchar_t *text, long *pdw);
  799. void text_to_seconds(wchar_t *text, long *pSeconds);
  800. void text_to_seconds2(wchar_t *text, long *pSeconds,int max_digits);
  801. int get_num_digits(ULONG number);
  802. int get_time_digits(ULONG number);
  803. void MS_icon_override_color_select(BYTE bg_idx);
  804. // convenience in override user_ops
  805. #ifdef D_MS_EXTENSIONS
  806. #define MS_CHOICE_OPEN_VALUE_POS_Y(_pmsc_, _wItemNum_)   ( (_pmsc_)->choice_pos.y + ((_pmsc_)->choice_pos.h * (_wItemNum_)) )
  807. #endif
  808. // Code readability
  809. #define NO_ACTION NULL
  810. #endif // _MS_WDGT_H_