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 ;
}
//----------------------------------------------------------------------------
BIN
View File
Binary file not shown.
+7
View File
@@ -43,6 +43,13 @@ TestEGrCmd::~TestEGrCmd( void)
{
}
//----------------------------------------------------------------------------
void
TestEGrCmd::OutputText( const string& sText)
{
ReplaceSel( stringtoW( sText)) ;
}
//----------------------------------------------------------------------------
void
TestEGrCmd::OnKeyDown( UINT nChar, UINT nRepCnt, UINT nFlags)
+3
View File
@@ -13,6 +13,8 @@
#pragma once
#include <string>
//----------------------------------------------------------------------------
class TestEGrCmd : public CEdit
{
@@ -20,6 +22,7 @@ class TestEGrCmd : public CEdit
public :
TestEGrCmd( void) ;
~TestEGrCmd( void) ;
void OutputText( const std::string& sText) ;
protected :
afx_msg void OnKeyDown( UINT nChar, UINT nRepCnt, UINT nFlags) ;
+22 -16
View File
@@ -137,6 +137,7 @@ BEGIN_MESSAGE_MAP( CTestEGrDlg, CDialog)
ON_CONTROL_RANGE( BN_CLICKED, IDC_VIEW_TOP, IDC_VIEW_ISO, OnView)
ON_BN_CLICKED( IDC_CLOSE, OnClose)
ON_NOTIFY( TVN_SELCHANGED, IDC_TREE, OnTreeSelChanged)
ON_NOTIFY( NM_DBLCLK, IDC_TREE, OnTreeDoubleClick)
END_MESSAGE_MAP()
//----------------------------------------------------------------------------
@@ -227,6 +228,13 @@ CTestEGrDlg::OnInitDialog( void)
m_View.GetScene()->SetWinRectAttribs( bOutline, colRect) ;
}
// recupero il colore di marcatura e lo imposto
if ( m_View.GetScene() != nullptr) {
Color colMark( 192, 192, 0) ;
GetIniColor( "Scene", "Mark", colMark) ;
m_View.GetScene()->SetMark( colMark) ;
}
// imposto il DB geometrico
if ( m_View.GetScene() != nullptr)
m_View.GetScene()->Init( m_pGeomDB) ;
@@ -582,13 +590,12 @@ CTestEGrDlg::OnFileNew( void)
{
// pulisco l'albero delle entità
ClearTree() ;
// pulizia e reinizializzazione del DB geometrico
m_pGeomDB->Clear() ;
// reinizializzazione (con pulizia) del DB geometrico
m_pGeomDB->Init() ;
// visualizzo con zoom all
m_View.Zoom( IDC_ZOOM_ALL) ;
// log dei comandi
LOG_INFO( m_pLogCmd, "// NEW")
LOG_INFO( m_pLogCmd, "NEW")
}
//----------------------------------------------------------------------------
@@ -729,10 +736,11 @@ CTestEGrDlg::PrepareExecutor( void)
}
// inizializzazioni
m_pSceExec->SetScene( m_View.GetScene()) ;
m_pGdbExec->SetGeomDB( m_pGeomDB) ;
m_pGdbExec->AddExecutor( m_pSceExec) ;
m_pCmdParser->Init( m_pGdbExec) ;
m_pSceExec->SetScene( m_View.GetScene()) ;
m_pCmdParser->SetExecutor( m_pGdbExec) ;
m_pCmdParser->AddExecutor( m_pSceExec) ;
m_pCmdParser->Init() ;
return true ;
}
@@ -760,14 +768,13 @@ CTestEGrDlg::FileOpen( const string& sFilePath)
// pulisco l'albero delle entità
ClearTree() ;
// pulizia e reinizializzazione del DB geometrico
m_pGeomDB->Clear() ;
// reinizializzazione (con pulizia) del DB geometrico
m_pGeomDB->Init() ;
// carico il file
if ( ! m_pGeomDB->Load( sFilePath))
return false ;
// log dei comandi
LOG_INFO( m_pLogCmd, ( "// LOAD( " + sFilePath + ")").c_str())
LOG_INFO( m_pLogCmd, ( "LOAD( " + sFilePath + ")").c_str())
// visualizzo con zoom all
PerformanceCounter Counter ;
Counter.Start() ;
@@ -810,7 +817,7 @@ CTestEGrDlg::FileExec( const string& sFilePath)
bool bOk = m_pCmdParser->Run( sFilePath) ;
// log dei comandi
LOG_INFO( m_pLogCmd, ( "// RUN( " + sFilePath + ")").c_str())
LOG_INFO( m_pLogCmd, ( "RUN( " + sFilePath + ")").c_str())
// aggiorno visualizzazione
m_View.Redraw() ;
@@ -830,7 +837,7 @@ CTestEGrDlg::LineExec( const string& sLine)
return false ;
}
// ripristino stato oggetto selezionato
// ripristino stato oggetto marcato
int nIdOld = RevertOldIdOnTree() ;
// eseguo il comando
@@ -842,12 +849,11 @@ CTestEGrDlg::LineExec( const string& sLine)
else
LOG_INFO( m_pLogCmd, ( "// " + sLine).c_str())
// aggiorno visualizzazione
m_View.Redraw() ;
// aggiorno l'albero delle entità e tento di riselezionare oggetto
// aggiorno l'albero delle entità e tento di riselezionare l'oggetto prima marcato
LoadTree() ;
if ( nIdOld != GDB_ID_NULL)
SelectIdOnTree( nIdOld) ;
if ( ! m_pGeomDB->ExistsObj( nIdOld) ||
! SelectIdOnTree( nIdOld))
m_View.Redraw() ;
return bOk ;
}
+2 -1
View File
@@ -50,7 +50,8 @@ class CTestEGrDlg : public CDialog
afx_msg void OnView( UINT nID) ;
afx_msg void OnCommand( void) ;
afx_msg void OnClose( void) ;
afx_msg void OnTreeSelChanged(NMHDR *pNMHDR, LRESULT *pResult) ;
afx_msg void OnTreeSelChanged( NMHDR* pNMHDR, LRESULT* pResult) ;
afx_msg void OnTreeDoubleClick( NMHDR* pNMHDR, LRESULT* pResult) ;
private :
enum ItemPos { IP_TR = 1, IP_TL, IP_BR, IP_BL} ;