Files
TestEGr/SelectDlg.cpp
T
Dario Sassi 320d5cdf26 TestEgr 1.6e1 :
- aggiornamenti per cambio nome include di base
- aggiustamento su Save.
2015-05-11 21:12:57 +00:00

178 lines
4.9 KiB
C++

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