📄 psl_process_key.cpp
字号:
/*****************************************************************************
******************************************************************************
** **
** Copyright (c) 2002 Videon Central, Inc. **
** All rights reserved. **
** **
** The computer program contained herein contains proprietary information **
** which is the property of Videon Central, Inc. The program may be used **
** and/or copied only with the written permission of Videon Central, Inc. **
** or in accordance with the terms and conditions stipulated in the **
** agreement/contract under which the programs have been supplied. **
** **
******************************************************************************
*****************************************************************************/
/**
* @file psl_process_key.cpp
*
* $Revision: 1.7 $
*
* Process Key Module of the PSL.
*
*/
#include <string.h>
#include "vdvd_types.h"
#include "psl_process_key.h"
#include "psl_interface.h"
#include "psl_general.h"
#include "psl_types.h"
#include "psl_external_interface.h"
#include "psl_screen_layout.h"
#include "psl_data_bank.h"
#include "deal_control.h"
#include "deal_general.h"
#include "dbgprint.h"
/* Debug macros */
#define DBG_PSL_PROC_KEY DBG_ERROR
#define DBG_ON(x) (DBG_PSL_PROC_KEY >= x)
/* Password modes for locked buttons */
typedef enum
{
PSL_PWD_LOCKED,
PSL_PWD_CREATE,
PSL_PWD_CONFIRM,
PSL_PWD_RESET
} PSL_PWD_MODE;
/**
* Local variables
*/
static ULONG m_ulTempPassword = 0xffffffff;
/**
* PslProcessKeySetupMenuUp -- Process the up command for setup menu
*
* @param
* pPSL - handle to internal PSL data
*
* @retval
* PSL_SUCCESS if successful
* PSL_FAILURE if not successful
*/
PSL_STATUS PslProcessKeySetupMenuUp(PSL_HANDLE *pPSL)
{
/* Check for a valid psl handle and setup menu data */
if ( (pPSL == NULL) || (pPSL->pSetupMenu == NULL) )
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuUp: NULL pointer!\n"));
return (PSL_FAILURE);
}
if (pPSL->pSetupMenu->pActiveButton->pAboveButton != NULL)
{
/* If active button is the password button, make sure any entered numbers are cleared */
if (pPSL->pSetupMenu->pActiveButton->tButtonType == PSL_BUTTON_PWD)
{
/* reset entered password */
pPSL->pSetupMenu->pActiveButton->ulInfo = 0;
/* reset the string */
if (PslScreenLayoutSetButtonText(pPSL->pSetupMenu->pActiveButton, " _ _ _ _ ") != PSL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuUp: Failed to set button text\n"));
return (PSL_FAILURE);
}
if (pPSL->pSetupMenu->pActiveTab->pSubButton[0].ulInfo == PSL_PWD_CONFIRM)
{
/* Check if parental password is set. If it is not, allow user to set it */
if (PslDataGetParentalPassword(pPSL) == 0xffffffff)
{
pPSL->pSetupMenu->pActiveTab->pSubButton[0].ulInfo = PSL_PWD_CREATE;
if (PslScreenLayoutSetButtonText(&pPSL->pSetupMenu->pActiveTab->pSubButton[0], "Create Password") != PSL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuUp: Failed to set button text\n"));
return (PSL_FAILURE);
}
}
else
{
pPSL->pSetupMenu->pActiveTab->pSubButton[0].ulInfo = PSL_PWD_RESET;
if (PslScreenLayoutSetButtonText(&pPSL->pSetupMenu->pActiveTab->pSubButton[0], "Reset Password") != PSL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuUp: Failed to set button text\n"));
return (PSL_FAILURE);
}
}
/* redraw the button */
if (PslScreenLayoutDrawButton(&pPSL->pSetupMenu->pActiveTab->pSubButton[0]) != PSL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuUp: Failed to draw button!\n"));
return (PSL_FAILURE);
}
}
}
/* unselect the currently active button */
pPSL->pSetupMenu->pActiveButton->fSelected = FALSE;
/* redraw the button */
if (PslScreenLayoutDrawButton(pPSL->pSetupMenu->pActiveButton) != PSL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuUp: Failed to draw button!\n"));
return (PSL_FAILURE);
}
/* change the active button and select it */
pPSL->pSetupMenu->pActiveButton = pPSL->pSetupMenu->pActiveButton->pAboveButton;
pPSL->pSetupMenu->pActiveButton->fSelected = TRUE;
/* redraw the button */
if (PslScreenLayoutDrawButton(pPSL->pSetupMenu->pActiveButton) != PSL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuUp: Failed to draw button!\n"));
return (PSL_FAILURE);
}
/* copy draw buffer to display buffer to show changes */
DealCMBufferCopy(pPSL->pSetupMenu->hDeal, DEAL_BUFFER_DRAW, DEAL_BUFFER_DISPLAY);
}
return (PSL_SUCCESS);
}
/**
* PslProcessKeySetupMenuDown -- Process the down command for setup menu
*
* @param
* pPSL - handle to internal PSL data
*
* @retval
* PSL_SUCCESS if successful
* PSL_FAILURE if not successful
*/
PSL_STATUS PslProcessKeySetupMenuDown(PSL_HANDLE *pPSL)
{
/* Check for a valid psl handle and setup menu data */
if ( (pPSL == NULL) || (pPSL->pSetupMenu == NULL) )
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuDown: NULL pointer!\n"));
return (PSL_FAILURE);
}
if (pPSL->pSetupMenu->pActiveButton->pBelowButton != NULL)
{
/* If active button is the password button, make sure any entered numbers are cleared */
if (pPSL->pSetupMenu->pActiveButton->tButtonType == PSL_BUTTON_PWD)
{
/* reset entered password */
pPSL->pSetupMenu->pActiveButton->ulInfo = 0;
/* reset the string */
if (PslScreenLayoutSetButtonText(pPSL->pSetupMenu->pActiveButton, " _ _ _ _ ") != PSL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuUp: Failed to set button text\n"));
return (PSL_FAILURE);
}
if (pPSL->pSetupMenu->pActiveTab->pSubButton[0].ulInfo == PSL_PWD_CONFIRM)
{
/* Check if parental password is set. If it is not, allow user to set it */
if (PslDataGetParentalPassword(pPSL) == 0xffffffff)
{
pPSL->pSetupMenu->pActiveTab->pSubButton[0].ulInfo = PSL_PWD_CREATE;
if (PslScreenLayoutSetButtonText(&pPSL->pSetupMenu->pActiveTab->pSubButton[0], "Create Password") != PSL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuUp: Failed to set button text\n"));
return (PSL_FAILURE);
}
}
else
{
pPSL->pSetupMenu->pActiveTab->pSubButton[0].ulInfo = PSL_PWD_RESET;
if (PslScreenLayoutSetButtonText(&pPSL->pSetupMenu->pActiveTab->pSubButton[0], "Reset Password") != PSL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuUp: Failed to set button text\n"));
return (PSL_FAILURE);
}
}
/* redraw the button */
if (PslScreenLayoutDrawButton(&pPSL->pSetupMenu->pActiveTab->pSubButton[0]) != PSL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuUp: Failed to draw button!\n"));
return (PSL_FAILURE);
}
}
}
/* unselect the currently active button */
pPSL->pSetupMenu->pActiveButton->fSelected = FALSE;
/* redraw the button */
if (PslScreenLayoutDrawButton(pPSL->pSetupMenu->pActiveButton) != PSL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuDown: Failed to draw button!\n"));
return (PSL_FAILURE);
}
/* change the active button and select it */
pPSL->pSetupMenu->pActiveButton = pPSL->pSetupMenu->pActiveButton->pBelowButton;
pPSL->pSetupMenu->pActiveButton->fSelected = TRUE;
/* redraw the button */
if (PslScreenLayoutDrawButton(pPSL->pSetupMenu->pActiveButton) != PSL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuDown: Failed to draw button!\n"));
return (PSL_FAILURE);
}
/* copy draw buffer to display buffer to show changes */
DealCMBufferCopy(pPSL->pSetupMenu->hDeal, DEAL_BUFFER_DRAW, DEAL_BUFFER_DISPLAY);
}
return (PSL_SUCCESS);
}
/**
* PslProcessKeySetupMenuLeft -- Process the left command for setup menu
*
* @param
* pPSL - handle to internal PSL data
*
* @retval
* PSL_SUCCESS if successful
* PSL_FAILURE if not successful
*/
PSL_STATUS PslProcessKeySetupMenuLeft(PSL_HANDLE *pPSL)
{
/* Check for a valid psl handle and setup menu data */
if ( (pPSL == NULL) || (pPSL->pSetupMenu == NULL) )
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuLeft: NULL pointer!\n"));
return (PSL_FAILURE);
}
if (pPSL->pSetupMenu->pActiveButton->pLeftButton != NULL)
{
pPSL->pSetupMenu->pActiveButton->fSelected = FALSE;
pPSL->pSetupMenu->pActiveButton = pPSL->pSetupMenu->pActiveButton->pLeftButton;
pPSL->pSetupMenu->pActiveButton->fSelected = TRUE;
/* redraw the menu */
if (PslScreenLayoutDrawSetupMenu(pPSL) != PSL_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuLeft: Failed to draw setup menu!\n"));
return (PSL_FAILURE);
}
}
else if (pPSL->pSetupMenu->pActiveTab->pLeftButton != NULL)
{
/* unselect active button */
pPSL->pSetupMenu->pActiveButton->fSelected = FALSE;
/* change the active tab */
pPSL->pSetupMenu->pActiveTab->fSelected = FALSE;
pPSL->pSetupMenu->pActiveTab = pPSL->pSetupMenu->pActiveTab->pLeftButton;
pPSL->pSetupMenu->pActiveTab->fSelected = TRUE;
if (pPSL->pSetupMenu->pActiveTab == &pPSL->pSetupMenu->pTab[1])
{
ULONG ulNavState = PslExternalGetNavStatus();
/*
* Video setting buttons can only be navigated to if player is stopped.
* If player is stopped, map buttons so they can be navigated.
* Otherwise, map the buttons so they cannot be navigated to.
*/
if ( (ulNavState == PSL_STATUS_FULLSTOP) ||
(ulNavState == PSL_STATUS_OPEN) ||
(ulNavState == PSL_STATUS_NO_DISC) )
{
pPSL->pSetupMenu->pActiveTab->pSubButton[4].pBelowButton = &pPSL->pSetupMenu->pTab[1].pSubButton[1];
pPSL->pSetupMenu->pActiveTab->pSubButton[4].pAboveButton = &pPSL->pSetupMenu->pTab[1].pSubButton[3];
pPSL->pSetupMenu->pActiveButton = &pPSL->pSetupMenu->pActiveTab->pSubButton[1];
pPSL->pSetupMenu->pActiveButton->fSelected = TRUE;
}
else
{
pPSL->pSetupMenu->pActiveTab->pSubButton[4].pBelowButton = NULL;
pPSL->pSetupMenu->pActiveTab->pSubButton[4].pAboveButton = NULL;
pPSL->pSetupMenu->pActiveButton = &pPSL->pSetupMenu->pActiveTab->pSubButton[4];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -