Page 1 of 6

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

Posted: Mon 09 Apr, 2007 08:33
by andrey13
Года 4 назад мне пришла в голову мысль сделать из редактора Far-а что-то вроде IDE, по мотивам Турбо-Си (Для своей основной работы, там система старше даже туробо-сей).

Результаты на скриншотах. Я сделал показ ошибок компиляции внизу окна, автокомлишен, показ аргументов функций и многое ещё, но сейчас говорю про эти 3 фичи.

идея была такая
1) поверх редактора показать диалог без бордера
2) принудительно включить текстовый курор (ведь когда диалог стартует, фар отключает курсор редактора)
3) ловить в диалоге все кнопки, нужные обрабатывать, ненужные форвардить в редактор, чтобы он продолжал функционировать.


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

Далее, список ошибок компиляции. Этот диалог уже модальный. При перемещении по ошибкам, редактор позиционируется на строку с ошибкой и красит её в красный цвет. На скриншоте не видно красной строки, а почему - я написал в предыдущей теме.


Действительно, для всех этих трюков требуется принудительная прорисовка редактора (при активном диалоге). Как я уже писал, какое-то время назад прорисовку стали откладывать до завершения работы диалога.


Хочу услышать вердикт разработчиков – признают ли такие «вольности» полезными, тогда их надо будет починить или найти обходной путь. Либо признают извращением, и я пойду юзать старый билд фара.

Posted: Mon 09 Apr, 2007 18:11
by Skirda
andrey13, смотреть надо, опять же :)
Плагин дай (без сорцов).

Posted: Mon 09 Apr, 2007 19:25
by OCTAGRAM
По слухам, предвидится перестройка диалоговой системы.

Менять тогда придётся

Posted: Mon 09 Apr, 2007 19:35
by t-rex
OCTAGRAM
Ya chto to ne slyishal takih sluhov.

Posted: Tue 10 Apr, 2007 07:35
by OCTAGRAM
Skirda wrote:А еще эта...
...Hex-редактор, калькулятор, пара-тройках игрух, среда разработки в стиле борландовских текстовых сред и кучу всякого хлама...
И все это обязательно внутри кода ФАРа!
:crazy:

А если серьезно - в планах есть т.н. UserFrame, который позволить "рисовать" всю эту хню посредством плагинов.

Posted: Tue 10 Apr, 2007 07:36
by andrey13
Skirda wrote:andrey13, смотреть надо, опять же :)
Плагин дай (без сорцов).

Плагин давать нет смысла, он только в моем офисе и запустится (нужен хост-сервер системы). Но я могу сделать мелкую заготовку, такую. Вывожу по центру экрана диалог с листбоксом, в нем строки "Home", "PgDn", "Pgup", "End". При движении курсора вверх-вниз, буду командовать редактору позиционироваться как указано, и перерисовываться.

(Имхо поведение будет таким - результаты позиционирования отобразятся лишь после закрытия диалога).

Жду отмашки.
И еще, я это, паскалист (дельфи).


Спасибо

Posted: Tue 10 Apr, 2007 08:54
by Skirda
OCTAGRAM, к диалогам это не имеет никакого отношения.

andrey13, выкладывай свою заготовку, тока опиши подробно что и как...

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

Posted: Sat 28 Mar, 2009 21:11
by Marty
Можно ли такое сделать? То есть пользователь что-то вводит, плагин анализирует ввод, и создает менюшку, в которой кнопками Up/Down можно выбрать что-то, что вставится в текст, но весь остальной ввод идет в редактор. Если обсуждалось где-то, ткните носом плс.

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

Posted: Sun 29 Mar, 2009 08:53
by Centaur
Для любой менюшки можно указать набор клавиш, которые её будут закрывать. Если указать достаточно полный набор «всех клавиш» и все клавиши, кроме собственных пунктов, передавать в редактор, то получится примерно желаемое.

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

Posted: Wed 01 Apr, 2009 18:30
by Marty
Спасибо, буду думать.

Пока не понял, как указать набор клавиш так, чтобы меню обрабатывало только 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', ...?

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

Posted: Wed 01 Apr, 2009 18:37
by DrKnS
Для такого лучше брать не меню, а диалог с листбоксом.

ProcessEditorInput

Posted: Wed 01 Apr, 2009 18:46
by Marty
И еще, может не совсем по теме, но не хочу лишнюю ветку заводить. Я хочу сделать упрощенную возможность создания сабплагинов для обработки ProcessEditorEvent и ProcessEditorInput. По первой вопросов нет, дергаем все сабплагины и возвращаем всегда ноль. По второму - наверно надо поступать, как и внутри фара сделано, и вот это для меня вопрос. Обрабатывать сабплагины до тех пор, пока они возвращают 0 и останавливаться на том, который вернул не 0?

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

Posted: Wed 01 Apr, 2009 18:49
by Marty
DrKnS wrote:Для такого лучше брать не меню, а диалог с листбоксом.
Диалог можно сделать немодальным в фаре?
в принципе, можно обдумать и выводить список не средствами фара, а гуевыми, но это как-то не очень, на мой взгляд. И возникает следующий вопрос - как узнать позицию курсора в редакторе в координатах не знакомест, а в оконных координатах винды? Чувствую, без изврата не выйдет.

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

Posted: Wed 01 Apr, 2009 19:00
by DrKnS
Marty wrote:Диалог можно сделать немодальным в фаре?
Формально нет. Как и меню.
Но вот это:
Marty wrote:чтобы меню обрабатывало только Enter, Up, Down и (возможно) их комбинации с Ctrl, Shift, и Alt, а по всем другим нажатиям закрывалось
- в листбоксе делается пятью строками, а не перечислением сотен клавиш, как в меню.

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

Posted: Wed 01 Apr, 2009 19:08
by Marty
DrKnS wrote:Но вот это:
Marty wrote:чтобы меню обрабатывало только Enter, Up, Down и (возможно) их комбинации с Ctrl, Shift, и Alt, а по всем другим нажатиям закрывалось
- в листбоксе делается пятью строками, а не перечислением сотен клавиш, как в меню.
А вот с этого момента поподробнее ;)