diff --git a/Essentials Core/PepperDashEssentialsBase/Touchpanels/Keyboards/HabaneroKeyboardController.cs b/Essentials Core/PepperDashEssentialsBase/Touchpanels/Keyboards/HabaneroKeyboardController.cs
index b69f9887..5e068c12 100644
--- a/Essentials Core/PepperDashEssentialsBase/Touchpanels/Keyboards/HabaneroKeyboardController.cs
+++ b/Essentials Core/PepperDashEssentialsBase/Touchpanels/Keyboards/HabaneroKeyboardController.cs
@@ -36,6 +36,8 @@ namespace PepperDash.Essentials.Core.Touchpanels.Keyboards
public Action HideAction { get; set; }
+ CTimer BackspaceTimer;
+
///
///
///
@@ -88,7 +90,8 @@ namespace PepperDash.Essentials.Core.Touchpanels.Keyboards
TriList.SetSigTrueAction(2947, () => Press('.'));
TriList.SetSigTrueAction(2948, () => Press('@'));
TriList.SetSigTrueAction(2949, () => Press(' '));
- TriList.SetSigTrueAction(2950, Backspace);
+ TriList.SetSigHeldAction(2950, 500, StartBackspaceRepeat, StopBackspaceRepeat, Backspace);
+ //TriList.SetSigTrueAction(2950, Backspace);
TriList.SetSigTrueAction(2951, Shift);
TriList.SetSigTrueAction(2952, NumShift);
TriList.SetSigTrueAction(2953, Clear);
@@ -204,6 +207,28 @@ namespace PepperDash.Essentials.Core.Touchpanels.Keyboards
char Y(int i) { return new char[] { 'y', 'Y', '6', '^' }[i]; }
char Z(int i) { return new char[] { 'z', 'Z', ',', ',' }[i]; }
+ ///
+ /// Does what it says
+ ///
+ void StartBackspaceRepeat()
+ {
+ if (BackspaceTimer == null)
+ {
+ BackspaceTimer = new CTimer(o => Backspace(), null, 0, 175);
+ }
+ }
+
+ ///
+ /// Does what it says
+ ///
+ void StopBackspaceRepeat()
+ {
+ if (BackspaceTimer != null)
+ {
+ BackspaceTimer.Stop();
+ BackspaceTimer = null;
+ }
+ }
void Backspace()
{
diff --git a/Essentials Core/PepperDashEssentialsBase/Touchpanels/TriListExtensions.cs b/Essentials Core/PepperDashEssentialsBase/Touchpanels/TriListExtensions.cs
index 2e529306..d183abc4 100644
--- a/Essentials Core/PepperDashEssentialsBase/Touchpanels/TriListExtensions.cs
+++ b/Essentials Core/PepperDashEssentialsBase/Touchpanels/TriListExtensions.cs
@@ -77,7 +77,7 @@ namespace PepperDash.Essentials.Core
/// Sets an action to a held sig as well as a released-without-hold action
///
///
- public static BoolOutputSig SetSigHeldAction(this BoolOutputSig sig, uint heldMs, Action heldAction, Action releaseAction)
+ public static BoolOutputSig SetSigHeldAction(this BoolOutputSig sig, uint heldMs, Action heldAction, Action holdReleasedAction, Action releaseAction)
{
CTimer heldTimer = null;
bool wasHeld = false;
@@ -98,12 +98,18 @@ namespace PepperDash.Essentials.Core
}
}, heldMs);
}
- else if (!wasHeld) // released
+ else if (!press && !wasHeld) // released, no hold
{
heldTimer.Stop();
if (releaseAction != null)
releaseAction();
}
+ else // !press && wasHeld // released after held
+ {
+ heldTimer.Stop();
+ if (holdReleasedAction != null)
+ holdReleasedAction();
+ }
});
}
@@ -114,9 +120,19 @@ namespace PepperDash.Essentials.Core
/// The sig
public static BoolOutputSig SetSigHeldAction(this BasicTriList tl, uint sigNum, uint heldMs, Action heldAction, Action releaseAction)
{
- return tl.BooleanOutput[sigNum].SetSigHeldAction(heldMs, heldAction, releaseAction);
+ return tl.BooleanOutput[sigNum].SetSigHeldAction(heldMs, heldAction, null, releaseAction);
}
+ ///
+ /// Sets an action to a held sig, an action for the release of hold, as well as a released-without-hold action
+ ///
+ ///
+ public static BoolOutputSig SetSigHeldAction(this BasicTriList tl, uint sigNum, uint heldMs, Action heldAction,
+ Action holdReleasedAction, Action releaseAction)
+ {
+ return tl.BooleanOutput[sigNum].SetSigHeldAction(heldMs, heldAction, holdReleasedAction, releaseAction);
+ }
+
///
///
///
diff --git a/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs b/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs
index 6286c70d..62f75105 100644
--- a/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs
+++ b/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs
@@ -908,6 +908,7 @@ namespace PepperDash.Essentials
HeaderGearButton.SetIcon(HeaderListButton.Gear);
HeaderGearButton.OutputSig.SetSigHeldAction(2000,
ShowTech,
+ null,
() =>
{
if (CurrentRoom.OnFeedback.BoolValue)
diff --git a/Essentials/PepperDashEssentials/UIDrivers/JoinedSigInterlock.cs b/Essentials/PepperDashEssentials/UIDrivers/JoinedSigInterlock.cs
index 09df5b1d..4de87788 100644
--- a/Essentials/PepperDashEssentials/UIDrivers/JoinedSigInterlock.cs
+++ b/Essentials/PepperDashEssentials/UIDrivers/JoinedSigInterlock.cs
@@ -22,11 +22,13 @@ namespace PepperDash.Essentials
}
///
- /// Hides CurrentJoin and shows join. Does nothing when resending CurrentJoin
+ /// Hides CurrentJoin and shows join. Will check and re-set signal if join
+ /// equals CurrentJoin
///
public void ShowInterlocked(uint join)
{
- if (CurrentJoin == join)
+ Debug.Console(2, "Trilist {0:X2}, interlock swapping {1} for {2}", TriList.ID, CurrentJoin, join);
+ if (CurrentJoin == join && TriList.BooleanInput[join].BoolValue)
return;
SetButDontShow(join);
TriList.SetBool(CurrentJoin, true);
@@ -38,7 +40,8 @@ namespace PepperDash.Essentials
///
public void ShowInterlockedWithToggle(uint join)
{
- if (CurrentJoin == join)
+ Debug.Console(2, "Trilist {0:X2}, interlock swapping {1} for {2}", TriList.ID, CurrentJoin, join);
+ if (CurrentJoin == join)
HideAndClear();
else
{
@@ -53,6 +56,7 @@ namespace PepperDash.Essentials
///
public void HideAndClear()
{
+ Debug.Console(2, "Trilist {0:X2}, interlock hiding {1}", TriList.ID, CurrentJoin);
Hide();
CurrentJoin = 0;
}
@@ -63,7 +67,8 @@ namespace PepperDash.Essentials
///
public void Hide()
{
- if (CurrentJoin > 0)
+ Debug.Console(2, "Trilist {0:X2}, interlock hiding {1}", TriList.ID, CurrentJoin);
+ if (CurrentJoin > 0)
TriList.BooleanInput[CurrentJoin].BoolValue = false;
}
@@ -72,7 +77,8 @@ namespace PepperDash.Essentials
///
public void Show()
{
- if (CurrentJoin > 0)
+ Debug.Console(2, "Trilist {0:X2}, interlock showing {1}", TriList.ID, CurrentJoin);
+ if (CurrentJoin > 0)
TriList.BooleanInput[CurrentJoin].BoolValue = true;
}
diff --git a/Essentials/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs b/Essentials/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs
index 4c58e3f2..1205c24a 100644
--- a/Essentials/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs
+++ b/Essentials/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs
@@ -88,6 +88,8 @@ namespace PepperDash.Essentials.UIDrivers.VC
bool CodecHasFavorites;
+ CTimer BackspaceTimer;
+
///
///
///
@@ -176,7 +178,9 @@ namespace PepperDash.Essentials.UIDrivers.VC
TriList.SetSigFalseAction(UIBoolJoin.VCDirectorySearchTextPress, RevealKeyboard);
- TriList.SetSigFalseAction(UIBoolJoin.VCDirectoryBackspacePress, SearchKeypadBackspacePress);
+ //TriList.SetSigFalseAction(UIBoolJoin.VCDirectoryBackspacePress, SearchKeypadBackspacePress);
+ TriList.SetSigHeldAction(UIBoolJoin.VCDirectoryBackspacePress, 500,
+ StartSearchBackspaceRepeat, StopSearchBackspaceRepeat, SearchKeypadBackspacePress);
CallSharingInfoVisibleFeedback = new BoolFeedback(() => !string.IsNullOrEmpty(Codec.SharingSourceFeedback.StringValue));
CallSharingInfoVisibleFeedback.LinkInputSig(triList.BooleanInput[UIBoolJoin.CallSharedSourceInfoEnable]);
@@ -253,7 +257,7 @@ namespace PepperDash.Essentials.UIDrivers.VC
KeypadMode = eKeypadMode.DTMF;
DialStringBuilder.Remove(0, DialStringBuilder.Length);
DialStringFeedback.FireUpdate();
- TriList.SetBool(UIBoolJoin.VCKeypadVisible, false);
+ DialStringTextCheckEnables();
Parent.ShowNotificationRibbon("Connected", 2000);
StagingButtonsFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingKeypadPress);
VCControlsInterlock.ShowInterlocked(UIBoolJoin.VCKeypadVisible);
@@ -432,7 +436,9 @@ namespace PepperDash.Essentials.UIDrivers.VC
DialKeypad.Misc1.SetSigFalseAction(() => DialKeypadPress("*"));
DialKeypad.Misc2SigName = "#";
DialKeypad.Misc2.SetSigFalseAction(() => DialKeypadPress("#"));
- TriList.SetSigFalseAction(UIBoolJoin.VCKeypadBackspacePress, DialKeypadBackspacePress);
+ //TriList.SetSigFalseAction(UIBoolJoin.VCKeypadBackspacePress, DialKeypadBackspacePress);
+ TriList.SetSigHeldAction(UIBoolJoin.VCKeypadBackspacePress, 500,
+ StartBackspaceRepeat, StopBackspaceRepeat, DialKeypadBackspacePress);
}
else
Debug.Console(0, "Trilist {0:x2}, VC dial keypad object {1} not found. Check SGD file or VTP",
@@ -769,17 +775,19 @@ namespace PepperDash.Essentials.UIDrivers.VC
if (VCControlsInterlock.CurrentJoin == UIBoolJoin.VCKeypadWithFavoritesVisible && KeypadMode == eKeypadMode.Dial)
{
var kb = Parent.Keyboard;
- kb.KeyPress += new EventHandler(Keyboard_KeyPress);
+ kb.KeyPress -= Keyboard_DialKeyPress;
+ kb.KeyPress += Keyboard_DialKeyPress;
kb.HideAction = this.DetachDialKeyboard;
kb.GoButtonText = "Connect";
kb.GoButtonVisible = true;
- DialStringKeypadCheckEnables();
+ DialStringTextCheckEnables();
kb.Show();
}
else if(VCControlsInterlock.CurrentJoin == UIBoolJoin.VCDirectoryVisible)
{
var kb = Parent.Keyboard;
- kb.KeyPress += new EventHandler(Search_KeyPress);
+ kb.KeyPress -= Keyboard_SearchKeyPress;
+ kb.KeyPress += Keyboard_SearchKeyPress;
kb.HideAction = this.DetachSearchKeyboard;
kb.GoButtonText = "Search";
kb.GoButtonVisible = true;
@@ -789,33 +797,37 @@ namespace PepperDash.Essentials.UIDrivers.VC
}
///
- ///
+ /// Event handler for keyboard dialing
///
- void Keyboard_KeyPress(object sender, PepperDash.Essentials.Core.Touchpanels.Keyboards.KeyboardControllerPressEventArgs e)
+ void Keyboard_DialKeyPress(object sender, PepperDash.Essentials.Core.Touchpanels.Keyboards.KeyboardControllerPressEventArgs e)
{
- if (VCControlsInterlock.CurrentJoin == UIBoolJoin.VCKeypadVisible)
+ if (VCControlsInterlock.CurrentJoin == UIBoolJoin.VCKeypadWithFavoritesVisible && KeypadMode == eKeypadMode.Dial)
{
- if (KeypadMode == eKeypadMode.Dial)
- if (e.Text != null)
- DialStringBuilder.Append(e.Text);
- else
- {
- if (e.SpecialKey == KeyboardSpecialKey.Backspace)
- DialKeypadBackspacePress();
- else if (e.SpecialKey == KeyboardSpecialKey.Clear)
- DialKeypadClear();
- else if (e.SpecialKey == KeyboardSpecialKey.GoButton)
- {
- ConnectPress();
- Parent.Keyboard.Hide();
- }
- }
+ if (e.Text != null)
+ DialStringBuilder.Append(e.Text);
+ else
+ {
+ if (e.SpecialKey == KeyboardSpecialKey.Backspace)
+ DialKeypadBackspacePress();
+ else if (e.SpecialKey == KeyboardSpecialKey.Clear)
+ DialKeypadClear();
+ else if (e.SpecialKey == KeyboardSpecialKey.GoButton)
+ {
+ ConnectPress();
+ Parent.Keyboard.Hide();
+ }
+ }
DialStringFeedback.FireUpdate();
- DialStringKeypadCheckEnables();
+ DialStringTextCheckEnables();
}
}
- void Search_KeyPress(object sender, KeyboardControllerPressEventArgs e)
+ ///
+ /// Event handler for keyboard directory searches
+ ///
+ ///
+ ///
+ void Keyboard_SearchKeyPress(object sender, KeyboardControllerPressEventArgs e)
{
if (VCControlsInterlock.CurrentJoin == UIBoolJoin.VCDirectoryVisible)
{
@@ -838,14 +850,17 @@ namespace PepperDash.Essentials.UIDrivers.VC
}
}
+ ///
+ /// Call
+ ///
void DetachDialKeyboard()
{
- Parent.Keyboard.KeyPress -= Keyboard_KeyPress;
+ Parent.Keyboard.KeyPress -= Keyboard_DialKeyPress;
}
void DetachSearchKeyboard()
{
- Parent.Keyboard.KeyPress -= Search_KeyPress;
+ Parent.Keyboard.KeyPress -= Keyboard_SearchKeyPress;
}
///
@@ -917,7 +932,7 @@ namespace PepperDash.Essentials.UIDrivers.VC
{
DialStringBuilder.Append(i);
DialStringFeedback.FireUpdate();
- DialStringKeypadCheckEnables();
+ DialStringTextCheckEnables();
}
else
{
@@ -926,16 +941,44 @@ namespace PepperDash.Essentials.UIDrivers.VC
DialStringFeedback.FireUpdate();
// no delete key in this mode!
}
- }
+ }
+
+ ///
+ /// Does what it says
+ ///
+ void StartBackspaceRepeat()
+ {
+ if (BackspaceTimer == null)
+ {
+ BackspaceTimer = new CTimer(o => DialKeypadBackspacePress(), null, 0, 175);
+ }
+ }
+
+ ///
+ /// Does what it says
+ ///
+ void StopBackspaceRepeat()
+ {
+ if (BackspaceTimer != null)
+ {
+ BackspaceTimer.Stop();
+ BackspaceTimer = null;
+ }
+ }
///
///
///
void DialKeypadBackspacePress()
{
- DialStringBuilder.Remove(DialStringBuilder.Length - 1, 1);
- DialStringFeedback.FireUpdate();
- DialStringKeypadCheckEnables();
+ if (KeypadMode == eKeypadMode.Dial)
+ {
+ DialStringBuilder.Remove(DialStringBuilder.Length - 1, 1);
+ DialStringFeedback.FireUpdate();
+ DialStringTextCheckEnables();
+ }
+ else
+ DialKeypadClear();
}
///
@@ -945,13 +988,13 @@ namespace PepperDash.Essentials.UIDrivers.VC
{
DialStringBuilder.Remove(0, DialStringBuilder.Length);
DialStringFeedback.FireUpdate();
- DialStringKeypadCheckEnables();
+ DialStringTextCheckEnables();
}
///
/// Checks the enabled states of various elements around the keypad
///
- void DialStringKeypadCheckEnables()
+ void DialStringTextCheckEnables()
{
var textIsEntered = DialStringBuilder.Length > 0;
TriList.SetBool(UIBoolJoin.VCKeypadBackspaceVisible, textIsEntered);
@@ -962,19 +1005,48 @@ namespace PepperDash.Essentials.UIDrivers.VC
Parent.Keyboard.DisableGoButton();
}
-
+ ///
+ ///
+ ///
void SearchPress()
{
(Codec as IHasDirectory).SearchDirectory(SearchStringBuilder.ToString());
}
- void SearchKeypadPress(string i)
+ ///
+ ///
+ ///
+ ///
+ void SearchKeyboardPress(string i)
{
SearchStringBuilder.Append(i);
SearchStringFeedback.FireUpdate();
SearchStringKeypadCheckEnables();
}
+ ///
+ /// Does what it says
+ ///
+ void StartSearchBackspaceRepeat()
+ {
+ if (BackspaceTimer == null)
+ {
+ BackspaceTimer = new CTimer(o => SearchKeypadBackspacePress(), null, 0, 175);
+ }
+ }
+
+ ///
+ /// Does what it says
+ ///
+ void StopSearchBackspaceRepeat()
+ {
+ if (BackspaceTimer != null)
+ {
+ BackspaceTimer.Stop();
+ BackspaceTimer = null;
+ }
+ }
+
///
///
///
diff --git a/Release Package/PepperDashEssentials.cpz b/Release Package/PepperDashEssentials.cpz
index 80fa09fa..05677172 100644
Binary files a/Release Package/PepperDashEssentials.cpz and b/Release Package/PepperDashEssentials.cpz differ
diff --git a/Release Package/PepperDashEssentials.dll b/Release Package/PepperDashEssentials.dll
index f8a5cb88..068ec36e 100644
Binary files a/Release Package/PepperDashEssentials.dll and b/Release Package/PepperDashEssentials.dll differ