//using System; //using System.Collections.Generic; //using System.Linq; //using Crestron.SimplSharp; //using Crestron.SimplSharpPro; //using PepperDash.Core; //using PepperDash.Essentials.Core; //using PepperDash.Essentials.Core.Config; //using PepperDash.Essentials.Core.SmartObjects; //using PepperDash.Essentials.Core.PageManagers; //namespace PepperDash.Essentials //{ // /// // /// // /// // public class EssentialsPresentationPanelAvFunctionsDriver : PanelDriverBase // { // /// // /// Smart Object 3200 // /// // SubpageReferenceList SourcesSrl; // /// // /// For tracking feedback on last selected // /// // BoolInputSig LastSelectedSourceSig; // /// // /// The source that has been selected and is awaiting assignment to a display // /// // SourceListItem PendingSource; // bool IsSharingModeAdvanced; // CrestronTouchpanelPropertiesConfig Config; // public enum UiDisplayMode // { // PresentationMode, AudioSetup // } // /// // /// Whether volume ramping from this panel will show the volume // /// gauge popup. // /// // public bool ShowVolumeGauge { get; set; } // /// // /// The amount of time that the volume buttons stays on screen, in ms // /// // public uint VolumeButtonPopupTimeout // { // get { return VolumeButtonsPopupFeedback.TimeoutMs; } // set { VolumeButtonsPopupFeedback.TimeoutMs = value; } // } // /// // /// The amount of time that the volume gauge stays on screen, in ms // /// // public uint VolumeGaugePopupTimeout // { // get { return VolumeGaugeFeedback.TimeoutMs; } // set { VolumeGaugeFeedback.TimeoutMs = value; } // } // /// // /// // /// // public uint PowerOffTimeout { get; set; } // /// // /// // /// // public string DefaultRoomKey // { // get { return _DefaultRoomKey; } // set // { // _DefaultRoomKey = value; // CurrentRoom = DeviceManager.GetDeviceForKey(value) as EssentialsPresentationRoom; // } // } // string _DefaultRoomKey; // /// // /// // /// // public EssentialsPresentationRoom CurrentRoom // { // get { return _CurrentRoom; } // set // { // SetCurrentRoom(value); // } // } // EssentialsPresentationRoom _CurrentRoom; // /// // /// For hitting feedback // /// // BoolInputSig ShareButtonSig; // BoolInputSig EndMeetingButtonSig; // /// // /// Controls the extended period that the volume gauge shows on-screen, // /// as triggered by Volume up/down operations // /// // BoolFeedbackPulseExtender VolumeGaugeFeedback; // /// // /// Controls the period that the volume buttons show on non-hard-button // /// interfaces // /// // BoolFeedbackPulseExtender VolumeButtonsPopupFeedback; // /// // /// The parent driver for this // /// // PanelDriverBase Parent; // ///// // ///// Driver that manages advanced sharing features // ///// // //DualDisplaySimpleOrAdvancedRouting DualDisplayUiDriver; // /// // /// All children attached to this driver. For hiding and showing as a group. // /// // List ChildDrivers = new List(); // List CurrentDisplayModeSigsInUse = new List(); // /// // /// Smart Object 15022 // /// // SubpageReferenceList ActivityFooterSrl; // /// // /// Tracks which audio page group the UI is in // /// // UiDisplayMode CurrentDisplayMode; // /// // /// The AV page mangagers that have been used, to keep them alive for later // /// // Dictionary PageManagers = new Dictionary(); // /// // /// Current page manager running for a source // /// // PageManager CurrentSourcePageManager; // /// // /// Will auto-timeout a power off // /// // CTimer PowerOffTimer; // /// // /// Constructor // /// // public EssentialsPresentationPanelAvFunctionsDriver(PanelDriverBase parent, // CrestronTouchpanelPropertiesConfig config) // : base(parent.TriList) // { // Config = config; // Parent = parent; // ActivityFooterSrl = new SubpageReferenceList(TriList, 15022, 3, 3, 3); // //SetupActivityFooterWhenRoomOff(); // ShowVolumeGauge = true; // // One-second pulse extender for volume gauge // VolumeGaugeFeedback = new BoolFeedbackPulseExtender(1500); // VolumeGaugeFeedback.Feedback // .LinkInputSig(TriList.BooleanInput[UIBoolJoin.VolumeGaugePopupVisible]); // VolumeButtonsPopupFeedback = new BoolFeedbackPulseExtender(4000); // VolumeButtonsPopupFeedback.Feedback // .LinkInputSig(TriList.BooleanInput[UIBoolJoin.VolumeButtonPopupVisible]); // PowerOffTimeout = 30000; // SourcesSrl = new SubpageReferenceList(TriList, 3200, 3, 3, 3); // TriList.StringInput[UIStringJoin.StartActivityText].StringValue = // "Tap an activity to begin"; // // Sharing mode things // TriList.SetSigFalseAction(UIBoolJoin.ToggleSharingModePress, ToggleSharingModePressed); // TriList.SetSigFalseAction(UIBoolJoin.Display1AudioButtonPressAndFb, Display1AudioPress); // TriList.SetSigFalseAction(UIBoolJoin.Display1ControlButtonPress, Display1ControlPress); // TriList.SetSigTrueAction(UIBoolJoin.Display1SelectPressAndFb, Display1Press); // TriList.SetSigFalseAction(UIBoolJoin.Display2AudioButtonPressAndFb, Display2AudioPress); // TriList.SetSigFalseAction(UIBoolJoin.Display2ControlButtonPress, Display2ControlPress); // TriList.SetSigTrueAction(UIBoolJoin.Display2SelectPressAndFb, Display2Press); // } // /// // /// // /// // public override void Show() // { // TriList.BooleanInput[UIBoolJoin.TopBarHabaneroVisible].BoolValue = true; // TriList.BooleanInput[UIBoolJoin.ActivityFooterVisible].BoolValue = true; // // Default to showing rooms/sources now. // ShowMode(UiDisplayMode.PresentationMode); // // Attach actions // TriList.SetSigFalseAction(UIBoolJoin.VolumeButtonPopupPress, VolumeButtonsTogglePress); // //Interlocked modals // TriList.SetSigFalseAction(UIBoolJoin.InterlockedModalClosePress, HideCurrentInterlockedModal); // TriList.SetSigFalseAction(UIBoolJoin.HelpPress, () => // { // string message = null; // var room = DeviceManager.GetDeviceForKey(Config.DefaultRoomKey) // as EssentialsPresentationRoom; // if (room != null) // message = room.Config.HelpMessage; // else // message = "Sorry, no help message available. No room connected."; // TriList.StringInput[UIStringJoin.HelpMessage].StringValue = message; // ShowInterlockedModal(UIBoolJoin.HelpPageVisible); // }); // TriList.SetSigFalseAction(UIBoolJoin.HeaderRoomButtonPress, () => // ShowInterlockedModal(UIBoolJoin.RoomHeaderPageVisible)); // TriList.SetSigFalseAction(UIBoolJoin.FIXFIX_HeaderGearButtonPress_FIXFIX, () => // ShowInterlockedModal(UIBoolJoin.VolumesPageVisible)); // // power-related functions // // Note: some of these are not directly-related to the huddle space UI, but are held over // // in case // TriList.SetSigFalseAction(UIBoolJoin.ShowPowerOffPress, PowerButtonPressed); // TriList.SetSigFalseAction(UIBoolJoin.PowerOffCancelPress, CancelPowerOff); // TriList.SetSigFalseAction(UIBoolJoin.PowerOffConfirmPress, FinishPowerOff); // TriList.SetSigFalseAction(UIBoolJoin.PowerOffMorePress, () => // { // CancelPowerOffTimer(); // TriList.BooleanInput[UIBoolJoin.PowerOffStep1Visible].BoolValue = false; // TriList.BooleanInput[UIBoolJoin.PowerOffStep2Visible].BoolValue = true; // }); // TriList.SetSigFalseAction(UIBoolJoin.AllRoomsOffPress, () => // { // EssentialsHuddleSpaceRoom.AllRoomsOff(); // CancelPowerOff(); // }); // SetupActivityFooterWhenRoomOff(); // base.Show(); // } // /// // /// // /// // public override void Hide() // { // var tl = TriList.BooleanInput; // HideAndClearCurrentDisplayModeSigsInUse(); // tl[UIBoolJoin.TopBarHabaneroVisible].BoolValue = false; // tl[UIBoolJoin.ActivityFooterVisible].BoolValue = false; // tl[StartPageVisibleJoin].BoolValue = false; // tl[UIBoolJoin.TapToBeginVisible].BoolValue = false; // tl[UIBoolJoin.ToggleSharingModeVisible].BoolValue = false; // tl[UIBoolJoin.SourceStagingBarVisible].BoolValue = false; // if (IsSharingModeAdvanced) // tl[UIBoolJoin.DualDisplayPageVisible].BoolValue = false; // else // tl[UIBoolJoin.SelectASourceVisible].BoolValue = false; // VolumeButtonsPopupFeedback.ClearNow(); // CancelPowerOff(); // base.Hide(); // } // /// // /// // /// // void ShowCurrentSharingMode() // { // var tlb = TriList.BooleanInput; // tlb[UIBoolJoin.ToggleSharingModeVisible].BoolValue = true; // tlb[UIBoolJoin.SourceStagingBarVisible].BoolValue = true; // if (IsSharingModeAdvanced) // { // tlb[UIBoolJoin.DualDisplayPageVisible].BoolValue = true; // TriList.StringInput[UIStringJoin.Display1TitleLabel].StringValue = // (CurrentRoom.Displays[1] as IKeyName).Name; // TriList.StringInput[UIStringJoin.Display2TitleLabel].StringValue = // (CurrentRoom.Displays[2] as IKeyName).Name; // } // else // tlb[UIBoolJoin.SelectASourceVisible].BoolValue = true; // } // /// // /// // /// // void HideCurrentSharingMode() // { // var tl = TriList.BooleanInput; // tl[UIBoolJoin.ToggleSharingModeVisible].BoolValue = false; // tl[UIBoolJoin.SourceStagingBarVisible].BoolValue = false; // tl[UIBoolJoin.DualDisplayPageVisible].BoolValue = false; // tl[UIBoolJoin.SelectASourceVisible].BoolValue = false; // } // /// // /// Shows the various "modes" that this driver controls. Presentation, Setup page // /// // /// // public void ShowMode(UiDisplayMode mode) // { // //Clear whatever is showing now. // HideAndClearCurrentDisplayModeSigsInUse(); // CurrentDisplayMode = mode; // switch (mode) // { // case UiDisplayMode.PresentationMode: // // show start page or staging... // if (CurrentRoom.OnFeedback.BoolValue) // { // //TriList.BooleanInput[UIBoolJoin.StagingPageVisible].BoolValue = true; // TriList.BooleanInput[UIBoolJoin.TapToBeginVisible].BoolValue = false; // TriList.BooleanInput[UIBoolJoin.SelectASourceVisible].BoolValue = false; // } // else // { // TriList.BooleanInput[StartPageVisibleJoin].BoolValue = true; // TriList.BooleanInput[UIBoolJoin.TapToBeginVisible].BoolValue = true; // TriList.BooleanInput[UIBoolJoin.SelectASourceVisible].BoolValue = false; // } // // Date/time // if (Config.ShowDate && Config.ShowTime) // { // TriList.BooleanInput[UIBoolJoin.DateAndTimeVisible].BoolValue = true; // TriList.BooleanInput[UIBoolJoin.DateOnlyVisible].BoolValue = false; // TriList.BooleanInput[UIBoolJoin.TimeOnlyVisible].BoolValue = false; // } // else // { // TriList.BooleanInput[UIBoolJoin.DateAndTimeVisible].BoolValue = false; // TriList.BooleanInput[UIBoolJoin.DateOnlyVisible].BoolValue = Config.ShowDate; // TriList.BooleanInput[UIBoolJoin.TimeOnlyVisible].BoolValue = Config.ShowTime; // } // //TriList.SetSigFalseAction(UIBoolJoin.ToggleSharingModePress, ToggleSharingModePressed); // ShowCurrentDisplayModeSigsInUse(); // break; // } // } // /// // /// // /// // void SetupSourceList() // { // // get the source list config and set up the source list // var config = ConfigReader.ConfigObject.SourceLists; // if (config.ContainsKey(CurrentRoom.SourceListKey)) // { // var srcList = config[CurrentRoom.SourceListKey] // .Values.ToList().OrderBy(s => s.Order); // // Setup sources list // uint i = 1; // counter for UI list // foreach (var srcConfig in srcList) // { // if (!srcConfig.IncludeInSourceList) // Skip sources marked this way // continue; // var sourceKey = srcConfig.SourceKey; // var actualSource = DeviceManager.GetDeviceForKey(sourceKey) as Device; // if (actualSource == null) // { // Debug.Console(0, "Cannot assign missing source '{0}' to source UI list", // srcConfig.SourceKey); // continue; // } // var localSrcItem = srcConfig; // lambda scope below // var localIndex = i; // SourcesSrl.GetBoolFeedbackSig(i, 1).UserObject = new Action(b => // { // if (b) return; // if (LastSelectedSourceSig != null) // LastSelectedSourceSig.BoolValue = false; // LastSelectedSourceSig = SourcesSrl.BoolInputSig(localIndex, 1); // LastSelectedSourceSig.BoolValue = true; // if (IsSharingModeAdvanced) // { // PendingSource = localSrcItem; // } // else // { // CurrentRoom.RouteSourceToAllDestinations(localSrcItem); // } // }); // SourcesSrl.StringInputSig(i, 1).StringValue = srcConfig.PreferredName; // i++; // } // var count = (ushort)(i-1); // SourcesSrl.Count = count; // TriList.BooleanInput[UIBoolJoin.StagingPageAdditionalArrowsVisible].BoolValue = // count >= Config.SourcesOverflowCount; // _CurrentRoom.CurrentDisplay1SourceChange += _CurrentRoom_CurrentDisplay1SourceChange; // _CurrentRoom.CurrentDisplay2SourceChange += _CurrentRoom_CurrentDisplay2SourceChange; // } // } // /// // /// // /// // void ToggleSharingModePressed() // { // if (CurrentSourcePageManager != null) // CurrentSourcePageManager.Hide(); // HideCurrentSharingMode(); // IsSharingModeAdvanced = !IsSharingModeAdvanced; // TriList.BooleanInput[UIBoolJoin.ToggleSharingModePress].BoolValue = IsSharingModeAdvanced; // ShowCurrentSharingMode(); // } // ///// // ///// // ///// // //void EnableAppropriateDisplayButtons() // //{ // // if (LastSelectedSourceSig != null) // // LastSelectedSourceSig.BoolValue = false; // //} // public void Display1Press() // { // CurrentRoom.SourceToDisplay1(PendingSource); // } // public void Display1AudioPress() // { // } // public void Display1ControlPress() // { // var uiDev = CurrentRoom.Display1SourceInfo.SourceDevice as IUiDisplayInfo; // ShowSource(uiDev); // } // public void Display2Press() // { // CurrentRoom.SourceToDisplay2(PendingSource); // } // public void Display2AudioPress() // { // } // public void Display2ControlPress() // { // var uiDev = CurrentRoom.Display2SourceInfo.SourceDevice as IUiDisplayInfo; // ShowSource(uiDev); // } // /// // /// When the room is off, set the footer SRL // /// // void SetupActivityFooterWhenRoomOff() // { // ActivityFooterSrl.Clear(); // ActivityFooterSrl.AddItem(new SubpageReferenceListActivityItem(1, ActivityFooterSrl, 0, // b => { if (!b) ShareButtonPressed(); })); // // only show phone call when there's a dialer present // ActivityFooterSrl.AddItem(new SubpageReferenceListActivityItem(2, ActivityFooterSrl, 1, // b => { })); // ActivityFooterSrl.Count = (ushort)(CurrentRoom.HasAudioDialer ? 2 : 1); // TriList.UShortInput[UIUshortJoin.PresentationStagingCaretMode].UShortValue = // (ushort)(CurrentRoom.HasAudioDialer ? 1 : 0); // } // /// // /// Sets up the footer SRL for when the room is on // /// // void SetupActivityFooterWhenRoomOn() // { // ActivityFooterSrl.Clear(); // ActivityFooterSrl.AddItem(new SubpageReferenceListActivityItem(1, ActivityFooterSrl, // 0, null)); // if (CurrentRoom.HasAudioDialer) // { // ActivityFooterSrl.AddItem(new SubpageReferenceListActivityItem(2, ActivityFooterSrl, // 1, b => { })); // ActivityFooterSrl.AddItem(new SubpageReferenceListActivityItem(3, ActivityFooterSrl, // 3, b => { if (!b) PowerButtonPressed(); })); // ActivityFooterSrl.Count = 3; // TriList.UShortInput[UIUshortJoin.PresentationStagingCaretMode].UShortValue = 2; // EndMeetingButtonSig = ActivityFooterSrl.BoolInputSig(3, 1); // } // else // { // ActivityFooterSrl.AddItem(new SubpageReferenceListActivityItem(2, ActivityFooterSrl, // 3, b => { if (!b) PowerButtonPressed(); })); // ActivityFooterSrl.Count = 2; // TriList.UShortInput[UIUshortJoin.PresentationStagingCaretMode].UShortValue = 1; // EndMeetingButtonSig = ActivityFooterSrl.BoolInputSig(2, 1); // } // } // /// // /// Attached to activity list share button // /// // void ShareButtonPressed() // { // ShareButtonSig = ActivityFooterSrl.BoolInputSig(1, 1); // if (!_CurrentRoom.OnFeedback.BoolValue) // { // ShareButtonSig.BoolValue = true; // TriList.BooleanInput[StartPageVisibleJoin].BoolValue = false; // ShowCurrentSharingMode(); // } // } // uint CurrentInterlockedModalJoin; // void ShowInterlockedModal(uint join) // { // if (CurrentInterlockedModalJoin == join) // HideCurrentInterlockedModal(); // else // { // TriList.BooleanInput[UIBoolJoin.HelpPageVisible].BoolValue = join == UIBoolJoin.HelpPageVisible; // TriList.BooleanInput[UIBoolJoin.RoomHeaderPageVisible].BoolValue = join == UIBoolJoin.RoomHeaderPageVisible; // TriList.BooleanInput[UIBoolJoin.VolumesPageVisible].BoolValue = join == UIBoolJoin.VolumesPageVisible; // CurrentInterlockedModalJoin = join; // } // } // void HideCurrentInterlockedModal() // { // TriList.BooleanInput[CurrentInterlockedModalJoin].BoolValue = false; // CurrentInterlockedModalJoin = 0; // } // /// // /// Shows all sigs that are in CurrentDisplayModeSigsInUse // /// // void ShowCurrentDisplayModeSigsInUse() // { // foreach (var sig in CurrentDisplayModeSigsInUse) // sig.BoolValue = true; // } // /// // /// Hides all CurrentDisplayModeSigsInUse sigs and clears the array // /// // void HideAndClearCurrentDisplayModeSigsInUse() // { // foreach (var sig in CurrentDisplayModeSigsInUse) // sig.BoolValue = false; // CurrentDisplayModeSigsInUse.Clear(); // } // /// // /// Send the UI back depending on location, not used in huddle UI // /// // public override void BackButtonPressed() // { // switch (CurrentDisplayMode) // { // case UiDisplayMode.PresentationMode: // //CancelReturnToSourceTimer(); // BackToHome(); // break; // } // } // /// // /// // /// // void BackToHome() // { // Hide(); // Parent.Show(); // } // /// // /// Loads the appropriate Sigs into CurrentDisplayModeSigsInUse and shows them // /// // void ShowCurrentSource() // { // if (CurrentRoom.CurrentSingleSourceInfo == null) // return; // var uiDev = CurrentRoom.CurrentSingleSourceInfo.SourceDevice as IUiDisplayInfo; // ShowSource(uiDev); // } // void ShowSource(IUiDisplayInfo uiDev) // { // PageManager pm = null; // // If we need a page manager, get an appropriate one // if (uiDev != null) // { // TriList.BooleanInput[UIBoolJoin.SelectASourceVisible].BoolValue = false; // if (IsSharingModeAdvanced) // { // TriList.BooleanInput[UIBoolJoin.SourceBackgroundOverlayVisible].BoolValue = true; // TriList.SetSigFalseAction(UIBoolJoin.SourceBackgroundOverlayClosePress, new Action(() => // { // TriList.BooleanInput[UIBoolJoin.SourceBackgroundOverlayVisible].BoolValue = false; // if (CurrentSourcePageManager != null) // CurrentSourcePageManager.Hide(); // })); // } // // Got an existing page manager, get it // if (PageManagers.ContainsKey(uiDev)) // pm = PageManagers[uiDev]; // // Otherwise make an apporiate one // else if (uiDev is ISetTopBoxControls) // pm = new SetTopBoxThreePanelPageManager(uiDev as ISetTopBoxControls, TriList); // else if (uiDev is IDiscPlayerControls) // pm = new DiscPlayerMediumPageManager(uiDev as IDiscPlayerControls, TriList); // else // pm = new DefaultPageManager(uiDev, TriList); // PageManagers[uiDev] = pm; // CurrentSourcePageManager = pm; // pm.Show(); // } // } // /// // /// // /// // public void PowerButtonPressed() // { // if (!CurrentRoom.OnFeedback.BoolValue) // return; // EndMeetingButtonSig.BoolValue = true; // ShareButtonSig.BoolValue = false; // // Timeout or button 1 press will shut down // var modal = new ModalDialog(TriList); // uint time = 60000; // uint seconds = time / 1000; // var message = string.Format("Meeting will end in {0} seconds", seconds); // modal.PresentModalDialog(2, "End Meeting", "Power", message, // "End Meeting Now", "Cancel", true, true, // but => // { // EndMeetingButtonSig.BoolValue = false; // if (but != 2) // { // CurrentRoom.RouteSourceToAllDestinations(null); // } // else // ShareButtonSig.BoolValue = true; // restore Share fb // }); // } // void CancelPowerOffTimer() // { // if (PowerOffTimer != null) // { // PowerOffTimer.Stop(); // PowerOffTimer = null; // } // } // /// // /// Runs the power off function on the current room // /// // public void FinishPowerOff() // { // if (CurrentRoom == null) // return; // CurrentRoom.RunRouteAction("roomOff"); // CancelPowerOff(); // } // /// // /// Hides power off pages and stops timer // /// // void CancelPowerOff() // { // CancelPowerOffTimer(); // TriList.BooleanInput[UIBoolJoin.PowerOffStep1Visible].BoolValue = false; // TriList.BooleanInput[UIBoolJoin.PowerOffStep2Visible].BoolValue = false; // } // /// // /// // /// // void VolumeButtonsTogglePress() // { // if (VolumeButtonsPopupFeedback.BoolValue) // VolumeButtonsPopupFeedback.ClearNow(); // else // { // // Trigger the popup // VolumeButtonsPopupFeedback.BoolValue = true; // VolumeButtonsPopupFeedback.BoolValue = false; // } // } // /// // /// // /// // /// // public void VolumeUpPress(bool state) // { // // extend timeouts // if (ShowVolumeGauge) // VolumeGaugeFeedback.BoolValue = state; // VolumeButtonsPopupFeedback.BoolValue = state; // if (CurrentRoom.CurrentVolumeControls != null) // CurrentRoom.CurrentVolumeControls.VolumeUp(state); // } // /// // /// // /// // /// // public void VolumeDownPress(bool state) // { // // extend timeouts // if (ShowVolumeGauge) // VolumeGaugeFeedback.BoolValue = state; // VolumeButtonsPopupFeedback.BoolValue = state; // if (CurrentRoom.CurrentVolumeControls != null) // CurrentRoom.CurrentVolumeControls.VolumeDown(state); // } // /// // /// Helper for property setter. Sets the panel to the given room, latching up all functionality // /// // void SetCurrentRoom(EssentialsPresentationRoom room) // { // if (_CurrentRoom == room) return; // if (_CurrentRoom != null) // { // // Disconnect current room // _CurrentRoom.OnFeedback.OutputChange -= _CurrentRoom_OnFeedback_OutputChange; // _CurrentRoom.CurrentVolumeDeviceChange -= this._CurrentRoom_CurrentAudioDeviceChange; // ClearAudioDeviceConnections(); // _CurrentRoom.CurrentSingleSourceChange -= this._CurrentRoom_SourceInfoChange; // DisconnectSource(_CurrentRoom.CurrentSingleSourceInfo); // } // _CurrentRoom = room; // if (_CurrentRoom != null) // { // if (IsSharingModeAdvanced) // {} // add stuff here // else // SetupSourceList(); // TriList.StringInput[UIStringJoin.CurrentRoomName].StringValue = _CurrentRoom.Name; // // Link up all the change events from the room // _CurrentRoom.OnFeedback.OutputChange += _CurrentRoom_OnFeedback_OutputChange; // _CurrentRoom.CurrentVolumeDeviceChange += _CurrentRoom_CurrentAudioDeviceChange; // RefreshAudioDeviceConnections(); // _CurrentRoom.CurrentSingleSourceChange += _CurrentRoom_SourceInfoChange; // RefreshSourceInfo(); // } // else // { // // Clear sigs that need to be // TriList.StringInput[UIStringJoin.CurrentRoomName].StringValue = "Select a room"; // } // } // /// // /// Hides source for provided source info // /// // /// // void DisconnectSource(SourceListItem previousInfo) // { // if (previousInfo == null) return; // // Hide whatever is showing // if (IsVisible) // { // if (CurrentSourcePageManager != null) // { // CurrentSourcePageManager.Hide(); // CurrentSourcePageManager = null; // } // } // if (previousInfo == null) return; // var previousDev = previousInfo.SourceDevice; // // device type interfaces // if (previousDev is ISetTopBoxControls) // (previousDev as ISetTopBoxControls).UnlinkButtons(TriList); // // common interfaces // if (previousDev is IChannel) // (previousDev as IChannel).UnlinkButtons(TriList); // if (previousDev is IColor) // (previousDev as IColor).UnlinkButtons(TriList); // if (previousDev is IDPad) // (previousDev as IDPad).UnlinkButtons(TriList); // if (previousDev is IDvr) // (previousDev as IDvr).UnlinkButtons(TriList); // if (previousDev is INumericKeypad) // (previousDev as INumericKeypad).UnlinkButtons(TriList); // if (previousDev is IPower) // (previousDev as IPower).UnlinkButtons(TriList); // if (previousDev is ITransport) // (previousDev as ITransport).UnlinkButtons(TriList); // //if (previousDev is IRadio) // // (previousDev as IRadio).UnlinkButtons(this); // } // /// // /// Refreshes and shows the room's current source // /// // void RefreshSourceInfo() // { // var routeInfo = CurrentRoom.CurrentSingleSourceInfo; // // This will show off popup too // if (this.IsVisible) // ShowCurrentSource(); // if (routeInfo == null)// || !CurrentRoom.OnFeedback.BoolValue) // { // // Check for power off and insert "Room is off" // TriList.StringInput[UIStringJoin.CurrentSourceName].StringValue = "Room is off"; // TriList.StringInput[UIStringJoin.CurrentSourceIcon].StringValue = "Power"; // this.Hide(); // Parent.Show(); // return; // } // else if (CurrentRoom.CurrentSingleSourceInfo != null) // { // TriList.StringInput[UIStringJoin.CurrentSourceName].StringValue = routeInfo.PreferredName; // TriList.StringInput[UIStringJoin.CurrentSourceIcon].StringValue = routeInfo.Icon; // defaults to "blank" // } // else // { // TriList.StringInput[UIStringJoin.CurrentSourceName].StringValue = "---"; // TriList.StringInput[UIStringJoin.CurrentSourceIcon].StringValue = "Blank"; // } // // Connect controls // if (routeInfo.SourceDevice != null) // ConnectControlDeviceMethods(routeInfo.SourceDevice); // } // /// // /// Attach the source to the buttons and things // /// // void ConnectControlDeviceMethods(Device dev) // { // if(dev is ISetTopBoxControls) // (dev as ISetTopBoxControls).LinkButtons(TriList); // if (dev is IChannel) // (dev as IChannel).LinkButtons(TriList); // if (dev is IColor) // (dev as IColor).LinkButtons(TriList); // if (dev is IDPad) // (dev as IDPad).LinkButtons(TriList); // if (dev is IDvr) // (dev as IDvr).LinkButtons(TriList); // if (dev is INumericKeypad) // (dev as INumericKeypad).LinkButtons(TriList); // if (dev is IPower) // (dev as IPower).LinkButtons(TriList); // if (dev is ITransport) // (dev as ITransport).LinkButtons(TriList); // //if (dev is IRadio) // // (dev as IRadio).LinkButtons(this); // +++++++++++++ Make part of this into page manager // //if (dev is ICustomFunctions) // //{ // // var custBridge = (dev as ICustomFunctions).GetCustomBridge(); // // custBridge.Link(this.Remote); // } // /// // /// Detaches the buttons and feedback from the room's current audio device // /// // void ClearAudioDeviceConnections() // { // TriList.ClearBoolSigAction(UIBoolJoin.VolumeUpPress); // TriList.ClearBoolSigAction(UIBoolJoin.VolumeDownPress); // TriList.ClearBoolSigAction(UIBoolJoin.Volume1ProgramMutePressAndFB); // var fDev = CurrentRoom.CurrentVolumeControls as IBasicVolumeWithFeedback; // if (fDev != null) // { // TriList.ClearUShortSigAction(UIUshortJoin.VolumeSlider1Value); // fDev.VolumeLevelFeedback.UnlinkInputSig( // TriList.UShortInput[UIUshortJoin.VolumeSlider1Value]); // } // } // /// // /// Attaches the buttons and feedback to the room's current audio device // /// // void RefreshAudioDeviceConnections() // { // var dev = CurrentRoom.CurrentVolumeControls; // if (dev != null) // connect buttons // { // TriList.SetBoolSigAction(UIBoolJoin.VolumeUpPress, VolumeUpPress); // TriList.SetBoolSigAction(UIBoolJoin.VolumeDownPress, VolumeDownPress); // TriList.SetSigFalseAction(UIBoolJoin.Volume1ProgramMutePressAndFB, dev.MuteToggle); // } // var fbDev = dev as IBasicVolumeWithFeedback; // if (fbDev == null) // this should catch both IBasicVolume and IBasicVolumeWithFeeback // TriList.UShortInput[UIUshortJoin.VolumeSlider1Value].UShortValue = 0; // else // { // // slider // TriList.SetUShortSigAction(UIUshortJoin.VolumeSlider1Value, fbDev.SetVolume); // // feedbacks // fbDev.MuteFeedback.LinkInputSig(TriList.BooleanInput[UIBoolJoin.Volume1ProgramMutePressAndFB]); // fbDev.VolumeLevelFeedback.LinkInputSig( // TriList.UShortInput[UIUshortJoin.VolumeSlider1Value]); // } // } // /// // /// Handler for when the room's volume control device changes // /// // void _CurrentRoom_CurrentAudioDeviceChange(object sender, VolumeDeviceChangeEventArgs args) // { // if (args.Type == ChangeType.WillChange) // ClearAudioDeviceConnections(); // else // did change // RefreshAudioDeviceConnections(); // } // /// // /// For room on/off changes // /// // void _CurrentRoom_OnFeedback_OutputChange(object sender, EventArgs e) // { // var value = _CurrentRoom.OnFeedback.BoolValue; // TriList.BooleanInput[UIBoolJoin.RoomIsOn].BoolValue = value; // if (value) // { // SetupActivityFooterWhenRoomOn(); // TriList.BooleanInput[StartPageVisibleJoin].BoolValue = false; // } // else // { // HideCurrentSharingMode(); // SetupActivityFooterWhenRoomOff(); // TriList.BooleanInput[StartPageVisibleJoin].BoolValue = true; // if (LastSelectedSourceSig != null) // { // LastSelectedSourceSig.BoolValue = false; // LastSelectedSourceSig = null; // } // PendingSource = null; // } // if (_CurrentRoom.HasAudioDialer) // { // TriList.BooleanInput[UIBoolJoin.VolumeDualMute1Visible].BoolValue = value; // TriList.BooleanInput[UIBoolJoin.VolumeSingleMute1Visible].BoolValue = false; // } // else // { // TriList.BooleanInput[UIBoolJoin.VolumeDualMute1Visible].BoolValue = false; // TriList.BooleanInput[UIBoolJoin.VolumeSingleMute1Visible].BoolValue = value; // } // } // /// // /// Handles source change // /// // void _CurrentRoom_SourceInfoChange(EssentialsRoomBase room, // SourceListItem info, ChangeType change) // { // if (change == ChangeType.WillChange) // DisconnectSource(info); // else // RefreshSourceInfo(); // } // /// // /// // /// // void _CurrentRoom_CurrentDisplay1SourceChange(EssentialsRoomBase room, SourceListItem info, ChangeType type) // { // if (type == ChangeType.DidChange) // { // var isSource = info != null; // TriList.BooleanInput[UIBoolJoin.Display1SelectPressAndFb].BoolValue = isSource; // TriList.StringInput[UIStringJoin.Display1SourceLabel].StringValue = // isSource ? info.PreferredName : ""; // if (!isSource) // return if no source // { // TriList.BooleanInput[UIBoolJoin.Display1AudioButtonEnable].BoolValue = false; // TriList.BooleanInput[UIBoolJoin.Display1ControlButtonEnable].BoolValue = false; // return; // } // // enable audio and control buttons // var devConfig = ConfigReader.ConfigObject.Devices.FirstOrDefault(d => d.Key == info.SourceKey); // TriList.BooleanInput[UIBoolJoin.Display1AudioButtonEnable].BoolValue = // ConfigPropertiesHelpers.GetHasAudio(devConfig); // TriList.BooleanInput[UIBoolJoin.Display1ControlButtonEnable].BoolValue = // ConfigPropertiesHelpers.GetHasControls(devConfig); // } // } // /// // /// // /// // void _CurrentRoom_CurrentDisplay2SourceChange(EssentialsRoomBase room, SourceListItem info, ChangeType type) // { // if (type == ChangeType.DidChange) // { // var isSource = info != null; // TriList.BooleanInput[UIBoolJoin.Display2SelectPressAndFb].BoolValue = isSource; // TriList.StringInput[UIStringJoin.Display2SourceLabel].StringValue = // isSource ? info.PreferredName : ""; // if (!isSource) // { // TriList.BooleanInput[UIBoolJoin.Display2AudioButtonEnable].BoolValue = false; // TriList.BooleanInput[UIBoolJoin.Display2ControlButtonEnable].BoolValue = false; // return; // } // // enable audio and control buttons // var devConfig = ConfigReader.ConfigObject.Devices.FirstOrDefault(d => d.Key == info.SourceKey); // TriList.BooleanInput[UIBoolJoin.Display2AudioButtonEnable].BoolValue = // ConfigPropertiesHelpers.GetHasAudio(devConfig); // TriList.BooleanInput[UIBoolJoin.Display2ControlButtonEnable].BoolValue = // ConfigPropertiesHelpers.GetHasControls(devConfig); // } // } // } //}