Хотя и ругают такой подход, но иногда лучше чтобы функционал зависел от интерфейса!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-ю колонку на наличие тех же "фигуристых" скобк; т.е.:
Code: Select all
{
табличная строка подменю 1
табличная строка подменю 2
табличная строка подменю n
}
4. По аналогии с ACAD'ом можно сделать отдельный раздел или файл для хранения соответствий горячих клавиш (ACCELERATORS) командам или строкам меню.
При проверках/назначениях информацию нужно брать/сохранять в этом разделе. Достоинства такого подхода:
1). В меню напротив команды справа (как это сделано практически во всех прогах) можно будет отображать зарезервированную комбинацию клавиш.
2). Не придётся для переопределения пользоваться "реусурсохакером".
----------------------------------------------------------------
UPDATED (29.07.2007): В формат добавил Disable - когда делать недоступным данный пункт меню; множественное поле.
Для этого нужно разработать "условные обозначения". Во всяком случае четверть или вообще треть пунктов меню не работает для нового документа; возможно будут и другие случаи.