using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Configuration; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Xml.Linq; using Eugen.ESystem.IO; using static System.Windows.Forms.VisualStyles.VisualStyleElement; using static System.Windows.Forms.VisualStyles.VisualStyleElement.Window; using static Eugen.ESystem.IO.LoadXMLFile; using AppRes = Eugen.ESystem.Properties.AppResources; namespace Eugen.ESystem { public class DynamicMenuItems { #region Version und Copyright // Version und Copyright static string dllName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); //Den Programmnamen auslesen static string dllVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); static object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); static string copyright = GenerateCopyright(); //Assembly Datum und Zeit static DateTime value = AssemblyDateTime(); static string date = value.ToShortDateString(); static string time = value.ToLongTimeString(); private static DateTime AssemblyDateTime() { var version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; var buildDateTime = new DateTime(2000, 1, 1).Add(new TimeSpan(TimeSpan.TicksPerDay * version.Build + TimeSpan.TicksPerSecond * 2 * version.Revision)); //Tage seit dem 1. Januar 2000 und Sekunden seit Mitternacht, (multiplizier mit 2 ergibt das Original) return buildDateTime; } private static string CurrentYear() { DateTime dtn = DateTime.Now; return dtn.Year.ToString(); } private static string StartYear() { string startYear = ""; if (((AssemblyCopyrightAttribute)attributes[0]).Copyright.Contains("Copyright © ")) { startYear = ((AssemblyCopyrightAttribute)attributes[0]).Copyright.Replace("Copyright © ", ""); while (startYear.StartsWith(" ")) { startYear = startYear.Remove(0, 1); } if (startYear.Contains("-")) { startYear = startYear.Remove(startYear.IndexOf("-")); } else { startYear = startYear.Remove(startYear.IndexOf(" ")); } return startYear; } else { DateTime dtn = DateTime.Now; return dtn.Year.ToString(); } } private static string GenerateCopyright() { string startYear = StartYear(); string currentYear = CurrentYear(); if (startYear == currentYear) { return ((AssemblyCopyrightAttribute)attributes[0]).Copyright; } else { string temp = ((AssemblyCopyrightAttribute)attributes[0]).Copyright; string start = temp.Remove(temp.IndexOf(startYear) - 1); string end = (temp.Remove(0, temp.IndexOf(" by"))); return String.Concat(start, " ", startYear, "-", currentYear, end); } } #endregion #region DLL-Info /// /// Contains the name of the dll file. /// public static string DllName { private set; get; } /// /// Contains the version of the dll file. /// public static string DllVersion { private set; get; } /// /// Contains the copyright notice. /// public static string Copyright { private set; get; } /// /// Contains the name-, version- and copyright-information of the dll file. /// public static string[] DllInfo { private set; get; } private static void SetDllInfo() { //Name, Version und Copyright setzen DllName = dllName; DllVersion = dllVersion; Copyright = copyright; string[] dllInfo = new string[3]; dllInfo[0] = dllName; dllInfo[1] = dllVersion; dllInfo[2] = copyright; DllInfo = dllInfo; } protected string ProgramName { private set; get; } protected string ProgramVersion { private set; get; } protected string ProgramCopyright { private set; get; } #endregion static DynamicMenuItems() { SetDllInfo(); } public DynamicMenuItems() { SetDllInfo(); } /// /// Log file name /// public static string LogFile { get; set; } /// /// Name of the roaming file /// public static string FileNameRoaming { get; set; } /// /// Password for encryption /// public string Password { get; set; } /// /// File name of the configuration /// public string XmlFile { get; set; } /// /// The XML topic /// public string Topic { get; set; } /// /// The XML group /// public string Group { get; set; } /// /// The XML key /// public string Key { get; set; } /// /// The values stored in the XML file /// public string[,] Values { get; set; } /// /// List of menu entries to be created /// public string[] MenuItems { get; set; } /// /// The selected menu item /// public string Standard { get; set; } /// /// Menu into which the submenus are inserted /// public ToolStripMenuItem Menu { get; set; } /// /// The backcolor of a menu entry /// public Color BackColor { get; set; } /// /// The forcolor of a menu entry /// public Color ForeColor { get; set; } //Logfile global setzen LogWriter log = new LogWriter(Path.GetDirectoryName(LogFile), Path.GetFileName(LogFile)); /// /// Insert a menu item /// /// Name of the Menu item public void AddMenuItem(string menuItem) { ToolStripMenuItem menu = (ToolStripMenuItem)(Menu); Menu.DropDownItems.Add(menuItem, null, new EventHandler(ToolStripMenuItem_Click)); //Wenn BackColor und ForeColor einen Wert enthalten, dann das Menü einfärben if (BackColor != null & ForeColor != null) { foreach (ToolStripMenuItem item in menu.DropDownItems) { item.BackColor = BackColor; item.ForeColor = ForeColor; } } if (File.Exists(LogFile)) { log.WriteMessage("License value menu entry \'" + menuItem + "\' generated", LogWriter.LogLevel.Information, LogWriter.Time.Write); //Logdatei schreiben } } /// /// Insert menu entry from a list that is in an XML file /// public void AddMenuItemsFromXML() { if (File.Exists(LogFile)) { log.WriteMessage("Creating dynamic license bundles menu entries ...", LogWriter.LogLevel.Information, LogWriter.Time.Write); //Logdatei schreiben } LoadXmlFile(XmlFile, Topic, Group, Key); //Information aus der XML-Datei auslesen ExtractMenuItem(); //Die Menueinträge aus den XML-Daten ermitteln ExtractStandardItem(); //Das Standard Item ermitteln AddMenuItems(MenuItems); //Item zum Menü hinzufügen CheckMenuItem(Standard); //Standard Menü Item auswählen if (File.Exists(LogFile)) { log.WriteMessage("Dynamic license bundles menu entries created successfully", LogWriter.LogLevel.Information, LogWriter.Time.Write); //Logdatei schreiben } } /// /// Insert menu entry from a list /// /// List of menu items public void AddMenuItems(string[] menuList) { //Menueinträge erzeugen if (File.Exists(LogFile)) { log.WriteMessage("Generating menu entries ...", LogWriter.LogLevel.Information, LogWriter.Time.Write); //Logdatei schreiben } //Zuerst alle angelegten Menüeinträge löschen RemoveAllMenuItems(); //Für jedes Element in der Liste einen Menüpunkt anlegen foreach (var element in menuList) { AddMenuItem(element); } if (File.Exists(LogFile)) { log.WriteMessage("All menu entries are generated successfully", LogWriter.LogLevel.Information, LogWriter.Time.Write); //Logdatei schreiben } } /// /// Check a menu item /// /// Item name public void CheckMenuItem(string selectedItem) { //Hier soll der Menüeintrag, der dem Übergebenen Wert entspricht, auf 'Checked = true' gesetzt werden foreach (ToolStripMenuItem item in Menu.DropDownItems) { if (item.Text == selectedItem) { item.Checked = true; if (File.Exists(LogFile)) { log.WriteMessage("The menu item \'" + item.Text + "\' was selected", LogWriter.LogLevel.Information, LogWriter.Time.Write); //Logdatei schreiben } } else { item.Checked = false; } } } /// /// Removes a menu item /// /// Item name public void RemoveMenuItem(string item) { ToolStripMenuItem menu = (ToolStripMenuItem)(Menu); foreach (ToolStripMenuItem xitem in menu.DropDownItems) { if (xitem.ToString() == item) { menu.DropDownItems.Remove(xitem); //Den Menüeinträge löschen if (File.Exists(LogFile)) { log.WriteMessage("Remove menu entrie" + item, LogWriter.LogLevel.Information, LogWriter.Time.Write); //Logdatei schreiben } return; } } } /// /// Removes the menu items specified in a list /// /// Item list public void RemoveMenuItems(string[] itemList) { foreach (string item in itemList) { RemoveMenuItem(item); } } /// /// Removes all menu items /// public void RemoveAllMenuItems() { ToolStripMenuItem menu = (ToolStripMenuItem)(Menu); menu.DropDownItems.Clear(); //Alle angelegten Menüeinträge löschen if (File.Exists(LogFile)) { log.WriteMessage("Removed all menu entries", LogWriter.LogLevel.Information, LogWriter.Time.Write); //Logdatei schreiben } } /// /// Saves a license value to the roaming area /// /// A valid string /// Unable to save license value public void SaveValueToRoaming(string value, string key) { string password = Environment.GetEnvironmentVariable("USERNAME"); var cryption = new Cryption(); try { var roaming = new Roaming(); roaming.MainKey = "NX-Portal"; roaming.Key = key; roaming.Value = cryption.EncryptString(value, password); roaming.WriteKey(); } catch (Exception) { throw new UnableToSaveLicenseBundleException(); } } private void ToolStripMenuItem_Click(object sender, EventArgs e) { ToolStripMenuItem MenuItem = (ToolStripMenuItem)sender; //SelectedItem = MenuItem.Text; Standard = MenuItem.Text; CheckMenuItem(MenuItem.Text); //License Bundle ins Roaming schreiben if (!String.IsNullOrEmpty(FileNameRoaming)) { SaveValueToRoaming(MenuItem.Text, FileNameRoaming); //In Roaming speichern log.WriteMessage("The license value was saved to roaming", LogWriter.LogLevel.Information, LogWriter.Time.Write); //Logdatei schreiben } } private void LoadXmlFile(string xmlFileName, string topic, string group, string key) { if (File.Exists(LogFile)) { log.WriteMessage("Load menu items from XML-file", LogWriter.LogLevel.Information, LogWriter.Time.Write); //Logdatei schreiben } var loadXmlFile = new LoadXMLFile(); //LoadXML.Password = password; loadXmlFile.FileName = xmlFileName; loadXmlFile.Topic = topic; loadXmlFile.Group = group; loadXmlFile.Key = key; loadXmlFile.LoadAllValues = LoadAll.Yes; //XML laden if (File.Exists(xmlFileName)) { loadXmlFile.Load(); Values = loadXmlFile.Values; } else { //Datei nicht gefunden MessageBox.Show(AppRes.msg001, AppRes.capt001, MessageBoxButtons.OK); } } private void ExtractMenuItem() { string[] menuItems = new string[Values.Length / 5]; for (int i = 0; i < Values.Length / 5; i++) { menuItems[i] = Values[i, 3].ToString(); } MenuItems = menuItems; } private void ExtractStandardItem() { for (int i = 0; i < Values.Length / 5; i++) { if (Values[i, 4].ToString() == "yes") { Standard = Values[i, 3].ToString(); } } } } #region Exceptions class UnableToSaveLicenseBundleException : ApplicationException { public UnableToSaveLicenseBundleException() { } public UnableToSaveLicenseBundleException(string message) : base(message) { } public UnableToSaveLicenseBundleException(string message, Exception inner) : base(message, inner) { } } #endregion }