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

439 lines
15 KiB
C++

// DlgZAL.cpp : implementation file
//
#include "stdafx.h"
#include "ACP_Base.h"
#include "ITF.h"
#include "TAC.h"
#include "TFa.h"
#include "OAc.h"
#include "ACInterf.hpp"
#include "DlgZAL.hpp"
#include "DlgInput.hpp"
#include "ZAModif.hpp"
#include "FAModif.hpp"
#include "X:\Cpa\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_LBZAList() ( (CListBox*) GetDlgItem( IDC_LB_ZALIST ) )
#define M_Enable( nID, bEnable ) GetDlgItem( nID ) -> EnableWindow( bEnable )
#define M_bEnabled( nID ) GetDlgItem( nID ) -> IsWindowEnabled()
#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 )
///////////////////////////////////////////////////////////////////////////////
// CONSTANTS
///////////////////////////////////////////////////////////////////////////////
#define C_uiPMFirst 2000
#define C_uiPMNew (C_uiPMFirst+1)
#define C_uiPMCopy (C_uiPMFirst+2)
#define C_uiPMRename (C_uiPMFirst+3)
#define C_uiPMDelete (C_uiPMFirst+4)
#define C_iBorderSize 4
/////////////////////////////////////////////////////////////////////////////
// CDlgZAL
IMPLEMENT_DYNCREATE(CDlgZAL, CFormView)
CDlgZAL::CDlgZAL()
: CFormView(CDlgZAL::IDD)
{
//{{AFX_DATA_INIT(CDlgZAL)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_p_oDLL = NULL;
m_p_oCurrentNamesList = NULL;
m_p_oCurrentZAList = NULL;
m_bFirstShow = TRUE;
}
CDlgZAL::~CDlgZAL()
{
}
void CDlgZAL::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlgZAL)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BOOL CDlgZAL::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_LB_ZALIST, "TAC_ZAM_ZALIST_LIST", TUT_e_ListBox );
TUT_M_vRegisterControlID( IDC_BT_NEW, "TAC_ZAM_ZALIST_BTNEW", TUT_e_Button );
TUT_M_vRegisterControlID( IDC_BT_RENAME, "TAC_ZAM_ZALIST_BTRENAME", TUT_e_Button );
TUT_M_vRegisterControlID( IDC_BT_COPY, "TAC_ZAM_ZALIST_BTCOPY", TUT_e_Button );
TUT_M_vRegisterControlID( IDC_BT_DELETE, "TAC_ZAM_ZALIST_BTDELETE", TUT_e_Button );
//
return bResult;
}
BEGIN_MESSAGE_MAP(CDlgZAL, CFormView)
//{{AFX_MSG_MAP(CDlgZAL)
ON_WM_DESTROY()
ON_WM_SIZE()
ON_BN_CLICKED(IDC_BT_COPY, OnBtCopy)
ON_BN_CLICKED(IDC_BT_DELETE, OnBtDelete)
ON_BN_CLICKED(IDC_BT_NEW, OnBtNew)
ON_BN_CLICKED(IDC_BT_RENAME, OnBtRename)
ON_LBN_SELCHANGE(IDC_LB_ZALIST, OnSelchangeLbZalist)
ON_WM_SHOWWINDOW()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlgZAL diagnostics
#ifdef _DEBUG
void CDlgZAL::AssertValid() const
{
CFormView::AssertValid();
}
void CDlgZAL::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CDlgZAL message handlers
void CDlgZAL::OnDestroy()
{
// register controls
TUT_M_vGetTutDll();
TUT_M_vUnregisterControlID( IDC_LB_ZALIST );
TUT_M_vUnregisterControlID( IDC_BT_NEW );
TUT_M_vUnregisterControlID( IDC_BT_RENAME );
TUT_M_vUnregisterControlID( IDC_BT_COPY );
TUT_M_vUnregisterControlID( IDC_BT_DELETE );
//
CFormView::OnDestroy();
}
// ----------------------------------------------------------------------------
// Description :
// ----------------------------------------------------------------------------
void CDlgZAL::OnShowWindow(BOOL bShow, UINT nStatus)
{
CFormView::OnShowWindow(bShow, nStatus);
/*
if( m_bFirstShow && bShow )
{
mfn_vSetCurrentNameList( NULL );
}
m_bFirstShow = FALSE;
*/
}
// ----------------------------------------------------------------------------
// Description :
// ----------------------------------------------------------------------------
void CDlgZAL::OnSize(UINT nType, int cx, int cy)
{
if( M_LBZAList() )
{
CRect oRectDlg, oRectBTNew, oRectBTCopy, oRectBTRename, oRectBTDelete, oRectLB;
int iWidth;
// Get Pos
M_GetClientRect( this, &oRectDlg );
M_GetClientRectId( IDC_BT_NEW, &oRectBTNew );
M_GetClientRectId( IDC_BT_COPY, &oRectBTCopy );
M_GetClientRectId( IDC_BT_RENAME, &oRectBTRename );
M_GetClientRectId( IDC_BT_DELETE, &oRectBTDelete );
M_GetClientRectId( IDC_LB_ZALIST, &oRectLB );
// BTs
oRectBTNew . left = oRectBTRename . left = oRectDlg . left + C_iBorderSize;
oRectBTCopy . right = oRectBTDelete . right = oRectDlg . right - C_iBorderSize;
iWidth = ((oRectDlg . Width() - (C_iBorderSize << 1) ) >> 1);
oRectBTNew . right = oRectBTRename . right = oRectBTNew . left + iWidth;
oRectBTCopy . left = oRectBTDelete . left = oRectBTCopy . right - iWidth;
// LB
oRectLB . left = oRectDlg . left + C_iBorderSize;
oRectLB . right = oRectDlg . right - C_iBorderSize;
oRectLB . bottom = oRectDlg . bottom - C_iBorderSize;
// Set Pos
M_SetClientRectId( IDC_BT_NEW, &oRectBTNew );
M_SetClientRectId( IDC_BT_COPY, &oRectBTCopy );
M_SetClientRectId( IDC_BT_RENAME, &oRectBTRename );
M_SetClientRectId( IDC_BT_DELETE, &oRectBTDelete );
M_SetClientRectId( IDC_LB_ZALIST, &oRectLB );
}
}
// ----------------------------------------------------------------------------
// Description :
// ----------------------------------------------------------------------------
BOOL CDlgZAL::PreTranslateMessage(MSG* pMsg)
{
if( (pMsg->hwnd == GetDlgItem(IDC_LB_ZALIST)->m_hWnd) && (pMsg->message == WM_RBUTTONDOWN) )
{
// 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_uiPMNew, "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_uiPMDelete, "Delete");
// display
M_LBZAList() -> 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 CFormView::PreTranslateMessage(pMsg);
}
// ----------------------------------------------------------------------------
// Description :
// ----------------------------------------------------------------------------
BOOL CDlgZAL::OnCommand(WPARAM wParam, LPARAM lParam)
{
switch(LOWORD(wParam))
{
case C_uiPMNew: OnBtNew(); break;
case C_uiPMRename: OnBtRename(); break;
case C_uiPMCopy: OnBtCopy(); break;
case C_uiPMDelete: OnBtDelete(); break;
default :
return CFormView::OnCommand(wParam, lParam);
}
return TRUE;
}
// ----------------------------------------------------------------------------
// Description :
// ----------------------------------------------------------------------------
void CDlgZAL::OnBtCopy()
{
if( m_p_oCurrentZAList )
{
ZAList_Copy *p_oZAListCopy = new ZAList_Copy( m_p_oDLL, m_p_oCurrentZAList );
M_MakeDo( p_oZAListCopy );
}
}
// ----------------------------------------------------------------------------
// Description :
// ----------------------------------------------------------------------------
void CDlgZAL::OnBtDelete()
{
if( m_p_oCurrentZAList )
{
ZAList_Delete *p_oZAListDelete = new ZAList_Delete( m_p_oDLL, m_p_oCurrentZAList );
M_MakeDo( p_oZAListDelete );
}
}
// ----------------------------------------------------------------------------
// Description :
// ----------------------------------------------------------------------------
void CDlgZAL::OnBtNew()
{
HINSTANCE hOldInst = AfxGetResourceHandle();
AfxSetResourceHandle( m_p_oDLL -> GetDLLIdentity() -> hModule );
CDlgInputText *p_oDlgInput = new CDlgInputText();
CRect oRect;
M_LBZAList() -> GetWindowRect( &oRect );
CPoint oPoint( oRect.left, oRect.top );
p_oDlgInput -> SetTitle( "Create new list" );
p_oDlgInput -> SetMessage( "New List Name :" );
p_oDlgInput -> SetPos( &oPoint );
p_oDlgInput -> SetDefaultValue( C_szZAListTypeName );
p_oDlgInput -> SetSelect( TRUE );
if( p_oDlgInput -> DoModal() == IDOK )
{
ZAList_New *p_oNewZAList = new ZAList_New( m_p_oDLL, m_p_oCurrentNamesList, p_oDlgInput -> GetInputText() );
M_MakeDo( p_oNewZAList ) ;
}
delete p_oDlgInput;
AfxSetResourceHandle( hOldInst );
}
// ----------------------------------------------------------------------------
// Description :
// ----------------------------------------------------------------------------
void CDlgZAL::OnBtRename()
{
if( m_p_oCurrentZAList )
{
HINSTANCE hOldInst = AfxGetResourceHandle();
AfxSetResourceHandle( m_p_oDLL -> GetDLLIdentity() -> hModule );
CDlgInputText *p_oDlgInput = new CDlgInputText();
CRect oRect;
char szTitle[200];
char *szZAListName = m_p_oCurrentZAList -> fn_p_szGetName();
M_LBZAList() -> GetWindowRect( &oRect );
CPoint oPoint( oRect.left, oRect.top );
sprintf( szTitle, "Rename List \"%s\"", szZAListName );
p_oDlgInput -> SetTitle( szTitle );
p_oDlgInput -> SetMessage( "New Name :" );
p_oDlgInput -> SetPos( &oPoint );
p_oDlgInput -> SetDefaultValue( szZAListName );
p_oDlgInput -> SetSelect( TRUE );
if( p_oDlgInput -> DoModal() == IDOK )
{
ZAList_Rename *p_oZAListRename = new ZAList_Rename( m_p_oDLL, m_p_oCurrentZAList, p_oDlgInput->GetInputText() );
M_MakeDo( p_oZAListRename );
}
delete p_oDlgInput;
AfxSetResourceHandle( hOldInst );
}
}
// ----------------------------------------------------------------------------
// Description :
// ----------------------------------------------------------------------------
void CDlgZAL::OnSelchangeLbZalist()
{
CListBox *pLB = M_LBZAList();
int iIndex = pLB -> GetCurSel();
if( iIndex != LB_ERR )
{
Family_StateChange *p_oZAListChange = new Family_StateChange( m_p_oDLL, C_eZAList, (CPA_ZonesActivatingList*) pLB -> GetItemData( iIndex ), m_p_oCurrentZAList );
M_MakeDo( p_oZAListChange );
}
else
m_p_oCurrentZAList = NULL;
mfn_vUpdateButtons();
}
// ----------------------------------------------------------------------------
// Description :
// ----------------------------------------------------------------------------
void CDlgZAL::mfn_vSetCurrentNameList(CPA_tdoNameList * _p_oNameList)
{
CListBox *pLB = M_LBZAList();
m_p_oCurrentNamesList = _p_oNameList;
mfn_vFillLBZAList( m_p_oCurrentNamesList );
// select first item
if( pLB -> GetCount() > 0 )
m_p_oDLL -> mfn_vSetCurrentZAList( (CPA_ZonesActivatingList*) pLB -> GetItemData( 0 ) );
else
m_p_oDLL -> mfn_vSetCurrentZAList( NULL );
/*MM
mfn_vSetCurrentZAList( NULL );
mfn_vUpdateButtons();
MM*/
}
// ----------------------------------------------------------------------------
// Description :
// ----------------------------------------------------------------------------
void CDlgZAL::mfn_vSetCurrentZAList(CPA_ZonesActivatingList * _p_oZAList)
{
if( _p_oZAList )
{
m_p_oCurrentNamesList = (CPA_tdoNameList *) _p_oZAList -> GetOwner();
mfn_vFillLBZAList( m_p_oCurrentNamesList );
mfn_iSelectStringExact( M_LBZAList(), _p_oZAList -> GetName() );
m_p_oCurrentZAList = _p_oZAList;
}
else
{
M_LBZAList() -> SetCurSel( -1 );
m_p_oCurrentZAList = NULL;
}
mfn_vUpdateButtons();
}
// ----------------------------------------------------------------------------
// Description :
// ----------------------------------------------------------------------------
void CDlgZAL::mfn_vFillLBZAList(CPA_tdoNameList * _p_oNameList)
{
CListBox *pLB = M_LBZAList();
pLB -> ResetContent();
if ( _p_oNameList )
{
// get list
CPA_List<CPA_BaseObject> oList;
m_p_oDLL -> fn_lFindObjects (&oList, "", C_szZAListTypeName, (CPA_BaseObject*)_p_oNameList );
// fill comboBox
POSITION xPos = oList . GetHeadPosition();
while ( xPos )
{
CPA_ZonesActivatingList *p_oZAList = (CPA_ZonesActivatingList*) oList . GetNext( xPos );
int iIndex = pLB -> AddString( p_oZAList -> GetName() );
if( iIndex != LB_ERR )
pLB -> SetItemData( iIndex, (DWORD) p_oZAList );
}
oList . RemoveAll();
}
pLB -> SetCurSel( -1 );
m_p_oCurrentZAList = NULL;
mfn_vUpdateButtons();
}
// ----------------------------------------------------------------------------
// Description :
// ----------------------------------------------------------------------------
void CDlgZAL::mfn_vUpdateButtons()
{
M_Enable(IDC_BT_NEW, (m_p_oCurrentNamesList != NULL) );
M_Enable(IDC_BT_COPY, (m_p_oCurrentZAList != NULL) );
M_Enable(IDC_BT_RENAME, (m_p_oCurrentZAList != NULL) );
M_Enable(IDC_BT_DELETE, (m_p_oCurrentZAList != NULL) );
}
// ----------------------------------------------------------------------------
// Description :
// ----------------------------------------------------------------------------
int CDlgZAL::mfn_iSelectStringExact(CListBox * _pLB, CString _csName)
{
int iIndex = _pLB -> FindStringExact( -1, _csName );
if( iIndex != LB_ERR )
_pLB -> SetCurSel( iIndex );
return iIndex;
}