From 88a16b577b46778606f88b183ef6eb667e3a9418 Mon Sep 17 00:00:00 2001 From: Andrew Welker Date: Fri, 2 Sep 2022 14:35:06 -0600 Subject: [PATCH] refactor: update constructors for touchpanel controller and base class --- .../UI/EssentialsTouchpanelController.cs | 100 +++++++++++----- .../UI/TouchpanelBase.cs | 109 +----------------- 2 files changed, 77 insertions(+), 132 deletions(-) diff --git a/PepperDashEssentials/UI/EssentialsTouchpanelController.cs b/PepperDashEssentials/UI/EssentialsTouchpanelController.cs index 24bc33db..34d5e11a 100644 --- a/PepperDashEssentials/UI/EssentialsTouchpanelController.cs +++ b/PepperDashEssentials/UI/EssentialsTouchpanelController.cs @@ -12,35 +12,21 @@ using PepperDash.Essentials.Core; using PepperDash.Essentials.Core.Config; using PepperDash.Essentials.Core.PageManagers; using PepperDash.Essentials.Core.UI; +using Newtonsoft.Json; namespace PepperDash.Essentials { public class EssentialsTouchpanelController : TouchpanelBase - { - private CrestronTouchpanelPropertiesConfig _propertiesConfig; - - public BasicTriListWithSmartObject Panel { get; private set; } - + { public PanelDriverBase PanelDriver { get; private set; } CTimer BacklightTransitionedOnTimer; - public EssentialsTouchpanelController(string key, string name, Tswx52ButtonVoiceControl tsw, - string projectName, string sgdPath) - : base(key, name, tsw, sgdPath) - { - } - - public EssentialsTouchpanelController(string key, string name, Dge100 dge, string projectName, string sgdPath) - : base(key, name, dge, sgdPath) - { - } - /// /// Config constructor /// - public EssentialsTouchpanelController(string key, string name, string type, CrestronTouchpanelPropertiesConfig props, uint id) - : base(key, name, type, props, id) + public EssentialsTouchpanelController(string key, string name, BasicTriListWithSmartObject panel, CrestronTouchpanelPropertiesConfig config) + : base(key, name, panel, config) { } @@ -56,7 +42,7 @@ namespace PepperDash.Essentials Debug.Console(0, this, "Linking TP '{0}' to Room '{1}'", Key, roomKey); - var mainDriver = new EssentialsPanelMainInterfaceDriver(Panel, _propertiesConfig); + var mainDriver = new EssentialsPanelMainInterfaceDriver(Panel, _config); // Then the sub drivers // spin up different room drivers depending on room type @@ -65,15 +51,15 @@ namespace PepperDash.Essentials { // Screen Saver Driver - mainDriver.ScreenSaverController = new ScreenSaverController(mainDriver, _propertiesConfig); + mainDriver.ScreenSaverController = new ScreenSaverController(mainDriver, _config); // Header Driver Debug.Console(0, this, "Adding header driver"); - mainDriver.HeaderDriver = new EssentialsHeaderDriver(mainDriver, _propertiesConfig); + mainDriver.HeaderDriver = new EssentialsHeaderDriver(mainDriver, _config); // AV Driver Debug.Console(0, this, "Adding huddle space AV driver"); - var avDriver = new EssentialsHuddlePanelAvFunctionsDriver(mainDriver, _propertiesConfig); + var avDriver = new EssentialsHuddlePanelAvFunctionsDriver(mainDriver, _config); avDriver.DefaultRoomKey = roomKey; mainDriver.AvDriver = avDriver; avDriver.CurrentRoom = room as IEssentialsHuddleSpaceRoom; @@ -82,7 +68,7 @@ namespace PepperDash.Essentials if (avDriver.CurrentRoom.PropertiesConfig.Environment != null && avDriver.CurrentRoom.PropertiesConfig.Environment.DeviceKeys.Count > 0) { Debug.Console(0, this, "Adding environment driver"); - mainDriver.EnvironmentDriver = new EssentialsEnvironmentDriver(mainDriver, _propertiesConfig); + mainDriver.EnvironmentDriver = new EssentialsEnvironmentDriver(mainDriver, _config); mainDriver.EnvironmentDriver.GetDevicesFromConfig(avDriver.CurrentRoom.PropertiesConfig.Environment); } @@ -111,13 +97,13 @@ namespace PepperDash.Essentials Debug.Console(0, this, "Adding huddle space VTC AV driver"); // Screen Saver Driver - mainDriver.ScreenSaverController = new ScreenSaverController(mainDriver, _propertiesConfig); + mainDriver.ScreenSaverController = new ScreenSaverController(mainDriver, _config); // Header Driver - mainDriver.HeaderDriver = new EssentialsHeaderDriver(mainDriver, _propertiesConfig); + mainDriver.HeaderDriver = new EssentialsHeaderDriver(mainDriver, _config); // AV Driver - var avDriver = new EssentialsHuddleVtc1PanelAvFunctionsDriver(mainDriver, _propertiesConfig); + var avDriver = new EssentialsHuddleVtc1PanelAvFunctionsDriver(mainDriver, _config); var codecDriver = new PepperDash.Essentials.UIDrivers.VC.EssentialsVideoCodecUiDriver(Panel, avDriver, (room as IEssentialsHuddleVtc1Room).VideoCodec, mainDriver.HeaderDriver); @@ -130,7 +116,7 @@ namespace PepperDash.Essentials if (avDriver.CurrentRoom.PropertiesConfig.Environment != null && avDriver.CurrentRoom.PropertiesConfig.Environment.DeviceKeys.Count > 0) { Debug.Console(0, this, "Adding environment driver"); - mainDriver.EnvironmentDriver = new EssentialsEnvironmentDriver(mainDriver, _propertiesConfig); + mainDriver.EnvironmentDriver = new EssentialsEnvironmentDriver(mainDriver, _config); mainDriver.EnvironmentDriver.GetDevicesFromConfig(avDriver.CurrentRoom.PropertiesConfig.Environment); } @@ -229,13 +215,69 @@ namespace PepperDash.Essentials public override EssentialsDevice BuildDevice(DeviceConfig dc) { var comm = CommFactory.GetControlPropertiesConfig(dc); - var props = Newtonsoft.Json.JsonConvert.DeserializeObject(dc.Properties.ToString()); + var props = JsonConvert.DeserializeObject(dc.Properties.ToString()); + + var panel = GetPanelForType(dc.Type, comm.IpIdInt, props.ProjectName); Debug.Console(1, "Factory Attempting to create new EssentialsTouchpanelController"); - var panelController = new EssentialsTouchpanelController(dc.Key, dc.Name, dc.Type, props, comm.IpIdInt); + var panelController = new EssentialsTouchpanelController(dc.Key, dc.Name, panel, props); return panelController; } + + private BasicTriListWithSmartObject GetPanelForType(string type, uint id, string projectName) + { + type = type.ToLower(); + try + { + if (type == "crestronapp") + { + var app = new CrestronApp(id, Global.ControlSystem); + app.ParameterProjectName.Value = projectName; + return app; + } + else if (type == "xpanel") + return new XpanelForSmartGraphics(id, Global.ControlSystem); + else if (type == "tsw550") + return new Tsw550(id, Global.ControlSystem); + else if (type == "tsw552") + return new Tsw552(id, Global.ControlSystem); + else if (type == "tsw560") + return new Tsw560(id, Global.ControlSystem); + else if (type == "tsw750") + return new Tsw750(id, Global.ControlSystem); + else if (type == "tsw752") + return new Tsw752(id, Global.ControlSystem); + else if (type == "tsw760") + return new Tsw760(id, Global.ControlSystem); + else if (type == "tsw1050") + return new Tsw1050(id, Global.ControlSystem); + else if (type == "tsw1052") + return new Tsw1052(id, Global.ControlSystem); + else if (type == "tsw1060") + return new Tsw1060(id, Global.ControlSystem); + else if (type == "tsw570") + return new Tsw570(id, Global.ControlSystem); + else if (type == "tsw770") + return new Tsw770(id, Global.ControlSystem); + else if (type == "ts770") + return new Ts770(id, Global.ControlSystem); + else if (type == "tsw1070") + return new Tsw1070(id, Global.ControlSystem); + else if (type == "ts1070") + return new Ts1070(id, Global.ControlSystem); + else + { + Debug.Console(0, Debug.ErrorLogLevel.Notice, "WARNING: Cannot create TSW controller with type '{0}'", type); + return null; + } + } + catch (Exception e) + { + Debug.Console(0, Debug.ErrorLogLevel.Notice, "WARNING: Cannot create TSW base class. Panel will not function: {0}", e.Message); + return null; + } + } } } \ No newline at end of file diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/UI/TouchpanelBase.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/UI/TouchpanelBase.cs index 01409cf4..806431ec 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/UI/TouchpanelBase.cs +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/UI/TouchpanelBase.cs @@ -28,49 +28,9 @@ namespace PepperDash.Essentials.Core.UI protected TouchpanelBase(string key, string name, Tswx52ButtonVoiceControl tsw, string sgdPath) :base(key, name) { - Panel = tsw; - //moving loading of SGD to preactivation action...should make creation quicker - AddPreActivationAction(() => { - if(!string.IsNullOrEmpty(sgdPath)) - { - Debug.Console(1, this, "Loading sgd file from {0}", sgdPath); - Panel.LoadSmartObjects(sgdPath); - return; - } - - Debug.Console(1, this, "No SGD file path defined"); - }); - - Panel.SigChange += Panel_SigChange; } - /// - /// Constructor for use with DGE panels. This constructor attempts to load the provided SGD file from the provided SGD path and subscribes to the - /// `SigChange` event for the provided DGE. - /// - /// Essentials Device Key - /// Essentials Device Name - /// Provided DGE - /// Path to SGD file - protected TouchpanelBase(string key, string name, Dge100 dge, string sgdPath):base(key, name) - { - Panel = dge; - - AddPreActivationAction(() => - { - if (!string.IsNullOrEmpty(sgdPath)) - { - Debug.Console(1, this, "Loading sgd file from {0}", sgdPath); - Panel.LoadSmartObjects(sgdPath); - return; - } - - Debug.Console(1, this, "No SGD file path defined"); - }); - - Panel.SigChange += Panel_SigChange; - } /// /// Constructor for use with device Factory. A touch panel device will be created based on the provided IP-ID and the @@ -82,14 +42,10 @@ namespace PepperDash.Essentials.Core.UI /// Touchpanel Type to build /// Touchpanel Configuration /// IP-ID to use for touch panel - protected TouchpanelBase(string key, string name, string type, CrestronTouchpanelPropertiesConfig config, uint id) + protected TouchpanelBase(string key, string name, BasicTriListWithSmartObject panel, CrestronTouchpanelPropertiesConfig config) :base(key, name) - { - var panel = GetPanelForType(type, id); - if(panel != null) - { - Panel = panel; - } + { + Panel = panel; if (Panel is TswFt5ButtonSystem) { @@ -100,7 +56,8 @@ namespace PepperDash.Essentials.Core.UI tsw.ButtonStateChange += Tsw_ButtonStateChange; } - + + _config = config; AddPreActivationAction(() => { if (Panel.Register() != eDeviceRegistrationUnRegistrationResponse.Success) @@ -112,7 +69,7 @@ namespace PepperDash.Essentials.Core.UI { Debug.Console(0, this, "Smart object file '{0}' not present in User folder. Looking for embedded file", sgdName); - sgdName = Global.ApplicationDirectoryPathPrefix + Global.DirectorySeparator + "SGD" + Global.DirectorySeparator + config.SgdFile; + sgdName = Global.ApplicationDirectoryPathPrefix + Global.DirectorySeparator + "SGD" + Global.DirectorySeparator + _config.SgdFile; if (!File.Exists(sgdName)) { @@ -191,60 +148,6 @@ namespace PepperDash.Essentials.Core.UI SetupPanelDrivers(newRoomKey); } - private BasicTriListWithSmartObject GetPanelForType(string type, uint id) - { - type = type.ToLower(); - try - { - if (type == "crestronapp") - { - var app = new CrestronApp(id, Global.ControlSystem); - app.ParameterProjectName.Value = _config.ProjectName; - return app; - } - else if (type == "xpanel") - return new XpanelForSmartGraphics(id, Global.ControlSystem); - else if (type == "tsw550") - return new Tsw550(id, Global.ControlSystem); - else if (type == "tsw552") - return new Tsw552(id, Global.ControlSystem); - else if (type == "tsw560") - return new Tsw560(id, Global.ControlSystem); - else if (type == "tsw750") - return new Tsw750(id, Global.ControlSystem); - else if (type == "tsw752") - return new Tsw752(id, Global.ControlSystem); - else if (type == "tsw760") - return new Tsw760(id, Global.ControlSystem); - else if (type == "tsw1050") - return new Tsw1050(id, Global.ControlSystem); - else if (type == "tsw1052") - return new Tsw1052(id, Global.ControlSystem); - else if (type == "tsw1060") - return new Tsw1060(id, Global.ControlSystem); - else if (type == "tsw570") - return new Tsw570(id, Global.ControlSystem); - else if (type == "tsw770") - return new Tsw770(id, Global.ControlSystem); - else if (type == "ts770") - return new Ts770(id, Global.ControlSystem); - else if (type == "tsw1070") - return new Tsw1070(id, Global.ControlSystem); - else if (type == "ts1070") - return new Ts1070(id, Global.ControlSystem); - else - { - Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "WARNING: Cannot create TSW controller with type '{0}'", type); - return null; - } - } - catch (Exception e) - { - Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "WARNING: Cannot create TSW base class. Panel will not function: {0}", e.Message); - return null; - } - } - private void Panel_SigChange(object currentDevice, Crestron.SimplSharpPro.SigEventArgs args) { if (Debug.Level == 2)