migrate to svg symbols & add maintenance info

This commit is contained in:
2024-06-20 07:24:23 +02:00
parent fc27fc1c34
commit 3dc69a4f26
34 changed files with 288 additions and 503 deletions

View File

@@ -0,0 +1,19 @@
using Pilz.UI.Telerik;
using System.Reflection;
namespace ModpackUpdater;
public class AppSymbolFactory : SymbolFactory<AppSymbols>
{
public static AppSymbolFactory Instance { get; } = new();
public override Assembly GetSvgImageResourceAssembly()
{
return Assembly.GetExecutingAssembly();
}
public override string GetSvgImageRessourcePath(AppSymbols svgImage)
{
return $"{GetType().Namespace}.Symbols.{svgImage}.svg";
}
}

View File

@@ -0,0 +1,20 @@
namespace ModpackUpdater;
public enum AppSymbols
{
checkmark,
close,
delete,
done,
download_from_ftp,
general_warning_sign,
opened_folder,
paste,
refresh,
reload,
save,
services,
software_installer,
update_done,
wrench,
}

View File

@@ -48,6 +48,7 @@ namespace ModpackUpdater
RadButton_SearchModpackConfig = new Telerik.WinControls.UI.RadButton(); RadButton_SearchModpackConfig = new Telerik.WinControls.UI.RadButton();
RadButton_SearchMinecraftProfileFolder = new Telerik.WinControls.UI.RadButton(); RadButton_SearchMinecraftProfileFolder = new Telerik.WinControls.UI.RadButton();
tableLayoutPanel1 = new TableLayoutPanel(); tableLayoutPanel1 = new TableLayoutPanel();
radButton_RefreshConfig = new Telerik.WinControls.UI.RadButton();
((System.ComponentModel.ISupportInitialize)RadLabel1).BeginInit(); ((System.ComponentModel.ISupportInitialize)RadLabel1).BeginInit();
((System.ComponentModel.ISupportInitialize)RadLabel2).BeginInit(); ((System.ComponentModel.ISupportInitialize)RadLabel2).BeginInit();
((System.ComponentModel.ISupportInitialize)RadLabel3).BeginInit(); ((System.ComponentModel.ISupportInitialize)RadLabel3).BeginInit();
@@ -61,6 +62,7 @@ namespace ModpackUpdater
((System.ComponentModel.ISupportInitialize)RadButton_SearchModpackConfig).BeginInit(); ((System.ComponentModel.ISupportInitialize)RadButton_SearchModpackConfig).BeginInit();
((System.ComponentModel.ISupportInitialize)RadButton_SearchMinecraftProfileFolder).BeginInit(); ((System.ComponentModel.ISupportInitialize)RadButton_SearchMinecraftProfileFolder).BeginInit();
tableLayoutPanel1.SuspendLayout(); tableLayoutPanel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)radButton_RefreshConfig).BeginInit();
((System.ComponentModel.ISupportInitialize)this).BeginInit(); ((System.ComponentModel.ISupportInitialize)this).BeginInit();
SuspendLayout(); SuspendLayout();
// //
@@ -132,7 +134,6 @@ namespace ModpackUpdater
// //
RadButton_Install.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; RadButton_Install.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
tableLayoutPanel1.SetColumnSpan(RadButton_Install, 2); tableLayoutPanel1.SetColumnSpan(RadButton_Install, 2);
RadButton_Install.Image = My.Resources.MySymbols.icons8_software_installer_16px;
RadButton_Install.ImageAlignment = ContentAlignment.MiddleRight; RadButton_Install.ImageAlignment = ContentAlignment.MiddleRight;
RadButton_Install.Location = new Point(325, 147); RadButton_Install.Location = new Point(325, 147);
RadButton_Install.Name = "RadButton_Install"; RadButton_Install.Name = "RadButton_Install";
@@ -147,7 +148,6 @@ namespace ModpackUpdater
// //
RadButton_CheckForUpdates.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; RadButton_CheckForUpdates.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
tableLayoutPanel1.SetColumnSpan(RadButton_CheckForUpdates, 3); tableLayoutPanel1.SetColumnSpan(RadButton_CheckForUpdates, 3);
RadButton_CheckForUpdates.Image = My.Resources.MySymbols.icons8_update_16px;
RadButton_CheckForUpdates.ImageAlignment = ContentAlignment.MiddleRight; RadButton_CheckForUpdates.ImageAlignment = ContentAlignment.MiddleRight;
RadButton_CheckForUpdates.Location = new Point(175, 147); RadButton_CheckForUpdates.Location = new Point(175, 147);
RadButton_CheckForUpdates.Name = "RadButton_CheckForUpdates"; RadButton_CheckForUpdates.Name = "RadButton_CheckForUpdates";
@@ -161,7 +161,6 @@ namespace ModpackUpdater
// RadButton_EditModpackConfig // RadButton_EditModpackConfig
// //
RadButton_EditModpackConfig.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; RadButton_EditModpackConfig.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
RadButton_EditModpackConfig.Image = My.Resources.MySymbols.icons8_wrench_16px;
RadButton_EditModpackConfig.ImageAlignment = ContentAlignment.MiddleRight; RadButton_EditModpackConfig.ImageAlignment = ContentAlignment.MiddleRight;
RadButton_EditModpackConfig.Location = new Point(3, 147); RadButton_EditModpackConfig.Location = new Point(3, 147);
RadButton_EditModpackConfig.Name = "RadButton_EditModpackConfig"; RadButton_EditModpackConfig.Name = "RadButton_EditModpackConfig";
@@ -176,7 +175,6 @@ namespace ModpackUpdater
// //
RadButton_PasteModpackConfig.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; RadButton_PasteModpackConfig.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
tableLayoutPanel1.SetColumnSpan(RadButton_PasteModpackConfig, 2); tableLayoutPanel1.SetColumnSpan(RadButton_PasteModpackConfig, 2);
RadButton_PasteModpackConfig.Image = (Image)resources.GetObject("RadButton_PasteModpackConfig.Image");
RadButton_PasteModpackConfig.ImageAlignment = ContentAlignment.MiddleRight; RadButton_PasteModpackConfig.ImageAlignment = ContentAlignment.MiddleRight;
RadButton_PasteModpackConfig.Location = new Point(225, 89); RadButton_PasteModpackConfig.Location = new Point(225, 89);
RadButton_PasteModpackConfig.Name = "RadButton_PasteModpackConfig"; RadButton_PasteModpackConfig.Name = "RadButton_PasteModpackConfig";
@@ -191,7 +189,6 @@ namespace ModpackUpdater
// //
RadButton_SearchModpackConfig.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; RadButton_SearchModpackConfig.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
tableLayoutPanel1.SetColumnSpan(RadButton_SearchModpackConfig, 2); tableLayoutPanel1.SetColumnSpan(RadButton_SearchModpackConfig, 2);
RadButton_SearchModpackConfig.Image = (Image)resources.GetObject("RadButton_SearchModpackConfig.Image");
RadButton_SearchModpackConfig.ImageAlignment = ContentAlignment.MiddleRight; RadButton_SearchModpackConfig.ImageAlignment = ContentAlignment.MiddleRight;
RadButton_SearchModpackConfig.Location = new Point(325, 89); RadButton_SearchModpackConfig.Location = new Point(325, 89);
RadButton_SearchModpackConfig.Name = "RadButton_SearchModpackConfig"; RadButton_SearchModpackConfig.Name = "RadButton_SearchModpackConfig";
@@ -206,7 +203,6 @@ namespace ModpackUpdater
// //
RadButton_SearchMinecraftProfileFolder.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; RadButton_SearchMinecraftProfileFolder.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
tableLayoutPanel1.SetColumnSpan(RadButton_SearchMinecraftProfileFolder, 2); tableLayoutPanel1.SetColumnSpan(RadButton_SearchMinecraftProfileFolder, 2);
RadButton_SearchMinecraftProfileFolder.Image = (Image)resources.GetObject("RadButton_SearchMinecraftProfileFolder.Image");
RadButton_SearchMinecraftProfileFolder.ImageAlignment = ContentAlignment.MiddleRight; RadButton_SearchMinecraftProfileFolder.ImageAlignment = ContentAlignment.MiddleRight;
RadButton_SearchMinecraftProfileFolder.Location = new Point(325, 31); RadButton_SearchMinecraftProfileFolder.Location = new Point(325, 31);
RadButton_SearchMinecraftProfileFolder.Name = "RadButton_SearchMinecraftProfileFolder"; RadButton_SearchMinecraftProfileFolder.Name = "RadButton_SearchMinecraftProfileFolder";
@@ -239,6 +235,7 @@ namespace ModpackUpdater
tableLayoutPanel1.Controls.Add(RadButton_SearchModpackConfig, 5, 3); tableLayoutPanel1.Controls.Add(RadButton_SearchModpackConfig, 5, 3);
tableLayoutPanel1.Controls.Add(RadButton_PasteModpackConfig, 3, 3); tableLayoutPanel1.Controls.Add(RadButton_PasteModpackConfig, 3, 3);
tableLayoutPanel1.Controls.Add(RadButton_Install, 5, 5); tableLayoutPanel1.Controls.Add(RadButton_Install, 5, 5);
tableLayoutPanel1.Controls.Add(radButton_RefreshConfig, 2, 3);
tableLayoutPanel1.Dock = DockStyle.Fill; tableLayoutPanel1.Dock = DockStyle.Fill;
tableLayoutPanel1.Location = new Point(0, 0); tableLayoutPanel1.Location = new Point(0, 0);
tableLayoutPanel1.Name = "tableLayoutPanel1"; tableLayoutPanel1.Name = "tableLayoutPanel1";
@@ -252,6 +249,18 @@ namespace ModpackUpdater
tableLayoutPanel1.Size = new Size(422, 174); tableLayoutPanel1.Size = new Size(422, 174);
tableLayoutPanel1.TabIndex = 7; tableLayoutPanel1.TabIndex = 7;
// //
// radButton_RefreshConfig
//
radButton_RefreshConfig.Anchor = AnchorStyles.Top | AnchorStyles.Right;
radButton_RefreshConfig.DisplayStyle = Telerik.WinControls.DisplayStyle.Image;
radButton_RefreshConfig.ImageAlignment = ContentAlignment.MiddleCenter;
radButton_RefreshConfig.Location = new Point(195, 89);
radButton_RefreshConfig.Name = "radButton_RefreshConfig";
radButton_RefreshConfig.Size = new Size(24, 24);
radButton_RefreshConfig.TabIndex = 11;
radButton_RefreshConfig.Text = "Reload";
radButton_RefreshConfig.Click += RadButton_RefreshConfig_Click;
//
// Form1 // Form1
// //
AutoScaleBaseSize = new Size(7, 15); AutoScaleBaseSize = new Size(7, 15);
@@ -280,6 +289,7 @@ namespace ModpackUpdater
((System.ComponentModel.ISupportInitialize)RadButton_SearchModpackConfig).EndInit(); ((System.ComponentModel.ISupportInitialize)RadButton_SearchModpackConfig).EndInit();
((System.ComponentModel.ISupportInitialize)RadButton_SearchMinecraftProfileFolder).EndInit(); ((System.ComponentModel.ISupportInitialize)RadButton_SearchMinecraftProfileFolder).EndInit();
tableLayoutPanel1.ResumeLayout(false); tableLayoutPanel1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)radButton_RefreshConfig).EndInit();
((System.ComponentModel.ISupportInitialize)this).EndInit(); ((System.ComponentModel.ISupportInitialize)this).EndInit();
ResumeLayout(false); ResumeLayout(false);
} }
@@ -297,5 +307,6 @@ namespace ModpackUpdater
internal Telerik.WinControls.UI.RadButton RadButton_SearchMinecraftProfileFolder; internal Telerik.WinControls.UI.RadButton RadButton_SearchMinecraftProfileFolder;
internal Telerik.WinControls.UI.RadButton RadButton_PasteModpackConfig; internal Telerik.WinControls.UI.RadButton RadButton_PasteModpackConfig;
private TableLayoutPanel tableLayoutPanel1; private TableLayoutPanel tableLayoutPanel1;
private Telerik.WinControls.UI.RadButton radButton_RefreshConfig;
} }
} }

View File

@@ -1,6 +1,7 @@
using ModpackUpdater.Manager; using ModpackUpdater.Manager;
using ModpackUpdater.Model; using ModpackUpdater.Model;
using ModpackUpdater.My.Resources; using ModpackUpdater.My.Resources;
using Pilz.UI.Telerik;
using System.Diagnostics; using System.Diagnostics;
using Telerik.WinControls; using Telerik.WinControls;
using Telerik.WinControls.UI; using Telerik.WinControls.UI;
@@ -28,7 +29,16 @@ public partial class Form1
public Form1() public Form1()
{ {
InitializeComponent(); InitializeComponent();
Text = $"{Text} (v{Application.ProductVersion})"; Text = $"{Text} (v{Application.ProductVersion})";
RadButton_Install.SvgImage = AppSymbolFactory.Instance.GetSvgImage(AppSymbols.software_installer, SvgImageSize.Small);
RadButton_CheckForUpdates.SvgImage = AppSymbolFactory.Instance.GetSvgImage(AppSymbols.update_done, SvgImageSize.Small);
RadButton_EditModpackConfig.SvgImage = AppSymbolFactory.Instance.GetSvgImage(AppSymbols.wrench, SvgImageSize.Small);
radButton_RefreshConfig.SvgImage = AppSymbolFactory.Instance.GetSvgImage(AppSymbols.refresh, SvgImageSize.Small);
RadButton_SearchMinecraftProfileFolder.SvgImage = AppSymbolFactory.Instance.GetSvgImage(AppSymbols.opened_folder, SvgImageSize.Small);
RadButton_SearchModpackConfig.SvgImage = AppSymbolFactory.Instance.GetSvgImage(AppSymbols.opened_folder, SvgImageSize.Small);
RadButton_PasteModpackConfig.SvgImage = AppSymbolFactory.Instance.GetSvgImage(AppSymbols.paste, SvgImageSize.Small);
} }
private bool IsMinecaftProfileLoaded() private bool IsMinecaftProfileLoaded()
@@ -57,12 +67,12 @@ public partial class Form1
if (!IsMinecaftProfileLoaded() || !MinecraftProfileChecker.CheckProfile(GetMinecraftProfilePath())) if (!IsMinecaftProfileLoaded() || !MinecraftProfileChecker.CheckProfile(GetMinecraftProfilePath()))
{ {
SetStatus(LangRes.StatusText_MinecraftProfileWarning, MySymbols.icons8_general_warning_sign_16px); SetStatus(LangRes.StatusText_MinecraftProfileWarning, AppSymbolFactory.Instance.GetSvgImage(AppSymbols.general_warning_sign, SvgImageSize.Small));
CheckStatusRet = false; CheckStatusRet = false;
} }
else if (!IsUpdateConfigLoaded()) else if (!IsUpdateConfigLoaded())
{ {
SetStatus(LangRes.StatusText_MinecraftProfileWarning, MySymbols.icons8_general_warning_sign_16px); SetStatus(LangRes.StatusText_MinecraftProfileWarning, AppSymbolFactory.Instance.GetSvgImage(AppSymbols.general_warning_sign, SvgImageSize.Small));
CheckStatusRet = false; CheckStatusRet = false;
} }
else else
@@ -71,16 +81,16 @@ public partial class Form1
return CheckStatusRet; return CheckStatusRet;
} }
private void SetStatus(string statusText, Image image) private void SetStatus(string statusText, RadSvgImage image)
{ {
RadLabel_Status.Text = statusText; RadLabel_Status.Text = statusText;
RadLabel_Status.Image = image; RadLabel_Status.SvgImage = image;
} }
private void ClearStatus() private void ClearStatus()
{ {
RadLabel_Status.Text = "-"; RadLabel_Status.Text = "-";
RadLabel_Status.Image = null; RadLabel_Status.SvgImage = null;
} }
private void LoadMinecraftProfile(string folderPath) private void LoadMinecraftProfile(string folderPath)
@@ -107,7 +117,9 @@ public partial class Form1
RadTextBoxControl_ModpackConfig.Text = string.Empty; RadTextBoxControl_ModpackConfig.Text = string.Empty;
} }
if (IsMinecaftProfileLoaded()) if (updateConfig != null && updateConfig.Maintenance && !updateOptions.IgnoreMaintenance)
SetStatus(LangRes.StatusText_Maintenance, AppSymbolFactory.Instance.GetSvgImage(AppSymbols.services, SvgImageSize.Small));
else if (IsMinecaftProfileLoaded())
RadButton_CheckForUpdates.PerformClick(); RadButton_CheckForUpdates.PerformClick();
else else
ClearStatus(); ClearStatus();
@@ -122,7 +134,7 @@ public partial class Form1
// Check only if not pressed "install", not really needed otherwise. // Check only if not pressed "install", not really needed otherwise.
if (lastUpdateCheckResult is null || !doInstall) if (lastUpdateCheckResult is null || !doInstall)
{ {
SetStatus(LangRes.StatusText_CheckingForUpdates, MySymbols.icons8_update_16px); SetStatus(LangRes.StatusText_CheckingForUpdates, AppSymbolFactory.Instance.GetSvgImage(AppSymbols.update_done, SvgImageSize.Small));
try try
{ {
@@ -130,7 +142,7 @@ public partial class Form1
} }
catch catch
{ {
SetStatus(LangRes.StatusText_ErrorWhileUpdateCheckOrUpdate, MySymbols.icons8_delete_16px); SetStatus(LangRes.StatusText_ErrorWhileUpdateCheckOrUpdate, AppSymbolFactory.Instance.GetSvgImage(AppSymbols.close, SvgImageSize.Small));
} }
finally finally
{ {
@@ -138,12 +150,12 @@ public partial class Form1
} }
if (lastUpdateCheckResult is null || lastUpdateCheckResult.HasError) if (lastUpdateCheckResult is null || lastUpdateCheckResult.HasError)
SetStatus(LangRes.StatusText_ErrorWhileUpdateCheckOrUpdate, MySymbols.icons8_delete_16px); SetStatus(LangRes.StatusText_ErrorWhileUpdateCheckOrUpdate, AppSymbolFactory.Instance.GetSvgImage(AppSymbols.close, SvgImageSize.Small));
else if (lastUpdateCheckResult.HasUpdates) else if (lastUpdateCheckResult.HasUpdates)
{ {
if (doInstall) if (doInstall)
{ {
SetStatus(LangRes.StatusText_Installing, MySymbols.icons8_software_installer_16px); SetStatus(LangRes.StatusText_Installing, AppSymbolFactory.Instance.GetSvgImage(AppSymbols.software_installer, SvgImageSize.Small));
currentUpdating = true; currentUpdating = true;
try try
@@ -151,14 +163,14 @@ public partial class Form1
if (await updater.Install(lastUpdateCheckResult) == true) if (await updater.Install(lastUpdateCheckResult) == true)
{ {
lastUpdateCheckResult = null; // Reset last update check, a new one would be needed now. lastUpdateCheckResult = null; // Reset last update check, a new one would be needed now.
SetStatus(LangRes.StatusTest_EverythingOk, MySymbols.icons8_checkmark_16px); SetStatus(LangRes.StatusTest_EverythingOk, AppSymbolFactory.Instance.GetSvgImage(AppSymbols.done, SvgImageSize.Small));
} }
else else
SetStatus(LangRes.StatusText_ErrorWhileUpdateCheckOrUpdate, MySymbols.icons8_delete_16px); SetStatus(LangRes.StatusText_ErrorWhileUpdateCheckOrUpdate, AppSymbolFactory.Instance.GetSvgImage(AppSymbols.close, SvgImageSize.Small));
} }
catch(Exception) catch (Exception)
{ {
SetStatus(LangRes.StatusText_ErrorWhileUpdateCheckOrUpdate, MySymbols.icons8_delete_16px); SetStatus(LangRes.StatusText_ErrorWhileUpdateCheckOrUpdate, AppSymbolFactory.Instance.GetSvgImage(AppSymbols.close, SvgImageSize.Small));
if (Debugger.IsAttached) if (Debugger.IsAttached)
throw; throw;
} }
@@ -168,21 +180,21 @@ public partial class Form1
} }
} }
else else
SetStatus(LangRes.StatusText_UpdateAvailable, MySymbols.icons8_software_installer_16px); SetStatus(LangRes.StatusText_UpdateAvailable, AppSymbolFactory.Instance.GetSvgImage(AppSymbols.software_installer, SvgImageSize.Small));
} }
else else
SetStatus(LangRes.StatusTest_EverythingOk, MySymbols.icons8_checkmark_16px); SetStatus(LangRes.StatusTest_EverythingOk, AppSymbolFactory.Instance.GetSvgImage(AppSymbols.done, SvgImageSize.Small));
} }
private void Update_InstallProgessUpdated(UpdateCheckResult result, int processedSyncs) private void Update_InstallProgessUpdated(UpdateCheckResult result, int processedSyncs)
{ {
int actionCount = result.Actions.Count; int actionCount = result.Actions.Count;
SetStatus(Math.Round(processedSyncs / (double)actionCount * 100d, 1) + "%", MySymbols.icons8_software_installer_16px); SetStatus(Math.Round(processedSyncs / (double)actionCount * 100d, 1) + "%", AppSymbolFactory.Instance.GetSvgImage(AppSymbols.software_installer, SvgImageSize.Small));
} }
private void Updated_CheckingProgresssUpdated(int toCheck, int processed) private void Updated_CheckingProgresssUpdated(int toCheck, int processed)
{ {
SetStatus(Math.Round(processed / (double)toCheck * 100d, 1) + "%", MySymbols.icons8_update_16px); SetStatus(Math.Round(processed / (double)toCheck * 100d, 1) + "%", AppSymbolFactory.Instance.GetSvgImage(AppSymbols.update_done, SvgImageSize.Small));
} }
private void ButtonX_SearchMinecraftProfile_Click(object sender, EventArgs e) private void ButtonX_SearchMinecraftProfile_Click(object sender, EventArgs e)
@@ -208,6 +220,11 @@ public partial class Form1
LoadUpdateConfigFile(text); LoadUpdateConfigFile(text);
} }
private void RadButton_RefreshConfig_Click(object sender, EventArgs e)
{
LoadUpdateConfigFile(RadTextBoxControl_ModpackConfig.Text);
}
private async void ButtonX_CheckForUpdates_Click(object sender, EventArgs e) private async void ButtonX_CheckForUpdates_Click(object sender, EventArgs e)
{ {
ClearStatus(); ClearStatus();
@@ -244,7 +261,7 @@ public partial class Form1
var updater = new AppUpdater(); var updater = new AppUpdater();
if (!updateOptions.NoUpdate && await updater.Check() && RadMessageBox.Show(LangRes.MsgBox_UpdateAvailable, LangRes.MsgBox_UpdateAvailable_Title, MessageBoxButtons.YesNo, RadMessageIcon.Info) == DialogResult.Yes) if (!updateOptions.NoUpdate && await updater.Check() && RadMessageBox.Show(LangRes.MsgBox_UpdateAvailable, LangRes.MsgBox_UpdateAvailable_Title, MessageBoxButtons.YesNo, RadMessageIcon.Info) == DialogResult.Yes)
{ {
SetStatus(LangRes.StatusText_InstallingAppUpdate, MySymbols.icons8_software_installer_16px); SetStatus(LangRes.StatusText_InstallingAppUpdate, AppSymbolFactory.Instance.GetSvgImage(AppSymbols.software_installer, SvgImageSize.Small));
Enabled = false; Enabled = false;
await updater.Install(); await updater.Install();
Application.Restart(); Application.Restart();

View File

@@ -118,34 +118,6 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="RadButton_SearchMinecraftProfileFolder.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAMhJREFUOE9j
GBzg/34Glv8LGNz+z2cIheNFDNxQacIAqLkZiP+j4PkMB4g25P9ChlUYBuDGP4F4DlQrBJBoAAj/gWqF
ALgBi5j+/z+o8P//SY3//08RxHf/n9GWQzVgNTc2hXiwZjiqAZuFsSjCg09rGaIasFsKu0Ls+Pf/2yrs
qAYcVsSmEBe+CtYMAmADFjICBdXRFeHB6iug2oEGLGBo+b+CA4sifFgzC6odaAAoKa/lDPy/S6KMKLxf
Kvz/fwZGqPYBBQwMAFjinO6ZYVu0AAAAAElFTkSuQmCC
</value>
</data>
<data name="RadButton_SearchModpackConfig.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAMhJREFUOE9j
GBzg/34Glv8LGNz+z2cIheNFDNxQacIAqLkZiP+j4PkMB4g25P9ChlUYBuDGP4F4DlQrBJBoAAj/gWqF
ALgBi5j+/z+o8P//SY3//08RxHf/n9GWQzVgNTc2hXiwZjiqAZuFsSjCg09rGaIasFsKu0Ls+Pf/2yrs
qAYcVsSmEBe+CtYMAmADFjICBdXRFeHB6iug2oEGLGBo+b+CA4sifFgzC6odaAAoKa/lDPy/S6KMKLxf
Kvz/fwZGqPYBBQwMAFjinO6ZYVu0AAAAAElFTkSuQmCC
</value>
</data>
<data name="RadButton_PasteModpackConfig.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAO9JREFUOE9j
wAUmLFujB8JQLmlg0uJ1+hOWrFsFwn1LNuhChfED16iUeUD8E6jpPwj3Llrzsm/hmlcwPkgOiOdAlWMC
oOTfHz9//Z+7bjtYAzKeu37Hf5AcUM0fqHJMAJT8TwiA1ECVYwJkAz7//Pf/1tu/GDiuftr/CSd/hoIw
VBsCIBsAUjzh1E+8GKoNAWhigMOk+xg4eukL4g3IWPcGBcNsp58BFHsBXTPMdqwGuESlfNp9+Nj/gydO
/9944haKYmwYqg0BXCJTg12jU1a6RqWuSutaegybJmQM1YYdTDrxy2LiyZ+r8WGISgYGAOT2/8PrpxzK
AAAAAElFTkSuQmCC
</value>
</data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>
AAABAAYAEBAAAAEAIABoBAAAZgAAACAgAAABACAAqBAAAM4EAAAwMAAAAQAgAKglAAB2FQAAQEAAAAEA AAABAAYAEBAAAAEAIABoBAAAZgAAACAgAAABACAAqBAAAM4EAAAwMAAAAQAgAKglAAB2FQAAQEAAAAEA

View File

@@ -1,52 +1,45 @@
// ------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// Dieser Code wurde von einem Tool generiert. // Dieser Code wurde von einem Tool generiert.
// Laufzeitversion:4.0.30319.42000 // Laufzeitversion:4.0.30319.42000
// //
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn // Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
// der Code erneut generiert wird. // der Code erneut generiert wird.
// </auto-generated> // </auto-generated>
// ------------------------------------------------------------------------------ //------------------------------------------------------------------------------
namespace ModpackUpdater.My.Resources {
using System;
using System.Diagnostics; /// <summary>
/// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
namespace ModpackUpdater.My.Resources /// </summary>
{
// Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
// -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert. // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
// Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
// mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu. // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
/// <summary> [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
/// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
/// </summary> [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[System.CodeDom.Compiler.GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] internal class LangRes {
[DebuggerNonUserCode()]
[System.Runtime.CompilerServices.CompilerGenerated()]
internal class LangRes
{
private static System.Resources.ResourceManager resourceMan; private static global::System.Resources.ResourceManager resourceMan;
private static System.Globalization.CultureInfo resourceCulture; private static global::System.Globalization.CultureInfo resourceCulture;
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal LangRes() : base() internal LangRes() {
{
} }
/// <summary> /// <summary>
/// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
/// </summary> /// </summary>
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Advanced)] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static System.Resources.ResourceManager ResourceManager internal static global::System.Resources.ResourceManager ResourceManager {
{ get {
get if (object.ReferenceEquals(resourceMan, null)) {
{ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ModpackUpdater.LangRes", typeof(LangRes).Assembly);
if (ReferenceEquals(resourceMan, null))
{
var temp = new System.Resources.ResourceManager("ModpackUpdater.LangRes", typeof(LangRes).Assembly);
resourceMan = temp; resourceMan = temp;
} }
return resourceMan; return resourceMan;
@@ -54,128 +47,114 @@ namespace ModpackUpdater.My.Resources
} }
/// <summary> /// <summary>
/// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
/// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. /// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
/// </summary> /// </summary>
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Advanced)] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static System.Globalization.CultureInfo Culture internal static global::System.Globalization.CultureInfo Culture {
{ get {
get
{
return resourceCulture; return resourceCulture;
} }
set set {
{
resourceCulture = value; resourceCulture = value;
} }
} }
/// <summary> /// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die A new version of this program is available. If you confirm, the update will be installed automatically. It takes just a few seconds. Continue? ähnelt. /// Sucht eine lokalisierte Zeichenfolge, die A new version of this program is available. If you confirm, the update will be installed automatically. It takes just a few seconds. Continue? ähnelt.
/// </summary> /// </summary>
internal static string MsgBox_UpdateAvailable internal static string MsgBox_UpdateAvailable {
{ get {
get
{
return ResourceManager.GetString("MsgBox_UpdateAvailable", resourceCulture); return ResourceManager.GetString("MsgBox_UpdateAvailable", resourceCulture);
} }
} }
/// <summary> /// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die New program version available ähnelt. /// Sucht eine lokalisierte Zeichenfolge, die New program version available ähnelt.
/// </summary> /// </summary>
internal static string MsgBox_UpdateAvailable_Title internal static string MsgBox_UpdateAvailable_Title {
{ get {
get
{
return ResourceManager.GetString("MsgBox_UpdateAvailable_Title", resourceCulture); return ResourceManager.GetString("MsgBox_UpdateAvailable_Title", resourceCulture);
} }
} }
/// <summary> /// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die Everything is right and up-to-date. ähnelt. /// Sucht eine lokalisierte Zeichenfolge, die Everything is right and up-to-date. ähnelt.
/// </summary> /// </summary>
internal static string StatusTest_EverythingOk internal static string StatusTest_EverythingOk {
{ get {
get
{
return ResourceManager.GetString("StatusTest_EverythingOk", resourceCulture); return ResourceManager.GetString("StatusTest_EverythingOk", resourceCulture);
} }
} }
/// <summary> /// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die Checking for Updates... ähnelt. /// Sucht eine lokalisierte Zeichenfolge, die Checking for Updates... ähnelt.
/// </summary> /// </summary>
internal static string StatusText_CheckingForUpdates internal static string StatusText_CheckingForUpdates {
{ get {
get
{
return ResourceManager.GetString("StatusText_CheckingForUpdates", resourceCulture); return ResourceManager.GetString("StatusText_CheckingForUpdates", resourceCulture);
} }
} }
/// <summary> /// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die Config incomplete or not loaded! ähnelt. /// Sucht eine lokalisierte Zeichenfolge, die Config incomplete or not loaded! ähnelt.
/// </summary> /// </summary>
internal static string StatusText_ConfigIncompleteOrNotLoaded internal static string StatusText_ConfigIncompleteOrNotLoaded {
{ get {
get
{
return ResourceManager.GetString("StatusText_ConfigIncompleteOrNotLoaded", resourceCulture); return ResourceManager.GetString("StatusText_ConfigIncompleteOrNotLoaded", resourceCulture);
} }
} }
/// <summary> /// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die Error on update check or while updating! ähnelt. /// Sucht eine lokalisierte Zeichenfolge, die Error on update check or while updating! ähnelt.
/// </summary> /// </summary>
internal static string StatusText_ErrorWhileUpdateCheckOrUpdate internal static string StatusText_ErrorWhileUpdateCheckOrUpdate {
{ get {
get
{
return ResourceManager.GetString("StatusText_ErrorWhileUpdateCheckOrUpdate", resourceCulture); return ResourceManager.GetString("StatusText_ErrorWhileUpdateCheckOrUpdate", resourceCulture);
} }
} }
/// <summary> /// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die Installing... ähnelt. /// Sucht eine lokalisierte Zeichenfolge, die Installing... ähnelt.
/// </summary> /// </summary>
internal static string StatusText_Installing internal static string StatusText_Installing {
{ get {
get
{
return ResourceManager.GetString("StatusText_Installing", resourceCulture); return ResourceManager.GetString("StatusText_Installing", resourceCulture);
} }
} }
/// <summary> /// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die Downloading program update... ähnelt. /// Sucht eine lokalisierte Zeichenfolge, die Downloading program update... ähnelt.
/// </summary> /// </summary>
internal static string StatusText_InstallingAppUpdate internal static string StatusText_InstallingAppUpdate {
{ get {
get
{
return ResourceManager.GetString("StatusText_InstallingAppUpdate", resourceCulture); return ResourceManager.GetString("StatusText_InstallingAppUpdate", resourceCulture);
} }
} }
/// <summary> /// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die Minecraft profile folder seems to be not valid. ähnelt. /// Sucht eine lokalisierte Zeichenfolge, die The update server is currently in maintenance mode. ähnelt.
/// </summary> /// </summary>
internal static string StatusText_MinecraftProfileWarning internal static string StatusText_Maintenance {
{ get {
get return ResourceManager.GetString("StatusText_Maintenance", resourceCulture);
{ }
}
/// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die Minecraft profile folder seems to be not valid. ähnelt.
/// </summary>
internal static string StatusText_MinecraftProfileWarning {
get {
return ResourceManager.GetString("StatusText_MinecraftProfileWarning", resourceCulture); return ResourceManager.GetString("StatusText_MinecraftProfileWarning", resourceCulture);
} }
} }
/// <summary> /// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die An update is available! ähnelt. /// Sucht eine lokalisierte Zeichenfolge, die An update is available! ähnelt.
/// </summary> /// </summary>
internal static string StatusText_UpdateAvailable internal static string StatusText_UpdateAvailable {
{ get {
get
{
return ResourceManager.GetString("StatusText_UpdateAvailable", resourceCulture); return ResourceManager.GetString("StatusText_UpdateAvailable", resourceCulture);
} }
} }

View File

@@ -141,6 +141,9 @@
<data name="StatusText_InstallingAppUpdate" xml:space="preserve"> <data name="StatusText_InstallingAppUpdate" xml:space="preserve">
<value>Downloading program update...</value> <value>Downloading program update...</value>
</data> </data>
<data name="StatusText_Maintenance" xml:space="preserve">
<value>The update server is currently in maintenance mode.</value>
</data>
<data name="StatusText_MinecraftProfileWarning" xml:space="preserve"> <data name="StatusText_MinecraftProfileWarning" xml:space="preserve">
<value>Minecraft profile folder seems to be not valid.</value> <value>Minecraft profile folder seems to be not valid.</value>
</data> </data>

View File

@@ -30,11 +30,6 @@
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DependentUpon>LangRes.resx</DependentUpon> <DependentUpon>LangRes.resx</DependentUpon>
</Compile> </Compile>
<Compile Update="MySymbols.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>MySymbols.resx</DependentUpon>
</Compile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@@ -48,11 +43,6 @@
<CustomToolNamespace>ModpackUpdater.My.Resources</CustomToolNamespace> <CustomToolNamespace>ModpackUpdater.My.Resources</CustomToolNamespace>
<LastGenOutput>LangRes.Designer.cs</LastGenOutput> <LastGenOutput>LangRes.Designer.cs</LastGenOutput>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Update="MySymbols.resx">
<Generator>ResXFileCodeGenerator</Generator>
<CustomToolNamespace>ModpackUpdater.My.Resources</CustomToolNamespace>
<LastGenOutput>MySymbols.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@@ -61,6 +51,7 @@
<PackageReference Include="Pilz.Configuration" Version="3.1.2" /> <PackageReference Include="Pilz.Configuration" Version="3.1.2" />
<PackageReference Include="Pilz.Cryptography" Version="2.0.1" /> <PackageReference Include="Pilz.Cryptography" Version="2.0.1" />
<PackageReference Include="Pilz.IO" Version="2.0.0" /> <PackageReference Include="Pilz.IO" Version="2.0.0" />
<PackageReference Include="Pilz.UI.Telerik.SymbolFactory" Version="2.0.3" />
<PackageReference Include="Pilz.Win32" Version="2.0.0" /> <PackageReference Include="Pilz.Win32" Version="2.0.0" />
<PackageReference Include="UI.for.WinForms.Common" Version="2024.2.514" /> <PackageReference Include="UI.for.WinForms.Common" Version="2024.2.514" />
</ItemGroup> </ItemGroup>
@@ -70,4 +61,8 @@
<ProjectReference Include="..\ModpackUpdater.Model\ModpackUpdater.Model.csproj" /> <ProjectReference Include="..\ModpackUpdater.Model\ModpackUpdater.Model.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Symbols\*.svg" />
</ItemGroup>
</Project> </Project>

View File

@@ -1,182 +0,0 @@
// ------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
// Laufzeitversion:4.0.30319.42000
//
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
// der Code erneut generiert wird.
// </auto-generated>
// ------------------------------------------------------------------------------
using System.Diagnostics;
using System.Drawing;
namespace ModpackUpdater.My.Resources
{
// Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
// -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
// Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
// mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
/// <summary>
/// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
/// </summary>
[System.CodeDom.Compiler.GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[DebuggerNonUserCode()]
[System.Runtime.CompilerServices.CompilerGenerated()]
internal class MySymbols
{
private static System.Resources.ResourceManager resourceMan;
private static System.Globalization.CultureInfo resourceCulture;
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal MySymbols() : base()
{
}
/// <summary>
/// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
/// </summary>
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Advanced)]
internal static System.Resources.ResourceManager ResourceManager
{
get
{
if (ReferenceEquals(resourceMan, null))
{
var temp = new System.Resources.ResourceManager("ModpackUpdater.MySymbols", typeof(MySymbols).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
/// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
/// </summary>
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Advanced)]
internal static System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// </summary>
internal static Bitmap icons8_checkmark_16px
{
get
{
var obj = ResourceManager.GetObject("icons8_checkmark_16px", resourceCulture);
return (Bitmap)obj;
}
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// </summary>
internal static Bitmap icons8_delete_16px
{
get
{
var obj = ResourceManager.GetObject("icons8_delete_16px", resourceCulture);
return (Bitmap)obj;
}
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// </summary>
internal static Bitmap icons8_download_from_ftp_16px
{
get
{
var obj = ResourceManager.GetObject("icons8_download_from_ftp_16px", resourceCulture);
return (Bitmap)obj;
}
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// </summary>
internal static Bitmap icons8_general_warning_sign_16px
{
get
{
var obj = ResourceManager.GetObject("icons8_general_warning_sign_16px", resourceCulture);
return (Bitmap)obj;
}
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// </summary>
internal static Bitmap icons8_opened_folder_16px
{
get
{
var obj = ResourceManager.GetObject("icons8_opened_folder_16px", resourceCulture);
return (Bitmap)obj;
}
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// </summary>
internal static Bitmap icons8_save_16px
{
get
{
var obj = ResourceManager.GetObject("icons8_save_16px", resourceCulture);
return (Bitmap)obj;
}
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// </summary>
internal static Bitmap icons8_software_installer_16px
{
get
{
var obj = ResourceManager.GetObject("icons8_software_installer_16px", resourceCulture);
return (Bitmap)obj;
}
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// </summary>
internal static Bitmap icons8_update_16px
{
get
{
var obj = ResourceManager.GetObject("icons8_update_16px", resourceCulture);
return (Bitmap)obj;
}
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// </summary>
internal static Bitmap icons8_wrench_16px
{
get
{
var obj = ResourceManager.GetObject("icons8_wrench_16px", resourceCulture);
return (Bitmap)obj;
}
}
}
}

View File

@@ -1,148 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="icons8_checkmark_16px" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\icons8_checkmark_16px.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8_delete_16px" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\icons8_delete_16px.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8_download_from_ftp_16px" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\icons8_download_from_ftp_16px.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8_general_warning_sign_16px" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\icons8_general_warning_sign_16px.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8_opened_folder_16px" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\icons8_opened_folder_16px.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8_save_16px" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\icons8_save_16px.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8_software_installer_16px" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\icons8_software_installer_16px.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8_update_16px" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\icons8_update_16px.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8_wrench_16px" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\icons8_wrench_16px.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 337 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 417 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 494 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 588 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 334 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 321 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 430 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 631 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 490 B

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="32" height="32">
<path fill="#c8e6c9" d="M44,24c0,11.045-8.955,20-20,20S4,35.045,4,24S12.955,4,24,4S44,12.955,44,24z" />
<path fill="#4caf50" d="M34.586,14.586l-13.57,13.586l-5.602-5.586l-2.828,2.828l8.434,8.414l16.395-16.414L34.586,14.586z" />
</svg>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 48 48">
<path fill="#F44336" d="M21.5 4.5H26.501V43.5H21.5z" transform="rotate(45.001 24 24)" />
<path fill="#F44336" d="M21.5 4.5H26.5V43.501H21.5z" transform="rotate(135.008 24 24)" />
</svg>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="32" height="32">
<path fill="#b39ddb" d="M30.6,44H17.4c-2,0-3.7-1.4-4-3.4L9,11h30l-4.5,29.6C34.2,42.6,32.5,44,30.6,44z" />
<path fill="#9575cd" d="M28 6L20 6 14 12 34 12z" />
<path fill="#7e57c2" d="M10,8h28c1.1,0,2,0.9,2,2v2H8v-2C8,8.9,8.9,8,10,8z" />
</svg>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="32" height="32">
<path fill="#43A047" d="M40.6 12.1L17 35.7 7.4 26.1 4.6 29 17 41.3 43.4 14.9z" />
</svg>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 48 48">
<path fill="#FFA000" d="M38,14H20l-4-4H6c-2.209,0-4,1.791-4,4v8h40v-4C42,15.791,40.209,14,38,14" />
<path fill="#FFCA28" d="M38,14H6c-2.209,0-4,1.791-4,4v20c0,2.209,1.791,4,4,4h32c2.209,0,4-1.791,4-4V18C42,15.791,40.209,14,38,14" />
<path fill="#1565C0" d="M22 46L15 38 29 38z" />
<path fill="#1565C0" d="M19 28H25V39.125H19z" />
<path fill="#4A148C" d="M46,7.5C46,8.328,45.329,9,44.5,9S43,8.328,43,7.5S43.671,6,44.5,6S46,6.672,46,7.5" />
<path fill="#9C27B0" d="M45.5,16c-5.238,0-9.5-4.262-9.5-9.5V6h-3v1h0.025C33.284,13.493,38.508,18.716,45,18.975V19h1v-3H45.5z" />
<path fill="#7B1FA2" d="M45.5,11C43.019,11,41,8.981,41,6.5V6h-3v1h0.025c0.248,3.736,3.238,6.727,6.975,6.975V14h1v-3H45.5z" />
<path fill="#BA68C8" d="M45.5,21C37.505,21,31,14.495,31,6.5V6h-3v1h0.025C28.289,16.25,35.751,23.711,45,23.975V24h1v-3H45.5z" />
</svg>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="32" height="32">
<path fill="#ffeb3b" d="M24,6c0.18,0,0.626,0.049,0.893,0.504l19.968,34.005c0.249,0.424,0.111,0.795,0.006,0.978C44.778,41.641,44.513,42,43.968,42H4.032c-0.546,0-0.81-0.359-0.898-0.514c-0.105-0.183-0.244-0.554,0.006-0.978L23.107,6.504C23.374,6.049,23.82,6,24,6" />
<circle cx="24" cy="37" r="2" fill="#455a64" />
<polygon fill="#455a64" points="25,32 23,32 22,17 22,16 26,16 26,17" />
<path fill="#607d8b" d="M24,7l0.03,0.01L43.968,41L4.002,41.015l19.966-34.01C23.971,7.004,23.983,7,24,7 M24,4c-1.017,0-2.034,0.497-2.617,1.491L1.415,39.496C0.241,41.494,1.697,44,4.032,44h39.936c2.335,0,3.791-2.506,2.617-4.504L26.617,5.491C26.034,4.497,25.017,4,24,4L24,4z" />
</svg>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="32" height="32">
<path fill="#FFA000" d="M38,12H22l-4-4H8c-2.2,0-4,1.8-4,4v24c0,2.2,1.8,4,4,4h31c1.7,0,3-1.3,3-3V16C42,13.8,40.2,12,38,12z" />
<path fill="#FFCA28" d="M42.2,18H15.3c-1.9,0-3.6,1.4-3.9,3.3L8,40h31.7c1.9,0,3.6-1.4,3.9-3.3l2.5-14C46.6,20.3,44.7,18,42.2,18z" />
</svg>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 48 48">
<path fill="#455A64" d="M32,6h-8c0,1.104-1,3-3,3s-3-1.896-3-3h-8c-2.209,0-4,1.791-4,4v30c0,2.209,1.791,4,4,4h22c2.209,0,4-1.791,4-4V10C36,7.791,34.209,6,32,6" />
<path fill="#FFF" d="M32,41H10c-0.552,0-1-0.448-1-1V10c0-0.552,0.448-1,1-1h22c0.552,0,1,0.448,1,1v30C33,40.552,32.552,41,32,41z" />
<path fill="#90A4AE" d="M23,6c0,1.105-0.895,2-2,2s-2-0.895-2-2h-7v4c0,1.105,0.895,2,2,2h14c1.105,0,2-0.895,2-2V6H23z" />
<path fill="#90A4AE" d="M21,2c-2.206,0-4,1.794-4,4s1.794,4,4,4s4-1.794,4-4S23.206,2,21,2 M21,8c-1.103,0-2-0.896-2-2s0.897-2,2-2s2,0.896,2,2S22.103,8,21,8" />
<path fill="#90CAF9" d="M17 17H42V47H17z" />
<g>
<path fill="#1976D2" d="M21 37H33V39H21zM21 33H38V35H21zM21 29H33V31H21zM21 25H38V27H21z" />
</g>
</svg>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="32" height="32">
<path fill="#1565c0" d="M13,13c0-3.3,2.7-6,6-6h10c3.3,0,6,2.7,6,6h4c0-5.5-4.5-10-10-10H19C13.5,3,9,7.5,9,13v11.2h4V13z" />
<path fill="#1565c0" d="M4.6,22l6.4,8.4l6.4-8.4H4.6z" />
<path fill="#1565c0" d="M35,35c0,3.3-2.7,6-6,6H19c-3.3,0-6-2.7-6-6H9c0,5.5,4.5,10,10,10h10c5.5,0,10-4.5,10-10V23h-4V35z" />
<path fill="#1565c0" d="M30.6,26l6.4-8.4l6.4,8.4H30.6z" />
</svg>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="32" height="32">
<path fill="#2196f3" d="M24 12L16 6 24 0z" />
<path fill="#2196f3" d="M24,44C13,44,4,35,4,24c0-4.7,1.7-9.3,4.8-12.9l3,2.6C9.3,16.5,8,20.2,8,24c0,8.8,7.2,16,16,16 s16-7.2,16-16S32.8,8,24,8h-3.2V4H24c11,0,20,9,20,20C44,35,35,44,24,44z" />
</svg>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="32" height="32">
<path fill="#3498db" d="M42 42L6 42 6 6 37 6 42 11z" />
<path fill="#fff" d="M39,39c0,0.553-0.447,1-1,1H10c-0.553,0-1-0.447-1-1V25c0-0.553,0.447-1,1-1h28c0.553,0,1,0.447,1,1 V39z" />
<path fill="#cfd8dc" d="M13 31H35V33H13zM13 27H35V29H13zM13 35H35V37H13z" />
<path fill="#2980b9" d="M9,6v10c0,1.104,0.896,2,2,2h15c1.104,0,2-0.896,2-2V6H9z" />
<path fill="#b0bec5" d="M15,6v10c0,1.104,0.896,2,2,2h15c1.104,0,2-0.896,2-2V6H15z" />
<path fill="#263238" d="M26 8H30V16H26z" />
</svg>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="32" height="32">
<path fill="#E65100" d="M25.6,34.4c0.1-0.4,0.1-0.9,0.1-1.4s0-0.9-0.1-1.4l2.8-2c0.3-0.2,0.4-0.6,0.2-0.9l-2.7-4.6c-0.2-0.3-0.5-0.4-0.8-0.3L22,25.3c-0.7-0.6-1.5-1-2.4-1.4l-0.3-3.4c0-0.3-0.3-0.6-0.6-0.6h-5.3c-0.3,0-0.6,0.3-0.6,0.6L12.4,24c-0.9,0.3-1.6,0.8-2.4,1.4l-3.1-1.4c-0.3-0.1-0.7,0-0.8,0.3l-2.7,4.6c-0.2,0.3-0.1,0.7,0.2,0.9l2.8,2c-0.1,0.4-0.1,0.9-0.1,1.4s0,0.9,0.1,1.4l-2.8,2c-0.3,0.2-0.4,0.6-0.2,0.9l2.7,4.6c0.2,0.3,0.5,0.4,0.8,0.3l3.1-1.4c0.7,0.6,1.5,1,2.4,1.4l0.3,3.4c0,0.3,0.3,0.6,0.6,0.6h5.3c0.3,0,0.6-0.3,0.6-0.6l0.3-3.4c0.9-0.3,1.6-0.8,2.4-1.4l3.1,1.4c0.3,0.1,0.7,0,0.8-0.3l2.7-4.6c0.2-0.3,0.1-0.7-0.2-0.9L25.6,34.4z M16,38c-2.8,0-5-2.2-5-5c0-2.8,2.2-5,5-5c2.8,0,5,2.2,5,5C21,35.8,18.8,38,16,38z" />
<path fill="#FFA000" d="M41.9,15.3C42,14.8,42,14.4,42,14s0-0.8-0.1-1.3l2.5-1.8c0.3-0.2,0.3-0.5,0.2-0.8l-2.5-4.3c-0.2-0.3-0.5-0.4-0.8-0.2l-2.9,1.3c-0.7-0.5-1.4-0.9-2.2-1.3l-0.3-3.1C36,2.2,35.8,2,35.5,2h-4.9c-0.3,0-0.6,0.2-0.6,0.5l-0.3,3.1c-0.8,0.3-1.5,0.7-2.2,1.3l-2.9-1.3c-0.3-0.1-0.6,0-0.8,0.2l-2.5,4.3c-0.2,0.3-0.1,0.6,0.2,0.8l2.5,1.8C24,13.2,24,13.6,24,14s0,0.8,0.1,1.3l-2.5,1.8c-0.3,0.2-0.3,0.5-0.2,0.8l2.5,4.3c0.2,0.3,0.5,0.4,0.8,0.2l2.9-1.3c0.7,0.5,1.4,0.9,2.2,1.3l0.3,3.1c0,0.3,0.3,0.5,0.6,0.5h4.9c0.3,0,0.6-0.2,0.6-0.5l0.3-3.1c0.8-0.3,1.5-0.7,2.2-1.3l2.9,1.3c0.3,0.1,0.6,0,0.8-0.2l2.5-4.3c0.2-0.3,0.1-0.6-0.2-0.8L41.9,15.3z M33,19c-2.8,0-5-2.2-5-5c0-2.8,2.2-5,5-5c2.8,0,5,2.2,5,5C38,16.8,35.8,19,33,19z" />
</svg>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 48 48">
<path fill="#78909C" d="M6,29v10c0,2.209,1.791,4,4,4h28c2.209,0,4-1.791,4-4V29H6z" />
<path fill="#455A64" d="M42,29c0,2.209-1.791,4-4,4H10c-2.209,0-4-1.791-4-4l3-18c0.219-2.094,1.791-4,4-4h22c2.209,0,3.688,1.75,4,4L42,29z" />
<path fill="#64DD17" d="M35 36A2 2 0 1 0 35 40A2 2 0 1 0 35 36Z" />
<path fill="#00E5FF" d="M24.001 27.242L32 19.242 16 19.242z" />
<path fill="#00E5FF" d="M21 4H26.998V19.999000000000002H21z" />
</svg>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="32" height="32">
<path fill="#fbc02d" d="M23.9,44C12.9,44,4,35,4,24S12.9,4,23.9,4c8.2,0,15.7,5.2,18.6,12.9l-3.7,1.4 C36.5,12.2,30.5,8,23.9,8C15.1,8,8,15.2,8,24s7.1,16,15.9,16c6.5,0,12.3-3.9,14.8-10l3.7,1.5C39.3,39.1,32.1,44,23.9,44z" />
<path fill="#fbc02d" d="M45,11l-3,10l-9-3.7L45,11z" />
<path fill="#43a047" d="M48,38c0,5.523-4.478,10-10,10c-5.523,0-10-4.477-10-10s4.477-10,10-10C43.522,28,48,32.477,48,38" />
<path fill="#dcedc8" d="M42.492 33.35L36.802 39.051 34.074 36.33 31.951 38.457 36.806 43.301 44.619 35.473z" />
</svg>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="32" height="32">
<path fill="#607d8b" d="M42.625,11l-7.016,7.016c0,0-2.172,0.172-3.984-1.641s-1.641-3.984-1.641-3.984L37,5.375 C37,5.375,35.75,5,33.952,5c-3.182,0-6.464,1.322-8.69,3.486C23.629,10.149,23,11.871,23,13.5c0,2.5,1.011,4.091,1,5.125 c-0.003,0.25-0.189,0.493-0.388,0.692l-9.056,9.056c-0.654-0.185-1.342-0.291-2.056-0.291c-4.142,0-7.5,3.339-7.5,7.459 S8.358,43,12.5,43s7.5-3.339,7.5-7.459c0-0.748-0.114-1.47-0.32-2.151l9.003-9.003c0.199-0.199,0.443-0.385,0.692-0.388 c1.034-0.011,2.625,1,5.125,1c1.628,0,3.351-0.629,5.014-2.263C41.678,20.512,43,17.23,43,14.048C43,12.25,42.625,11,42.625,11z M13.438,39l-3.5-0.938L9,34.562L11.562,32l3.5,0.938l0.938,3.5L13.438,39z" />
</svg>