2026-03-27 17:56:28 -05:00
//+------------------------------------------------------------------+
//| Clean.mqh |
//| Copyright 2026, Niquel Mendoza. |
//| https://www.mql5.com/es/users/nique_372 |
//+------------------------------------------------------------------+
# property copyright " Copyright 2026, Niquel Mendoza. "
# property link " https://www.mql5.com/es/users/nique_372 "
# property strict
# ifndef AIDATATASKRUNER_UI_TABUTIL_CLEAN_MQH
# define AIDATATASKRUNER_UI_TABUTIL_CLEAN_MQH
//+------------------------------------------------------------------+
//| Include |
//+------------------------------------------------------------------+
# include "General.mqh"
//--- Trabajo con los folders
# include "..\\..\\..\\MQLArticles\\Utils\\File\\FolderOps\\All.mqh"
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
class CTabUtilsClean : public CGuiBaseComponent < CLoggerBase >
{
private :
//---
CTabUtilsGeneral * m_general ;
2026-06-03 22:07:50 -05:00
TSN : : CJsonParser * m_json_parser ;
2026-03-27 17:56:28 -05:00
//---
2026-06-03 22:07:50 -05:00
TSN : : CFolderOpsClean m_folder_cleaner ;
2026-03-27 17:56:28 -05:00
//---
//- Limpieza
CTextLabel m_label_tit_clean ; // Limpieza
// Arhicvo de configuracion
// Se ubican el patron de limpieza *, y tambiein extensiones a eliminar
CTextLabel m_label_file_config_clean ;
CTextLabel m_label_file_config_clean_val ;
CButton m_btn_browse_file_config_clean ;
CButton m_btn_browse_file_config_clean_template ; // Boton para selecionar el archivo template
// Ejecutar la limpieza
CButton m_btn_clean_run ;
//---
void OnRunClean ( ) ;
public :
2026-03-28 07:59:20 -05:00
CTabUtilsClean ( void ) : CGuiBaseComponent < CLoggerBase > ( " CTabUtilsClean " ) { m_folder_cleaner . AddLogFlags ( LOG_ALL ) ; }
2026-03-27 17:56:28 -05:00
~ CTabUtilsClean ( void ) { }
2026-03-27 22:30:19 -05:00
//---
2026-06-03 22:07:50 -05:00
void SetGeneral ( CTabUtilsGeneral * general , TSN : : CJsonParser * parser ) { m_general = general ; m_json_parser = parser ; }
2026-03-27 22:30:19 -05:00
2026-03-27 17:56:28 -05:00
//---
bool Create ( CWndCreate * p , CWindow & main_window , int top_gap , int left_gap , int right_gap , int bottom_gap ) ;
//---
bool OnClickButtom ( const long lparam ) ;
void OnLenguajeChange ( ) override final ;
} ;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool CTabUtilsClean : : Create ( CWndCreate * p , CWindow & main_window , int top_gap , int left_gap , int right_gap , int bottom_gap )
{
//---
int x = left_gap + 5 ;
int y = top_gap + 10 ;
const int initial_x = x ;
//--- Titulo Clean
m_label_tit_clean . FontSize ( 14 ) ;
m_label_tit_clean . Font ( " Arial " ) ;
m_label_tit_clean . LabelColor ( AIDATATASKRUNER_COLOR_TEXT_PRIMARY ) ;
m_label_tit_clean . BackColor ( AIDATATASKRUNER_COLOR_FONDO_SUBTAB_PRESSED ) ;
if ( ! p . CreateTextLabel ( m_label_tit_clean , m_language [ GUIBASE_COMPONENT_NAME ( m_label_tit_clean ) ] ,
main_window , 0 , m_base_tab , m_base_tab_idx , x , y , 200 ) )
{
GUIBASE_ERROR_CREATION ( m_label_tit_clean ) ;
return false ;
}
y + = m_label_tit_clean . YSize ( ) + 10 ;
//--- Label config clean
m_label_file_config_clean . FontSize ( 10 ) ;
m_label_file_config_clean . Font ( " Arial " ) ;
m_label_file_config_clean . LabelColor ( AIDATATASKRUNER_COLOR_TEXT_SECONDARY ) ;
m_label_file_config_clean . BackColor ( AIDATATASKRUNER_COLOR_FONDO_SUBTAB_PRESSED ) ;
if ( ! p . CreateTextLabel ( m_label_file_config_clean , m_language [ GUIBASE_COMPONENT_NAME ( m_label_file_config_clean ) ] ,
2026-03-27 22:30:19 -05:00
main_window , 0 , m_base_tab , m_base_tab_idx , x , y , 125 , 25 ) )
2026-03-27 17:56:28 -05:00
{
GUIBASE_ERROR_CREATION ( m_label_file_config_clean ) ;
return false ;
}
x + = m_label_file_config_clean . XSize ( ) + 5 ;
//--- Label val
m_label_file_config_clean_val . FontSize ( 10 ) ;
m_label_file_config_clean_val . Font ( " Arial " ) ;
m_label_file_config_clean_val . LabelColor ( AIDATATASKRUNER_COLOR_TEXT_PRIMARY ) ;
m_label_file_config_clean_val . BackColor ( AIDATATASKRUNER_COLOR_EDIT_BACK ) ;
m_label_file_config_clean_val . LabelXGap ( 5 ) ;
m_label_file_config_clean_val . LabelYGap ( 3 ) ;
m_label_file_config_clean_val . Tooltip ( m_language . Tooltip ( GUIBASE_COMPONENT_NAME ( m_label_file_config_clean_val ) ) ) ;
if ( ! p . CreateTextLabel ( m_label_file_config_clean_val , " " ,
2026-03-28 07:07:21 -05:00
main_window , 0 , m_base_tab , m_base_tab_idx , x , y , 400 , 25 ) )
2026-03-27 17:56:28 -05:00
{
GUIBASE_ERROR_CREATION ( m_label_file_config_clean_val ) ;
return false ;
}
x = initial_x ;
y + = m_label_file_config_clean_val . YSize ( ) + 8 ;
//--- Browse
2026-03-29 11:06:50 -05:00
m_btn_browse_file_config_clean . AddImagesGroup ( 5 , 2 , g_eafmod_ic_arr_folderw10_image ) ;
2026-03-27 22:30:19 -05:00
m_btn_browse_file_config_clean . ChangeImage ( 0 , 0 ) ;
2026-03-28 07:07:21 -05:00
m_btn_browse_file_config_clean . LabelXGap ( 22 ) ;
2026-03-27 17:56:28 -05:00
m_btn_browse_file_config_clean . FontSize ( 10 ) ;
m_btn_browse_file_config_clean . Font ( " Arial " ) ;
m_btn_browse_file_config_clean . BackColor ( AIDATATASKRUNER_COLOR_BTN_BACK ) ;
m_btn_browse_file_config_clean . LabelColor ( AIDATATASKRUNER_COLOR_TEXT_SECONDARY ) ;
m_btn_browse_file_config_clean . BorderColor ( AIDATATASKRUNER_COLOR_BTN_BORDER ) ;
m_btn_browse_file_config_clean . Tooltip ( m_language . Tooltip ( GUIBASE_COMPONENT_NAME ( m_btn_browse_file_config_clean ) ) ) ;
if ( ! p . CreateButton ( m_btn_browse_file_config_clean , m_language [ GUIBASE_COMPONENT_NAME ( m_btn_browse_file_config_clean ) ] ,
2026-03-27 22:30:19 -05:00
main_window , 0 , m_base_tab , m_base_tab_idx , x , y , 100 ) )
2026-03-27 17:56:28 -05:00
{
GUIBASE_ERROR_CREATION ( m_btn_browse_file_config_clean ) ;
return false ;
}
x + = m_btn_browse_file_config_clean . XSize ( ) + 5 ;
//--- Template "?"
2026-03-29 11:06:50 -05:00
m_btn_browse_file_config_clean_template . AddImagesGroup ( 5 , 2 , g_eafmod_ic_arr_help_image ) ;
2026-03-27 22:30:19 -05:00
m_btn_browse_file_config_clean_template . ChangeImage ( 0 , 0 ) ;
// m_btn_browse_file_config_clean_template.LabelXGap(20);
2026-03-27 17:56:28 -05:00
m_btn_browse_file_config_clean_template . FontSize ( 10 ) ;
m_btn_browse_file_config_clean_template . Font ( " Arial " ) ;
2026-03-27 22:30:19 -05:00
m_btn_browse_file_config_clean_template . BackColor ( AIDATATASKRUNER_COLOR_FONDO_SUBTAB_PRESSED ) ;
2026-03-27 17:56:28 -05:00
m_btn_browse_file_config_clean_template . LabelColor ( AIDATATASKRUNER_COLOR_TEXT_SECONDARY ) ;
2026-03-27 22:30:19 -05:00
m_btn_browse_file_config_clean_template . BorderColor ( AIDATATASKRUNER_COLOR_FONDO_SUBTAB_PRESSED ) ;
2026-03-27 17:56:28 -05:00
m_btn_browse_file_config_clean_template . Tooltip ( m_language . Tooltip ( GUIBASE_COMPONENT_NAME ( m_btn_browse_file_config_clean_template ) ) ) ;
2026-03-27 22:30:19 -05:00
if ( ! p . CreateButton ( m_btn_browse_file_config_clean_template , " " ,
2026-03-27 17:56:28 -05:00
main_window , 0 , m_base_tab , m_base_tab_idx , x , y , 30 ) )
{
GUIBASE_ERROR_CREATION ( m_btn_browse_file_config_clean_template ) ;
return false ;
}
x = initial_x ;
y + = m_btn_browse_file_config_clean_template . YSize ( ) + 10 ;
//--- Boton Run Clean
m_btn_clean_run . FontSize ( 10 ) ;
m_btn_clean_run . Font ( " Arial " ) ;
m_btn_clean_run . BackColor ( AIDATATASKRUNER_COLOR_BTN_BACK ) ;
m_btn_clean_run . LabelColor ( AIDATATASKRUNER_COLOR_TEXT_SECONDARY ) ;
m_btn_clean_run . BorderColor ( AIDATATASKRUNER_COLOR_BTN_BORDER ) ;
m_btn_clean_run . Tooltip ( m_language . Tooltip ( GUIBASE_COMPONENT_NAME ( m_btn_clean_run ) ) ) ;
if ( ! p . CreateButton ( m_btn_clean_run , m_language [ GUIBASE_COMPONENT_NAME ( m_btn_clean_run ) ] ,
main_window , 0 , m_base_tab , m_base_tab_idx , x , y , 120 ) )
{
GUIBASE_ERROR_CREATION ( m_btn_clean_run ) ;
return false ;
}
2026-03-27 22:30:19 -05:00
//x = initial_x;
// y += m_btn_clean_run.YSize() + 20; // gap mayor al final de seccion
2026-03-27 17:56:28 -05:00
//---
return true ;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CTabUtilsClean : : OnLenguajeChange ( void )
{
2026-03-27 22:30:19 -05:00
UpdateTBasic ( m_label_tit_clean , GUIBASE_COMPONENT_NAME ( m_label_tit_clean ) , false ) ;
UpdateTBasic ( m_label_file_config_clean , GUIBASE_COMPONENT_NAME ( m_label_file_config_clean ) , false ) ;
m_label_file_config_clean_val . Tooltip ( m_language . Tooltip ( GUIBASE_COMPONENT_NAME ( m_label_file_config_clean_val ) ) ) ;
UpdateTBasic ( m_btn_browse_file_config_clean , GUIBASE_COMPONENT_NAME ( m_btn_browse_file_config_clean ) , true ) ;
m_btn_browse_file_config_clean_template . Tooltip ( m_language . Tooltip ( GUIBASE_COMPONENT_NAME ( m_btn_browse_file_config_clean_template ) ) ) ;
2026-03-27 17:56:28 -05:00
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool CTabUtilsClean : : OnClickButtom ( const long lparam )
{
//--- Clean files
// Valor file (browse)
if ( m_btn_browse_file_config_clean . Id ( ) = = lparam )
{
//---
string arr [ ] ;
2026-03-27 22:30:19 -05:00
if ( FileSelectDialog ( GUIBASE_MSG ( " flselect_config_clean " ) , NULL , " JSON Files (*.json)|*.json " , ( m_general . ComonFlagVal ( ) ? FSD_COMMON_FOLDER : 0 ) ,
2026-03-27 17:56:28 -05:00
arr , NULL ) ! = 1 )
{
MessageBox ( GUIBASE_MSG ( " error_select_file " ) , GUIBASE_COMMON ( " error " ) , MB_ICONERROR | MB_OK ) ;
return true ;
}
//---
m_label_file_config_clean_val . LabelText ( arr [ 0 ] ) ; // ruta completa aqui
m_label_file_config_clean_val . Update ( true ) ;
//---
2026-06-03 22:07:50 -05:00
if ( ! m_folder_cleaner . Load ( arr [ 0 ] , m_general . ComonFlagVal ( ) , * m_json_parser ) )
2026-03-27 17:56:28 -05:00
{
MessageBox ( GUIBASE_MSG ( " error_loadjson_clean " ) , GUIBASE_COMMON ( " error " ) , MB_ICONERROR | MB_OK ) ;
}
return true ;
}
// Template
if ( m_btn_browse_file_config_clean_template . Id ( ) = = lparam )
{
//---
string arr [ ] ;
2026-03-27 22:30:19 -05:00
if ( FileSelectDialog ( GUIBASE_MSG ( " flselect_config_clean " ) , AIDATATASKRUNER_PATH_TEMPLATES , " JSON Files (*.json)|*.json " , AIDATATASK_RUNNER_FSD_COMON_FLAG ,
2026-03-27 17:56:28 -05:00
arr , AIDATATASKRUNER_FILENAME_TEMPLATES_FILEINCLUEXCLU_CLE ) ! = 1 )
{
MessageBox ( GUIBASE_MSG ( " error_select_file " ) , GUIBASE_COMMON ( " error " ) , MB_ICONERROR | MB_OK ) ;
return true ;
}
//---
m_label_file_config_clean_val . LabelText ( arr [ 0 ] ) ; // ruta completa aqui
m_label_file_config_clean_val . Update ( true ) ;
//---
2026-06-03 22:07:50 -05:00
if ( ! m_folder_cleaner . Load ( arr [ 0 ] , AIDATATASK_RUNNER_COMON_FLAG_VAL , * m_json_parser ) )
2026-03-27 17:56:28 -05:00
{
MessageBox ( GUIBASE_MSG ( " error_loadjson_clean " ) , GUIBASE_COMMON ( " error " ) , MB_ICONERROR | MB_OK ) ;
}
return true ;
}
// Run
if ( m_btn_clean_run . Id ( ) = = lparam )
{
m_btn_clean_run . LabelText ( m_language [ GUIBASE_COMPONENT_NAME ( m_btn_clean_run ) + " _onrun " ] ) ;
m_btn_clean_run . Update ( true ) ;
OnRunClean ( ) ;
m_btn_clean_run . LabelText ( m_language [ GUIBASE_COMPONENT_NAME ( m_btn_clean_run ) ] ) ;
m_btn_clean_run . Update ( true ) ;
return true ;
}
//---
return false ;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CTabUtilsClean : : OnRunClean ( void )
{
//--- Check
const string main_folder = m_general . MainFolder ( ) ;
if ( main_folder .Length ( ) < 1 )
{
MessageBox ( GUIBASE_MSG ( " err_invalid_mfolder " ) , GUIBASE_COMMON ( " error " ) , MB_ICONERROR | MB_OK ) ;
return ;
}
//--- Si falla le decimos mensaje que revise logs
2026-03-28 07:59:20 -05:00
m_folder_cleaner . SetInitialPass ( ) ;
2026-03-27 17:56:28 -05:00
if ( ! m_folder_cleaner . CleanFolder ( main_folder , m_general . ComonFlag ( ) ) )
{
MessageBox ( GUIBASE_MSG ( " err_clean_folder " ) , GUIBASE_COMMON ( " error " ) , MB_ICONQUESTION | MB_YESNO ) ;
}
}
//+------------------------------------------------------------------+
2026-03-27 22:30:19 -05:00
# endif // AIDATATASKRUNER_UI_TABUTIL_CLEAN_MQH