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:
Dario Sassi
2014-03-23 12:41:29 +00:00
parent 076f9d3057
commit f5dce0dd27
6 changed files with 76 additions and 27 deletions
+42 -10
View File
@@ -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 ;
}
//----------------------------------------------------------------------------