Тема: HK Framework
Показать сообщение отдельно
Старый 03.08.2009, 00:21   #1  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1234 (44) ++++++++
Регистрация: 11.04.2008
HK Framework
Содержание:
  1. HK Framework - что это такое
  2. Как пользоваться
  3. Как добавить новый HK
  4. Базовая комплектация HK Framework
  5. Недостатки
  6. Инсталляция, совместимость
  7. Спасибо

HK Framework - что это такое:
  • HK Framework это инструмент, реализующий функциональность горячих клавиш в MS DAX. Особенностью HK Framework является то, что он не использует внешние компоненты (DLL, ActiveX) и ограничивается только XPO.
  • HK Framework позволяет назначать горячие клавиши для трех областей: Редактор X++, AOТ и глобально, для всего приложения.
  • HK Framework позволяет легко и быстро добавлять новую функциональность и вешать на неё свою комбинацию горячих клавиш. Принцип добавления такой же как и в EditorScripts.

Как пользоваться:

В тексте буду использовать сокращение HK (Hot key или Горячая клавиша).
Комбинации HK настраивается в форме HKSetup. По-умолчанию, форма вызывается нажатием "Ctrl + ~", либо запуском класса HKManager прямо из АОТ.

Описание полей формы:
  • Поля "Key 1", "Key 2", "Key 3" задают комбинацию клавиш.
  • Поля "Action type" и "Action\Element name" определяют назначение HK и область его действия. Возможны следующие комбинации:
    1. "AOT action" - если HK работает в AOT. При этом поле "Action\Element name" лукапится по методам класса HKAOT (методы-обработчики для АОТ)
    2. "Editor action" - если HK работает в редакторе X++. При этом поле "Action\Element name" лукапится по методам класса CLS HKEditor (методы-обработчики для Редактора X++)
    3. "Editor script" - аналогично "Editor action", но поле "Action\Element name" лукапится по методам стандартного класса EditorScripts. Т.е. HK можно повесить на стандартные скрипты редактора.
    4. "Open form", "Open table", "RunClass", "RunJob" - позволяет по HK запустить форму, таблицу, класс, джоб. При этом, в поле "Action\Element name" лукапятся по формам, таблицам, классам, джобам соответственно.
  • Флаг "Enabled" отключает текущую HK.
  • Флаг "Enable hotkeys" отключает все HK.
  • Кнопка "Default" задает исходные настройки HK.

Как добавить новый HK:
  • Если нужно добавить HK для запуска формы\класса\таблицы*\джоба то достаточно лишь создать запись в форме HKSetup, в соответствии с настройками, описанными выше.
  • Если нужно добавить HK для АОТ или редактора X++, то необходимо:
    1. Создать новый метод-обработчик** HK в классе HKAOT или HKEditor, в зависимости от того, где будет работать новый HK.
    2. Создать новую запись в форме HKSetup и выбрать в поле "Action\Element name"
      созданный обработчик.
    3. Закрыть форму кнопкой "OK"***.

* - под запуском таблицы понимается открытие её в обозревателе.
** - примеры методов-обработчиков можно посмотреть в умомянутых классах.
*** - Форма HKSetup представляет собой диалог, поэтому все изменения вступают в силу только после нажатия "OK".

Базовая комплектация HK Framework:

Для удобства, существующую функциональность, уже входящую в состав HK Framework буду называть плагинами.
  • aot2project: плагин для управление проектами разработки. Назначение - быстрое добавление по HK редактируемых элементов АОТ (можно добавлять сразу из редактора X++) в заранее указанный проект и проставление комментариев в ходе редактирования элементов. По "Alt+F3" настраивается имя проекта в АОТ, его описание и формат комментариев. Далее, по кнопке "Ctrl+K" (В АОТ либо в редакторе), текущий элемент добавляется в заранее указанный проект. При этом, в проекте создается нужная подгруппа для элемента а также соблюдается порядок сортировки, аналогичный дереву АОТ; для АОТ поддерживается multiSelect. По кнопкам "Ctrl+1", "Ctrl+2", "Ctrl+3" в редакторе X++ проставляется открывающий, простой и закрывающий комментарии соответственно.
  • aotJump (AOT action, Ctrl+J): Плагин для быстрого "скольжения" по элементам АОТ. С помощью клавиши Ctrl+J можно "скользить" по следующим цепочкам\шагам (каждый элемент АОТ открывается новое окно АОТ):
    • Класс --> Класс родитель --> Класс родитель --> ... --> Базовый класс
    • TableField --> EDT --> EDT родитель --> EDT родитель --> ... --> Базовый EDT --> [ENUM]
    • MenuItemButton --> MenuItem --> Класс\Форма\Отчет, в зависимости от типа MenuItem.
    • Menu --> MenuItem
    • FormDataSource --> Table\View
    • уже не помню всех цепочек
  • checkBestPractice (AOT action, Ctrl+B). Плагин проверяет текущий элемент на соответствие рекомендациям BestPractice
  • copy2clipboard (AOT action, Ctrl+C). Плагин копирует имя текущего элемента АОТ в буфер обмена. Поддерживается multiSelect.
  • tableBrowser (AOT action, Ctrl+O). Плагин открывает текущую таблицу в обозревателе
  • openTableBrowser (Editor action, Ctrl+Ноль) Плагин открывает таблицу в обозревателе на которой установлен курсор в редакторе X++
  • openNewWindow (Editor action, Ctrl+O) Плагин открывает элелемент АОТ в новом окне. Распознавание идет не по имени, а по типу.

Все HK, приведенные в описаниях плагинов можно переназначить в на уровне пользовательского интерфейса в форме HKSetup.
Самое главное - запомнить одну горячую клавишу - "Ctrl+~". По ней откроется форма HKSetup, где всегда можно увидеть весь список HK.

Недостатки:

- HK Framework не использует внешние компоненты (DLL, ActiveX). Вследствие этого, он не перекрывает стандартные горячие клавиши. Т.е. если Вы назначите какой-то HK, который пересекается со стандартным, то стандартный HK отработает параллельно. Это накладывает ограничение на набор возможных комбинаций клавиш, который вы захотите использовать. Некоторые комбинации клавиш вообще не работают. Например, любая комбинация с клавишей ALT в редакторе X++ не работает (удобно использовать Ctrl). В общем, к процессу назначения новой горячей клавиши нужно подойти творчески
- детектирование комбинации клавиш несколько отличается от стандартного перехвата. Здесь важен момент одновременного нажатия клавиш, в то время как в стандарте достаточно быстрой последовательности нажатия. Поэтому для некоторых пользователей чувствительность может показаться недостаточной.

Инсталляция:

Данная версия тестировалась на DAX 4.0, 5.0.
Для 3-ки нужно чуть подпилить. В скором времени адаптирую.

Инсталляция очень проста - две простых модификации стандартных методов:
\Classes\ClassFactory\formRunClassOnClient:

X++:
client static FormRun formRunClassOnClient(Args args)
{
    SysSetupFormRun sysSetupFormRun;
;

    // HK "Hot key framework", evo 30.07.2009 -->
    if (args && args.name() == formstr(SysEditorGotoLine))
    {
        return HKManager::editorCatchObject(args);
    }
    // HK "Hot key framework", evo 30.07.2009 <--

    sysSetupFormRun = SysSetupFormRun::construct(args);
    return sysSetupFormRun;
}
\Classes\Info\onEventGoingIdle:
X++:
client static FormRun formRunClassOnClient(Args args)
{
    SysSetupFormRun sysSetupFormRun;
;

    // HK "Hot key framework", evo 30.07.2009 -->
    if (args && args.name() == formstr(SysEditorGotoLine))
    {
        return HKManager::editorCatchObject(args);
    }
    // HK "Hot key framework", evo 30.07.2009 <--

    sysSetupFormRun = SysSetupFormRun::construct(args);
    return sysSetupFormRun;
}
Рекомендуется данные модификации сделать аккуратно и вручную, причем ТОЛЬКО после импорта и компиляции всех остальных элементов HKFramework. Данные классы живут в RunTime приложения, со всеми вытекающими...

Спасибо:

Спасибо за внимание. Надеюсь, большое количество букв не сильно утомило и HK Framework для кого-нибудь окажется полезным.
Вложения
Тип файла: xpo PrivateProject_HKFramework_1_0.xpo (217.6 Кб, 686 просмотров)
За это сообщение автора поблагодарили: AlGol (1), denny (1), Logger (15), Denicce (1), andrewK (1), konopello (3), Link (1), Kolja (1), madm (1), Stainless (1), alex55 (1), _scorp_ (4), SRF (3), JeS (1), Eaglet (1), Silphidae (1), pedrozzz (1), Dumfag (1).