SystemTrayMenu/UserInterface/AppContextMenu.cs

278 lines
11 KiB
C#
Raw Normal View History

2019-07-05 05:04:14 +12:00
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Globalization;
using System.Linq;
using System.Reflection;
using System.Windows.Forms;
2020-03-17 02:45:19 +13:00
using SystemTrayMenu.Helper;
2019-07-05 05:04:14 +12:00
namespace SystemTrayMenu.Controls
{
internal class AppContextMenu
2019-07-05 05:04:14 +12:00
{
public event EventHandler ClickedChangeFolder;
public event EventHandler ClickedOpenLog;
public event EventHandler ClickedRestart;
public event EventHandler ClickedExit;
public ContextMenuStrip Create()
{
ContextMenuStrip menu = new ContextMenuStrip
{
BackColor = SystemColors.Control
};
ToolStripMenuItem changeFolder = new ToolStripMenuItem
{
Text = Language.Translate("Folder")
};
2019-07-05 05:04:14 +12:00
changeFolder.Click += ChangeFolder_Click;
void ChangeFolder_Click(object sender, EventArgs e)
{
ClickedChangeFolder.Invoke();
}
menu.Items.Add(changeFolder);
ToolStripMenuItem changeLanguage = new ToolStripMenuItem()
{
Name = "changeLanguage",
2020-03-17 02:45:19 +13:00
Text = Language.Translate("Language")
2019-07-05 05:04:14 +12:00
};
2019-11-19 08:11:55 +13:00
foreach (CultureInfo cultureInfo in
2019-07-05 05:04:14 +12:00
GetCultureList(CultureTypes.AllCultures))
{
2020-03-17 02:45:19 +13:00
if (MenuDefines.Languages.Contains(cultureInfo.Name))
2019-07-05 05:04:14 +12:00
{
ToolStripItem language = changeLanguage.DropDownItems.
2020-03-17 02:45:19 +13:00
Add(Language.Translate(cultureInfo.EnglishName));
2019-07-05 05:04:14 +12:00
language.Click += Language_Click;
void Language_Click(object sender, EventArgs e)
{
string twoLetter = cultureInfo.Name.Substring(0, 2);
Properties.Settings.Default.CurrentCultureInfoName =
twoLetter;
Properties.Settings.Default.Save();
ClickedRestart.Invoke();
}
if (cultureInfo.Name == Properties.Settings.Default.
CurrentCultureInfoName)
{
language.Image = Properties.Resources.Selected;
language.ImageScaling = ToolStripItemImageScaling.None;
language.Image = ResizeImage(language.Image);
}
}
}
menu.Items.Add(changeLanguage);
ToolStripMenuItem autostart = new ToolStripMenuItem
{
Text = Language.Translate("Autostart")
};
2019-07-05 05:04:14 +12:00
//autostart.Image.HorizontalResolution.wi.c.sc.Select .ImageScaling = ToolStripItemImageScaling.None;
if (Properties.Settings.Default.IsAutostartActivated)
{
autostart.Image = Properties.Resources.Selected;
}
else
{
autostart.Image = Properties.Resources.NotSelected;
}
autostart.ImageScaling = ToolStripItemImageScaling.None;
autostart.Image = ResizeImage(autostart.Image);
autostart.Click += Autostart_Click;
void Autostart_Click(object sender, EventArgs e)
{
if (Properties.Settings.Default.IsAutostartActivated)
{
Microsoft.Win32.RegistryKey key =
Microsoft.Win32.Registry.CurrentUser.OpenSubKey(
@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
true);
key.DeleteValue("SystemTrayMenu", false);
Properties.Settings.Default.IsAutostartActivated = false;
}
else
{
Microsoft.Win32.RegistryKey key =
Microsoft.Win32.Registry.CurrentUser.OpenSubKey(
@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
true);
key.SetValue(
Assembly.GetExecutingAssembly().GetName().Name,
Assembly.GetEntryAssembly().Location);
Properties.Settings.Default.IsAutostartActivated = true;
}
Properties.Settings.Default.Save();
ClickedRestart.Invoke();
}
menu.Items.Add(autostart);
ToolStripMenuItem hotKey = new ToolStripMenuItem();
string hotKeyText =
2020-03-17 02:45:19 +13:00
$"{Language.Translate("CTRL")} + " +
$"{Language.Translate("ALT")} + ";
2019-07-05 05:04:14 +12:00
hotKey.ImageScaling = ToolStripItemImageScaling.SizeToFit;
if (string.IsNullOrEmpty(Properties.Settings.Default.HotKey))
{
hotKey.Image = Properties.Resources.NotSelected;
hotKey.Text = hotKeyText + "? ";
}
else
{
hotKey.Image = Properties.Resources.Selected;
hotKey.Text = hotKeyText +
$"{Properties.Settings.Default.HotKey}";
}
hotKey.ImageScaling = ToolStripItemImageScaling.None;
hotKey.Image = ResizeImage(hotKey.Image);
hotKey.Click += HotKey_Click;
void HotKey_Click(object sender, EventArgs e)
{
AskHotKeyForm askHotKey = new AskHotKeyForm();
if (askHotKey.ShowDialog() == DialogResult.OK)
{
Properties.Settings.Default.HotKey = askHotKey.NewHotKey;
Properties.Settings.Default.Save();
ClickedRestart?.Invoke();
}
}
menu.Items.Add(hotKey);
ToolStripSeparator seperator = new ToolStripSeparator
{
BackColor = SystemColors.Control
};
2019-07-05 05:04:14 +12:00
menu.Items.Add(seperator);
ToolStripMenuItem openLog = new ToolStripMenuItem
{
Text = Language.Translate("Log File")
};
2019-07-05 05:04:14 +12:00
openLog.Click += OpenLog_Click;
void OpenLog_Click(object sender, EventArgs e)
{
ClickedOpenLog.Invoke();
}
menu.Items.Add(openLog);
menu.Items.Add(new ToolStripSeparator());
ToolStripMenuItem about = new ToolStripMenuItem
{
Text = Language.Translate("About")
};
2019-07-05 05:04:14 +12:00
about.Click += About_Click;
void About_Click(object sender, EventArgs e)
{
FileVersionInfo versionInfo = FileVersionInfo.GetVersionInfo(
Assembly.GetEntryAssembly().Location);
AboutBox ab = new AboutBox
{
AppTitle = versionInfo.ProductName,
AppDescription = versionInfo.FileDescription,
AppVersion = $"Version {versionInfo.FileVersion}",
AppCopyright = versionInfo.LegalCopyright,
AppMoreInfo = versionInfo.LegalCopyright
};
2019-07-05 05:04:14 +12:00
ab.AppMoreInfo += Environment.NewLine;
ab.AppMoreInfo += "Markus Hofknecht (mailto:Markus@Hofknecht.eu)";
2019-07-05 05:04:14 +12:00
ab.AppMoreInfo += Environment.NewLine;
ab.AppMoreInfo += "Tanja Kauth (mailto:Tanja@Hofknecht.eu)";
2019-07-05 05:04:14 +12:00
ab.AppMoreInfo += Environment.NewLine;
ab.AppMoreInfo += "http://www.hofknecht.eu/systemtraymenu/";
2019-07-05 05:04:14 +12:00
ab.AppMoreInfo += Environment.NewLine;
ab.AppMoreInfo += "https://github.com/Hofknecht/SystemTrayMenu";
2019-07-05 05:04:14 +12:00
ab.AppMoreInfo += Environment.NewLine;
ab.AppMoreInfo += Environment.NewLine;
ab.AppMoreInfo += "GNU GENERAL PUBLIC LICENSE" + Environment.NewLine;
ab.AppMoreInfo += "(Version 3, 29 June 2007)" + Environment.NewLine;
2019-07-05 05:04:14 +12:00
ab.AppDetailsButton = true;
ab.ShowDialog();
}
menu.Items.Add(about);
menu.Items.Add(new ToolStripSeparator());
ToolStripMenuItem restart = new ToolStripMenuItem
{
Text = Language.Translate("Restart")
};
2019-07-05 05:04:14 +12:00
restart.Click += Restart_Click;
void Restart_Click(object sender, EventArgs e)
{
ClickedRestart.Invoke();
}
menu.Items.Add(restart);
ToolStripMenuItem exit = new ToolStripMenuItem
{
Text = Language.Translate("Exit")
};
2019-07-05 05:04:14 +12:00
exit.Click += Exit_Click;
void Exit_Click(object sender, EventArgs e)
{
ClickedExit.Invoke();
}
menu.Items.Add(exit);
return menu;
}
/// <summary>
/// https://www.codeproject.com/Tips/744914/
/// Sorted-list-of-available-cultures-in-NET
/// </summary>
private static IEnumerable<CultureInfo> GetCultureList(
2019-07-05 05:04:14 +12:00
CultureTypes cultureType = CultureTypes.SpecificCultures)
{
List<CultureInfo> cultureList = CultureInfo.GetCultures(cultureType).ToList();
2019-07-05 05:04:14 +12:00
cultureList.Sort((p1, p2) => string.Compare(
p1.NativeName, p2.NativeName, true));
return cultureList;
}
/// <summary>
/// Resize the image to the specified width and height.
/// </summary>
/// <param name="image">The image to resize.</param>
/// <param name="width">The width to resize to.</param>
/// <param name="height">The height to resize to.</param>
/// <returns>The resized image.</returns>
public static Bitmap ResizeImage(Image image)
{
int length = (int)Math.Round(
2020-03-17 02:45:19 +13:00
16 * Scaling.Factor, 0,
2019-07-05 05:04:14 +12:00
MidpointRounding.AwayFromZero);
return ResizeImage(image, length, length);
}
public static Bitmap ResizeImage(Image image, int width, int height)
{
Rectangle destRect = new Rectangle(0, 0, width, height);
Bitmap destImage = new Bitmap(width, height);
2019-07-05 05:04:14 +12:00
destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);
using (Graphics graphics = Graphics.FromImage(destImage))
2019-07-05 05:04:14 +12:00
{
graphics.CompositingMode = CompositingMode.SourceCopy;
graphics.CompositingQuality = CompositingQuality.HighQuality;
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
using (ImageAttributes wrapMode = new ImageAttributes())
2019-07-05 05:04:14 +12:00
{
wrapMode.SetWrapMode(WrapMode.TileFlipXY);
graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode);
}
}
return destImage;
}
}
}