l2-unlegits/l2ooghelper/UserBuffTabDlg.cpp
2012-02-01 05:25:08 +00:00

140 lines
4.3 KiB
C++

#include "stdafx.h"
#include "Resource.h"
#include "UserBuffs.h"
#include "IL2Client.h"
#include "windowUtils.h"
extern HINSTANCE g_hInst;
INT_PTR CALLBACK UserBuffTabDlg_Proc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam );
HWND UserBuffTabDlg_Create( HWND hWndParent, IL2Client *pcl )
{
HWND hDlg = CreateDialogParam( g_hInst, MAKEINTRESOURCE(IDD_USERBUFF),
hWndParent, UserBuffTabDlg_Proc, 0 );
SetWindowLongPtrW( hDlg, GWLP_USERDATA, (LONG_PTR)pcl );
return hDlg;
}
void format_bufftimeW( wchar_t *out, int nSecs )
{
if( nSecs <= 59 ) // only seconds
{
wsprintfW( out, L"%d", nSecs );
return;
}
int nMins = nSecs / 60;
nSecs -= nMins * 60;
int nHrs = nMins / 60;
if( nHrs > 0 ) // have hours
{
nMins -= nHrs * 60;
wsprintfW( out, L"%02d:%02d:%02d", nHrs, nMins, nSecs );
return;
}
// only min:sec
wsprintfW( out, L"%02d:%02d", nMins, nSecs );
}
INT_PTR CALLBACK UserBuffTabDlg_Proc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
TCHAR text[128] = {0};
switch( uMsg )
{
case WM_INITDIALOG:
{
HWND hwndLV = GetDlgItem( hDlg, IDC_LIST1 );
WULV_SetExtStyle( hwndLV, true, true );
int i = 0;
WULV_InsertColumn( hwndLV, TEXT("Áàôô"), 150, i++ );
WULV_InsertColumn( hwndLV, TEXT("lvl"), 50, i++ );
WULV_InsertColumn( hwndLV, TEXT("time"), 60, i++ );
WULV_InsertColumn( hwndLV, TEXT("skillID"), 50, i++ );
} break;
case WM_COMMAND:
{
IL2Client *pcl = (IL2Client *)GetWindowLongPtrW( hDlg, GWLP_USERDATA );
HWND hwndLV = GetDlgItem( hDlg, IDC_LIST1 );
int buttonId = LOWORD( wParam );
if( buttonId == IDC_CANCELBUFF )
{
int cur_sel = ListView_GetNextItem( hwndLV, -1, LVNI_SELECTED );
if( cur_sel >= 0 )
{
unsigned int skillID = (unsigned int)WULV_GetItemLPARAM( hwndLV, cur_sel );
pcl->game_buffCancel( skillID );
}
}
} break;
case WM_USER:
{
UserBuffs *buffs = (UserBuffs *)lParam;
if( !buffs ) return TRUE;
wsprintf( text, TEXT("%d buffs"), buffs->buffCount );
SetDlgItemText( hDlg, IDC_ST_NBUFFS, text );
HWND hwndLV = GetDlgItem( hDlg, IDC_LIST1 );
ListView_DeleteAllItems( hwndLV );
int i = 0;
int added_idx = 0;
for( i=0; i<UserBuffs::USER_MAX_BUFFS; i++ )
{
if( buffs->buff[i].skillID == 0 ) continue;
// skill name (lParam - skillID)
buffs->buff[i].getSkillName( text, 128 );
added_idx = WULV_InsertItem( hwndLV, text, 0, buffs->buff[i].skillID );
if( added_idx == -1 ) continue;
// skill lvl
wsprintf( text, TEXT("%d"), buffs->buff[i].skillLvl );
WULV_SetItem( hwndLV, text, added_idx, 1 );
// time
format_bufftimeW( text, buffs->buff[i].duration );
WULV_SetItem( hwndLV, text, added_idx, 2 );
// skillID
wsprintf( text, TEXT("%u"), buffs->buff[i].skillID );
WULV_SetItem( hwndLV, text, added_idx, 3 );
}
for( i=0; i<UserBuffs::USER_MAX_SHORT_BUFFS; i++ )
{
if( buffs->short_buff[i].skillID == 0 ) continue;
// skill name (lParam - skillID)
buffs->short_buff[i].getSkillName( text, 128 );
added_idx = WULV_InsertItem( hwndLV, text, 0, buffs->short_buff[i].skillID );
if( added_idx == -1 ) continue;
// skill lvl
wsprintf( text, TEXT("%d"), buffs->short_buff[i].skillLvl );
WULV_SetItem( hwndLV, text, added_idx, 1 );
// time
format_bufftimeW( text, buffs->short_buff[i].duration );
WULV_SetItem( hwndLV, text, added_idx, 2 );
// skillID
wsprintf( text, TEXT("%u"), buffs->short_buff[i].skillID );
WULV_SetItem( hwndLV, text, added_idx, 3 );
}
} break;
case (WM_USER+1):
{
// update buff times
UserBuffs *buffs = (UserBuffs *)lParam;
if( !buffs ) return TRUE;
wsprintf( text, TEXT("%d buffs"), buffs->buffCount );
SetDlgItemText( hDlg, IDC_ST_NBUFFS, text );
HWND hwndLV = GetDlgItem( hDlg, IDC_LIST1 );
int i = 0;
int count = ListView_GetItemCount( hwndLV );
if( count < 1 ) break;
for( i=0; i<count; i++ )
{
unsigned int skillID = (unsigned int)WULV_GetItemLPARAM( hwndLV, i );
if( skillID == 0 ) continue;
UserBuff buf;
buffs->getBuffnfoBySkillId( skillID, &buf );
format_bufftimeW( text, buf.duration );
WULV_SetItem( hwndLV, text, i, 2 );
}
} break;
default: return FALSE; break;
}
return TRUE;
}