тоже 4 лаба

This commit is contained in:
a.puchkina 2024-11-11 21:52:14 +04:00
parent af59090657
commit 5a6d37dfba

View File

@ -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);
}
}
}