From 941e4ac612a20cdb2120241b260df759a4ce5720 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sat, 31 May 2025 19:51:35 +0300 Subject: =?UTF-8?q?fixes=20#5041=20(MirLua:=20=D0=BE=D1=82=D0=BA=D1=80?= =?UTF-8?q?=D1=8B=D1=82=D0=B8=D0=B5=20=D1=81=D0=BA=D1=80=D0=B8=D0=BF=D1=82?= =?UTF-8?q?=D0=B0=20=D0=B4=D0=B2=D0=BE=D0=B9=D0=BD=D1=8B=D0=BC=20=D0=BA?= =?UTF-8?q?=D0=BB=D0=B8=D0=BA=D0=BE=D0=BC=20=D0=BF=D0=BE=20=D0=B8=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/MirLua/src/options.cpp | 352 +++++++++++++++++++++++------------------ plugins/MirLua/src/options.h | 47 ------ plugins/MirLua/src/plugin.cpp | 18 --- plugins/MirLua/src/stdafx.h | 1 - 4 files changed, 202 insertions(+), 216 deletions(-) delete mode 100644 plugins/MirLua/src/options.h (limited to 'plugins/MirLua/src') diff --git a/plugins/MirLua/src/options.cpp b/plugins/MirLua/src/options.cpp index 0da9f34357..b73d923360 100644 --- a/plugins/MirLua/src/options.cpp +++ b/plugins/MirLua/src/options.cpp @@ -1,19 +1,5 @@ #include "stdafx.h" -CMLuaOptionsMain::CMLuaOptionsMain() : - CDlgBase(g_plugin, IDD_OPTIONSMAIN), - m_popupOnError(this, IDC_POPUPONERROR), - m_popupOnObsolete(this, IDC_POPUPONOBSOLETE), - m_scriptsList(this, IDC_SCRIPTS), - m_reload(this, IDC_RELOAD) -{ - CreateLink(m_popupOnError, "PopupOnError", DBVT_BYTE, 1); - CreateLink(m_popupOnObsolete, "PopupOnObsolete", DBVT_BYTE, 1); - - m_scriptsList.OnClick = Callback(this, &CMLuaOptionsMain::OnScriptListClick); - m_reload.OnClick = Callback(this, &CMLuaOptionsMain::OnReload); -} - static int ScriptStatusToIcon(ScriptStatus status) { switch (status) { @@ -28,174 +14,240 @@ static int ScriptStatusToIcon(ScriptStatus status) return 0; } -void CMLuaOptionsMain::LoadScripts() +///////////////////////////////////////////////////////////////////////////////////////// +// main options page + +class CMLuaOptionsMain : public CDlgBase { - for (auto &script : g_plugin.m_scripts) { - int iIcon = ScriptStatusToIcon(script->GetStatus()); - int iItem = m_scriptsList.AddItem(script->GetName(), iIcon, (LPARAM)script); - m_scriptsList.SetCheckState(iItem, script->IsEnabled()); - m_scriptsList.SetItem(iItem, 1, TranslateT("Open"), 2); - m_scriptsList.SetItem(iItem, 2, TranslateT("Reload"), 3); - if (!script->IsBinary()) - m_scriptsList.SetItem(iItem, 3, TranslateT("Compile"), 4); + CCtrlCheck m_popupOnError; + CCtrlCheck m_popupOnObsolete; + + CCtrlListView m_scriptsList; + CCtrlButton m_reload; + + void LoadScripts() + { + for (auto &script : g_plugin.m_scripts) { + int iIcon = ScriptStatusToIcon(script->GetStatus()); + int iItem = m_scriptsList.AddItem(script->GetName(), iIcon, (LPARAM)script); + m_scriptsList.SetCheckState(iItem, script->IsEnabled()); + m_scriptsList.SetItem(iItem, 1, TranslateT("Open"), 2); + m_scriptsList.SetItem(iItem, 2, TranslateT("Reload"), 3); + if (!script->IsBinary()) + m_scriptsList.SetItem(iItem, 3, TranslateT("Compile"), 4); + } } -} -bool CMLuaOptionsMain::OnInitDialog() -{ - CDlgBase::OnInitDialog(); +public: + CMLuaOptionsMain() : + CDlgBase(g_plugin, IDD_OPTIONSMAIN), + m_popupOnError(this, IDC_POPUPONERROR), + m_popupOnObsolete(this, IDC_POPUPONOBSOLETE), + m_scriptsList(this, IDC_SCRIPTS), + m_reload(this, IDC_RELOAD) + { + CreateLink(m_popupOnError, "PopupOnError", DBVT_BYTE, 1); + CreateLink(m_popupOnObsolete, "PopupOnObsolete", DBVT_BYTE, 1); + + m_scriptsList.OnClick = Callback(this, &CMLuaOptionsMain::onClick_List); + m_scriptsList.OnDoubleClick = Callback(this, &CMLuaOptionsMain::onDblClick_List); + + m_reload.OnClick = Callback(this, &CMLuaOptionsMain::OnReload); + } - m_scriptsList.SetExtendedListViewStyle(LVS_EX_SUBITEMIMAGES | LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES | LVS_EX_INFOTIP); + bool OnInitDialog() override + { + CDlgBase::OnInitDialog(); - HIMAGELIST hImageList = m_scriptsList.CreateImageList(LVSIL_SMALL); - ImageList_AddIcon(hImageList, g_plugin.getIcon(IDI_LOADED)); - ImageList_AddIcon(hImageList, g_plugin.getIcon(IDI_FAILED)); - ImageList_AddIcon(hImageList, g_plugin.getIcon(IDI_OPEN)); - ImageList_AddIcon(hImageList, g_plugin.getIcon(IDI_RELOAD)); - ImageList_AddIcon(hImageList, g_plugin.getIcon(IDI_COMPILE)); + m_scriptsList.SetExtendedListViewStyle(LVS_EX_SUBITEMIMAGES | LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES | LVS_EX_INFOTIP); - wchar_t scriptDir[MAX_PATH]; - FoldersGetCustomPathW(g_hScriptsFolder, scriptDir, _countof(scriptDir), VARSW(MIRLUA_PATHT)); + HIMAGELIST hImageList = m_scriptsList.CreateImageList(LVSIL_SMALL); + ImageList_AddIcon(hImageList, g_plugin.getIcon(IDI_LOADED)); + ImageList_AddIcon(hImageList, g_plugin.getIcon(IDI_FAILED)); + ImageList_AddIcon(hImageList, g_plugin.getIcon(IDI_OPEN)); + ImageList_AddIcon(hImageList, g_plugin.getIcon(IDI_RELOAD)); + ImageList_AddIcon(hImageList, g_plugin.getIcon(IDI_COMPILE)); - wchar_t relativeScriptDir[MAX_PATH]; - PathToRelativeW(scriptDir, relativeScriptDir, nullptr); + wchar_t scriptDir[MAX_PATH]; + FoldersGetCustomPathW(g_hScriptsFolder, scriptDir, _countof(scriptDir), VARSW(MIRLUA_PATHT)); - wchar_t header[MAX_PATH + 100]; - mir_snwprintf(header, L"%s (%s)", TranslateT("Common scripts"), relativeScriptDir); + wchar_t relativeScriptDir[MAX_PATH]; + PathToRelativeW(scriptDir, relativeScriptDir, nullptr); - m_scriptsList.AddColumn(0, TranslateT("Script"), 346); - m_scriptsList.AddColumn(1, nullptr, 34 - GetSystemMetrics(SM_CXVSCROLL)); - m_scriptsList.AddColumn(2, nullptr, 36 - GetSystemMetrics(SM_CXVSCROLL)); - m_scriptsList.AddColumn(3, nullptr, 36 - GetSystemMetrics(SM_CXVSCROLL)); + wchar_t header[MAX_PATH + 100]; + mir_snwprintf(header, L"%s (%s)", TranslateT("Common scripts"), relativeScriptDir); - LoadScripts(); - return true; -} + m_scriptsList.AddColumn(0, TranslateT("Script"), 346); + m_scriptsList.AddColumn(1, nullptr, 34 - GetSystemMetrics(SM_CXVSCROLL)); + m_scriptsList.AddColumn(2, nullptr, 36 - GetSystemMetrics(SM_CXVSCROLL)); + m_scriptsList.AddColumn(3, nullptr, 36 - GetSystemMetrics(SM_CXVSCROLL)); -bool CMLuaOptionsMain::OnApply() -{ - int count = m_scriptsList.GetItemCount(); - for (int iItem = 0; iItem < count; iItem++) { - CMLuaScript *script = (CMLuaScript*)m_scriptsList.GetItemData(iItem); - if (!m_scriptsList.GetCheckState(iItem)) - script->Disable(); - else - script->Enable(); + LoadScripts(); + return true; } - return true; -} -void CMLuaOptionsMain::OnScriptListClick(CCtrlListView::TEventInfo *evt) -{ - LVITEM lvi = {}; - lvi.iItem = evt->nmlvia->iItem; - if (lvi.iItem == -1) - return; + bool OnApply() override + { + int count = m_scriptsList.GetItemCount(); + for (int iItem = 0; iItem < count; iItem++) { + CMLuaScript *script = (CMLuaScript *)m_scriptsList.GetItemData(iItem); + if (!m_scriptsList.GetCheckState(iItem)) + script->Disable(); + else + script->Enable(); + } + return true; + } - lvi.pszText = (LPTSTR)mir_calloc(MAX_PATH * sizeof(wchar_t)); - lvi.cchTextMax = MAX_PATH; - lvi.mask = LVIF_GROUPID | LVIF_TEXT | LVIF_PARAM; - m_scriptsList.GetItem(&lvi); - lvi.iSubItem = evt->nmlvia->iSubItem; + void onClick_List(CCtrlListView::TEventInfo *evt) + { + LVITEM lvi = {}; + lvi.iItem = evt->nmlvia->iItem; + if (lvi.iItem == -1) + return; - CMLuaScript *script = (CMLuaScript*)lvi.lParam; + lvi.mask = LVIF_PARAM; + m_scriptsList.GetItem(&lvi); + auto *script = (CMLuaScript *)lvi.lParam; - switch (lvi.iSubItem) { - case 1: - ShellExecute(m_hwnd, L"open", script->GetFilePath(), nullptr, nullptr, SW_SHOWNORMAL); - break; - - case 2: - script->Reload(); - lvi.mask = LVIF_IMAGE; - lvi.iSubItem = 0; - lvi.iImage = ScriptStatusToIcon(script->GetStatus()); - m_scriptsList.SetItem(&lvi); - m_scriptsList.Update(lvi.iItem); - break; - - case 3: - if (script->IsBinary()) + switch (evt->nmlvia->iSubItem) { + case 1: + ShellExecute(m_hwnd, L"open", script->GetFilePath(), nullptr, nullptr, SW_SHOWNORMAL); break; - script->Compile(); - lvi.mask = LVIF_IMAGE; - lvi.iSubItem = 0; - lvi.iImage = ScriptStatusToIcon(script->GetStatus()); - m_scriptsList.SetItem(&lvi); - m_scriptsList.Update(lvi.iItem); - break; + + case 2: + script->Reload(); + lvi.mask = LVIF_IMAGE; + lvi.iSubItem = 0; + lvi.iImage = ScriptStatusToIcon(script->GetStatus()); + m_scriptsList.SetItem(&lvi); + m_scriptsList.Update(lvi.iItem); + break; + + case 3: + if (script->IsBinary()) + break; + script->Compile(); + lvi.mask = LVIF_IMAGE; + lvi.iSubItem = 0; + lvi.iImage = ScriptStatusToIcon(script->GetStatus()); + m_scriptsList.SetItem(&lvi); + m_scriptsList.Update(lvi.iItem); + break; + } } - mir_free(lvi.pszText); -} + void onDblClick_List(CCtrlListView::TEventInfo *evt) + { + int iItem = evt->nmlv->iItem; + if (iItem == -1) + return; -void CMLuaOptionsMain::OnReload(CCtrlBase*) -{ - m_scriptsList.SetSilent(true); - m_scriptsList.DeleteAllItems(); - g_plugin.ReloadLuaScripts(); - LoadScripts(); - m_scriptsList.SetSilent(false); -} + auto *script = (CMLuaScript *)m_scriptsList.GetItemData(iItem); + ShellExecute(m_hwnd, L"open", script->GetFilePath(), nullptr, nullptr, SW_SHOWNORMAL); + } + + void OnReload(CCtrlBase *) + { + m_scriptsList.SetSilent(true); + m_scriptsList.DeleteAllItems(); + g_plugin.ReloadLuaScripts(); + LoadScripts(); + m_scriptsList.SetSilent(false); + } +}; -/***********************************************/ +///////////////////////////////////////////////////////////////////////////////////////// +// evaluate options page -CMLuaEvaluateOptions::CMLuaEvaluateOptions() : - CDlgBase(g_plugin, IDD_OPTIONSEVALUATE), - m_script(this, IDC_SCRIPTTEXT), - m_result(this, IDC_SCRIPTRESULT), - m_autoEval(this, IDC_AUTOEVAL), - m_evaluate(this, IDC_EVALUATE) +class CMLuaEvaluateOptions : public CDlgBase { - this->L = lua_newthread(g_plugin.L); - threadRef = luaL_ref(L, LUA_REGISTRYINDEX); + lua_State *L = nullptr; + int threadRef = 0; + + CCtrlEdit m_script; + CCtrlEdit m_result; + + CCtrlCheck m_autoEval; + CCtrlButton m_evaluate; + + void OnAutoEvalChange(CCtrlBase *) + { + if (m_autoEval.IsChecked()) { + m_script.OnChange = Callback(this, &CMLuaEvaluateOptions::OnEvaluate); + m_evaluate.Click(); + } + else m_script.OnChange = CCallback(); + } - CreateLink(m_autoEval, "AutoEval", DBVT_BYTE, 0); + void OnEvaluate(CCtrlBase *) + { + ptrW script(m_script.GetText()); - m_autoEval.OnChange = Callback(this, &CMLuaEvaluateOptions::OnAutoEvalChange); - m_evaluate.OnClick = Callback(this, &CMLuaEvaluateOptions::OnEvaluate); -} + CMLuaEnvironment env(L); + env.Eval(script); + m_result.SetText(ptrW(mir_utf8decodeW(lua_tostring(L, -1)))); + lua_pop(L, 1); + env.Unload(); + } -CMLuaEvaluateOptions::~CMLuaEvaluateOptions() -{ - luaL_unref(L, LUA_REGISTRYINDEX, threadRef); - threadRef = 0; -} +public: + CMLuaEvaluateOptions() : + CDlgBase(g_plugin, IDD_OPTIONSEVALUATE), + m_script(this, IDC_SCRIPTTEXT), + m_result(this, IDC_SCRIPTRESULT), + m_autoEval(this, IDC_AUTOEVAL), + m_evaluate(this, IDC_EVALUATE) + { + this->L = lua_newthread(g_plugin.L); + threadRef = luaL_ref(L, LUA_REGISTRYINDEX); + + CreateLink(m_autoEval, "AutoEval", DBVT_BYTE, 0); + + m_autoEval.OnChange = Callback(this, &CMLuaEvaluateOptions::OnAutoEvalChange); + m_evaluate.OnClick = Callback(this, &CMLuaEvaluateOptions::OnEvaluate); + } -bool CMLuaEvaluateOptions::OnInitDialog() -{ - m_script.SetText(m_pPlugin.getMStringW("Script")); - if (m_autoEval.IsChecked()) { - m_script.OnChange = Callback(this, &CMLuaEvaluateOptions::OnEvaluate); - m_evaluate.Click(); + ~CMLuaEvaluateOptions() + { + luaL_unref(L, LUA_REGISTRYINDEX, threadRef); + threadRef = 0; } - return true; -} -bool CMLuaEvaluateOptions::OnApply() -{ - m_pPlugin.setWString("Script", m_script.GetText()); - return true; -} + bool OnInitDialog() override + { + m_script.SetText(m_pPlugin.getMStringW("Script")); + if (m_autoEval.IsChecked()) { + m_script.OnChange = Callback(this, &CMLuaEvaluateOptions::OnEvaluate); + m_evaluate.Click(); + } + return true; + } -void CMLuaEvaluateOptions::OnAutoEvalChange(CCtrlBase*) -{ - if (m_autoEval.IsChecked()) { - m_script.OnChange = Callback(this, &CMLuaEvaluateOptions::OnEvaluate); - m_evaluate.Click(); + bool OnApply() override + { + m_pPlugin.setWString("Script", m_script.GetText()); + return true; } - else m_script.OnChange = CCallback(); -} +}; -void CMLuaEvaluateOptions::OnEvaluate(CCtrlBase*) +///////////////////////////////////////////////////////////////////////////////////////// +// module entry point + +int CMPlugin::OnOptionsInit(WPARAM wParam, LPARAM) { - ptrW script(m_script.GetText()); + OPTIONSDIALOGPAGE odp = {}; + odp.flags = ODPF_BOLDGROUPS | ODPF_UNICODE | ODPF_DONTTRANSLATE; + odp.szGroup.w = LPGENW("Services"); + odp.szTitle.w = L"Lua"; - CMLuaEnvironment env(L); - env.Eval(script); - m_result.SetText(ptrW(mir_utf8decodeW(lua_tostring(L, -1)))); - lua_pop(L, 1); - env.Unload(); -} + odp.szTab.w = LPGENW("Scripts"); + odp.pDialog = new CMLuaOptionsMain(); + g_plugin.addOptions(wParam, &odp); + + odp.szTab.w = LPGENW("Evaluate"); + odp.pDialog = new CMLuaEvaluateOptions(); + g_plugin.addOptions(wParam, &odp); -/***********************************************/ + return 0; +} diff --git a/plugins/MirLua/src/options.h b/plugins/MirLua/src/options.h deleted file mode 100644 index 3e942e73a2..0000000000 --- a/plugins/MirLua/src/options.h +++ /dev/null @@ -1,47 +0,0 @@ -#pragma once - -class CMLuaOptionsMain : public CDlgBase -{ - CCtrlCheck m_popupOnError; - CCtrlCheck m_popupOnObsolete; - - CCtrlListView m_scriptsList; - CCtrlButton m_reload; - - void LoadScripts(); - -protected: - bool OnInitDialog() override; - bool OnApply() override; - - void OnScriptListClick(CCtrlListView::TEventInfo *evt); - void OnReload(CCtrlBase*); - -public: - CMLuaOptionsMain(); -}; - -/***********************************************/ - -class CMLuaEvaluateOptions : public CDlgBase -{ - lua_State *L = nullptr; - int threadRef = 0; - - CCtrlEdit m_script; - CCtrlEdit m_result; - - CCtrlCheck m_autoEval; - CCtrlButton m_evaluate; - -protected: - bool OnInitDialog() override; - bool OnApply() override; - - void OnAutoEvalChange(CCtrlBase*); - void OnEvaluate(CCtrlBase*); - -public: - CMLuaEvaluateOptions(); - ~CMLuaEvaluateOptions(); -}; diff --git a/plugins/MirLua/src/plugin.cpp b/plugins/MirLua/src/plugin.cpp index 11c1f33c42..463851669f 100644 --- a/plugins/MirLua/src/plugin.cpp +++ b/plugins/MirLua/src/plugin.cpp @@ -86,24 +86,6 @@ void CMPlugin::ReloadLuaScripts() /***********************************************/ -int CMPlugin::OnOptionsInit(WPARAM wParam, LPARAM) -{ - OPTIONSDIALOGPAGE odp = {}; - odp.flags = ODPF_BOLDGROUPS | ODPF_UNICODE | ODPF_DONTTRANSLATE; - odp.szGroup.w = LPGENW("Services"); - odp.szTitle.w = L"Lua"; - - odp.szTab.w = LPGENW("Scripts"); - odp.pDialog = new CMLuaOptionsMain(); - g_plugin.addOptions(wParam, &odp); - - odp.szTab.w = LPGENW("Evaluate"); - odp.pDialog = new CMLuaEvaluateOptions(); - g_plugin.addOptions(wParam, &odp); - - return 0; -} - int CMPlugin::OnModulesLoaded(WPARAM, LPARAM) { g_hCLibsFolder = FoldersRegisterCustomPathW(MODULENAME, LPGEN("C Libs Folder"), MIRLUA_PATHT); diff --git a/plugins/MirLua/src/stdafx.h b/plugins/MirLua/src/stdafx.h index 7f768fe342..1f56a586d1 100644 --- a/plugins/MirLua/src/stdafx.h +++ b/plugins/MirLua/src/stdafx.h @@ -49,7 +49,6 @@ class CMLuaScript; #include "module_loader.h" #include "script_loader.h" #include "variables_loader.h" -#include "options.h" #include "metatable.h" #define MODULENAME LPGEN("MirLua") -- cgit v1.2.3