TestEGr 1.5c7 :
- migliorata gestione albero degli oggetti (corrente ora marcato) - con doppio click invio Id oggetto a Edit dei comandi.
This commit is contained in:
+42
-10
@@ -197,9 +197,11 @@ CTestEGrDlg::OnTreeSelChanged( NMHDR* pNMHDR, LRESULT* pResult)
|
||||
return ;
|
||||
// recupero l'Id del nuovo oggetto selezionato
|
||||
HTREEITEM hItemNew = pNMTreeView->itemNew.hItem ;
|
||||
int nIdNew = GDB_ID_NULL ;
|
||||
if ( hItemNew != nullptr)
|
||||
nIdNew = int( m_Tree.GetItemData( hItemNew)) ;
|
||||
if ( hItemNew == nullptr)
|
||||
return ;
|
||||
int nIdNew = int( m_Tree.GetItemData( hItemNew)) ;
|
||||
if ( ! m_pGeomDB->ExistsObj( nIdNew))
|
||||
return ;
|
||||
// ripristino eventuale vecchio oggetto selezionato
|
||||
RevertOldIdOnTree() ;
|
||||
// visualizzo i dati dell'oggetto
|
||||
@@ -211,14 +213,43 @@ CTestEGrDlg::OnTreeSelChanged( NMHDR* pNMHDR, LRESULT* pResult)
|
||||
OutGeoObjData( nIdNew) ;
|
||||
break ;
|
||||
}
|
||||
// permetto in ogni caso la visualizzazione dell'oggetto
|
||||
m_pGeomDB->SetMode( nIdNew, GDB_MD_STD) ;
|
||||
m_pGeomDB->SetStatus( nIdNew, GDB_ST_SEL) ;
|
||||
// permetto in ogni caso la visualizzazione dell'oggetto e lo marco
|
||||
int nOldMode = GDB_MD_STD ;
|
||||
m_pGeomDB->GetMode( nIdNew, nOldMode) ;
|
||||
int nMode = (( nOldMode == GDB_MD_HIDDEN) ? GDB_MD_STD : nOldMode) ;
|
||||
m_pGeomDB->SetMode( nIdNew, nMode) ;
|
||||
int nOldStatus = GDB_ST_ON ;
|
||||
m_pGeomDB->GetStatus( nIdNew, nOldStatus) ;
|
||||
int nStat = (( nOldStatus == GDB_ST_OFF) ? GDB_ST_ON : nOldStatus) ;
|
||||
m_pGeomDB->SetStatus( nIdNew, nStat) ;
|
||||
m_pGeomDB->SetMark( nIdNew) ;
|
||||
m_nOldIdTree = nIdNew ;
|
||||
// aggiorno la visualizzazione
|
||||
m_View.Redraw() ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void
|
||||
CTestEGrDlg::OnTreeDoubleClick( NMHDR* pNMHDR, LRESULT* pResult)
|
||||
{
|
||||
// assegno il risultato
|
||||
*pResult = 0 ;
|
||||
// recupero l'item su cui è stato eseguito il doppio click
|
||||
CPoint cursorPos ;
|
||||
cursorPos.x = GetCurrentMessage()->pt.x ;
|
||||
cursorPos.y = GetCurrentMessage()->pt.y ;
|
||||
m_Tree.ScreenToClient( &cursorPos) ;
|
||||
HTREEITEM hItem = m_Tree.HitTest( cursorPos) ;
|
||||
if ( hItem == nullptr)
|
||||
return ;
|
||||
// recupero l'Id dell'oggetto associato
|
||||
int nId = int( m_Tree.GetItemData( hItem)) ;
|
||||
if ( ! m_pGeomDB->ExistsObj( nId))
|
||||
return ;
|
||||
// scrivo la stringa dell'Id nella posizione corrente dell'edit dei comandi
|
||||
m_Cmd.OutputText( ToString( nId)) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CTestEGrDlg::SelectIdOnTree( int nId, HTREEITEM hParent)
|
||||
@@ -254,16 +285,17 @@ CTestEGrDlg::RevertOldIdOnTree( void)
|
||||
if ( m_pGeomDB == nullptr)
|
||||
return GDB_ID_NULL ;
|
||||
// salvo il vecchio Id
|
||||
int nOLd = m_nOldIdTree ;
|
||||
int nOldId = m_nOldIdTree ;
|
||||
// se non nullo...
|
||||
if ( m_nOldIdTree != GDB_ID_NULL) {
|
||||
// ripristino il modo e lo stato precedente dell'oggetto
|
||||
if ( m_pGeomDB->ExistsObj( m_nOldIdTree)) {
|
||||
// ripristino il modo e lo stato precedente dell'oggetto e lo smarco
|
||||
m_pGeomDB->RevertMode( m_nOldIdTree) ;
|
||||
m_pGeomDB->RevertStatus( m_nOldIdTree) ;
|
||||
m_pGeomDB->ResetMark( m_nOldIdTree) ;
|
||||
// annullo oggetto da ripristinare
|
||||
m_nOldIdTree = GDB_ID_NULL ;
|
||||
}
|
||||
return nOLd ;
|
||||
return nOldId ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user