Code: Select all
// https://akelpad.sourceforge.net/forum/viewtopic.php?p=36974#p36974
// Version: 1.0 (2026.01.09)
// Author: dothen
//
// Description(1033): Toggles the visibility of toolbar rows or buttons.
// Description(1049): Переключает видимость рядов или кнопок панели инструментов.
//
// Remarks:
// - Плагин ToolBar не предоставляет возможности получить общее количество рядов в панели инструментов и номера видимых рядов.
// - Плагин не позволяет скрывать/показывать отдельные кнопки по состоянию "индивидуального флага".
// Этот скрипт просто дополнительный костыль.
// Номера видимых рядов можно получить из ToolBar.ini, но функция ToolBar::Main с параметром 1 не сохраняет настройки.
// Скрипт записывает/стирает в ToolBar.ini один номер ряда который указан в параметре, хотя может быть так: "1(-1),2(-2),3(-1)".
// К тому же переключение еще может быть сделано не из этого скрипта, а сохранение настроек плагин выполняет из диалога и при выгрузке.
// Т.е. в ToolBar.ini настройка рядов может быть неактуальной.
//
// Usage:
// In the main menu
//
//"ToolBar"
// {
// SET(64, If(`AkelPad.IsPluginRunning("ToolBar::Main")`))
// INCLUDE("TOOLBARROWS")
// UNSET(64)
// }
//
// In Menu ContextMenu::Show
//
// "TOOLBARROWS"
// {
// SET(128, If(`Call("Scripts::Main", 2, "ToolBarRows.js", "-row=1")`, 1, 0))
// "Main" Call("Scripts::Main", 1, "ToolBarRows.js", "-row=1 -mode=toggle")
// UNSET(128)
// SET(128, If(`Call("Scripts::Main", 2, "ToolBarRows.js", "-row=2")`, 1, 0))
// "Edit" Call("Scripts::Main", 1, "ToolBarRows.js", "-row=2 -mode=toggle")
// UNSET(128)
// SET(128, If(`Call("Scripts::Main", 2, "ToolBarRows.js", "-row=3")`, 1, 0))
// "Plugins" Call("Scripts::Main", 1, "ToolBarRows.js", "-row=3 -mode=toggle")
// UNSET(128)
// SEPARATOR
// SET(128, If(`Call("Scripts::Main", 2, "ToolBarRows.js", "-group=Prog")`, 1, 0))
// "Prog" Call("Scripts::Main", 1, "ToolBarRows.js", "-group=Prog -mode=toggle")
// UNSET(128)
// }
//
// In ToolBar
//
//SET(64, If(`Call("Scripts::Main", 2, "ToolBarRows.js", "-group=Prog")`))
//"Программирование" Menu("CODER") Icon("%a\AkelFiles\Plugs\Coder.dll", 12)
//"Отметить" Menu("MARK") Icon("%a\AkelFiles\Plugs\Coder.dll", 0)
//"Синтаксическая тема" Menu("SYNTAXTHEME") Icon("%a\AkelFiles\Plugs\Coder.dll", 4)
//"Цветовая тема" Menu("COLORTHEME") Icon("%a\AkelFiles\Plugs\Coder.dll", 5)
//UNSET(64)
//
// Arguments:
// -row - Toolbar row number.
// -mode=get - Get the state (on/off) of the specified row or button group (default).
// -mode=toggle - Toggle the display of the specified row or a button group with the given name.
// -group - Button group name. The group state is saved in the ToolBarRows.ini file.
//
// Аргументы:
// -row - Номер ряда в панели инструментов.
// -mode=get - Получить состояние (on/off) указанного ряда или группы кнопок (по умолчанию).
// -mode=toggle - Переключить отображение указанного ряда или группы кнопок с указанным именем.
// -group - Имя группы кнопок. Состояние группы сохраняется в файле ToolBarRows.ini.
var nRow = AkelPad.GetArgValue("row", 0);
var pMode = AkelPad.GetArgValue("mode", "get");
var pGroup = AkelPad.GetArgValue("group", "");
var nResult = 0;
var nValue = 0;
var pRowList;
var pNewRowList;
var aRowList;
var nIndex;
var oSet = AkelPad.ScriptSettings();
if (pGroup != "")
{
if (oSet.Begin("ToolBarRows", 0x1 /*POB_READ*/))
{
nValue = oSet.Read(pGroup, 1 /*PO_DWORD*/);
oSet.End();
}
if (pMode == "toggle")
{
nValue ^= 1;
if (oSet.Begin("ToolBarRows", 0x2 /*POB_SAVE*/))
{
oSet.Write(pGroup, 1 /*PO_DWORD*/, nValue);
oSet.End();
}
var hMainWnd = AkelPad.GetMainWnd();
var oSys = AkelPad.SystemFunction();
if (hToolbarBG = oSys.Call("user32::FindWindowEx" + _TCHAR, hMainWnd, 0, "ToolbarBG", 0))
oSys.Call("user32::PostMessage" + _TCHAR, hToolbarBG, 1124 /*AKDLL_RECREATE*/, 0, 0);
}
nResult = nValue;
AkelPad.ScriptExitCode(nResult);
WScript.Quit();
}
if (nRow <= 0)
{
AkelPad.ScriptExitCode(0);
WScript.Quit();
}
if (oSet.Begin("ToolBar", 0x21 /*POB_READ|POB_PLUGS*/))
{
pRowList = oSet.Read("RowList", 3 /*PO_STRING*/);
oSet.End();
}
aRowList = pRowList.split(",");
for (var i in aRowList)
{
if (+aRowList[i] == nRow)
{
nIndex = i;
nResult = 1;
break;
}
}
AkelPad.ScriptExitCode(nResult);
if (pMode == "get")
WScript.Quit();
if (aRowList.length == 1 && +aRowList[0] == nRow)
WScript.Quit();
if (pMode == "toggle")
{
if (nRow == 1) AkelPad.Call("ToolBar::Main", 1, "1(-1),2(-2),3(-2)");
if (nRow == 2) AkelPad.Call("ToolBar::Main", 1, "1(-2),2(-1),3(-2)");
if (nRow == 3) AkelPad.Call("ToolBar::Main", 1, "1(-2),2(-2),3(-1)");
// Для четырех рядов:
// if (nRow == 1) AkelPad.Call("ToolBar::Main", 1, "1(-1),2(-2),3(-2),4(-2)");
// if (nRow == 2) AkelPad.Call("ToolBar::Main", 1, "1(-2),2(-1),3(-2),4(-2)");
// if (nRow == 3) AkelPad.Call("ToolBar::Main", 1, "1(-2),2(-2),3(-1),4(-2)");
// if (nRow == 4) AkelPad.Call("ToolBar::Main", 1, "1(-2),2(-2),3(-2),4(-1)");
// Для пяти рядов:
// if (nRow == 1) AkelPad.Call("ToolBar::Main", 1, "1(-1),2(-2),3(-2),4(-2),5(-2)");
// if (nRow == 2) AkelPad.Call("ToolBar::Main", 1, "1(-2),2(-1),3(-2),4(-2),5(-2)");
// if (nRow == 3) AkelPad.Call("ToolBar::Main", 1, "1(-2),2(-2),3(-1),4(-2),5(-2)");
// if (nRow == 4) AkelPad.Call("ToolBar::Main", 1, "1(-2),2(-2),3(-2),4(-1),5(-2)");
// if (nRow == 5) AkelPad.Call("ToolBar::Main", 1, "1(-2),2(-2),3(-2),4(-2),5(-1)");
}
if (nResult)
{
aRowList.splice(nIndex, 1);
}
else
{
aRowList.push(nRow.toString());
aRowList.sort();
}
pNewRowList = aRowList.join();
if (oSet.Begin("ToolBar", 0x22 /*POB_SAVE|POB_PLUGS*/))
{
oSet.Write("RowList", 3 /*PO_STRING*/, pNewRowList);
oSet.End();
}