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 @@
+