+5
Completed

Hold event must cancel Release, when a button is hold

Ekaterina (head of support) 8 years ago in Applications / i3 Pro updated by Oksana (expert) 8 years ago 26

When a button is pressed, the following events happen:
Press + Release (short press)
or
Press + Hold + Release (long press)



In my opinion, in case of a long press only Press + Hold must work (Release event must be cancelled by Hold).
This will help tp set different commands for short press and long press, which is impossible now, as Release works any way.

Answer

Answer
Completed

Hello,


It has been implemented from iRidium Studio 1.0.2 and i3 pro 1.0.2

О_о... Я думал уже реализовано). Давно предлогал так сделать)
Waiting for user's reply
На форуме? Если нет в идеях, значит нет в планах..
Очень давно. Как только вышла 2.0. Главное чтобы сделали).

AMX needs to always see a button release

it is true, but when you convert TP4, you don't have a Hold event at all. If you doesn't have any actions on Hold, it is not a problem, Release will work.

Press + Hold + Release (short press) + Release (long press)

если уж делать то делать универсально ;)



Дмитрий, это вариант, но он приведет к усложенению настройки, которая касается всех пользователей. Поэтому, его необходимо обосновать. Мы видим, почему НЕ должен срабатывать Release после удержания, но, пока не видим повода для обратного поведения.

[Hold или Release] будет отрабатывать так, как сейчас отрабатвыает [Move или Release], отменяя последний.


При этом, вы сможете поймать событие Release в скриптах. Отемнятся только Actions, настроенные в макросах графического элемента, в радкторе.

Если вопрос стоит так, то вообще нет понятия Press ибо это первое и единственное зажатие кнопки а есть два Release

Short Release < time > Long Release (отпущена до или после установленного времени, нажата она будет что там что там полюбому;) )

Кнопка v1 [Press, Release] OnPress, OnRelease (по нажатию, по отжатию)
Кнопка v2 [Short (Press) Release (in time), Long (Hold) Release (after time), Short press time [1s]] OnShort(Press/Release), OnLong(Press/Release) (по отжатию до "отсечки", по отжатию после "отсечки")
Кнопка v3 [One/Two/Three (Tap) Release (in time), "Input" time [1s]] OnOneTap, OnDoubleTap, OnTrippleTap (Одинарноре, двойное, тройное нажатие (за установленный интервал времени), по истечению интервала)

Концепцию второй и третьей можно объяденить в v4, [кол-во нажиманий кнопоки за период времени + нажата и удерживается больше периода]

Cобытие Press мы в этой теме даже не упоминаем, оно, естественно, будет срабатывать всегда в момент касания кнопки.


Не существует события "нажатие во времени", Press - это мгновенное, однократное событие, после которого включается таймер, запускающий отсчет Hold Time до события Hold. Под Short press time [1s] вы подразумеваете именно Hold Time. Он уже есть, настраивается в General.

Итого, кнопка v2 в вашем варианте реализуется так:
1. по отжатию до "отсечки" - это если удерживали меньше указанного Hold Time, срабатывает команда, записанная в Release, потому что Hold сработать не успел.

2.по отжатию после "отсечки" - если удерживали >= указанного Hold Time, срабатывает команда, записанная в Hold, а Release не срабатывает
Т.е. происходит именно то, что хотелось бы - сработка разных команд до и после отсечки. А в текущей версии приложения срабатывают оба события - и до (Relese), и после отсечки (Hold).

Кнопки v1 и v2 по поведению соотвестует нашему предложению и не требуют дополнительных событий и таймеров.


Двойное и тройное нажатие отсчитывают интервал между ближайшими Press'ами на элемент. Чтобы выполнять разные действия от количества прессов, нужно вводить дополнительные вкладки настроек - т.е. события, объединить их нельзя.


Иначаьно ваше предложение было в том, что должен быть вариант, при котором срабатывают команды обоих событий: Hold + Relese. Как это можно использовать? Какая-то финализуирющая команда после отправки в цикле?


In my opinion, in case of a long press only Press + Hold must work (Release event must be cancelled by Hold).
и
Cобытие Press мы в этой теме даже не упоминаем, оно, естественно, будет срабатывать всегда в момент касания кнопки.

Надо определится :) или Press мы в этой теме даже не упоминаем или only Press + Hold must wor

У кнопки с Press + Hold + Release (long press) нету понятия Press так как оно срабатывает в обоих случаях!!! Короткое Нажатие срабатывает по Release до Hold Time а не по Press.

Тогда если расматривать Press как Release до Hold Time, а Hold как старт длинного нажатия с соответсвующей привязкой начала скрипта (цикла) и Release (HoldRelease) остановка чегото запущенного по Hold ..... всё становится на свои места

P.S. мои 5 копеек относятся не к работе Press + Hold + Release (long press) а к попытке на это навесить different commands for short press and long press


Я пишу, исходя из нашего с вами диалога. Мы обсуждали события Hold+Release, было не понятно упоминание Press без контекста.

Сформулирую иначе:

Press срабоатет в любом случае, поэтому мы его отдельно не упоминаем при разборе взаимодействия Hold/Release.


Короткое Нажатие срабатывает по Release до Hold Time

Это именно то, что описано в теме. Возможны только два сочетания событий:

1. Press > Release (короткое нажатие. сработает, если удерживать меньше Hold Time)

2. Press > Hold (длинное нажатие, сработает, если удерживать больше Hold Time)


Альтернативные команды прикрепляются именно на Hold и Release, а не на Press (!).


Внимание, вопрос:

вы всё же считаете, что должна быть возможность выполнить

Press > Hold > Release, а не только одно из указанных выше сочетаний? Или двух указанных выше сочетаний достаточно для корректной работы?


Если оно нужно, то для чего планируете использовать сочетание Press > Hold> Release?.





Сочетаний два но они другие для Press > Hold > Release:

1. Press (короткое нажатие. сработает, если удерживать меньше Hold Time)

2. Hold > Release (длинное нажатие, сработает, если удерживать больше Hold Time)

Press (OnPress)- послать одну команду
Hold (OnHold)- возможность послать команду по началу Hold или запустить цикл
Release (On(Hold)Release)- прикратить Hold или прервать цикл или послать чёт другое

ShortPress || Start LongPress -> End LongPress

2. Hold > Release


Всегда есть Press+{остальные события}.

Привязывая команду на Press мы приходим к тому, что она 100% будет выполнена, не зависимо от длины нажатия, времени удержания, сдвига пальца и других факторов. Это точно не изменится.


  • ShortPress - обрабатывается как Press+Release с командой на Release
  • Start LongPress - это сработал Rress+Hold, начала работать команда на Hold'e
  • End LongPress - этого нет. Т.к. Hold просто прекращается, а Release при этом сработать не должен, т.к. выполняет команду для ShortPress

Итого, не хватает End LongPress, в новой системе.
При этом в старой системе возможности разелить ShortPress и LongPress нет вообще, т.к. они все равно сработают вместе, если был LongPress.


Нужно: добавить End LongPress. Предположим, что он нам сильно нужен и быть должен. Чтобы не усложнять интерфейс, можно добавить "End of Hold" как подключаемую опцию к событию Hold, настривать команды прямо внутри вкладки Hold. и отображать команды в End Of Hold как подкатегорию Hold.



Вариант? Оформление пока не смотрим)

Все еще висит вопрос, где нам реально нужен End of Hold

Пример дурацкий "из прошлой жизни" особенности другого оборудования при отсылке команд IR с пульта и приложения iOs :)

У IR комманд обрезался хвостик повтора чтоб при одинарном нажатии не скакало никогда через 2 канала на тв
По нажатию Press отсылается одинарная команда IR CH+
По долгому придержанию запускается цикл IR CH+ с паузой 0.5-0.7sec
По отпусканию цикл прирывается.

Работа Однокнопочного Диммирования в KNX:
Короткое нажатие 0/1 Switch On/Off
Длинное нажатие включает внутренюю локику кнопки по HOLD (надо делать ярче или светлее) и шлёт в шину, отпускание останавливает процесс.

The one‐button dimmeing is a start stop dimming, that means when the dimming function is active a darker or brighter command is sent until the button is released again. After releasing the button a stop command is sent, which stops the dimming process.

P.S. Я незнаю где нам реально нужен End of Hold, но хуже будет если он реально понадобится а его нет;)

P.S.2 Кстати снимите IR команду с кагонибудь пульта через GC iLearn:) ПО нажатию пульт посылает команду, по удержанию повторяется только хвостик а не полностью команда, по отпусканию ....

на счет Прерывания процесса в KNX - звучит как реальный кейс! А повторение "хвостика" ИК команды изначально реализовано на стороне GC, параметр Offset (вдруг пригодится).


Резюмирую: "конец удержания" сделать нужно, но это имеет смысл только на базе новой системы срабатывания событий, к которой останется добавить опцию в виде "End of Hold".

+1

In my opinion you always should see the release event, you're releasing the button, so the event needs to be fired.

Maybe make a setting of it, if this is usefull in some cases, but by default keep it like it is please (what you see is what you get)


When a user presses a button and holding it too long (even if he didn't meant too) the release event isn't fired. That means we need to put all the hold times to a really long time, this is extra work.



Benno, thank you. "Release" event will be cancelled only if the "Hold" event has some actions preset in project. So if you doesn't use Hold event in Actions, the Release works anyway.

So you don't need to change something in the settings of all the items

+1

Ok, thank you, but still I think the release event should be fired in all cases or maybe add a new one, ReleaseAfterHold or something? Or rename this event to ReleaseAfterShortPress to make it obvious for everyone when this event is fired.

We think it should work as "Release after Move" (Move cancel the Release action). It is useful for all the real cases we found. But it will be possible to see the Release event in JS.

If you see the the reason why we have to make the separated event and how it can be used please share with us

Может так? 3 года назад предлагалось ))

Уже несколько раз пишу, почему не хотелось бы добавлять отдельное событие)
Оно усложнит настройку, при этом не давая очевидных преимуществ. При этом представление о работе событий у всех разное, только запутаем людей.


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

После выхода версии событийную систему невозможно будет изменить без потери совместимости.



Вопрос и вам: когда именно вы используете события Hold и Release на одной кнопке с привязкой экшенов на оба, в расчете на то, что Release сработает после холда, при отпускании?

Если пока не используете, но видите им применение, пожалуйста, поделитесь.

+1

что Release сработает после холда, при отпускании?

Не так.. Release - это событие включения. Hold - Второе событие на включение чего нибудь другого. Hold Release - отключение.

Чем неудобен Press?

Почти во всех интерфейсах или аппаратных устройствах отслеживается отпускание кнопки а не нажатие. Сделано это для того чтобы избежать случайных нажатий. По отпусканию мы видим что пользователь хотел нажать именно эту кнопку а не зажал пальцем экран и переместил палец на другую.


Почему нужен Hold Release?

Пример:

Есть привод. Может двигаться до крайних положений и останавливаться по концевикам.

Настраиваем на событие Realease - движение привода до остановки по концевику, в одну или в другую сторону..

На событие Hold - Движение привода пока держим кнопку.

На событие HoldRealease - Остановка привода.


К этому и пришли. End of Hold будет называться

Answer
Completed

Hello,


It has been implemented from iRidium Studio 1.0.2 and i3 pro 1.0.2