Немодальный диалог
Немодальный диалог
Года 4 назад мне пришла в голову мысль сделать из редактора Far-а что-то вроде IDE, по мотивам Турбо-Си (Для своей основной работы, там система старше даже туробо-сей).
Результаты на скриншотах. Я сделал показ ошибок компиляции внизу окна, автокомлишен, показ аргументов функций и многое ещё, но сейчас говорю про эти 3 фичи.
идея была такая
1) поверх редактора показать диалог без бордера
2) принудительно включить текстовый курор (ведь когда диалог стартует, фар отключает курсор редактора)
3) ловить в диалоге все кнопки, нужные обрабатывать, ненужные форвардить в редактор, чтобы он продолжал функционировать.
Таким образом, были реализованы как бы хинты , которые реагируют на определенные кнопки, но фокус на себя не забирают и работать не мешают.
На скриншотах не виден текстовый курсор, но он там есть.
(В целом все получилось гладко, без всяких натяжек и скидок на то, что это не-IDE)
Далее, список ошибок компиляции. Этот диалог уже модальный. При перемещении по ошибкам, редактор позиционируется на строку с ошибкой и красит её в красный цвет. На скриншоте не видно красной строки, а почему - я написал в предыдущей теме.
Действительно, для всех этих трюков требуется принудительная прорисовка редактора (при активном диалоге). Как я уже писал, какое-то время назад прорисовку стали откладывать до завершения работы диалога.
Хочу услышать вердикт разработчиков – признают ли такие «вольности» полезными, тогда их надо будет починить или найти обходной путь. Либо признают извращением, и я пойду юзать старый билд фара.
Результаты на скриншотах. Я сделал показ ошибок компиляции внизу окна, автокомлишен, показ аргументов функций и многое ещё, но сейчас говорю про эти 3 фичи.
идея была такая
1) поверх редактора показать диалог без бордера
2) принудительно включить текстовый курор (ведь когда диалог стартует, фар отключает курсор редактора)
3) ловить в диалоге все кнопки, нужные обрабатывать, ненужные форвардить в редактор, чтобы он продолжал функционировать.
Таким образом, были реализованы как бы хинты , которые реагируют на определенные кнопки, но фокус на себя не забирают и работать не мешают.
На скриншотах не виден текстовый курсор, но он там есть.
(В целом все получилось гладко, без всяких натяжек и скидок на то, что это не-IDE)
Далее, список ошибок компиляции. Этот диалог уже модальный. При перемещении по ошибкам, редактор позиционируется на строку с ошибкой и красит её в красный цвет. На скриншоте не видно красной строки, а почему - я написал в предыдущей теме.
Действительно, для всех этих трюков требуется принудительная прорисовка редактора (при активном диалоге). Как я уже писал, какое-то время назад прорисовку стали откладывать до завершения работы диалога.
Хочу услышать вердикт разработчиков – признают ли такие «вольности» полезными, тогда их надо будет починить или найти обходной путь. Либо признают извращением, и я пойду юзать старый билд фара.
- Attachments
-
- 1.GIF (27.28 KiB) Viewed 18547 times
-
- 2.GIF (29.36 KiB) Viewed 18547 times
-
- 3.GIF (30.99 KiB) Viewed 18547 times
Skirda wrote:А еще эта...
...Hex-редактор, калькулятор, пара-тройках игрух, среда разработки в стиле борландовских текстовых сред и кучу всякого хлама...
И все это обязательно внутри кода ФАРа!
А если серьезно - в планах есть т.н. UserFrame, который позволить "рисовать" всю эту хню посредством плагинов.
Skirda wrote:andrey13, смотреть надо, опять же
Плагин дай (без сорцов).
Плагин давать нет смысла, он только в моем офисе и запустится (нужен хост-сервер системы). Но я могу сделать мелкую заготовку, такую. Вывожу по центру экрана диалог с листбоксом, в нем строки "Home", "PgDn", "Pgup", "End". При движении курсора вверх-вниз, буду командовать редактору позиционироваться как указано, и перерисовываться.
(Имхо поведение будет таким - результаты позиционирования отобразятся лишь после закрытия диалога).
Жду отмашки.
И еще, я это, паскалист (дельфи).
Спасибо
Диалог/меню в редакторе, не перехватывающий ввод
Можно ли такое сделать? То есть пользователь что-то вводит, плагин анализирует ввод, и создает менюшку, в которой кнопками Up/Down можно выбрать что-то, что вставится в текст, но весь остальной ввод идет в редактор. Если обсуждалось где-то, ткните носом плс.
- Centaur
- Posts: 1083
- Joined: Tue 05 Apr, 2005 20:09
- Location: Novosibirsk, Russia
- Been thanked: 2 times
Re: Диалог/меню в редакторе, не перехватывающий ввод
Для любой менюшки можно указать набор клавиш, которые её будут закрывать. Если указать достаточно полный набор «всех клавиш» и все клавиши, кроме собственных пунктов, передавать в редактор, то получится примерно желаемое.
Re: Диалог/меню в редакторе, не перехватывающий ввод
Спасибо, буду думать.
Пока не понял, как указать набор клавиш так, чтобы меню обрабатывало только Enter, Up, Down и (возможно) их комбинации с Ctrl, Shift, и Alt, а по всем другим нажатиям закрывалось - надо задать все клавиши из BaseDefKeyboard (за исключением перечисленных), затем задать все возможные их комбинации с флагами PKF_CONTROL, PKF_ALT и PKF_SHIFT? Как быть с KEY_CTRLALTSHIFTPRESS, KEY_CTRLALTSHIFTRELEASE,
KEY_MSWHEEL_UP, KEY_MSWHEEL_DOWN, KEY_END_FKEY, KEY_NONE, KEY_IDLE, KEY_END_SKEY? К базовым, к заданным именованными константами, полагаю, надо еще задать все алфавитно-цифровые '`', '1', '2', ...?
Пока не понял, как указать набор клавиш так, чтобы меню обрабатывало только Enter, Up, Down и (возможно) их комбинации с Ctrl, Shift, и Alt, а по всем другим нажатиям закрывалось - надо задать все клавиши из BaseDefKeyboard (за исключением перечисленных), затем задать все возможные их комбинации с флагами PKF_CONTROL, PKF_ALT и PKF_SHIFT? Как быть с KEY_CTRLALTSHIFTPRESS, KEY_CTRLALTSHIFTRELEASE,
KEY_MSWHEEL_UP, KEY_MSWHEEL_DOWN, KEY_END_FKEY, KEY_NONE, KEY_IDLE, KEY_END_SKEY? К базовым, к заданным именованными константами, полагаю, надо еще задать все алфавитно-цифровые '`', '1', '2', ...?
ProcessEditorInput
И еще, может не совсем по теме, но не хочу лишнюю ветку заводить. Я хочу сделать упрощенную возможность создания сабплагинов для обработки ProcessEditorEvent и ProcessEditorInput. По первой вопросов нет, дергаем все сабплагины и возвращаем всегда ноль. По второму - наверно надо поступать, как и внутри фара сделано, и вот это для меня вопрос. Обрабатывать сабплагины до тех пор, пока они возвращают 0 и останавливаться на том, который вернул не 0?
Re: Диалог/меню в редакторе, не перехватывающий ввод
Диалог можно сделать немодальным в фаре?DrKnS wrote:Для такого лучше брать не меню, а диалог с листбоксом.
в принципе, можно обдумать и выводить список не средствами фара, а гуевыми, но это как-то не очень, на мой взгляд. И возникает следующий вопрос - как узнать позицию курсора в редакторе в координатах не знакомест, а в оконных координатах винды? Чувствую, без изврата не выйдет.
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Re: Диалог/меню в редакторе, не перехватывающий ввод
Формально нет. Как и меню.Marty wrote:Диалог можно сделать немодальным в фаре?
Но вот это:
- в листбоксе делается пятью строками, а не перечислением сотен клавиш, как в меню.Marty wrote:чтобы меню обрабатывало только Enter, Up, Down и (возможно) их комбинации с Ctrl, Shift, и Alt, а по всем другим нажатиям закрывалось
Re: Диалог/меню в редакторе, не перехватывающий ввод
А вот с этого момента поподробнееDrKnS wrote:Но вот это:- в листбоксе делается пятью строками, а не перечислением сотен клавиш, как в меню.Marty wrote:чтобы меню обрабатывало только Enter, Up, Down и (возможно) их комбинации с Ctrl, Shift, и Alt, а по всем другим нажатиям закрывалось
Last edited by Marty on Wed 01 Apr, 2009 19:24, edited 2 times in total.