bring in all the stuff we've moved out of MBS.Framework.UserInterface
This commit is contained in:
parent
f87b6ab79c
commit
10290a037b
229
MBS.Framework/Application.cs
Normal file
229
MBS.Framework/Application.cs
Normal file
@ -0,0 +1,229 @@
|
||||
//
|
||||
// Application.cs
|
||||
//
|
||||
// Author:
|
||||
// Michael Becker <alcexhim@gmail.com>
|
||||
//
|
||||
// Copyright (c) 2020 Mike Becker's Software
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WAR+RANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace MBS.Framework
|
||||
{
|
||||
public class Application
|
||||
{
|
||||
public static Application Instance { get; set; } = null;
|
||||
|
||||
public Guid ID { get; set; } = Guid.Empty;
|
||||
public string UniqueName { get; set; } = null;
|
||||
public string ShortName { get; set; }
|
||||
public string Title { get; set; } = String.Empty;
|
||||
public int ExitCode { get; protected set; } = 0;
|
||||
|
||||
public CommandLine CommandLine { get; protected set; } = null;
|
||||
|
||||
public Application()
|
||||
{
|
||||
CommandLine = new DefaultCommandLine();
|
||||
}
|
||||
|
||||
private Dictionary<string, List<EventHandler>> _CommandEventHandlers = new Dictionary<string, List<EventHandler>>();
|
||||
public Command.CommandCollection Commands { get; } = new Command.CommandCollection();
|
||||
public bool AttachCommandEventHandler(string commandID, EventHandler handler)
|
||||
{
|
||||
Command cmd = Commands[commandID];
|
||||
if (cmd != null)
|
||||
{
|
||||
cmd.Executed += handler;
|
||||
return true;
|
||||
}
|
||||
Console.WriteLine("attempted to attach handler for unknown command '" + commandID + "'");
|
||||
|
||||
// handle command event handlers attached without a Command instance
|
||||
if (!_CommandEventHandlers.ContainsKey(commandID))
|
||||
{
|
||||
_CommandEventHandlers.Add(commandID, new List<EventHandler>());
|
||||
}
|
||||
if (!_CommandEventHandlers[commandID].Contains(handler))
|
||||
{
|
||||
_CommandEventHandlers[commandID].Add(handler);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public void ExecuteCommand(string id, KeyValuePair<string, object>[] namedParameters = null)
|
||||
{
|
||||
Command cmd = Commands[id];
|
||||
|
||||
// handle command event handlers attached without a Command instance
|
||||
if (_CommandEventHandlers.ContainsKey(id))
|
||||
{
|
||||
List<EventHandler> c = _CommandEventHandlers[id];
|
||||
for (int i = 0; i < c.Count; i++)
|
||||
{
|
||||
c[i](cmd, new CommandEventArgs(cmd, namedParameters));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// handle command event handlers attached in a context, most recently added first
|
||||
for (int i = Contexts.Count - 1; i >= 0; i--)
|
||||
{
|
||||
if (Contexts[i].ExecuteCommand(id))
|
||||
return;
|
||||
}
|
||||
|
||||
if (cmd == null)
|
||||
return;
|
||||
|
||||
cmd.Execute();
|
||||
}
|
||||
|
||||
protected virtual void InitializeInternal()
|
||||
{
|
||||
}
|
||||
|
||||
[System.Diagnostics.DebuggerNonUserCode()]
|
||||
public void Initialize()
|
||||
{
|
||||
if (ShortName == null)
|
||||
throw new ArgumentException("must specify a ShortName for the application");
|
||||
|
||||
InitializeInternal();
|
||||
}
|
||||
|
||||
protected virtual int StartInternal()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
public int Start()
|
||||
{
|
||||
int exitCode = StartInternal();
|
||||
return exitCode;
|
||||
}
|
||||
|
||||
// CONTEXTS
|
||||
|
||||
/// <summary>
|
||||
/// Gets a collection of <see cref="Context" /> objects representing system, application, user, and custom contexts for settings and other items.
|
||||
/// </summary>
|
||||
/// <value>A collection of <see cref="Context" /> objects representing cpublic for settings and other items.</value>
|
||||
public Context.ContextCollection Contexts { get; } = new Context.ContextCollection();
|
||||
|
||||
public ContextChangedEventHandler ContextAdded;
|
||||
protected virtual void OnContextAdded(ContextChangedEventArgs e)
|
||||
{
|
||||
ContextAdded?.Invoke(this, e);
|
||||
}
|
||||
|
||||
public ContextChangedEventHandler ContextRemoved;
|
||||
protected virtual void OnContextRemoved(ContextChangedEventArgs e)
|
||||
{
|
||||
ContextRemoved?.Invoke(this, e);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handles updating the menus, toolbars, keyboard shortcuts, and other UI elements associated with the application <see cref="Context" />.
|
||||
/// </summary>
|
||||
internal void AddContext(Context ctx)
|
||||
{
|
||||
OnContextAdded(new ContextChangedEventArgs(ctx));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handles updating the menus, toolbars, keyboard shortcuts, and other UI elements associated with the application <see cref="Context" />.
|
||||
/// </summary>
|
||||
internal void RemoveContext(Context ctx)
|
||||
{
|
||||
OnContextRemoved(new ContextChangedEventArgs(ctx));
|
||||
}
|
||||
|
||||
// LOGGING
|
||||
public void Log(string message)
|
||||
{
|
||||
Log(null, 0, message);
|
||||
}
|
||||
public void Log(object obj, int lineNumber, string message)
|
||||
{
|
||||
if (obj is Type)
|
||||
{
|
||||
Console.WriteLine("{0}: {1}", ((Type)obj).FullName, message);
|
||||
}
|
||||
else if (obj != null)
|
||||
{
|
||||
Console.WriteLine("{0}: {1}", obj.GetType().FullName, message);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("{0}", message);
|
||||
}
|
||||
}
|
||||
|
||||
public bool Stopping { get; private set; } = false;
|
||||
|
||||
protected virtual void OnStopping(System.ComponentModel.CancelEventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
protected virtual void OnStopped(EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public event System.ComponentModel.CancelEventHandler BeforeShutdown;
|
||||
protected virtual void OnBeforeShutdown(System.ComponentModel.CancelEventArgs e)
|
||||
{
|
||||
BeforeShutdown?.Invoke(this, e);
|
||||
}
|
||||
|
||||
public event EventHandler Shutdown;
|
||||
private void OnShutdown(EventArgs e)
|
||||
{
|
||||
Shutdown?.Invoke(this, e);
|
||||
}
|
||||
|
||||
|
||||
protected virtual void StopInternal(int exitCode)
|
||||
{
|
||||
}
|
||||
public void Stop(int exitCode = 0)
|
||||
{
|
||||
if (Stopping)
|
||||
return;
|
||||
|
||||
Stopping = true;
|
||||
|
||||
System.ComponentModel.CancelEventArgs ce = new System.ComponentModel.CancelEventArgs();
|
||||
OnStopping(ce);
|
||||
if (ce.Cancel)
|
||||
return;
|
||||
|
||||
ce = new System.ComponentModel.CancelEventArgs();
|
||||
OnBeforeShutdown(ce);
|
||||
if (ce.Cancel)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
StopInternal(exitCode);
|
||||
|
||||
OnShutdown(EventArgs.Empty);
|
||||
|
||||
OnStopped(EventArgs.Empty);
|
||||
Stopping = false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
104
MBS.Framework/Command.cs
Normal file
104
MBS.Framework/Command.cs
Normal file
@ -0,0 +1,104 @@
|
||||
using System;
|
||||
|
||||
namespace MBS.Framework
|
||||
{
|
||||
public class Command
|
||||
{
|
||||
public class CommandCollection
|
||||
: System.Collections.ObjectModel.Collection<Command>
|
||||
{
|
||||
public Command this[string ID]
|
||||
{
|
||||
get
|
||||
{
|
||||
foreach (Command command in this)
|
||||
{
|
||||
if (command.ID == ID) return command;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Command()
|
||||
{
|
||||
}
|
||||
public Command(string id, string title, CommandItem[] items = null)
|
||||
{
|
||||
ID = id;
|
||||
Title = title;
|
||||
if (items != null)
|
||||
{
|
||||
for (int i = 0; i < items.Length; i++)
|
||||
{
|
||||
Items.Add(items[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Determines whether this command displays as checked.
|
||||
/// </summary>
|
||||
public bool Checked { get; set; } = false;
|
||||
/// <summary>
|
||||
/// The ID of the command, used to reference it in <see cref="CommandReferenceCommandItem"/>.
|
||||
/// </summary>
|
||||
public string ID { get; set; } = String.Empty;
|
||||
/// <summary>
|
||||
/// The title of the command (including mnemonic prefix, if applicable).
|
||||
/// </summary>
|
||||
public string Title { get; set; } = String.Empty;
|
||||
|
||||
private string mvarDefaultCommandID = String.Empty;
|
||||
public string DefaultCommandID { get { return mvarDefaultCommandID; } set { mvarDefaultCommandID = value; } }
|
||||
|
||||
/// <summary>
|
||||
/// A <see cref="StockType"/> that represents a predefined, platform-themed command.
|
||||
/// </summary>
|
||||
public StockType StockType { get; set; } = StockType.None;
|
||||
|
||||
private string mvarImageFileName = String.Empty;
|
||||
/// <summary>
|
||||
/// The file name of the image to be displayed on the command.
|
||||
/// </summary>
|
||||
public string ImageFileName { get { return mvarImageFileName; } set { mvarImageFileName = value; } }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// The child <see cref="CommandItem"/>s that are contained within this <see cref="Command"/>.
|
||||
/// </summary>
|
||||
public CommandItem.CommandItemCollection Items { get; } = new CommandItem.CommandItemCollection();
|
||||
|
||||
/// <summary>
|
||||
/// The event that is fired when the command is executed.
|
||||
/// </summary>
|
||||
public event EventHandler Executed;
|
||||
|
||||
/// <summary>
|
||||
/// Determines whether this <see cref="Command" /> is enabled in all <see cref="CommandBar" />s and <see cref="MenuBar" />s
|
||||
/// that reference it.
|
||||
/// </summary>
|
||||
/// <value><c>true</c> if visible; otherwise, <c>false</c>.</value>
|
||||
public bool Enabled { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// Determines whether this <see cref="Command" /> is visible in all <see cref="CommandBar" />s and <see cref="MenuBar" />s
|
||||
/// that reference it.
|
||||
/// </summary>
|
||||
/// <value><c>true</c> if visible; otherwise, <c>false</c>.</value>
|
||||
public bool Visible { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Executes this <see cref="Command"/>.
|
||||
/// </summary>
|
||||
public void Execute()
|
||||
{
|
||||
if (Executed != null) Executed(this, EventArgs.Empty);
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return String.Format("{0} [{1}]", ID, Title);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
38
MBS.Framework/CommandEvent.cs
Normal file
38
MBS.Framework/CommandEvent.cs
Normal file
@ -0,0 +1,38 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace MBS.Framework
|
||||
{
|
||||
public class CommandEventArgs : EventArgs
|
||||
{
|
||||
public Command Command { get; private set; }
|
||||
|
||||
private Dictionary<string, object> _NamedParameters = new Dictionary<string, object>();
|
||||
public T GetNamedParameter<T>(string key, T defaultValue = default(T))
|
||||
{
|
||||
if (_NamedParameters.ContainsKey(key))
|
||||
return (T)_NamedParameters[key];
|
||||
return defaultValue;
|
||||
}
|
||||
public object GetNamedParameter(string key, object defaultValue = null)
|
||||
{
|
||||
if (_NamedParameters.ContainsKey(key))
|
||||
return _NamedParameters[key];
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
|
||||
public CommandEventArgs(Command command, KeyValuePair<string, object>[] namedParameters = null)
|
||||
{
|
||||
Command = command;
|
||||
if (namedParameters != null)
|
||||
{
|
||||
for (int i = 0; i < namedParameters.Length; i++)
|
||||
{
|
||||
_NamedParameters[namedParameters[i].Key] = namedParameters[i].Value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
public delegate void CommandEventHandler(object sender, CommandEventArgs e);
|
||||
}
|
||||
55
MBS.Framework/CommandItem.cs
Normal file
55
MBS.Framework/CommandItem.cs
Normal file
@ -0,0 +1,55 @@
|
||||
using System;
|
||||
|
||||
namespace MBS.Framework
|
||||
{
|
||||
public abstract class CommandItem
|
||||
{
|
||||
public string InsertAfterID { get; set; } = null;
|
||||
public string InsertBeforeID { get; set; } = null;
|
||||
|
||||
public class CommandItemCollection
|
||||
: System.Collections.ObjectModel.Collection<CommandItem>
|
||||
{
|
||||
public int IndexOf(string value)
|
||||
{
|
||||
for (int i = 0; i < Count; i++)
|
||||
{
|
||||
if (this[i] is CommandReferenceCommandItem)
|
||||
{
|
||||
if ((this[i] as CommandReferenceCommandItem).CommandID.Equals(value))
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
public class CommandReferenceCommandItem : CommandItem
|
||||
{
|
||||
private string mvarCommandID = String.Empty;
|
||||
public string CommandID { get { return mvarCommandID; } set { mvarCommandID = value; } }
|
||||
|
||||
public CommandReferenceCommandItem(string commandID)
|
||||
{
|
||||
mvarCommandID = commandID;
|
||||
}
|
||||
}
|
||||
public class CommandPlaceholderCommandItem : CommandItem
|
||||
{
|
||||
private string mvarPlaceholderID = String.Empty;
|
||||
public string PlaceholderID { get { return mvarPlaceholderID; } set { mvarPlaceholderID = value; } }
|
||||
|
||||
public CommandPlaceholderCommandItem(string placeholderID)
|
||||
{
|
||||
mvarPlaceholderID = placeholderID;
|
||||
}
|
||||
}
|
||||
public class SeparatorCommandItem : CommandItem
|
||||
{
|
||||
}
|
||||
public class GroupCommandItem : CommandItem
|
||||
{
|
||||
public CommandItemCollection Items { get; } = new CommandItemCollection();
|
||||
}
|
||||
}
|
||||
|
||||
50
MBS.Framework/CommandLine.cs
Normal file
50
MBS.Framework/CommandLine.cs
Normal file
@ -0,0 +1,50 @@
|
||||
//
|
||||
// CommandLine.cs
|
||||
//
|
||||
// Author:
|
||||
// Mike Becker <alcexhim@gmail.com>
|
||||
//
|
||||
// Copyright (c) 2019 Mike Becker
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace MBS.Framework
|
||||
{
|
||||
public abstract class CommandLine
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the original <see cref="String" /> array of arguments.
|
||||
/// </summary>
|
||||
/// <value>The arguments.</value>
|
||||
public string[] Arguments { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the list of file names passed on the command line.
|
||||
/// </summary>
|
||||
/// <value>The file names.</value>
|
||||
public List<string> FileNames { get; } = new List<string>();
|
||||
|
||||
public CommandLineOption.CommandLineOptionCollection Options { get; } = new CommandLineOption.CommandLineOptionCollection();
|
||||
|
||||
protected CommandLine()
|
||||
{
|
||||
}
|
||||
protected internal CommandLine(string[] arguments)
|
||||
{
|
||||
this.Arguments = arguments;
|
||||
}
|
||||
}
|
||||
}
|
||||
129
MBS.Framework/CommandLineOption.cs
Normal file
129
MBS.Framework/CommandLineOption.cs
Normal file
@ -0,0 +1,129 @@
|
||||
//
|
||||
// CommandLineOption.cs
|
||||
//
|
||||
// Author:
|
||||
// Mike Becker <alcexhim@gmail.com>
|
||||
//
|
||||
// Copyright (c) 2019 Mike Becker
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace MBS.Framework
|
||||
{
|
||||
public class CommandLineOption
|
||||
{
|
||||
public class CommandLineOptionCollection
|
||||
: System.Collections.ObjectModel.Collection<CommandLineOption>
|
||||
{
|
||||
private Dictionary<char, CommandLineOption> _byAbbreviation = new Dictionary<char, CommandLineOption>();
|
||||
private Dictionary<string, CommandLineOption> _byName = new Dictionary<string, CommandLineOption>();
|
||||
|
||||
public bool Contains(char abbreviation)
|
||||
{
|
||||
return _byAbbreviation.ContainsKey(abbreviation);
|
||||
}
|
||||
public bool Contains(string name)
|
||||
{
|
||||
return _byName.ContainsKey(name);
|
||||
}
|
||||
|
||||
public CommandLineOption this[char abbreviation]
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_byAbbreviation.ContainsKey(abbreviation))
|
||||
return _byAbbreviation[abbreviation];
|
||||
return null;
|
||||
}
|
||||
}
|
||||
public CommandLineOption this[string name]
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_byName.ContainsKey(name))
|
||||
return _byName[name];
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void ClearItems()
|
||||
{
|
||||
base.ClearItems();
|
||||
|
||||
_byName.Clear();
|
||||
_byAbbreviation.Clear();
|
||||
}
|
||||
protected override void InsertItem(int index, CommandLineOption item)
|
||||
{
|
||||
base.InsertItem(index, item);
|
||||
|
||||
if (item.Name != null)
|
||||
_byName[item.Name] = item;
|
||||
|
||||
if (item.Abbreviation != '\0')
|
||||
_byAbbreviation[item.Abbreviation] = item;
|
||||
}
|
||||
|
||||
public CommandLineOption Add(string name, char abbreviation = '\0', object defaultValue = null, CommandLineOptionValueType type = CommandLineOptionValueType.None, string description = null)
|
||||
{
|
||||
CommandLineOption option = new CommandLineOption();
|
||||
option.Name = name;
|
||||
option.Abbreviation = abbreviation;
|
||||
option.DefaultValue = defaultValue;
|
||||
option.Type = type;
|
||||
option.Description = description;
|
||||
|
||||
Add(option);
|
||||
return option;
|
||||
}
|
||||
|
||||
protected override void RemoveItem(int index)
|
||||
{
|
||||
_byName.Remove(this[index].Name);
|
||||
_byAbbreviation.Remove(this[index].Abbreviation);
|
||||
|
||||
base.RemoveItem(index);
|
||||
}
|
||||
|
||||
public T GetValueOrDefault<T>(string name, T defaultValue = default(T))
|
||||
{
|
||||
if (_byName.ContainsKey(name))
|
||||
{
|
||||
return (T) _byName[name].Value;
|
||||
}
|
||||
return defaultValue;
|
||||
}
|
||||
}
|
||||
|
||||
public string Name { get; set; } = null;
|
||||
public char Abbreviation { get; set; } = '\0';
|
||||
|
||||
public object DefaultValue { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// The description displayed in the help text.
|
||||
/// </summary>
|
||||
/// <value>The description.</value>
|
||||
public string Description { get; set; } = null;
|
||||
public object Value { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether this <see cref="T:MBS.Framework.UserInterface.CommandLineOption"/> expects a value to be passed in after this option.
|
||||
/// </summary>
|
||||
/// <value><c>true</c> if a value is expected to be passed in after this option; otherwise, <c>false</c>.</value>
|
||||
public CommandLineOptionValueType Type { get; set; } = CommandLineOptionValueType.None;
|
||||
}
|
||||
}
|
||||
30
MBS.Framework/CommandLineOptionValueType.cs
Normal file
30
MBS.Framework/CommandLineOptionValueType.cs
Normal file
@ -0,0 +1,30 @@
|
||||
//
|
||||
// CommandLineOptionValueType.cs
|
||||
//
|
||||
// Author:
|
||||
// Mike Becker <alcexhim@gmail.com>
|
||||
//
|
||||
// Copyright (c) 2019 Mike Becker
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
using System;
|
||||
namespace MBS.Framework
|
||||
{
|
||||
public enum CommandLineOptionValueType
|
||||
{
|
||||
None = 0,
|
||||
Single = 1,
|
||||
Multiple = 2
|
||||
}
|
||||
}
|
||||
95
MBS.Framework/Context.cs
Normal file
95
MBS.Framework/Context.cs
Normal file
@ -0,0 +1,95 @@
|
||||
//
|
||||
// Context.cs
|
||||
//
|
||||
// Author:
|
||||
// Mike Becker <alcexhim@gmail.com>
|
||||
//
|
||||
// Copyright (c) 2019 Mike Becker
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace MBS.Framework
|
||||
{
|
||||
public class Context
|
||||
{
|
||||
public class ContextCollection
|
||||
: System.Collections.ObjectModel.Collection<Context>
|
||||
{
|
||||
protected override void ClearItems()
|
||||
{
|
||||
for (int i = 0; i < this.Count; i++)
|
||||
{
|
||||
Application.Instance.RemoveContext(this[i]);
|
||||
}
|
||||
base.ClearItems();
|
||||
}
|
||||
protected override void InsertItem(int index, Context item)
|
||||
{
|
||||
base.InsertItem(index, item);
|
||||
Application.Instance.AddContext(item);
|
||||
}
|
||||
protected override void RemoveItem(int index)
|
||||
{
|
||||
Application.Instance.RemoveContext(this[index]);
|
||||
base.RemoveItem(index);
|
||||
}
|
||||
}
|
||||
|
||||
public Guid ID { get; private set; } = Guid.Empty;
|
||||
public string Name { get; private set; } = String.Empty;
|
||||
|
||||
// public MenuBar MenuBar { get; } = new MenuBar();
|
||||
public Command.CommandCollection Commands { get; } = new Command.CommandCollection();
|
||||
|
||||
public Context(Guid id, string name)
|
||||
{
|
||||
ID = id;
|
||||
Name = name;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return String.Format("{0} {1}", Name, ID);
|
||||
}
|
||||
|
||||
private Dictionary<string, List<EventHandler>> _CommandEventHandlers = new Dictionary<string, List<EventHandler>>();
|
||||
public bool AttachCommandEventHandler(string commandID, EventHandler handler)
|
||||
{
|
||||
// handle command event handlers attached without a Command instance
|
||||
if (!_CommandEventHandlers.ContainsKey(commandID))
|
||||
{
|
||||
_CommandEventHandlers.Add(commandID, new List<EventHandler>());
|
||||
}
|
||||
if (!_CommandEventHandlers[commandID].Contains(handler))
|
||||
{
|
||||
_CommandEventHandlers[commandID].Add(handler);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public bool ExecuteCommand(string commandID, KeyValuePair<string, object>[] namedParameters = null)
|
||||
{
|
||||
if (_CommandEventHandlers.ContainsKey(commandID))
|
||||
{
|
||||
for (int i = 0; i < _CommandEventHandlers[commandID].Count; i++)
|
||||
{
|
||||
_CommandEventHandlers[commandID][i](this, new CommandEventArgs(Commands[commandID], namedParameters));
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
33
MBS.Framework/ContextChangedEvent.cs
Normal file
33
MBS.Framework/ContextChangedEvent.cs
Normal file
@ -0,0 +1,33 @@
|
||||
//
|
||||
// ContextChangedEvent.cs
|
||||
//
|
||||
// Author:
|
||||
// Mike Becker <alcexhim@gmail.com>
|
||||
//
|
||||
// Copyright (c) 2019 Mike Becker
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
using System;
|
||||
namespace MBS.Framework
|
||||
{
|
||||
public class ContextChangedEventArgs
|
||||
{
|
||||
public Context Context { get; private set; } = null;
|
||||
public ContextChangedEventArgs(Context ctx)
|
||||
{
|
||||
Context = ctx;
|
||||
}
|
||||
}
|
||||
public delegate void ContextChangedEventHandler(object sender, ContextChangedEventArgs e);
|
||||
}
|
||||
27
MBS.Framework/DefaultCommandLine.cs
Normal file
27
MBS.Framework/DefaultCommandLine.cs
Normal file
@ -0,0 +1,27 @@
|
||||
//
|
||||
// DefaultCommandLine.cs
|
||||
//
|
||||
// Author:
|
||||
// Mike Becker <alcexhim@gmail.com>
|
||||
//
|
||||
// Copyright (c) 2019 Mike Becker
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
using System;
|
||||
namespace MBS.Framework
|
||||
{
|
||||
public class DefaultCommandLine : CommandLine
|
||||
{
|
||||
}
|
||||
}
|
||||
@ -11,7 +11,6 @@
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<AssemblyOriginatorKeyFile>..\..\Production.snk</AssemblyOriginatorKeyFile>
|
||||
<ReleaseVersion>4.0.2019.12</ReleaseVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
@ -76,6 +75,17 @@
|
||||
<Compile Include="NumericStringSplitter.cs" />
|
||||
<Compile Include="Plugin.cs" />
|
||||
<Compile Include="Feature.cs" />
|
||||
<Compile Include="Application.cs" />
|
||||
<Compile Include="CommandLine.cs" />
|
||||
<Compile Include="CommandLineOption.cs" />
|
||||
<Compile Include="CommandLineOptionValueType.cs" />
|
||||
<Compile Include="DefaultCommandLine.cs" />
|
||||
<Compile Include="Context.cs" />
|
||||
<Compile Include="Command.cs" />
|
||||
<Compile Include="CommandEvent.cs" />
|
||||
<Compile Include="CommandItem.cs" />
|
||||
<Compile Include="StockType.cs" />
|
||||
<Compile Include="ContextChangedEvent.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="Logic\" />
|
||||
|
||||
122
MBS.Framework/StockType.cs
Normal file
122
MBS.Framework/StockType.cs
Normal file
@ -0,0 +1,122 @@
|
||||
using System;
|
||||
|
||||
namespace MBS.Framework
|
||||
{
|
||||
public enum StockType
|
||||
{
|
||||
None,
|
||||
About,
|
||||
Add,
|
||||
Apply,
|
||||
|
||||
// these four do not have gtk-stock equivalents
|
||||
ArrowDown,
|
||||
ArrowLeft,
|
||||
ArrowRight,
|
||||
ArrowUp,
|
||||
|
||||
Bold,
|
||||
Cancel,
|
||||
CapsLockWarning, // not for buttons
|
||||
CDROM,
|
||||
Clear,
|
||||
Close,
|
||||
ColorPicker, // not for buttons
|
||||
Connect,
|
||||
Convert,
|
||||
Copy,
|
||||
Cut,
|
||||
Delete,
|
||||
DialogAuthentication, // not for buttons
|
||||
DialogInfo,
|
||||
DialogWarning,
|
||||
DialogError,
|
||||
DialogQuestion,
|
||||
Directory, // not for buttons
|
||||
Discard,
|
||||
Disconnect,
|
||||
DragAndDrop, // not for buttons
|
||||
DragAndDropMultiple, // not for buttons
|
||||
Edit,
|
||||
Execute,
|
||||
File,
|
||||
Find,
|
||||
FindAndReplace,
|
||||
Floppy,
|
||||
Fullscreen,
|
||||
GotoBottom,
|
||||
GotoFirst,
|
||||
GotoLast,
|
||||
GotoTop,
|
||||
GoBack,
|
||||
GoDown,
|
||||
GoForward,
|
||||
GoUp,
|
||||
HardDisk,
|
||||
Help,
|
||||
Home,
|
||||
Index,
|
||||
Indent,
|
||||
Info,
|
||||
Italic,
|
||||
JumpTo,
|
||||
JustifyCenter,
|
||||
JustifyFill,
|
||||
JustifyLeft,
|
||||
JustifyRight,
|
||||
LeaveFullscreen,
|
||||
MissingImage, // not for buttons
|
||||
MediaForward,
|
||||
MediaNext,
|
||||
MediaPause,
|
||||
MediaPlay,
|
||||
MediaPrevious,
|
||||
MediaRecord,
|
||||
MediaRewind,
|
||||
MediaStop,
|
||||
Network,
|
||||
New,
|
||||
No,
|
||||
OK,
|
||||
Open,
|
||||
OrientationPortrait,
|
||||
OrientationLandscape,
|
||||
OrientationReverseLandscape,
|
||||
OrientationReversePortrait,
|
||||
PageSetup,
|
||||
Paste,
|
||||
Preferences,
|
||||
Print,
|
||||
PrintError, // not for buttons
|
||||
PrintPaused, // not for buttons
|
||||
PrintPreview,
|
||||
PrintReport, // not for buttons
|
||||
PrintWarning, // not for buttons
|
||||
Properties,
|
||||
Quit,
|
||||
Redo,
|
||||
Refresh,
|
||||
Remove,
|
||||
RevertToSaved,
|
||||
Save,
|
||||
SaveAs,
|
||||
SelectAll,
|
||||
SelectColor,
|
||||
SelectFont,
|
||||
SortAscending,
|
||||
SortDescending,
|
||||
SpellCheck,
|
||||
Stop,
|
||||
Strikethrough,
|
||||
Undelete,
|
||||
Underline,
|
||||
Undo,
|
||||
Unindent,
|
||||
Yes,
|
||||
Zoom100,
|
||||
ZoomFit,
|
||||
ZoomIn,
|
||||
ZoomOut
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user