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 ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
BIN
Binary file not shown.
@@ -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)
|
||||
|
||||
@@ -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
@@ -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
@@ -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} ;
|
||||
|
||||
Reference in New Issue
Block a user