313 lines
11 KiB
C#
313 lines
11 KiB
C#
using Plugins;
|
|
using System.Reflection;
|
|
|
|
namespace FormsPlugin
|
|
{
|
|
public partial class FormMain : Form
|
|
{
|
|
/// <summary>
|
|
/// Ïëàãèíû
|
|
/// </summary>
|
|
private readonly Dictionary<string, IPluginsConvention> _plugins;
|
|
|
|
/// <summary>
|
|
/// Âûáðàííûé ïëàãèí
|
|
/// </summary>
|
|
private string _selectedPlugin;
|
|
|
|
/// <summary>
|
|
/// Êîíñòðóêòîð
|
|
/// </summary>
|
|
public FormMain()
|
|
{
|
|
InitializeComponent();
|
|
|
|
_plugins = LoadPlugins();
|
|
_selectedPlugin = string.Empty;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Çàãðóçèòü ïëàãèíû
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
private Dictionary<string, IPluginsConvention> LoadPlugins()
|
|
{
|
|
var plugins = new Dictionary<string, IPluginsConvention>();
|
|
string pluginsDir = Directory.GetParent(Directory.GetCurrentDirectory())!
|
|
.Parent!.Parent!.FullName + "\\plugins";
|
|
string[] dllFiles = Directory.GetFiles(pluginsDir, "*.dll", SearchOption.AllDirectories);
|
|
|
|
foreach (string dllFile in dllFiles)
|
|
{
|
|
try
|
|
{
|
|
Assembly assembly = Assembly.LoadFrom(dllFile);
|
|
Type[] types = assembly.GetTypes();
|
|
|
|
foreach (var type in types)
|
|
{
|
|
if (typeof(IPluginsConvention).IsAssignableFrom(type) && !type.IsInterface)
|
|
{
|
|
var plugin = (IPluginsConvention)Activator.CreateInstance(type)!;
|
|
plugins.Add(plugin.PluginName, plugin);
|
|
CreateToolStripMenuItem(plugin.PluginName);
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
// Îøèáêà ïðè çàãðóçêå ïëàãèíà
|
|
Console.WriteLine($"Îøèáêà ïðè çàãðóçêå ïëàãèíà {dllFile}: {ex.Message}");
|
|
}
|
|
}
|
|
|
|
return plugins;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Ñîçäàòü ToolStripMenuItem äëÿ ïëàãèíà
|
|
/// </summary>
|
|
/// <param name="pluginName"></param>
|
|
/// Ñîçäàòü ToolStripMenuItem äëÿ ïëàãèíà (ñîçäàíèå ýëåìåíòîâ ìåíþ)
|
|
private void CreateToolStripMenuItem(string pluginName)
|
|
{
|
|
var menuItem = new ToolStripMenuItem(pluginName);
|
|
menuItem.Click += (object? sender, EventArgs e) =>
|
|
{
|
|
_selectedPlugin = pluginName;
|
|
|
|
// Íà÷àëî îáðàáîòêè âûáðàííîãîî ïëàãèíà
|
|
IPluginsConvention plugin = _plugins![pluginName];
|
|
|
|
// Get Control âîçâðàùàåò ïîëüçîâàòåëüñêèé ýëåìåíò
|
|
UserControl userControl = plugin.GetControl;
|
|
|
|
if (userControl != null)
|
|
{
|
|
// panelControl äîáàâëÿåò êîíòåéíåð íà êîòîðîì ïðîèñõîäèò îòîáðàæåíèå èíòåðôåéñà
|
|
panelControl.Controls.Clear();
|
|
plugin.ReloadData();
|
|
userControl.Dock = DockStyle.Fill;
|
|
panelControl.Controls.Add(userControl);
|
|
}
|
|
};
|
|
|
|
ControlsStripMenuItem.DropDownItems.Add(menuItem);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Îáðàáîò÷èê íàæàòèÿ êëàâèø
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void FormMain_KeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
if (string.IsNullOrEmpty(_selectedPlugin) || !_plugins.ContainsKey(_selectedPlugin))
|
|
{
|
|
return;
|
|
}
|
|
if (!e.Control)
|
|
{
|
|
return;
|
|
}
|
|
|
|
switch (e.KeyCode)
|
|
{
|
|
case Keys.I:
|
|
ShowThesaurus();
|
|
break;
|
|
case Keys.A:
|
|
AddNewElement();
|
|
break;
|
|
case Keys.U:
|
|
UpdateElement();
|
|
break;
|
|
case Keys.D:
|
|
DeleteElement();
|
|
break;
|
|
case Keys.S:
|
|
CreateSimpleDoc();
|
|
break;
|
|
case Keys.T:
|
|
CreateTableDoc();
|
|
break;
|
|
case Keys.C:
|
|
CreateChartDoc();
|
|
break;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Ïîêàçàòü òåçàóðóñ
|
|
/// </summary>
|
|
private void ShowThesaurus()
|
|
{
|
|
_plugins[_selectedPlugin].GetThesaurus()?.Show();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Äîáàâèòü ýëåìåíò
|
|
/// </summary>
|
|
private void AddNewElement()
|
|
{
|
|
var form = _plugins[_selectedPlugin].GetForm(null);
|
|
if (form != null && form.ShowDialog() == DialogResult.OK)
|
|
{
|
|
_plugins[_selectedPlugin].ReloadData();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Îáíîâèòü ýëåìåíò
|
|
/// </summary>
|
|
private void UpdateElement()
|
|
{
|
|
var element = _plugins[_selectedPlugin].GetElement;
|
|
if (element == null)
|
|
{
|
|
MessageBox.Show("Íåò âûáðàííîãî ýëåìåíòà!", "Îøèáêà", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
return;
|
|
}
|
|
|
|
var form = _plugins[_selectedPlugin].GetForm(element);
|
|
if (form != null && form.ShowDialog() == DialogResult.OK)
|
|
{
|
|
_plugins[_selectedPlugin].ReloadData();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Óäàëèòü ýëåìåíò
|
|
/// </summary>
|
|
private void DeleteElement()
|
|
{
|
|
var element = _plugins[_selectedPlugin].GetElement;
|
|
if (element == null)
|
|
{
|
|
MessageBox.Show("Íåò âûáðàííîãî ýëåìåíòà!", "Îøèáêà", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
return;
|
|
}
|
|
|
|
if (_plugins[_selectedPlugin].DeleteElement(element))
|
|
{
|
|
_plugins[_selectedPlugin].ReloadData();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Ñîçäàòü ïðîñòîé äîêóìåíò
|
|
/// </summary>
|
|
private void CreateSimpleDoc()
|
|
{
|
|
using (var dialog = new SaveFileDialog { Filter = "pdf|*.pdf" })
|
|
{
|
|
if (dialog.ShowDialog() == DialogResult.OK)
|
|
{
|
|
string fileName = dialog.FileName.ToString();
|
|
if (_plugins[_selectedPlugin].CreateSimpleDocument(new PluginsConventionSaveDocument() { FileName = fileName }))
|
|
{
|
|
MessageBox.Show("Äîêóìåíò ñîõðàí¸í", "Ñîçäàíèå äîêóìåíòà", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("Îøèáêà ïðè ñîçäàíèè äîêóìåíòà", "Îøèáêà", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Ñîçäàòü äîêóìåíò ñ òàáëèöåé
|
|
/// </summary>
|
|
private void CreateTableDoc()
|
|
{
|
|
using (var dialog = new SaveFileDialog { Filter = "xlsx|*.xlsx" })
|
|
{
|
|
if (dialog.ShowDialog() == DialogResult.OK)
|
|
{
|
|
string fileName = dialog.FileName.ToString();
|
|
if (_plugins[_selectedPlugin].CreateTableDocument(new PluginsConventionSaveDocument() { FileName = fileName }))
|
|
{
|
|
MessageBox.Show("Äîêóìåíò ñîõðàí¸í", "Ñîçäàíèå äîêóìåíòà", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("Îøèáêà ïðè ñîçäàíèè äîêóìåíòà", "Îøèáêà", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Ñîçäàòü äîêóìåíò ñ äèàãðàììîé
|
|
/// </summary>
|
|
private void CreateChartDoc()
|
|
{
|
|
using (var dialog = new SaveFileDialog { Filter = "docx|*.docx" })
|
|
{
|
|
if (dialog.ShowDialog() == DialogResult.OK)
|
|
{
|
|
string fileName = dialog.FileName.ToString();
|
|
if (_plugins[_selectedPlugin].CreateChartDocument(new PluginsConventionSaveDocument() { FileName = fileName }))
|
|
{
|
|
MessageBox.Show("Äîêóìåíò ñîõðàí¸í", "Ñîçäàíèå äîêóìåíòà", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("Îøèáêà ïðè ñîçäàíèè äîêóìåíòà", "Îøèáêà", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Îáðàáîò÷èê äëÿ îòîáðàæåíèÿ òåçàóðóñà
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void ThesaurusToolStripMenuItem_Click(object sender, EventArgs e) => ShowThesaurus();
|
|
|
|
/// <summary>
|
|
/// Îáðàáîò÷èê äëÿ äîáàâëåíèÿ ýëåìåíòà
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void AddElementToolStripMenuItem_Click(object sender, EventArgs e) => AddNewElement();
|
|
|
|
/// <summary>
|
|
/// Îáðàáîò÷èê äëÿ îáíîâëåíèÿ ýëåìåíòà
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void UpdElementToolStripMenuItem_Click(object sender, EventArgs e) => UpdateElement();
|
|
|
|
/// <summary>
|
|
/// Îáðàáîò÷èê äëÿ óäàëåíèÿ ýëåìåíòà
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void DelElementToolStripMenuItem_Click(object sender, EventArgs e) => DeleteElement();
|
|
|
|
/// <summary>
|
|
/// Îáðàáîò÷èê äëÿ ñîçäàíèÿ ïðîñòîãî äîêóìåíòà
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void SimpleDocToolStripMenuItem_Click(object sender, EventArgs e) => CreateSimpleDoc();
|
|
|
|
/// <summary>
|
|
/// Îáðàáîò÷èê äëÿ ñîçäàíèÿ äîêóìåíòà ñ òàáëèöåé
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void TableDocToolStripMenuItem_Click(object sender, EventArgs e) => CreateTableDoc();
|
|
|
|
/// <summary>
|
|
/// Îáðàáîò÷èê äëÿ ñîçäàíèÿ äîêóìåíòà ñ äèàãðàììîé
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void ChartDocToolStripMenuItem_Click(object sender, EventArgs e) => CreateChartDoc();
|
|
}
|
|
}
|