diff --git a/enc/changelog b/enc/changelog index 4ab272ea96..cd222e59c1 100644 --- a/enc/changelog +++ b/enc/changelog @@ -1,4 +1,8 @@ -t-rex 2012-11-05 01:19:38+02:00 - build +MZK 2025-01-25 20:59:20-05:00 + +1. gh-802: Описание Menu.HorizontalAlignment. + +t-rex 2012-11-05 01:19:38+02:00 1. Переделка всех tools на работу с enc_rus3.work diff --git a/enc/enc_lua/macroapi_manual.en.tsi b/enc/enc_lua/macroapi_manual.en.tsi index 7ce7650351..d6ce21723b 100644 --- a/enc/enc_lua/macroapi_manual.en.tsi +++ b/enc/enc_lua/macroapi_manual.en.tsi @@ -2239,8 +2239,9 @@ mtime=3607109038 #_ #_**Properties:** #_ -#_ Id: string (GUID) -#_ Value: string +#_ HorizontalAlignment: number +#_ Id: string (GUID) +#_ Value: string #_ #_**Functions:** #_ @@ -2255,6 +2256,7 @@ mtime=3607109038 #_{filterstr}: http://api.farmanager.com/ru/macro/macrocmd/prop_func/menus.html#Menu.FilterStr #_{filter}: http://api.farmanager.com/ru/macro/macrocmd/prop_func/menus.html#Menu.Filter #_{getvalue}: http://api.farmanager.com/ru/macro/macrocmd/prop_func/menus.html#Menu.GetValue +#_{horizontalalignment}: http://api.farmanager.com/ru/macro/macrocmd/prop_func/menus.html#Menu.HorizontalAlignment #_{id}: http://api.farmanager.com/ru/macro/macrocmd/prop_func/menus.html#Menu.Info.Id #_{itemstatus}: http://api.farmanager.com/ru/macro/macrocmd/prop_func/menus.html#Menu.ItemStatus #_{select}: http://api.farmanager.com/ru/macro/macrocmd/prop_func/menus.html#Menu.Select diff --git a/enc/enc_lua/macroapi_manual.pl.tsi b/enc/enc_lua/macroapi_manual.pl.tsi index 14bfd2147c..ec366fa8eb 100644 --- a/enc/enc_lua/macroapi_manual.pl.tsi +++ b/enc/enc_lua/macroapi_manual.pl.tsi @@ -2238,8 +2238,9 @@ mtime=3607109038 #_ #_**Właściwości:** #_ -#_ Id: łańcuch (GUID) -#_ Value: łańcuch +#_ HorizontalAlignment: liczba +#_ Id: łańcuch (GUID) +#_ Value: łańcuch #_ #_**Funkcje:** #_ @@ -2254,6 +2255,7 @@ mtime=3607109038 #_{filterstr}: http://api.farmanager.com/ru/macro/macrocmd/prop_func/menus.html#Menu.FilterStr #_{filter}: http://api.farmanager.com/ru/macro/macrocmd/prop_func/menus.html#Menu.Filter #_{getvalue}: http://api.farmanager.com/ru/macro/macrocmd/prop_func/menus.html#Menu.GetValue +#_{horizontalalignment}: http://api.farmanager.com/ru/macro/macrocmd/prop_func/menus.html#Menu.HorizontalAlignment #_{id}: http://api.farmanager.com/ru/macro/macrocmd/prop_func/menus.html#Menu.Info.Id #_{itemstatus}: http://api.farmanager.com/ru/macro/macrocmd/prop_func/menus.html#Menu.ItemStatus #_{select}: http://api.farmanager.com/ru/macro/macrocmd/prop_func/menus.html#Menu.Select diff --git a/enc/enc_lua/macroapi_manual.ru.tsi b/enc/enc_lua/macroapi_manual.ru.tsi index 8e22c22e9c..276c13602d 100644 --- a/enc/enc_lua/macroapi_manual.ru.tsi +++ b/enc/enc_lua/macroapi_manual.ru.tsi @@ -2234,8 +2234,9 @@ mtime=3607109106 #_ #_**Свойства:** #_ -#_ Id: string (GUID) -#_ Value: string +#_ HorizontalAlignment: number +#_ Id: string (GUID) +#_ Value: string #_ #_**Функции:** #_ @@ -2250,6 +2251,7 @@ mtime=3607109106 #_{filterstr}: http://api.farmanager.com/ru/macro/macrocmd/prop_func/menus.html#Menu.FilterStr #_{filter}: http://api.farmanager.com/ru/macro/macrocmd/prop_func/menus.html#Menu.Filter #_{getvalue}: http://api.farmanager.com/ru/macro/macrocmd/prop_func/menus.html#Menu.GetValue +#_{horizontalalignment}: http://api.farmanager.com/ru/macro/macrocmd/prop_func/menus.html#Menu.HorizontalAlignment #_{id}: http://api.farmanager.com/ru/macro/macrocmd/prop_func/menus.html#Menu.Info.Id #_{itemstatus}: http://api.farmanager.com/ru/macro/macrocmd/prop_func/menus.html#Menu.ItemStatus #_{select}: http://api.farmanager.com/ru/macro/macrocmd/prop_func/menus.html#Menu.Select diff --git a/enc/enc_rus/meta/defs/macroopcode.html b/enc/enc_rus/meta/defs/macroopcode.html index ea7db6ba9f..62cdacb621 100644 --- a/enc/enc_rus/meta/defs/macroopcode.html +++ b/enc/enc_rus/meta/defs/macroopcode.html @@ -1173,6 +1173,11 @@

MACROOPCODE

0x80844 Menu.Info.Id + + MCODE_V_MENU_HORIZONTALALIGNMENT + 0x80845 + Menu.HorizontalAlignment + diff --git a/enc/enc_rus/meta/macro/macrocmd/prop_func/menus.html b/enc/enc_rus/meta/macro/macrocmd/prop_func/menus.html index c2b48d0a61..10a8c4ff6c 100644 --- a/enc/enc_rus/meta/macro/macrocmd/prop_func/menus.html +++ b/enc/enc_rus/meta/macro/macrocmd/prop_func/menus.html @@ -21,7 +21,8 @@

Свойства и функции для работы с меню и спи меню пользователя (UserMenu), меню выбора диска (Disks).

Под списками понимается: список автодополнения (AutoCompletion), -и различные открытые списки в диалогах (Dialog) - List box / Combo box / History.

+различные открытые списки в диалогах (Dialog) - List box / Combo box / History, +а также список всех найденных строк (FindAll) в редакторе (Editor).

Далее в тексте "меню" и "списки" не разделяются, и упоминаются под общим названием "меню".

@@ -42,6 +43,21 @@

Свойства

String строковое представление идентификатора текущего меню + + Menu.HorizontalAlignment + Number +

горизонтальное выравнивание пунктов меню:

+ + + + + + + + + +
ЗначениеОписание
0пункты меню не выравнены
1все пункты меню выравнены налево
2все пункты меню выравнены направо
4все пункты меню выравнены по аннотациям, т.е., по найденному образцу в списке всех найденных строк (FindAll) в редакторе (Editor)
-1оператор вызван не для меню
+ Меню выбора диска ОператорТипОписание diff --git a/far/changelog b/far/changelog index f976775938..c0f6a8c770 100644 --- a/far/changelog +++ b/far/changelog @@ -1,3 +1,8 @@ +-------------------------------------------------------------------------------- +MZK 2025-01-25 20:59:20-05:00 - build 6422 + +1. gh-802: Macro API to report VMenu alignment state. Part 2: Plumbing and Lua API. + -------------------------------------------------------------------------------- drkns 2025-01-22 18:11:36+00:00 - build 6421 diff --git a/far/dialog.cpp b/far/dialog.cpp index 31bf6d2a35..0a4149e544 100644 --- a/far/dialog.cpp +++ b/far/dialog.cpp @@ -2287,6 +2287,7 @@ long long Dialog::VMProcess(int OpCode,void *vParam,long long iParam) case MCODE_V_MENU_VALUE: case MCODE_F_MENU_FILTER: case MCODE_F_MENU_FILTERSTR: + case MCODE_V_MENU_HORIZONTALALIGNMENT: { const auto str = static_cast(vParam); diff --git a/far/macro.cpp b/far/macro.cpp index bb1acc6f62..6afeeb8e1d 100644 --- a/far/macro.cpp +++ b/far/macro.cpp @@ -313,6 +313,7 @@ static_assert(MCODE_V_HELPTOPIC == 0x80841); // Help.Topic static_assert(MCODE_V_HELPSELTOPIC == 0x80842); // Help.SelTopic static_assert(MCODE_V_MENU_VALUE == 0x80843); // Menu.Value static_assert(MCODE_V_MENUINFOID == 0x80844); // Menu.Info.Id +static_assert(MCODE_V_MENU_HORIZONTALALIGNMENT == 0x80845); // Menu.HorizontalAlignment // для диалога назначения клавиши struct DlgParam diff --git a/far/macroapi.cpp b/far/macroapi.cpp index b30d3afc89..04fd233890 100644 --- a/far/macroapi.cpp +++ b/far/macroapi.cpp @@ -1206,6 +1206,23 @@ void KeyMacro::CallFar(intptr_t CheckCode, FarMacroCall* Data) return api.PassValue(tmpVar); } + + case MCODE_V_MENU_HORIZONTALALIGNMENT: + { + long long Result = -1; + + const auto CurArea = GetArea(); + + if (IsMenuArea(CurArea) || CurArea == MACROAREA_DIALOG) + { + if (CurrentWindow) + { + Result = CurrentWindow->VMProcess(CheckCode); + } + } + + return api.PassValue(Result); + } } } diff --git a/far/macroopcode.hpp b/far/macroopcode.hpp index ff8de8b027..1172b4abdf 100644 --- a/far/macroopcode.hpp +++ b/far/macroopcode.hpp @@ -307,6 +307,7 @@ enum MACRO_OP_CODE MCODE_V_MENU_VALUE, // Menu.Value MCODE_V_MENUINFOID, // Menu.Info.Id + MCODE_V_MENU_HORIZONTALALIGNMENT, // Menu.HorizontalAlignment }; #endif // MACROOPCODE_HPP_57E7AB95_BB74_4575_9054_B2137FAD4CED diff --git a/far/vbuild.m4 b/far/vbuild.m4 index d2d7b16717..50db73a95c 100644 --- a/far/vbuild.m4 +++ b/far/vbuild.m4 @@ -1 +1 @@ -6421 +6422 diff --git a/far/vmenu.cpp b/far/vmenu.cpp index 90239fa84b..c84dc05a2b 100644 --- a/far/vmenu.cpp +++ b/far/vmenu.cpp @@ -194,8 +194,6 @@ enum class item_hscroll_policy // Everything is relative to menu_layout::TextArea::first (Left edge). class vmenu_horizontal_tracker { - enum class alignment { Left, Right, Annotation }; - struct bulk_update_scope_guard { NONCOPYABLE(bulk_update_scope_guard); @@ -206,6 +204,8 @@ class vmenu_horizontal_tracker }; public: + enum class alignment { Left, Right, Annotation }; + void clear() { *this = {}; } void add_item(int const ItemHPos, int const ItemLength, int const ItemAnnotationPos) @@ -253,8 +253,9 @@ class vmenu_horizontal_tracker add_item(NewItemHPos, ItemLength, ItemAnnotationPos); } - int left_boundary() const noexcept { return m_LBoundary; } - int right_boundary() const noexcept { return m_RBoundary; } + int get_left_boundary() const noexcept { return m_LBoundary; } + int get_right_boundary() const noexcept { return m_RBoundary; } + std::optional get_alignment() const noexcept { return m_StrayItems ? std::nullopt : std::optional{ m_Alignment }; } auto get_debug_string() const { @@ -1515,7 +1516,22 @@ long long VMenu::VMProcess(int OpCode, void* vParam, long long iParam) strId = uuid::str(MenuId); return std::bit_cast(UNSAFE_CSTR(strId)); } - + case MCODE_V_MENU_HORIZONTALALIGNMENT: + { + if (const auto alignment{ m_HorizontalTracker->get_alignment() }) + { + switch (*alignment) + { + case vmenu_horizontal_tracker::alignment::Left: + return 1; + case vmenu_horizontal_tracker::alignment::Right: + return 2; + case vmenu_horizontal_tracker::alignment::Annotation: + return 4; + } + } + return 0; + } } return 0; @@ -2353,7 +2369,7 @@ bool VMenu::ShiftAllItemsHPos(const int Shift) const auto TextAreaWidth{ CalculateTextAreaWidth() }; if (TextAreaWidth <= 0) return false; - const auto AdjustedShift{ adjust_hpos_shift(Shift, m_HorizontalTracker->left_boundary(), m_HorizontalTracker->right_boundary(), TextAreaWidth)}; + const auto AdjustedShift{ adjust_hpos_shift(Shift, m_HorizontalTracker->get_left_boundary(), m_HorizontalTracker->get_right_boundary(), TextAreaWidth)}; if (!AdjustedShift) return false; const auto Policy{ CheckFlags(VMENU_ENABLEALIGNANNOTATIONS) ? item_hscroll_policy::unbound : item_hscroll_policy::bound_stick_to_left }; diff --git a/plugins/luamacro/_globalinfo.lua b/plugins/luamacro/_globalinfo.lua index 0f3ae1befa..a00ff8463f 100644 --- a/plugins/luamacro/_globalinfo.lua +++ b/plugins/luamacro/_globalinfo.lua @@ -1,7 +1,7 @@ function export.GetGlobalInfo() return { - Version = { 3, 0, 0, 864 }, - MinFarVersion = { 3, 0, 0, 6380 }, + Version = { 3, 0, 0, 865 }, + MinFarVersion = { 3, 0, 0, 6422 }, Guid = win.Uuid("4EBBEFC8-2084-4B7F-94C0-692CE136894D"), Title = "LuaMacro", Description = "Far macros in Lua", diff --git a/plugins/luamacro/api.lua b/plugins/luamacro/api.lua index b0658813f8..52aa3dd395 100644 --- a/plugins/luamacro/api.lua +++ b/plugins/luamacro/api.lua @@ -297,8 +297,9 @@ Menu = { } SetProperties(Menu, { - Id = function() return MacroCallFar(0x80844) end, - Value = function() return MacroCallFar(0x80843) end, + HorizontalAlignment = function() return MacroCallFar(0x80845) end, + Id = function() return MacroCallFar(0x80844) end, + Value = function() return MacroCallFar(0x80843) end, }) -------------------------------------------------------------------------------- diff --git a/plugins/luamacro/changelog b/plugins/luamacro/changelog index 5fc2d37600..783e199f37 100644 --- a/plugins/luamacro/changelog +++ b/plugins/luamacro/changelog @@ -1,3 +1,7 @@ +MZK 2025-01-25 20:59:20-05:00 - build 865 + +1. gh-802: Macro API to report VMenu alignment state: Menu.HorizontalAlignment. + shmuel 2025-01-23 00:39:05+02:00 - build 864 1. LuaFAR: a temporary workaround in processing timer events. diff --git a/plugins/luamacro/luafar/version.h b/plugins/luamacro/luafar/version.h index 094684b168..a435daf1bc 100644 --- a/plugins/luamacro/luafar/version.h +++ b/plugins/luamacro/luafar/version.h @@ -1,3 +1,3 @@ #include -#define PLUGIN_BUILD 864 +#define PLUGIN_BUILD 865 diff --git a/plugins/luamacro/macrotest.lua b/plugins/luamacro/macrotest.lua index d89e2ca400..eb096488f3 100644 --- a/plugins/luamacro/macrotest.lua +++ b/plugins/luamacro/macrotest.lua @@ -1130,6 +1130,7 @@ function MT.test_Menu() assert_str(Menu.Value) assert_eq(Menu.Id, far.Guids.PluginsMenuId) assert_eq(Menu.Id, "937F0B1C-7690-4F85-8469-AA935517F202") + assert_num(Menu.HorizontalAlignment) Keys("Esc") assert_func(Menu.Filter)