//---------------------------------------------------------------------------- // EgalTech 2013-2014 //---------------------------------------------------------------------------- // File : SelectionDlg.cpp Data : 08.10.14 Versione : 1.5j1 // Contenuto : Implementazione della classe gestione dialogo selezione. // // // // Modifiche : 08.10.14 DS Creazione modulo. // // //---------------------------------------------------------------------------- //--------------------------- Include ---------------------------------------- #include "stdafx.h" #include "TestEGrUtils.h" #include "SelectDlg.h" #include "resource.h" #include "/EgtDev/Include/EgkGdbConst.h" #include "/EgtDev/Include/EgkGeomDB.h" #include "/EgtDev/Include/EGrScene.h" #include "/EgtDev/Include/EgnStringUtils.h" #include "/EgtDev/Include/EgtStringConverter.h" #include "/EgtDev/Include/EgtNumCollection.h" using namespace std ; //---------------------------------------------------------------------------- #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif //---------------------------------------------------------------------------- CSelectDlg::CSelectDlg( IEGrScene* pScene) : CDialog( IDD_SELECT) { m_pScene = pScene ; m_nCurrId = GDB_ID_NULL ; } //---------------------------------------------------------------------------- BOOL CSelectDlg::OnInitDialog( void) { CDialog::OnInitDialog() ; if ( m_pScene == nullptr) { EndDialog( IDCANCEL) ; return true ; } IGeomDB* pGDB = m_pScene->GetGeomDB() ; if ( pGDB == nullptr) { EndDialog( IDCANCEL) ; return true ; } CListBox* pLB = (CListBox*) GetDlgItem( IDC_LIST) ; if ( pLB == nullptr) { EndDialog( IDCANCEL) ; return true ; } // inserisco gli oggetti selezionati INTVECTOR nIds ; string sOut ; m_pScene->GetSelectedObjs( nIds) ; for ( size_t i = 0 ; i < nIds.size() ; ++ i) { IGeoObj* pGeo = pGDB->GetGeoObj( nIds[i]) ; if ( pGeo == nullptr) continue ; bool bSel = pGDB->IsSelectedObj( nIds[i]) ; sOut = pGeo->GetTitle() + ( bSel ? "*" : "") + " (" + ToString( nIds[i]) + ")" ; int nPos = pLB->AddString( stringtoW( sOut)) ; if ( nPos != LB_ERR) pLB->SetItemData( nPos, nIds[i]) ; } // imposto la selezione sul primo oggetto pLB->SetCurSel( 0) ; OnLBSelChange() ; return TRUE ; } //---------------------------------------------------------------------------- void CSelectDlg::OnOK( void) { // imposto chiusura del dialogo EndDialog( IDOK) ; // smarco l'oggetto corrente IGeomDB* pGDB = m_pScene->GetGeomDB() ; if ( pGDB != nullptr) { pGDB->ResetMark( m_nCurrId) ; m_pScene->Draw() ; } } //---------------------------------------------------------------------------- void CSelectDlg::OnCancel( void) { // imposto chiusura del dialogo EndDialog( IDCANCEL) ; // smarco l'oggetto corrente IGeomDB* pGDB = m_pScene->GetGeomDB() ; if ( pGDB != nullptr) { pGDB->ResetMark( m_nCurrId) ; m_pScene->Draw() ; } // reset dell'oggetto corrente m_nCurrId = GDB_ID_NULL ; } //---------------------------------------------------------------------------- BEGIN_MESSAGE_MAP( CSelectDlg, CDialog) ON_LBN_SELCHANGE( IDC_LIST, OnLBSelChange) ON_LBN_DBLCLK( IDC_LIST, OnLBDblClk) END_MESSAGE_MAP() //---------------------------------------------------------------------------- void CSelectDlg::OnLBSelChange( void) { IGeomDB* pGDB = m_pScene->GetGeomDB() ; if ( pGDB == nullptr) return ; CListBox* pLB = (CListBox*) GetDlgItem( IDC_LIST) ; if ( pLB == nullptr) return ; // smarco l'oggetto corrente pGDB->ResetMark( m_nCurrId) ; // recupero l'Id del nuovo oggetto selezionato int nSel = pLB->GetCurSel() ; if ( nSel == LB_ERR) { m_nCurrId = GDB_ID_NULL ; m_pScene->Draw() ; return ; } m_nCurrId = int( pLB->GetItemData( nSel)) ; // evidenzio il nuovo oggetto selezionato pGDB->SetMark( m_nCurrId) ; m_pScene->Draw() ; } //---------------------------------------------------------------------------- void CSelectDlg::OnLBDblClk( void) { // imposto chiusura del dialogo EndDialog( IDOK) ; IGeomDB* pGDB = m_pScene->GetGeomDB() ; if ( pGDB == nullptr) { m_nCurrId = GDB_ID_NULL ; return ; } CListBox* pLB = (CListBox*) GetDlgItem( IDC_LIST) ; if ( pLB == nullptr) { m_nCurrId = GDB_ID_NULL ; return ; } // smarco l'oggetto corrente pGDB->ResetMark( m_nCurrId) ; m_pScene->Draw() ; // recupero l'Id del nuovo oggetto selezionato int nSel = pLB->GetCurSel() ; if ( nSel == LB_ERR) m_nCurrId = GDB_ID_NULL ; else m_nCurrId = int( pLB->GetItemData( nSel)) ; }