diff --git a/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectDynamicList.cs b/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectDynamicList.cs index 5c4f767a..bf73ba1b 100644 --- a/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectDynamicList.cs +++ b/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectDynamicList.cs @@ -33,6 +33,12 @@ namespace PepperDash.Essentials.Core.SmartObjects /// public int MaxCount { get; private set; } + /// + /// Wrapper for smart object + /// + /// + /// True if the standard user object action handler will be used + /// The starting join of the string sigs for the button labels public SmartObjectDynamicList(SmartObject so, bool useUserObjectHandler, uint nameSigOffset) : base(so, useUserObjectHandler) { try diff --git a/Essentials Core/PepperDashEssentialsBase/Touchpanels/TriListExtensions.cs b/Essentials Core/PepperDashEssentialsBase/Touchpanels/TriListExtensions.cs index 15287a64..bc9ff012 100644 --- a/Essentials Core/PepperDashEssentialsBase/Touchpanels/TriListExtensions.cs +++ b/Essentials Core/PepperDashEssentialsBase/Touchpanels/TriListExtensions.cs @@ -81,21 +81,25 @@ namespace PepperDash.Essentials.Core public static BoolOutputSig SetSigHeldAction(this BasicTriList tl, uint sigNum, uint heldMs, Action heldAction, Action releaseAction) { CTimer heldTimer = null; + bool wasHeld = false; return tl.SetBoolSigAction(sigNum, press => { if (press) { - + wasHeld = false; // Could insert a pressed action here heldTimer = new CTimer(o => { // if still held and there's an action if (tl.BooleanOutput[sigNum].BoolValue && heldAction != null) + { + wasHeld = true; // Hold action here heldAction(); + } }, heldMs); } - else if (heldTimer != null) // released + else if(!wasHeld) // released { heldTimer.Stop(); if (releaseAction != null) diff --git a/Essentials/PepperDashEssentials/PepperDashEssentials.csproj b/Essentials/PepperDashEssentials/PepperDashEssentials.csproj index ccb37bf3..cb43f6ca 100644 --- a/Essentials/PepperDashEssentials/PepperDashEssentials.csproj +++ b/Essentials/PepperDashEssentials/PepperDashEssentials.csproj @@ -164,12 +164,14 @@ + + - + diff --git a/Essentials/PepperDashEssentials/Room/Config/EssentialsRoomConfig.cs b/Essentials/PepperDashEssentials/Room/Config/EssentialsRoomConfig.cs index 6ccb0f33..934bd1f5 100644 --- a/Essentials/PepperDashEssentials/Room/Config/EssentialsRoomConfig.cs +++ b/Essentials/PepperDashEssentials/Room/Config/EssentialsRoomConfig.cs @@ -141,7 +141,7 @@ namespace PepperDash.Essentials.Room.Config if (Type == "url") return Url; if (Type == "system") - return string.Format("http://{0}:5646/logo", + return string.Format("http://{0}:8080/logo.png", CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_ADDRESS, 0)); return null; } diff --git a/Essentials/PepperDashEssentials/UI/HttpLogoServer.cs b/Essentials/PepperDashEssentials/UI/HttpLogoServer.cs index 8ff93a07..f04f6872 100644 --- a/Essentials/PepperDashEssentials/UI/HttpLogoServer.cs +++ b/Essentials/PepperDashEssentials/UI/HttpLogoServer.cs @@ -64,8 +64,6 @@ namespace PepperDash.Essentials void Server_OnHttpRequest(object sender, OnHttpRequestArgs args) { var path = args.Request.Path; - Debug.Console(0, "########## PATH={0}", path); - if (File.Exists(FileDirectory + @"\" + path)) { string filePath = path.Replace('/', '\\'); @@ -74,7 +72,6 @@ namespace PepperDash.Essentials { args.Response.Header.ContentType = GetContentType(new FileInfo(localPath).Extension); args.Response.ContentStream = new FileStream(localPath, FileMode.Open, FileAccess.Read); - //args.Response.CloseStream = true; } else { diff --git a/Essentials/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs b/Essentials/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs index 26cc59ea..7d2f41a2 100644 --- a/Essentials/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs +++ b/Essentials/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs @@ -206,6 +206,43 @@ namespace PepperDash.Essentials // Letter joins start at 2921; + + + /// + /// 3101 + /// + public const uint TechExitButton = 3101; + /// + /// 3106 + /// + public const uint TechCommonItemsVisbible = 3106; + /// + /// 3107 + /// + public const uint TechSystemStatusVisible = 3107; + /// + /// 3108 + /// + public const uint TechDisplayControlsVisible = 3108; + /// + /// 3109 + /// + public const uint TechPanelSetupVisible = 3109; + /// + /// 3110 + /// + public const uint TechAdvancedVolumeVisible = 3110; + /// + /// 3111 + /// + public const uint TechAboutVisible = 3111; + /// + /// 3112 + /// + public const uint TechSchedulerVisible = 3112; + + + //****************************************************** /// /// 3811 @@ -300,14 +337,8 @@ namespace PepperDash.Essentials /// 3891 /// public const uint VolumeDefaultPress = 3891; - /// - /// 3901 - /// - public const uint TechPagesExitButton = 3901; - /// - /// 3902 - /// - public const uint TechPanelSetupVisible = 3902; + + /// /// 3999 /// diff --git a/Essentials/PepperDashEssentials/UI/JoinConstants/UISmartObjectJoin.cs b/Essentials/PepperDashEssentials/UI/JoinConstants/UISmartObjectJoin.cs index ceea3a89..5769fc52 100644 --- a/Essentials/PepperDashEssentials/UI/JoinConstants/UISmartObjectJoin.cs +++ b/Essentials/PepperDashEssentials/UI/JoinConstants/UISmartObjectJoin.cs @@ -29,6 +29,10 @@ /// 15022 The main activity footer /// public const uint ActivityFooterSRL = 15022; + /// + /// 3901 The Tech page menu list + /// + public const uint TechMenuList = 3901; } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/UI/JoinConstants/UIStringlJoin.cs b/Essentials/PepperDashEssentials/UI/JoinConstants/UIStringlJoin.cs index c49fae06..b38188c9 100644 --- a/Essentials/PepperDashEssentials/UI/JoinConstants/UIStringlJoin.cs +++ b/Essentials/PepperDashEssentials/UI/JoinConstants/UIStringlJoin.cs @@ -28,6 +28,14 @@ namespace PepperDash.Essentials /// //public const uint KeypadText = 2901; + /// + /// 3101 - This is the start of the range 3101 - 3120 + /// + public const uint TechMenuButtonTextStart = 3101; + + //----- through 3120 + + /// /// 3812 /// diff --git a/Essentials/PepperDashEssentials/UIDrivers/Essentials/EssentialsHuddlePanelAvFunctionsDriver.cs b/Essentials/PepperDashEssentials/UIDrivers/Essentials/EssentialsHuddlePanelAvFunctionsDriver.cs index fbf22900..ecd4fb04 100644 --- a/Essentials/PepperDashEssentials/UIDrivers/Essentials/EssentialsHuddlePanelAvFunctionsDriver.cs +++ b/Essentials/PepperDashEssentials/UIDrivers/Essentials/EssentialsHuddlePanelAvFunctionsDriver.cs @@ -220,7 +220,7 @@ namespace PepperDash.Essentials // Setup button TriList.SetSigHeldAction(UIBoolJoin.GearHeaderButtonPress, 2000, () => PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.TechPanelSetupVisible));// ShowInterlockedModal(UIBoolJoin.TechPanelSetupVisible)); - TriList.SetSigFalseAction(UIBoolJoin.TechPagesExitButton, () => + TriList.SetSigFalseAction(UIBoolJoin.TechExitButton, () => PopupInterlock.HideAndClear()); // HideCurrentInterlockedModal()); #warning This gets overridden by config after NYU demo if(TriList is CrestronApp) diff --git a/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleTechPageDriver.cs b/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleTechPageDriver.cs new file mode 100644 index 00000000..67cb5d8f --- /dev/null +++ b/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleTechPageDriver.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro.DeviceSupport; + +using PepperDash.Core; +using PepperDash.Essentials; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.SmartObjects; +using PepperDash.Essentials.Core.Touchpanels.Keyboards; + +namespace PepperDash.Essentials.UIDrivers +{ + public class EssentialsHuddleTechPageDriver : PanelDriverBase + { + SmartObjectDynamicList MenuList; + IAVDriver Parent; + JoinedSigInterlock PagesInterlock; + + /// + /// + /// + /// + /// + public EssentialsHuddleTechPageDriver(BasicTriListWithSmartObject trilist, IAVDriver parent) + : base(trilist) + { + Parent = parent; + PagesInterlock = new JoinedSigInterlock(trilist); + PagesInterlock.SetButDontShow(UIBoolJoin.TechSystemStatusVisible); + + trilist.SetSigFalseAction(UIBoolJoin.TechExitButton, Hide); + + MenuList = new SmartObjectDynamicList(trilist.SmartObjects[UISmartObjectJoin.TechMenuList], + true, 3100); + + MenuList.SetFeedback(1, true); // initial fb + + MenuList.SetItemMainText(1, "System Status"); + MenuList.SetItemButtonAction(1, b => { + if (b) PagesInterlock.ShowInterlocked(UIBoolJoin.TechSystemStatusVisible); + MenuList.SetFeedback(1, true); + }); + + MenuList.SetItemMainText(2, "Panel Setup"); + MenuList.SetItemButtonAction(2, b => { + if (b) PagesInterlock.ShowInterlocked(UIBoolJoin.TechPanelSetupVisible); + MenuList.SetFeedback(2, true); + }); + + MenuList.SetItemMainText(3, "System Status"); + MenuList.SetItemButtonAction(3, b => { + if (b) PagesInterlock.ShowInterlocked(UIBoolJoin.TechDisplayControlsVisible); + MenuList.SetFeedback(3, true); + }); + + MenuList.Count = 3; + } + + public override void Show() + { + TriList.SetBool(UIBoolJoin.TechCommonItemsVisbible, true); + PagesInterlock.Show(); + base.Show(); + } + + public override void Hide() + { + TriList.SetBool(UIBoolJoin.TechCommonItemsVisbible, false); + PagesInterlock.Hide(); + base.Hide(); + } + } +} \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/HuddleVTCPanelAvFunctionsDriver.cs b/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs similarity index 96% rename from Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/HuddleVTCPanelAvFunctionsDriver.cs rename to Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs index da6f21c7..29eacc9b 100644 --- a/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/HuddleVTCPanelAvFunctionsDriver.cs +++ b/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs @@ -121,16 +121,47 @@ namespace PepperDash.Essentials /// JoinedSigInterlock StagingBarInterlock; + /// + /// Interlocks the various call-related subpages + /// JoinedSigInterlock CallPagesInterlock; + /// + /// The Video codec driver + /// PepperDash.Essentials.UIDrivers.VC.EssentialsVideoCodecUiDriver VCDriver; + /// + /// The driver for the tech page. Lazy getter for memory usage + /// + PepperDash.Essentials.UIDrivers.EssentialsHuddleTechPageDriver TechDriver + { + get + { + if (_TechDriver == null) + _TechDriver = new PepperDash.Essentials.UIDrivers.EssentialsHuddleTechPageDriver(TriList, this); + return _TechDriver; + } + } + PepperDash.Essentials.UIDrivers.EssentialsHuddleTechPageDriver _TechDriver; + + /// + /// Controls timeout of notification ribbon timer + /// CTimer RibbonTimer; + /// + /// The keyboard + /// public PepperDash.Essentials.Core.Touchpanels.Keyboards.HabaneroKeyboardController Keyboard { get; private set; } + /// + /// The mode showing. Presentation or call. + /// UiDisplayMode CurrentMode = UiDisplayMode.Start; + + /// /// Constructor /// @@ -277,9 +308,9 @@ namespace PepperDash.Essentials // Setup button - shows volumes with default button OR hold for tech page TriList.SetSigHeldAction(UIBoolJoin.GearHeaderButtonPress, 2000, - () => PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.TechPanelSetupVisible), + ShowTech, () => PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.VolumesPageVisible)); - TriList.SetSigFalseAction(UIBoolJoin.TechPagesExitButton, () => + TriList.SetSigFalseAction(UIBoolJoin.TechExitButton, () => PopupInterlock.HideAndClear()); // Volume related things @@ -379,6 +410,15 @@ namespace PepperDash.Essentials } } + /// + /// Reveals the tech page and puts away anything that's in the way. + /// + void ShowTech() + { + PopupInterlock.HideAndClear(); + TechDriver.Show(); + } + /// /// When the room is off, set the footer SRL /// diff --git a/Essentials/PepperDashEssentials/UIDrivers/SigInterlock.cs b/Essentials/PepperDashEssentials/UIDrivers/SigInterlock.cs new file mode 100644 index 00000000..e62fc7f3 --- /dev/null +++ b/Essentials/PepperDashEssentials/UIDrivers/SigInterlock.cs @@ -0,0 +1,99 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; + +using PepperDash.Core; +using PepperDash.Essentials.Core; + +namespace PepperDash.Essentials +{ + /// + /// Used for interlocking sigs, using a set-clears-last-set model. + /// + public class SigInterlock + { + /// + /// + /// + public BoolInputSig CurrentSig { get; private set; } + + /// + /// + /// + public SigInterlock() + { + } + + /// + /// Hides CurrentJoin and shows join. Does nothing when resending CurrentJoin + /// + public void ShowInterlocked(BoolInputSig sig) + { + if (CurrentSig == sig) + return; + SetButDontShow(sig); + sig.BoolValue = true; + } + + /// + /// + /// + /// + public void ShowInterlockedWithToggle(BoolInputSig sig) + { + if(CurrentSig == sig) + HideAndClear(); + else + { + if(CurrentSig != null) + CurrentSig.BoolValue = false; + CurrentSig = sig; + CurrentSig.BoolValue = true; + } + + } + + /// + /// Hides current Sig and clears CurrentSig + /// + public void HideAndClear() + { + Hide(); + CurrentSig = null; + } + + /// + /// Hides the current Sig but does not clear the selected Sig in case + /// it needs to be reshown + /// + public void Hide() + { + if(CurrentSig != null) + CurrentSig.BoolValue = false; + } + + /// + /// If CurrentSig is set, it restores that Sig + /// + public void Show() + { + if(CurrentSig != null) + CurrentSig.BoolValue = true; + } + + /// + /// Useful for pre-setting the interlock but not enabling it. Sets CurrentSig + /// + /// + public void SetButDontShow(BoolInputSig sig) + { + if (CurrentSig != null) + CurrentSig.BoolValue = false; + CurrentSig = sig; + } + } +} \ No newline at end of file diff --git a/Release Package/PepperDashEssentials.cpz b/Release Package/PepperDashEssentials.cpz index 39091a7d..d9d9c054 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 6b4b4515..c813158f 100644 Binary files a/Release Package/PepperDashEssentials.dll and b/Release Package/PepperDashEssentials.dll differ