summaryrefslogtreecommitdiff
path: root/plugins/MirLua/src/options.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/MirLua/src/options.cpp')
-rw-r--r--plugins/MirLua/src/options.cpp352
1 files changed, 202 insertions, 150 deletions
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<CCtrlBase>();
+ }
- 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<CCtrlBase>();
-}
+};
-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;
+}