Свойство "Always On Top" для немодальных диалогов?

Хотите предложить идею нового плагина или знаете, что улучшить в существующем? Пишите сюда.
User avatar
zg
zero-gravity
Posts: 6198
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 206 times
Contact:

Свойство "Always On Top" для немодальных диалогов?

Post by zg »

Latest post of the previous page:

John Doe wrote: Mon 31 Mar, 2025 21:29Гипотетически: в каких-то случаях (и на чей-то вкус) может быть рациональней, логика проще.
я точно с человеком разговариваю? я привёл конкретно то, что будет сложнее, вы выражаетесь максимально общими категориями.
John Doe wrote: Mon 31 Mar, 2025 21:29Если выдумывать пример, то сходу приходит на ум элемент управления, отображающий несколько элементов клипбоарда.
хороший пример, и логика будет сложнее как раз у одного окна.
HaRT wrote: Mon 31 Mar, 2025 21:50Мне вот это кажется вполне достойным примером
примером чего? полезности одного диалога на все редакторы?
User avatar
John Doe
Бюрократ
Posts: 14498
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 90 times
Been thanked: 499 times
Contact:

Свойство "Always On Top" для немодальных диалогов?

Post by John Doe »

zg wrote: Mon 31 Mar, 2025 22:21 я точно с человеком разговариваю?
Именно что с человеком. Я не могу вам с достаточной уверенностью ответить заранее, до того как попробую.
zg wrote: Mon 31 Mar, 2025 22:21 хороший пример, и логика будет сложнее как раз у одного окна.
Не исключено, но вот так навскидку один диалог лично мне пока кажется рациональнее.
https://t.me/FarManager — Telegram чат
User avatar
HaRT
Moderator
Posts: 11397
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 263 times
Been thanked: 408 times

Свойство "Always On Top" для немодальных диалогов?

Post by HaRT »

zg wrote: Mon 31 Mar, 2025 22:21 примером чего? полезности одного диалога на все редакторы?
Примером одного диалога на весь Фар, в том числе все редакторы, все просмотрщики, все панели или их отсутствие. Суть в том, что содержимое диалога никак не привязано к текущему контексту Фара, важно лишь, чтобы диалог был на глазах (и заодно под рукой).
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
zg
zero-gravity
Posts: 6198
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 206 times
Contact:

Свойство "Always On Top" для немодальных диалогов?

Post by zg »

HaRT wrote: Mon 31 Mar, 2025 22:51Примером одного диалога на весь Фар, в том числе все редакторы, все просмотрщики, все панели или их отсутствие.
т.е. вы не понимаете разницы между показывать диалог везде и показывать диалог только в редакторах?
User avatar
John Doe
Бюрократ
Posts: 14498
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 90 times
Been thanked: 499 times
Contact:

Свойство "Always On Top" для немодальных диалогов?

Post by John Doe »

zg wrote: Mon 31 Mar, 2025 23:23 и показывать диалог только в редакторах?
На всякий случай уточню, что вряд ли имеет смысл делать буквально такую опцию.
На мой взгляд практичней чтобы "диалог" у себя в обработчике решал, когда ему отображаться а когда скрываться.
Развивая пример с клипбордом: показываться в редакторах (только не защищённых от записи), а также в прочих местах где возможен ввод.
https://t.me/FarManager — Telegram чат
User avatar
zg
zero-gravity
Posts: 6198
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 206 times
Contact:

Свойство "Always On Top" для немодальных диалогов?

Post by zg »

John Doe wrote: Mon 31 Mar, 2025 23:39На мой взгляд практичней чтобы "диалог" у себя в обработчике решал, когда ему отображаться а когда скрываться.
так я буквально это здесь и написал:
zg wrote: Mon 31 Mar, 2025 21:17минус, необходимость обрабатывать переключения окон
John Doe wrote: Mon 31 Mar, 2025 23:39Развивая пример с клипбордом: показываться в редакторах (только не защищённых от записи), а также в прочих местах где возможен ввод.
так в чём плюсы по сравнению с индивидуальными диалогами?
User avatar
HaRT
Moderator
Posts: 11397
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 263 times
Been thanked: 408 times

Свойство "Always On Top" для немодальных диалогов?

Post by HaRT »

zg wrote: Mon 31 Mar, 2025 23:23 вы не понимаете разницы между показывать диалог везде и показывать диалог только в редакторах?
Думаю, что всё же понимаю. Также я хорошо понимаю, что «показывать диалог только в редакторах» — это частный случай по отношению к «показывать диалог везде». И то, что я процитировал пример про управление медиаплеером, указывает, что именно более общий случай я и имел в виду. Его же я и развил в своём описании. Никаких противоречий не вижу.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
zg
zero-gravity
Posts: 6198
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 206 times
Contact:

Свойство "Always On Top" для немодальных диалогов?

Post by zg »

HaRT wrote: Tue 01 Apr, 2025 00:54Также я хорошо понимаю, что «показывать диалог только в редакторах» — это частный случай по отношению к «показывать диалог везде».
John Doe привел два примера необходимости глобальных aot окон. к первому примеру вопросов нет, прекрасный пример, а вот второй выглядит очень странно: никаких подробностей и даже без них пример выглядит очень сомнительно и закрадываются подозрения, что он добавлен исключительно для придания веса. если вы подтверждаете свою настойчивость, что это частный случай первого примера, то мои подозрения тут же превращаются в уверенность.
User avatar
HaRT
Moderator
Posts: 11397
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 263 times
Been thanked: 408 times

Свойство "Always On Top" для немодальных диалогов?

Post by HaRT »

zg wrote: Tue 01 Apr, 2025 03:18 если вы подтверждаете свою настойчивость, что это частный случай первого примера
Обращаю ваше внимание, что я написал о соотношении частное—общее не между двумя приведёнными примерами, а между двумя классами сценариев, каждый из которых был до меня проиллюстрирован одним примером. Я не утверждал, будто считаю хорошим пример для случая «во всех редакторах» (но при этом не вообще во всех окнах).
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 14498
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 90 times
Been thanked: 499 times
Contact:

Свойство "Always On Top" для немодальных диалогов?

Post by John Doe »

zg wrote: так в чём плюсы по сравнению с индивидуальными диалогами?
Тем что это по логике один "оверлей". Заменить его индивидуальными возможно, или создавая/уничтожая этот оверлей по мере переключения окон, либо прилепив по оверлею к каждому из окон.
Во втором случае логику придётся "выворачивать", это не говоря о напрасной трате ресурсов.
И ни один из этих двух вариантов не получается проще, чем если бы это был единый экземпляр оверлея.

Да, это частный случай более общего примера о медиаплеере.
Да, он сыроват, ведь я придумываю я его на ходу, но это не значит что он не имеет смысла.
Да, он изначально приведён "для веса", с целью демонстрации того что может понадобиться не просто показывать оверлей "всегда", а управлять видимостью динамически.

Уж не знаю что именно видится тут вам сомнительным.
https://t.me/FarManager — Telegram чат
User avatar
zg
zero-gravity
Posts: 6198
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 206 times
Contact:

Свойство "Always On Top" для немодальных диалогов?

Post by zg »

John Doe wrote: Tue 01 Apr, 2025 10:10Во втором случае логику придётся "выворачивать"
что это значит? при глобальном окне вы при старте его создаёте, в ExitFAR — уничтожаете. при персональном — весь тот же код, но в EE_READ/EE_CLOSE. но дополнительно в первом случае у вас ещё код показа/скрытия в EE_GOTFOCUS/EE_KILLFOCUS.
John Doe wrote: Tue 01 Apr, 2025 10:10это не говоря о напрасной трате ресурсов.
в глобальном случае у вас дополнительный код, его выполнение на каждое переключение против дополнительных диалогов создаваемых при создании и удаляемых при уничтожении. плюс глобальное окно тяжелее и в смысле памяти и в смысле производительности. мне кажется, что при реальных сценариях тут большой разницы в целом в производительности нет. но это в случае общего для всех редакторов содержимого. вы предложили содержимое буфера обмена показывать, можно ещё вообразить какой-нибудь тулбар частых действий для любителей мыши, но и всё. но всё сильно меняется, когда содержимое индивидуально для каждого редактора: хоть номера строк, какие-то пометки для строк, подсказки по коду и т.д. и тут уже в глобальном варианте при каждом переключении надо будет проделывать нетривиальную работу.
John Doe wrote: Tue 01 Apr, 2025 10:10И ни один из этих двух вариантов не получается проще, чем если бы это был единый экземпляр оверлея.
первый вариант вы придумали сами, чтобы было проще спорить. второй вариант и по коду проще и по производительности в среднем не хуже.
John Doe wrote: Tue 01 Apr, 2025 10:10Да, это частный случай более общего примера о медиаплеере.
зачем нужен частный случай, если есть общий? что он даёт нового по сравнению с общим?
John Doe wrote: Tue 01 Apr, 2025 10:10Да, он изначально приведён "для веса"
т.е. это такая манипуляция, вы посчитали, что один пример выглядит недостаточно серьёзно для обсуждения, поэтому высосали из пальца второй, правильно? а зачем? какую пользу это вам принесло?
User avatar
John Doe
Бюрократ
Posts: 14498
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 90 times
Been thanked: 499 times
Contact:

Свойство "Always On Top" для немодальных диалогов?

Post by John Doe »

zg wrote: Tue 01 Apr, 2025 20:17что это значит?
Это значит что если по задумке автора оверлей общий но (ввиду ограничений апи) реализовать он его так не может, то можно сохранив тот же пользовательский опыт, реализовать и через "персональные" оверлеи.
Для пользователя оверлей будет общий. Но внутреннюю логику придётся вывернуть не совсем естественным образом (как вы и описали).
zg wrote: Tue 01 Apr, 2025 20:17 но всё сильно меняется, когда содержимое индивидуально для каждого редактора: хоть номера строк, какие-то пометки для строк, подсказки по коду и т.д. и тут уже в глобальном варианте при каждом переключении надо будет проделывать нетривиальную работу.
Я не предлагаю убирать персональные оверлеи в пользу общих. Я исходил из того что возможны оба варианта одновременно.
zg wrote: Tue 01 Apr, 2025 20:17 первый вариант вы придумали сами, чтобы было проще спорить.
Это что наезд такой? Я оба варианта сам придумал. До этих пор я не знал что мы спорим, но если так, то с чего вдруг с первым вариантом легче.
zg wrote: Tue 01 Apr, 2025 20:17 зачем нужен частный случай, если есть общий? что он даёт нового по сравнению с общим?
zg wrote: Tue 01 Apr, 2025 20:17
John Doe wrote: Tue 01 Apr, 2025 10:10 Да, он изначально приведён "для веса",
т.е. это такая манипуляция, вы посчитали, что один пример выглядит недостаточно серьёзно для обсуждения, поэтому высосали из пальца второй, правильно? а зачем? какую пользу это вам принесло?
Манипуляция это вот так фигурно цитировать. Ответ "Зачем" второй пример уже есть в обрезанной части цитаты. Если я вообще правильно понимаю на какие примеры вы ссылаетесь.
Манипуляция это приписывать собеседнику что-то оскорбительное, вынуждая его как бы оправдываться.
Вы уже второй раз за страницу это проделываете (первый раз не со мной).
https://t.me/FarManager — Telegram чат
User avatar
zg
zero-gravity
Posts: 6198
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 206 times
Contact:

Свойство "Always On Top" для немодальных диалогов?

Post by zg »

NightRoman wrote: Sat 29 Mar, 2025 12:33На скрипте dialog=2.far.ps1 (ниже) наблюдаются некоторые неожиданные эффекты.
6458.
User avatar
zg
zero-gravity
Posts: 6198
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 206 times
Contact:

Свойство "Always On Top" для немодальных диалогов?

Post by zg »

John Doe wrote: Tue 01 Apr, 2025 21:15Но внутреннюю логику придётся вывернуть не совсем естественным образом.
не очень понимаю, что значит «вывернуть» (интуитивно догадываюсь, что что-то типа внешние циклы стали внутренними и наоборот, либо порядок выполнения поменялся на обратный, но как-то это с реальностью не стыкуется) и что значит «естественным»? не могли бы вы более формально это всё объяснить? чтобы вам проще было, я написал простой пример показа содержимого буфера обмена для индивидуальных aot (работает на последней сборке):

Code: Select all

F=far.Flags
items={{"DI_TEXT",0,0,9,0,0,0,0,0,""}}
dialogs={}
timer=far.Timer 5000,->for _,dialog in pairs dialogs do far.SendDlgMessage dialog,F.DM_SETTEXT,1,(mf.clip 0)

Event
  group:'ExitFAR'
  action:->timer\Close!

Event
  group:"EditorEvent"
  action:(id,Event)->
    if Event==F.EE_CLOSE
      far.DialogFree dialogs[id]
      dialogs[id]=nil
    elseif Event==F.EE_GOTFOCUS and not dialogs[id]
      einfo=editor.GetInfo id
      dialogs[id]=far.DialogInit win.Uuid'c83affff-a10f-4dce-896b-087593f7e69d',einfo.WindowSizeX-10,einfo.WindowSizeY,einfo.WindowSizeX-1,einfo.WindowSizeY,nil,items,(bit64.bor F.FDLG_NODRAWSHADOW,F.FDLG_STAY_ON_TOP)
и пример, который мог бы работать, если бы в фаре была реализованы глобальные aot:

Code: Select all

F=far.Flags
items={{"DI_TEXT",0,0,9,0,0,0,0,0,""}}
dialog=far.DialogInit win.Uuid'c83affff-a10f-4dce-896b-087593f7e69d',0,0,0,10,nil,items,(bit64.bor F.FDLG_NODRAWSHADOW,F.FDLG_STAY_ON_TOP_GLOBAL)
far.SendDlgMessage dialog,F.DM_SHOWDIALOG,0
timer=far.Timer 5000,->far.SendDlgMessage dialog,F.DM_SETTEXT,1,(mf.clip 0)

Event
  group:'ExitFAR'
  action:->
    timer\Close!
    far.DialogFree dialog

Event
  group:"EditorEvent"
  action:(id,Event)->
    if Event==F.EE_GOTFOCUS and not dialogs[id]
      einfo=editor.GetInfo id
      far.SendDlgMessage dlg,F.DM_MOVEDIALOG,1,{X:einfo.WindowSizeX-10,Y:einfo.WindowSizeY}
      far.SendDlgMessage dialog,F.DM_SHOWDIALOG,1
    elseif Event==F.EE_KILLFOCUS
      far.SendDlgMessage dialog,F.DM_SHOWDIALOG,0
хотелось бы понять, какой код из второго примера неестественно вывернулся в какой код из первого примера.
John Doe wrote: Tue 01 Apr, 2025 21:15Я не предлагаю убирать персональные оверлеи в пользу общих.
не предлагаете.
John Doe wrote: Tue 01 Apr, 2025 21:15Я исходил из того что возможны оба варианта одновременно.
так и есть. более того, они практически независимы.
John Doe wrote: Tue 01 Apr, 2025 21:15Это что наезд такой?
нет.
John Doe wrote: Tue 01 Apr, 2025 21:15Я оба варианта сам придумал.
второй вариант очевиден, если из первого примера кода убрать таймер, получится код, которым я тестировал работу будущего 6454 в редакторе. а первый пример — эмуляция глобального окна одним локальным. и естественно он во всём проигрывает глобальному варианту.
John Doe wrote: Tue 01 Apr, 2025 21:15Ответ "Зачем" второй пример уже есть в обрезанной части цитаты.
вы про этот кусок:
John Doe wrote: Tue 01 Apr, 2025 10:10 Да, он изначально приведён "для веса", с целью демонстрации того что может понадобиться не просто показывать оверлей "всегда", а управлять видимостью динамически.
? если да, то тут два утверждения:
  1. пример — для веса. любой пример, приведённый для веса — манипуляция.
  2. необходимость управления видимостью. аот — это диалог. там есть DM_SHOWDIALOG уже 20+ лет, управляйте сколько влезет, не понимаю, зачем на этом вообще внимание заострять?
User avatar
John Doe
Бюрократ
Posts: 14498
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 90 times
Been thanked: 499 times
Contact:

Свойство "Always On Top" для немодальных диалогов?

Post by John Doe »

zg wrote: Fri 04 Apr, 2025 04:39 не очень понимаю, что значит «вывернуть»
Я не знаю какой такой скрытый глубокий смысл вы пытаетесь найти в том моём утверждении, но боюсь его нет.
Речь о ситуации, где чтобы реализовать наблюдаемый пользователем "как бы" единый оверлей, разработчику надо "извернуться", и применить вместо этого несколько независимых оверлеев (которые с точки зрения пользователя будут одним и тем же).
Реализовать "прямо" в этом смысле - это предоставить диалогу быть хранилищем состояния. Как и в ваших примерах.
С "вывертами" - это делать независимые оверлеи, и синхронизировать их с общим состоянием.
Это что касается обсуждения выше. Приведённые вами примеры кода это уже новая информация, и я их тоже рассмотрю чуть позже.
zg wrote: Fri 04 Apr, 2025 04:39 пример — для веса. любой пример, приведённый для веса — манипуляция.
Манипуляция предполагает какую-то подмену, целенаправленный обман.
Рассматривая какие-либо примеры, можно утверждать что они неудачные, и аргументировать почему именно, это конструктивный путь.
А можно вместо этого обозвать собеседника дураком и манипулятором, это неконструктивный путь. Для выбора подобной линии поведения рациональные основания я представить себе затрудняюсь.
zg wrote: Fri 04 Apr, 2025 04:39 аот — это диалог. там есть DM_SHOWDIALOG уже 20+ лет, управляйте сколько влезет, не понимаю, зачем на этом вообще внимание заострять?
Однако ж это совсем не обычный диалог: там допустимы не все виды элементов, туда приходят не все события, и он не образует окно.
Для меня это пока что скорее чёрный ящик. Документации нет. Работает ли например для него ProcessDialogEvent? Не очевидно.

Вам могло показатья что я хочу тип оверлея "над всеми редакторами", я пояснил что это не так. Всё, копать некуда.
Для вас пример не добавляет ничего нового, по сравнению с примером о медиаплеере? Ну и отлично, спорить не о чем.
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 14498
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 90 times
Been thanked: 499 times
Contact:

Свойство "Always On Top" для немодальных диалогов?

Post by John Doe »

Посмотрел код.
zg wrote: Fri 04 Apr, 2025 04:39 хотелось бы понять, какой код из второго примера неестественно вывернулся в какой код из первого примера.
В каком смысле "неестественно" я уже пояснил.
По существу: первый пример использует ненужные неотображаемые (но обновляемые) оверлеи.
Предположим, избыточным расходом ресурсов можно пренебречь.
Но код в текущем виде не достаточен - при переключении в редактор несколько секунд я наблюдаю чистое поле, поэтому изменил так:
Далее: что будет при небольшом усложнении ТЗ, показывать оверлей при наличии любого поля ввода (т.е. в панелях, в диалогах)?
И наконец: я вижу свой гипотетический виджет буфера обмена многострочным, перемещаемым, сворачиваемым. Полагаю, это всё возможно и с раздельными оверлеями, но получится как-то совсем не прямо.
https://t.me/FarManager — Telegram чат
Post Reply

Return to “Предложения и идеи”