public static ObservableCollection <vMixControl> LoadController(string fileName, IList <vMixFunctionReference> functions, out MainWindowSettings windowSettings) { windowSettings = null; try { var _controls = new ObservableCollection <vMixControl>(); using (var stream = File.OpenRead(fileName)) { return(LoadController(stream, functions, out windowSettings)); } } catch (Exception e) { //Emergency controller _logger.Error(e, "Error while loading controller!"); windowSettings = new MainWindowSettings() { Width = 512 + 16 + 16 + 8, Height = 512 + 196 + 48 }; var btn = new vMixControlButton() { IsColorized = true, Color = vMixWidgetSettingsViewModel.Colors[11].A, BorderColor = vMixWidgetSettingsViewModel.Colors[11].B, Name = "Report Bug", Top = 16 + 16 + 8 + 512, Left = 8, Width = 512, IsCaptionVisible = false, IsCaptionOn = false }; btn.Commands.Add(new vMixControlButtonCommand() { Action = new vMixFunctionReference() { Function = NativeFunctions.WIN, Native = true }, StringParameter = "https://forums.vmix.com/postmessage?t=6468&f=8" }); return(new ObservableCollection <vMixControl>() { new vMixControlRegion() { Text = string.Format("{0}\n\n\nP.S. Don't be afraid, your controller is OK.\nReport about it on forum.", string.Join("", SecurityElement.Escape(e.ToString()).Select(x => (XmlConvert.IsXmlChar(x)?x.ToString():"0x" + Convert.ToByte(x).ToString())).ToArray())), Width = 512, Height = 512, Top = 8, Left = 8, Color = Colors.Red, Name = "Error while loading controller!" }, btn }); } }
public static void SaveController(string fileName, ObservableCollection <vMixControl> _controls, MainWindowSettings _windowSettings) { using (var stream = new FileStream(fileName, FileMode.Create)) { _logger.Info("Saving controller."); var writer = XmlWriter.Create(stream); { writer.WriteStartDocument(); writer.WriteStartElement("Root"); writer.WriteStartElement("Controls"); XmlSerializer s = new XmlSerializer(typeof(ObservableCollection <vMixControl>)); _logger.Info("Writing widgets."); s.Serialize(writer, _controls); writer.WriteEndElement(); writer.WriteStartElement("WindowSettings"); s = new XmlSerializer(typeof(MainWindowSettings)); _logger.Info("Writing window settings."); s.Serialize(writer, _windowSettings); writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteEndDocument(); writer.Flush(); } } }
public static ObservableCollection <vMixControl> LoadController(string fileName, IList <vMixFunctionReference> functions, out MainWindowSettings windowSettings) { var _controls = new ObservableCollection <vMixControl>(); using (var stream = File.OpenRead(fileName)) { _logger.Info("Controller loading."); var reader = XmlReader.Create(stream); { reader.ReadStartElement(); reader.ReadStartElement(); _logger.Info("Loading widgets."); XmlSerializer s = new XmlSerializer(typeof(ObservableCollection <vMixControl>)); var collection = (ObservableCollection <vMixControl>)s.Deserialize(reader); foreach (var item in collection) { _controls.Add(item); if (functions != null && item is vMixControlButton) { var btn = item as vMixControlButton; foreach (var command in btn.Commands) { var newFunction = functions.Where(x => x.Function == command.Action.Function).FirstOrDefault(); if (newFunction != null) { command.Action = newFunction; } } } } reader.ReadEndElement(); reader.ReadStartElement(); _logger.Info("Loading window settings."); s = new XmlSerializer(typeof(MainWindowSettings)); windowSettings = (MainWindowSettings)s.Deserialize(reader); reader.ReadEndElement(); reader.ReadEndElement(); _logger.Info("Configuring API."); } } return(_controls); }
public static ObservableCollection <vMixControl> LoadController(Stream stream, IList <vMixFunctionReference> functions, out MainWindowSettings windowSettings) { var _controls = new ObservableCollection <vMixControl>(); _logger.Info("Controller loading."); var reader = XmlReader.Create(stream); { reader.ReadStartElement(); reader.ReadStartElement(); _logger.Info("Loading widgets."); XmlSerializer s = new XmlSerializer(typeof(ObservableCollection <vMixControl>)); var collection = (ObservableCollection <vMixControl>)s.Deserialize(reader); foreach (var item in collection) { _controls.Add(item); if (functions != null && item is vMixControlButton) { var btn = item as vMixControlButton; foreach (var command in btn.Commands) { var newFunction = functions.Where(x => x.Function == command.Action.Function || (x.Aliases?.Split(',').Contains(command.Action.Function) ?? false)).FirstOrDefault(); if (newFunction != null) { command.Action = newFunction; } } } } reader.ReadEndElement(); reader.ReadStartElement(); _logger.Info("Loading window settings."); s = new XmlSerializer(typeof(MainWindowSettings)); var settings = (MainWindowSettings)s.Deserialize(reader); windowSettings = settings; reader.ReadEndElement(); if (reader.IsStartElement()) { reader.ReadStartElement(); s = new XmlSerializer(typeof(ObservableCollection <Pair <string, string> >)); var globals = (ObservableCollection <Pair <string, string> >)s.Deserialize(reader); //Add or update global variable, according to controller variables foreach (var item in globals) { if (GlobalVariablesViewModel._variables.Count(x => x.A == item.A) == 0) { GlobalVariablesViewModel._variables.Add(item); } else { GlobalVariablesViewModel._variables.Where(x => x.A == item.A).First().B = item.B; } } reader.ReadEndElement(); } reader.ReadEndElement(); _logger.Info("Configuring API."); } return(_controls); }
public static ObservableCollection <vMixControl> LoadController(string fileName, IList <vMixFunctionReference> functions, out MainWindowSettings windowSettings) { var _controls = new ObservableCollection <vMixControl>(); using (var stream = File.OpenRead(fileName)) { return(LoadController(stream, functions, out windowSettings)); } }
public static void SaveController(Stream stream, ObservableCollection <vMixControl> _controls, MainWindowSettings _windowSettings) { _logger.Info("Saving controller."); var writer = XmlWriter.Create(stream); { writer.WriteStartDocument(); writer.WriteStartElement("Root"); writer.WriteStartElement("Controls"); XmlSerializer s = new XmlSerializer(typeof(ObservableCollection <vMixControl>)); _logger.Info("Writing widgets."); s.Serialize(writer, _controls); writer.WriteEndElement(); writer.WriteStartElement("WindowSettings"); s = new XmlSerializer(typeof(MainWindowSettings)); _logger.Info("Writing window settings."); s.Serialize(writer, _windowSettings); writer.WriteEndElement(); writer.WriteStartElement("GlobalVariables"); s = new XmlSerializer(typeof(ObservableCollection <Pair <string, string> >)); _logger.Info("Writing global variables."); s.Serialize(writer, GlobalVariablesViewModel._variables); writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteEndDocument(); writer.Flush(); } }
public static void SaveController(string fileName, ObservableCollection <vMixControl> _controls, MainWindowSettings _windowSettings) { using (var stream = new FileStream(fileName, FileMode.Create)) { SaveController(stream, _controls, _windowSettings); } }