Files
Client/GameTools/WORLDCREATOR/PageGCMDSSlots.cpp
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

918 lines
21 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// PageGCMDSSlots.cpp : implementation file
//
#include "stdafx.h"
#include "worldcreator.h"
#include "PageGCMDSSlots.h"
#include "DlgSkelpart.h"
#include "DlgOutfitSlot.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPageGCMDSSlots property page
IMPLEMENT_DYNCREATE(CPageGCMDSSlots, CPropertyPage)
CPageGCMDSSlots::CPageGCMDSSlots() : CPropertyPage(CPageGCMDSSlots::IDD)
{
//{{AFX_DATA_INIT(CPageGCMDSSlots)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_rpGCMDS = NULL;
m_pCurListCtrl = NULL;
}
CPageGCMDSSlots::~CPageGCMDSSlots()
{
}
void CPageGCMDSSlots::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPageGCMDSSlots)
DDX_Control(pDX, IDC_LIST_ATTACHMENTSLOT, m_ctrlAttachmentSlot);
DDX_Control(pDX, IDC_LIST_OUTFITSLOT, m_ctrlOutfitSlot);
DDX_Control(pDX, IDC_LIST_STATICSLOT, m_ctrlStaticSlot);
DDX_Control(pDX, IDC_LIST_SKELPART, m_ctrlSkelpart);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPageGCMDSSlots, CPropertyPage)
//{{AFX_MSG_MAP(CPageGCMDSSlots)
ON_WM_CONTEXTMENU()
ON_COMMAND(ID_MENUITEM_ADDITEM, OnMenuitemAdditem)
ON_COMMAND(ID_MENUITEM_EDITITEM, OnMenuitemEdititem)
ON_COMMAND(ID_MENUITEM_DELETEITEM, OnMenuitemDeleteitem)
ON_NOTIFY(LVN_ENDLABELEDIT, IDC_LIST_STATICSLOT, OnEndlabeleditListStaticslot)
ON_NOTIFY(LVN_ENDLABELEDIT, IDC_LIST_ATTACHMENTSLOT, OnEndlabeleditListAttachmentslot)
ON_COMMAND(ID_MENUITEM_MOVEUP, OnMenuitemMoveup)
ON_COMMAND(ID_MENUITEM_MOVEDOWN, OnMenuitemMovedown)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPageGCMDSSlots message handlers
void CPageGCMDSSlots::UpdateDataByGCMDS( CZ3DGCMDS* pGCMDS )
{
m_rpGCMDS = pGCMDS;
if( NULL == m_rpGCMDS )
{
return;
}
UpdateSkelpart();
UpdateOutfitSlot();
UpdateStaticSlot();
UpdateAttachmentSlot();
}
BOOL CPageGCMDSSlots::OnInitDialog()
{
CPropertyPage::OnInitDialog();
// TODO: Add extra initialization here
DWORD dwExtStyle;
dwExtStyle = m_ctrlSkelpart.GetExtendedStyle();
dwExtStyle |= LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES;
m_ctrlSkelpart.SetExtendedStyle( dwExtStyle );
m_ctrlSkelpart.InsertColumn( 0, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD>", LVCFMT_LEFT, 90 );
m_ctrlSkelpart.InsertColumn( 1, "index", LVCFMT_LEFT, 55 );
dwExtStyle = m_ctrlOutfitSlot.GetExtendedStyle();
dwExtStyle |= LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES;
m_ctrlOutfitSlot.SetExtendedStyle( dwExtStyle );
m_ctrlOutfitSlot.InsertColumn( 0, "", LVCFMT_LEFT, 20 );
m_ctrlOutfitSlot.InsertColumn( 1, "Slot <20≯<EFBFBD>", LVCFMT_LEFT, 80 );
m_ctrlOutfitSlot.InsertColumn( 2, "Layer", LVCFMT_LEFT, 45 );
dwExtStyle = m_ctrlStaticSlot.GetExtendedStyle();
dwExtStyle |= LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES;
m_ctrlStaticSlot.SetExtendedStyle( dwExtStyle );
m_ctrlStaticSlot.InsertColumn( 0, "Slot <20≯<EFBFBD>", LVCFMT_LEFT, 90 );
dwExtStyle = m_ctrlAttachmentSlot.GetExtendedStyle();
dwExtStyle |= LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES;
m_ctrlAttachmentSlot.SetExtendedStyle( dwExtStyle );
m_ctrlAttachmentSlot.InsertColumn( 0, "Slot <20≯<EFBFBD>", LVCFMT_LEFT, 90 );
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CPageGCMDSSlots::UpdateSkelpart()
{
std::map<Z3DTOK, long>* pmap;
std::map<Z3DTOK, long>::iterator it;
int i;
char szTmp[100];
m_ctrlSkelpart.DeleteAllItems();
m_rpGCMDS->RetrieveSkelpartList( pmap );
for( it = pmap->begin(), i = 0; it != pmap->end(); ++it, ++i )
{
m_ctrlSkelpart.InsertItem( i, g_TokSkeletonPartName.GetString(it->first) );
m_ctrlSkelpart.SetItemText( i, 1, itoa(it->second, szTmp, 10) );
}
}
void CPageGCMDSSlots::UpdateOutfitSlot()
{
std::vector<Z3DTOK>* pvecOutfitSlot;
std::vector<long>* pvecOutfitSlotLayerCount;
int i;
char szTmp[100];
m_ctrlOutfitSlot.DeleteAllItems();
m_rpGCMDS->RetrieveOutfitSlot( pvecOutfitSlot, pvecOutfitSlotLayerCount );
for( i = 0; i < pvecOutfitSlot->size(); ++i )
{
m_ctrlOutfitSlot.InsertItem( i, itoa(i, szTmp, 10) );
m_ctrlOutfitSlot.SetItemText( i, 1, g_TokSlotName.GetString((*pvecOutfitSlot)[i]) );
m_ctrlOutfitSlot.SetItemText( i, 2, itoa((*pvecOutfitSlotLayerCount)[i], szTmp, 10) );
}
}
void CPageGCMDSSlots::UpdateStaticSlot()
{
std::vector<Z3DTOK>* pvec;
int i;
m_ctrlStaticSlot.DeleteAllItems();
m_rpGCMDS->RetrieveStaticSlot( pvec );
for( i = 0; i < pvec->size(); ++i )
{
m_ctrlStaticSlot.InsertItem( i, g_TokSlotName.GetString( (*pvec)[i] ) );
}
}
void CPageGCMDSSlots::UpdateAttachmentSlot()
{
std::vector<Z3DTOK>* pvec;
int i;
m_ctrlAttachmentSlot.DeleteAllItems();
m_rpGCMDS->RetrieveAttachmentSlot( pvec );
for( i = 0; i < pvec->size(); ++i )
{
m_ctrlAttachmentSlot.InsertItem( i, g_TokSlotName.GetString( (*pvec)[i] ) );
}
}
void CPageGCMDSSlots::OnContextMenu(CWnd* pWnd, CPoint point)
{
// TODO: Add your message handler code here
if( m_ctrlSkelpart.GetSafeHwnd() == pWnd->GetSafeHwnd() )
{
m_pCurListCtrl = &m_ctrlSkelpart;
}
else if( m_ctrlOutfitSlot.GetSafeHwnd() == pWnd->GetSafeHwnd() )
{
m_pCurListCtrl = &m_ctrlOutfitSlot;
}
else if( m_ctrlStaticSlot.GetSafeHwnd() == pWnd->GetSafeHwnd() )
{
m_pCurListCtrl = &m_ctrlStaticSlot;
}
else if( m_ctrlAttachmentSlot.GetSafeHwnd() == pWnd->GetSafeHwnd() )
{
m_pCurListCtrl = &m_ctrlAttachmentSlot;
}
else
{
//m_pCurListCtrl = NULL;
CPropertyPage::OnContextMenu( pWnd, point );
return;
}
CMenu menuTmp;
CMenu* pContextMenu;
menuTmp.LoadMenu( IDR_MENU_GCMDS );
if( &m_ctrlOutfitSlot == m_pCurListCtrl )
{
pContextMenu = menuTmp.GetSubMenu( 2 );
}
else
{
pContextMenu = menuTmp.GetSubMenu( 1 );
}
CPoint ptClient;
UINT uFlags;
ptClient = point;
m_pCurListCtrl->ScreenToClient( &ptClient );
int nHit = m_pCurListCtrl->HitTest( ptClient, &uFlags );
if( -1 == nHit )
{
pContextMenu->EnableMenuItem( ID_MENUITEM_ADDITEM, MF_ENABLED );
pContextMenu->EnableMenuItem( ID_MENUITEM_EDITITEM, MF_GRAYED );
pContextMenu->EnableMenuItem( ID_MENUITEM_DELETEITEM, MF_GRAYED );
pContextMenu->EnableMenuItem( ID_MENUITEM_MOVEUP, MF_GRAYED );
pContextMenu->EnableMenuItem( ID_MENUITEM_MOVEDOWN, MF_GRAYED );
}
else
{
pContextMenu->EnableMenuItem( ID_MENUITEM_ADDITEM, MF_ENABLED );
pContextMenu->EnableMenuItem( ID_MENUITEM_EDITITEM, MF_ENABLED );
pContextMenu->EnableMenuItem( ID_MENUITEM_DELETEITEM, MF_ENABLED );
pContextMenu->EnableMenuItem( ID_MENUITEM_MOVEUP, MF_ENABLED );
pContextMenu->EnableMenuItem( ID_MENUITEM_MOVEDOWN, MF_ENABLED );
}
pContextMenu->TrackPopupMenu( TPM_LEFTALIGN, point.x, point.y, this, NULL );
}
void CPageGCMDSSlots::OnMenuitemAdditem()
{
// TODO: Add your command handler code here
if( NULL == m_pCurListCtrl )
{
return;
}
if( m_ctrlSkelpart.GetSafeHwnd() == m_pCurListCtrl->GetSafeHwnd() )
{
AddSkelpartItem();
}
else if( m_ctrlOutfitSlot.GetSafeHwnd() == m_pCurListCtrl->GetSafeHwnd() )
{
AddOutiftSlotItem();
}
else if( m_ctrlStaticSlot.GetSafeHwnd() == m_pCurListCtrl->GetSafeHwnd() )
{
AddStaticSlotItem();
}
else if( m_ctrlAttachmentSlot.GetSafeHwnd() == m_pCurListCtrl->GetSafeHwnd() )
{
AddAttachmentSlotItem();
}
}
void CPageGCMDSSlots::OnMenuitemEdititem()
{
// TODO: Add your command handler code here
if( NULL == m_pCurListCtrl )
{
return;
}
if( m_ctrlSkelpart.GetSafeHwnd() == m_pCurListCtrl->GetSafeHwnd() )
{
EditSkelpartItem();
}
else if( m_ctrlOutfitSlot.GetSafeHwnd() == m_pCurListCtrl->GetSafeHwnd() )
{
EditOutfitSlotItem();
}
else if( m_ctrlStaticSlot.GetSafeHwnd() == m_pCurListCtrl->GetSafeHwnd() )
{
EditStaticSlotItem();
}
else if( m_ctrlAttachmentSlot.GetSafeHwnd() == m_pCurListCtrl->GetSafeHwnd() )
{
EditAttachmentSlotItem();
}
}
void CPageGCMDSSlots::OnMenuitemDeleteitem()
{
// TODO: Add your command handler code here
if( NULL == m_pCurListCtrl )
{
return;
}
if( m_ctrlSkelpart.GetSafeHwnd() == m_pCurListCtrl->GetSafeHwnd() )
{
DeleteSkelpartItem();
}
else if( m_ctrlOutfitSlot.GetSafeHwnd() == m_pCurListCtrl->GetSafeHwnd() )
{
DeleteOutfitSlotItem();
}
else if( m_ctrlStaticSlot.GetSafeHwnd() == m_pCurListCtrl->GetSafeHwnd() )
{
DeleteStaticSlotItem();
}
else if( m_ctrlAttachmentSlot.GetSafeHwnd() == m_pCurListCtrl->GetSafeHwnd() )
{
DeleteAttachmentSlotItem();
}
}
void CPageGCMDSSlots::AddSkelpartItem()
{
CDlgSkelpart dlg;
std::map<Z3DTOK, long>* pmap;
std::map<Z3DTOK, long>::iterator it;
m_rpGCMDS->RetrieveSkelpartList( pmap );
dlg.SetupDialog( "", m_rpGCMDS, -1 );
while( 1 )
{
if( IDOK != dlg.DoModal() )
{
return;
}
if( CString("") == dlg.m_strSkelpartName )
{
return;
}
if( -1 == dlg.m_nSkelpartIndex )
{
return;
}
bool bDuplicated = false;
for( it = pmap->begin(); it != pmap->end(); ++it )
{
if( 0 == stricmp( dlg.m_strSkelpartName,
g_TokSkeletonPartName.GetString( it->first ) ) )
{
bDuplicated = true;
}
}
if( bDuplicated )
{
CString strTemp = dlg.m_strSkelpartName + " <20>ߺ<EFBFBD>";
MessageBox( strTemp, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..", MB_ICONERROR|MB_OK );
}
else
{
break;
}
}
Z3DTOK tok = g_TokSkeletonPartName.Add( dlg.m_strSkelpartName );
(*pmap)[tok] = dlg.m_nSkelpartIndex;
UpdateSkelpart();
LVFINDINFO lvfi;
lvfi.flags = LVFI_STRING;
lvfi.psz = dlg.m_strSkelpartName.LockBuffer();
int nIdx = m_ctrlSkelpart.FindItem( &lvfi, -1 );
dlg.m_strSkelpartName.UnlockBuffer();
m_ctrlSkelpart.EnsureVisible( nIdx, FALSE );
m_ctrlSkelpart.SetItemState( nIdx, LVIS_SELECTED | LVIS_FOCUSED,
LVIS_SELECTED | LVIS_FOCUSED );
}
void CPageGCMDSSlots::EditSkelpartItem()
{
CDlgSkelpart dlg;
std::map<Z3DTOK, long>* pmap;
std::map<Z3DTOK, long>::iterator it, itCurrent;
POSITION pos = m_ctrlSkelpart.GetFirstSelectedItemPosition();
if( NULL == pos )
{
return;
}
int nIdx = (int)pos - 1;
m_rpGCMDS->RetrieveSkelpartList( pmap );
char szTmp[300];
m_ctrlSkelpart.GetItemText( nIdx, 1, szTmp, 300 );
int nSkelIndex = atoi( szTmp );
m_ctrlSkelpart.GetItemText( nIdx, 0, szTmp, 300 );
itCurrent = pmap->find( g_TokSkeletonPartName.GetTOK(szTmp) );
if( itCurrent == pmap->end() )
{
return;
}
dlg.SetupDialog( szTmp, m_rpGCMDS, nSkelIndex );
while( 1 )
{
if( IDOK != dlg.DoModal() )
{
return;
}
if( CString("") == dlg.m_strSkelpartName )
{
return;
}
if( -1 == dlg.m_nSkelpartIndex )
{
return;
}
bool bDuplicated = false;
for( it = pmap->begin(); it != pmap->end(); ++it )
{
if( it != itCurrent )
{
if( 0 == stricmp( dlg.m_strSkelpartName,
g_TokSkeletonPartName.GetString( it->first ) ) )
{
bDuplicated = true;
}
}
}
if( bDuplicated )
{
CString strTemp = dlg.m_strSkelpartName + " <20>ߺ<EFBFBD>";
MessageBox( strTemp, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..", MB_ICONERROR|MB_OK );
}
else
{
break;
}
}
if( 0 == stricmp( dlg.m_strSkelpartName,
g_TokSkeletonPartName.GetString(itCurrent->first) ) )
{
if( dlg.m_nSkelpartIndex == itCurrent->second )
{
return;
}
else
{
itCurrent->second = dlg.m_nSkelpartIndex;
}
}
else
{
pmap->erase(itCurrent);
Z3DTOK tok = g_TokSkeletonPartName.Add( dlg.m_strSkelpartName );
(*pmap)[tok] = dlg.m_nSkelpartIndex;
}
UpdateSkelpart();
LVFINDINFO lvfi;
lvfi.flags = LVFI_STRING;
lvfi.psz = dlg.m_strSkelpartName.LockBuffer();
nIdx = m_ctrlSkelpart.FindItem( &lvfi, -1 );
dlg.m_strSkelpartName.UnlockBuffer();
m_ctrlSkelpart.EnsureVisible( nIdx, FALSE );
m_ctrlSkelpart.SetItemState( nIdx, LVIS_SELECTED | LVIS_FOCUSED,
LVIS_SELECTED | LVIS_FOCUSED );
}
void CPageGCMDSSlots::DeleteSkelpartItem()
{
CDlgSkelpart dlg;
std::map<Z3DTOK, long>* pmap;
std::map<Z3DTOK, long>::iterator it;
POSITION pos = m_ctrlSkelpart.GetFirstSelectedItemPosition();
if( NULL == pos )
{
return;
}
int nIdx = (int)pos - 1;
m_rpGCMDS->RetrieveSkelpartList( pmap );
CString strTemp = m_ctrlSkelpart.GetItemText(nIdx, 0)+CString(" <20><> <20><><EFBFBD><EFBFBD><EFBFBD>հ<EFBFBD>?");
if( IDCANCEL ==
MessageBox( strTemp, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", MB_ICONQUESTION|MB_OKCANCEL ) )
{
return;
}
it = pmap->find( g_TokSkeletonPartName.GetTOK(
m_ctrlSkelpart.GetItemText(nIdx, 0) ) );
if( it == pmap->end() )
{
return;
}
pmap->erase(it);
UpdateSkelpart();
}
void CPageGCMDSSlots::AddOutiftSlotItem()
{
CDlgOutfitSlot dlg;
std::vector<Z3DTOK>* pvecSlot;
std::vector<long>* pvecLayer;
m_rpGCMDS->RetrieveOutfitSlot( pvecSlot, pvecLayer );
dlg.SetupDialog( "", 1 );
while( 1 )
{
if( IDOK != dlg.DoModal() )
{
return;
}
bool bDuplicated = false;
for( int i = 0; i < pvecSlot->size(); ++i )
{
if( 0 == stricmp( dlg.m_strOutfitSlotName,
g_TokSlotName.GetString((*pvecSlot)[i]) ) )
{
bDuplicated = true;
break;
}
}
if( bDuplicated )
{
MessageBox( "<EFBFBD>ߺ<EFBFBD><EFBFBD><EFBFBD> Outfit slot <20≯<EFBFBD><CCB8><EFBFBD> <20>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD>", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", MB_ICONERROR|MB_OK );
}
else
{
break;
}
}
if( CString("") == dlg.m_strOutfitSlotName )
{
return;
}
pvecSlot->push_back( g_TokSlotName.Add(dlg.m_strOutfitSlotName) );
pvecLayer->push_back( dlg.m_nLayerCount+1 );
UpdateOutfitSlot();
int nIdx = m_ctrlOutfitSlot.GetItemCount()-1;
m_ctrlOutfitSlot.EnsureVisible(nIdx, FALSE);
m_ctrlOutfitSlot.SetItemState( nIdx, LVIS_SELECTED | LVIS_FOCUSED,
LVIS_SELECTED | LVIS_FOCUSED );
}
void CPageGCMDSSlots::EditOutfitSlotItem()
{
CDlgOutfitSlot dlg;
std::vector<Z3DTOK>* pvecSlot;
std::vector<long>* pvecLayer;
POSITION pos = m_ctrlOutfitSlot.GetFirstSelectedItemPosition();
if( NULL == pos )
{
return;
}
int nIdx = (int)pos - 1;
m_ctrlOutfitSlot.EnsureVisible( nIdx, FALSE );
m_rpGCMDS->RetrieveOutfitSlot( pvecSlot, pvecLayer );
dlg.SetupDialog( (*pvecSlot)[nIdx], (*pvecLayer)[nIdx] );
while( 1 )
{
if( IDOK != dlg.DoModal() )
{
return;
}
bool bDuplicated = false;
for( int i = 0; i < pvecSlot->size(); ++i )
{
if( nIdx != i )
{
if( 0 == stricmp( dlg.m_strOutfitSlotName,
g_TokSlotName.GetString((*pvecSlot)[i]) ) )
{
bDuplicated = true;
break;
}
}
}
if( bDuplicated )
{
MessageBox( "<EFBFBD>ߺ<EFBFBD><EFBFBD><EFBFBD> Outfit slot <20≯<EFBFBD><CCB8><EFBFBD> <20>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD>", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", MB_ICONERROR|MB_OK );
}
else
{
if( CString("") == dlg.m_strOutfitSlotName )
{
MessageBox( "Outfit slot <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD>", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", MB_ICONERROR|MB_OK );
}
else
{
break;
}
}
}
(*pvecSlot)[nIdx] = g_TokSlotName.Add(dlg.m_strOutfitSlotName);
(*pvecLayer)[nIdx] = dlg.m_nLayerCount+1;
UpdateOutfitSlot();
}
void CPageGCMDSSlots::DeleteOutfitSlotItem()
{
if( IDOK == MessageBox( "<EFBFBD><EFBFBD>¥<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD>?", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", MB_ICONQUESTION|MB_OKCANCEL ) )
{
POSITION pos = m_ctrlOutfitSlot.GetFirstSelectedItemPosition();
if( NULL == pos )
{
return;
}
int nIdx = (int)pos - 1;
std::vector<Z3DTOK>* pvecSlot;
std::vector<Z3DTOK>::iterator itSlot;
std::vector<long>* pvecLayer;
std::vector<long>::iterator itLayer;
m_rpGCMDS->RetrieveOutfitSlot( pvecSlot, pvecLayer );
itSlot = pvecSlot->begin() + nIdx;
pvecSlot->erase(itSlot);
itLayer = pvecLayer->begin() + nIdx;
pvecLayer->erase(itLayer);
UpdateOutfitSlot();
}
}
void CPageGCMDSSlots::AddStaticSlotItem()
{
std::vector<Z3DTOK>* pvec;
m_rpGCMDS->RetrieveStaticSlot(pvec);
pvec->push_back(NULL_TOK);
int nIdx = m_ctrlStaticSlot.GetItemCount();
m_ctrlStaticSlot.InsertItem( nIdx, "" );
m_ctrlStaticSlot.EnsureVisible( nIdx, FALSE );
m_ctrlStaticSlot.EditLabel( nIdx );
}
void CPageGCMDSSlots::EditStaticSlotItem()
{
POSITION pos = m_ctrlStaticSlot.GetFirstSelectedItemPosition();
if( NULL == pos )
{
return;
}
int nIdx = (int)pos - 1;
m_ctrlStaticSlot.EnsureVisible( nIdx, FALSE );
m_ctrlStaticSlot.EditLabel( nIdx );
}
void CPageGCMDSSlots::DeleteStaticSlotItem()
{
if( IDOK == MessageBox( "<EFBFBD><EFBFBD>¥<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD>?", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", MB_ICONQUESTION|MB_OKCANCEL ) )
{
POSITION pos = m_ctrlStaticSlot.GetFirstSelectedItemPosition();
if( NULL == pos )
{
return;
}
int nIdx = (int)pos - 1;
std::vector<Z3DTOK>* pvec;
std::vector<Z3DTOK>::iterator it;
m_rpGCMDS->RetrieveStaticSlot(pvec);
it = pvec->begin() + nIdx;
pvec->erase(it);
m_ctrlStaticSlot.DeleteItem(nIdx);
}
}
void CPageGCMDSSlots::AddAttachmentSlotItem()
{
std::vector<Z3DTOK>* pvec;
m_rpGCMDS->RetrieveAttachmentSlot(pvec);
pvec->push_back(NULL_TOK);
int nIdx = m_ctrlAttachmentSlot.GetItemCount();
m_ctrlAttachmentSlot.InsertItem( nIdx, "" );
m_ctrlAttachmentSlot.EnsureVisible( nIdx, FALSE );
m_ctrlAttachmentSlot.EditLabel( nIdx );
}
void CPageGCMDSSlots::EditAttachmentSlotItem()
{
POSITION pos = m_ctrlAttachmentSlot.GetFirstSelectedItemPosition();
if( NULL == pos )
{
return;
}
int nIdx = (int)pos - 1;
m_ctrlAttachmentSlot.EnsureVisible( nIdx, FALSE );
m_ctrlAttachmentSlot.EditLabel( nIdx );
}
void CPageGCMDSSlots::DeleteAttachmentSlotItem()
{
if( IDOK == MessageBox( "<EFBFBD><EFBFBD>¥<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD>?", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", MB_ICONQUESTION|MB_OKCANCEL ) )
{
POSITION pos = m_ctrlAttachmentSlot.GetFirstSelectedItemPosition();
if( NULL == pos )
{
return;
}
int nIdx = (int)pos - 1;
std::vector<Z3DTOK>* pvec;
m_rpGCMDS->RetrieveAttachmentSlot(pvec);
for( int i = nIdx; i < (pvec->size()-1); ++i )
{
(*pvec)[i] = (*pvec)[i+1];
}
pvec->resize( pvec->size()-1 );
m_ctrlAttachmentSlot.DeleteItem(nIdx);
}
}
void CPageGCMDSSlots::OnEndlabeleditListStaticslot(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
// TODO: Add your control notification handler code here
// <20><> <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> <20><><EFBFBD><EFBFBD> Ȯ<><C8AE><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD>
int nIdx = pDispInfo->item.iItem;
std::vector<Z3DTOK>* pvec;
m_rpGCMDS->RetrieveStaticSlot( pvec );
if(
(
( NULL == pDispInfo->item.pszText ) &&
( CString("") == m_ctrlStaticSlot.GetItemText( nIdx, 0 ) )
) ||
(
( NULL != pDispInfo->item.pszText ) &&
( '\0' == *(pDispInfo->item.pszText) )
)
)
{
std::vector<Z3DTOK>::iterator it;
it = pvec->begin() + nIdx;
pvec->erase(it);
m_ctrlStaticSlot.DeleteItem(nIdx);
*pResult = 0;
return;
}
if( pDispInfo->item.mask & LVIF_TEXT )
{
// <20>ߺ<EFBFBD>Ȯ<EFBFBD><C8AE>
bool bDuplicated = false;
for( int i = 0; i < pvec->size(); ++i )
{
if( i != nIdx )
{
if( g_TokSlotName.GetTOK(pDispInfo->item.pszText) == (*pvec)[i] )
{
bDuplicated = true;
break;
}
}
}
if( bDuplicated )
{
MessageBox( "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> Slot<6F><74> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>", NULL, MB_ICONERROR|MB_OK );
m_ctrlStaticSlot.PostMessage( LVM_EDITLABEL, nIdx, 0L );
return;
}
(*pvec)[nIdx] = g_TokSlotName.Add(pDispInfo->item.pszText);
m_ctrlStaticSlot.SetItemText( nIdx, 0, g_TokSlotName.GetString((*pvec)[nIdx]) );
}
*pResult = 0;
}
void CPageGCMDSSlots::OnEndlabeleditListAttachmentslot(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
// TODO: Add your control notification handler code here
// <20><> <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> <20><><EFBFBD><EFBFBD> Ȯ<><C8AE><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD>
int nIdx = pDispInfo->item.iItem;
std::vector<Z3DTOK>* pvec;
m_rpGCMDS->RetrieveAttachmentSlot( pvec );
if(
(
( NULL == pDispInfo->item.pszText ) &&
( CString("") == m_ctrlAttachmentSlot.GetItemText( nIdx, 0 ) )
) ||
(
( NULL != pDispInfo->item.pszText ) &&
( '\0' == *(pDispInfo->item.pszText) )
)
)
{
std::vector<Z3DTOK>::iterator it;
it = pvec->begin() + nIdx;
pvec->erase(it);
m_ctrlAttachmentSlot.DeleteItem(nIdx);
*pResult = 0;
return;
}
if( pDispInfo->item.mask & LVIF_TEXT )
{
// <20>ߺ<EFBFBD>Ȯ<EFBFBD><C8AE>
bool bDuplicated = false;
for( int i = 0; i < pvec->size(); ++i )
{
if( i != nIdx )
{
if( g_TokSlotName.GetTOK(pDispInfo->item.pszText) == (*pvec)[i] )
{
bDuplicated = true;
break;
}
}
}
if( bDuplicated )
{
MessageBox( "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> Slot<6F><74> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>", NULL, MB_ICONERROR|MB_OK );
m_ctrlAttachmentSlot.PostMessage( LVM_EDITLABEL, nIdx, 0L );
return;
}
(*pvec)[nIdx] = g_TokSlotName.Add(pDispInfo->item.pszText);
m_ctrlAttachmentSlot.SetItemText( nIdx, 0, g_TokSlotName.GetString((*pvec)[nIdx]) );
}
*pResult = 0;
}
void CPageGCMDSSlots::OnMenuitemMoveup()
{
// TODO: Add your command handler code here
std::vector<Z3DTOK>* pvecSlot;
std::vector<long>* pvecLayer;
m_rpGCMDS->RetrieveOutfitSlot( pvecSlot, pvecLayer );
POSITION pos = m_ctrlOutfitSlot.GetFirstSelectedItemPosition();
if( NULL == pos )
{
return;
}
int nIdx = (int)pos - 1;
if( 0 == nIdx )
{
return; // first item
}
std::swap( (*pvecSlot)[nIdx], (*pvecSlot)[nIdx-1] );
std::swap( (*pvecLayer)[nIdx], (*pvecLayer)[nIdx-1] );
UpdateOutfitSlot();
m_ctrlOutfitSlot.SetItemState( nIdx-1, LVIS_SELECTED | LVIS_FOCUSED,
LVIS_SELECTED | LVIS_FOCUSED);
}
void CPageGCMDSSlots::OnMenuitemMovedown()
{
// TODO: Add your command handler code here
std::vector<Z3DTOK>* pvecSlot;
std::vector<long>* pvecLayer;
m_rpGCMDS->RetrieveOutfitSlot( pvecSlot, pvecLayer );
POSITION pos = m_ctrlOutfitSlot.GetFirstSelectedItemPosition();
if( NULL == pos )
{
return;
}
int nIdx = (int)pos - 1;
if( pvecSlot->size()-1 == nIdx )
{
return; // last item
}
std::swap( (*pvecSlot)[nIdx], (*pvecSlot)[nIdx+1] );
std::swap( (*pvecLayer)[nIdx], (*pvecLayer)[nIdx+1] );
UpdateOutfitSlot();
m_ctrlOutfitSlot.SetItemState( nIdx+1, LVIS_SELECTED | LVIS_FOCUSED,
LVIS_SELECTED | LVIS_FOCUSED);
}