Корневые теги KeyBinding задают условия для срабатывания спектрум кнопки, которая задается аттрибутом Key.
Есть несколько вариантов:
1) Простой биндинг 1-а кнопка PC на 1-ну кнопку Spectrum'а:
Код:
<KeyBinding Key="D2" Condition="D2" />
В данном случае условие простое - нажатие одной кнопки, поэтому его можно задать сразу аттрибутом Condition тега
KeyBinding. Аттрибут Condition может принимать названия кнопок PC клавиатуры, определенные enum'ом ZXMAK2.Host.Entities.Key.
В приведенном выше примере, кнопка "2" спектрума (Key="D2") напрямую привязывается к кнопке "2" PC клавиатуры (Condition="D2").
2) Чуть более сложный вариант, нажатие любой из нескольких кнопок PC клавиатуры приводят к нажатию кнопки спектрума:
Код:
<KeyBinding Key="D5">
<Condition Key="D5"/>
<Condition Key="LeftArrow"/>
</KeyBinding>
В данном случае, условие содержит несколько вариантов, поэтому задается не аттрибутом, а отдельными тегами внутри тега KeyBinding. Из первой строчки примера видно что мы задаем условие для нажатия кнопки "5" спектрума:
Код:
<KeyBinding Key="D5">
Далее следует перечень условий при любом из которых кнопка спектрума будет нажата - это нажатие кнопок "5" или "LeftArrow" (стрелка влево):
Код:
<Condition Key="D5"/>
<Condition Key="LeftArrow"/>
все условия Condition в KeyBinding работают по ИЛИ, т.е. если любое из них выполнилось, то сработает биндинг для кнопки спектрума "5".
В теге
Condition также можно задать аттрибут IsPressed, который по умолчанию равен True, т.е. означет что условие срабатывает по нажатию кнопки. Можно прописать это явно:
Код:
<Condition Key="LeftArrow" IsPressed="True"/>
Соответственно, если прописать IsPressed="False", то условие будет срабатывать, если кнопка не нажата. Но для простых условий - это бесполезный флаг.
3) Сложный биндинг, позволяет задать набор условий, каждое из которых должно выполниться для срабатывания биндинга.
Сложные условия биндинга задаются тегом
MultiCondition.
Этот тег может содержать внутри себя набор тегов Condition.
Условие MultiCondition срабатывает только если все под-условия Condition внутри MultiCondition выполняются.
Пример:
Код:
<KeyBinding Key="D7">
<Condition Key="D7"/>
<Condition Key="UpArrow"/>
<MultiCondition>
<Condition Key="RightShift" IsPressed="False"/>
<Condition Key="Apostrophe"/>
</MultiCondition>
</KeyBinding>
В данном примере кнопка спектрума "7" будет нажата, в любом из следующих случаев:
- нажата кнопка "7" PC клавиатуры;
- нажата кнопка "UpArrow" PC клавиатуры;
- нажата кнопка "Apostrophe" PC клавиатуры, но при этом кнопка "RightShift" PC клавиатуры не нажата.
Вот, вобщем-то этого достаточно, чтобы настроить клавиатуру под себя :smile:
PS: На самом деле MultiCondition может кроме Condition содержать также вложенные MultiCondition внутри себя. Но думаю это бесполезно. Стоит еще отметить, что условия проверяются в рантайме, т.е. количество условий и их сложнасть, в какой-то степени влияет на скорость эмуляции. Но для современных машин это не критично. Все проверки для дефолтного конфига занимают примерно 0.00001 сек и выполняются один раз в кадр.
PPS: для Profi и Quorum и Sprinter биндинги не работают, они по прежнему пока используют свои старые клавиатуры. Это связано с тем что у этих моделей свои дополнительные кнопки. Для них видимо прийдется сделать отдельные конфиги.
[свернуть]