diff --git a/LibraryPluginWinFormsApp/FormMain.cs b/LibraryPluginWinFormsApp/FormMain.cs index 549c2de..a831d13 100644 --- a/LibraryPluginWinFormsApp/FormMain.cs +++ b/LibraryPluginWinFormsApp/FormMain.cs @@ -1,253 +1,237 @@ -//using NPOI.HPSF; -//using Plugins; -//using System; -//using System.Collections.Generic; -//using System.ComponentModel; -//using System.Data; -//using System.Drawing; -//using System.Linq; -//using System.Reflection; -//using System.Text; -//using System.Threading.Tasks; -//using System.Windows.Forms; +using LibraryPlugin; +using LibraryPlugin.Helpers; +using LibraryUtils.FileChooser; +using Microsoft.Win32; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using static LibraryUtils.FileChooser.FileChooser; -//namespace LibraryPluginWinFormsApp -//{ -// public partial class FormMain : Form -// { -// private readonly Dictionary _plugins; -// private string _selectedPlugin; -// public FormMain() -// { -// InitializeComponent(); -// _plugins = LoadPlugins(); -// _selectedPlugin = string.Empty; -// } -// private Dictionary LoadPlugins() -// { -// Dictionary plugins = new(); -// string currentDirectory = Directory -// .GetParent(Environment.CurrentDirectory)! -// .Parent! -// .Parent! -// .Parent! -// .FullName + "\\plugin"; -// string[] dllFiles = Directory.GetFiles(currentDirectory, "*.dll", SearchOption.AllDirectories); -// foreach (string dllFile in dllFiles) -// { -// try -// { -// Assembly assembly = Assembly.LoadFrom(dllFile); +namespace LibraryPluginWinFormsApp +{ + public partial class FormMain : Form + { + private readonly Dictionary _plugins; + private string _selectedPlugin; + public FormMain() + { + InitializeComponent(); + _plugins = LoadPlugins(); + _selectedPlugin = string.Empty; + } + #region load_plugins + private Dictionary LoadPlugins() + { + Dictionary plugins = new(); + string currentDirectory = Directory + .GetParent(Environment.CurrentDirectory)! + .Parent! + .Parent! + .FullName + "\\bin\\Debug\\net6.0-windows"; + string[] dllFiles = Directory.GetFiles(currentDirectory, "*.dll", SearchOption.AllDirectories); + foreach (string dllFile in dllFiles) + { + try + { + Assembly assembly = Assembly.LoadFrom(dllFile); -// Type[] types = assembly.GetTypes(); + Type[] types = assembly.GetTypes(); -// foreach (Type type in types) -// { -// if (typeof(IPluginsConvention).IsAssignableFrom(type) && !type.IsInterface) -// { -// var plugin = (IPluginsConvention)Activator.CreateInstance(type)!; + foreach (Type type in types) + { + if (typeof(IPluginsConvention).IsAssignableFrom(type) && !type.IsInterface) + { + var plugin = (IPluginsConvention)Activator.CreateInstance(type)!; -// plugins.Add(plugin.PluginName, plugin); -// } -// } -// } -// catch (Exception ex) -// { -// Console.WriteLine($"Не удалось загрузить плагин {dllFile}: {ex.Message}"); -// } -// } -// foreach (var plugin in plugins) -// { -// CreateMenuItem(plugin.Value.PluginName); -// } -// return plugins; -// } -// private void CreateMenuItem(string pluginName) -// { -// ToolStripMenuItem menuItem = new ToolStripMenuItem(pluginName); -// menuItem.Click += (object? sender, EventArgs a) => -// { -// _selectedPlugin = pluginName; -// IPluginsConvention plugin = _plugins[pluginName]; -// UserControl userControl = plugin.GetControl; -// if (userControl != null) -// { -// panelControl.Controls.Clear(); -// plugin.ReloadData(); -// userControl.Dock = DockStyle.Fill; -// panelControl.Controls.Add(userControl); -// } -// }; -// ControlsStripMenuItem.DropDownItems.Add(menuItem); -// } -// 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; -// } -// } -// private void ShowThesaurus() -// { -// _plugins[_selectedPlugin].GetThesaurus()?.Show(); -// } -// private void AddNewElement() -// { -// var form = _plugins[_selectedPlugin].GetForm(null); -// if (form != null && form.ShowDialog() == DialogResult.OK) -// { -// _plugins[_selectedPlugin].ReloadData(); -// } -// } -// 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(); -// } -// } -// private void DeleteElement() -// { -// if (MessageBox.Show("Удалить выбранный элемент", "Удаление", -// MessageBoxButtons.YesNo, -// MessageBoxIcon.Question) != DialogResult.Yes) -// { -// return; -// } -// var element = _plugins[_selectedPlugin].GetElement; -// if (element == null) -// { -// MessageBox.Show("Нет выбранного элемента", "Ошибка", -// MessageBoxButtons.OK, MessageBoxIcon.Error); -// return; -// } + plugins.Add(plugin.PluginName, plugin); + } + } + } + catch (Exception ex) + { + Console.WriteLine($"Не удалось загрузить плагин {dllFile}: {ex.Message}"); + } + } + foreach (var plugin in plugins) + { + CreateMenuItem(plugin.Value.PluginName); + } + return plugins; + } + private void CreateMenuItem(string pluginName) + { + ToolStripMenuItem menuItem = new ToolStripMenuItem(pluginName); + menuItem.Click += (object? sender, EventArgs a) => + { + _selectedPlugin = pluginName; + IPluginsConvention plugin = _plugins[pluginName]; + UserControl userControl = plugin.GetControl; + if (userControl != null) + { + panelControl.Controls.Clear(); + plugin.ReloadData(); + userControl.Dock = DockStyle.Fill; + panelControl.Controls.Add(userControl); + } + }; + ControlsStripMenuItem.DropDownItems.Add(menuItem); + } + #endregion + #region crud_ops + private void ShowThesaurus() + { + _plugins[_selectedPlugin].GetThesaurus()?.Show(); + } + private void AddNewElement() + { + var form = _plugins[_selectedPlugin].GetForm(null); + if (form != null && form.ShowDialog() == DialogResult.OK) + { + _plugins[_selectedPlugin].ReloadData(); + } + } + 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(); + } + } + private void DeleteElement() + { + if (MessageBox.Show("Удалить выбранный элемент", "Удаление", + MessageBoxButtons.YesNo, + MessageBoxIcon.Question) != DialogResult.Yes) + { + return; + } + var element = _plugins[_selectedPlugin].GetElement; + if (element == null) + { + MessageBox.Show("Нет выбранного элемента", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } -// if (_plugins[_selectedPlugin].DeleteElement(element)) -// { -// _plugins[_selectedPlugin].ReloadData(); -// } -// } -// private void CreateSimpleDoc() -// { -// SaveFileDialog saveFileDialog = new SaveFileDialog(); -// saveFileDialog.Filter = "Word Documents (*.docx)|*.docx"; -// saveFileDialog.Title = "Сохранить простой документ"; -// if (saveFileDialog.ShowDialog() == DialogResult.OK) -// { -// if (_plugins[_selectedPlugin].CreateSimpleDocument( -// new PluginsConventionSaveDocument() -// { -// FileName = saveFileDialog.FileName -// })) -// { -// MessageBox.Show("Документ сохранен", "Создание" + -// " документа", MessageBoxButtons.OK, MessageBoxIcon.Information); -// } -// else -// { -// MessageBox.Show("Ошибка при создании документа", -// "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); -// } - -// } -// } -// private void CreateTableDoc() -// { -// SaveFileDialog saveFileDialog = new SaveFileDialog(); -// saveFileDialog.Filter = "PDF Files (*.pdf)|*.pdf"; -// saveFileDialog.Title = "Сохранить таблицу"; -// if (saveFileDialog.ShowDialog() == DialogResult.OK) -// { -// if (_plugins[_selectedPlugin].CreateTableDocument( -// new PluginsConventionSaveDocument() -// { -// FileName = saveFileDialog.FileName -// })) -// { -// MessageBox.Show("Документ сохранен", "Создание" + -// " документа", MessageBoxButtons.OK, MessageBoxIcon.Information); -// } -// else -// { -// MessageBox.Show("Ошибка при создании документа", -// "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); -// } -// } -// } -// private void CreateChartDoc() -// { -// SaveFileDialog saveFileDialog = new SaveFileDialog(); -// saveFileDialog.Filter = "Excel Files (*.xlsx)|*.xlsx"; -// saveFileDialog.Title = "Сохранить диаграмму"; -// if (saveFileDialog.ShowDialog() == DialogResult.OK) -// { -// if (_plugins[_selectedPlugin].CreateChartDocument( -// new PluginsConventionSaveDocument() -// { -// FileName = saveFileDialog.FileName -// })) -// { -// MessageBox.Show("Документ сохранен", "Создание" + -// " документа", MessageBoxButtons.OK, MessageBoxIcon.Information); -// } -// else -// { -// MessageBox.Show("Ошибка при создании документа", -// "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); -// } - -// } -// } -// private void ThesaurusToolStripMenuItem_Click(object sender, -// EventArgs e) => ShowThesaurus(); -// private void AddElementToolStripMenuItem_Click(object sender, -// EventArgs e) => AddNewElement(); -// private void UpdElementToolStripMenuItem_Click(object sender, -// EventArgs e) => UpdateElement(); -// private void DelElementToolStripMenuItem_Click(object sender, -// EventArgs e) => DeleteElement(); -// private void SimpleDocToolStripMenuItem_Click(object sender, -// EventArgs e) => CreateSimpleDoc(); -// private void TableDocToolStripMenuItem_Click(object sender, EventArgs -// e) => CreateTableDoc(); -// private void ChartDocToolStripMenuItem_Click(object sender, EventArgs -// e) => CreateChartDoc(); -// } -//} + if (_plugins[_selectedPlugin].DeleteElement(element)) + { + _plugins[_selectedPlugin].ReloadData(); + } + } + #endregion + #region docs_ops + private void CreateSimpleDoc() + { + string fileName = GetFileFullName(DocType.Pdf); + if (_plugins[_selectedPlugin].CreateSimpleDocument( + new PluginsConventionSaveDocument() { FileName = fileName, })) + { + MessageBox.Show("Документ сохранен", "Создание документа", + MessageBoxButtons.OK, MessageBoxIcon.Information); + } + else + { + MessageBox.Show("Ошибка при создании документа", + "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void CreateTableDoc() + { + string fileName = GetFileFullName(DocType.Excel); + if (_plugins[_selectedPlugin].CreateTableDocument( + new PluginsConventionSaveDocument() { FileName = fileName, })) + { + MessageBox.Show("Документ сохранен", "Создание документа", + MessageBoxButtons.OK, MessageBoxIcon.Information); + } + else + { + MessageBox.Show("Ошибка при создании документа", + "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void CreateChartDoc() + { + string fileName = GetFileFullName(DocType.Word); + if (_plugins[_selectedPlugin].CreateChartDocument( + new PluginsConventionSaveDocument() { FileName = fileName, })) + { + MessageBox.Show("Документ сохранен", "Создание документа", + MessageBoxButtons.OK, MessageBoxIcon.Information); + } + else + { + MessageBox.Show("Ошибка при создании документа", + "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + #endregion + #region event-handlers + 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; + } + } + private void ThesaurusToolStripMenuItem_Click(object sender, + EventArgs e) => ShowThesaurus(); + private void AddElementToolStripMenuItem_Click(object sender, + EventArgs e) => AddNewElement(); + private void UpdElementToolStripMenuItem_Click(object sender, + EventArgs e) => UpdateElement(); + private void DelElementToolStripMenuItem_Click(object sender, + EventArgs e) => DeleteElement(); + private void SimpleDocToolStripMenuItem_Click(object sender, + EventArgs e) => CreateSimpleDoc(); + private void TableDocToolStripMenuItem_Click(object sender, EventArgs + e) => CreateTableDoc(); + private void ChartDocToolStripMenuItem_Click(object sender, EventArgs + e) => CreateChartDoc(); + #endregion + } +} diff --git a/LibraryPluginWinFormsApp/LibraryPluginWinFormsApp.csproj b/LibraryPluginWinFormsApp/LibraryPluginWinFormsApp.csproj index e86828f..48308ee 100644 --- a/LibraryPluginWinFormsApp/LibraryPluginWinFormsApp.csproj +++ b/LibraryPluginWinFormsApp/LibraryPluginWinFormsApp.csproj @@ -8,6 +8,10 @@ enable + + + +