EgtExecutor :

- migliorie e correzioni a dialoghi lua con selezione oggetti.
This commit is contained in:
Dario Sassi
2026-07-27 09:24:56 +02:00
parent 79c96d24e2
commit c5ea2260b7
3 changed files with 53 additions and 51 deletions
+5 -5
View File
@@ -75,7 +75,7 @@ ExeSelectObj( int nId)
if ( bOk)
UpdateDialogIds() ;
// se richiesto, salvo il comando Lua equivalente
if ( IsCmdLog()) {
if ( IsCmdLog() && ! IsSelectionFromDialog()) {
string sLua = "EgtSelectObj(" + ToString( nId) + ")" +
" -- Ok=" + ToString( bOk) ;
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
@@ -102,7 +102,7 @@ ExeDeselectObj( int nId)
if ( bOk)
UpdateDialogIds() ;
// se richiesto, salvo il comando Lua equivalente
if ( IsCmdLog()) {
if ( IsCmdLog() && ! IsSelectionFromDialog()) {
string sLua = "EgtDeselectObj(" + ToString( nId) + ")" +
" -- Ok=" + ToString( bOk) ;
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
@@ -165,7 +165,7 @@ ExeDeselectAll( void)
if ( bOk)
UpdateDialogIds() ;
// se richiesto, salvo il comando Lua equivalente
if ( IsCmdLog()) {
if ( IsCmdLog() && ! IsSelectionFromDialog()) {
string sLua = "EgtDeselectAll()"
" -- Ok=" + ToString( bOk) ;
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
@@ -194,7 +194,7 @@ ExeSelectGroupObjs( int nGroupId)
if ( bOk)
UpdateDialogIds() ;
// se richiesto, salvo il comando Lua equivalente
if ( IsCmdLog()) {
if ( IsCmdLog() && ! IsSelectionFromDialog()) {
string sLua = "EgtSelectGroupObjs(" + ToString( nGroupId) + ")" +
" -- Ok=" + ToString( bOk) ;
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
@@ -220,7 +220,7 @@ ExeDeselectGroupObjs( int nGroupId)
if ( bOk)
UpdateDialogIds() ;
// se richiesto, salvo il comando Lua equivalente
if ( IsCmdLog()) {
if ( IsCmdLog() && ! IsSelectionFromDialog()) {
string sLua = "EgtDeselectGroupObjs(" + ToString( nGroupId) + ")" +
" -- Ok=" + ToString( bOk) ;
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
+45 -46
View File
@@ -46,8 +46,7 @@ static int s_nType[MAX_CTRLS] ;
static bool s_bOk = false ; // uscita con Ok
static bool s_bCustomColorsInit = false ; // flag di inizializzazione colori custom
static COLORREF s_CustomColors[16] = {12632256} ; // 16 colori GRAY
static bool s_bSelectionMode = false ; // se true allora diventa dialogo "Modeless"
static int s_nDlgItem = -1 ; // indice dell'Item di selezione
static int s_nDlgSelItem = -1 ; // indice dell'Item di selezione
//-----------------------------------------------------------------------------
static string
@@ -92,18 +91,17 @@ StartSelectionMode( HWND hDlg, int nEditId)
for ( int i = 0; i < s_nCtrls ; ++ i) {
if ( s_nType[i] == CTRL_BUTTON) {
int idEdit = IDC_EDIT1 + i ;
EnableWindow( GetDlgItem( hDlg, idEdit), ( idEdit == s_nDlgItem ? TRUE : FALSE)) ;
EnableWindow( GetDlgItem( hDlg, idEdit), ( idEdit == s_nDlgSelItem ? TRUE : FALSE)) ;
}
}
// seleziono solo gli elementi presenti nell'edit corrispondente
s_nDlgItem = - 1 ;
ExeDeselectAll() ; // !<-- NB. avendo messo s_nDlgItem = -1 il testo non viene rimosso
s_nDlgSelItem = - 1 ;
ExeDeselectAll() ; // !<-- NB. avendo messo s_nDlgSelItem = -1 il testo non viene rimosso
AtoWEX<128> wsEdit( "") ;
GetDlgItemText( hDlg, nEditId, LPWSTR( wsEdit), 128) ;
ValidateSelection( wstrztoA( wsEdit), true) ;
s_bSelectionMode = true ;
s_nDlgItem = nEditId ;
s_nDlgSelItem = nEditId ;
ExeDraw() ;
}
@@ -116,8 +114,10 @@ StartSelectionMode( HWND hDlg, int nEditId)
static void
EndSelectionMode( HWND hDlg)
{
s_bSelectionMode = false ;
s_nDlgItem = -1 ;
if ( s_nDlgSelItem == -1)
return ;
s_nDlgSelItem = -1 ;
// disabilito tutti gli edit associati ai BS
for ( int i = 0; i < s_nCtrls ; ++ i) {
@@ -133,7 +133,7 @@ EndSelectionMode( HWND hDlg)
EnableWindow( hMain, FALSE) ;
SetFocus( hDlg) ;
// deseleziono tutto
ExeDeselectAll() ; //!<-- NB. avendo messo nDlgModelessItem = -1 il testo non viene rimosso
ExeDeselectAll() ; //!<-- NB. avendo messo s_nDlgSelItem = -1 il testo non viene rimosso
ExeDraw() ;
}
@@ -200,17 +200,14 @@ CALLBACK UpdateDialogSelection( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPara
static void
OnClosingDialog( HWND hwndDlg)
{
// reset stato globale
s_bSelectionMode = false ;
s_nDlgItem = -1 ;
// chiudo eventuale selezione ancora attiva
EndSelectionMode( hwndDlg) ;
// il controllo passa al Main
HWND hMain = GetParent( hwndDlg) ;
EnableWindow( hMain, TRUE) ;
DestroyWindow( hwndDlg) ;
s_hDlg = NULL ;
SetFocus( hMain) ;
// deseleziono tutto
ExeDeselectAll() ;
ExeDraw() ;
}
@@ -460,29 +457,21 @@ CALLBACK DialogBoxProc( HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam
if ( nId >= IDC_BUTTON_SEL1 && nId < IDC_BUTTON_SEL1 + MAX_CTRLS) {
int nBtnId = nId ;
int nEditId = IDC_EDIT1 + ( nId - IDC_BUTTON_SEL1) ;
// se il bottone premuto è lo stesso
if ( s_nDlgItem == nEditId) {
// se selezione attiva, allora deve terminare
if ( s_bSelectionMode) {
SetDlgItemText( hwndDlg, nBtnId, strztoW( "+")) ;
EndSelectionMode( hwndDlg) ;
}
// se selezione non attiva, allora viene attivata
else {
SetDlgItemText( hwndDlg, nBtnId, strztoW( "S")) ;
StartSelectionMode( hwndDlg, nEditId) ;
}
// se il bottone premuto è quello attivo, allora devo terminare la selezione
if ( s_nDlgSelItem == nEditId) {
SetDlgItemText( hwndDlg, nBtnId, strztoW( "+")) ;
EndSelectionMode( hwndDlg) ;
}
// se nuovo buttone premuto
// se premuto nuovo bottone
else {
// se esisteva una selezione precedente, questa viene annullata
if ( s_nDlgItem != -1) {
if ( s_nDlgSelItem != -1) {
// recupero il Button di selezione precedente e modifico il suo testo
int nPrevBtnId = IDC_BUTTON_SEL1 + ( s_nDlgItem - IDC_EDIT1) ;
int nPrevBtnId = IDC_BUTTON_SEL1 + ( s_nDlgSelItem - IDC_EDIT1) ;
SetDlgItemText( hwndDlg, nPrevBtnId, strztoW( "+")) ;
}
// la selezione passa al comando corrente
s_nDlgItem = nEditId ;
s_nDlgSelItem = nEditId ;
SetDlgItemText( hwndDlg, nBtnId, strztoW( "S")) ;
// il dialogo diventa "Modeless" temporaneamente
StartSelectionMode( hwndDlg, nEditId) ;
@@ -492,14 +481,12 @@ CALLBACK DialogBoxProc( HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam
// --- se comando di Preview per brush di colori mediante click del mouse
else if ( nCode == STN_CLICKED && nId >= IDC_COLOR1 && nId <= IDC_COLOR8) {
// se selezione attiva, allora deve terminare
if ( s_bSelectionMode) {
// se esisteva una selezione precedente, questa viene annullata
if ( s_nDlgItem != -1) {
// recupero il Button di selezione precedente e modifico il suo testo
int nPrevBtnId = IDC_BUTTON_SEL1 + ( s_nDlgItem - IDC_EDIT1) ;
SetDlgItemText( hwndDlg, nPrevBtnId, strztoW( "+")) ;
}
// se esisteva una selezione precedente, questa viene terminata
if ( s_nDlgSelItem != -1) {
// recupero il Button di selezione precedente e modifico il suo testo
int nPrevBtnId = IDC_BUTTON_SEL1 + ( s_nDlgSelItem - IDC_EDIT1) ;
SetDlgItemText( hwndDlg, nPrevBtnId, strztoW( "+")) ;
// esco dalla modalità selezione
EndSelectionMode( hwndDlg) ;
}
int idx = nId - IDC_COLOR1 ;
@@ -583,9 +570,9 @@ CALLBACK DialogBoxProc( HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam
}
// se siamo in modalità di Selezione e il comando attivo non si riferisce ad un button di Selezione (SB), il dialogo torna modale
if ( s_bSelectionMode) {
if ( s_nDlgSelItem != -1) {
bool bIsBS = ( nId >= IDC_BUTTON_SEL1 && nId < IDC_BUTTON_SEL1 + MAX_CTRLS) ;
bool bIsActiveEdit = ( nId == s_nDlgItem) ;
bool bIsActiveEdit = ( nId == s_nDlgSelItem) ;
// il dialogo torna modale
if ( ! bIsBS && ! bIsActiveEdit)
EndSelectionMode( hwndDlg) ;
@@ -603,12 +590,19 @@ CALLBACK DialogBoxProc( HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam
return FALSE ;
}
//-----------------------------------------------------------------------------
bool
IsSelectionFromDialog( void)
{
return ! ( s_hDlg == NULL || s_nDlgSelItem == -1) ;
}
//-----------------------------------------------------------------------------
bool
UpdateDialogIds( void)
{
// verifico presenza dialogo e item di selezione
if ( s_hDlg == NULL || s_nDlgItem == -1)
if ( s_hDlg == NULL || s_nDlgSelItem == -1)
return false ;
// recupero tutti gli elementi selezionati
@@ -622,7 +616,7 @@ UpdateDialogIds( void)
sIds.pop_back() ;
// aggiorno il contenuto nel dialogo
return ( SetDlgItemText( s_hDlg, s_nDlgItem, stringtoW( sIds))) ;
return ( SetDlgItemText( s_hDlg, s_nDlgSelItem, stringtoW( sIds)) != FALSE) ;
}
//-------------------------------------------------------------------------------
@@ -707,11 +701,13 @@ LuaDialogBox( lua_State* L)
return 1 ;
}
// disabilito log dei comandi
bool bPrevCmdLog = SetCmdLog( false) ;
// creazione di un dialogo Modeless
HWND hMainWnd = ExeGetMainWindowHandle() ;
s_bOk = false ;
s_bSelectionMode = false ;
s_nDlgItem = -1 ;
s_nDlgSelItem = -1 ;
s_hDlg = ( CreateDialogParam( GetModuleIstance(), MAKEINTRESOURCE( IDD_LUADLG), hMainWnd, (DLGPROC)DialogBoxProc, NULL)) ;
if ( s_hDlg == NULL) {
LuaSetParam( L) ;
@@ -734,12 +730,15 @@ LuaDialogBox( lua_State* L)
if ( GetMessage( &msg, NULL, 0, 0) <= 0)
break ;
if ( ! IsDialogMessage( s_hDlg, &msg) &&
( ! s_bSelectionMode || PtInRect( &rctWnd, msg.pt) != FALSE)) {
( s_nDlgSelItem == -1 || PtInRect( &rctWnd, msg.pt) != FALSE)) {
TranslateMessage( &msg) ;
DispatchMessage( &msg) ;
}
}
// ripristino stato precedente di log dei comandi
SetCmdLog( bPrevCmdLog) ;
// ritorno i valori lua
if ( s_bOk) {
STRVECTOR vRes ;
+3
View File
@@ -20,5 +20,8 @@
// Funzione implementazione DialogBox per lua
int LuaDialogBox( lua_State* L) ;
// Funzione che restituisce stato selezione da dialogo
bool IsSelectionFromDialog( void) ;
// Funzione per passaggio di parametri tra Selezione DB e dialogo non modale
bool UpdateDialogIds( void) ;