📄 osdmm.c
字号:
#define OSDMM_MAIN_FILE_DECLARATION
#include "winav.h"#include "comdef.h"#include "OSDMM.h"#include "osdnd.h"#include "osd.h"#include "utl.h"#include "cc.h"#include "linear.h"// wyc0.50-909, make infofilter.h before Mmanager.h because of Mmanager.h need to reference some information defined in infofilter.h#include "infofilter.h"#include "mmanager.h"#include "InfoFilter.h"#include "gdi.h"#include "fontindex.h" //++CoCo2.37P#include "osdfont.h"#include "hal.h"#include "setup.h"
#include "notransl.h"
#include "disp.h"
#include "jpegdec.h"
#include "convchar.h"#define OSDMM_MAIN_FILE//#include "string.lan"#include "OSDString\\strextrn.h"//********************************************************************************************************//Declare Skin setting//********************************************************************************************************DWORD _dwOSDMMGeneralBackgroundColor[] = {OSDMM_PALETTE_COLOR_GENERAL_BACKGROUND_1, OSDMM_PALETTE_COLOR_GENERAL_BACKGROUND_2, OSDMM_PALETTE_COLOR_GENERAL_BACKGROUND_3, OSDMM_PALETTE_COLOR_GENERAL_BACKGROUND_4};DWORD _dwOSDMMTitleStringColor[] = {OSDMM_PALETTE_COLOR_TITLE_STRING_1, OSDMM_PALETTE_COLOR_TITLE_STRING_2, OSDMM_PALETTE_COLOR_TITLE_STRING_3, OSDMM_PALETTE_COLOR_TITLE_STRING_4};DWORD _dwOSDMMTimeStringColor[] = {OSDMM_PALETTE_COLOR_TIME_STRING_1, OSDMM_PALETTE_COLOR_TIME_STRING_2, OSDMM_PALETTE_COLOR_TIME_STRING_3, OSDMM_PALETTE_COLOR_TIME_STRING_4};DWORD _dwOSDMMBackgroundFrameColor[] = {OSDMM_PALETTE_COLOR_BACKGROUND_FRAME_1, OSDMM_PALETTE_COLOR_BACKGROUND_FRAME_2, OSDMM_PALETTE_COLOR_BACKGROUND_FRAME_3, OSDMM_PALETTE_COLOR_BACKGROUND_FRAME_4};DWORD _dwOSDMMHelpRegionBackgroundColor[] = {OSDMM_PALETTE_COLOR_HELP_REGION_BACKGROUND_1, OSDMM_PALETTE_COLOR_HELP_REGION_BACKGROUND_2, OSDMM_PALETTE_COLOR_HELP_REGION_BACKGROUND_3, OSDMM_PALETTE_COLOR_HELP_REGION_BACKGROUND_4};DWORD _dwOSDMMHButtonEnableColor[] = {OSDMM_PALETTE_COLOR_BUTTON_ENABLE_BACKGROUND_1, OSDMM_PALETTE_COLOR_BUTTON_ENABLE_BACKGROUND_2, OSDMM_PALETTE_COLOR_BUTTON_ENABLE_BACKGROUND_3, OSDMM_PALETTE_COLOR_BUTTON_ENABLE_BACKGROUND_4};DWORD _dwOSDMMHButtonEnableStringColor[] = {OSDMM_PALETTE_COLOR_ENABLE_BUTTON_STRING_1, OSDMM_PALETTE_COLOR_ENABLE_BUTTON_STRING_2, OSDMM_PALETTE_COLOR_ENABLE_BUTTON_STRING_3, OSDMM_PALETTE_COLOR_ENABLE_BUTTON_STRING_4};DWORD _dwOSDMMDlgTitleBarColor[] = {OSDMM_PALETTE_COLOR_DLG_TITLE_BAR_1, OSDMM_PALETTE_COLOR_DLG_TITLE_BAR_2, OSDMM_PALETTE_COLOR_DLG_TITLE_BAR_3, OSDMM_PALETTE_COLOR_DLG_TITLE_BAR_4};DWORD _dwOSDMMDlgOuterFrameColor[] = {OSDMM_PALETTE_COLOR_DLG_OUTER_FRAME_1, OSDMM_PALETTE_COLOR_DLG_OUTER_FRAME_2, OSDMM_PALETTE_COLOR_DLG_OUTER_FRAME_3, OSDMM_PALETTE_COLOR_DLG_OUTER_FRAME_4};DWORD _dwOSDMMDlgBackgroundColor[] = {OSDMM_PALETTE_COLOR_DLG_BACKGROUND_1, OSDMM_PALETTE_COLOR_DLG_BACKGROUND_2, OSDMM_PALETTE_COLOR_DLG_BACKGROUND_3, OSDMM_PALETTE_COLOR_DLG_BACKGROUND_4};//********************************************************************************************************//Declare global variables//********************************************************************************************************BYTE __bActiveDirChange;BYTE _bOSDMMStartDrawDir; //The starting item in the left file window.WORD __wOSDMMStartDrawItem;PARM_DRAW_STRING _OSDMMStringAttr;PARM_FRAME _OSDMMFrame;PARM_SCROLL_BAR _OSDMMScrollBar;PARM_RECT _OSDMMRect;PARM_BITMAP_COPY _OSDMMBitmapCopy;//PARM_DRAW_BITMAP _OSDMMDrawBitmap;WORD _wOSDMMTemp;DWORD _dwOSDMMTemp;BYTE _bOSDMMFileLength;BYTE _bOSDMMHaveUpDIR;BYTE _bOSDMMTemp, _bOSDMMTemp1, _bOSDMMTemp2;BYTE _bOSDMMIconType;BYTE _bOSDMMTitleType;BYTE _bOSDMMUpdate;BYTE _bOSDMMPlayingTitle;BYTE _bOSDMMHelpType;BYTE _bOSDMMShowTime;DWORD _dwOSDMMFlashTime, _dwOSDMMSpectrumTime;BYTE _bOSDMMFlash;WORD *__pOSDMMOutputString;BYTE _bOSDMMSortFile[] = {MM_SORT_BY_TYPE, MM_SORT_BY_NAME, MM_SORT_BY_TIME, MM_SORT_BY_ASCENDING, MM_SORT_BY_DESCENDING};SPECTRUM _bOSDMMSpectrum[] = {{OSDMM_AUDIO_SPECTRUM_LINE_0_RANGE, OSDMM_AUDIO_SPECTRUM_LINE_0_COLOR}, {OSDMM_AUDIO_SPECTRUM_LINE_1_RANGE, OSDMM_AUDIO_SPECTRUM_LINE_1_COLOR}, {OSDMM_AUDIO_SPECTRUM_LINE_2_RANGE, OSDMM_AUDIO_SPECTRUM_LINE_2_COLOR}, {OSDMM_AUDIO_SPECTRUM_LINE_3_RANGE, OSDMM_AUDIO_SPECTRUM_LINE_3_COLOR}, {OSDMM_AUDIO_SPECTRUM_LINE_4_RANGE, OSDMM_AUDIO_SPECTRUM_LINE_4_COLOR}};DWORD _dwOSDMMEQLow, _dwOSDMMEQHigh;DWORD _dwOSDMMNewEQLow, _dwOSDMMNewEQHigh;DWORD _dwOSDMMEQDropLow, _dwOSDMMEQDropHigh;BYTE _bOSDMMButtonState[][2] = {{OSDMM_BUTTON_ENABLE, OSDMM_BUTTON_ENABLE}, {OSDMM_BUTTON_ENABLE, OSDMM_BUTTON_ENABLE},
{OSDMM_BUTTON_ENABLE, OSDMM_BUTTON_ENABLE}, {OSDMM_BUTTON_ENABLE, OSDMM_BUTTON_ENABLE}};
DWORD _dwOSDMMAudioFreq, _dwOSDMMAudioBitRate, _dwOSDMMAudioTotalTime;
BYTE _bOSDMMUIMode;
BYTE _bOSDMMSaveFile = FALSE;
extern BYTE __bMMSaveProgress;
#ifdef SUPPORT_COPY_FILE_IN_MM_UI
HDIALOG _hOSDMMSaveFileDlg = DIALOG_HANDLE_INVALID;
WORD aOSDMMPercent[] = {1, CHAR_N_PERCENT};
#endif //SUPPORT_COPY_FILE_IN_MM_UI
#ifdef SUPPORT_COPY_FILE_IN_SLIDE_SHOW
HDIALOG _hOSDMMSaveDlg = DIALOG_HANDLE_INVALID;
HDIALOG _hOSDMMDeleteDlg = DIALOG_HANDLE_INVALID;
#endif //SUPPORT_COPY_FILE_IN_SLIDE_SHOW
//The following declaraction will refer to MManager. Will remove it.extern BYTE __bMMPopMenuID;extern PDIRNAMEINFO __pMMDirNameList;extern BYTE __bMMVolumeSet [1];extern DWORD __dwFileTime;// wyc1.05-909, can't put in mmanager.h, so put here.extern PTREE_INFO __pMMVolumeDirTree;extern BYTE __bMMrogressCnt;//********************************************************************************************************// Function : // Abstract : Update the Media Manager UI according to the message.// Arguments : OSDMM_MSG_INITIAL: Initialize the Media Manager UI. When Media Manager UI is invoked at // first time, Fmanager need to send this message to draw the UI.// : OSDMM_MSG_EXIT: Clear the Media Manager UI.// : OSDMM_MSG_UPDATE_HIGHLIGHT: This message is for updating the cursor. Fmanager can send // : this message when the cursor is moving. OSDMM will draw the // : cursor according to the cursor's information given by Fmanager.// : OSDMM_MSG_CLEAR_HIGHLIGHT: This message is for clearing the cursor.// : OSDMM_MSG_UPDATE_CHANGE_DIR: Change the directory when the cursor is at the DIR window.// : OSDMM_MSG_UPDATE_PROGRAM_ITEM: Draw the selected frame when the user presses KEY_ENTER to program the item.// : OSDMM_MSG_UPDATE_FILE_WINDOW_NEXT: Change to the next page when user presses KEY_NEXT to show the next page.// : OSDMM_MSG_UPDATE_FILE_WINDOW_PREVIOUS: Change to the previous page when user presses KEY_PREV to show the previous page.// : OSDMM_MSG_UPDATE_CHANGE_DIR_LEVEL: Change the DIR level.// : OSDMM_MSG_CHANGE_MODE: Send this message to change normal mode, Program mode and Program List.// : OSDMM_MSG_PLAYING: Update the title to the playing mode. It will show current playing file not the file of cursor's position. // : OSDMM_MSG_UPDATE_ACTIVE_PLAYING_FILE: Update the active playing file.// : OSDMM_MSG_CLEAR_ACTIVE_PLAYING_FILE: Clear the active playing file to normal state.// : OSDMM_MSG_STOP: Send this message to notify OSDMM when user presses KEY_STOP. // : Then OSDMM will update the title and stop flashing the active playing file.// : OSDMM_MSG_SHOW_DLG: Send this message to show dialog.// : OSDMM_MSG_CLEAR_DLG: Send this message to clear dialog.// : OSDMM_MSG_UPDATE_DLG_ITEM: Send this message to update the item of the dialog.// : OSDMM_MSG_REMOVE_ACTIVE_VOLUME: Send this message when user removes the active volume. // : Then UI will enter File Manager's starting menu. // : OSDMM_MSG_REMOVE_NOT_ACTIVE_VOLUME: Send this message when user removes the non-active // : volume and the non-active volume can be seen at the screen. // : Then only the left file window will be updated.// Return : none.// Side Effect : none.// Notes : //*********************************************************************************************************void OSDMM_Update(BYTE bMessage, BYTE bParam){
switch (bMessage) { case OSDMM_MSG_INITIAL:
_bOSDMMUIMode = bParam;
_OSDMM_Initial(OSDMM_MODE_INITIAL_UI); break; case OSDMM_MSG_EXIT: _OSDMM_Exit(); break; case OSDMM_MSG_UPDATE_HIGHLIGHT: _OSDMM_UpdateHighlight(OSDMM_UPDATE_DRAW); break; case OSDMM_MSG_CLEAR_HIGHLIGHT: _OSDMM_UpdateHighlight(OSDMM_UPDATE_CLEAR); break; case OSDMM_MSG_UPDATE_CHANGE_DIR: _OSDMM_ChangeDir(); break; case OSDMM_MSG_UPDATE_PROGRAM_ITEM: _OSDMM_UpdateProgramItem(); break; case OSDMM_MSG_UPDATE_FILE_WINDOW_NEXT: _OSDMM_ChangePage(OSDMM_CHANGE_PAGE_NEXT); break; case OSDMM_MSG_UPDATE_FILE_WINDOW_PREVIOUS: _OSDMM_ChangePage(OSDMM_CHANGE_PAGE_PREVIOUS); break; case OSDMM_MSG_UPDATE_CHANGE_DIR_LEVEL: _OSDMM_ChangeDirLevel(); break; case OSDMM_MSG_CHANGE_MODE: _OSDMM_ChangMode(bParam); break; case OSDMM_MSG_PLAYING: //This message is for audio only _OSDMM_UpdatePlayingTitle(); _OSDMM_ResetAudioSpectrum();
HAL_WriteAM(HAL_AM_EQ_AMPLITUDE_LEFT_SHIFT, OSDMM_AMPLITUDE_SHIFT_BITS); //Let OSDMM_Trigger function to flash the playing icon, update time and draw the audio bar. _bOSDMMShowTime = TRUE; _dwOSDMMFlashTime = OS_GetSysTimer(); _bOSDMMFlash = FALSE; _dwOSDMMSpectrumTime = OS_GetSysTimer(); if (__bMMMenuID == MM_MENU_NORMAL) { //_OSDMM_DrawInfoRegion(); //clear help region //--CoCo1.05 } break; case OSDMM_MSG_STOP: _OSDMM_StopAudioPlayingFile(); break; case OSDMM_MSG_SHOW_DLG: if (__bMMPopMenuID == MM_POP_MENU_FILTER) { _OSDMM_ShowFileTypeDialogBox(); } else if (__bMMPopMenuID == MM_POP_MENU_SORT) { _OSDMM_ShowSortFileDialogBox(); } break; case OSDMM_MSG_CLEAR_DLG: //recover the left file window. _OSDMM_ClearRegion(OSDMM_LEFT_FILE_WINDOW_REGION); _OSDMM_DrawLeftFileWindow(); //clear the preview window _OSDMM_ClearRegion(OSDMM_PREVIEW_REGION); //draw vertical separate frame _OSDMM_DrawSeparateFrame(OSDMM_VERTICAL_SEPARATE_FRAME); //draw horizontal separate frame _OSDMM_DrawSeparateFrame(OSDMM_HORIZONTAL_SEPARATE_FRAME); //recover the right file window. _OSDMM_ClearRegion(OSDMM_RIGHT_FILE_WINDOW_REGION); _OSDMM_DrawRightFileWindow(); break; case OSDMM_MSG_UPDATE_DLG_ITEM: //For "file type" dialog, the position of check/uncheck the item must be the same as the cursor if (__bMMPopMenuID == MM_POP_MENU_FILTER) { _OSDMM_DLG_DrawFileTypeItem((BYTE)__MMSelectCursor.wIndex, TRUE); } else if (__bMMPopMenuID == MM_POP_MENU_SORT) { if (__MMSelectCursor.wIndex < 3) //Method { _OSDMM_DLG_DrawAllMethodItemsInSortFile(TRUE); } else //Sequence { _OSDMM_DLG_DrawAllSequenceItemsInSortFile(TRUE); } } break; case OSDMM_MSG_REMOVE_ACTIVE_VOLUME: //Return to the Media Manager's starting menu. _bOSDMMStartDrawDir = 0; __wOSDMMStartDrawItem = 0; _OSDMM_UpdateTitle(); _OSDMM_ClearRegion(OSDMM_LEFT_FILE_WINDOW_CONTENT_REGION); _OSDMM_DrawLeftFileWindow(); _OSDMM_ClearRegion(OSDMM_RIGHT_FILE_WINDOW_CONTENT_REGION); _OSDMM_DrawRightFileWindow(); _OSDMM_UpdateHelp(OSDMM_HELP_TYPE_NONE); _OSDMM_DrawAllButtons(); break; case OSDMM_MSG_REMOVE_NOT_ACTIVE_VOLUME: //Draw the left file window. _OSDMM_ClearRegion(OSDMM_LEFT_FILE_WINDOW_CONTENT_REGION); _OSDMM_DrawLeftFileWindow(); break; case OSDMM_MSG_UPDATE_HELP: if (__bMMMenuID != MM_MENU_PROGLIST) {
if (__bAttrPlay & TYPE_CDROM_AUDIO)
{
// wyc2.38-909s, fix bitrate show incorrect problem. _dwOSDMMAudioBitRate = __wHALAudioBitrate; // LLY2.53, don't call function to get Audio Frequency again // Since, the value is ready after DSP docoding audio stream done. // And, we don't do audio pre-decode while stop -> resume // So, if only call this API once time, the value maybe not ready.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -