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 { /// /// Interaction logic for CreateWindowOverlay.xaml /// 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; } } }