844 lines
25 KiB
C++
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
|
|
|