From 3bf9df6b2785fa6d951086978a3e66f49427166a Mon Sep 17 00:00:00 2001 From: FluorescentCIAAfricanAmerican <0934gj3049fk@protonmail.com> Date: Wed, 22 Apr 2020 12:56:21 -0400 Subject: 1 --- utils/xbox/vxconsole/bindings.cpp | 591 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 591 insertions(+) create mode 100644 utils/xbox/vxconsole/bindings.cpp (limited to 'utils/xbox/vxconsole/bindings.cpp') diff --git a/utils/xbox/vxconsole/bindings.cpp b/utils/xbox/vxconsole/bindings.cpp new file mode 100644 index 0000000..67bce48 --- /dev/null +++ b/utils/xbox/vxconsole/bindings.cpp @@ -0,0 +1,591 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// BINDINGS.CPP +// +// Keyboard Shortcuts +//=====================================================================================// +#include "vxconsole.h" + +#define ID_BINDINGS_LISTVIEW 100 + +// column id +#define ID_BIND_KEYCODE 0 +#define ID_BIND_MENUNAME 1 +#define ID_BIND_COMMAND 2 + +typedef struct +{ const CHAR* name; + int width; + int subItemIndex; +} label_t; + +typedef struct +{ + int keyCode; + const char *pKeyString; + char *pMenuName; + char *pCommandString; +} bind_t; + +// {VK_F1, "F1", "WireFrame", "incrementvar mat_wireframe 0 2 1"}, +// {VK_F2, "F2", "FullBright", "incrementvar mat_fullbright 0 2 1"}, +// {VK_F3, "F3", "Impulse 101", "impulse 101"}, +// {VK_F4, "F4", "Screenshot", "*screenshot"}, + + +bind_t g_bindings[MAX_BINDINGS] = +{ + {VK_F1, "F1", NULL, NULL}, + {VK_F2, "F2", NULL, NULL}, + {VK_F3, "F3", NULL, NULL}, + {VK_F4, "F4", NULL, NULL}, + {VK_F5, "F5", NULL, NULL}, + {VK_F6, "F6", NULL, NULL}, + {VK_F7, "F7", NULL, NULL}, + {VK_F8, "F8", NULL, NULL}, + {VK_F9, "F9", NULL, NULL}, + {VK_F10, "F10", NULL, NULL}, + {VK_F11, "F11", NULL, NULL}, + {VK_F12, "F12", NULL, NULL}, +}; + +label_t g_bindings_labels[] = +{ + {"Key", 80, ID_BIND_KEYCODE}, + {"Menu Name", 150, ID_BIND_MENUNAME}, + {"Command", 400, ID_BIND_COMMAND}, +}; + +HWND g_bindings_hWnd; +HWND g_bindings_hWndListView; +RECT g_bindings_windowRect; +char g_bindingsModify_menuName[256]; +char g_bindingsModify_command[256]; +char g_bindingsModify_keyCode[256]; + +//----------------------------------------------------------------------------- +// Bindings_ModifyEntry +// +//----------------------------------------------------------------------------- +void Bindings_ModifyEntry( int i, const char *pMenuName, const char *pCommandString ) +{ + if ( g_bindings[i].pMenuName && g_bindings[i].pMenuName[0] ) + Sys_Free( g_bindings[i].pMenuName ); + g_bindings[i].pMenuName = Sys_CopyString( pMenuName ); + + if ( g_bindings[i].pCommandString && g_bindings[i].pCommandString[0] ) + Sys_Free( g_bindings[i].pCommandString ); + g_bindings[i].pCommandString = Sys_CopyString( pCommandString ); +} + +//----------------------------------------------------------------------------- +// Bindings_GetSelectedItem +// +//----------------------------------------------------------------------------- +int Bindings_GetSelectedItem() +{ + int i; + int selection = -1; + int state; + + for ( i=0; i MAX_BINDINGS-1 ) + return false; + + // as if the key were pressed... + return ( Bindings_TranslateKey( g_bindings[index].keyCode ) ); +} + +//----------------------------------------------------------------------------- +// Bindings_UpdateMenu +// +// Builds the dynamic menu +//----------------------------------------------------------------------------- +void Bindings_UpdateMenu() +{ + HMENU hMenu; + HMENU hNewMenu; + MENUITEMINFO menuItemInfo; + int i; + int numAdded; + char menuBuff[64]; + + hMenu = GetMenu( g_hDlgMain ); + if ( !hMenu ) + return; + + memset( &menuItemInfo, 0, sizeof( menuItemInfo ) ); + menuItemInfo.cbSize = sizeof( MENUITEMINFO ); + + numAdded = 0; + hNewMenu = CreatePopupMenu(); + menuItemInfo.fMask = MIIM_ID|MIIM_FTYPE|MIIM_STRING; + menuItemInfo.fType = MFT_STRING; + for ( i=MAX_BINDINGS-1; i>=0; i-- ) + { + if ( !g_bindings[i].pCommandString || !g_bindings[i].pCommandString[0] ) + continue; + + menuItemInfo.wID = IDM_BINDINGS_BIND1+i; + sprintf( menuBuff, "%s\tF%d", g_bindings[i].pMenuName, g_bindings[i].keyCode-VK_F1+1 ); + menuItemInfo.dwTypeData = ( LPSTR )menuBuff; + InsertMenuItem( hNewMenu, 0, true, &menuItemInfo ); + + numAdded++; + } + + if ( numAdded ) + { + // add seperator + menuItemInfo.fMask = MIIM_FTYPE; + menuItemInfo.fType = MFT_SEPARATOR; + InsertMenuItem( hNewMenu, 0, true, &menuItemInfo ); + } + + menuItemInfo.fMask = MIIM_ID|MIIM_FTYPE|MIIM_STRING; + menuItemInfo.fType = MFT_STRING; + menuItemInfo.wID = IDM_BINDINGS_EDIT; + menuItemInfo.dwTypeData = "Edit..."; + InsertMenuItem( hNewMenu, 0, true, &menuItemInfo ); + + // delete the previous menu + menuItemInfo.fMask = MIIM_SUBMENU; + GetMenuItemInfo( hMenu, IDM_BINDINGS, false, &menuItemInfo ); + if ( menuItemInfo.hSubMenu ) + DestroyMenu( menuItemInfo.hSubMenu ); + else + { + // add a new menu at the tail of the app menu + AppendMenu( hMenu, MF_STRING, ( UINT_PTR )IDM_BINDINGS, "Bindings" ); + } + + // add the new menu to bar + menuItemInfo.fMask = MIIM_SUBMENU; + menuItemInfo.hSubMenu = hNewMenu; + SetMenuItemInfo( hMenu, IDM_BINDINGS, false, &menuItemInfo ); + + DrawMenuBar( g_hDlgMain ); +} + +//----------------------------------------------------------------------------- +// BindingsModifyDlg_Proc +// +//----------------------------------------------------------------------------- +BOOL CALLBACK BindingsModifyDlg_Proc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) +{ + switch ( message ) + { + case WM_INITDIALOG: + SetDlgItemText( hWnd, IDC_MODIFYBIND_KEYCODE, g_bindingsModify_keyCode ); + SetDlgItemText( hWnd, IDC_MODIFYBIND_MENUNAME, g_bindingsModify_menuName ); + SetDlgItemText( hWnd, IDC_MODIFYBIND_COMMAND, g_bindingsModify_command ); + return ( TRUE ); + + case WM_COMMAND: + switch ( LOWORD( wParam ) ) + { + case IDC_OK: + GetDlgItemText( hWnd, IDC_MODIFYBIND_MENUNAME, g_bindingsModify_menuName, sizeof( g_bindingsModify_menuName ) ); + GetDlgItemText( hWnd, IDC_MODIFYBIND_COMMAND, g_bindingsModify_command, sizeof( g_bindingsModify_command ) ); + case IDCANCEL: + case IDC_CANCEL: + EndDialog( hWnd, wParam ); + return ( TRUE ); + } + break; + } + return ( FALSE ); +} + +//----------------------------------------------------------------------------- +// BindingsModifyDlg_Open +// +//----------------------------------------------------------------------------- +void BindingsModifyDlg_Open( int selection ) +{ + int result; + + sprintf( g_bindingsModify_keyCode, "F%d", selection+1 ); + strcpy( g_bindingsModify_menuName, g_bindings[selection].pMenuName ); + strcpy( g_bindingsModify_command, g_bindings[selection].pCommandString ); + + result = DialogBox( g_hInstance, MAKEINTRESOURCE( IDD_MODIFYBIND ), g_hDlgMain, ( DLGPROC )BindingsModifyDlg_Proc ); + if ( LOWORD( result ) != IDC_OK ) + return; + + // accept changes and update + Bindings_ModifyEntry( selection, g_bindingsModify_menuName, g_bindingsModify_command ); + ListView_RedrawItems( g_bindings_hWndListView, 0, MAX_BINDINGS-1 ); + UpdateWindow( g_bindings_hWndListView ); + Bindings_UpdateMenu(); +} + +//----------------------------------------------------------------------------- +// Bindings_LoadConfig +// +//----------------------------------------------------------------------------- +void Bindings_LoadConfig() +{ + char valueBuff[256]; + char keyBuff[32]; + char menuName[256]; + char commandString[256]; + char *ptr; + char *token; + int keyCode; + int i; + int numArgs; + char buff[256]; + + for ( i=0; icode ) + { + case LVN_GETDISPINFO: + NMLVDISPINFO* plvdi; + plvdi = ( NMLVDISPINFO* )lParam; + pBind = ( bind_t* )plvdi->item.lParam; + switch ( plvdi->item.iSubItem ) + { + case ID_BIND_KEYCODE: + plvdi->item.pszText = ( LPSTR )pBind->pKeyString; + return 0L; + + case ID_BIND_MENUNAME: + plvdi->item.pszText = pBind->pMenuName; + return 0L; + + case ID_BIND_COMMAND: + plvdi->item.pszText = pBind->pCommandString; + return 0L; + + default: + break; + } + break; + + case NM_DBLCLK: + NMITEMACTIVATE *pnmitem; + pnmitem = ( LPNMITEMACTIVATE )lParam; + BindingsModifyDlg_Open( pnmitem->iItem ); + break; + } + break; + + case WM_COMMAND: + switch ( wID ) + { + case IDM_BINDOPTIONS_MODIFY: + selection = Bindings_GetSelectedItem(); + if ( selection >= 0 ) + BindingsModifyDlg_Open( selection ); + return 0L; + + case IDM_BINDOPTIONS_DELETE: + selection = Bindings_GetSelectedItem(); + if ( selection >= 0 ) + { + Bindings_ModifyEntry( selection, "", "" ); + ListView_RedrawItems( g_bindings_hWndListView, 0, MAX_BINDINGS-1 ); + UpdateWindow( g_bindings_hWndListView ); + Bindings_UpdateMenu(); + } + return 0L; + } + break; + } + + return ( DefWindowProc( hwnd, message, wParam, lParam ) ); +} + +//----------------------------------------------------------------------------- +// Bindings_Open +// +//----------------------------------------------------------------------------- +void Bindings_Open() +{ + RECT clientRect; + HWND hWnd; + int i; + LVITEM lvi; + + if ( g_bindings_hWnd ) + { + // only one instance + if ( IsIconic( g_bindings_hWnd ) ) + ShowWindow( g_bindings_hWnd, SW_RESTORE ); + SetForegroundWindow( g_bindings_hWnd ); + return; + } + + hWnd = CreateWindowEx( + WS_EX_CLIENTEDGE, + "BINDINGSCLASS", + "Edit Bindings", + WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_SIZEBOX|WS_MINIMIZEBOX|WS_MAXIMIZEBOX, + 0, + 0, + 600, + 300, + g_hDlgMain, + NULL, + g_hInstance, + NULL ); + g_bindings_hWnd = hWnd; + + GetClientRect( g_bindings_hWnd, &clientRect ); + hWnd = CreateWindow( + WC_LISTVIEW, + "", + WS_VISIBLE|WS_CHILD|LVS_REPORT|LVS_SHOWSELALWAYS|LVS_SINGLESEL|LVS_NOSORTHEADER, + 0, + 0, + clientRect.right-clientRect.left, + clientRect.bottom-clientRect.top, + g_bindings_hWnd, + ( HMENU )ID_BINDINGS_LISTVIEW, + g_hInstance, + NULL ); + g_bindings_hWndListView = hWnd; + + // init list view columns + for ( i=0; i