mirror of
https://github.com/nillerusr/source-engine.git
synced 2024-12-23 14:46:53 +00:00
240 lines
5.9 KiB
C++
240 lines
5.9 KiB
C++
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// $NoKeywords: $
|
||
|
//=============================================================================//
|
||
|
#include "cbase.h"
|
||
|
#include <commctrl.h>
|
||
|
#include "mxtk/mx.h"
|
||
|
#include "resource.h"
|
||
|
#include "CCLookup.h"
|
||
|
#include "mdlviewer.h"
|
||
|
#include "addsoundentry.h"
|
||
|
#include <vgui/ILocalize.h>
|
||
|
|
||
|
using namespace vgui;
|
||
|
|
||
|
extern vgui::ILocalize *g_pLocalize;
|
||
|
|
||
|
static CCloseCaptionLookupParams g_Params;
|
||
|
|
||
|
static HFONT g_UnicodeFont = NULL;
|
||
|
|
||
|
static void InsertTextColumn( HWND listcontrol, int column, int width, char const *label )
|
||
|
{
|
||
|
LVCOLUMN col;
|
||
|
memset( &col, 0, sizeof( col ) );
|
||
|
|
||
|
col.mask = LVCF_TEXT | LVCF_SUBITEM | LVCF_WIDTH | LVCF_ORDER;
|
||
|
col.iOrder = column;
|
||
|
col.pszText = (char *)label;
|
||
|
col.cchTextMax = 256;
|
||
|
col.iSubItem = column;
|
||
|
col.cx = width;
|
||
|
|
||
|
ListView_InsertColumn( listcontrol, column, &col );
|
||
|
}
|
||
|
|
||
|
static void PopulateCloseCaptionTokenList( HWND wnd, CCloseCaptionLookupParams *params )
|
||
|
{
|
||
|
HWND control = GetDlgItem( wnd, IDC_CCTOKENLIST );
|
||
|
if ( !control )
|
||
|
return;
|
||
|
|
||
|
InsertTextColumn( control, 0, 200, "CloseCaption Token" );
|
||
|
InsertTextColumn( control, 1, 800, "Text" );
|
||
|
|
||
|
|
||
|
ListView_DeleteAllItems( control );
|
||
|
|
||
|
SendMessage( control, WM_SETFONT, (WPARAM)g_UnicodeFont, MAKELPARAM (TRUE, 0) );
|
||
|
|
||
|
StringIndex_t i = g_pLocalize->GetFirstStringIndex();
|
||
|
int saveSelected = -1;
|
||
|
|
||
|
while ( INVALID_LOCALIZE_STRING_INDEX != i )
|
||
|
{
|
||
|
char const *name = g_pLocalize->GetNameByIndex( i );
|
||
|
|
||
|
LV_ITEMW lvItem;
|
||
|
memset( &lvItem, 0, sizeof( lvItem ) );
|
||
|
lvItem.iItem = ListView_GetItemCount( control );
|
||
|
lvItem.mask = LVIF_TEXT | LVIF_PARAM;
|
||
|
lvItem.lParam = (LPARAM)i;
|
||
|
|
||
|
wchar_t label[ 256 ];
|
||
|
g_pLocalize->ConvertANSIToUnicode( name, label, sizeof( label ) );
|
||
|
|
||
|
lvItem.pszText = label;
|
||
|
lvItem.cchTextMax = 256;
|
||
|
|
||
|
SendMessage( control, LVM_INSERTITEMW, 0, (LPARAM)(const LV_ITEMW FAR*)(&lvItem));
|
||
|
|
||
|
lvItem.mask = LVIF_TEXT;
|
||
|
lvItem.iSubItem = 1;
|
||
|
|
||
|
wchar_t *value = g_pLocalize->GetValueByIndex( i );
|
||
|
|
||
|
lvItem.pszText = (wchar_t *)value;
|
||
|
lvItem.cchTextMax = 1024;
|
||
|
|
||
|
SendMessage( control, LVM_SETITEMW, 0, (LPARAM)(const LV_ITEMW FAR*)(&lvItem));
|
||
|
|
||
|
if ( !Q_stricmp( name, params->m_szCCToken ) )
|
||
|
{
|
||
|
ListView_SetItemState( control, lvItem.iItem, LVIS_SELECTED, LVIS_STATEIMAGEMASK );
|
||
|
saveSelected = lvItem.iItem;
|
||
|
}
|
||
|
i = g_pLocalize->GetNextStringIndex( i );
|
||
|
}
|
||
|
|
||
|
if ( saveSelected != -1 )
|
||
|
{
|
||
|
ListView_EnsureVisible(control, saveSelected, FALSE );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : hwndDlg -
|
||
|
// uMsg -
|
||
|
// wParam -
|
||
|
// lParam -
|
||
|
// Output : static BOOL CALLBACK
|
||
|
//-----------------------------------------------------------------------------
|
||
|
static BOOL CALLBACK CloseCaptionLookupDialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
|
||
|
{
|
||
|
switch(uMsg)
|
||
|
{
|
||
|
case WM_INITDIALOG:
|
||
|
// Insert code here to put the string (to find and replace with)
|
||
|
// into the edit controls.
|
||
|
// ...
|
||
|
{
|
||
|
g_Params.PositionSelf( hwndDlg );
|
||
|
|
||
|
HWND control = GetDlgItem( hwndDlg, IDC_CCTOKENLIST );
|
||
|
DWORD exStyle = GetWindowLong( control, GWL_EXSTYLE );
|
||
|
exStyle |= LVS_EX_FULLROWSELECT;
|
||
|
SetWindowLong( control, GWL_EXSTYLE, exStyle );
|
||
|
|
||
|
PopulateCloseCaptionTokenList( hwndDlg, &g_Params );
|
||
|
|
||
|
SetWindowText( hwndDlg, g_Params.m_szDialogTitle );
|
||
|
|
||
|
SetDlgItemText( hwndDlg, IDC_CCTOKEN, g_Params.m_szCCToken );
|
||
|
|
||
|
SetFocus( GetDlgItem( hwndDlg, IDC_CCTOKENLIST ) );
|
||
|
}
|
||
|
return FALSE;
|
||
|
|
||
|
case WM_COMMAND:
|
||
|
switch (LOWORD(wParam))
|
||
|
{
|
||
|
case IDOK:
|
||
|
{
|
||
|
/*
|
||
|
//int selindex = SendMessage( GetDlgItem( hwndDlg, IDC_CCTOKENLIST ), LB_GETCURSEL, 0, 0 );
|
||
|
if ( selindex == LB_ERR )
|
||
|
{
|
||
|
mxMessageBox( NULL, "You must select an entry from the list", g_appTitle, MB_OK );
|
||
|
return TRUE;
|
||
|
}
|
||
|
*/
|
||
|
|
||
|
SendMessage( GetDlgItem( hwndDlg, IDC_CCTOKEN ), WM_GETTEXT, (WPARAM)sizeof( g_Params.m_szCCToken ), (LPARAM)g_Params.m_szCCToken );
|
||
|
|
||
|
EndDialog( hwndDlg, 1 );
|
||
|
}
|
||
|
break;
|
||
|
case IDCANCEL:
|
||
|
EndDialog( hwndDlg, 0 );
|
||
|
break;
|
||
|
}
|
||
|
return TRUE;
|
||
|
case WM_NOTIFY:
|
||
|
{
|
||
|
if ( wParam == IDC_CCTOKENLIST )
|
||
|
{
|
||
|
NMHDR *hdr = ( NMHDR * )lParam;
|
||
|
if ( hdr->code == LVN_ITEMCHANGED )
|
||
|
{
|
||
|
HWND control = GetDlgItem( hwndDlg, IDC_CCTOKENLIST );
|
||
|
|
||
|
NM_LISTVIEW *nmlv = ( NM_LISTVIEW * )lParam;
|
||
|
|
||
|
int item = nmlv->iItem;
|
||
|
|
||
|
if ( item >= 0 )
|
||
|
{
|
||
|
// look up the lparam value
|
||
|
LVITEM lvi;
|
||
|
memset( &lvi, 0, sizeof( lvi ) );
|
||
|
lvi.mask = LVIF_PARAM;
|
||
|
lvi.iItem = item;
|
||
|
|
||
|
if ( ListView_GetItem( control, &lvi ) )
|
||
|
{
|
||
|
char const *name = g_pLocalize->GetNameByIndex( lvi.lParam );
|
||
|
if ( name )
|
||
|
{
|
||
|
Q_strncpy( g_Params.m_szCCToken, name, sizeof( g_Params.m_szCCToken ) );
|
||
|
SendMessage( GetDlgItem( hwndDlg, IDC_CCTOKEN ), WM_SETTEXT, (WPARAM)sizeof( g_Params.m_szCCToken ), (LPARAM)g_Params.m_szCCToken );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return FALSE;
|
||
|
}
|
||
|
if ( hdr->code == NM_DBLCLK )
|
||
|
{
|
||
|
SendMessage( GetDlgItem( hwndDlg, IDC_CCTOKEN ), WM_GETTEXT, (WPARAM)sizeof( g_Params.m_szCCToken ), (LPARAM)g_Params.m_szCCToken );
|
||
|
EndDialog( hwndDlg, 1 );
|
||
|
return FALSE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : *view -
|
||
|
// *actor -
|
||
|
// Output : int
|
||
|
//-----------------------------------------------------------------------------
|
||
|
int CloseCaptionLookup( CCloseCaptionLookupParams *params )
|
||
|
{
|
||
|
g_Params = *params;
|
||
|
|
||
|
g_UnicodeFont = CreateFont(
|
||
|
-10,
|
||
|
0,
|
||
|
0,
|
||
|
0,
|
||
|
FW_NORMAL,
|
||
|
FALSE,
|
||
|
FALSE,
|
||
|
FALSE,
|
||
|
ANSI_CHARSET,
|
||
|
OUT_TT_PRECIS,
|
||
|
CLIP_DEFAULT_PRECIS,
|
||
|
ANTIALIASED_QUALITY,
|
||
|
DEFAULT_PITCH,
|
||
|
"Tahoma" );
|
||
|
|
||
|
int retval = DialogBox( (HINSTANCE)GetModuleHandle( 0 ),
|
||
|
MAKEINTRESOURCE( IDD_CCLOOKUP ),
|
||
|
(HWND)g_MDLViewer->getHandle(),
|
||
|
(DLGPROC)CloseCaptionLookupDialogProc );
|
||
|
|
||
|
DeleteObject( g_UnicodeFont );
|
||
|
g_UnicodeFont = NULL;
|
||
|
|
||
|
*params = g_Params;
|
||
|
|
||
|
return retval;
|
||
|
}
|