//+------------------------------------------------------------------+ //| 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 { private: //--- CTabUtilsGeneral* m_general; //--- CFolderOpsClean m_folder_cleaner; //--- //- 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: CTabUtilsClean(void) : CGuiBaseComponent("CTabUtilsClean") { m_folder_cleaner.AddLogFlags(LOG_ALL);} ~CTabUtilsClean(void) {} //--- void SetGeneral(CTabUtilsGeneral* general) { m_general = general; } //--- 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)], main_window, 0, m_base_tab, m_base_tab_idx, x, y, 125, 25)) { 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, "", main_window, 0, m_base_tab, m_base_tab_idx, x, y, 400, 25)) { GUIBASE_ERROR_CREATION(m_label_file_config_clean_val); return false; } x = initial_x; y += m_label_file_config_clean_val.YSize() + 8; //--- Browse m_btn_browse_file_config_clean.AddImagesGroup(5, 2, g_eafmod_ic_arr_folderw10_image); m_btn_browse_file_config_clean.ChangeImage(0, 0); m_btn_browse_file_config_clean.LabelXGap(22); 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)], main_window, 0, m_base_tab, m_base_tab_idx, x, y, 100)) { GUIBASE_ERROR_CREATION(m_btn_browse_file_config_clean); return false; } x += m_btn_browse_file_config_clean.XSize() + 5; //--- Template "?" m_btn_browse_file_config_clean_template.AddImagesGroup(5, 2, g_eafmod_ic_arr_help_image); m_btn_browse_file_config_clean_template.ChangeImage(0, 0); // m_btn_browse_file_config_clean_template.LabelXGap(20); m_btn_browse_file_config_clean_template.FontSize(10); m_btn_browse_file_config_clean_template.Font("Arial"); m_btn_browse_file_config_clean_template.BackColor(AIDATATASKRUNER_COLOR_FONDO_SUBTAB_PRESSED); m_btn_browse_file_config_clean_template.LabelColor(AIDATATASKRUNER_COLOR_TEXT_SECONDARY); m_btn_browse_file_config_clean_template.BorderColor(AIDATATASKRUNER_COLOR_FONDO_SUBTAB_PRESSED); m_btn_browse_file_config_clean_template.Tooltip(m_language.Tooltip(GUIBASE_COMPONENT_NAME(m_btn_browse_file_config_clean_template))); if(!p.CreateButton(m_btn_browse_file_config_clean_template, "", 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; } //x = initial_x; // y += m_btn_clean_run.YSize() + 20; // gap mayor al final de seccion //--- return true; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void CTabUtilsClean::OnLenguajeChange(void) { 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))); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool CTabUtilsClean::OnClickButtom(const long lparam) { //--- Clean files // Valor file (browse) if(m_btn_browse_file_config_clean.Id() == lparam) { //--- string arr[]; if(FileSelectDialog(GUIBASE_MSG("flselect_config_clean"), NULL, "JSON Files (*.json)|*.json", (m_general.ComonFlagVal() ? FSD_COMMON_FOLDER : 0), 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); //--- if(!m_folder_cleaner.Load(arr[0], m_general.ComonFlagVal(), g_json_parser)) { 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[]; if(FileSelectDialog(GUIBASE_MSG("flselect_config_clean"), AIDATATASKRUNER_PATH_TEMPLATES, "JSON Files (*.json)|*.json", AIDATATASK_RUNNER_FSD_COMON_FLAG, 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); //--- if(!m_folder_cleaner.Load(arr[0], AIDATATASK_RUNNER_COMON_FLAG_VAL, g_json_parser)) { 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 m_folder_cleaner.SetInitialPass(); if(!m_folder_cleaner.CleanFolder(main_folder, m_general.ComonFlag())) { MessageBox(GUIBASE_MSG("err_clean_folder"), GUIBASE_COMMON("error"), MB_ICONQUESTION | MB_YESNO); } } //+------------------------------------------------------------------+ #endif // AIDATATASKRUNER_UI_TABUTIL_CLEAN_MQH