ContextMenu plugin

Discuss and announce AkelPad plugins
  • Author
  • Message
Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Тогда идея подробно

Post by VladSh »

Fr0sT wrote:
VladSh wrote: Ну, визуальная правка меню - это уже следующий этап, думаю, сейчас надо решить с названиями.
Хотя и ругают такой подход, но иногда лучше чтобы функционал зависел от интерфейса!

Рассмотрим ACAD'овский принцип построения меню; пример:

IDH_COPY [Копирование объектов] ^C^C _copy
где:
IDH_... - это у них идентификатор подсказки, которая отображается в статусбаре при наведении на опред. позицию меню курсора мыши. Эти идентификаторы хранятся в том же файле, только в другом разделе. Такой подход может пригодиться.
В квадратных скобках указывается перевод, т.е. наименование команды для пользователя.
^C^C означает, что любая предыдущая команда сбрасывается, т.е. сначала делается Esc, а потом выполняется следующая команда.
_copy - имя команды; у них не номера, а имена, т.к. имеется командная строка и набирать команды можно из неё по первым буквам - это удобно, профи так только и работают - отключают все тулбары, переходят в FullScreen-mode и вперёд...


Теперь какие идеи для AkelPad'а, примеры:

Code: Select all

COMMAND  IDN_COMMAND_0  ExecuteType  Flag  Path  Parameters  Disable
, где:

COMMAND - числовой/буквенный код команды (для команд Akel'а) или имя файла плагина/скрипта.

IDN_COMMAND_0 - наименование позиции меню, выводимое для пользователя. 0 - значение, подставляемое по умолчанию из справочника - это ComboBox; если для некоторого меню значение по умолчанию не подходит, то оно редактируется, при этом для команды с номером COMMAND создаются новый IDN_COMMAND_1. При дальнейшем использовании этой команды в др. меню в ComboBox'е будет уже 2 значения - можно будет выбирать или точно также редактировать любой из выбранных.

ExecuteType - запуск чего: команды Akel'а (Command), плагина или скрипта; соответственно возможные значения: "a", "p" или "s" - ComboBox.

Flag - использовать/не использовать галку в меню, отображающую загрузку плагина ("Использовать" актуально для плагинов, в которых одна и та же функция загружает/выгружает плагин), в зависимости от этого при программной генерации кода меню (а если писать такой интерфейс, то программная генерация будет необходима!) подставляется Call (использовать) или Exec (не использовать).

Path - путь к файлу запуска:
- для запуска команды AkelPad'а это значение игнорируется;
- для запуска плагинов, если не указывать, то автоматом при генерации использовать "%a\AkelFiles\Plugs";
- для запуска скриптов аналогично "%a\AkelFiles\Plugs\Scripts".
Если используются пути по умолчанию, то я бы ничего в эту колонку не писал. Если же это внапряг, то можно добавить доп. упр. символы, соответственно: "%a" - путь для AkelPad.exe (уже есть и используется), "%p" (= "%a" + "\AkelFiles\Plugs"), и по такому же принципу "%s".
Если же путь другой, т.е. запускаемый файл находится не в стандартных дирректориях - добавить кнопку "..." для выбора пути.

Parameters - параметры запуска скриптов, плагинов... для команд AkelPad'а это было бы тоже полезно! Отделять параметры через любой удобный для разработчика разделитель, думаю лучше всего для этого подходит "; " или ", " ну или просто пробел (это если в самих параметрах не планируется пробелов).

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

UPDATED (25.07.2007): если указывать значения в ячейках таблицы, то соответственно отпадает необходимость использования скобок, как в функциях и кавычек для указания строковых значений, что также "упрощает жизнь" обычным пользователям :)
----------------------------------------------------------------

UPDATED (26.07.2007): ещё несколько мыслей.

1. Можно при добавлении новой строки меню сразу заполнять (выбирать) ExecuteType, где на OnChange инициировать вывод диалога, если выбрано:
- "a" - отображать перечень внутренних команд AkelPad'а;
- "p" - перечень плагинов с функциями;
- "s" - перечень скриптов.
При выборе автоматом заполнять COMMAND и IDN_COMMAND_0, а для плагинов и скриптов ещё и Path.

2. При табличной структуре отличать вложенные подменю можно анализируя 1-ю колонку на наличие тех же "фигуристых" :D скобк; т.е.:

Code: Select all

{
  табличная строка подменю 1
  табличная строка подменю 2
  табличная строка подменю n
}
3. Для хранения блоков/строк меню необходимо отдельное хранилище. Именовать блоки можно по аналогии с SEPARATOR и указывать имя блока в первой колонке таблицы. Если остальные колонки (хотя бы вторая) не заполнены, это означает, что указанный идентификатор есть наименование блока меню, который нужно подставить при автоматической генерации.

4. По аналогии с ACAD'ом можно сделать отдельный раздел или файл для хранения соответствий горячих клавиш (ACCELERATORS) командам или строкам меню.
При проверках/назначениях информацию нужно брать/сохранять в этом разделе. Достоинства такого подхода:
1). В меню напротив команды справа (как это сделано практически во всех прогах) можно будет отображать зарезервированную комбинацию клавиш.
2). Не придётся для переопределения пользоваться "реусурсохакером".
----------------------------------------------------------------

UPDATED (29.07.2007): В формат добавил Disable - когда делать недоступным данный пункт меню; множественное поле.
Для этого нужно разработать "условные обозначения". Во всяком случае четверть или вообще треть пунктов меню не работает для нового документа; возможно будут и другие случаи.
Last edited by VladSh on Mon Aug 06, 2007 4:38 pm, edited 10 times in total.

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post by Fr0sT »

Поддерживаю обеими руками! Формат идеален.

Offline
Posts: 63
Joined: Sun Jun 24, 2007 4:03 pm
Contact:

Работа с диалогом настройки с пом. клавиатуры

Post by wisgest »

1) При перемещении по элементам и нажатии на кнопки с помощью клавиатуры очень часто диалог закрывается при повторном нажатии на кнопку "Показать".
Уточнение: Закрывается при нажатии клавишей "Ввод", при нажатии через "Пробел" всё в порядке.
2) При получении областью редактирования фокуса по клавише Tab выделяяется всё её содержимое. Если это можно исправить, то это нужно исправить, - как правило, не требуется каждай раз полностью переделывать редактируемое меню.
3) Мне кажется, что удобней было бы, если фокус ввода при открытии получала область редактирования (лучше с запоминанием последнего редактировавшегося меню), а не список, - сколько раз ловил себя на том, что сразу после открытия диалога хотел прокрутить/переместиться по области редактирования, а вместо этого начинали перещёлкиваться пункты списка.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Changed: tab doesn't select all contents of edit control.

Fixed: double Enter pressing on "Show" button cause dialog closing.


ContextMenu plugin v1.4

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Changed: AkelPad 3.4.0 required


ContextMenu plugin v1.5

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Fixed: ignored non-URL items in URL menu.


ContextMenu plugin v1.6

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Changed: AkelPad 3.4.2 required.
Changed: algorithm optimized.

Added: configure main menu.
Added: "-" before menu item name, means that item will not be checked or disabled.
Added: "+" before "Call" method, means that plugin will be called with autoload modification.
Added: context menu for edit control in dialog.


ContextMenu plugin v1.7

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Чтобы получить меню "Кодировки", аналогичное тому, которое присутствует во втором AkelPad'е, можно воспользоваться следующим кодом "Главного меню":

Code: Select all

"&Кодировки" Index(4)
{
  "Открыть как Windows-1251	Alt+W" Command(4409)
  "Открыть как DOS-866	Alt+D" Command(4410)
  "Открыть как КОИ8-Р	Alt+K" Command(4414)
  "Открыть как Unicode"
  {
    "UCS-2 little endian (стандартная)	Alt+L" Command(4411)
    "UCS-2 big endian	Alt+B" Command(4412)
    "UTF-8	Alt+U" Command(4413)
  }
  SEPARATOR
  "Сохранить как Windows-1251	Ctrl+Alt+W" Command(4415)
  "Сохранить как DOS-866	Ctrl+Alt+D" Command(4416)
  "Сохранить как КОИ8-Р	Ctrl+Alt+K" Command(4420)
  "Сохранить как Unicode"
  {
    "UCS-2 little endian (стандартная)	Ctrl+Alt+L" Command(4417)
    "UCS-2 big endian	Ctrl+Alt+B" Command(4418)
    "UTF-8	Ctrl+Alt+U" Command(4419)
  }
  SEPARATOR
  "Определить кодировку	Alt+F5" Command(4408)
}

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Fixed: recent files menu incorrectly filled "%f" variable.
Fixed: "Index" attribute in "Main menu" now correctly handle positive index with maximized MDI.


ContextMenu plugin v1.8

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Fixed: double message when trying to call non-existed plugin with "+Call" method.


ContextMenu plugin v1.9

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Fixed: if root item of "Main menu" isn't submenu, then item ignored.


ContextMenu plugin v2.0

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Можно добавлять менюхи в главное меню - это хорошо; :idea: возможно в последствиис помощью этого функционала можно будет корректировать главное меню целиком :)
Но дело не в этом.

Call("ContextMenu::Main", 1, N)
где N БЫЛО:
1 - меню окна редактирования;
2 - меню вкладок;
3 - меню ссылок;
4 - меню последних файлов.

Сейчас при добавлении "Главного меню" всё сдвинулось - это ИМХО некорректно.
Может для "Главного меню" можно сделать не 1, а 0?

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Переменная N не привязана к конкретным меню, а соответствует индексу элемента в ComboBox'е.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Instructor
Хорошо, откорректирую менюхи.
Но было бы неплохо впоследствии их не корректировать. Или предупреждать о необходимости - тоже пойдёт.


UPDATED:

:idea: Идея: сделать так, чтобы комбинации клавиш, которые можно дописывать в конце в менюхах

Code: Select all

Новый    Ctrl+N
чтобы в контекстных менюхах отображались так же справа, как и в основном меню.
Для этого можно использовать какой-нибудь разделитель, например вертикальную палку "|" или решётку "#".
К примеру такая запись:

Code: Select all

Новый|Ctrl+N
Просьба: если RightClick'нуть на позиции меню, в которой используется скрипт, то чтобы открывался этот скрипт на редактирование, а то сейчас выполняется действие как и по LeftClick.

Offline
Posts: 63
Joined: Sun Jun 24, 2007 4:03 pm
Contact:

Post by wisgest »

VladSh wrote: :idea: Идея: сделать так, чтобы комбинации клавиш, которые можно дописывать в конце в менюхах

Code: Select all

Новый    Ctrl+N
чтобы в контекстных менюхах отображались так же справа, как и в основном меню.
Для этого можно использовать какой-нибудь разделитель,..
Как я понял, такая возможность уже имеется: в качестве разделителя нужно использовать символ табуляции (для того, чтобы набрать символ табуляции в поле редактирования меню, нужно нажать Ctrl+Tab).
Post Reply