diff --git a/VDash/ConfigManager.cs b/VDash/ConfigManager.cs deleted file mode 100644 index a936f05..0000000 --- a/VDash/ConfigManager.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using VDash.Overlay.Config; - -namespace VDash -{ - public class ConfigManager - { - public string ConfigLocation { get; private set; } - public ConfigManager() - { - ConfigLocation = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments, Environment.SpecialFolderOption.None) + @"\VRDash\DefaultProfile.json"; - } - - /// - /// Saves config to ConfigLocation - /// - public void SaveConfig() - { - - } - } - - public class Profile - { - public List OverlayConfigs { get; private set; } - } -} diff --git a/VDash/JsonNet.PrivateSettersContractResolvers/PrivateSettersContractResolvers.cs b/VDash/JsonNet.PrivateSettersContractResolvers/PrivateSettersContractResolvers.cs new file mode 100644 index 0000000..2dc1cb0 --- /dev/null +++ b/VDash/JsonNet.PrivateSettersContractResolvers/PrivateSettersContractResolvers.cs @@ -0,0 +1,45 @@ +using System.Reflection; +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; + +// ReSharper disable once CheckNamespace +namespace JsonNet.PrivateSettersContractResolvers +{ + public class PrivateSetterContractResolver : DefaultContractResolver + { + protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) + { + var jProperty = base.CreateProperty(member, memberSerialization); + if (jProperty.Writable) + return jProperty; + + jProperty.Writable = member.IsPropertyWithSetter(); + + return jProperty; + } + } + + public class PrivateSetterCamelCasePropertyNamesContractResolver : CamelCasePropertyNamesContractResolver + { + protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) + { + var jProperty = base.CreateProperty(member, memberSerialization); + if (jProperty.Writable) + return jProperty; + + jProperty.Writable = member.IsPropertyWithSetter(); + + return jProperty; + } + } + + internal static class MemberInfoExtensions + { + internal static bool IsPropertyWithSetter(this MemberInfo member) + { + var property = member as PropertyInfo; + + return property?.GetSetMethod(true) != null; + } + } +} \ No newline at end of file diff --git a/VDash/Logger.cs b/VDash/Logger.cs new file mode 100644 index 0000000..fee0ede --- /dev/null +++ b/VDash/Logger.cs @@ -0,0 +1,92 @@ +using log4net; +using log4net.Appender; +using log4net.Core; +using log4net.Layout; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace VDash +{ + public class Logger + { + public static void Setup() + { + var configLoc = ProfileManager.ConfigDirectory + @"\Logs\VRDash.log"; + + if (!Directory.Exists(Path.GetDirectoryName(configLoc))) + { + Directory.CreateDirectory(Path.GetDirectoryName(configLoc)); + } + + log4net.Repository.Hierarchy.Hierarchy hierarchy = (log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository(); + + PatternLayout patternLayout = new PatternLayout(); + patternLayout.ConversionPattern = "%date [%thread] %level %logger - %message%newline%exception"; + patternLayout.ActivateOptions(); + + hierarchy.Root.RemoveAllAppenders(); + + #region File Appender + RollingFileAppender roller = new RollingFileAppender(); + roller.AppendToFile = true; + roller.File = configLoc; + roller.Layout = patternLayout; + roller.MaxSizeRollBackups = 10; + roller.MaximumFileSize = "10MB"; + roller.RollingStyle = RollingFileAppender.RollingMode.Size; + roller.StaticLogFileName = true; + roller.ActivateOptions(); + hierarchy.Root.AddAppender(roller); + #endregion + + //MemoryAppender memory = new MemoryAppender(); + //memory.ActivateOptions(); + //hierarchy.Root.AddAppender(memory); + + ColoredConsoleAppender coloredConsoleAppender = new ColoredConsoleAppender(); + coloredConsoleAppender.AddMapping(new ColoredConsoleAppender.LevelColors() + { + Level = Level.Fatal, + ForeColor = ColoredConsoleAppender.Colors.White | ColoredConsoleAppender.Colors.HighIntensity, + BackColor = ColoredConsoleAppender.Colors.Red | ColoredConsoleAppender.Colors.HighIntensity + }); + coloredConsoleAppender.AddMapping(new ColoredConsoleAppender.LevelColors() + { + Level = Level.Error, + ForeColor = ColoredConsoleAppender.Colors.Red | ColoredConsoleAppender.Colors.HighIntensity + }); + coloredConsoleAppender.AddMapping(new ColoredConsoleAppender.LevelColors() + { + Level = Level.Warn, + ForeColor = ColoredConsoleAppender.Colors.Yellow + }); + coloredConsoleAppender.AddMapping(new ColoredConsoleAppender.LevelColors() + { + Level = Level.Info, + ForeColor = ColoredConsoleAppender.Colors.Cyan + }); + coloredConsoleAppender.AddMapping(new ColoredConsoleAppender.LevelColors() + { + Level = Level.Debug, + ForeColor = ColoredConsoleAppender.Colors.White + }); + coloredConsoleAppender.Layout = patternLayout; + coloredConsoleAppender.ActivateOptions(); + hierarchy.Root.AddAppender(coloredConsoleAppender); + hierarchy.Root.Level = Level.Debug; + hierarchy.Configured = true; + //BasicConfigurator.Configure(hierarchy); + } + } + public static class LoggerExtensions + { + public static ILog GetLogger(this object instance) + { + return LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); + } + } +} diff --git a/VDash/MainWindow.xaml b/VDash/MainWindow.xaml index d7a350c..52c8bd0 100644 --- a/VDash/MainWindow.xaml +++ b/VDash/MainWindow.xaml @@ -21,9 +21,8 @@ - - + diff --git a/VDash/MainWindow.xaml.cs b/VDash/MainWindow.xaml.cs index 30c39d5..64510ca 100644 --- a/VDash/MainWindow.xaml.cs +++ b/VDash/MainWindow.xaml.cs @@ -1,4 +1,5 @@ -using System; +using Newtonsoft.Json; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -26,15 +27,12 @@ namespace VDash public partial class MainWindow : Window { public static OverlayManager OverlayManager = new OverlayManager(); - public static List EditorMapping = new List() - { - new EditorMap(typeof(MonitorOverlay), typeof(UI.MonitorOverlayEditor)), - new EditorMap(typeof(WindowOverlay), typeof(UI.WindowOverlayEditor)) - }; + public static ProfileManager ProfileManager = new ProfileManager(); - List overlayEditors = new List(); public MainWindow() { + Logger.Setup(); + this.GetLogger().Info("VDash is starting up..."); InitializeComponent(); //Connect to VR runtime... @@ -51,6 +49,20 @@ namespace VDash lvOverlays.ItemsSource = OverlayManager.Overlays; + + KeyDown += (s, e) => + { + if(e.Key == Key.F5) + { + ProfileManager.SaveProfile(); + } + if(e.Key == Key.F6 || e.Key == Key.P) + { + var profile = ProfileManager.LoadProfile(); + LoadProfile(profile); + } + }; + #region Debug @@ -80,15 +92,44 @@ namespace VDash #endregion } + private void LoadProfile(Profile profile) + { + //Dispose of all overlays and clear list. + foreach (var overlay in OverlayManager.Overlays) + { + overlay.Overlay.Dispose(); + } + OverlayManager.Overlays.Clear(); + + var configs = profile.OverlayConfigs; + + foreach (var config in configs) + { + //Get type of overlay based on config type + var attrs = OverlayInfo.GetOverlayInfos(); + var overlayInfo = attrs.Single(x => x.Info.ConfigType == config.GetType()); + Type overlayType = overlayInfo.OverlayType; + //Create overlay + IOverlay overlay = (IOverlay)Activator.CreateInstance(overlayType, new object[] { config }); + overlay.Create(); + + UI.IOverlayEditor editor = (UI.IOverlayEditor)Activator.CreateInstance(overlayInfo.Info.EditorType, new object[] { overlay.OverlayConfig }); + OverlayEditorInfo overlayEditor = new OverlayEditorInfo(new UI.OverlayEditor(editor), overlay); + OverlayManager.Overlays.Add(overlayEditor); + } + } + private void btnAdd_Click(object sender, RoutedEventArgs e) { Window w = new Window(); var uc = new UI.CreateNewOverlay(); uc.Created += (snd, overlay) => { w.Close(); - UI.IOverlayEditor editor = (UI.IOverlayEditor)Activator.CreateInstance(EditorMapping.Single(x => x.OverlayType == overlay.GetType()).EditorType, new object[] { overlay.OverlayConfig }); - OverlayEditor overlayEditor = new OverlayEditor(new UI.OverlayEditor(editor), overlay); - overlayEditors.Add(overlayEditor); + var attrs = OverlayInfo.GetOverlayInfos(); + var overlayInfo = attrs.Single(x => x.OverlayType == overlay.GetType()); + UI.IOverlayEditor editor = (UI.IOverlayEditor)Activator.CreateInstance(overlayInfo.Info.EditorType, new object[] { overlay.OverlayConfig }); + OverlayEditorInfo overlayEditor = new OverlayEditorInfo(new UI.OverlayEditor(editor), overlay); + OverlayManager.Overlays.Add(overlayEditor); }; w.Content = uc; w.Width = 500; @@ -100,31 +141,28 @@ namespace VDash private void btnRemove_Click(object sender, RoutedEventArgs e) { if(lvOverlays.SelectedItem == null) { return; } - IOverlay overlay = (IOverlay)lvOverlays.SelectedItem; - overlay.Dispose(); - OverlayManager.Overlays.Remove(overlay); - overlayEditors.Remove(overlayEditors.Single(x => x.Overlay == overlay)); + OverlayEditorInfo overlayEditor = (OverlayEditorInfo)lvOverlays.SelectedItem; + overlayEditor.Overlay.Dispose(); + OverlayManager.Overlays.Remove(overlayEditor); + if (bdrContent.Child == overlayEditor.Editor) + { + bdrContent.Child = null; + } } private void lvOverlays_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (lvOverlays.SelectedItem == null) { return; } - IOverlay overlay = (IOverlay)lvOverlays.SelectedItem; + OverlayEditorInfo overlay = (OverlayEditorInfo)lvOverlays.SelectedItem; - bdrContent.Child = (UserControl)overlayEditors.Single(x => x.Overlay == overlay).Editor; + bdrContent.Child = (UserControl)overlay.Editor; } - } - public class OverlayEditor - { - public OverlayEditor(IOverlayEditor editor, IOverlay overlay) + private void btnLoad_Click(object sender, RoutedEventArgs e) { - Editor = editor; - Overlay = overlay; + var profile = ProfileManager.LoadProfile(); + LoadProfile(profile); } - - public UI.IOverlayEditor Editor { get; private set; } - public IOverlay Overlay { get; private set; } } public class EditorMap diff --git a/VDash/Overlay/Actions/MinimizeWIndowAction.cs b/VDash/Overlay/Actions/MinimizeWIndowAction.cs index 09a0fe2..8953c4d 100644 --- a/VDash/Overlay/Actions/MinimizeWIndowAction.cs +++ b/VDash/Overlay/Actions/MinimizeWIndowAction.cs @@ -8,7 +8,7 @@ using VDash.Utilities; namespace VDash.Overlay.Actions { [OverlayActionInfo("Minize Window")] - public class MinimizeWIndowAction : IWindowAction + public class MinimizeWindowAction : IWindowAction { public bool Enabled { get; set; } = true; diff --git a/VDash/Overlay/Config/MonitorOverlayConfig.cs b/VDash/Overlay/Config/MonitorOverlayConfig.cs index 55a4097..26196f9 100644 --- a/VDash/Overlay/Config/MonitorOverlayConfig.cs +++ b/VDash/Overlay/Config/MonitorOverlayConfig.cs @@ -11,7 +11,10 @@ namespace VDash.Overlay.Config public event EventHandler WidthUpdated; public string Name { get; set; } public string Key { get; set; } - public string MonitorName { get; set; } + public string MonitorName { + get; + set; + } float m_Width = 2.5f; public float OverlayWidth { diff --git a/VDash/Overlay/IOverlay.cs b/VDash/Overlay/IOverlay.cs index 5b7516c..d6d314a 100644 --- a/VDash/Overlay/IOverlay.cs +++ b/VDash/Overlay/IOverlay.cs @@ -1,7 +1,9 @@ using System; using System.Collections.Generic; +using System.Reflection; using VDash.Overlay.Actions; using VDash.Overlay.Config; +using System.Linq; namespace VDash.Overlay { @@ -22,4 +24,53 @@ namespace VDash.Overlay int CurrentFPS { get; } } + + public class OverlayInfo : System.Attribute + { + public OverlayInfo(string description, Type configType, Type editorType) + { + Description = description; + ConfigType = configType; + EditorType = editorType; + } + + public string Description { get; private set; } + public Type ConfigType { get; private set; } + public Type EditorType { get; private set; } + + public static IEnumerable GetTypesWithAttribute() + { + var assembly = Assembly.GetExecutingAssembly(); + foreach (Type type in assembly.GetTypes()) + { + if (type.GetCustomAttributes(typeof(OverlayInfo), true).Length > 0) + { + yield return type; + } + } + } + + public class OverlayAttributeInfo + { + public OverlayAttributeInfo(Type type, OverlayInfo info) + { + OverlayType = type; + Info = info; + } + + public Type OverlayType { get; private set; } + public OverlayInfo Info { get; private set; } + } + public static OverlayAttributeInfo[] GetOverlayInfos() + { + List infos = new List(); + var attrs = GetTypesWithAttribute(); + foreach(var attr in attrs) + { + OverlayInfo thingInfo = (OverlayInfo)attr.GetCustomAttribute(typeof(OverlayInfo), true); + infos.Add(new OverlayAttributeInfo(attr, thingInfo)); + } + return infos.ToArray(); + } + } } diff --git a/VDash/Overlay/MonitorOverlay.cs b/VDash/Overlay/MonitorOverlay.cs index 698e0c7..a02d776 100644 --- a/VDash/Overlay/MonitorOverlay.cs +++ b/VDash/Overlay/MonitorOverlay.cs @@ -18,9 +18,11 @@ using VDash.WindowSelectors; using System.Linq; using static VDash.Utilities.User32; using VDash.Overlay.Config; +using VDash.UI; namespace VDash.Overlay { + [OverlayInfo("Monitor Overlay", typeof(MonitorOverlayConfig), typeof(MonitorOverlayEditor))] public class MonitorOverlay : IOverlay { diff --git a/VDash/Overlay/WindowOverlay.cs b/VDash/Overlay/WindowOverlay.cs index 3883418..477b84a 100644 --- a/VDash/Overlay/WindowOverlay.cs +++ b/VDash/Overlay/WindowOverlay.cs @@ -17,9 +17,11 @@ using VDash.Utilities; using VDash.WindowSelectors; using System.Linq; using VDash.Overlay.Config; +using VDash.UI; namespace VDash.Overlay { + [OverlayInfo("Window Overlay", typeof(WindowOverlayConfig), typeof(WindowOverlayEditor))] public class WindowOverlay : IOverlay { public event EventHandler OverlayShown; diff --git a/VDash/OverlayManager.cs b/VDash/OverlayManager.cs index bdbf1be..8974ce2 100644 --- a/VDash/OverlayManager.cs +++ b/VDash/OverlayManager.cs @@ -7,11 +7,31 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using VDash.Overlay; +using VDash.UI; namespace VDash { public class OverlayManager { - public ObservableCollection Overlays { get; internal set; } = new ObservableCollection(); + public ObservableCollection Overlays { get; internal set; } = new ObservableCollection(); + + } + + + public class OverlayEditorInfo + { + public OverlayEditorInfo(IOverlayEditor editor, IOverlay overlay) + { + Editor = editor; + Overlay = overlay; + } + + public UI.IOverlayEditor Editor { get; private set; } + public IOverlay Overlay { get; private set; } + + public override string ToString() + { + return Overlay.ToString(); + } } } diff --git a/VDash/ProfileManager.cs b/VDash/ProfileManager.cs new file mode 100644 index 0000000..f63cb28 --- /dev/null +++ b/VDash/ProfileManager.cs @@ -0,0 +1,73 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using VDash.Overlay.Config; + +namespace VDash +{ + public class ProfileManager + { + public static string ConfigDirectory { get { return Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments, Environment.SpecialFolderOption.None) + @"\VRDash\"; } } + public static string ConfigLocation { get { return ConfigDirectory + "DefaultProfile.vdc"; } } + + JsonSerializerSettings m_Settings = new JsonSerializerSettings() + { + TypeNameHandling = TypeNameHandling.All, + Formatting = Formatting.Indented, + ContractResolver = new JsonNet.PrivateSettersContractResolvers.PrivateSetterContractResolver() + }; + + public ProfileManager() + { + } + + public void SaveProfile() + { + var path = Path.GetDirectoryName(ConfigLocation); + //Make sure directory tree exists + if (!Directory.Exists(path)) + { + Directory.CreateDirectory(path); + } + SaveProfile(ConfigLocation); + } + + /// + /// Saves config to ConfigLocation + /// + public void SaveProfile(string location) + { + IOverlayConfig[] selection = MainWindow.OverlayManager.Overlays.Select(x => x.Overlay.OverlayConfig).ToArray(); + var profile = new Profile(selection); + var json = JsonConvert.SerializeObject(profile, m_Settings); + File.WriteAllText(location, json); + } + + public Profile LoadProfile() + { + return LoadProfile(ConfigLocation); + } + + public Profile LoadProfile(string location) + { + var json = File.ReadAllText(location); + var profile = JsonConvert.DeserializeObject(json, m_Settings); + return profile; + } + } + + public class Profile + { + public Profile(IOverlayConfig[] overlayConfigs) + { + OverlayConfigs = overlayConfigs; + } + public Profile() { } + + public IOverlayConfig[] OverlayConfigs { get; private set; } + } +} diff --git a/VDash/UI/CreateNewOverlay.xaml.cs b/VDash/UI/CreateNewOverlay.xaml.cs index 9566202..15572ee 100644 --- a/VDash/UI/CreateNewOverlay.xaml.cs +++ b/VDash/UI/CreateNewOverlay.xaml.cs @@ -13,6 +13,7 @@ using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using VDash.Overlay; +using VDash.Overlay.Config; namespace VDash.UI { @@ -24,15 +25,25 @@ namespace VDash.UI public delegate void CreatedEventHandler(UserControl sender, IOverlay created); public event CreatedEventHandler Created; - public OverlayTypeWrapper[] EligibleOverlays { get; private set; } = { - new OverlayTypeWrapper("Window Overlay", typeof(WindowOverlay), new OverlayEditor(new WindowOverlayEditor())), - new OverlayTypeWrapper("Monitor Overlay", typeof(MonitorOverlay), new OverlayEditor(new MonitorOverlayEditor())) - }; + public List EligibleOverlays { get; private set; } = new List(); public CreateNewOverlay() { InitializeComponent(); DataContext = this; + foreach (var info in OverlayInfo.GetOverlayInfos()) + { + var newWrapper = new OverlayTypeWrapper(info); + + //Add "Bring to front" for window overlays. Conveneience, my dude. + if(info.OverlayType == typeof(WindowOverlay)) + { + ((WindowOverlayConfig)newWrapper.Config).OverlayShownActions.Add(new Overlay.Actions.BringWindowToFrontAction()); + } + + EligibleOverlays.Add(newWrapper); + + } } private void cbOverlayType_SelectionChanged(object sender, SelectionChangedEventArgs e) @@ -58,16 +69,16 @@ namespace VDash.UI } var wrapper = ((OverlayTypeWrapper)cbOverlayType.SelectedItem); - var config = wrapper.Editor.Config; + var config = wrapper.Config; if (String.IsNullOrWhiteSpace(config.Key)) { config.Key = RandomString(8, true); } - IOverlay overlay = (IOverlay)Activator.CreateInstance(wrapper.OverlayType, new object[] { config }); + IOverlay overlay = (IOverlay)Activator.CreateInstance(wrapper.OverlayInfo.OverlayType, new object[] { config }); overlay.Create(); - MainWindow.OverlayManager.Overlays.Add(overlay); + //MainWindow.OverlayManager.Overlays.Add(overlay); Created?.Invoke(this, overlay); } @@ -92,24 +103,22 @@ namespace VDash.UI public class OverlayTypeWrapper { - public Type OverlayType { get; private set; } - public string FriendlyName { get; private set; } + public OverlayTypeWrapper(OverlayInfo.OverlayAttributeInfo overlayInfo) + { + OverlayInfo = overlayInfo; + Config = (IOverlayConfig)Activator.CreateInstance(OverlayInfo.Info.ConfigType); + Control = (UserControl)Activator.CreateInstance(OverlayInfo.Info.EditorType, new object[] { Config }); + } + + public OverlayInfo.OverlayAttributeInfo OverlayInfo { get; private set; } public UserControl Control { get; private set; } //this is a bit messy... public IOverlayEditor Editor { get { return (IOverlayEditor)Control; } } - public OverlayTypeWrapper(string friendlyName, Type overlayType, UserControl control) - { - if (!typeof(IOverlay).IsAssignableFrom(overlayType)) - { - throw new Exception("The type must be based on IOverlay."); - } - OverlayType = overlayType; - FriendlyName = friendlyName; - Control = control; - } + public IOverlayConfig Config { get; private set; } + public override string ToString() { - return FriendlyName; + return OverlayInfo.Info.Description; } } } diff --git a/VDash/UI/MonitorOverlayEditor.xaml b/VDash/UI/MonitorOverlayEditor.xaml index 12d4e01..c98830e 100644 --- a/VDash/UI/MonitorOverlayEditor.xaml +++ b/VDash/UI/MonitorOverlayEditor.xaml @@ -24,7 +24,7 @@ - + diff --git a/VDash/UI/MonitorOverlayEditor.xaml.cs b/VDash/UI/MonitorOverlayEditor.xaml.cs index f731089..5a1987c 100644 --- a/VDash/UI/MonitorOverlayEditor.xaml.cs +++ b/VDash/UI/MonitorOverlayEditor.xaml.cs @@ -23,7 +23,7 @@ namespace VDash.UI public partial class MonitorOverlayEditor : UserControl,IOverlayEditor { public IOverlayConfig Config { get { return OverlayConfig; } } - public MonitorOverlayConfig OverlayConfig { get; set; } = new MonitorOverlayConfig(); + public MonitorOverlayConfig OverlayConfig { get; set; } public MonitorOverlayEditor(ref MonitorOverlayConfig config) { @@ -32,16 +32,9 @@ namespace VDash.UI DataContext = OverlayConfig; var displays = GetDisplays(); cbMontitor.ItemsSource = displays; - cbMontitor.SelectedItem = displays.Single(x => x.MonitorInfo.DeviceName == OverlayConfig.MonitorName); + cbMontitor.SelectedItem = displays.SingleOrDefault(x => x.MonitorInfo.DeviceName == OverlayConfig.MonitorName); } - - public MonitorOverlayEditor() - { - InitializeComponent(); - DataContext = OverlayConfig; - cbMontitor.ItemsSource = GetDisplays(); - } - + private void cbMontitor_SelectionChanged(object sender, SelectionChangedEventArgs e) { OverlayConfig.MonitorName = ((DisplayInfo)cbMontitor.SelectedItem).MonitorInfo.DeviceName; diff --git a/VDash/UI/WindowOverlayEditor.xaml.cs b/VDash/UI/WindowOverlayEditor.xaml.cs index adfc8bc..eaa7009 100644 --- a/VDash/UI/WindowOverlayEditor.xaml.cs +++ b/VDash/UI/WindowOverlayEditor.xaml.cs @@ -36,16 +36,16 @@ namespace VDash.UI public IOverlayConfig Config { get { return OverlayConfig; } } - public WindowOverlayEditor() - { - InitializeComponent(); - OverlayConfig = new WindowOverlayConfig(); - OverlayConfig.OverlayShownActions.Add(new BringWindowToFrontAction(true)); - DataContext = OverlayConfig; + //public WindowOverlayEditor() + //{ + // InitializeComponent(); + // OverlayConfig = new WindowOverlayConfig(); + // OverlayConfig.OverlayShownActions.Add(new BringWindowToFrontAction(true)); + // DataContext = OverlayConfig; - cbSelector.ItemsSource = Selectors; - SetupDropDown(); - } + // cbSelector.ItemsSource = Selectors; + // SetupDropDown(); + //} public WindowOverlayEditor(ref WindowOverlayConfig config) { diff --git a/VDash/VDash.csproj b/VDash/VDash.csproj index cc8a7a5..142a98b 100644 --- a/VDash/VDash.csproj +++ b/VDash/VDash.csproj @@ -91,7 +91,9 @@ MSBuild:Compile Designer - + + + diff --git a/VDash/WindowSelectors/FromWindowTitle.cs b/VDash/WindowSelectors/FromWindowTitle.cs index db0a074..a39f344 100644 --- a/VDash/WindowSelectors/FromWindowTitle.cs +++ b/VDash/WindowSelectors/FromWindowTitle.cs @@ -1,4 +1,5 @@ -using System; +using Newtonsoft.Json; +using System; using System.Linq; using System.Text.RegularExpressions; using VDash.Utilities; @@ -12,6 +13,7 @@ namespace VDash.WindowSelectors public string TitleFilter { get; set; } = ""; public TitleSearchType SearchType { get; set; } = TitleSearchType.Contains; + [JsonIgnore] public WindowInfo Window { get diff --git a/VDash/packages.config b/VDash/packages.config index 2b01974..7d3f0fd 100644 --- a/VDash/packages.config +++ b/VDash/packages.config @@ -1,5 +1,6 @@  +