diff --git a/Essentials Core/PepperDashEssentialsBase/SubpageReferencList/SubpageReferenceList.cs b/Essentials Core/PepperDashEssentialsBase/SubpageReferencList/SubpageReferenceList.cs index 83b0934d..65499990 100644 --- a/Essentials Core/PepperDashEssentialsBase/SubpageReferencList/SubpageReferenceList.cs +++ b/Essentials Core/PepperDashEssentialsBase/SubpageReferencList/SubpageReferenceList.cs @@ -53,7 +53,7 @@ namespace PepperDash.Essentials.Core // Fail cleanly if not defined if (triList.SmartObjects == null || triList.SmartObjects.Count == 0) { - Debug.Console(0, "TriList {0:X2} Smart objects not loaded", triList.ID, smartObjectId); + Debug.Console(0, "TriList {0:X2} Smart objects have not been loaded", triList.ID, smartObjectId); return; } if (triList.SmartObjects.TryGetValue(smartObjectId, out obj)) @@ -74,7 +74,8 @@ namespace PepperDash.Essentials.Core SRL.SigChange += new SmartObjectSigChangeEventHandler(SRL_SigChange); } else - Debug.Console(0, "TriList 0x{0:X2} Cannot load smart object {1}", triList.ID, smartObjectId); + Debug.Console(0, "ERROR: TriList 0x{0:X2} Cannot load smart object {1}. Verify correct SGD file is loaded", + triList.ID, smartObjectId); } /// diff --git a/Essentials Core/PepperDashEssentialsBase/Touchpanels/TriListExtensions.cs b/Essentials Core/PepperDashEssentialsBase/Touchpanels/TriListExtensions.cs index 63e0b1cb..26bed9c0 100644 --- a/Essentials Core/PepperDashEssentialsBase/Touchpanels/TriListExtensions.cs +++ b/Essentials Core/PepperDashEssentialsBase/Touchpanels/TriListExtensions.cs @@ -154,11 +154,19 @@ namespace PepperDash.Essentials.Core } /// - /// Helper method to set the value of a bool Sig on tri list + /// Helper method to set the value of a bool Sig on TriList /// public static void SetBool(this BasicTriList tl, uint sigNum, bool value) { tl.BooleanInput[sigNum].BoolValue = value; } - } + + /// + /// Helper method to set the value of a string Sig on TriList + /// + public static void SetString(this BasicTriList tl, uint sigNum, string value) + { + tl.StringInput[sigNum].StringValue = value; + } + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/PepperDashEssentials.csproj b/Essentials/PepperDashEssentials/PepperDashEssentials.csproj index aebf06cc..85db3115 100644 --- a/Essentials/PepperDashEssentials/PepperDashEssentials.csproj +++ b/Essentials/PepperDashEssentials/PepperDashEssentials.csproj @@ -160,8 +160,10 @@ + + - + diff --git a/Essentials/PepperDashEssentials/Room/EssentialsRoomConfig.cs b/Essentials/PepperDashEssentials/Room/EssentialsRoomConfig.cs index 89525d9e..5bb7317b 100644 --- a/Essentials/PepperDashEssentials/Room/EssentialsRoomConfig.cs +++ b/Essentials/PepperDashEssentials/Room/EssentialsRoomConfig.cs @@ -67,12 +67,50 @@ namespace PepperDash.Essentials public string Description { get; set; } public int ShutdownVacancySeconds { get; set; } public int ShutdownPromptSeconds { get; set; } + public EssentialsHelpPropertiesConfig Help { get; set; } + public EssentialsOneButtonMeetingPropertiesConfig OneButtonMeeting { get; set; } + public EssentialsRoomAddressPropertiesConfig Addresses { get; set; } public EssentialsRoomOccSensorConfig OccupancySensors { get; set; } public EssentialsLogoPropertiesConfig Logo { get; set; } public EssentialsRoomVolumesConfig Volumes { get; set; } } + /// + /// Properties for the help text box + /// + public class EssentialsHelpPropertiesConfig + { + public string Message { get; set; } + public bool ShowCallButton { get; set; } + /// + /// Defaults to "Call Help Desk" + /// + public string CallButtonText { get; set; } + public EssentialsHelpPropertiesConfig() + { + CallButtonText = "Call Help Desk"; + } + } + + /// + /// + /// + public class EssentialsOneButtonMeetingPropertiesConfig + { + public bool Enable { get; set; } + } + + public class EssentialsRoomAddressPropertiesConfig + { + public string PhoneNumber { get; set; } + public string SipAddress { get; set; } + } + + + /// + /// Properties for the room's logo on panels + /// public class EssentialsLogoPropertiesConfig { public string Type { get; set; } diff --git a/Essentials/PepperDashEssentials/Room/UI/CrestronTouchpanelPropertiesConfig.cs b/Essentials/PepperDashEssentials/Room/UI/CrestronTouchpanelPropertiesConfig.cs index f327e0d5..b5144841 100644 --- a/Essentials/PepperDashEssentials/Room/UI/CrestronTouchpanelPropertiesConfig.cs +++ b/Essentials/PepperDashEssentials/Room/UI/CrestronTouchpanelPropertiesConfig.cs @@ -12,6 +12,7 @@ public bool ShowDate { get; set; } public bool ShowTime { get; set; } public UiSetupPropertiesConfig Setup { get; set; } + public UiHeaderStyle HeaderStyle { get; set; } /// /// The count of sources that will trigger the "additional" arrows to show on the SRL. @@ -22,12 +23,25 @@ public CrestronTouchpanelPropertiesConfig() { SourcesOverflowCount = 5; + HeaderStyle = UiHeaderStyle.Habanero; } } + /// + /// + /// public class UiSetupPropertiesConfig { public bool IsVisible { get; set; } } + /// + /// + /// + public enum UiHeaderStyle + { + Habanero, + Verbose + } + } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/Room/UI/SubpageReferenceListCallStagingItem.cs b/Essentials/PepperDashEssentials/Room/UI/SubpageReferenceListCallStagingItem.cs new file mode 100644 index 00000000..4c64bdd6 --- /dev/null +++ b/Essentials/PepperDashEssentials/Room/UI/SubpageReferenceListCallStagingItem.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.UI; + +using PepperDash.Essentials.Core; + +namespace PepperDash.Essentials +{ + public class SubpageReferenceListButtonAndModeItem : SubpageReferenceListItem + { + /// + /// + /// + /// + /// + /// 0=Share, 1=Phone Call, 2=Video Call, 3=End Meeting + /// + public SubpageReferenceListButtonAndModeItem(uint index, SubpageReferenceList owner, + ushort buttonMode, Action pressAction) + : base(index, owner) + { + Owner.GetBoolFeedbackSig(Index, 1).UserObject = pressAction; + Owner.UShortInputSig(Index, 1).UShortValue = buttonMode; + } + + /// + /// Called by SRL to release all referenced objects + /// + public override void Clear() + { + Owner.BoolInputSig(Index, 1).UserObject = null; + Owner.UShortInputSig(Index, 1).UShortValue = 0; + } + } +} \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/UIDrivers/Essentials/EssentialsHuddlePanelAvFunctionsDriver.cs b/Essentials/PepperDashEssentials/UIDrivers/Essentials/EssentialsHuddlePanelAvFunctionsDriver.cs index 6bdab840..dc5447d6 100644 --- a/Essentials/PepperDashEssentials/UIDrivers/Essentials/EssentialsHuddlePanelAvFunctionsDriver.cs +++ b/Essentials/PepperDashEssentials/UIDrivers/Essentials/EssentialsHuddlePanelAvFunctionsDriver.cs @@ -190,7 +190,7 @@ namespace PepperDash.Essentials /// public override void Show() { - TriList.BooleanInput[UIBoolJoin.TopBarVisible].BoolValue = true; + TriList.BooleanInput[UIBoolJoin.TopBarHabaneroVisible].BoolValue = true; TriList.BooleanInput[UIBoolJoin.ActivityFooterVisible].BoolValue = true; // Default to showing rooms/sources now. @@ -253,7 +253,7 @@ namespace PepperDash.Essentials public override void Hide() { HideAndClearCurrentDisplayModeSigsInUse(); - TriList.BooleanInput[UIBoolJoin.TopBarVisible].BoolValue = false; + TriList.BooleanInput[UIBoolJoin.TopBarHabaneroVisible].BoolValue = false; TriList.BooleanInput[UIBoolJoin.ActivityFooterVisible].BoolValue = false; TriList.BooleanInput[UIBoolJoin.StartPageVisible].BoolValue = false; TriList.BooleanInput[UIBoolJoin.TapToBeginVisible].BoolValue = false; @@ -280,7 +280,7 @@ namespace PepperDash.Essentials // show start page or staging... if (CurrentRoom.OnFeedback.BoolValue) { - TriList.BooleanInput[UIBoolJoin.StagingPageVisible].BoolValue = true; + TriList.BooleanInput[UIBoolJoin.SourceStagingBarVisible].BoolValue = true; TriList.BooleanInput[UIBoolJoin.TapToBeginVisible].BoolValue = false; TriList.BooleanInput[UIBoolJoin.SelectASourceVisible].BoolValue = false; } @@ -345,7 +345,7 @@ namespace PepperDash.Essentials { ShareButtonSig.BoolValue = true; TriList.BooleanInput[UIBoolJoin.StartPageVisible].BoolValue = false; - TriList.BooleanInput[UIBoolJoin.StagingPageVisible].BoolValue = true; + TriList.BooleanInput[UIBoolJoin.SourceStagingBarVisible].BoolValue = true; TriList.BooleanInput[UIBoolJoin.SelectASourceVisible].BoolValue = true; // Run default source when room is off and share is pressed if (!CurrentRoom.OnFeedback.BoolValue) @@ -740,7 +740,7 @@ namespace PepperDash.Essentials { SetupActivityFooterWhenRoomOn(); TriList.BooleanInput[UIBoolJoin.SelectASourceVisible].BoolValue = false; - TriList.BooleanInput[UIBoolJoin.StagingPageVisible].BoolValue = true; + TriList.BooleanInput[UIBoolJoin.SourceStagingBarVisible].BoolValue = true; TriList.BooleanInput[UIBoolJoin.StartPageVisible].BoolValue = false; TriList.BooleanInput[UIBoolJoin.VolumeSingleMute1Visible].BoolValue = true; @@ -750,7 +750,7 @@ namespace PepperDash.Essentials SetupActivityFooterWhenRoomOff(); TriList.BooleanInput[UIBoolJoin.StartPageVisible].BoolValue = true; TriList.BooleanInput[UIBoolJoin.VolumeSingleMute1Visible].BoolValue = false; - TriList.BooleanInput[UIBoolJoin.StagingPageVisible].BoolValue = false; + TriList.BooleanInput[UIBoolJoin.SourceStagingBarVisible].BoolValue = false; } } diff --git a/Essentials/PepperDashEssentials/UIDrivers/Essentials/EssentialsPresentationPanelAvFunctionsDriver.cs b/Essentials/PepperDashEssentials/UIDrivers/Essentials/EssentialsPresentationPanelAvFunctionsDriver.cs index 3d422804..c817ce5a 100644 --- a/Essentials/PepperDashEssentials/UIDrivers/Essentials/EssentialsPresentationPanelAvFunctionsDriver.cs +++ b/Essentials/PepperDashEssentials/UIDrivers/Essentials/EssentialsPresentationPanelAvFunctionsDriver.cs @@ -205,7 +205,7 @@ namespace PepperDash.Essentials /// public override void Show() { - TriList.BooleanInput[UIBoolJoin.TopBarVisible].BoolValue = true; + TriList.BooleanInput[UIBoolJoin.TopBarHabaneroVisible].BoolValue = true; TriList.BooleanInput[UIBoolJoin.ActivityFooterVisible].BoolValue = true; // Default to showing rooms/sources now. @@ -266,12 +266,12 @@ namespace PepperDash.Essentials { var tl = TriList.BooleanInput; HideAndClearCurrentDisplayModeSigsInUse(); - tl[UIBoolJoin.TopBarVisible].BoolValue = false; + tl[UIBoolJoin.TopBarHabaneroVisible].BoolValue = false; tl[UIBoolJoin.ActivityFooterVisible].BoolValue = false; tl[UIBoolJoin.StartPageVisible].BoolValue = false; tl[UIBoolJoin.TapToBeginVisible].BoolValue = false; tl[UIBoolJoin.ToggleSharingModeVisible].BoolValue = false; - tl[UIBoolJoin.StagingPageVisible].BoolValue = false; + tl[UIBoolJoin.SourceStagingBarVisible].BoolValue = false; if (IsSharingModeAdvanced) tl[UIBoolJoin.DualDisplayPageVisible].BoolValue = false; else @@ -290,7 +290,7 @@ namespace PepperDash.Essentials { var tlb = TriList.BooleanInput; tlb[UIBoolJoin.ToggleSharingModeVisible].BoolValue = true; - tlb[UIBoolJoin.StagingPageVisible].BoolValue = true; + tlb[UIBoolJoin.SourceStagingBarVisible].BoolValue = true; if (IsSharingModeAdvanced) { tlb[UIBoolJoin.DualDisplayPageVisible].BoolValue = true; @@ -310,7 +310,7 @@ namespace PepperDash.Essentials { var tl = TriList.BooleanInput; tl[UIBoolJoin.ToggleSharingModeVisible].BoolValue = false; - tl[UIBoolJoin.StagingPageVisible].BoolValue = false; + tl[UIBoolJoin.SourceStagingBarVisible].BoolValue = false; tl[UIBoolJoin.DualDisplayPageVisible].BoolValue = false; tl[UIBoolJoin.SelectASourceVisible].BoolValue = false; } diff --git a/Essentials/PepperDashEssentials/UIDrivers/EssentialsCiscoSpark/EssentialsCiscoSparkUiDriver.cs b/Essentials/PepperDashEssentials/UIDrivers/EssentialsCiscoSpark/EssentialsCiscoSparkUiDriver.cs new file mode 100644 index 00000000..34cac2f3 --- /dev/null +++ b/Essentials/PepperDashEssentials/UIDrivers/EssentialsCiscoSpark/EssentialsCiscoSparkUiDriver.cs @@ -0,0 +1,128 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro.DeviceSupport; +using PepperDash.Essentials; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.SmartObjects; + +namespace PepperDash.Essentials.UIDrivers.EssentialsCiscoSpark +{ + + /// + /// This fella will likely need to interact with the room's source, although that is routed via the spark... + /// Probably needs event or FB to feed AV driver - to show two-mute volume when appropriate. + /// + /// + public class EssentialsCiscoSparkUiDriver : PanelDriverBase + { + object Codec; + + /// + /// + /// + SubpageReferenceList CallStagingSrl; + + /// + /// + /// + SmartObjectDynamicList CallQuickDialList; + + /// + /// + /// + SubpageReferenceList DirectorySrl; // ***************** SRL ??? + + + /// + /// To drive UI elements outside of this driver that may be dependent on this. + /// + BoolFeedback InCall; + BoolFeedback LocalPrivacyIsMuted; + + + public EssentialsCiscoSparkUiDriver(BasicTriListWithSmartObject triList, object codec) + : base(triList) + { + Codec = codec; + SetupCallStagingSrl(); + } + + /// + /// + /// + public override void Show() + { + base.Show(); + } + + /// + /// + /// + public override void Hide() + { + base.Hide(); + } + + /// + /// Builds the call stage + /// + void SetupCallStagingSrl() + { + CallStagingSrl = new SubpageReferenceList(TriList, UISmartObjectJoin.CallStagingSrl, 3, 3, 3); + var c = CallStagingSrl; + c.AddItem(new SubpageReferenceListButtonAndModeItem(1, c, 1, b => { if (!b) { } })); //************ Camera + c.AddItem(new SubpageReferenceListButtonAndModeItem(2, c, 2, b => { if (!b) { } })); //************ Directory + c.AddItem(new SubpageReferenceListButtonAndModeItem(3, c, 3, b => { if (!b) { } })); //************ Keypad + c.AddItem(new SubpageReferenceListButtonAndModeItem(4, c, 4, b => { if (!b) { } })); //************ End Call + c.Count = 3; + } + + /// + /// + /// + void ShowCameraControls() + { + + } + + void ShowKeypad() + { + + } + + void ShowDirectory() + { + + } + + void CallHasStarted() + { + // Header icon + // Add end call button to stage + // Volume bar needs to have mic mute + } + + void CallHasEnded() + { + // Header icon + // Remove end call + // Volume bar no mic mute (or hidden if no source?) + } + + + + public class BoolJoin + { + public const uint CameraControlsVisible = 3001; + + public const uint KeypadVisbile = 3002; + + public const uint DirectoryVisible = 3003; + + + } + } +} \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/UIDrivers/NYU/NyuHuddleVTCPanelAvFunctionsDriver.cs b/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/HuddleVTCPanelAvFunctionsDriver.cs similarity index 79% rename from Essentials/PepperDashEssentials/UIDrivers/NYU/NyuHuddleVTCPanelAvFunctionsDriver.cs rename to Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/HuddleVTCPanelAvFunctionsDriver.cs index 312ddcd1..d7c4e7e2 100644 --- a/Essentials/PepperDashEssentials/UIDrivers/NYU/NyuHuddleVTCPanelAvFunctionsDriver.cs +++ b/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/HuddleVTCPanelAvFunctionsDriver.cs @@ -14,13 +14,13 @@ namespace PepperDash.Essentials /// /// /// - public class NyuHuddleVtcPanelAvFunctionsDriver : PanelDriverBase + public class HuddleVtcPanelAvFunctionsDriver : PanelDriverBase { CrestronTouchpanelPropertiesConfig Config; public enum UiDisplayMode { - PresentationMode, AudioSetup + Presentation, AudioSetup, Call, Start } /// @@ -38,14 +38,6 @@ namespace PepperDash.Essentials /// /// public string DefaultRoomKey { get; set; } - //{ - // get { return _DefaultRoomKey; } - // set - // { - // _DefaultRoomKey = value; - // } - //} - //string _DefaultRoomKey; /// /// @@ -60,11 +52,6 @@ namespace PepperDash.Essentials } EssentialsHuddleSpaceRoom _CurrentRoom; - /// - /// - /// - //uint CurrentInterlockedModalJoin; - /// /// For hitting feedback /// @@ -89,13 +76,19 @@ namespace PepperDash.Essentials /// /// Smart Object 3200 /// - SubpageReferenceList SourcesSrl; + SubpageReferenceList SourceStagingSrl; /// /// Smart Object 15022 /// SubpageReferenceList ActivityFooterSrl; + /// + /// + /// + SubpageReferenceList CallStagingSrl; + + /// /// Tracks which audio page group the UI is in /// @@ -131,29 +124,39 @@ namespace PepperDash.Essentials /// JoinedSigInterlock PopupInterlock; + /// + /// Interlock for various source, camera, call control bars. The bar above the activity footer. This is also + /// used to show start page + /// + JoinedSigInterlock StagingBarInterlock; + + JoinedSigInterlock CallPagesInterlock; + /// /// Constructor /// - public NyuHuddleVtcPanelAvFunctionsDriver(PanelDriverBase parent, CrestronTouchpanelPropertiesConfig config) + public HuddleVtcPanelAvFunctionsDriver(PanelDriverBase parent, CrestronTouchpanelPropertiesConfig config) : base(parent.TriList) { Config = config; Parent = parent; PopupInterlock = new JoinedSigInterlock(TriList); + StagingBarInterlock = new JoinedSigInterlock(TriList); + CallPagesInterlock = new JoinedSigInterlock(TriList); - SourcesSrl = new SubpageReferenceList(TriList, 3200, 3, 3, 3); + SourceStagingSrl = new SubpageReferenceList(TriList, UISmartObjectJoin.SourceStagingSRL, 3, 3, 3); - ActivityFooterSrl = new SubpageReferenceList(TriList, 15022, 3, 3, 3); + ActivityFooterSrl = new SubpageReferenceList(TriList, UISmartObjectJoin.ActivityFooterSRL, 3, 3, 3); CallButtonSig = ActivityFooterSrl.BoolInputSig(1, 1); ShareButtonSig = ActivityFooterSrl.BoolInputSig(2, 1); + SetupActivityFooterWhenRoomOff(); ShowVolumeGauge = true; - PowerOffTimeout = 30000; + //PowerOffTimeout = 30000; - TriList.StringInput[UIStringJoin.StartActivityText].StringValue = - "Tap Share to begin"; + //TriList.StringInput[UIStringJoin.StartActivityText].StringValue = "Tap an activity below"; } /// @@ -161,17 +164,46 @@ namespace PepperDash.Essentials /// public override void Show() { + if (CurrentRoom == null) + { + Debug.Console(1, "ERROR: AVUIFunctionsDriver, Cannot show. No room assigned"); + return; + } + + var roomConf = CurrentRoom.Config; + + if (Config.HeaderStyle == null || Config.HeaderStyle == UiHeaderStyle.Habanero) + { + TriList.SetString(UIStringJoin.CurrentRoomName, CurrentRoom.Name); + TriList.SetSigFalseAction(UIBoolJoin.RoomHeaderButtonPress, () => + PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.RoomHeaderPageVisible)); + } + else if (Config.HeaderStyle == UiHeaderStyle.Verbose) + { + // room name on join 1, concat phone and sip on join 2, no button method + TriList.SetString(UIStringJoin.CurrentRoomName, CurrentRoom.Name); + var addr = roomConf.Addresses; + if (addr == null) // protect from missing values by using default empties + addr = new EssentialsRoomAddressPropertiesConfig(); + // empty string when either missing, pipe when both showing + TriList.SetString(UIStringJoin.RoomAddressPipeText, + (string.IsNullOrEmpty(addr.PhoneNumber.Trim()) + || string.IsNullOrEmpty(addr.SipAddress.Trim())) ? "" : " | "); + TriList.SetString(UIStringJoin.RoomPhoneText, addr.PhoneNumber); + TriList.SetString(UIStringJoin.RoomSipText, addr.SipAddress); + } + TriList.SetBool(UIBoolJoin.DateAndTimeVisible, Config.ShowDate && Config.ShowTime); TriList.SetBool(UIBoolJoin.DateOnlyVisible, Config.ShowDate && !Config.ShowTime); TriList.SetBool(UIBoolJoin.TimeOnlyVisible, !Config.ShowDate && Config.ShowTime); - TriList.SetBool(UIBoolJoin.TopBarVisible, true); + TriList.SetBool(UIBoolJoin.TopBarHabaneroVisible, true); TriList.SetBool(UIBoolJoin.ActivityFooterVisible, true); // Default to showing rooms/sources now. //ShowMode(UiDisplayMode.PresentationMode); if (CurrentRoom.OnFeedback.BoolValue) { - TriList.SetBool(UIBoolJoin.StagingPageVisible, true); + TriList.SetBool(UIBoolJoin.SourceStagingBarVisible, true); TriList.SetBool(UIBoolJoin.TapToBeginVisible, false); TriList.SetBool(UIBoolJoin.SelectASourceVisible, false); } @@ -188,7 +220,24 @@ namespace PepperDash.Essentials // Generic "close" button for these modals TriList.SetSigFalseAction(UIBoolJoin.InterlockedModalClosePress, PopupInterlock.HideAndClear); - // Help button + // Help button and popup + if (CurrentRoom.Config.Help != null) + { + TriList.SetString(UIStringJoin.HelpMessage, roomConf.Help.Message); + TriList.SetBool(UIBoolJoin.HelpPageShowCallButtonVisible, roomConf.Help.ShowCallButton); + TriList.SetString(UIStringJoin.HelpPageCallButtonText, roomConf.Help.CallButtonText); + if(roomConf.Help.ShowCallButton) + TriList.SetSigFalseAction(UIBoolJoin.HelpPageShowCallButtonPress, () => { }); // ************ FILL IN + else + TriList.ClearBoolSigAction(UIBoolJoin.HelpPageShowCallButtonPress); + } + else // older config + { + TriList.SetString(UIStringJoin.HelpMessage, CurrentRoom.Config.HelpMessage); + TriList.SetBool(UIBoolJoin.HelpPageShowCallButtonVisible, false); + TriList.SetString(UIStringJoin.HelpPageCallButtonText, null); + TriList.ClearBoolSigAction(UIBoolJoin.HelpPageShowCallButtonPress); + } TriList.SetSigFalseAction(UIBoolJoin.HelpPress, () => { string message = null; @@ -198,22 +247,22 @@ namespace PepperDash.Essentials message = room.Config.HelpMessage; else message = "Sorry, no help message available. No room connected."; - TriList.StringInput[UIStringJoin.HelpMessage].StringValue = message; + //TriList.StringInput[UIStringJoin.HelpMessage].StringValue = message; PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.HelpPageVisible); }); // Lights button - TriList.SetSigFalseAction(UIBoolJoin.LightsHeaderButtonPress, () => + TriList.SetSigFalseAction(UIBoolJoin.LightsHeaderButtonPress, () => // ******************** FILL IN { }); // Call header button - TriList.SetSigFalseAction(UIBoolJoin.CallHeaderButtonPress, () => + if(roomConf.OneButtonMeeting != null && roomConf.OneButtonMeeting.Enable) + { + TriList.SetBool(UIBoolJoin.CalendarHeaderButtonVisible, true); + TriList.SetSigFalseAction(UIBoolJoin.CallHeaderButtonPress, () => { }); + } - // Room name button - //TriList.SetSigFalseAction(UIBoolJoin.RoomHeaderButtonPress, () => - // ShowInterlockedModal(UIBoolJoin.RoomHeaderPageVisible)); - // Setup button - shows volumes with default button OR hold for tech page TriList.SetSigHeldAction(UIBoolJoin.GearHeaderButtonPress, 2000, () => PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.TechPanelSetupVisible), @@ -245,13 +294,59 @@ namespace PepperDash.Essentials base.Show(); } + /// + /// Puts the UI into the "start" mode. System is off. Logo shows. Activity SRL is clear + /// + void ShowStartMode() + { + SetupActivityFooterWhenRoomOff(); + + ShareButtonSig.BoolValue = false; + CallButtonSig.BoolValue = false; + ShowLogo(); + StagingBarInterlock.ShowInterlocked(UIBoolJoin.StartPageVisible); + StagingBarInterlock.HideAndClear(); + } + + void ShowShareMode() + { + ShareButtonSig.BoolValue = true; + CallButtonSig.BoolValue = false; + StagingBarInterlock.ShowInterlocked(UIBoolJoin.SourceStagingBarVisible); + } + + void ShowVideoCallMode() + { + ShareButtonSig.BoolValue = false; + CallButtonSig.BoolValue = true; + StagingBarInterlock.ShowInterlocked(UIBoolJoin.CallStagingBarVisible); + } + + /// + /// + /// + void ShowLogo() + { + if (CurrentRoom.LogoUrl == null) + { + TriList.SetBool(UIBoolJoin.LogoDefaultVisible, true); + TriList.SetBool(UIBoolJoin.LogoUrlVisible, false); + } + else + { + TriList.SetBool(UIBoolJoin.LogoDefaultVisible, false); + TriList.SetBool(UIBoolJoin.LogoUrlVisible, true); + TriList.SetString(UIStringJoin.LogoUrl, _CurrentRoom.LogoUrl); + } + } + /// /// /// public override void Hide() { HideAndClearCurrentDisplayModeSigsInUse(); - TriList.BooleanInput[UIBoolJoin.TopBarVisible].BoolValue = false; + TriList.BooleanInput[UIBoolJoin.TopBarHabaneroVisible].BoolValue = false; TriList.BooleanInput[UIBoolJoin.ActivityFooterVisible].BoolValue = false; TriList.BooleanInput[UIBoolJoin.StartPageVisible].BoolValue = false; TriList.BooleanInput[UIBoolJoin.TapToBeginVisible].BoolValue = false; @@ -266,9 +361,9 @@ namespace PepperDash.Essentials { ActivityFooterSrl.Clear(); ActivityFooterSrl.AddItem(new SubpageReferenceListActivityItem(1, ActivityFooterSrl, 1, - b => { if (!b) CallButtonPressed(); })); + b => { if (!b) ActivityCallButtonPressed(); })); ActivityFooterSrl.AddItem(new SubpageReferenceListActivityItem(2, ActivityFooterSrl, 0, - b => { if (!b) ShareButtonPressed(); })); + b => { if (!b) ActivityShareButtonPressed(); })); ActivityFooterSrl.Count = 2; TriList.UShortInput[UIUshortJoin.PresentationListCaretMode].UShortValue = 0; ShareButtonSig.BoolValue = false; @@ -280,10 +375,10 @@ namespace PepperDash.Essentials void SetupActivityFooterWhenRoomOn() { ActivityFooterSrl.Clear(); - ActivityFooterSrl.AddItem(new SubpageReferenceListActivityItem(1, ActivityFooterSrl, - 1, null)); - ActivityFooterSrl.AddItem(new SubpageReferenceListActivityItem(2, ActivityFooterSrl, - 0, null)); + ActivityFooterSrl.AddItem(new SubpageReferenceListActivityItem(1, ActivityFooterSrl, 1, + b => { if (!b) ActivityCallButtonPressed(); })); + ActivityFooterSrl.AddItem(new SubpageReferenceListActivityItem(2, ActivityFooterSrl, 0, + b => { if (!b) ActivityShareButtonPressed(); })); ActivityFooterSrl.AddItem(new SubpageReferenceListActivityItem(3, ActivityFooterSrl, 3, b => { if (!b) PowerButtonPressed(); })); ActivityFooterSrl.Count = 2; @@ -293,11 +388,45 @@ namespace PepperDash.Essentials ShareButtonSig.BoolValue = CurrentRoom.OnFeedback.BoolValue; } - void CallButtonPressed() + ///// + ///// Builds the call stage + ///// + //void SetupCallStagingSrl() + //{ + // CallStagingSrl = new SubpageReferenceList(TriList, UISmartObjectJoin.CallStagingSrl, 3, 3, 3); + // var c = CallStagingSrl; + // c.AddItem(new SubpageReferenceListButtonAndModeItem(1, c, 1, b => { if (!b) { } })); //************ Camera + // c.AddItem(new SubpageReferenceListButtonAndModeItem(2, c, 2, b => { if (!b) { } })); //************ Directory + // c.AddItem(new SubpageReferenceListButtonAndModeItem(3, c, 3, b => { if (!b) { } })); //************ Keypad + // c.AddItem(new SubpageReferenceListButtonAndModeItem(4, c, 4, b => { if (!b) { } })); //************ End Call + // c.Count = 3; + //} + + /// + /// This may need to be part of an event handler routine from codec feedback. + /// Adds End Call to Call Staging list + /// + void SetupEndCall() + { + CallStagingSrl.Count = 4; + } + + /// + /// Part of event handler? Removes End Call from Call Staging + /// + void HideEndCall() + { + CallStagingSrl.Count = 3; + } + + /// + /// + /// + void ActivityCallButtonPressed() { CallButtonSig.BoolValue = true; TriList.SetBool(UIBoolJoin.StartPageVisible, false); - TriList.SetBool(UIBoolJoin.StagingPageVisible, false); + TriList.SetBool(UIBoolJoin.SourceStagingBarVisible, false); TriList.SetBool(UIBoolJoin.SelectASourceVisible, false); // Call "page"? Or separate UI driver? } @@ -305,11 +434,11 @@ namespace PepperDash.Essentials /// /// Attached to activity list share button /// - void ShareButtonPressed() + void ActivityShareButtonPressed() { ShareButtonSig.BoolValue = true; TriList.SetBool(UIBoolJoin.StartPageVisible, false); - TriList.SetBool(UIBoolJoin.StagingPageVisible, true); + TriList.SetBool(UIBoolJoin.SourceStagingBarVisible, true); TriList.SetBool(UIBoolJoin.SelectASourceVisible, true); // Run default source when room is off and share is pressed if (!CurrentRoom.OnFeedback.BoolValue) @@ -355,7 +484,6 @@ namespace PepperDash.Essentials pm = PageManagers[uiDev]; // Otherwise make an apporiate one else if (uiDev is ISetTopBoxControls) - //pm = new SetTopBoxMediumPageManager(uiDev as ISetTopBoxControls, TriList); pm = new SetTopBoxThreePanelPageManager(uiDev as ISetTopBoxControls, TriList); else if (uiDev is IDiscPlayerControls) pm = new DiscPlayerMediumPageManager(uiDev as IDiscPlayerControls, TriList); @@ -560,26 +688,16 @@ namespace PepperDash.Essentials continue; } var routeKey = kvp.Key; - var item = new SubpageReferenceListSourceItem(i++, SourcesSrl, srcConfig, + var item = new SubpageReferenceListSourceItem(i++, SourceStagingSrl, srcConfig, b => { if (!b) UiSelectSource(routeKey); }); - SourcesSrl.AddItem(item); // add to the SRL + SourceStagingSrl.AddItem(item); // add to the SRL item.RegisterForSourceChange(_CurrentRoom); } - SourcesSrl.Count = (ushort)(i - 1); + SourceStagingSrl.Count = (ushort)(i - 1); } // Name and logo TriList.StringInput[UIStringJoin.CurrentRoomName].StringValue = _CurrentRoom.Name; - if (_CurrentRoom.LogoUrl == null) - { - TriList.BooleanInput[UIBoolJoin.LogoDefaultVisible].BoolValue = true; - TriList.BooleanInput[UIBoolJoin.LogoUrlVisible].BoolValue = false; - } - else - { - TriList.BooleanInput[UIBoolJoin.LogoDefaultVisible].BoolValue = false; - TriList.BooleanInput[UIBoolJoin.LogoUrlVisible].BoolValue = true; - TriList.StringInput[UIStringJoin.LogoUrl].StringValue = _CurrentRoom.LogoUrl; - } + ShowLogo(); // Shutdown timer _CurrentRoom.ShutdownPromptTimer.HasStarted += ShutdownPromptTimer_HasStarted; @@ -622,7 +740,7 @@ namespace PepperDash.Essentials { SetupActivityFooterWhenRoomOn(); TriList.BooleanInput[UIBoolJoin.SelectASourceVisible].BoolValue = false; - TriList.BooleanInput[UIBoolJoin.StagingPageVisible].BoolValue = true; + TriList.BooleanInput[UIBoolJoin.SourceStagingBarVisible].BoolValue = true; TriList.BooleanInput[UIBoolJoin.StartPageVisible].BoolValue = false; TriList.BooleanInput[UIBoolJoin.VolumeSingleMute1Visible].BoolValue = true; @@ -632,7 +750,7 @@ namespace PepperDash.Essentials SetupActivityFooterWhenRoomOff(); TriList.BooleanInput[UIBoolJoin.StartPageVisible].BoolValue = true; TriList.BooleanInput[UIBoolJoin.VolumeSingleMute1Visible].BoolValue = false; - TriList.BooleanInput[UIBoolJoin.StagingPageVisible].BoolValue = false; + TriList.BooleanInput[UIBoolJoin.SourceStagingBarVisible].BoolValue = false; } } diff --git a/Essentials/PepperDashEssentials/UIDrivers/JoinedSigInterlock.cs b/Essentials/PepperDashEssentials/UIDrivers/JoinedSigInterlock.cs index d42b70a5..184ba5c1 100644 --- a/Essentials/PepperDashEssentials/UIDrivers/JoinedSigInterlock.cs +++ b/Essentials/PepperDashEssentials/UIDrivers/JoinedSigInterlock.cs @@ -19,10 +19,12 @@ namespace PepperDash.Essentials } /// - /// Hides CurrentJoin and shows join + /// Hides CurrentJoin and shows join. Does nothing when resending CurrentJoin /// public void ShowInterlocked(uint join) { + if (CurrentJoin == join) + return; if (CurrentJoin > 0) TriList.BooleanInput[CurrentJoin].BoolValue = false; CurrentJoin = join; diff --git a/Essentials/PepperDashEssentials/UIDrivers/UIBoolJoin.cs b/Essentials/PepperDashEssentials/UIDrivers/UIBoolJoin.cs index 9ba4c89c..bee7544e 100644 --- a/Essentials/PepperDashEssentials/UIDrivers/UIBoolJoin.cs +++ b/Essentials/PepperDashEssentials/UIDrivers/UIBoolJoin.cs @@ -160,13 +160,13 @@ namespace PepperDash.Essentials /// public const uint ShowPanelSetupPress = 15010; /// - /// 15011 + /// 15011 - Top bar with room name and button that pops up dialog with room data /// - public const uint TopBarVisible = 15011; + public const uint TopBarHabaneroVisible = 15011; /// /// 15012 /// - public const uint StagingPageVisible = 15012; + public const uint SourceStagingBarVisible = 15012; /// /// 15013 /// @@ -215,7 +215,7 @@ namespace PepperDash.Essentials /// 15026 /// public const uint LightsHeaderButtonPress = 15026; - /// + /// [- /// 15027 /// public const uint CallHeaderButtonPress = 15027; @@ -264,6 +264,14 @@ namespace PepperDash.Essentials /// public const uint GearButtonVisible = 15037; /// + /// 15038 + /// + public const uint CalendarHeaderButtonVisible = 15038; + /// + /// 15039 + /// + public const uint CalendarHeaderButtonPress = 15039; + /// /// 15040 /// public const uint CallStatusPageVisible = 15040; @@ -283,8 +291,10 @@ namespace PepperDash.Essentials /// 15044 Close button for source modal overlay /// public const uint SourceBackgroundOverlayClosePress = 15044; - - + /// + /// 15045 - Visibility for the bar containing call navigation button list + /// + public const uint CallStagingBarVisible = 15045; /// /// 15051 /// @@ -350,17 +360,22 @@ namespace PepperDash.Essentials /// 15065 /// public const uint LogoUrlVisible = 15065; - + /// + /// 15083 - Press for Call help desk on AC/VC + /// + public const uint HelpPageShowCallButtonPress = 15083; + /// + /// 15084 - Show the "call help desk" button on help page + /// + public const uint HelpPageShowCallButtonVisible = 15084; /// /// 15085 Visibility join for help subpage /// public const uint HelpPageVisible = 15085; - /// /// 15086 Press for help header button /// public const uint HelpPress = 15086; - /// /// 15088 /// diff --git a/Essentials/PepperDashEssentials/UIDrivers/UISmartObjectJoin.cs b/Essentials/PepperDashEssentials/UIDrivers/UISmartObjectJoin.cs index cc2e83c9..5e302403 100644 --- a/Essentials/PepperDashEssentials/UIDrivers/UISmartObjectJoin.cs +++ b/Essentials/PepperDashEssentials/UIDrivers/UISmartObjectJoin.cs @@ -5,10 +5,15 @@ /// /// 3200 The staging, source-select list /// - public const uint StagingListSRL = 3200; + public const uint SourceStagingSRL = 3200; /// /// 15022 The main activity footer /// public const uint ActivityFooterSRL = 15022; + + /// + /// 15045 + /// + public const uint CallStagingSrl = 15045; } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/UIDrivers/UIStringlJoin.cs b/Essentials/PepperDashEssentials/UIDrivers/UIStringlJoin.cs index 28118f1e..67d0c1aa 100644 --- a/Essentials/PepperDashEssentials/UIDrivers/UIStringlJoin.cs +++ b/Essentials/PepperDashEssentials/UIDrivers/UIStringlJoin.cs @@ -9,7 +9,7 @@ using Crestron.SimplSharpPro.DeviceSupport; namespace PepperDash.Essentials { /// - /// + /// Common string join number constants /// public class UIStringJoin { @@ -51,6 +51,18 @@ namespace PepperDash.Essentials /// public const uint CurrentSourceIcon = 3903; /// + /// 3904 - Phone number for room header + /// + public const uint RoomPhoneText = 3904; + /// + /// 3905 - SIP address for room header + /// + public const uint RoomSipText = 3905; + /// + /// 3906 - The separator for verbose-header text on addresses + /// + public const uint RoomAddressPipeText = 3906; + /// /// 3911 /// public const uint PowerOffMessage = 3911; @@ -71,11 +83,14 @@ namespace PepperDash.Essentials /// 3922 /// public const uint HelpMessage = 3922; - /// /// 3923 /// public const uint LogoUrl = 3923; + /// + /// 3924 - the text on the "call help desk" button + /// + public const uint HelpPageCallButtonText = 3924; /// /// 3961 Name of source on display 1