// 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 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; }