Немодальный диалог

Место, где разработчики плагинов могут поделиться своим опытом.
User avatar
t-rex
Страшный и ужасный
Posts: 4910
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Been thanked: 8 times
Contact:

Re: Диалог/меню в редакторе, не перехватывающий ввод

Post by t-rex »

Latest post of the previous page:

Marty
Читай доки, смотри сорцы плагинов.
Marty
Posts: 170
Joined: Sun 29 Jan, 2006 12:29

Re: Диалог/меню в редакторе, не перехватывающий ввод

Post by Marty »

t-rex wrote:Marty
Читай доки, смотри сорцы плагинов.
Может подскажете, кто-то уже делал подобный немодалный диалог, и что читать/куда смотреть, более адресно?
User avatar
t-rex
Страшный и ужасный
Posts: 4910
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Been thanked: 8 times
Contact:

Re: Диалог/меню в редакторе, не перехватывающий ввод

Post by t-rex »

Marty
Самый простой пример, плагин Uninstall.
Marty
Posts: 170
Joined: Sun 29 Jan, 2006 12:29

Re: Диалог/меню в редакторе, не перехватывающий ввод

Post by Marty »

t-rex wrote:Marty
Самый простой пример, плагин Uninstall.
Uninstall от Евгения Семенцова? По-моему, он вполне модальный. Единственно, там наверно можно глянуть обработку клавиатуры для списка, и закрывать/открывать диалог. Вы это имели ввиду, когда советовали посмотреть его?
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Немодальный диалог

Post by John Doe »

Тоже хочу немодальные диалоги.
"Изврат" из первого поста понятен, но предлагаю обсудить как бы это по-честному реализовать в АПИ.

Сейчас DialogRun возвращает управление только после закрытия диалога, очевидно что с немодальными надо возвращать управление сразу.
Если диалог немодальный, то логично работать с ним как и с прочими Экранами, переключаться по CtrlTab и т.п.

Но! Идея из первого поста предполагает что диалог не имея фокуса ввода всё-таки обрабатывает очередь сообщений.
Такое вообще реально легализовать? Или это уже будет не диалог?

Есть ли аналоги такого использования в каких-либо из существующих интерфейсов?
Кто-то может поделиться опытом, как это работает, и как можно организовать соответствующее АПИ?
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Немодальный диалог

Post by zg »

добавить диалогу немодальность можно уже сейчас. что из этого получится, другой вопрос. в планах есть, с не очень высоким приоритетом.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Немодальный диалог

Post by John Doe »

Интересны комментарии по второму вопросу:
John Doe wrote: Идея из первого поста предполагает что диалог не имея фокуса ввода всё-таки обрабатывает очередь сообщений.
Такое вообще реально легализовать? Или это уже будет не диалог?

Есть ли аналоги такого использования в каких-либо из существующих интерфейсов?
Кто-то может поделиться опытом, как это работает, и как можно организовать соответствующее АПИ?
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Немодальный диалог

Post by John Doe »

John Doe wrote: диалог не имея фокуса ввода всё-таки обрабатывает очередь сообщений.
Упс, ложная посылка.
Всё может быть ровно наоборот: очередь обрабатывается в ProcessEditorInputW, и при необходимости какие-то нажатия направляются в наш немодальный диалог. Диалог очевидно должен обладать свойством show_on_top (http://bugs.farmanager.com/view.php?id=3517).

Плюс, ещё один обработчик в ProcessEditorEventW будет следить за потерей фокуса редактором, и прятать диалоги при необходимости.
Правда возможности по отслеживанию активного окна пока что в АПИ ограничены.

Ещё одно ограничение, официально есть только ProcessEditorInputW, а значит в других областях обработать нажатия проблематично...

P.S.
Возможности использования не ограничиваются примером из первого поста.
На немодальных диалогах можно делать фоновые индикаторы прогресса, тултипы, нотификации с таймаутом, какие-нибудь тулбары, списки автодополнения чего угодно.

Конечно всё это как-то делалось и раньше, но хочется по-честному.
Last edited by John Doe on Sun 08 Oct, 2017 17:11, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Немодальный диалог

Post by John Doe »

Нашёл аналогичное обсуждение Диалог/меню в редакторе, не перехватывающий ввод (влил сюда).
И ещё одно связанное тут: http://forum.farmanager.com/viewtopic.php?f=7&t=5267

А самое ранне упоминание о немодальных диалогах здесь: http://forum.farmanager.com/viewtopic.php?p=2148#p2148 (там сказано "юзай поиск", видимо искать надо ещё в фидошной рассылке)
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Немодальный диалог

Post by John Doe »

Свершилось (5047):

Code: Select all

r15175 | z-g | 2017-09-28 19:28:17 +0300 (Чт, 28 сен 2017) | 3 lines
1. если в DialogInit указать флаг FDLG_NONMODAL, то создастся и сразу запустится немодальный диалог.
   DialogRun и DialogFree для такого диалога указывать не нужно. при закрытии диалог автоматически уничтожается.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Немодальный диалог

Post by NightRoman »

John Doe wrote: Thu 28 Sep, 2017 22:22Свершилось (5047
Это хорошая новость, открывается много новых возможностей и удобств для пользователя.

Должен ли немодальный диалог автоматически закрываться при клике вне диалога? Сейчас закрывается. Может, это настраивается? Для немодального диалога в некоторых случаях хотелось бы переключения в окно, где кликнули, а не закрытия диалога.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Немодальный диалог

Post by NightRoman »

Также, в связи с новыми возможностями, хотелось бы получать DN_GOTFOCUS и DN_KILLFOCUS для самого диалога. При переключении между окнами надо бы знать об этих событиях для полноценной работы.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Немодальный диалог

Post by John Doe »

NightRoman wrote: Fri 29 Sep, 2017 06:23Сейчас закрывается.
Кто сказал?
Работают F12 и CtrlTab.

Чего ещё пока нет: режима "Always on top".

Update:
http://bugs.farmanager.com/view.php?id=3517
Last edited by John Doe on Sun 08 Oct, 2017 17:12, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Немодальный диалог

Post by John Doe »

NightRoman wrote: Fri 29 Sep, 2017 07:13хотелось бы получать DN_GOTFOCUS и DN_KILLFOCUS для самого диалога. При переключении между окнами надо бы знать об этих событиях для полноценной работы.
Где-то на мантисе есть пожелание о получении подобных событий в общем виде, при смене окон.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Немодальный диалог

Post by zg »

NightRoman wrote: Fri 29 Sep, 2017 06:23Должен ли немодальный диалог автоматически закрываться при клике вне диалога? Сейчас закрывается. Может, это настраивается?
на DN_CONTROLINPUT с param1==-1 вернуть true.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Немодальный диалог

Post by John Doe »

zg wrote: Fri 29 Sep, 2017 09:54на DN_CONTROLINPUT с param1==-1 вернуть true.

Вероятно FALSE.

И при этом программно переключиться в окно под текущим*.
Хотя и это не совсем верно, ведь клик может быть в области совсем другого окна.

[*] При этом порядок окон у нас в АПИ не определён (и как по мне, то лучше обратный).
Last edited by John Doe on Fri 29 Sep, 2017 10:54, edited 2 times in total.
Post Reply

Return to “Разработка плагинов”