тоже 4 лаба
This commit is contained in:
parent
af59090657
commit
5a6d37dfba
@ -1,4 +1,6 @@
|
||||
namespace PluginsConventionLibrary
|
||||
using System.Reflection;
|
||||
|
||||
namespace PluginsConventionLibrary
|
||||
{
|
||||
public partial class FormMain : Form
|
||||
{
|
||||
@ -13,14 +15,63 @@
|
||||
|
||||
private Dictionary<string, IPluginsConvention> LoadPlugins()
|
||||
{
|
||||
// TODO Заполнить IPluginsConvention
|
||||
// TODO Заполнить пункт меню "Компоненты" на основе IPluginsConvention.PluginName
|
||||
// TODO Например, создавать ToolStripMenuItem, привязывать к ним обработку событий и добавлять в menuStrip
|
||||
// TODO При выборе пункта меню получать UserControl заполнять элемент panelControl этим контролом на всю площадь
|
||||
// Пример: panelControl.Controls.Clear(); panelControl.Controls.Add(ctrl);
|
||||
Dictionary<string, IPluginsConvention> plugins = new();
|
||||
string currentDirectory = Directory.GetParent(Environment.CurrentDirectory)!.Parent!.Parent!.Parent!.FullName + "\\plugin";
|
||||
string[] dllFiles = Directory.GetFiles(currentDirectory, "*.dll", SearchOption.AllDirectories);
|
||||
if (!Directory.Exists(currentDirectory))
|
||||
{
|
||||
MessageBox.Show($"Ошибка получения плагинов", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
return plugins;
|
||||
}
|
||||
foreach (string dllFile in dllFiles)
|
||||
{
|
||||
try
|
||||
{
|
||||
Assembly assembly = Assembly.LoadFrom(dllFile);
|
||||
|
||||
Type[] types = assembly.GetTypes();
|
||||
|
||||
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 new Dictionary<string, IPluginsConvention>();
|
||||
}
|
||||
|
||||
private void CreateMenuItem(string pluginName)
|
||||
{
|
||||
var menuItem = new ToolStripMenuItem(pluginName);
|
||||
menuItem.Click += (s, e) =>
|
||||
{
|
||||
_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))
|
||||
@ -106,43 +157,58 @@
|
||||
}
|
||||
private void CreateSimpleDoc()
|
||||
{
|
||||
// TODO узнать где сохранять
|
||||
if (_plugins[_selectedPlugin].CreateSimpleDocument(new PluginsConventionSaveDocument()))
|
||||
SaveFileDialog saveFileDialog = new SaveFileDialog();
|
||||
saveFileDialog.Filter = "Word Documents (*.docx)|*.docx";
|
||||
saveFileDialog.Title = "Документ Word";
|
||||
if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
MessageBox.Show("Документ сохранен", "Создание документа", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
if (_plugins[_selectedPlugin].CreateSimpleDocument(new PluginsConventionSaveDocument()))
|
||||
{
|
||||
MessageBox.Show("Документ сохранен", "Создание документа", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("Ошибка при создании документа", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("Ошибка при создании документа", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void CreateTableDoc()
|
||||
{
|
||||
// TODO узнать где сохранять
|
||||
if (_plugins[_selectedPlugin].CreateTableDocument(new PluginsConventionSaveDocument()))
|
||||
SaveFileDialog saveFileDialog = new SaveFileDialog();
|
||||
saveFileDialog.Filter = "PDF Files (*.pdf)|*.pdf";
|
||||
saveFileDialog.Title = "Документ с таблицей";
|
||||
if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
MessageBox.Show("Документ сохранен", "Создание документа", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
if (_plugins[_selectedPlugin].CreateTableDocument(new PluginsConventionSaveDocument()))
|
||||
{
|
||||
MessageBox.Show("Документ сохранен", "Создание документа", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("Ошибка при создании документа", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("Ошибка при создании документа", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void CreateChartDoc()
|
||||
{
|
||||
// TODO узнать где сохранять
|
||||
if (_plugins[_selectedPlugin].CreateChartDocument(new PluginsConventionSaveDocument()))
|
||||
SaveFileDialog saveFileDialog = new SaveFileDialog();
|
||||
saveFileDialog.Filter = "Excel Files (*.xlsx)|*.xlsx";
|
||||
saveFileDialog.Title = "Документ с диаграммой";
|
||||
if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
MessageBox.Show("Документ сохранен", "Создание документа", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
if (_plugins[_selectedPlugin].CreateChartDocument(new PluginsConventionSaveDocument()))
|
||||
{
|
||||
MessageBox.Show("Документ сохранен", "Создание документа", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("Ошибка при создании документа", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("Ошибка при создании документа", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user