reman3/Rayman_X/cpa/tempgrp/TIA/Src/edirsele.cpp

344 lines
8.2 KiB
C++

// edirsele.cpp : implementation file
//
#include "stdafx.h"
#include "EdIRRes.h"
#include "EdIRSele.hpp"
#include "EdIRFrm.hpp"
#include "EdIRIRD.hpp"
#include "EdIRBeEn.hpp"
#include "EdIRIAGl.hpp"
#include "ai_intf.hpp"
#include "_Actors.hpp"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPA_EdIR_Select_IAObj dialog
CPA_EdIR_Select_IAObj::CPA_EdIR_Select_IAObj(CWnd* pParent /*=NULL*/, BOOL bPShow /*=FALSE*/, CString csIncomplete /*=""*/)
: CDialog(CPA_EdIR_Select_IAObj::IDD, pParent)
{
//{{AFX_DATA_INIT(CPA_EdIR_Select_IAObj)
//}}AFX_DATA_INIT
m_bParentsShow = bPShow;
m_csIncompleteWord = csIncomplete;
m_pclTypesList = fn_pclGetListIATypeObjects();
m_pclParentsList = new CStringList();
m_pclDataList = new CStringList();
CPA_BaseObject *p = g_pclAIInterface->m_pclIRMainFrame->m_pclBrain->m_fn_pclGetModel();
ASSERT( p && p->GetOwner() );
m_csCurrentModel = p->GetName();
m_csCurrentFamily = p->GetOwner()->GetName();
m_csCurrentParent = "";
m_csCurrentType = "";
}
void CPA_EdIR_Select_IAObj::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPA_EdIR_Select_IAObj)
DDX_Control(pDX, IDC_LIST_TYPES, m_clCListTypes);
DDX_Control(pDX, IDC_LIST_PARENTS, m_clCListParents);
DDX_Control(pDX, IDC_LIST_DATA, m_clCListData);
DDX_Control(pDX, IDC_BUTTON_SHOW_HIDE, m_cbCButton);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPA_EdIR_Select_IAObj, CDialog)
//{{AFX_MSG_MAP(CPA_EdIR_Select_IAObj)
ON_BN_CLICKED(IDC_BUTTON_SHOW_HIDE, OnButtonShowHide)
ON_NOTIFY(NM_CLICK, IDC_LIST_TYPES, OnClickListTypes)
ON_NOTIFY(NM_CLICK, IDC_LIST_PARENTS, OnClickListParents)
ON_NOTIFY(NM_DBLCLK, IDC_LIST_DATA, OnDblclkListData)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPA_EdIR_Select_IAObj message handlers
void CPA_EdIR_Select_IAObj::OnButtonShowHide()
{
m_bParentsShow = !m_bParentsShow;
m_fn_vToggleParents();
}
BOOL CPA_EdIR_Select_IAObj::OnInitDialog()
{
CDialog::OnInitDialog();
m_clCListTypes.GetWindowRect( &m_crCRectTypes1 );
ScreenToClient( &m_crCRectTypes1 );
m_clCListData.GetWindowRect( &m_crCRectData1 );
ScreenToClient( &m_crCRectData1 );
CRect CRectParents;
m_clCListParents.GetWindowRect( &CRectParents );
m_crCRectTypes2 = m_crCRectTypes1;
m_crCRectData2 = m_crCRectData1;
m_crCRectTypes2.DeflateRect( 0, 0, ( CRectParents.Width()/2 ), 0 );
m_crCRectData2.DeflateRect( ( CRectParents.Width()/2 ), 0, 0, 0 );
m_clCListTypes.InsertColumn( 0, "Object type", LVCFMT_LEFT, 300,0 );
POSITION pos=m_pclTypesList->GetHeadPosition();
int ipos = 0;
while(pos)
m_clCListTypes.InsertItem(ipos++, m_pclTypesList->GetNext(pos));
m_clCListParents.InsertColumn( 0, "Object name", LVCFMT_LEFT, 300, 0 );
//m_clCListParents.InsertColumn( 1, "Object type", LVCFMT_LEFT, CRectParents.Width()/2, 1 );
m_clCListData.InsertColumn( 0, "Object name", LVCFMT_LEFT, 300, 0 );
m_fn_vToggleParents();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CPA_EdIR_Select_IAObj::m_fn_vToggleParents()
{
if( m_bParentsShow )
{ m_clCListParents.ShowWindow( SW_SHOW );
m_clCListTypes.MoveWindow( m_crCRectTypes2, TRUE );
m_clCListData.MoveWindow( m_crCRectData2, TRUE );
m_cbCButton.SetWindowText( "&Hide parents" );
OnTypeSelection();
m_clCListParents.SetFocus();
}
else
{ m_clCListParents.ShowWindow( SW_HIDE );
m_clCListTypes.MoveWindow( m_crCRectTypes1, TRUE );
m_clCListData.MoveWindow( m_crCRectData1, TRUE );
m_cbCButton.SetWindowText( "&Show parents" );
OnTypeSelection();
m_clCListTypes.SetFocus();
}
}
CPA_EdIR_Select_IAObj::~CPA_EdIR_Select_IAObj()
{
delete m_pclTypesList;
delete m_pclParentsList;
delete m_pclDataList;
}
void CPA_EdIR_Select_IAObj::OnTypeSelection( )
{
int SelectedItem = -1;
for( int i = 0; i < m_clCListTypes.GetItemCount(); i++ )
if( m_clCListTypes.GetItemState( i, LVIS_SELECTED ) )
{
SelectedItem = i;
break;
}
if( SelectedItem == -1 )
return;
m_csCurrentType = m_clCListTypes.GetItemText( SelectedItem, 0);
m_pclParentsList->RemoveAll();
m_pclDataList->RemoveAll();
fn_vAddListOfIAObjectsForType( m_pclParentsList, m_pclDataList, "", m_csCurrentType );
if( m_bParentsShow )
{
m_fn_vRefreshListParents( );
if( m_fn_bTrySelectModelOrFamily() )
{
OnParentsSelection();
m_clCListParents.SetFocus( );
}
else
m_fn_vRefreshListData( );
}
else
m_fn_vRefreshListData( );
}
void CPA_EdIR_Select_IAObj::OnClickListTypes(NMHDR* pNMHDR, LRESULT* pResult)
{
OnTypeSelection( );
*pResult = 0;
}
BOOL CPA_EdIR_Select_IAObj::m_fn_bCheckComplete( CString csName )
{
int iIndex = csName.Find( m_csIncompleteWord );
if( iIndex )
return FALSE;
return TRUE;
}
void CPA_EdIR_Select_IAObj::OnParentsSelection()
{
int SelectedItem = -1;
for( int i = 0; i < m_clCListParents.GetItemCount(); i++ )
if( m_clCListParents.GetItemState( i, LVIS_SELECTED ) )
{
SelectedItem = i;
break;
}
if( SelectedItem == -1 )
return;
m_csCurrentParent = m_clCListParents.GetItemText( SelectedItem, 0 );
m_pclDataList->RemoveAll();
fn_vAddListOfIAObjectsForType( m_pclParentsList, m_pclDataList, m_csCurrentParent, m_csCurrentType );
m_fn_vRefreshListData( );
}
void CPA_EdIR_Select_IAObj::m_fn_vRefreshListData( )
{
int ipos = 0;
POSITION pos;
CString csString;
m_clCListData.DeleteAllItems();
pos = m_pclDataList->GetHeadPosition();
while(pos)
{
csString = m_pclDataList->GetNext( pos );
if( m_fn_bCheckComplete( csString ) )
m_clCListData.InsertItem( ipos++, csString );
}
m_clCListData.UpdateWindow();
}
void CPA_EdIR_Select_IAObj::m_fn_vRefreshListParents( )
{
int ipos = 0;
POSITION pos;
m_clCListParents.DeleteAllItems();
pos = m_pclParentsList->GetHeadPosition();
while(pos)
m_clCListParents.InsertItem( ipos++, m_pclParentsList->GetNext( pos ) );
m_clCListParents.UpdateWindow();
}
void CPA_EdIR_Select_IAObj::OnClickListParents(NMHDR* pNMHDR, LRESULT* pResult)
{
OnParentsSelection();
*pResult = 0;
}
BOOL CPA_EdIR_Select_IAObj::m_fn_bTrySelectModelOrFamily()
{
LV_FINDINFO lvInfo;
int iIndex;
lvInfo.flags = LVFI_STRING;
lvInfo.psz = m_csCurrentParent;
iIndex = m_clCListParents.FindItem( &lvInfo );
if( iIndex >=0 )
{
m_clCListParents.SetItemState( iIndex, LVIS_SELECTED, LVIS_SELECTED );
m_clCListParents.EnsureVisible( iIndex, FALSE );
return TRUE;
}
lvInfo.psz = m_csCurrentFamily;
iIndex = m_clCListParents.FindItem( &lvInfo );
if( iIndex >=0 )
{
m_clCListParents.SetItemState( iIndex, LVIS_SELECTED, LVIS_SELECTED );
m_clCListParents.EnsureVisible( iIndex, FALSE );
return TRUE;
}
lvInfo.psz = m_csCurrentModel;
iIndex = m_clCListParents.FindItem( &lvInfo );
if( iIndex >=0 )
{
m_clCListParents.SetItemState( iIndex, LVIS_SELECTED, LVIS_SELECTED );
m_clCListParents.EnsureVisible( iIndex, FALSE );
return TRUE;
}
return FALSE;
}
void CPA_EdIR_Select_IAObj::OnDblclkListData(NMHDR* pNMHDR, LRESULT* pResult)
{
OnDataSelection();
*pResult = 0;
}
void CPA_EdIR_Select_IAObj::OnOK()
{
if( GetFocus() == &m_clCListData )
OnDataSelection();
}
void CPA_EdIR_Select_IAObj::OnDataSelection()
{
int SelectedItem = -1;
for( int i = 0; i < m_clCListData.GetItemCount(); i++ )
if( m_clCListData.GetItemState( i, LVIS_SELECTED ) )
{
SelectedItem = i;
break;
}
if( SelectedItem == -1 )
return;
if ( ( GetKeyState(VK_CONTROL) & (1<<15) ) && m_fn_bTrySelectModelOrFamily() && m_csIncompleteWord.IsEmpty() )
m_csRetWord = m_csCurrentParent + "@";
else
m_csRetWord = "";
m_csRetWord = m_csRetWord + m_clCListData.GetItemText( SelectedItem, 0 );
CDialog::OnOK();
}
BOOL CPA_EdIR_Select_IAObj::OnCommand(WPARAM wParam, LPARAM lParam)
{
if( wParam == ID_IR_LIST_REFRESH )
{
if( ::GetDlgItem( m_hWnd, IDC_LIST_TYPES ) == (HWND)lParam )
OnTypeSelection();
else
if( ::GetDlgItem( m_hWnd, IDC_LIST_PARENTS ) == (HWND)lParam )
OnParentsSelection();
return TRUE;
}
return CDialog::OnCommand(wParam, lParam);
}