📄 osd3.c
字号:
#define MENU_MAIN_FILE
#include "winav.h"
#include "utl.h"
#include "comutl.h"
#include "w99av.h"
#include "hal.h"
#include "osd.h"
#include "cc.h"
#include "input.h"
#include "gdi.h"
#include "setup.h"
#include "osd3.h"
// Brian1.05, define this to skip disabled item when moving cursor
#define SKIP_DISABLED_ITEM
// Brian1.08a, support horizontal Icon menu
#define OSDMENU_GOTO_PREV_ITEM 0
#define OSDMENU_GOTO_NEXT_ITEM 1
#define OSDMENU_GOTO_SUB_MENU 2
#define OSDMENU_GOTO_PARENT_MENU 3
#define OSDMENU_SELECT_ITEM 4
/*
#define UI_BACKGROUND_COLOR 6 //0
#define MENU_COLOR_BRIGHT 12
#define MENU_COLOR_DARK 4
#define MENU_COLOR_CENTER 5
#define MENU_BORDER_THICKNESS 2
// the item text background color
#define MENU_ITEM_COLOR_HIGHLIGHT COLOR_YELLOW
#define MENU_ITEM_COLOR_SELECT 9 //COLOR_DARK_GRAY
#define MENU_ITEM_COLOR_NORMAL MENU_COLOR_CENTER
// the item text color
#define MENU_ITEM_TEXT_COLOR COLOR_BLACK1
#define MENU_ITEM_TEXT_COLOR_DISABLE 13
#define MENU_DESCRIPTION_COLOR 1
*/
// Brian2.37
#ifdef SUPPORT_FONT_26
#define MENU_ITEM_HEIGHT 26 //each Item line height
#else
#define MENU_ITEM_HEIGHT 32 //each Item line height
#endif
#define MENU_ITEM_X_OFFSET 40 // the x offset reserves space for "check mark"
#define MENU_SCROLL_HEIGHT 20 // the scroll-up/down mark height is 16, plus 2 border thinkness
#ifndef REMOVE_SETUP_ICON
#define MENU_ICON_HEIGHT (44+4) // the height of the icon in the list, including the border 2*2
#else
#define MENU_ICON_HEIGHT 44
#endif
// Brian1.08a
#define MENU_ICON_WIDTH (60+4) // the width of the icon in the list
#define MENU_ICON_X_OFFSET 36 // use for horizontal icon menu
#define MENU_ICON_Y_OFFSET 6 // use for vertical icon menu
#define MENU_DESCRIPTION_X (104+MENU_GLOBAL_OFFSET) // Brian1.24
#define MENU_DESCRIPTION_Y 36
// for Input dialog display in Setup
// Brian1.08
#ifdef SETUP_DIALOG_RECOVER_BY_REDRAW
// Adjust the "Input Password" / "Input Language Code" dialog position, so it won't overlap with Setup menu
#define DIALOG_INPUT_PASSWORD_X1 (108+MENU_GLOBAL_OFFSET) // Brian1.24
#define DIALOG_INPUT_PASSWORD_Y1 250
#define DIALOG_INPUT_PASSWORD_X2 (353+MENU_GLOBAL_OFFSET) // Brian1.24
#define DIALOG_INPUT_PASSWORD_Y2 320
#else
#define DIALOG_INPUT_PASSWORD_X1 (204+MENU_GLOBAL_OFFSET) // Brian1.24
#define DIALOG_INPUT_PASSWORD_Y1 150
#define DIALOG_INPUT_PASSWORD_X2 (449+MENU_GLOBAL_OFFSET) // Brian1.24
#define DIALOG_INPUT_PASSWORD_Y2 220
#endif
#define DIALOG_INPUT_PASSWORD_X_OFFSET 20
#define DIALOG_INPUT_PASSWORD_Y_OFFSET 20
// for Input dialog display in noraml OSD
#define DIALOG_INPUT_PASSWORD_OSD_X1 (16+MENU_GLOBAL_OFFSET) // Brian1.24
#ifdef MINI_OSD_REGION //CoCo2.33, fix the bug about the "Password: " dialog will overwrite the Display mode.
#define DIALOG_INPUT_PASSWORD_OSD_Y1 0 //(OSDND_UPPER_BACKGROUND_RIGHT_DISPLAY_DISTANCE_V+OSDND_FONT_HEIGHT) //20 Howard1.24
#else
#define DIALOG_INPUT_PASSWORD_OSD_Y1 20 //(OSDND_UPPER_BACKGROUND_RIGHT_DISPLAY_DISTANCE_V+OSDND_FONT_HEIGHT) //20 Howard1.24
#endif
#define DIALOG_INPUT_PASSWORD_OSD_X2 (DIALOG_INPUT_PASSWORD_OSD_X1+420)
#define DIALOG_INPUT_PASSWORD_OSD_Y2 (DIALOG_INPUT_PASSWORD_OSD_Y1+31) //CoCo2.33, fix the bug about the "Password: " dialog will overwrite the Display mode.
#define DIALOG_INPUT_PASSWORD_OSD_X_OFFSET 100
#define DIALOG_INPUT_PASSWORD_OSD_Y_OFFSET 0
// Brian1.08
#ifdef SETUP_DIALOG_RECOVER_BY_REDRAW
// Adjust the "change password" dialog position, so it won't overlap with Setup menu
#define DIALOG_CHANGE_PASSWORD_X1 (108+MENU_GLOBAL_OFFSET) // Brian1.24
#define DIALOG_CHANGE_PASSWORD_Y1 224
#define DIALOG_CHANGE_PASSWORD_X2 (492+MENU_GLOBAL_OFFSET) // Brian1.24
#define DIALOG_CHANGE_PASSWORD_Y2 340 //260
#define DIALOG_CHANGE_PASSWORD_X_OFFSET 20
#define DIALOG_CHANGE_PASSWORD_Y_OFFSET 10 //20
#define DIALOG_CHANGE_PASSWORD_X_SHIFT 120 //90
#define DIALOG_CHANGE_PASSWORD_CHAR_WIDTH 20
#define DIALOG_CHANGE_PASSWORD_CHAR_HEIGHT 32 //40
#else
#define DIALOG_CHANGE_PASSWORD_X1 (160+MENU_GLOBAL_OFFSET) // Brian1.24 //200 //304
#define DIALOG_CHANGE_PASSWORD_Y1 160 //110
#define DIALOG_CHANGE_PASSWORD_X2 (543+MENU_GLOBAL_OFFSET) // Brian1.24
#define DIALOG_CHANGE_PASSWORD_Y2 310 //260
#define DIALOG_CHANGE_PASSWORD_X_OFFSET 20
#define DIALOG_CHANGE_PASSWORD_Y_OFFSET 20
#define DIALOG_CHANGE_PASSWORD_X_SHIFT 120 //90
#define DIALOG_CHANGE_PASSWORD_CHAR_WIDTH 20
#define DIALOG_CHANGE_PASSWORD_CHAR_HEIGHT 40
#endif
#define GET_MENU_X(MENU) (WORD)(MENU[1].pbItemText)
#define GET_MENU_Y(MENU) (WORD)(MENU[1].pSubMenu)
#define GET_MENU_WIDTH(MENU) (WORD)(MENU[1].Id)
//#define GET_MENU_ROW(MENU) (WORD)(MENU[1].bAttribute) // could display n Row
//#define GET_MENU_ITEM_NUM(MENU) (WORD)(MENU[0].bAttribute) // number of items in a menu
#define GET_MENU_ROW(MENU) (BYTE)(MENU[1].bAttribute) // could display n Row
#define GET_MENU_ITEM_NUM(MENU) (BYTE)(MENU[0].bAttribute) // number of items in a menu
#define GET_MENU_ITEM_TEXT(MENU, NUM) ((MENU[2+NUM].pbItemText)->pbStr[_bOSDLang])
#define GET_ITEM_ATTRIBUTE(MENU, NUM) (MENU[2+NUM].bAttribute & 0x03)
#define CHECK_ICON_ATTRIBUTE(MENU, NUM) (MENU[2+NUM].bAttribute & 0x10) // check if it is an ICON
#define GET_ITEM_ID(MENU, NUM) (MENU[2+NUM].Id)
#define GET_MENU_ENABLE(MENU) ((BYTE*)(MENU[0].pbItemText)) // the _bEnablexxx
#define GET_MENU_CHECK(MENU) ((BYTE*)(MENU[0].pbItemText)) // &(__SetupInfo.xxx)
#define GET_MENU_BASE(MENU) (MENU[0].Id)
#define GET_MENU_ID(MENU) ((BYTE)(MENU[0].pSubMenu))
#define GET_SUB_MENU(MENU, NUM) (MENU[2+NUM].pSubMenu)
extern BYTE DATA _bOSDLang;
BYTE __bMENUParent[MENU_LEVEL]; // record the parent menu of each level
BYTE __bMENUSelect[MENU_LEVEL]; // record the current selection of each level
BYTE __bMENUDisplayStart[MENU_LEVEL]; // record which item is displayed first in the display area
BYTE __bMENUStatus[MENU_LEVEL]; //bit 0: scroll-up mark appears, bit 1: scroll-down mark appears
//MENU_STRUCT *IDATA _pCurrentMenu;
BYTE __bCurrentMenuId; // replace _pCurrentMenu
WORD __wMENUCurrentItemId, __wMENUPrevItemId;
BYTE __bMENUCurrentLevel;
#ifdef SUPPORT_MENU_CURSOR_STAY_AT_VALUE_AFTER_ENTER
WORD __wMENUItemIdAfterEnter; // Brian1.08a, the Item ID after key Enter
#endif
BYTE _bMenuType; // 0: Setup Menu, 1: AV System, 2: Equalizer
PMENU_STRUCT code *_pMenuIndex; // Brian1.20
//MENU_STRUCT *IDATA _pTempMenu;
// Brian1.20, in fact, it's a pointer to code menu structure
// must declare it as code pointer, otherwise there will be conversion problem with keil C 6.12 and 7.02
MENU_STRUCT code *_pTempMenu;
MENU_STRUCT code *_pTempMenu2, code *_pTempMenu3; // Brian1.08a, Brian1.20
WORD _wMENUTemp;
BYTE _bMENUTemp, _bMENUTemp2;
// this variable is used to keep the New Password for verification
// could be used for other purpose as long as it is not in the "Change Password" process.
WORD _wPasswordTemp;
BYTE bStatus; // used in InputPassword, ChangePassword, InputLanguageCode function
//Alex1.07a for Input dialog display in PSCAN MODE
#if defined (SUPPORT_PSCAN_PROMPT_SETUP) || defined (SUPPORT_PSCAN_PROMPT_OSD)
#define DIALOG_INPUT_PSCAN_X1 (104+MENU_GLOBAL_OFFSET) // Brian1.24
#define DIALOG_INPUT_PSCAN_Y1 120
#define DIALOG_INPUT_PSCAN_X2 (504+MENU_GLOBAL_OFFSET) // Brian1.24
#define DIALOG_INPUT_PSCAN_Y2 340
#define DIALOG_INPUT_PSCAN_X_OFFSET 30
#define DIALOG_INPUT_PSCAN_Y_OFFSET 30
BYTE __bOSDPromptMode;
BYTE OSDPROMPT_ProcessKey(BYTE bKey);
#define OSD_PSCAN_PROMPT_WAIT_TIME 10 //5
BYTE __bOSDPromptWaitTime; // = OSD_PSCAN_PROMPT_WAIT_TIME; To count How many time left
BYTE __bOSDPromptPreKey;
DWORD __dwOSDPromptInitialTime; // = OSD_PSCAN_PROMPT_Intial_TIME; To count How many time left
//extern BIT __btPlaying;
//extern DWORD data __dwCountSystem;
//extern BYTE __bModeCmd;
extern BYTE __bOSDPromptMode; // = FALSE; put in _INITIAL_Variables_PowerON
void OSDPROMPT_Trigger(void);
void OSDSETUP_ScreenVideoOutputPscanDlg(void);
BYTE OSDSETUP_InputPscan(BYTE bKey);
extern BYTE OSDPROMPT_ProcessKey(BYTE bKey);
extern BYTE CC_DoKeyAction(BYTE bKey);
#endif //#if defined (SUPPORT_PSCAN_PROMPT_SETUP) || defined (SUPPORT_PSCAN_PROMPT_OSD)
void OSDMENU_DrawItem(BYTE bBase, BYTE bItem, BYTE bColor);
void OSDMENU_DisplaySubMenu(BYTE bItem, BYTE bLevel);
void OSDMENU_DisplayAVSysMenu(BYTE bLevel); // sepcial for AV system menu
void _DisplayIconMenu(void);
void _DisplayMenu(BYTE bItem, BYTE bLevel);
void OSDMENU_ClearMenu(void);
void OSDSETUP_ShowDescriptionText(void);
BYTE _GetMenuItemPosition(BYTE bItemId); // Brian1.08
void _DisplayCurrentSettings(void); // Brian1.08a
void _ClearCurrentSettings(void); // Brian1.08a
void OSDMENU_Initial(void)
{
// don't forget to initialize the Enable array accroding to the number of item
_bEnableLanguage[0] = 0xFF; //0xFE;
_bEnableScreen[0] = 0xFF;
_bEnableAudio[0] = 0xFF;
_bEnableCustom[0] = 0xFF;
_bEnableMain[0] = 0xFF;
__bMENUCurrentLevel = 0;
for (_bMENUTemp=0; _bMENUTemp<MENU_LEVEL; _bMENUTemp++)
{
__bMENUParent[_bMENUTemp] = 0;
__bMENUSelect[_bMENUTemp] = 0;
__bMENUDisplayStart[_bMENUTemp] = 0;
__bMENUStatus[_bMENUTemp] = 0;
}
//__bCurrentMenuId = SETUP_MENU_MAIN ;//SETUP_MENU_LANGUAGE;
//__wMENUCurrentItemId = SETUP_MAIN_LANGUAGE;
__bMENUCurrentLevel = 0; //1;
__bMENUSelect[__bMENUCurrentLevel] = 0; //3;
__bMENUDisplayStart[__bMENUCurrentLevel] = 0;
_pMenuIndex = _SetupMenuIndex;
switch (_bMenuType)
{
case MENU_TYPE_SETUP:
//_pMenuIndex = _SetupMenuIndex;
// Brian1.08, support runtime change menu for Audio Prologic
if (__bSupportFeature & SUPPORT_FEATURE_PROLOGIC)
__bCurrentMenuId = SETUP_MENU_MAIN_WITH_PROLOGIC;
else
__bCurrentMenuId = SETUP_MENU_MAIN ;//SETUP_MENU_LANGUAGE;
__wMENUCurrentItemId = SETUP_MAIN_LANGUAGE;
break;
case MENU_TYPE_AV_SYS:
__bCurrentMenuId = AVSYS_MENU_CHANNEL ;//SETUP_MENU_LANGUAGE;
__wMENUCurrentItemId = SETUP_MAIN_LANGUAGE;
//_pMenuIndex = _AVSyMenuIndex;
break;
case MENU_TYPE_EQUALIZER:
__bCurrentMenuId = AVSYS_MENU_EQ ;//SETUP_MENU_LANGUAGE;
__wMENUCurrentItemId = SOUND_EFFECT_STANDARD;
//_pMenuIndex = _AVSysMenuIndex;
break;
}
// Set palette entries
OSDMENU_SetMenuPalEntry();
}
void OSDMENU_SetMenuPalEntry(void)
{
// set entries used by Menu, Setup, Equalizer and AV System
GDI_ChangePALEntry(OSDMENU_ENTRY_MENU_COLOR_BRIGHT, OSDMENU_VALUE_MENU_COLOR_BRIGHT, FALSE);
GDI_ChangePALEntry(OSDMENU_ENTRY_MENU_COLOR_DARK, OSDMENU_VALUE_MENU_COLOR_DARK, FALSE);
GDI_ChangePALEntry(OSDMENU_ENTRY_MENU_COLOR_CENTER, OSDMENU_VALUE_MENU_COLOR_CENTER, FALSE);
GDI_ChangePALEntry(OSDMENU_ENTRY_TEXT_COLOR_NORMAL, OSDMENU_VALUE_TEXT_COLOR_NORMAL, FALSE);
GDI_ChangePALEntry(OSDMENU_ENTRY_TEXT_COLOR_DISABLE, OSDMENU_VALUE_TEXT_COLOR_DISABLE, FALSE);
GDI_ChangePALEntry(OSDMENU_ENTRY_DESC_TEXT_COLOR, OSDMENU_VALUE_DESC_TEXT_COLOR, FALSE);
GDI_ChangePALEntry(OSDMENU_ENTRY_ITEM_COLOR_SELECT, OSDMENU_VALUE_ITEM_COLOR_SELECT, FALSE);
GDI_ChangePALEntry(OSDMENU_ENTRY_ITEM_COLOR_HIGHLIGHT, OSDMENU_VALUE_ITEM_COLOR_HIGHLIGHT, FALSE);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -