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

185 lines
6.1 KiB
C++

#include "stdafx.h"
#include "Resource.h"
#include "windowUtils.h"
#include "UserSkills.h"
#include "logger.h"
#include "IL2Client.h"
#include "DBLayer.h"
extern HINSTANCE g_hInst;
INT_PTR CALLBACK UserSkillsTabDlg_Proc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam );
HWND UserSkillsTabDlg_Create( HWND hWndParent, IL2Client *pcl )
{
HWND hDlg = CreateDialogParam( g_hInst, MAKEINTRESOURCE(IDD_USERSKILLS),
hWndParent, UserSkillsTabDlg_Proc, 0 );
SetWindowLongPtr( hDlg, GWLP_USERDATA, (LONG_PTR)pcl );
return hDlg;
}
void UserSkillsTabDlg_UpdateAllSkills( HWND hDlg, UserSkills *sk );
void UserSkillsTabDlg_UpdateSkillsCoolTimes( HWND hDlg, UserSkills *sk );
void UserSkillsTabDlg_OnNotify( HWND hDlg, WPARAM wParam, LPARAM lParam );
INT_PTR CALLBACK UserSkillsTabDlg_Proc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
switch( uMsg )
{
case WM_INITDIALOG:
{
HWND hWndTab = GetDlgItem( hDlg, IDC_TAB2 );
WUTab_InsertItem( hWndTab, TEXT("Àêòèâíûå"), 0 );
WUTab_InsertItem( hWndTab, TEXT("Ïàññèâíûå"), 1 );
//
RECT rc;
GetClientRect( hWndTab, &rc );
HWND hwndLV = CreateWindowEx( WS_EX_CLIENTEDGE,
WC_LISTVIEW, NULL,
WS_VSCROLL | WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_SORTASCENDING | LVS_SINGLESEL | LVS_SHOWSELALWAYS,
2, 24, rc.right - rc.left - 5, rc.bottom - rc.top - 30,
hWndTab, (HMENU)100, g_hInst, NULL );
WULV_SetExtStyle( hwndLV, true, true );
WULV_InsertColumn( hwndLV, TEXT("Ñêèëë"), 150, 0 );
WULV_InsertColumn( hwndLV, TEXT("lv"), 40, 1 );
WULV_InsertColumn( hwndLV, TEXT("cool"), 60, 2 );
WULV_InsertColumn( hwndLV, TEXT("skillID"), 50, 3 );
//
hwndLV = CreateWindowEx( WS_EX_CLIENTEDGE,
WC_LISTVIEW, NULL,
WS_VSCROLL | WS_CHILD | /*WS_VISIBLE |*/ LVS_REPORT | LVS_SORTASCENDING | LVS_SINGLESEL | LVS_SHOWSELALWAYS,
2, 24, rc.right - rc.left - 5, rc.bottom - rc.top - 30,
hWndTab, (HMENU)101, g_hInst, NULL );
WULV_SetExtStyle( hwndLV, true, true );
WULV_InsertColumn( hwndLV, TEXT("Ñêèëë"), 150, 0 );
WULV_InsertColumn( hwndLV, TEXT("lv"), 50, 1 );
WULV_InsertColumn( hwndLV, TEXT("skillID"), 50, 2 );
} break;
case WM_NOTIFY: UserSkillsTabDlg_OnNotify( hDlg, wParam, lParam ); break;
case WM_USER:
{
UserSkills *sk = (UserSkills *)lParam;
if( !sk ) return TRUE;
UserSkillsTabDlg_UpdateAllSkills( hDlg, sk );
} break;
case (WM_USER+1):
{
UserSkills *sk = (UserSkills *)lParam;
if( !sk ) return TRUE;
UserSkillsTabDlg_UpdateSkillsCoolTimes( hDlg, sk );
} break;
default: return FALSE; break;
}
return TRUE;
}
void UserSkillsTabDlg_UpdateAllSkills( HWND hDlg, UserSkills *sk )
{
TCHAR text[256] = {0}; // ?
HWND hWndTab = GetDlgItem( hDlg, IDC_TAB2 );
HWND hwndLVA = GetDlgItem( hWndTab, 100 );
HWND hwndLVP = GetDlgItem( hWndTab, 101 );
int i;
ListView_DeleteAllItems( hwndLVA );
ListView_DeleteAllItems( hwndLVP );
int added_item;
for( i=0; i<UserSkills::USERSKILL_MAX_SKILLS; i++ )
{
if( sk->skill[i].skillID == 0 ) continue;
// skill name (lParam is skillID)
sk->skill[i].getSkillName( text, 256 );
if( sk->skill[i].isPassive == 0 )
added_item = WULV_InsertItem( hwndLVA, text, 0, sk->skill[i].skillID );
else
added_item = WULV_InsertItem( hwndLVP, text, 0, sk->skill[i].skillID );
// lvl
wsprintf( text, TEXT("%d"), sk->skill[i].level );
if( sk->skill[i].isPassive == 0 )
WULV_SetItem( hwndLVA, text, added_item, 1 );
else
WULV_SetItem( hwndLVP, text, added_item, 1 );
// coolTime for active
if( sk->skill[i].isPassive == 0 )
{
wsprintf( text, TEXT("%d / %d"), sk->skill[i].coolTimeRemaining, sk->skill[i].coolTimeReuse );
WULV_SetItem( hwndLVA, text, added_item, 2 );
}
// skill id
wsprintf( text, TEXT("%d"), sk->skill[i].skillID );
if( sk->skill[i].isPassive == 0 )
WULV_SetItem( hwndLVA, text, added_item, 3 );
else
WULV_SetItem( hwndLVP, text, added_item, 2 );
}
}
void UserSkillsTabDlg_UpdateSkillsCoolTimes( HWND hDlg, UserSkills *sk )
{
TCHAR text[256] = {0}; // ?
HWND hWndTab = GetDlgItem( hDlg, IDC_TAB2 );
HWND hwndLV = GetDlgItem( hWndTab, 100 ); // only for active skills cooltime
int cnt = ListView_GetItemCount( hwndLV );
if( cnt < 1 ) return;
int i;
for( i=0; i<cnt; i++ )
{
unsigned int skillID = (unsigned int)WULV_GetItemLPARAM( hwndLV, i );
if( skillID == 0 ) continue;
UserSkill skill;
sk->getSkillInfoBySkillId( skillID, &skill );
if( skill.skillID == 0 ) continue;
// update item text if cooltime in progress :)
if( skill.coolTimeReuse > 0 )
{
// print new coolTime
wsprintf( text, TEXT("%d / %d"), skill.coolTimeRemaining, skill.coolTimeReuse );
WULV_SetItem( hwndLV, text, i, 2 );
// debug
//log_error_np( LOG_OK, "UpdateSkillsCoolTimes(): updated cooltime for skill %u [%S]\n",
// skill.skillID, skill.getSkillNameW() );
}
}
}
void UserSkillsTabDlg_OnNotify( HWND hDlg, WPARAM wParam, LPARAM lParam )
{
UNREFERENCED_PARAMETER(wParam);
IL2Client *pcl = (IL2Client *)GetWindowLongPtr( hDlg, GWLP_USERDATA );
LPNMHDR phdr = (LPNMHDR)lParam;
HWND hWndTab = GetDlgItem( hDlg, IDC_TAB2 );
if( phdr->hwndFrom == hWndTab )
{
int cur_sel = TabCtrl_GetCurSel( hWndTab );
HWND hwndLVA = GetDlgItem( hWndTab, 100 );
HWND hwndLVP = GetDlgItem( hWndTab, 101 );
switch( phdr->code )
{
case TCN_SELCHANGING:
{
if( cur_sel == 0 ) ShowWindow( hwndLVA, SW_HIDE );
if( cur_sel == 1 ) ShowWindow( hwndLVP, SW_HIDE );
} break;
case TCN_SELCHANGE:
{
if( cur_sel == 0 ) ShowWindow( hwndLVA, SW_SHOW );
if( cur_sel == 1 ) ShowWindow( hwndLVP, SW_SHOW );
} break;
}
return;
}
HWND hwndLVA = GetDlgItem( hWndTab, 100 ); // active skills LV
if( phdr->hwndFrom == hwndLVA )
{
if( phdr->code == NM_DBLCLK )
{
LPNMITEMACTIVATE lpnmitem = (LPNMITEMACTIVATE) lParam;
unsigned int skillID = (unsigned int)WULV_GetItemLPARAM( hwndLVA, lpnmitem->iItem );
if( skillID > 0 )
{
//log_error( LOG_OK, "Use skill %u\n", skillID );
pcl->game_SkillUse( skillID );
}
}
}
}