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

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

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

Post by t-rex » Wed 01 Apr, 2009 19:10

Latest post of the previous page:

Marty
Читай доки, смотри сорцы плагинов.

Marty
Posts: 170
Joined: Sun 29 Jan, 2006 12:29

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

Post by Marty » Wed 01 Apr, 2009 19:25

t-rex wrote:Marty
Читай доки, смотри сорцы плагинов.
Может подскажете, кто-то уже делал подобный немодалный диалог, и что читать/куда смотреть, более адресно?

User avatar
t-rex
Страшный и ужасный
Posts: 4871
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Contact:

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

Post by t-rex » Wed 01 Apr, 2009 19:28

Marty
Самый простой пример, плагин Uninstall.

Marty
Posts: 170
Joined: Sun 29 Jan, 2006 12:29

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

Post by Marty » Wed 01 Apr, 2009 20:20

t-rex wrote:Marty
Самый простой пример, плагин Uninstall.
Uninstall от Евгения Семенцова? По-моему, он вполне модальный. Единственно, там наверно можно глянуть обработку клавиатуры для списка, и закрывать/открывать диалог. Вы это имели ввиду, когда советовали посмотреть его?

User avatar
John Doe
Бюрократ
Posts: 11394
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Fri 28 Aug, 2015 15:11

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

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

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

Есть ли аналоги такого использования в каких-либо из существующих интерфейсов?
Кто-то может поделиться опытом, как это работает, и как можно организовать соответствующее АПИ?

User avatar
zg
zero-gravity
Posts: 5302
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 47 times
Contact:

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

Post by zg » Fri 28 Aug, 2015 15:55

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

User avatar
John Doe
Бюрократ
Posts: 11394
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Fri 28 Aug, 2015 16:54

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

Есть ли аналоги такого использования в каких-либо из существующих интерфейсов?
Кто-то может поделиться опытом, как это работает, и как можно организовать соответствующее АПИ?

User avatar
John Doe
Бюрократ
Posts: 11394
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Fri 28 Aug, 2015 18:04

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: 11394
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Mon 31 Aug, 2015 14:09

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

А самое ранне упоминание о немодальных диалогах здесь: viewtopic.php?p=2148#p2148 (там сказано "юзай поиск", видимо искать надо ещё в фидошной рассылке)

User avatar
John Doe
Бюрократ
Posts: 11394
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Thu 28 Sep, 2017 22:22

Свершилось (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: 5872
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 9 times
Contact:

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

Post by NightRoman » Fri 29 Sep, 2017 06:23

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

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

User avatar
NightRoman
Posts: 5872
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 9 times
Contact:

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

Post by NightRoman » Fri 29 Sep, 2017 07:13

Также, в связи с новыми возможностями, хотелось бы получать DN_GOTFOCUS и DN_KILLFOCUS для самого диалога. При переключении между окнами надо бы знать об этих событиях для полноценной работы.

User avatar
John Doe
Бюрократ
Posts: 11394
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Fri 29 Sep, 2017 09:35

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: 11394
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Fri 29 Sep, 2017 09:38

NightRoman wrote:
Fri 29 Sep, 2017 07:13
хотелось бы получать DN_GOTFOCUS и DN_KILLFOCUS для самого диалога. При переключении между окнами надо бы знать об этих событиях для полноценной работы.
Где-то на мантисе есть пожелание о получении подобных событий в общем виде, при смене окон.

User avatar
zg
zero-gravity
Posts: 5302
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 47 times
Contact:

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

Post by zg » Fri 29 Sep, 2017 09:54

NightRoman wrote:
Fri 29 Sep, 2017 06:23
Должен ли немодальный диалог автоматически закрываться при клике вне диалога? Сейчас закрывается. Может, это настраивается?
на DN_CONTROLINPUT с param1==-1 вернуть true.

User avatar
John Doe
Бюрократ
Posts: 11394
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Fri 29 Sep, 2017 10:46

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.

User avatar
zg
zero-gravity
Posts: 5302
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 47 times
Contact:

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

Post by zg » Fri 29 Sep, 2017 10:53

причём тут вообще DN_CLOSE? у меня всё правильно написано.

Post Reply

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