Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Здесь обсуждается всё, что касается макросов.
Post Reply
User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 8 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by Xerox »

Предыстория вопроса
Современный мир характеризуется большим количеством больших экранов.
А также длинными именами файлов, и прочими "многа букав"
В то же время, размер диалоговых окон в ФАРе, не менялся десятилетиями,
обладая слишком малой величиной, чтобы полностью соответствать современным вызовам.
Более того, не было никакой возможности расширить окошки до приемлимых размеров даже вручную.
Но эти эти горести остались в далеком темном прошлом (смахивает слезу)
поскольку сейчас у нас есть Автоматический Раздвигатель Окон!

Итак, дамы и господа, я рад представить Вам эту первую публичную, но уже полностью рабочую версию.
Думаю что будут добавлены новые возможности, и устранены некоторые недоделки.
Пока не могу все подробно расписать, но если вкратце:

1.) По умолчанию размер диалога/меню/списка будет = ширина экрана минус отступы в две символьные позиции
(это поменялось в последующих версиях, далее изначально дается в оригинальном размере)
1.1.) Режим отображения "по умолчанию" "сейчас "оригинальный", можно изменить на строчке 60
2.) По клавише Ф5 на диалоге происходит его переключение в другие "стандартные" размеры по циклу, в том числе и в оригинальный размер
2.1.) .. так что если вдруг что вышло криво, то с помощью Ф5 всегда можно вернуться в оригинальную композицию
3.) Кaк бонус еще можно использовать Ctrl(+Alt)+<стрелки> для измения размеров и даже сдвигания по вертикали
4.) Высотой диалога я не манипулирую, только шириной, потому что вроде как незачем

Планирую развивать этот продукт, в теле скрипта написан список планов,
в том числе написать комментариев в скрипте, что зачем там, улучшить с помошью вас, дорогих специалистов.
Конечно же, буду рад услышать Ваши замечания и пожелания, мoи Дорогие Читатели!
Mногое зависит и от вашей широкой поддержки, вместе мы свернем и горы, и Фары!
Спасибо за внимание (кланяется с достоинством)

PS
В продолжение этой темы, послужившей мне вдохновением:
Изменение размеров диалоговых окон

Скрипт здесь:
dialog-resizer.lua.7z
убраны ненужные "ахтунги" в скрипте
(3.77 KiB) Downloaded 28 times
(остается для истории, и/или если кому-то вдруг понравится больше)

Скрипт улучшенная версия:
dialog-resizer.lua.20191212.7z
(3.63 KiB) Downloaded 21 times
(остается для истории, и/или ..)
* Ctrl-Alt-<Arrows> - gives 2D moving around (with remembering the position)
* Alt-<Left|Right> - manual width resizing (remembered also)
* If the user applied the one of the commands above, by this:
created the "custom" layout state, remembered,
and added as an additional state to pre-existing states original/margin/percent/full/(+optional custom)
* Do not rezied automaticall by default, only by triggering F5, and if triggered - remembered per dialog
BTW, the default state can be changed in the body of the script

Скрипт улучшенная исправленная версия:
dialog-ReXiZeR.lua.20191213.7z
(3.36 KiB) Downloaded 12 times
* F5 (sizing switch mode) put back to macro handling, so it will not fall out or interfere with other macros
* Cleaned out dead code, refactoring
* Brandname is changed to ReXiZeR!
* .. so probably by these certain bugs fixed :-)

Script fixed again, bug reported by citRix:
dialog-ReXiZeR.lua.20191213-2100.7z
(3.36 KiB) Downloaded 17 times
* Fixed reported bug, when the changed by user text after resizing discarded (to original text)
* Even more refactoring and dead code cleaning

Скрипт доработанная версия:
dialog-ReXiZeR.lua.20191214-1400.7z
(3.53 KiB) Downloaded 14 times
* Added wish to align dialogs in "full" and "percent" modes, when it originally belongs to the left or right panel
* Added commented out regular expression for macro keys, which suggested by citRix
* Traditionally code cleaning

Скрипт неплохая в общем версия:
viewtopic.php?p=158081#p158081
Mostly by citRix suggestions implemented:
* Fixed MainMenu handling
* Fixed complex dialog layouts with unadjacent elements
* Added ignoring custom dialog controls (DI_USERCONTROL=255), as in Review plugin color dialogs
* Added adjustment to dialog height in some cases, as in CodePages dialog menu

Скрипт последняя версия:
viewtopic.php?p=158368#p158368
Last edited by Xerox on Fri 03 Jan, 2020 08:52, edited 47 times in total.

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 8 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by Xerox »

Latest post of the previous page:

citRiks wrote:
Fri 20 Dec, 2019 08:13
а по AltRight возвращаются к прежнему размеру и увеличиваются далее.
Ой. А вы что ли не знали, что по АльтРайт можно и расширять?
citRiks wrote:
Fri 20 Dec, 2019 08:13
А вот при тех же действиях в дисковым меню и в Главным меню наблюдаются очевидные артефакты
Проверял все это, сейчас еще раз проверил - вроде все ОК.
Моя ФАРа версия 3.0.0.5511 x64.
Нужна иллюстрация ваша значит действительно.

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 8 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by Xerox »

Собираюсь на этих выходных испоравить наползания элементов.
Там надо просто при раширяниях проверять не стоит ли на пути другой элемент.
Eсли стоит, то не лезть дальше.
Таким образом расширятся до стенки будут только крайние правые.
Другая альтернатива - пропорциональное расширение всех, - возможно красивше, но чуть сложнее..
Last edited by Xerox on Fri 20 Dec, 2019 14:19, edited 1 time in total.

buniak_a_h
Posts: 1399
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 96 times
Been thanked: 108 times
Contact:

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by buniak_a_h »

Xerox wrote:
Fri 20 Dec, 2019 14:18
Другая альтернатива - пропорциональное расширение всех, - возможно красивше, но чуть сложнее..
Делал такое в GUI. Ничего не сложнее. И Left, и Width умножаете на к-т. Проще, чем проверять, не налезло ли. Тем более, что элемент справа в массиве может быть где угодно (и раньше, и намного позже анализируемого)

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 8 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by Xerox »

buniak_a_h, ну я могу и согласиться наверное, как и доверить вам такое допиливание может?

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 8 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by Xerox »

buniak_a_h wrote:
Fri 20 Dec, 2019 14:32
элемент справа в массиве может быть где угодно
может, да, надо проверять все элементы.
Да, в потенциале может получиться многовато итераций, но можно (и нетрудно) сделать это эффективно

buniak_a_h
Posts: 1399
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 96 times
Been thanked: 108 times
Contact:

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by buniak_a_h »

Xerox wrote:
Fri 20 Dec, 2019 14:52
но можно (и нетрудно) сделать это эффективно
Непросто. Есть ещё многострочные элементы (LIST, BOX-ы, TEXT). Не так всё просто … А ещё есть элементы, у которых не заполнен (== 0) X2 (текст, например, обходится без этого).
Xerox wrote:
Fri 20 Dec, 2019 14:48
доверить вам такое допиливание
Не, не интересно … Я уже выпендрился - сделал wrap для элементов, не влезающих по ширине.
Кстати, есть заметочка(если Вы этот момент учитываете - звиняйте, я не смотрел Ваш скрипт):
надо как-то смотреть на флаг FDLG_SMALLDIALOG: в зависимости от него принимать решение о координатах BOX-а, который на весь диалог . И не только BOX-ы: ещё и тексты с DIF_SEPARATOR… . Это - так, к слову. Я собирался когда-то такой сервис делать, а потом не стал.
Last edited by buniak_a_h on Fri 20 Dec, 2019 15:02, edited 1 time in total.

buniak_a_h
Posts: 1399
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 96 times
Been thanked: 108 times
Contact:

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by buniak_a_h »

Last edited by Guest on Fri 20 Dec, 2019 15:12, edited 1 time in total.
Reason: Спрятан офтопик

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 8 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by Xerox »

buniak_a_h wrote:
Fri 20 Dec, 2019 15:01
Кстати, есть заметочка(если Вы этот момент учитываете -
не предусматривал я ничего, и Ваше сотрудничество очень ценно для нашего проекта.
Посмотрим по ходу дела, пока я не буду предусматривать ничего кроме самой геометрии элемента.
учитывая что есть и "прозрачные" (кроме границы) элементы-рамки
FDLG_SMALLDIALOG
В связи с этим, а где это есть multi-line text box (=FDLG_SMALLDIALOG) ?
Он должне быть непрозрачный конечно тогда, но мне казалось что ФАРе такого элемента нет в принципе

Ну давайте сделаем так, пока киньте мне где сидят диалоги с такими проблемными флагами (FDLG_SMALLDIALOG, DIFF), буду на них тестить
Last edited by Xerox on Fri 20 Dec, 2019 15:16, edited 2 times in total.

buniak_a_h
Posts: 1399
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 96 times
Been thanked: 108 times
Contact:

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by buniak_a_h »

Xerox wrote:
Fri 20 Dec, 2019 15:12
В связи с этим, а где это есть multi-line text box (=FDLG_SMALLDIALOG) ?
Я вопроса не понял. Это - две не связанные темы.
multi-line text получается при DI_TEXT с ключом DIF_WORDWRAP. Причем сколько строк в реали этот текст занимает - надо считать. Представьте, что Y1 у него = 5, а Вы пытаетесь определить, как надо ограничить элемент DI_EDIT с Y1=7 . Далее всё зависит от содержимого текста. Если он поместился в две строки (5 и 6), то ограничивать edit не требуется, а если не поместился - надо.
Теперь про ключ FDLG_SMALLDIALOG. Если этот флаг есть, то надо, чтоб "основная рамка" (рамка вокруг диалога) была от X1=1 до X2=w-1 (w - ширина диалога), а если нет - то от X1=4 до X2=w-4 ( или 3? точно не помню). Иначе DI_TEXT с флагом DIF_SEPARATOR вылезет или не дотянется до рамки.
Не знаю, учитываете ли Вы при расчёте координат "исключения":
1. если у элемента DI_TEXT с флагом DIF_SEPARATOR указано X1=-1, то сдвигать (менять X1) нельзя. Это означает "текст по центру".
2. Касаемо как раз "основной рамки": X1 менять нельзя, а X2 должно соответствовать ширине диалога с учётом обсужденного флага …

citRiks
Posts: 174
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 28 times
Been thanked: 21 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by citRiks »

Xerox wrote:
Fri 20 Dec, 2019 14:15

Code: Select all

citRiks писал(а): ↑
    Пт 20 дек, 2019 10:13
    а по AltRight возвращаются к прежнему размеру и увеличиваются далее.

Ой. А вы что ли не знали, что по АльтРайт можно и расширять?
Это просто я так подтверждал, что в этом случае всё нормально. Извиняюсь, если по контексту непонятно изложил.
Xerox wrote:
Fri 20 Dec, 2019 14:15

Code: Select all

citRiks писал(а): ↑
    Пт 20 дек, 2019 10:13
    А вот при тех же действиях в дисковым меню и в Главным меню наблюдаются очевидные артефакты

Проверял все это, сейчас еще раз проверил - вроде все ОК.
Моя ФАРа версия 3.0.0.5511 x64.
Нужна иллюстрация ваша значит действительно
Последовательные . Фар 5530 x86 и в x64 тоже.
Last edited by citRiks on Fri 20 Dec, 2019 16:39, edited 1 time in total.

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 8 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by Xerox »

citRiks,
Ааа, не, ну это опять загонять в ноль ширину диалога и удивлятся.
Hy, будет диалог ноль, элементы куда-нибудь уедут или исчезнут,
но все равно. переключаясь по Ф5 попадаем в адекватное сосстояние

citRiks
Posts: 174
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 28 times
Been thanked: 21 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by citRiks »

citRiks wrote:
Fri 20 Dec, 2019 08:13
В 5530 диалоги "Копировать" (F5), "Переместить" (F6), "Создание папки" (F7), меню "Экраны" (F12) и другие текущей вресией сабжевого скрипта по AltLeft плавно уменьшаются до 0-рамера (и, похоже, что и далее в минус тоже), а по AltRight возвращаются к прежнему размеру и увеличиваются далее.

А вот при тех же действиях в дисковым меню и в Главным меню наблюдаются очевидные артефакты
артефактов, наблюдаемых в дисковом меню (в предыдущий пост картинки не поместились). Это наблюдается и под КонЭму и без.

Насчёт дискового меню полагаю, что такое поведение связано с его заполнением плагином "Редактор меню дисков (Disk menu)". Потому что в свежей ночной сборке без добавлений это не воспроизводтся, а только в присутствии добавлений плагином.

citRiks
Posts: 174
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 28 times
Been thanked: 21 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by citRiks »

Xerox wrote:
Fri 20 Dec, 2019 16:42
переключаясь по Ф5 попадаем в адекватное сосстояние
Да, это самое главное. Выше приведённые два примера запоминаются до перезагрузки. Желательно бы, чтобы запоминание позиции было не автоматическим, а произвольным, т.е. по команде пользователя. И действовало бы до последующей смены/отмены, т.е. переходило бы от сессии к сессии Фара.

User avatar
HaRT
Moderator
Posts: 9238
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 93 times
Been thanked: 197 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by HaRT »

citRiks wrote:
Fri 20 Dec, 2019 16:57
Желательно бы, чтобы запоминание позиции было не автоматическим, а произвольным, т.е. по команде пользователя.
В каких сценариях безусловное запоминание выставленной пользователем геометрии диалога нежелательно?
Фар есть инструмент, а не нянька. © 2009 DrKnS

citRiks
Posts: 174
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 28 times
Been thanked: 21 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by citRiks »

HaRT wrote:
Fri 20 Dec, 2019 17:10
В каких сценариях безусловное запоминание выставленной пользователем геометрии диалога нежелательно?
В любых, когда слишком пережал или разжал размеры диалога/меню и затем впопыхах или просто необдуманно прешёл к другим оперециям. Включая и самые крайние случаи, которые приведены постами выше.

User avatar
HaRT
Moderator
Posts: 9238
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 93 times
Been thanked: 197 times

Динамическое или заданное изменение размеров ВСЕХ диалогов, меню, списков в зависимости от размера консоли, а ткж сдвиг

Post by HaRT »

citRiks wrote:
Fri 20 Dec, 2019 17:26
затем впопыхах или просто необдуманно прешёл к другим оперециям
Мне кажется, ориентироваться на такой сценарий неоправданно. В гораздо большей доле случаев пользователю будет как раз удобно, чтобы тщательно выверенные и руками выставленные размеры сохранялись и без явной команды. Если работать с компьютером впопыхах и необдуманно, то размеры диалогов — это меньшая из проблем.
Фар есть инструмент, а не нянька. © 2009 DrKnS

Post Reply

Return to “Обсуждение макросов”