125 lines
4.3 KiB
C#
125 lines
4.3 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;
|
|
using VDash.Overlay.Config;
|
|
|
|
namespace VDash.UI
|
|
{
|
|
/// <summary>
|
|
/// Interaction logic for CreateNewOverlay.xaml
|
|
/// </summary>
|
|
public partial class CreateNewOverlay : UserControl
|
|
{
|
|
public delegate void CreatedEventHandler(UserControl sender, IOverlay created);
|
|
public event CreatedEventHandler Created;
|
|
|
|
public List<OverlayTypeWrapper> EligibleOverlays { get; private set; } = new List<OverlayTypeWrapper>();
|
|
|
|
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)
|
|
{
|
|
bdrContent.Child = ((OverlayTypeWrapper)cbOverlayType.SelectedItem).Control;
|
|
}
|
|
|
|
private void btnCreate_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
var editorControl = ((OverlayTypeWrapper)cbOverlayType.SelectedItem).Control;
|
|
var intConrol = (IOverlayEditor)editorControl;
|
|
string[] issues = intConrol.ValidateInput();
|
|
if (issues.Count() != 0)
|
|
{
|
|
StringBuilder error = new StringBuilder();
|
|
error.AppendLine("Please rectify the following issues:");
|
|
foreach(var issue in issues)
|
|
{
|
|
error.AppendLine(issue);
|
|
}
|
|
MessageBox.Show(error.ToString(), "Input Error", MessageBoxButton.OK, MessageBoxImage.Warning);
|
|
return;
|
|
}
|
|
|
|
var wrapper = ((OverlayTypeWrapper)cbOverlayType.SelectedItem);
|
|
var config = wrapper.Config;
|
|
if (String.IsNullOrWhiteSpace(config.Key))
|
|
{
|
|
config.Key = RandomString(8, true);
|
|
}
|
|
|
|
IOverlay overlay = (IOverlay)Activator.CreateInstance(wrapper.OverlayInfo.OverlayType, new object[] { config });
|
|
overlay.Create();
|
|
|
|
//MainWindow.OverlayManager.Overlays.Add(overlay);
|
|
|
|
Created?.Invoke(this, overlay);
|
|
}
|
|
|
|
// Generate a random string with a given size
|
|
public string RandomString(int size, bool lowerCase)
|
|
{
|
|
StringBuilder builder = new StringBuilder();
|
|
Random random = new Random();
|
|
char ch;
|
|
for (int i = 0; i < size; i++)
|
|
{
|
|
ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));
|
|
builder.Append(ch);
|
|
}
|
|
if (lowerCase)
|
|
return builder.ToString().ToLower();
|
|
return builder.ToString();
|
|
}
|
|
}
|
|
|
|
|
|
public class OverlayTypeWrapper
|
|
{
|
|
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 IOverlayConfig Config { get; private set; }
|
|
|
|
public override string ToString()
|
|
{
|
|
return OverlayInfo.Info.Description;
|
|
}
|
|
}
|
|
}
|