reman3/Rayman_X/cpa/tempgrp/TAc/src/DlgZA.cpp

866 lines
29 KiB
C++

// DlgZA.cpp : implementation file
//
#include "stdafx.h"
#include "ACP_Base.h"
#include "ITF.h"
#include "TAC.h"
#include "OAc.h"
#include "ACInterf.hpp"
#include "DlgZA.hpp"
#include "DLGZALst.hpp"
#include "DlgInput.hpp"
#include "ZAModif.hpp"
#include "FAModif.hpp"
#include "..\Main\Inc\_EditID.h"
#include "TUT.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
///////////////////////////////////////////////////////////////////////////////
// MACROS
///////////////////////////////////////////////////////////////////////////////
#define M_Control( CType, nID) ( ( CType*) GetDlgItem( nID ) )
#define M_LB( nID ) M_Control( CListBox, nID )
#define M_BT( nID ) M_Control( CButton, nID )
#define M_Enable( nID, bEnable ) GetDlgItem( nID ) -> EnableWindow( bEnable )
#define M_bEnabled( nID ) GetDlgItem( nID ) -> IsWindowEnabled()
#define M_LBZA() M_LB( IDC_LIST_ZA )
#define M_LBZonesList() M_LB( IDC_LIST_ZONES )
//#define M_BTAction() M_BT( IDC_BT_ACTION )
#define M_GetClientRect( pWnd, poRect ) (pWnd) -> GetWindowRect( poRect );ScreenToClient( poRect )
#define M_GetClientRectId( Id, poRect ) M_GetClientRect( GetDlgItem( Id ), poRect )
#define M_SetClientRect( pWnd, poRect ) (pWnd) -> MoveWindow( poRect )
#define M_SetClientRectId( Id, poRect ) M_SetClientRect( GetDlgItem( Id ), poRect )
#define M_MakeDo( p_oModif ) m_p_oDLL -> M_GetEditManager() -> AskFor ( p_oModif )
// Popup Menu ID
#define C_uiPMDefault 2000
#define C_uiPMAdd (C_uiPMDefault + 1)
#define C_uiPMCopy (C_uiPMDefault + 2)
#define C_uiPMDel (C_uiPMDefault + 3)
#define C_uiPMRename (C_uiPMDefault + 4)
#define C_iBorderSize 2
/////////////////////////////////////////////////////////////////////////////
// CDlgZonesActivation
IMPLEMENT_DYNCREATE(CDlgZonesActivation, CFormView)
CDlgZonesActivation::CDlgZonesActivation()
: CFormView(CDlgZonesActivation::IDD)
{
//{{AFX_DATA_INIT(CDlgZonesActivation)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_oCrossDC.CreateCompatibleDC( NULL );
m_oCrossBitmap.LoadBitmap( IDB_BITMAP_ALLOWED );
m_oCrossDC.SelectObject(m_oCrossBitmap);
// create italic font
PLOGFONT plfItalic = (PLOGFONT) LocalAlloc(LPTR, sizeof(LOGFONT));
lstrcpy(plfItalic->lfFaceName, "MS Sans Serif");
plfItalic->lfItalic = TRUE;
plfItalic->lfWeight = FW_NORMAL ;
plfItalic->lfHeight = 8;
plfItalic->lfEscapement = 0;
m_oItalicFont.CreateFontIndirect(plfItalic);
// create bold font
PLOGFONT plf = (PLOGFONT) LocalAlloc(LPTR, sizeof(LOGFONT));
lstrcpy(plf->lfFaceName, "MS Sans Serif");
plf->lfWeight = FW_BOLD ;
plf->lfHeight = 8;
plf->lfEscapement = 0;
m_oBoldFont.CreateFontIndirect(plf);
//
m_p_oDLL = NULL;
m_p_oDlgZAList = NULL;
m_p_oCurrentNamesList = NULL;
m_p_oCurrentZA = NULL;
//
m_bFirstShow = TRUE;
}
CDlgZonesActivation::~CDlgZonesActivation()
{
m_oCrossDC.DeleteDC();
m_oItalicFont.DeleteObject();
m_oBoldFont.DeleteObject();
}
void CDlgZonesActivation::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlgZonesActivation)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BOOL CDlgZonesActivation::Create( LPCTSTR lpszClassName, LPCTSTR lpszWindowName,
DWORD dwRequestedStyle, const RECT& rect, CWnd* pParentWnd, UINT nID,
CCreateContext* pContext )
{
BOOL bResult = CFormView::Create( lpszClassName, lpszWindowName, dwRequestedStyle, rect, pParentWnd, nID, pContext );
// register controls
TUT_M_vGetTutDll();
TUT_M_vRegisterControlID( IDC_LIST_ZA, "TAC_ZAM_ZA_LIST", TUT_e_ListBox );
TUT_M_vRegisterControlID( IDC_LIST_ZONES, "TAC_ZAM_ZA_LISTZONES", TUT_e_ListBox );
TUT_M_vRegisterControlID( IDC_BT_NEW, "TAC_ZAM_ZA_BTNEW", TUT_e_Button );
TUT_M_vRegisterControlID( IDC_BT_RENAME, "TAC_ZAM_ZA_BTRENAME", TUT_e_Button );
TUT_M_vRegisterControlID( IDC_BT_COPY, "TAC_ZAM_ZA_BTCOPY", TUT_e_Button );
TUT_M_vRegisterControlID( IDC_BT_DELETE, "TAC_ZAM_ZA_BTDELETE", TUT_e_Button );
TUT_M_vRegisterControlID( IDC_BT_DEFAULT, "TAC_ZAM_ZA_BTDEFAULT", TUT_e_Button );
//
return bResult;
}
BEGIN_MESSAGE_MAP(CDlgZonesActivation, CFormView)
//{{AFX_MSG_MAP(CDlgZonesActivation)
ON_WM_DESTROY()
ON_WM_DRAWITEM()
ON_WM_SHOWWINDOW()
ON_LBN_SELCHANGE(IDC_LIST_ZA, OnSelchangeZAList)
ON_BN_CLICKED(IDC_BT_NEW, OnBtAdd)
ON_BN_CLICKED(IDC_BT_RENAME, OnBtRename)
ON_BN_CLICKED(IDC_BT_COPY, OnBtCopy)
ON_BN_CLICKED(IDC_BT_DELETE, OnBtDelete)
ON_BN_CLICKED(IDC_BT_DEFAULT, OnBtDefault)
ON_WM_SIZE()
ON_LBN_DBLCLK(IDC_LIST_ZA, OnDblclkListZa)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlgZonesActivation diagnostics
#ifdef _DEBUG
void CDlgZonesActivation::AssertValid() const
{
CFormView::AssertValid();
}
void CDlgZonesActivation::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CDlgZonesActivation message handlers
void CDlgZonesActivation::OnDestroy()
{
// register controls
TUT_M_vGetTutDll();
TUT_M_vUnregisterControlID( IDC_LIST_ZA );
TUT_M_vUnregisterControlID( IDC_LIST_ZONES );
TUT_M_vUnregisterControlID( IDC_BT_NEW );
TUT_M_vUnregisterControlID( IDC_BT_RENAME );
TUT_M_vUnregisterControlID( IDC_BT_COPY );
TUT_M_vUnregisterControlID( IDC_BT_DELETE );
TUT_M_vUnregisterControlID( IDC_BT_DEFAULT );
//
CFormView::OnDestroy();
}
// ----------------------------------------------------------------------------
// Description :
// ----------------------------------------------------------------------------
BOOL CDlgZonesActivation::PreTranslateMessage(MSG* pMsg)
{
BOOL bResult = FALSE;
if ( (pMsg->hwnd == GetDlgItem(IDC_LIST_ZONES)->m_hWnd) && // mouse under Zones List
(m_p_oCurrentZA) )
{
if(pMsg->message == WM_LBUTTONDOWN)
bResult = mfn_bOnLButtonDownLBZones ( pMsg ) ;
else if(pMsg->message == WM_KEYDOWN)
bResult = mfn_bOnKeyDownLBZones( pMsg );
else
bResult = CFormView::PreTranslateMessage(pMsg);
}
if ( (pMsg->hwnd == GetDlgItem(IDC_LIST_ZA)->m_hWnd) ) // mouse under ZA List
{
if(pMsg->message == WM_RBUTTONDOWN)
bResult = mfn_bOnRButtonDownLBZA ( pMsg ) ;
else
bResult = CFormView::PreTranslateMessage(pMsg);
}
else
bResult = CFormView::PreTranslateMessage(pMsg);
return bResult;
}
// -----------------------------------------------------------------------------
// Description : intercept the popup menu entry
// ---------------------------------------------------------------------------*/
BOOL CDlgZonesActivation::OnCommand(WPARAM wParam, LPARAM lParam)
{
switch(LOWORD(wParam))
{
case C_uiPMAdd: OnBtAdd(); break;
case C_uiPMCopy: OnBtCopy(); break;
case C_uiPMDel: OnBtDelete(); break;
case C_uiPMRename: OnBtRename(); break;
case C_uiPMDefault: OnBtDefault(); break;
default :
return CFormView::OnCommand(wParam, lParam);
}
return TRUE;
}
// ----------------------------------------------------------------------------
// Description : handle function for message WM_DRAWITEM
// ----------------------------------------------------------------------------
void CDlgZonesActivation::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDIS)
{
if ( (nIDCtl == IDC_LIST_ZONES) &&
(M_LBZonesList()->IsWindowEnabled() ) &&
(lpDIS->itemID != LB_ERR) )
{
OnDrawZonesListItem( lpDIS );
}
else if ( (nIDCtl == IDC_LIST_ZA) &&
(M_LBZA()->IsWindowEnabled() ) &&
(lpDIS->itemID != LB_ERR) )
{
OnDrawZAListItem( lpDIS );
}
else
CFormView::OnDrawItem(nIDCtl, lpDIS);
}
// ----------------------------------------------------------------------------
// Description :handle function for message WM_INITDIALOG
// ----------------------------------------------------------------------------
void CDlgZonesActivation::OnShowWindow(BOOL bShow, UINT nStatus)
{
CFormView::OnShowWindow(bShow, nStatus);
/*
if(bShow && m_bFirstShow)
{
mfn_vSetCurrentNamesList( NULL );
}
m_bFirstShow = FALSE;
*/
}
// ----------------------------------------------------------------------------
// Description : handle function for message WM_SIZE
// ----------------------------------------------------------------------------
void CDlgZonesActivation::OnSize(UINT nType, int cx, int cy)
{
//if( cx < 300 ) cx = 300;
//if( cy < 170 ) cy = 170;
CFormView::OnSize(nType, cx, cy);
if( M_LBZA() )
{
CRect oRectDlg, oRectLBZA, oRectLBZn, oRectSTZn;
CSize oSize;
// get current pos
M_GetClientRect( this, &oRectDlg );
M_GetClientRectId( IDC_LIST_ZA, &oRectLBZA );
M_GetClientRectId( IDC_LIST_ZONES, &oRectLBZn );
M_GetClientRectId( IDC_ST_ZONES, &oRectSTZn );
// minimum size
oSize = oRectDlg . Size();
if( cx < 350 ) oRectDlg . right = abs( oRectDlg . left ) + 350;
if( cy < 170 ) oRectDlg . bottom = abs( oRectDlg . top ) + 170;
// place LBs
oSize . cx = (oRectDlg . Width() - (C_iBorderSize<<2)) >> 1;
oRectLBZA . left = oRectDlg . left + C_iBorderSize;
oRectLBZA . right = oRectLBZA . left + oSize . cx;
oRectLBZn . right = oRectDlg . right - C_iBorderSize;
oRectLBZn . left = oRectLBZn . right - oSize . cx;
oRectLBZA . bottom = oRectLBZn . bottom = oRectDlg . bottom - C_iBorderSize;
// place Static
oSize = oRectSTZn . Size();
oRectSTZn . left = oRectLBZn . left;
oRectSTZn . right = oRectSTZn . left + oSize . cx;
// get current pos
//M_SetClientRect( this, &oRectDlg );
M_SetClientRectId( IDC_LIST_ZA, &oRectLBZA );
M_SetClientRectId( IDC_LIST_ZONES, &oRectLBZn );
M_SetClientRectId( IDC_ST_ZONES, &oRectSTZn );
}
}
// ----------------------------------------------------------------------------
// Description : handle function for message CBN_SELCHANGE on CB ZAList
// ----------------------------------------------------------------------------
void CDlgZonesActivation::OnSelchangeZAList()
{
if( !mfn_bVerifyNamesListCoherence( TRUE ) )
return;
//
CListBox *pLB = M_LBZA();
int iIndex = pLB -> GetCurSel();
CPA_ZonesActivating *p_oZA = NULL;
if( iIndex != LB_ERR )
p_oZA = (CPA_ZonesActivating*) pLB -> GetItemData( iIndex );
Family_StateChange *p_oZAChange = new Family_StateChange( m_p_oDLL, C_eZA, p_oZA, m_p_oCurrentZA );
M_MakeDo( p_oZAChange );
mfn_vUpdateButtons();
}
// ----------------------------------------------------------------------------
// Description : handle function for message LBN_DBLCLK on ListBox ZA
// ----------------------------------------------------------------------------
void CDlgZonesActivation::OnDblclkListZa()
{
if( m_p_oDlgZAList && m_p_oCurrentZA )
m_p_oDlgZAList -> mfn_vSetZA( m_p_oCurrentZA, TRUE );
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// Owner handle msg functions
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// ----------------------------------------------------------------------------
// Description : handle function for message WM_DRAWITEM on List box
// ----------------------------------------------------------------------------
void CDlgZonesActivation::OnDrawZonesListItem( LPDRAWITEMSTRUCT lpDIS )
{
CDC *pDC = CDC::FromHandle( lpDIS->hDC );
char szText[100];
CListBox *pLB = M_LBZonesList();
BOOL bSelected = (lpDIS->itemState & ODS_SELECTED );
BOOL bChecked = (pLB->GetItemData( lpDIS->itemID ) ? TRUE : FALSE);
CFont *xFntPrev;
pDC->FillSolidRect( &lpDIS->rcItem, GetSysColor( COLOR_WINDOW ));
if ( m_p_oCurrentZA )
{
if (bChecked)
pDC->BitBlt( lpDIS->rcItem.left + 2, lpDIS->rcItem.top + 1, 12, 12, &m_oCrossDC, 0, 0, SRCAND );
}
else
xFntPrev = pDC->SelectObject( &m_oItalicFont );
pDC->SetBkMode( TRANSPARENT);
pDC->SetTextColor( GetSysColor( COLOR_WINDOWTEXT ) );
pLB -> GetText(lpDIS->itemID, szText ) ;
lpDIS->rcItem.left += 16;
pDC->DrawText( szText, strlen(szText), &lpDIS->rcItem, DT_SINGLELINE | DT_LEFT | DT_VCENTER );
lpDIS->rcItem.left -= 1;
if (bSelected)
pDC->InvertRect( &lpDIS->rcItem );
// restore font
if ( !m_p_oCurrentZA )
pDC->SelectObject( xFntPrev );
}
// ----------------------------------------------------------------------------
// Description : handle function for message WM_DRAWITEM on List box
// ----------------------------------------------------------------------------
void CDlgZonesActivation::OnDrawZAListItem( LPDRAWITEMSTRUCT lpDIS )
{
CDC *pDC = CDC::FromHandle( lpDIS->hDC );
CListBox *pLB = M_LBZA();
BOOL bSelected = (lpDIS->itemState & ODS_SELECTED );
CPA_ZonesActivating *p_oZA = (CPA_ZonesActivating*) pLB->GetItemData( lpDIS->itemID );
CPA_BaseObject *p_oDefaultZA = ( m_p_oCurrentNamesList ? m_p_oCurrentNamesList -> m_fnp_oGetDefaultZA() : NULL );
CFont *xFntPrev;
char szText[100];
pDC->FillSolidRect( &lpDIS->rcItem, GetSysColor( COLOR_WINDOW ));
if ( p_oZA == p_oDefaultZA )
xFntPrev = pDC->SelectObject( &m_oBoldFont );
pDC->SetBkMode( TRANSPARENT);
pDC->SetTextColor( GetSysColor( COLOR_WINDOWTEXT ) );
pLB -> GetText(lpDIS->itemID, szText ) ;
pDC->DrawText( szText, strlen(szText), &lpDIS->rcItem, DT_SINGLELINE | DT_LEFT | DT_VCENTER );
if (bSelected)
pDC->InvertRect( &lpDIS->rcItem );
// restore font
if ( p_oZA == p_oDefaultZA )
pDC->SelectObject( xFntPrev );
}
// ----------------------------------------------------------------------------
// Description : handle function for message WM_LBUTTONDOWN on ListBox Zones
// ----------------------------------------------------------------------------
BOOL CDlgZonesActivation::mfn_bOnLButtonDownLBZones(MSG *pMsg)
{
if( !mfn_bVerifyNamesListCoherence( TRUE ) )
return CFormView::PreTranslateMessage(pMsg);
//
CListBox *pLB = M_LBZonesList();
POINT xPos;
CRect oRect;
BOOL bOutside;
int iIndex;
BOOL bResult = TRUE;
xPos.x = LOWORD(pMsg->lParam);
xPos.y = HIWORD(pMsg->lParam);
iIndex = pLB -> ItemFromPoint ( xPos, bOutside ) ;
pLB -> GetItemRect ( iIndex , &oRect ) ;
if( (oRect . PtInRect ( xPos ) ) && ( xPos.x < 16 ) )
{
BOOL bChecked = (pLB->GetItemData( iIndex ) ? TRUE : FALSE);
if( m_p_oCurrentZA )
{
ZA_Modify *p_oZAModif = new ZA_Modify( m_p_oDLL, m_p_oCurrentZA, iIndex, !bChecked );
M_MakeDo( p_oZAModif ) ;
bResult = TRUE;
}
else
bResult = CFormView::PreTranslateMessage(pMsg);
}
else
bResult = CFormView::PreTranslateMessage(pMsg);
pLB -> Invalidate();
return bResult;
}
// ----------------------------------------------------------------------------
// Description :
// ----------------------------------------------------------------------------
BOOL CDlgZonesActivation::mfn_bOnKeyDownLBZones(MSG *pMsg)
{
if( !mfn_bVerifyNamesListCoherence( TRUE ) )
return CFormView::PreTranslateMessage(pMsg);
//
int nVirtKey = (int) pMsg -> wParam;
CListBox *pLB = M_LBZonesList();
int iIndex = pLB -> GetCurSel();
BOOL bResult = TRUE;
if( ( nVirtKey == VK_SPACE ) && ( iIndex != LB_ERR ) && m_p_oCurrentZA )
{
BOOL bChecked = ( pLB->GetItemData( iIndex ) ? TRUE : FALSE );
ZA_Modify *p_oZAModif = new ZA_Modify( m_p_oDLL, m_p_oCurrentZA, iIndex, !bChecked );
M_MakeDo( p_oZAModif ) ;
bResult = TRUE;
}
else
bResult = CFormView::PreTranslateMessage(pMsg);
return bResult;
}
// ----------------------------------------------------------------------------
// Description : handle function for message WM_RBUTTONDOWN on ListBox ZA
// ----------------------------------------------------------------------------
BOOL CDlgZonesActivation::mfn_bOnRButtonDownLBZA(MSG *pMsg)
{
if( !mfn_bVerifyNamesListCoherence( TRUE ) )
return CFormView::PreTranslateMessage(pMsg);
//
// create and display the context popmenu
CMenu oPopMenu;
POINT xPos;
xPos.x = LOWORD(pMsg->lParam);
xPos.y = HIWORD(pMsg->lParam);
// create
oPopMenu . CreatePopupMenu () ;
// fill
oPopMenu . AppendMenu( MF_STRING + ( M_bEnabled( IDC_BT_NEW ) ? MF_ENABLED : MF_GRAYED ), C_uiPMAdd, "New");
oPopMenu . AppendMenu( MF_STRING + ( M_bEnabled( IDC_BT_COPY ) ? MF_ENABLED : MF_GRAYED ), C_uiPMCopy, "Copy");
oPopMenu . AppendMenu( MF_STRING + ( M_bEnabled( IDC_BT_RENAME ) ? MF_ENABLED : MF_GRAYED ), C_uiPMRename, "Rename");
oPopMenu . AppendMenu( MF_STRING + ( M_bEnabled( IDC_BT_DELETE ) ? MF_ENABLED : MF_GRAYED ), C_uiPMDel, "Delete");
oPopMenu . AppendMenu( MF_SEPARATOR );
oPopMenu . AppendMenu( MF_STRING + ( M_bEnabled( IDC_BT_DEFAULT ) ? MF_ENABLED : MF_GRAYED ), C_uiPMDefault, "Set As Default ZA");
// display
M_LBZA() -> ClientToScreen(&xPos);
// ALX
TUT_M_vGetTutDll ();
TUT_M_vRegisterMenu (this -> m_hWnd , oPopMenu . m_hMenu , xPos . x , xPos . y);
// End ALX
oPopMenu . TrackPopupMenu ( TPM_LEFTALIGN|TPM_RIGHTBUTTON, xPos.x, xPos.y, this);
oPopMenu . DestroyMenu ();
return CFormView::PreTranslateMessage(pMsg);
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// Owner methods
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// ----------------------------------------------------------------------------
// Description : add a new ZA
// ----------------------------------------------------------------------------
void CDlgZonesActivation::OnBtAdd()
{
if( !mfn_bVerifyNamesListCoherence( TRUE ) )
return;
//
HINSTANCE hOldInst = AfxGetResourceHandle();
AfxSetResourceHandle( m_p_oDLL -> GetDLLIdentity() -> hModule );
CDlgInputText *p_oDlgInput = new CDlgInputText();
CRect oRect;
M_LBZA()->GetWindowRect(&oRect);
CPoint oPoint(oRect.left, oRect.top);
p_oDlgInput->SetTitle( "Create new activation" );
p_oDlgInput->SetMessage("Activation Name :");
p_oDlgInput->SetPos(&oPoint);
p_oDlgInput->SetDefaultValue( C_szZATypeName );
p_oDlgInput->SetSelect( TRUE );
if(p_oDlgInput->DoModal() == IDOK)
{
ZA_New *p_oZANew = new ZA_New( m_p_oDLL, m_p_oCurrentNamesList, p_oDlgInput->GetInputText() );
M_MakeDo( p_oZANew ) ;
}
delete p_oDlgInput;
AfxSetResourceHandle( hOldInst );
}
// ----------------------------------------------------------------------------
// Description : rename a ZA
// ----------------------------------------------------------------------------
void CDlgZonesActivation::OnBtRename()
{
if( !mfn_bVerifyNamesListCoherence( TRUE ) )
return;
//
CListBox *pLB = M_LBZA();
int iIndex = pLB -> GetCurSel();
if( iIndex != LB_ERR )
{
CPA_ZonesActivating *p_oZA = (CPA_ZonesActivating*)pLB -> GetItemData( iIndex );
HINSTANCE hOldInst = AfxGetResourceHandle();
AfxSetResourceHandle( m_p_oDLL -> GetDLLIdentity() -> hModule );
CDlgInputText *p_oDlgInput = new CDlgInputText();
CRect oRect;
char szTitle[200];
char *szZAName = p_oZA->fn_p_szGetName();
pLB->GetWindowRect(&oRect);
CPoint oPoint(oRect.left, oRect.top);
sprintf(szTitle,"Rename activation \"%s\"",szZAName );
p_oDlgInput->SetTitle(szTitle);
p_oDlgInput->SetMessage("New Name :");
p_oDlgInput->SetPos(&oPoint);
p_oDlgInput->SetDefaultValue( szZAName );
p_oDlgInput->SetSelect( TRUE );
if(p_oDlgInput->DoModal() == IDOK)
{
ZA_Rename *p_oZARename = new ZA_Rename(m_p_oDLL, p_oZA, p_oDlgInput->GetInputText());
M_MakeDo( p_oZARename ) ;
}
delete p_oDlgInput;
AfxSetResourceHandle( hOldInst );
}
}
// ----------------------------------------------------------------------------
// Description : copy current ZA
// ----------------------------------------------------------------------------
void CDlgZonesActivation::OnBtCopy()
{
if( !mfn_bVerifyNamesListCoherence( TRUE ) )
return;
//
CListBox *pLB = M_LBZA();
int iIndex = pLB -> GetCurSel();
if( iIndex != LB_ERR )
{
ZA_Copy *p_oZACopy = new ZA_Copy( m_p_oDLL, (CPA_ZonesActivating*)pLB -> GetItemData( iIndex ) );
M_MakeDo( p_oZACopy ) ;
}
}
// ----------------------------------------------------------------------------
// Description : delete current ZA
// ----------------------------------------------------------------------------
void CDlgZonesActivation::OnBtDelete()
{
if( !mfn_bVerifyNamesListCoherence( TRUE ) )
return;
//
CListBox *pLB = M_LBZA();
int iIndex = pLB -> GetCurSel();
if( iIndex != LB_ERR )
{
ZA_Delete *p_oZADelete = new ZA_Delete(m_p_oDLL, (CPA_ZonesActivating*)pLB -> GetItemData( iIndex ));
M_MakeDo( p_oZADelete ) ;
}
}
// ----------------------------------------------------------------------------
// Description : set current ZA as default ZA of current NameList
// ----------------------------------------------------------------------------
void CDlgZonesActivation::OnBtDefault()
{
if( !mfn_bVerifyNamesListCoherence( TRUE ) )
return;
//
CListBox *pLB = M_LBZA();
int iIndex = pLB -> GetCurSel();
if( iIndex != LB_ERR )
{
ZA_Default *p_oZADefault = new ZA_Default(m_p_oDLL, (CPA_ZonesActivating*)pLB -> GetItemData( iIndex ));
M_MakeDo( p_oZADefault ) ;
}
}
// ----------------------------------------------------------------------------
// Description :
// ----------------------------------------------------------------------------
void CDlgZonesActivation::mfn_vSetCurrentNamesList(CPA_tdoNameList *_p_oNamesList)
{
CListBox *pLB = M_LBZA();
int iIndex = -1;
m_p_oCurrentNamesList = _p_oNamesList;
// fill ListBox
mfn_vFillLBZA( m_p_oCurrentNamesList );
mfn_vFillLBZones( m_p_oCurrentNamesList );
// select first ZA
m_p_oCurrentZA = NULL;
if( pLB -> GetCount() > 0 )
{
iIndex = 0;
m_p_oCurrentZA = (CPA_ZonesActivating*)pLB -> GetItemData( iIndex );
}
// update according to selection
/*MM
pLB -> SetCurSel( iIndex );
mfn_vUpdateButtons();
M_LBZA() -> Invalidate();
M_LBZonesList() -> Invalidate();
MM*/
m_p_oDLL -> mfn_vSetCurrentZA( m_p_oCurrentZA );
}
// ----------------------------------------------------------------------------
// Description :
// ----------------------------------------------------------------------------
void CDlgZonesActivation::mfn_vUpdateDisplay( CPA_ZonesActivating *_p_oZA, int _iIndex )
{
CListBox *pLBZn = M_LBZonesList();
CListBox *pLBZA = M_LBZA();
if( _p_oZA )
{
CPA_tdoNameList *p_oNamesList = (CPA_tdoNameList*) _p_oZA -> GetOwner();
if( p_oNamesList != m_p_oCurrentNamesList )
mfn_vSetCurrentNamesList( p_oNamesList );
else
mfn_vFillLBZA( m_p_oCurrentNamesList );
mfn_iSelectStringExact( pLBZA, _p_oZA -> GetName() );
mfn_vUpdateFlags( _p_oZA );
m_p_oCurrentZA = _p_oZA;
//
if( ( _iIndex >= 0 ) && ( _iIndex < pLBZn -> GetCount() ) )
pLBZn -> SetCurSel( _iIndex );
else
pLBZn -> SetCurSel( -1 );
}
else
{
pLBZn -> SetCurSel( -1 );
mfn_vFillLBZones( m_p_oCurrentNamesList );
m_p_oCurrentZA = _p_oZA;
pLBZA -> SetCurSel( -1 );
}
/*
if( m_p_oDlgZAList )
m_p_oDlgZAList -> mfn_vSetZA( m_p_oCurrentZA, FALSE );
*/
mfn_vUpdateButtons();
pLBZn -> Invalidate();
pLBZA -> Invalidate();
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// ----------------------------------------------------------------------------
// Description : fill CB ZAList
// ----------------------------------------------------------------------------
void CDlgZonesActivation::mfn_vFillLBZA( CPA_tdoNameList *_p_oNamesList )
{
CListBox *pLB = M_LBZA();
pLB -> ResetContent();
if ( _p_oNamesList )
{
// get list
CPA_List<CPA_BaseObject> oList;
m_p_oDLL -> fn_lFindObjects (&oList, "", C_szZATypeName, (CPA_BaseObject*)_p_oNamesList );
// fill comboBox
POSITION xPos = oList . GetHeadPosition();
while ( xPos )
{
CPA_ZonesActivating *p_oZA = (CPA_ZonesActivating*) oList . GetNext( xPos );
int iIndex = pLB -> AddString( p_oZA -> GetName() );
if( iIndex != LB_ERR )
pLB -> SetItemData( iIndex, (DWORD) p_oZA );
}
}
}
// ----------------------------------------------------------------------------
// Description : fill LB Zones ( names )
// ----------------------------------------------------------------------------
void CDlgZonesActivation::mfn_vFillLBZones( CPA_tdoNameList *_p_oNamesList )
{
CListBox *pLB = M_LBZonesList();
pLB -> ResetContent();
if ( _p_oNamesList )
{
POSITION stPos = _p_oNamesList -> GetHeadPosition();
while ( stPos )
{
tdoObjectName *p_oName = _p_oNamesList -> GetNext( stPos );
int iIndex = pLB -> AddString( p_oName -> GetName() );
if( iIndex != LB_ERR )
pLB -> SetItemData( iIndex, (DWORD) FALSE );
}
}
pLB -> Invalidate();
}
// ----------------------------------------------------------------------------
// Description : update flags with ZAList
// ----------------------------------------------------------------------------
void CDlgZonesActivation::mfn_vUpdateFlags( CPA_ZonesActivating *_p_oZA )
{
CListBox *pLB = M_LBZonesList();
int iMaxIndex = pLB -> GetCount();
// reset flags
for ( int iIdx = 0 ; iIdx < iMaxIndex ; iIdx++ )
pLB -> SetItemData( iIdx, (DWORD) FALSE );
// update flags
if ( _p_oZA )
{
POSITION stPos = _p_oZA -> m_oListOfZDxNameIdx . GetHeadPosition();
while ( stPos )
{
CPA_ZdxIndex *p_oZdxIndex = _p_oZA -> m_oListOfZDxNameIdx . GetNext( stPos ) ;
int iIndex = (int)p_oZdxIndex -> mfn_usGetIndex();
if( ( iIndex >= 0 ) && ( iIndex < iMaxIndex ) )
pLB -> SetItemData( iIndex, (DWORD) TRUE );
}
}
mfn_vUpdateButtons();
pLB -> Invalidate();
}
// ----------------------------------------------------------------------------
// Description :
// ----------------------------------------------------------------------------
void CDlgZonesActivation::mfn_vUpdateButtons(void)
{
int iIndex = M_LBZA() -> GetCurSel();
M_Enable(IDC_BT_NEW, (BOOL)m_p_oCurrentNamesList );
M_Enable(IDC_BT_COPY, (iIndex != LB_ERR) );
M_Enable(IDC_BT_RENAME, (iIndex != LB_ERR) );
M_Enable(IDC_BT_DELETE, (iIndex != LB_ERR) );
if( ( iIndex != LB_ERR ) && (BOOL)m_p_oCurrentNamesList )
{
M_Enable(IDC_BT_DEFAULT, ( ((CPA_BaseObject*)M_LBZA()->GetItemData(iIndex)) != m_p_oCurrentNamesList -> m_fnp_oGetDefaultZA() ) );
}
else
M_Enable(IDC_BT_DEFAULT, FALSE );
}
// ----------------------------------------------------------------------------
// Description :
// ----------------------------------------------------------------------------
int CDlgZonesActivation::mfn_iSelectStringExact(CListBox *_pLB, CString _csEntry)
{
int iIndex = _pLB -> FindStringExact( -1, _csEntry );
if( iIndex != LB_ERR )
_pLB -> SetCurSel( iIndex );
return iIndex;
}
// ----------------------------------------------------------------------------
// Description :
// ----------------------------------------------------------------------------
BOOL CDlgZonesActivation::mfn_bVerifyNamesListCoherence(BOOL _bUpdateDisplay /*=TRUE*/)
{
CListBox *pLB = M_LBZA();
CPA_BaseObject *p_oZAList = m_p_oDLL -> mfn_p_oGetCurrentZAList();
if ( (p_oZAList) && (pLB -> GetCount() > 0) )
{
CPA_BaseObject *p_oZANamesList = ((CPA_BaseObject*) pLB -> GetItemData( 0 ) ) -> GetOwner();
CPA_BaseObject *p_oZAListNamesList = p_oZAList -> GetOwner();
if( p_oZANamesList != p_oZAListNamesList )
{
if( _bUpdateDisplay )
mfn_vSetCurrentNamesList( m_p_oDLL -> mfn_p_oGetCurrentNamesList() );
return FALSE;
}
}
return TRUE;
}