reman3/Rayman_X/cpa/tempgrp/ITF/cmdlg.cpp

844 lines
25 KiB
C++

/*
*=======================================================================================
* Name :cmdlg.cpp
*
* Author : VL Date :20/01/97
*
* Description : show incoherence that are in member list
*=======================================================================================
* Modification -> Author : VL Date : 26/05/97
* Description : some bug corrected, and all objects are now reachable objects
*=======================================================================================
*/
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
#include "stdafx.h"
#include "Itf/CPARes.h"
#include "Itf/CMDlg.h"
#include "Itf/cpamworl.hpp"
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
#ifdef ACTIVE_EDITOR
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
#include "geo.h"
#include "gli.h"
#include "col.h"
#define HieFriend
#include "lst.hpp"
#include "spo.h"
#undef HieFriend
#include "IncTUT.h"
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*
*=======================================================================================
* CCoherenceManagerDlg class function
*=======================================================================================
*/
/*
----------------------------------------------------------------------------------------
Description : constructor
----------------------------------------------------------------------------------------
*/
CCoherenceManagerDlg::CCoherenceManagerDlg(CWnd* pParent /*=NULL*/) : CDialog(CCoherenceManagerDlg::IDD, pParent)
{
int iCx, iCy;
RECT stRect;
m_bBitmapInit = FALSE;
m_cMode = C_CM_Mode_cIncoherence;
GetDesktopWindow()->GetWindowRect( &stRect );
iCx = stRect.right - stRect.left + 1;
iCy = stRect.bottom - stRect.top + 1;
m_stWindowPos.top = iCy / 2 - 100;
m_stWindowPos.bottom = m_stWindowPos.top + 200;
m_stWindowPos.left = iCx / 2 - 200;
m_stWindowPos.right = m_stWindowPos.left + 400;
}
/*
----------------------------------------------------------------------------------------
Description : destructor
----------------------------------------------------------------------------------------
*/
CCoherenceManagerDlg::~CCoherenceManagerDlg()
{
if (m_bBitmapInit)
{
for (char cBitmap = 0; cBitmap < 5; cBitmap ++)
m_a_oBitmap[ cBitmap ].DeleteObject();
m_oBitmapList.DeleteImageList();
}
}
/*
----------------------------------------------------------------------------------------
Description : Data exchange
----------------------------------------------------------------------------------------
*/
void CCoherenceManagerDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
/*
----------------------------------------------------------------------------------------
Description : Message Map
----------------------------------------------------------------------------------------
*/
BEGIN_MESSAGE_MAP(CCoherenceManagerDlg, CDialog)
ON_NOTIFY(TCN_SELCHANGE, IDC_TAB, OnSelchangeTab )
ON_BN_CLICKED(IDC_RADIO_ALPHA, OnRadioAlpha)
ON_BN_CLICKED(IDC_RADIO_INCOHERENCE, OnRadioIncoherence)
ON_BN_CLICKED(IDC_RADIO_DLL, OnRadioDLL)
ON_CBN_SELCHANGE(IDC_COMBO_DLLFATHER, OnComboDLLFatherSelChange)
ON_CBN_SELCHANGE(IDC_COMBO_DLLINCOHERENCE, OnComboDLLIncoherenceSelChange)
ON_CBN_SELCHANGE(IDC_COMBO_DLLCHILD, OnComboDLLChildSelChange)
ON_WM_SIZE()
ON_WM_SIZING()
ON_WM_DESTROY()
END_MESSAGE_MAP()
/*
----------------------------------------------------------------------------------------
Description : Pre translate message
----------------------------------------------------------------------------------------
*/
BOOL CCoherenceManagerDlg::PreTranslateMessage(MSG* pMsg)
{
BOOL bResult;
if (pMsg->hwnd == m_a_stModeData[m_cMode].p_oTree->GetSafeHwnd() )
{
CTreeCtrl *pTC = m_a_stModeData[m_cMode].p_oTree;
TV_ITEM stItem;
if ( pMsg->message == WM_LBUTTONDOWN)
{
bResult = CDialog::PreTranslateMessage( pMsg );
if ( (stItem.hItem = pTC->GetSelectedItem()) != NULL )
{
stItem.mask = TVIF_HANDLE | TVIF_STATE | TVIF_PARAM;
pTC->GetItem( &stItem );
if ( (stItem.lParam) && (LOWORD(pMsg->lParam) < 16) )
pTC->Expand( stItem.hItem, TVE_TOGGLE );
}
return bResult;
}
else if (pMsg->message == WM_LBUTTONDBLCLK )
{
if ( (stItem.hItem = pTC->GetSelectedItem()) != NULL )
{
stItem.mask = TVIF_HANDLE | TVIF_STATE | TVIF_PARAM;
pTC->GetItem( &stItem );
if ( (stItem.lParam) && (LOWORD(pMsg->lParam) >= 16) )
{
if (m_cMode == C_CM_Mode_cChild)
m_fn_vCallDLL( ((tdstChild *) stItem.lParam)->m_p_oChild );
else
m_fn_vCallDLL( ((tdstFather *) stItem.lParam)->m_p_oFather );
}
else
pTC->Expand( stItem.hItem, TVE_TOGGLE );
return 1;
}
}
else if (pMsg->message == WM_RBUTTONDOWN)
{
pMsg->message = WM_LBUTTONDOWN;
bResult = CDialog::PreTranslateMessage(pMsg);
if ( (stItem.hItem = pTC->GetSelectedItem()) != NULL )
{
CMenu oPopMenu;
POINT xPos;
stItem.mask = TVIF_HANDLE | TVIF_STATE | TVIF_PARAM;
pTC->GetItem( &stItem );
if (stItem.lParam != 0)
{
if (m_cMode == C_CM_Mode_cChild)
m_p_oSelectedObject = ((tdstChild *) stItem.lParam)->m_p_oChild;
else
m_p_oSelectedObject = ((tdstFather *) stItem.lParam)->m_p_oFather;
oPopMenu.CreatePopupMenu () ;
// fill
oPopMenu.AppendMenu( MF_STRING | ( (m_p_oSelectedObject == NULL )?MF_GRAYED:0) , 1 , "Call DLL" ) ;
// display
xPos.x = LOWORD(pMsg->lParam);
xPos.y = HIWORD(pMsg->lParam);
pTC->ClientToScreen(&xPos);
TUT_M_vGetTutDll ();
TUT_M_vRegisterMenu (this -> m_hWnd , oPopMenu . m_hMenu , xPos . x , xPos . y);
oPopMenu.TrackPopupMenu ( TPM_LEFTALIGN|TPM_RIGHTBUTTON, xPos.x, xPos.y, this);
oPopMenu.DestroyMenu ();
}
}
}
}
return CDialog::PreTranslateMessage(pMsg);
}
/*
----------------------------------------------------------------------------------------
Description : OnCommand
----------------------------------------------------------------------------------------
*/
BOOL CCoherenceManagerDlg::OnCommand(WPARAM wParam, LPARAM lParam)
{
switch(LOWORD(wParam))
{
case 1:
m_fn_vCallDLL( m_p_oSelectedObject );
break;
default :
return CDialog::OnCommand(wParam, lParam);
}
return TRUE;
}
/*
----------------------------------------------------------------------------------------
WM_DESTROY
----------------------------------------------------------------------------------------
*/
void CCoherenceManagerDlg::OnDestroy()
{
GetWindowRect( &m_stWindowPos );
CDialog::OnDestroy();
}
/*
----------------------------------------------------------------------------------------
WM_SIZING
----------------------------------------------------------------------------------------
*/
void CCoherenceManagerDlg::OnSizing( UINT nSide, LPRECT lpRect )
{
long lWidth = lpRect->right - lpRect->left + 1;
long lHeight= lpRect->bottom - lpRect->top + 1;
if (lWidth < 200)
{
switch (nSide)
{
case WMSZ_BOTTOMLEFT:
case WMSZ_LEFT:
case WMSZ_TOPLEFT:
lpRect->left = lpRect->right - 200;
break;
case WMSZ_BOTTOMRIGHT:
case WMSZ_RIGHT:
case WMSZ_TOPRIGHT:
lpRect->right = lpRect->left + 200;
break;
}
}
if (lHeight < 200)
{
switch (nSide)
{
case WMSZ_BOTTOM:
case WMSZ_BOTTOMLEFT:
case WMSZ_BOTTOMRIGHT:
lpRect->bottom = lpRect->top + 200;
break;
case WMSZ_TOP:
case WMSZ_TOPLEFT:
case WMSZ_TOPRIGHT:
lpRect->top = lpRect->bottom - 200;
}
}
CDialog::OnSizing( nSide, lpRect );
}
/*
----------------------------------------------------------------------------------------
WM_SIZE
----------------------------------------------------------------------------------------
*/
void CCoherenceManagerDlg::OnSize(UINT nType, int cx, int cy)
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
char cMode;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
CDialog::OnSize(nType, cx, cy);
if ( (nType != SIZE_MINIMIZED) && (GetDlgItem( IDC_STATIC_NOTHING ) != NULL) )
{
/*
* resizing Tab control
*/
GetDlgItem( IDC_TAB )->SetWindowPos( NULL, 5, 5, cx - 10, cy - 10, SWP_NOREDRAW | SWP_NOZORDER );
/*
* resizing check boxes
*/
GetDlgItem( IDC_RADIO_ALPHA )->SetWindowPos( NULL, 10, cy - 45, (cx - 30) / 2, 12, SWP_NOREDRAW | SWP_NOZORDER );
GetDlgItem( IDC_RADIO_INCOHERENCE )->SetWindowPos( NULL, 10, cy - 28, (cx - 30) / 2, 12, SWP_NOREDRAW | SWP_NOZORDER );
GetDlgItem( IDC_RADIO_DLL )->SetWindowPos( NULL, (cx - 30) / 2 + 15, cy - 45, (cx - 30) / 2, 12, SWP_NOREDRAW | SWP_NOZORDER );
/*
* resizing combo boxes and tree control
*/
for (cMode = 0; cMode < C_CM_cNumberOfModes; cMode++)
{
m_a_stModeData[ cMode ].p_oTree->SetWindowPos( NULL, 10, 30, cx - 20, cy - 80, SWP_NOREDRAW | SWP_NOZORDER );
m_a_stModeData[ cMode ].p_oCombo->SetWindowPos( NULL, (cx - 30) / 2 + 15, cy - 28, (cx - 30) / 2, 12, SWP_NOREDRAW | SWP_NOZORDER );
}
/*
* moving nothing static
*/
GetDlgItem( IDC_STATIC_NOTHING )->SetWindowPos( NULL, (cx / 2) - 40, (cy / 2) - 10, 80, 20, SWP_NOREDRAW | SWP_NOZORDER );
Invalidate();
}
}
/*
----------------------------------------------------------------------------------------
Description : functions to display list
----------------------------------------------------------------------------------------
*/
void CCoherenceManagerDlg::m_fn_vFatherList( CFatherMap *_p_oMap, char cMode, char *szDLLName )
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
char szFather[200];
CTreeCtrl *pTC = m_a_stModeData[cMode].p_oTree;
CComboBox *pCB = m_a_stModeData[cMode].p_oCombo;
int iFatherImage = ( (cMode == C_CM_Mode_cIncoherence) ? 1 : 0);
int iChildImage = ((cMode == C_CM_Mode_cIncoherence) ? 3 : 2);
POSITION xPos;
POSITION xPosList;
HTREEITEM hFather;
CPA_BaseObject *p_oObject;
tdstFather *p_stFather;
tdstLinkedChild *p_stLinkedChild;
TV_ITEM stItem;
char *szName;
BOOL bReinitDllComboBox = !strcmp( szDLLName, C_szAllDLLName);
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
pTC->DeleteAllItems();
if (bReinitDllComboBox)
{
pCB->ResetContent();
pCB->AddString( C_szAllDLLName );
pCB->SetCurSel(0);
}
if (_p_oMap->IsEmpty())
{
pTC->ShowWindow( FALSE );
GetDlgItem( IDC_STATIC_NOTHING )->ShowWindow( TRUE );
return;
}
pTC->ShowWindow(TRUE);
GetDlgItem( IDC_STATIC_NOTHING )->ShowWindow( FALSE );
xPos = _p_oMap->GetStartPosition();
while ( xPos )
{
_p_oMap->GetNextAssoc( xPos, p_oObject, p_stFather );
if ( (p_stFather == NULL) || (p_oObject == NULL) )
continue;
if (bReinitDllComboBox)
{
if (pCB->FindStringExact( -1, p_oObject->GetEditor()->GetCurrentEditorName() ) == CB_ERR)
pCB->AddString( p_oObject->GetEditor()->GetCurrentEditorName() );
}
else
{
if ( strcmp(p_oObject->GetEditor()->GetCurrentEditorName(), szDLLName) )
continue;
}
// insert item in tree
sprintf( szFather, "%s (%s)", p_oObject->GetName(), p_oObject->GetEditor()->GetCurrentEditorName() );
hFather = pTC->InsertItem( szFather );
stItem.hItem = hFather;
stItem.iImage = iFatherImage;
stItem.iSelectedImage = iFatherImage;
stItem.mask = TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE ;
stItem.lParam = (LPARAM) p_stFather;
pTC->SetItem( &stItem );
// insert child
xPosList = p_stFather->m_oChildList.GetHeadPosition();
while (xPosList)
{
p_stLinkedChild = p_stFather->m_oChildList.GetNext( xPosList );
if ( (p_stLinkedChild == NULL) || (p_stLinkedChild->m_p_stChild->m_p_oChild == NULL))
continue;
sprintf
(
szFather,
"[%d] %s (%s)",
p_stLinkedChild->m_ulLinkWeight,
p_stLinkedChild->m_p_stChild->m_p_oChild->GetName(),
p_stLinkedChild->m_p_stChild->m_p_oChild->GetEditor()->GetCurrentEditorName()
);
pTC->InsertItem( szFather, iChildImage, iChildImage, hFather );
}
// insert destroyed child
xPosList = p_stFather->m_oDestroyedChildList.GetHeadPosition();
while (xPosList )
{
szName = p_stFather->m_oDestroyedChildList.GetNext( xPosList );
pTC->InsertItem( szName, 4, 4, hFather );
}
}
// change order to the last used one
switch (m_a_stModeData[ cMode ].cOrder )
{
case C_cAlpha:
m_fn_vSortAlpha( cMode );
break;
case C_cIncoherence:
m_fn_vSortIncoherence( cMode );
break;
case C_cDLL:
m_fn_vSortDLL( cMode );
break;
}
}
/*
----------------------------------------------------------------------------------------
Description : functions to display list
----------------------------------------------------------------------------------------
*/
void CCoherenceManagerDlg::m_fn_vChildList( CChildMap *_p_oMap, char cMode, char *szDLLName )
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
char szString[200];
CTreeCtrl *pTC = m_a_stModeData[cMode].p_oTree;
CComboBox *pCB = m_a_stModeData[cMode].p_oCombo;
int iFatherImage = ( (cMode == C_CM_Mode_cIncoherence) ? 1 : 0);
int iChildImage = ((cMode == C_CM_Mode_cIncoherence) ? 3 : 2);
POSITION xPos;
POSITION xPosList;
HTREEITEM hChild;
CPA_BaseObject *p_oObject;
tdstFather *p_stFather;
tdstChild *p_stChild;
TV_ITEM stItem;
BOOL bReinitDllComboBox = !strcmp( szDLLName, C_szAllDLLName);
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
pTC->DeleteAllItems();
if (bReinitDllComboBox)
{
pCB->ResetContent();
pCB->AddString( C_szAllDLLName );
pCB->SetCurSel(0);
}
if (_p_oMap->IsEmpty())
{
pTC->ShowWindow( FALSE );
GetDlgItem( IDC_STATIC_NOTHING )->ShowWindow( TRUE );
return;
}
pTC->ShowWindow(TRUE);
GetDlgItem( IDC_STATIC_NOTHING )->ShowWindow( FALSE );
xPos = _p_oMap->GetStartPosition();
while ( xPos )
{
_p_oMap->GetNextAssoc( xPos, p_oObject, p_stChild );
if ( (p_stChild == NULL) || (p_oObject == NULL) )
continue;
if (bReinitDllComboBox)
{
if (pCB->FindStringExact( -1, p_oObject->GetEditor()->GetCurrentEditorName() ) == CB_ERR)
pCB->AddString( p_oObject->GetEditor()->GetCurrentEditorName() );
}
else
{
if ( strcmp(p_oObject->GetEditor()->GetCurrentEditorName(), szDLLName) )
continue;
}
// insert item in tree
sprintf( szString, "%s (%s)", p_oObject->GetName(), p_oObject->GetEditor()->GetCurrentEditorName() );
hChild = pTC->InsertItem( szString );
stItem.hItem = hChild;
stItem.iImage = iFatherImage;
stItem.iSelectedImage = iFatherImage;
stItem.mask = TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE ;
stItem.lParam = (LPARAM) p_stChild;
pTC->SetItem( &stItem );
// insert child
xPosList = p_stChild->m_oFatherList.GetHeadPosition();
while (xPosList)
{
p_stFather = p_stChild->m_oFatherList.GetNext( xPosList );
if ( (p_stFather == NULL) || (p_stFather->m_p_oFather == NULL))
continue;
sprintf
(
szString,
"%s (%s)",
p_stFather->m_p_oFather->GetName(),
p_stFather->m_p_oFather->GetEditor()->GetCurrentEditorName()
);
pTC->InsertItem( szString, 0, 0, hChild );
}
}
// change order to the last used one
switch (m_a_stModeData[ cMode ].cOrder )
{
case C_cAlpha:
m_fn_vSortAlpha( cMode );
break;
case C_cIncoherence:
m_fn_vSortIncoherence( cMode );
break;
case C_cDLL:
m_fn_vSortDLL( cMode );
break;
}
}
/*
*=======================================================================================
* CCoherenceManagerDlg message handlers
*=======================================================================================
*/
/*
----------------------------------------------------------------------------------------
Description : call DLL
----------------------------------------------------------------------------------------
*/
//void CCoherenceManagerDlg::m_fn_vCallDLL(tdstFather *p_stFather)
void CCoherenceManagerDlg::m_fn_vCallDLL(CPA_BaseObject *_p_oObject)
{
m_oReachObjList.RemoveAll();
//m_oReachObjList.AddTail( (CPA_BaseObject *) p_stFather->m_p_oFather);
m_oReachObjList.AddTail( _p_oObject );
//p_stFather->m_p_oFather->GetMainWorld()->fn_bActivateEditor( p_stFather->m_p_oFather->GetEditor(), &m_oReachObjList );
_p_oObject->GetMainWorld()->fn_bActivateEditor( _p_oObject->GetEditor(), &m_oReachObjList );
}
/*
----------------------------------------------------------------------------------------
Description : handle BN_CLICKED message on IDC_RADIO_ALPHA
----------------------------------------------------------------------------------------
*/
void CCoherenceManagerDlg::m_fn_vSortAlpha( char cMode )
{
m_a_stModeData[ cMode ].p_oTree->SortChildren( NULL );
m_a_stModeData[ cMode ].cOrder = C_cAlpha;
}
void CCoherenceManagerDlg::OnRadioAlpha(void)
{
m_fn_vSortAlpha( m_cMode );
}
/*
----------------------------------------------------------------------------------------
Description : handle BN_CLICKED message on IDC_RADIO_INCOHERENCE
----------------------------------------------------------------------------------------
*/
int CALLBACK fn_iIncoherenceCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
tdstFather *p_stFather1 = (tdstFather *) lParam1;
tdstFather *p_stFather2 = (tdstFather *) lParam2;
return (p_stFather2->m_oChildList.GetCount() - p_stFather1->m_oChildList.GetCount());
}
int CALLBACK fn_iNumberOfFathersCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
tdstChild *p_stChild1 = (tdstChild *) lParam1;
tdstChild *p_stChild2 = (tdstChild *) lParam2;
return (p_stChild2->m_oFatherList.GetCount() - p_stChild1->m_oFatherList.GetCount());
}
void CCoherenceManagerDlg::m_fn_vSortIncoherence( char cMode )
{
TV_SORTCB stSort;
stSort.hParent = NULL;
switch (m_cMode)
{
case C_CM_Mode_cIncoherence:
case C_CM_Mode_cFather:
stSort.lpfnCompare = fn_iIncoherenceCompare;
break;
case C_CM_Mode_cChild:
stSort.lpfnCompare = fn_iNumberOfFathersCompare;
break;
}
m_a_stModeData[cMode].p_oTree->SortChildrenCB( &stSort );
m_a_stModeData[cMode].cOrder = C_cIncoherence;
}
void CCoherenceManagerDlg::OnRadioIncoherence( void )
{
m_fn_vSortIncoherence( m_cMode );
}
/*
----------------------------------------------------------------------------------------
Description : handle BN_CLICKED message on IDC_RADIO_DLL
----------------------------------------------------------------------------------------
*/
int CALLBACK fn_iFatherDLLCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
tdstFather *p_stFather1 = (tdstFather *) lParam1;
tdstFather *p_stFather2 = (tdstFather *) lParam2;
return strcmp(p_stFather1->m_p_oFather->GetEditor()->GetCurrentEditorName(), p_stFather2->m_p_oFather->GetEditor()->GetCurrentEditorName());
}
int CALLBACK fn_iChildDLLCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
tdstChild *p_stChild1 = (tdstChild *) lParam1;
tdstChild *p_stChild2 = (tdstChild *) lParam2;
return strcmp(p_stChild1->m_p_oChild->GetEditor()->GetCurrentEditorName(), p_stChild2->m_p_oChild->GetEditor()->GetCurrentEditorName());
}
void CCoherenceManagerDlg::m_fn_vSortDLL( char cMode )
{
TV_SORTCB stSort;
stSort.hParent = NULL;
switch (m_cMode)
{
case C_CM_Mode_cIncoherence:
case C_CM_Mode_cFather:
stSort.lpfnCompare = fn_iFatherDLLCompare;
break;
case C_CM_Mode_cChild:
stSort.lpfnCompare = fn_iChildDLLCompare;
break;
}
m_a_stModeData[cMode].p_oTree->SortChildrenCB( &stSort );
m_a_stModeData[cMode].cOrder = C_cDLL;
}
void CCoherenceManagerDlg::OnRadioDLL(void)
{
m_fn_vSortDLL( m_cMode );
}
/*
----------------------------------------------------------------------------------------
Description : CBN_SELCHANGE message for IDC_COMBO_DLLFATHER
----------------------------------------------------------------------------------------
*/
void CCoherenceManagerDlg::OnComboDLLFatherSelChange(void)
{
char szDllName[100];
GetDlgItem(IDC_COMBO_DLLFATHER)->GetWindowText(szDllName, 100);
m_fn_vFatherList( m_p_oFatherMap, 1 , szDllName );
}
/*
----------------------------------------------------------------------------------------
Description : CBN_SELCHANGE message for IDC_COMBO_DLLINCOHERENCE
----------------------------------------------------------------------------------------
*/
void CCoherenceManagerDlg::OnComboDLLIncoherenceSelChange(void)
{
char szDllName[100];
GetDlgItem(IDC_COMBO_DLLINCOHERENCE)->GetWindowText(szDllName, 100);
m_fn_vFatherList( m_p_oIncoherenceMap, 0 , szDllName );
}
/*
----------------------------------------------------------------------------------------
Description : CBN_SELCHANGE message for IDC_COMBO_DLLCHILD
----------------------------------------------------------------------------------------
*/
void CCoherenceManagerDlg::OnComboDLLChildSelChange(void)
{
char szDllName[100];
GetDlgItem(IDC_COMBO_DLLCHILD)->GetWindowText(szDllName, 100);
m_fn_vChildList( m_p_oChildMap, 2 , szDllName );
}
/*
----------------------------------------------------------------------------------------
Description : TCN_SELCHANGE message
----------------------------------------------------------------------------------------
*/
void CCoherenceManagerDlg::OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult)
{
int iTab = ((CTabCtrl *) GetDlgItem( IDC_TAB ))->GetCurSel() ;
BOOL bSomething;
bSomething = m_a_stModeData[iTab].p_oTree->GetCount() > 0;
// show new mode
m_a_stModeData[ iTab ].p_oTree->ShowWindow( bSomething );
m_a_stModeData[ iTab ].p_oCombo->ShowWindow( bSomething );
GetDlgItem( IDC_STATIC_NOTHING )->ShowWindow( !bSomething );
GetDlgItem( IDC_RADIO_ALPHA )->ShowWindow( bSomething );
GetDlgItem( IDC_RADIO_INCOHERENCE )->ShowWindow( bSomething );
GetDlgItem( IDC_RADIO_DLL )->ShowWindow( bSomething );
if (bSomething )
{
((CButton *) GetDlgItem( IDC_RADIO_ALPHA ))->SetCheck( m_a_stModeData[iTab].cOrder == C_cAlpha ? 1 : 0 );
((CButton *) GetDlgItem( IDC_RADIO_INCOHERENCE ))->SetCheck( m_a_stModeData[iTab].cOrder == C_cIncoherence ? 1 : 0 );
((CButton *) GetDlgItem( IDC_RADIO_DLL ))->SetCheck( m_a_stModeData[iTab].cOrder == C_cDLL ? 1 : 0 );
GetDlgItem( IDC_RADIO_INCOHERENCE )->SetWindowText( m_a_stModeData[iTab].szOrderName );
}
// hide old mode
if (m_cMode != iTab )
{
m_a_stModeData[ m_cMode ].p_oTree->ShowWindow( FALSE );
m_a_stModeData[ m_cMode ].p_oCombo->ShowWindow( FALSE );
// set new mode
m_cMode = iTab;
}
*pResult = 0;
}
/*
----------------------------------------------------------------------------------------
Description : handle WM_INITDIALOG message
----------------------------------------------------------------------------------------
*/
BOOL CCoherenceManagerDlg::OnInitDialog()
{
char szTitle[20];
TC_ITEM stItem;
CTabCtrl *p_oTab = (CTabCtrl *) GetDlgItem( IDC_TAB );
char cMode;
CDialog::OnInitDialog();
if ( !m_bBitmapInit )
{
char cBitmap;
m_a_oBitmap[0].LoadBitmap( IDB_BITMAP_FATHER );
m_a_oBitmap[1].LoadBitmap( IDB_BITMAP_INCOHERENCE );
m_a_oBitmap[2].LoadBitmap( IDB_BITMAP_CHILD );
m_a_oBitmap[3].LoadBitmap( IDB_BITMAP_DELETEDCHILD );
m_a_oBitmap[4].LoadBitmap( IDB_BITMAP_DESTROYEDCHILD );
m_oBitmapList.Create(16,16,TRUE, 5,5);
for (cBitmap = 0; cBitmap < 5; cBitmap ++)
m_oBitmapList.Add( &m_a_oBitmap[ cBitmap ], RGB(255,255,255) );
m_bBitmapInit = TRUE;
}
/*
* Init Mode data
*/
m_a_stModeData[C_CM_Mode_cIncoherence].p_oTree = (CTreeCtrl *) GetDlgItem( IDC_TREE_INCOHERENCE );
m_a_stModeData[C_CM_Mode_cIncoherence].p_oCombo = (CComboBox *) GetDlgItem( IDC_COMBO_DLLINCOHERENCE );
m_a_stModeData[C_CM_Mode_cIncoherence].cOrder = C_cAlpha;
strcpy( m_a_stModeData[C_CM_Mode_cIncoherence].szOrderName, "Number of incoherences" );
m_a_stModeData[C_CM_Mode_cFather].p_oTree = (CTreeCtrl *) GetDlgItem( IDC_TREE_FATHER );
m_a_stModeData[C_CM_Mode_cFather].p_oCombo = (CComboBox *) GetDlgItem( IDC_COMBO_DLLFATHER );
m_a_stModeData[C_CM_Mode_cFather].cOrder = C_cAlpha;
strcpy( m_a_stModeData[C_CM_Mode_cFather].szOrderName, "Number of children" );
m_a_stModeData[C_CM_Mode_cChild].p_oTree = (CTreeCtrl *) GetDlgItem( IDC_TREE_CHILD );
m_a_stModeData[C_CM_Mode_cChild].p_oCombo = (CComboBox *) GetDlgItem( IDC_COMBO_DLLCHILD );
m_a_stModeData[C_CM_Mode_cChild].cOrder = C_cAlpha;
strcpy( m_a_stModeData[C_CM_Mode_cChild].szOrderName, "Number of fathers" );
p_oTab->DeleteAllItems();
p_oTab->SetImageList( &m_oBitmapList );
stItem.mask = TCIF_TEXT | TCIF_IMAGE;
stItem.pszText = szTitle;
stItem.iImage = 1;
strcpy( szTitle, "Invalid links" );
p_oTab->InsertItem( 0 , &stItem );
stItem.iImage = 0;
strcpy( szTitle, "Father links" );
p_oTab->InsertItem( 1 , &stItem );
stItem.iImage = 2;
strcpy( szTitle, "Child links" );
p_oTab->InsertItem( 2 , &stItem );
for (cMode = 0; cMode < C_CM_cNumberOfModes; cMode ++)
m_a_stModeData[ cMode ].p_oTree->SetImageList( &m_oBitmapList, TVSIL_NORMAL );
m_fn_vFatherList( m_p_oIncoherenceMap, 0, C_szAllDLLName );
m_fn_vFatherList( m_p_oFatherMap, 1, C_szAllDLLName );
m_fn_vChildList( m_p_oChildMap, 2, C_szAllDLLName );
for (cMode = 0; cMode < C_CM_cNumberOfModes; cMode ++)
{
m_a_stModeData[ cMode ].p_oTree->ShowWindow( FALSE );
m_a_stModeData[ cMode ].p_oCombo->ShowWindow( FALSE );
}
LRESULT lResult;
p_oTab->SetCurSel( m_cMode );
OnSelchangeTab( NULL, &lResult );
MoveWindow( &m_stWindowPos );
return TRUE;
}
#endif //ACTIVE_EDITOR