VRDash/VDash/UI/WindowOverlayEditor.xaml.cs

105 lines
3.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using VDash.Overlay.Config;
using VDash.WindowSelectors;
namespace VDash.UI
{
/// <summary>
/// Interaction logic for CreateWindowOverlay.xaml
/// </summary>
public partial class WindowOverlayEditor : UserControl,IOverlayEditor
{
public WindowOverlayConfig OverlayConfig { get; set; } = new WindowOverlayConfig();
public SelectorWrapper[] Selectors { get; private set; } =
{
new SelectorWrapper("By Process Name", typeof(FromProcessName), typeof(ProcessSelectorEditor)),
new SelectorWrapper("By Window Title", typeof(FromWindowTitle), typeof(WindowSelectorEditor))
};
public IOverlayConfig Config { get { return OverlayConfig; } }
public WindowOverlayEditor()
{
InitializeComponent();
DataContext = OverlayConfig;
cbSelector.ItemsSource = Selectors;
SetupDropDown();
}
public WindowOverlayEditor(ref WindowOverlayConfig config)
{
InitializeComponent();
OverlayConfig = config;
DataContext = OverlayConfig;
cbSelector.ItemsSource = Selectors;
SetupDropDown();
}
private void SetupDropDown()
{
if (OverlayConfig.Selector != null)
{
SelectorWrapper wrapper = Selectors.Single(x => x.SelectorType == OverlayConfig.Selector.GetType());
IWindowSelector selector = OverlayConfig.Selector;
UserControl editor = (UserControl)Activator.CreateInstance(wrapper.EditorType, new object[] { selector });
wrapper.Editor = editor;
wrapper.Selector = selector;
cbSelector.SelectedItem = wrapper;
}
}
public class SelectorWrapper
{
public string FriendlyName { get; set; }
//public IWindowSelector Selector{ get; private set; }
public Type SelectorType { get; set; }
//public UserControl Control { get; set; }
public Type EditorType { get; set; }
public IWindowSelector Selector { get; set; }
public UserControl Editor { get; set; } = null;
public SelectorWrapper(string friendlyName, Type selectorType, Type editorType)
{
FriendlyName = friendlyName;
SelectorType = selectorType;
EditorType = editorType;
Selector = (IWindowSelector)Activator.CreateInstance(selectorType);
Editor = (UserControl)Activator.CreateInstance(EditorType, new object[] { Selector });
}
public override string ToString()
{
return FriendlyName;
}
}
private void cbSelector_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var wrapper = (SelectorWrapper)cbSelector.SelectedItem;
OverlayConfig.Selector = wrapper.Selector;
bdrSelector.Child = wrapper.Editor;
}
}
}