diff --git a/Launcheroid.sln b/Launcheroid.sln
index 7c41a2e..79a8175 100644
--- a/Launcheroid.sln
+++ b/Launcheroid.sln
@@ -1,9 +1,9 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.29230.47
+# Visual Studio Version 17
+VisualStudioVersion = 17.8.34330.188
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Launcheroid", "Launcheroid\Launcheroid.csproj", "{042236E2-8C4A-4D85-9968-89AFC2D2271D}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Launcheroid4", "Launcheroid4\Launcheroid4.csproj", "{D3CC589E-9011-4645-84F9-B976C9931FE1}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -11,10 +11,10 @@
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {042236E2-8C4A-4D85-9968-89AFC2D2271D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {042236E2-8C4A-4D85-9968-89AFC2D2271D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {042236E2-8C4A-4D85-9968-89AFC2D2271D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {042236E2-8C4A-4D85-9968-89AFC2D2271D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D3CC589E-9011-4645-84F9-B976C9931FE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D3CC589E-9011-4645-84F9-B976C9931FE1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D3CC589E-9011-4645-84F9-B976C9931FE1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D3CC589E-9011-4645-84F9-B976C9931FE1}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/Launcheroid/App.config b/Launcheroid/App.config
deleted file mode 100644
index 4bfa005..0000000
--- a/Launcheroid/App.config
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/Launcheroid/AppIconLN.ico b/Launcheroid/AppIconLN.ico
deleted file mode 100644
index 3b09534..0000000
--- a/Launcheroid/AppIconLN.ico
+++ /dev/null
Binary files differ
diff --git a/Launcheroid/FImageLoad.Designer.cs b/Launcheroid/FImageLoad.Designer.cs
deleted file mode 100644
index 220b4a6..0000000
--- a/Launcheroid/FImageLoad.Designer.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-namespace Launcheroid
-{
- partial class FImageLoad
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.IContainer components = null;
-
- ///
- /// Clean up any resources being used.
- ///
- /// true if managed resources should be disposed; otherwise, false.
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- this.SuspendLayout();
- //
- // FImageLoad
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(454, 439);
- this.Name = "FImageLoad";
- this.Text = "FImageLoad";
- this.ResumeLayout(false);
-
- }
-
- #endregion
- }
-}
\ No newline at end of file
diff --git a/Launcheroid/FImageLoad.cs b/Launcheroid/FImageLoad.cs
deleted file mode 100644
index f34d62b..0000000
--- a/Launcheroid/FImageLoad.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Drawing.Imaging;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-
-namespace Launcheroid
-{
- public partial class FImageLoad : Form
- {
- private FImageLoad()
- {
- InitializeComponent();
- }
-
- public static bool IsImage(string path)
- {
- try
- {
- using (Image i = Image.FromFile(path))
- return true;
- }
- catch { };
- return false;
- }
-
- public static Image Open(string path)
- {
- try
- {
- return Image.FromFile(path);
- }
- catch
- {
- return null;
- }
- }
-
- public static Image Open()
- {
- string allim = "";
- string types = "";
- ImageCodecInfo[] decs = ImageCodecInfo.GetImageDecoders();
- foreach (ImageCodecInfo ici in decs)
- {
- types += "|" + ici.FormatDescription + " (" + ici.CodecName + ")" + "|" + ici.FilenameExtension;
- allim += ";" + ici.FilenameExtension;
- }
- types = "All images|" + allim.Substring(1) + types + "|All files|*.*";
- using (OpenFileDialog ofd = new OpenFileDialog())
- {
- ofd.Filter = types;
- if (ofd.ShowDialog() == DialogResult.OK)
- return Open(ofd.FileName);
- }
- return null;
- }
- }
-}
diff --git a/Launcheroid/FImageLoad.resx b/Launcheroid/FImageLoad.resx
deleted file mode 100644
index 1af7de1..0000000
--- a/Launcheroid/FImageLoad.resx
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
\ No newline at end of file
diff --git a/Launcheroid/FItem.Designer.cs b/Launcheroid/FItem.Designer.cs
deleted file mode 100644
index 744e009..0000000
--- a/Launcheroid/FItem.Designer.cs
+++ /dev/null
@@ -1,243 +0,0 @@
-namespace Launcheroid
-{
- partial class FItem
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.IContainer components = null;
-
- ///
- /// Clean up any resources being used.
- ///
- /// true if managed resources should be disposed; otherwise, false.
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- this.components = new System.ComponentModel.Container();
- this.lbName = new System.Windows.Forms.Label();
- this.tbName = new System.Windows.Forms.TextBox();
- this.tbPath = new System.Windows.Forms.TextBox();
- this.lbPath = new System.Windows.Forms.Label();
- this.tbDirectory = new System.Windows.Forms.TextBox();
- this.lbDir = new System.Windows.Forms.Label();
- this.tbArguments = new System.Windows.Forms.TextBox();
- this.lbArgs = new System.Windows.Forms.Label();
- this.btOk = new System.Windows.Forms.Button();
- this.btPathGet = new System.Windows.Forms.Button();
- this.btDirectoryGet = new System.Windows.Forms.Button();
- this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
- this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.pbIcon = new System.Windows.Forms.PictureBox();
- this.contextMenuStrip1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.pbIcon)).BeginInit();
- this.SuspendLayout();
- //
- // lbName
- //
- this.lbName.AutoSize = true;
- this.lbName.Location = new System.Drawing.Point(146, 15);
- this.lbName.Name = "lbName";
- this.lbName.Size = new System.Drawing.Size(38, 13);
- this.lbName.TabIndex = 1;
- this.lbName.Text = "Name:";
- //
- // tbName
- //
- this.tbName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.tbName.Location = new System.Drawing.Point(204, 12);
- this.tbName.Name = "tbName";
- this.tbName.Size = new System.Drawing.Size(268, 20);
- this.tbName.TabIndex = 2;
- this.tbName.TextChanged += new System.EventHandler(this.TbName_TextChanged);
- //
- // tbPath
- //
- this.tbPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.tbPath.Location = new System.Drawing.Point(204, 38);
- this.tbPath.Name = "tbPath";
- this.tbPath.Size = new System.Drawing.Size(238, 20);
- this.tbPath.TabIndex = 4;
- //
- // lbPath
- //
- this.lbPath.AutoSize = true;
- this.lbPath.Location = new System.Drawing.Point(146, 41);
- this.lbPath.Name = "lbPath";
- this.lbPath.Size = new System.Drawing.Size(32, 13);
- this.lbPath.TabIndex = 3;
- this.lbPath.Text = "Path:";
- //
- // tbDirectory
- //
- this.tbDirectory.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.tbDirectory.Location = new System.Drawing.Point(204, 64);
- this.tbDirectory.Name = "tbDirectory";
- this.tbDirectory.Size = new System.Drawing.Size(238, 20);
- this.tbDirectory.TabIndex = 6;
- //
- // lbDir
- //
- this.lbDir.AutoSize = true;
- this.lbDir.Location = new System.Drawing.Point(146, 67);
- this.lbDir.Name = "lbDir";
- this.lbDir.Size = new System.Drawing.Size(52, 13);
- this.lbDir.TabIndex = 5;
- this.lbDir.Text = "Directory:";
- //
- // tbArguments
- //
- this.tbArguments.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.tbArguments.Location = new System.Drawing.Point(211, 90);
- this.tbArguments.Name = "tbArguments";
- this.tbArguments.Size = new System.Drawing.Size(261, 20);
- this.tbArguments.TabIndex = 8;
- //
- // lbArgs
- //
- this.lbArgs.AutoSize = true;
- this.lbArgs.Location = new System.Drawing.Point(146, 93);
- this.lbArgs.Name = "lbArgs";
- this.lbArgs.Size = new System.Drawing.Size(60, 13);
- this.lbArgs.TabIndex = 7;
- this.lbArgs.Text = "Arguments:";
- //
- // btOk
- //
- this.btOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.btOk.Location = new System.Drawing.Point(397, 117);
- this.btOk.Name = "btOk";
- this.btOk.Size = new System.Drawing.Size(75, 23);
- this.btOk.TabIndex = 9;
- this.btOk.Text = "Ok";
- this.btOk.UseVisualStyleBackColor = true;
- this.btOk.Click += new System.EventHandler(this.BtOk_Click);
- //
- // btPathGet
- //
- this.btPathGet.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.btPathGet.Location = new System.Drawing.Point(448, 38);
- this.btPathGet.Name = "btPathGet";
- this.btPathGet.Size = new System.Drawing.Size(24, 20);
- this.btPathGet.TabIndex = 10;
- this.btPathGet.Text = "...";
- this.btPathGet.UseVisualStyleBackColor = true;
- this.btPathGet.Click += new System.EventHandler(this.BtPathGet_Click);
- //
- // btDirectoryGet
- //
- this.btDirectoryGet.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.btDirectoryGet.Location = new System.Drawing.Point(448, 64);
- this.btDirectoryGet.Name = "btDirectoryGet";
- this.btDirectoryGet.Size = new System.Drawing.Size(24, 20);
- this.btDirectoryGet.TabIndex = 11;
- this.btDirectoryGet.Text = "...";
- this.btDirectoryGet.UseVisualStyleBackColor = true;
- //
- // contextMenuStrip1
- //
- this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.openToolStripMenuItem,
- this.deleteToolStripMenuItem});
- this.contextMenuStrip1.Name = "contextMenuStrip1";
- this.contextMenuStrip1.Size = new System.Drawing.Size(108, 48);
- this.contextMenuStrip1.Opening += new System.ComponentModel.CancelEventHandler(this.ContextMenuStrip1_Opening);
- //
- // openToolStripMenuItem
- //
- this.openToolStripMenuItem.Name = "openToolStripMenuItem";
- this.openToolStripMenuItem.Size = new System.Drawing.Size(107, 22);
- this.openToolStripMenuItem.Text = "Open";
- this.openToolStripMenuItem.Click += new System.EventHandler(this.OpenToolStripMenuItem_Click);
- //
- // deleteToolStripMenuItem
- //
- this.deleteToolStripMenuItem.Name = "deleteToolStripMenuItem";
- this.deleteToolStripMenuItem.Size = new System.Drawing.Size(107, 22);
- this.deleteToolStripMenuItem.Text = "Delete";
- this.deleteToolStripMenuItem.Click += new System.EventHandler(this.DeleteToolStripMenuItem_Click);
- //
- // pbIcon
- //
- this.pbIcon.BackgroundImage = global::Launcheroid.Properties.Resources.imgbg;
- this.pbIcon.ContextMenuStrip = this.contextMenuStrip1;
- this.pbIcon.Location = new System.Drawing.Point(12, 12);
- this.pbIcon.Name = "pbIcon";
- this.pbIcon.Size = new System.Drawing.Size(128, 128);
- this.pbIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
- this.pbIcon.TabIndex = 0;
- this.pbIcon.TabStop = false;
- //
- // FItem
- //
- this.AllowDrop = true;
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(484, 152);
- this.Controls.Add(this.btDirectoryGet);
- this.Controls.Add(this.btPathGet);
- this.Controls.Add(this.btOk);
- this.Controls.Add(this.tbArguments);
- this.Controls.Add(this.lbArgs);
- this.Controls.Add(this.tbDirectory);
- this.Controls.Add(this.lbDir);
- this.Controls.Add(this.tbPath);
- this.Controls.Add(this.lbPath);
- this.Controls.Add(this.tbName);
- this.Controls.Add(this.lbName);
- this.Controls.Add(this.pbIcon);
- this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;
- this.MaximumSize = new System.Drawing.Size(900, 191);
- this.MinimumSize = new System.Drawing.Size(500, 191);
- this.Name = "FItem";
- this.ShowIcon = false;
- this.ShowInTaskbar = false;
- this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
- this.Text = "FItem";
- this.DragDrop += new System.Windows.Forms.DragEventHandler(this.FItem_DragDrop);
- this.DragEnter += new System.Windows.Forms.DragEventHandler(this.FItem_DragEnter);
- this.contextMenuStrip1.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.pbIcon)).EndInit();
- this.ResumeLayout(false);
- this.PerformLayout();
-
- }
-
- #endregion
-
- private System.Windows.Forms.PictureBox pbIcon;
- private System.Windows.Forms.Label lbName;
- private System.Windows.Forms.TextBox tbName;
- private System.Windows.Forms.TextBox tbPath;
- private System.Windows.Forms.Label lbPath;
- private System.Windows.Forms.TextBox tbDirectory;
- private System.Windows.Forms.Label lbDir;
- private System.Windows.Forms.TextBox tbArguments;
- private System.Windows.Forms.Label lbArgs;
- private System.Windows.Forms.Button btOk;
- private System.Windows.Forms.Button btPathGet;
- private System.Windows.Forms.Button btDirectoryGet;
- private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
- private System.Windows.Forms.ToolStripMenuItem openToolStripMenuItem;
- private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem;
- }
-}
\ No newline at end of file
diff --git a/Launcheroid/FItem.cs b/Launcheroid/FItem.cs
deleted file mode 100644
index 74a5393..0000000
--- a/Launcheroid/FItem.cs
+++ /dev/null
@@ -1,139 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-
-namespace Launcheroid
-{
- public partial class FItem : Form
- {
- private FItem()
- {
- InitializeComponent();
- }
-
- private static bool Open(LRD3.Item item, string import)
- {
- bool saved;
- using (FItem f = new FItem())
- {
- f.LoadItem(item);
- f.LinkToPath(import);
- saved = f.ShowDialog() == DialogResult.OK;
- if (saved)
- f.SaveItem(item);
- }
- return saved;
- }
-
- public static bool Execute(LRD3.Item item)
- {
- return Open(item, null);
- }
-
- public static LRD3.Item Import(string path)
- {
- LRD3.Item i = new LRD3.Item();
- if (Open(i, path))
- return i;
- return null;
- }
-
- private void LoadItem(LRD3.Item item)
- {
- tbName.Text = Text = item.Name;
- tbPath.Text = item.Path;
- tbDirectory.Text = item.InitialFolder;
- tbArguments.Text = item.Arguments;
- pbIcon.Image = item.Image;
- }
-
- private void SaveItem(LRD3.Item item)
- {
- item.Name = tbName.Text;
- item.Path = tbPath.Text;
- item.InitialFolder = tbDirectory.Text;
- item.Arguments = tbArguments.Text;
- item.Image = pbIcon.Image;
- }
-
- private void LinkToPath(string path)
- {
- // TODO if it is a link (.lnk) open link and recover information
- tbName.Text = Text = Path.GetFileNameWithoutExtension(path);
- tbPath.Text = path;
- tbDirectory.Text = Path.GetDirectoryName(path);
- try
- {
- pbIcon.Image = Icon.ExtractAssociatedIcon(path).ToBitmap();
- }
- catch
- {
- pbIcon.Image = null;
- }
- }
-
- private void BtOk_Click(object sender, EventArgs e)
- {
- DialogResult = DialogResult.OK;
- }
-
- private void TbName_TextChanged(object sender, EventArgs e)
- {
- Text = tbName.Text;
- }
-
- private void OpenToolStripMenuItem_Click(object sender, EventArgs e)
- {
- Image i = FImageLoad.Open();
- if (i != null)
- pbIcon.Image = i;
- }
-
- private void DeleteToolStripMenuItem_Click(object sender, EventArgs e)
- {
- pbIcon.Image = null;
- }
-
- private void FItem_DragEnter(object sender, DragEventArgs e)
- {
- if (!e.Data.GetDataPresent(DataFormats.FileDrop))
- return;
- e.Effect = DragDropEffects.Copy;
- }
-
- private void FItem_DragDrop(object sender, DragEventArgs e)
- {
- string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
- if (files.Length != 1)
- return;
- Point cp = PointToClient(new Point(e.X, e.Y));
- Control dropTarget = GetChildAtPoint(cp);
- if (dropTarget == pbIcon)
- pbIcon.Image = FImageLoad.Open(files[0]);
- else
- LinkToPath(files[0]);
- }
-
- private void BtPathGet_Click(object sender, EventArgs e)
- {
- using (OpenFileDialog ofd = new OpenFileDialog())
- {
- ofd.Filter = "Executables|*.exe;*.com;*.lnk|All files|*.*";
- if (ofd.ShowDialog() == DialogResult.OK)
- LinkToPath(ofd.FileName);
- }
- }
-
- private void ContextMenuStrip1_Opening(object sender, CancelEventArgs e)
- {
- deleteToolStripMenuItem.Enabled = pbIcon.Image != null;
- }
- }
-}
diff --git a/Launcheroid/FItem.resx b/Launcheroid/FItem.resx
deleted file mode 100644
index ad53752..0000000
--- a/Launcheroid/FItem.resx
+++ /dev/null
@@ -1,123 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 17, 17
-
-
\ No newline at end of file
diff --git a/Launcheroid/Form1.Designer.cs b/Launcheroid/Form1.Designer.cs
deleted file mode 100644
index ebb6b49..0000000
--- a/Launcheroid/Form1.Designer.cs
+++ /dev/null
@@ -1,147 +0,0 @@
-namespace Launcheroid
-{
- partial class Form1
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.IContainer components = null;
-
- ///
- /// Clean up any resources being used.
- ///
- /// true if managed resources should be disposed; otherwise, false.
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- this.components = new System.ComponentModel.Container();
- System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
- this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
- this.executeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.executeWithOptionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
- this.propertiesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator();
- this.addItemToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.deleteItemToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripSeparator();
- this.settingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.contextMenuStrip1.SuspendLayout();
- this.SuspendLayout();
- //
- // contextMenuStrip1
- //
- this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.executeToolStripMenuItem,
- this.executeWithOptionsToolStripMenuItem,
- this.toolStripMenuItem1,
- this.propertiesToolStripMenuItem,
- this.toolStripMenuItem2,
- this.addItemToolStripMenuItem,
- this.deleteItemToolStripMenuItem,
- this.toolStripMenuItem3,
- this.settingsToolStripMenuItem});
- this.contextMenuStrip1.Name = "contextMenuStrip1";
- this.contextMenuStrip1.Size = new System.Drawing.Size(193, 154);
- //
- // executeToolStripMenuItem
- //
- this.executeToolStripMenuItem.Name = "executeToolStripMenuItem";
- this.executeToolStripMenuItem.Size = new System.Drawing.Size(192, 22);
- this.executeToolStripMenuItem.Text = "Execute";
- //
- // executeWithOptionsToolStripMenuItem
- //
- this.executeWithOptionsToolStripMenuItem.Name = "executeWithOptionsToolStripMenuItem";
- this.executeWithOptionsToolStripMenuItem.Size = new System.Drawing.Size(192, 22);
- this.executeWithOptionsToolStripMenuItem.Text = "Execute with options...";
- //
- // toolStripMenuItem1
- //
- this.toolStripMenuItem1.Name = "toolStripMenuItem1";
- this.toolStripMenuItem1.Size = new System.Drawing.Size(189, 6);
- //
- // propertiesToolStripMenuItem
- //
- this.propertiesToolStripMenuItem.Name = "propertiesToolStripMenuItem";
- this.propertiesToolStripMenuItem.Size = new System.Drawing.Size(192, 22);
- this.propertiesToolStripMenuItem.Text = "Properties";
- //
- // toolStripMenuItem2
- //
- this.toolStripMenuItem2.Name = "toolStripMenuItem2";
- this.toolStripMenuItem2.Size = new System.Drawing.Size(189, 6);
- //
- // addItemToolStripMenuItem
- //
- this.addItemToolStripMenuItem.Name = "addItemToolStripMenuItem";
- this.addItemToolStripMenuItem.Size = new System.Drawing.Size(192, 22);
- this.addItemToolStripMenuItem.Text = "Add item";
- this.addItemToolStripMenuItem.Click += new System.EventHandler(this.AddItemToolStripMenuItem_Click);
- //
- // deleteItemToolStripMenuItem
- //
- this.deleteItemToolStripMenuItem.Name = "deleteItemToolStripMenuItem";
- this.deleteItemToolStripMenuItem.Size = new System.Drawing.Size(192, 22);
- this.deleteItemToolStripMenuItem.Text = "Delete item";
- //
- // toolStripMenuItem3
- //
- this.toolStripMenuItem3.Name = "toolStripMenuItem3";
- this.toolStripMenuItem3.Size = new System.Drawing.Size(189, 6);
- //
- // settingsToolStripMenuItem
- //
- this.settingsToolStripMenuItem.Name = "settingsToolStripMenuItem";
- this.settingsToolStripMenuItem.Size = new System.Drawing.Size(192, 22);
- this.settingsToolStripMenuItem.Text = "Settings";
- //
- // Form1
- //
- this.AllowDrop = true;
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(800, 450);
- this.ContextMenuStrip = this.contextMenuStrip1;
- this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
- this.MaximizeBox = false;
- this.MinimizeBox = false;
- this.Name = "Form1";
- this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
- this.DragDrop += new System.Windows.Forms.DragEventHandler(this.Form1_DragDrop);
- this.DragEnter += new System.Windows.Forms.DragEventHandler(this.Form1_DragEnter);
- this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);
- this.contextMenuStrip1.ResumeLayout(false);
- this.ResumeLayout(false);
-
- }
-
- #endregion
-
- private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
- private System.Windows.Forms.ToolStripMenuItem executeToolStripMenuItem;
- private System.Windows.Forms.ToolStripMenuItem executeWithOptionsToolStripMenuItem;
- private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;
- private System.Windows.Forms.ToolStripMenuItem propertiesToolStripMenuItem;
- private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2;
- private System.Windows.Forms.ToolStripMenuItem addItemToolStripMenuItem;
- private System.Windows.Forms.ToolStripMenuItem deleteItemToolStripMenuItem;
- private System.Windows.Forms.ToolStripSeparator toolStripMenuItem3;
- private System.Windows.Forms.ToolStripMenuItem settingsToolStripMenuItem;
- }
-}
-
diff --git a/Launcheroid/Form1.cs b/Launcheroid/Form1.cs
deleted file mode 100644
index 7b73181..0000000
--- a/Launcheroid/Form1.cs
+++ /dev/null
@@ -1,95 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-using XWolf.Aero;
-
-namespace Launcheroid
-{
- public partial class Form1 : XGlassForm
- {
- private const int WM_NCHITTEST = 0x0084;
- private static IntPtr HTCAPTION = (IntPtr)2;
-
- private LRD3 lib = new LRD3();
- private string libPath;
-
- public Form1()
- {
- InitializeComponent();
- FullGlass = true;
- GoToCursor();
- libPath = Program.ArgumentFile;
- if (string.IsNullOrEmpty(libPath))
- libPath = Program.DefaultFile;
- lib.Load(libPath);
- }
-
- protected override void WndProc(ref Message message)
- {
- base.WndProc(ref message);
- if (message.Msg == WM_NCHITTEST)
- {
- int r = message.Result.ToInt32();
- if (r >= 10 && r <= 18)
- message.Result = HTCAPTION;
- }
- }
-
- private void GoToCursor()
- {
- Point c = Cursor.Position;
- c.X -= Width / 2;
- if (c.X < 0)
- c.X = 0;
- c.Y -= Height / 2;
- if (c.Y < 0)
- c.Y = 0;
- Location = c;
- }
-
- private void UpdateLibrary()
- {
-
- }
-
- private void Add(LRD3.Item item)
- {
- lib.Items.Add(item);
- lib.Save(libPath);
- UpdateLibrary();
- }
-
- private void Form1_Paint(object sender, PaintEventArgs e)
- {
-
- }
-
- private void AddItemToolStripMenuItem_Click(object sender, EventArgs e)
- {
- LRD3.Item item = new LRD3.Item();
- if (FItem.Execute(item))
- Add(item);
- }
-
- private void Form1_DragEnter(object sender, DragEventArgs e)
- {
- if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy;
- }
-
- private void Form1_DragDrop(object sender, DragEventArgs e)
- {
- string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
- if (files.Length != 1)
- return;
- LRD3.Item item = FItem.Import(files[0]);
- if (item != null)
- Add(item);
- }
- }
-}
diff --git a/Launcheroid/Form1.resx b/Launcheroid/Form1.resx
deleted file mode 100644
index 783b959..0000000
--- a/Launcheroid/Form1.resx
+++ /dev/null
@@ -1,380 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 17, 17
-
-
-
-
- AAABAAMAEBAAAAEAIABoBAAANgAAACAgAAABACAAqBAAAJ4EAAAwMAAAAQAgAKglAABGFQAAKAAAABAA
- AAAgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8BAAAAAAAAAAAAAAAA////AWtZ
- OgUAAAAIGRkACpljAP+ZYwD/AAAAAAAAAADfvoIC////Av///wL///8B////AQAAAAAAAAAMNzc3Gi0t
- LScAAAAxmWMA/5ljAP/2yHX/mWMA/5ljAP+ZYwD/AAAAA////wL///8C////Af///wEAAAALAAAAGC4u
- LiUnJycxNSkmVvbIdf+ZYwD/VEZEcwAAADP2yHX/mWMA/wAAAA7V1dUD////Av///wH///8BAAAABQAA
- AA83NzcaSDQwP4pratq9mpb/x6im/5ljAP+ZYwD/AAAAGwAAABJePgUK////Av///wL///8B////AQAA
- AAAAAAAAdVRHJ4pvZtW3kor/mWMA/5ljAP/+66f/mWMA/5ljAP+ZYwD/AAAAAP///wH///8C////Af//
- /wEAAAAAeFRNJIttZNKwioD/s4yB//7rp/+ZYwD/yaym/7eSiv/+66f/mWMA/wAAAAD///8C////Av//
- /wH///8BeFRNJItmW9GpgnP/q4R1/6yFd/+uhnn/y7Kq/8qvp/+yi4D/s4yC/4tsYed/XFhC////Av//
- /wL///8BfmlcIaSKfNvJsab/0Lyy/9C7sf/Mtav/mWMA/5ljAP+ZYwD/mWMA/5ljAP+ZYwD/h2Re5oJq
- X0P///8C////AXtZTHLRvrf9zbes/824rf/Oua7/z7qv/5ljAP/rvpL/7MGV/+zBlf/rvpL/mWMA/6qC
- cv+NbGKRioCAC////wEAAAAAoYZ9ltC+tf3KtKf/y7Wo/8y2qv+ZYwD/7MGV/+yhUv/soVL/67+S/5lj
- AP+JZlunAAAAAP///wH///8B////AQAAAACfhnyWmWMA/5ljAP+ZYwD/mWMA//DNoP/xt2f/8LJf/+7H
- lv+ZYwD/mWMA/5ljAP+ZYwD/////Af7+/gEAAAAAAAAAAJ+CepeZYwD/27qJ//bXqv/23K3/+M17//fO
- f//23bP/9dev/ty9jv+ZYwD/69e5A////wH///8BAAAAAAAAAAD+/v4BoIZ3lpljAP/juGf//NmE//ze
- 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
- v//ZxsH/mWMA/5ljAP+ZYwD/mWMA//DNoP/xt2f/8LJf/+7Hlv+ZYwD/mWMA/5ljAP+ZYwD/AAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBRSYSFY1nzqoJz/6uEdf+shHb/rYV3/66Gef+uh3r/r4h7/7CJ
- fP/Xw77/2MS+/9jEv/+5lYr/mWMA/9u6if/216r/9tyt//jNe//3zn//9t2z//XXr/7cvY7/mWMA/+C/
- hAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuUUeEh2FT87CLff/Ksab/qoJz/7+hlf+/oJT/qoJz/6+I
- e/+shHb/rYV3/7WShv/IraT/18K8/7+hmP+win3/mWMA/+O4Z//82YT//N6M//3fkP/72o7/5b10/5lj
- AP/gv4QC/v7+AQAAAAAAAAAAAAAAAAAAAAAAAAAAblFFhKaOgPa+oZT/yK+k/9G8s//RvbT/0r20/863
- rv+/opb/0buz/66HeP+pgXL/qoJz/7aUh//Vwbn/zbSs/62FeP+uh3n/mWMA/+7Pg//+7Kf//uun/+/Q
- iP+ZYwD/5MaMAQAAAAD///8BAAAAAAAAAAAAAAAAVVUqBnBRR4SYe2r0yrOo/8+6r//PurD/z7qx/9C7
- sf/Qu7L/0Lyy/9G8s//RvLP/upuN/7aUh/+winz/w6ab/9O/t//Tv7f/t5eJ/6uCdP+rhHX/mWMA//Hb
- qP/x26b/mWMA/4RnXf9rTkbRpIeHBf///wEAAAAAAAAAAAAAAABmPz8UrpqU8dnIwP/Nt6z/zbit/824
- rf/Oua7/zrmv/8+5r//PurD/z7qw/9C7sf/Qu7L/0Lux/62Id//Ls6n/xaqf/9K9tf/OuK7/q4Z2/6iA
- b/+pgHH/mWMA/5ljAP+rg3T/p4By/4dpX/9vUk2a////AQAAAAAAAAAAAAAAAGYzMwVsTUV9zr+6+dnI
- v//Mtqr/zLar/8y3q//Nt6z/zbis/824rf/OuK7/zrmu/865r//Puq//tZSF/6yHdv+ieWX/wKSX/9G8
- s//IsKX/qYFw/6Z9a/+mfmz/p39u/6h/b/+pg3P/cVRNygAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AABsTUN9zr+4+djHvf/KtKf/y7Wo/8u1qf/Ltqr/zLaq/8y3q//Mt6z/zbes/824rf/OuK3/xKue/6B2
- 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
- AD/+AAB//wAA//+AAf//wAP//+AH///wD///+B////w////+f////3///////ygAAAAwAAAAYAAAAAEA
- IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAABAAA
- AAYAAAAHAAAACAAAAAgAAAAJAAAACAAAAAgAAAAHAAAABgAAAAQAAAACAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAcAAAAKAAAADQAA
- ABAAAAASAAAAFAAAABYAAAAYAAAAGQAAABk2NjYbTU1NG01NTRtQUFAZUVFQGD4+PhUAAAASAAAAD4he
- NBrAewD/wHsA/8B7AP/AewD/sHpGDgAAAAAAAAAAAAAAAP38+wL///8B////Af///wH///8BAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAEAAA
- ABMAAAAXAAAAGgAAAB4AAAAhAAAAJAAAACYAAAAoAAAAKgAAACoqKiosKioqKysrKyoAAAAoAAAAJQAA
- ACMAAAAgAAAAHQAAABnAewD/4KRL/+CkS//AewD/AAAABwAAAAMAAAAAAAAAAAAAAAD///8B////Af//
- /wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAADAAA
- ABEAAAAVAAAAGQAAAB4AAAAiAAAAJgAAACoAAAAuAAAAMQAAADUAAAA3AAAAOgAAADtWPjmiIyMjPCQk
- JDoAAAA3AAAANMB7AP/AewD/wHsA/8B7AP/AewD/4KRL/+CkS//AewD/wHsA/8B7AP/AewD/wHsA/wAA
- AAD///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAA
- AAoAAAAOAAAAEwAAABcAAAAcAAAAIAAAACUAAAApAAAALgAAADIAAAA3AAAAOwAAAD8AAABEAAAASGJF
- QfaMcXDxWUJBqh8fH0gAAABDAAAAPsB7AP/gpEv/4KRL/8B7AP/AewD/wHsA/8B7AP/AewD/wHsA/+Ck
- S//gpEv/wHsA/wAAAAT///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAFAAAACQAAAA4AAAASAAAAFwAAABsAAAAfAAAAJAAAACgAAAAtAAAAMQAAADYAAAA6AAAAPgAA
- AEIAAABGYEQ/9ZJ4ef+HcHH/fGNg9FlCQKoAAABFAAAAQcB7AP/fo0v/36NL/8B7AP8AAAAsAAAAJwAA
- ACMAAAAewHsA/9+jS//fo0v/wHsA/wAAAAiJiYkE////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAIAAAAGAAAACwAAAA8AAAATAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAA
- ADQAAAA4AAAAOwAAAD5fRD/1kXZ2/5d+fv+3mJn/loaG/4p3c/ZZQD2mIiIiPsB7AP/AewD/wHsA/8B7
- AP8AAAArAAAAJwAAACMAAAAfwHsA/8B7AP/AewD/wHsA/wAAAApycnIGvLy8Av///wH///8BAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAACgAAAA8AAAATAAAAFwAAABsAAAAeAAAAIgAA
- ACYAAAApAAAALQAAADAAAAAzAAAANWJHP/SOdHT/m399/8ShoP/Go6P/uZub/5aGhv+KcnH1WkI/oQAA
- ADQAAAAyAAAALwAAACzAewD/wHsA/8B7AP/AewD/AAAAGQAAABYAAAARAAAADQAAAAlycnIGvLy8Av//
- /wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAACQAAAAwAAAAQAAAAFAAA
- ABcAAAAbAAAAHgAAACEAAAAkAAAAJwAAACoAAAAsYkc/9I5ycP+dgH//w5+d/8Ognv/EoZ//xKGf/7yf
- n/+ajY3/iHFt9F5EP50AAAArAAAAKQAAACbAegD/+dWJ//zdj//AegD/AAAAFgAAABMAAAAPAAAACwAA
- AAcAAAAD////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABQAA
- AAkAAAAMAAAADwAAABMAAAAWAAAAGQAAABsAAAAeAAAAIAAAACJgR0Lzi3Bt/6GCgP/AnJj/wZ2Z/8Gd
- mv/Cn5z/wp+d/9W8uv/Pvr3/mY2M/8B7AP/AewD/wHsA/8B7AP/AegD/+teK//zfkP/AegD/wHsA/8B7
- AP/AewD/wHsA/wAAAAT///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAQAAAAQAAAAHAAAACgAAAA0AAAAQAAAAEgAAABUAAAAXAAAAGWBHQvOKbmr/o4N//76Z
- lP++mpX/vpqW/7+blv/Fo6H/xaSh/9zHxv/gzcz/z7+9/8B6AP/51Yn//N2P/8B6AP+/egD/v3oA/796
- AP+/egD/wHoA//nVif/83Y//wHoA/////wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAYAAAAJAAAACwAAAA0AAAAPY0VB8olt
- aP+mhH//u5aQ/7uWkP+8l5H/vJiS/72Yk//ey8n/3svJ/97Myf/fzMr/2cPB/8B6AP/614r//N+Q/8B6
- AP8AAAAPAAAADQAAAAsAAAAIwHoA//rXiv/835D/wHoA/////wH///8B////Af///wH///8BAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABAAA
- AAZjREHyiGxm/6eFfv+4k4v/uZSM/7mUjf+6lY7/upWP/7uWj//bx8T/3crH/93KyP/ey8j/0bm0/796
- AP+/egD/v3oA/796AP9qTUeLAAAABQAAAAMAAAABv3oA/796AP+/egD/v3oA/////wH///8B////Af//
- /wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAGNEQfKJa2T/qIV9/7aQh/+2kIj/t5GJ/7eSif+4kor/uJOL/7mTjP+6lo7/zLCr/9zJ
- xv/dysb/zLCr/7yXkf+8l5H/r42H/4FoZP93XFbxbU1JhwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
- /wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAY0RB8olqYv+phHv/s42C/7SNg/+0joT/tY6F/7WPhv+2kIf/tpCH/7eR
- iP+3kor/x6mj/9vIxP/cyMT/yKul/8B7AP/AewD/wHsA/8B7AP/AewD/wHsA/8B7AP/AewD/wHsA/8B7
- AP/AewD/wHsA/////wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABjREHyiWph/6mEeP+xin7/sYp//7KLgP+yjIH/s4yB/7ON
- gv+0jYP/tI6E/7WOhf+1kIb/xaag/9rHwv/ax8P/x6qk/8B7AP/two3/8riB//O6hP/zuoT/87qE//O6
- hP/zuoT/87qE//K4gf/two3/wHsA/////wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBEQPKKamD/qYJ2/66Hev+vh3v/r4h7/7CI
- fP+wiX3/sYl+/7GKf/+yi3//souA/7KMgf/AoJj/z7ex/9nGwf/ZxsH/ya2m/8B7AP/nsGv/651N/+uf
- UP/rn1D/659Q/+ufUP/rn1D/659Q/+udTf/nsGv/wHsA/////wH///8B////Af///wH///8BAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYERA8oxqX/+ogXP/rIR1/6yE
- dv+thXf/rYV4/62Gef+uh3n/rod6/6+Ie/+viHz/sIl9/7CJfv/YxL7/2MS+/9jEv//Yxb//zbOr/8B7
- AP/nsGv/655O/+ygUv/soFL/7KBS/+ygUv/soFL/7KBS/+ueTv/nsGv/wHsA/////wH///8B////Af//
- /wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgREDyjWpd/6h/
- b/+pgXH/qYFy/6qCcv+qgnP/q4N0/6uDdf+shHb/rIV3/62Fd/+thnj/roZ5/66Hev/Pt6//z7ev/9fD
- vP/Xw73/1L64/8B7AP/nsWz/651O/+ygUv/soFL/7KBS/+ygUv/soFL/7KBS/+ueTv/nsGv/wHsA////
- /wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGNE
- QvKPalz/pX1s/7aVhv/SvrX/tJKE/6uDdP+4l4r/07+3/7aUhv+qgXL/qoJz/7SQgv+rg3X/rIR1/6yE
- dv+thnj/rYd5/861rv/Wwrz/18K8/8B7AP/osW3/7KBR/+ugUv/soFL/7KBS/+ygUv/roFH/66BR/+ud
- Tv/nsGv/wHsA/////wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAY0RC8q+WjP+3l4j/t5aH/8ivpP/RvbT/0b20/9K9tP/SvbX/0r61/8ivpf+5mIv/vJ6R/9O/
- t/+zj4H/qoFy/6qCc/+rgnT/q4N0/8Chlf/Vwbr/1cG6/8B7AP/nsm//7aRY/+6mWf/tpFX/7aRU/+2j
- VP/to1P/7KFT/+ufT//nsGv/wHsA/2tLR4cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAABgQ0DymHJi/8+6sP/PurH/0Lux/9C7sf/Qu7L/0Lyy/9G8s//RvLP/0byz/9G9
- tP/SvbT/0r21/9G8s/+pgnL/qH9u/6h/b//AewD/wHsA/8B7AP/AewD/wHsA/8B7AP/utnT/7q1f//Cx
- ZP/wsmT/769c/++sWP/uqlb/7qhW/+2lUv/ssGv/wHsA/8B7AP/AewD/wHsA/8B7AP/AewD/AAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGVFQvKif2//yLGl/865rv/Oua//z7qv/8+6sP/PurD/z7qw/9C7
- sf/Qu7H/0Luy/9C8sv/RvLL/0byz/9G8s//Ls6n/sY1+/8aroP+1k4X/wHsA/9ebSv/1xZX/8LFr//G1
- bv/wtWj/8rdo//S6a//0vW7/9L5v//S8bv/zuWb/8bJd/++tV//uq1n/761h/+6pYP/1v4z/2J1I+sB7
- AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZkhC1NPBuf/Xxr3/zbes/824rf/NuK3/zrit/865
- rv/Oua7/zrmv/865r//Puq//z7qw/8+6sP/Pu7H/0Lux/9C7sv/Qu7L/0Lyy/9G8s/+0k4T/vqGU/8B7
- AP/boEj/8r17//K2Z//0vWv/9cFw//bFc//3x3X/98l4//fJev/3yXv/9sd9//XDd//zu3D/8bVn//K5
- dv/boUv/wHsA/2VOQ0T///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaU8+TZN8cfLs5OD/18W8/8y2
- q//Mt6v/zbes/823rP/NuKz/zbit/824rf/OuK7/zrmu/865r//Oua//z7qv/8+6sP/PurD/z7qx/865
- rv+pg3H/p4Bu/7STg//AewD/5LZu//jJgv/2xXP/98p4//nPe//50X7/+tOB//nTgv/50oT/+dCD//fO
- hP/3yoT/98yQ/+nEiv/AewD/ZEZA8XBXTxr///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGVL
- PmKTe3Dy7OTg/9bFu//Ltqn/y7aq/8y2qv/Mtqv/zLer/8y3rP/Nt6z/zbis/824rf/NuK3/zriu/865
- rv/Oua7/zrmv/8+5r//FrKH/rYl3/7KRgf+heGT/wHsA/+jCfP/504X/+tN///zXhP/82ob//duJ//3c
- i//824z/+9mM//rWjP/51ZP/7MuT/8B7AP9lSUDx/Pn0Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAABlSz5ikntw8uzk4P/WxLr/yrWo/8u1qP/Ltaj/y7Wp/8u2qv/Mtqr/zLaq/8y3
- q//Mt6v/zbes/823rP/NuK3/zbit/864rf/Oua7/zrmu/8u0qf+heGT/oHZh/8B7AP/vz47//dyL//3f
- jf/94pH//eKU//7jlf/94pX//eCV//zdlf/x1Jv/wHsA/2VKQfEAAAAA////Af///wH///8BAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZUg+YpJ6cPLs5N//1sS6/8q0pv/KtKf/yrSn/8q0
- p//Ltaj/y7Wo/8u1qf/Ltqr/zLaq/8y2qv/Mtqv/zLer/8y3rP/Nt6z/zLer/6N8Z/+edF7/pX5r/8y2
- qv/AewD/+uSp///nmv//6J3//+qh///pof//6KD//+eh//vns//AewD/aEtA8e/evwH///8B////Af//
- /wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGVIPmKSe3Dy7OTe/9XE
- uf/Js6X/ybOl/8mzpv/KtKb/yrSm/8q0p//KtKf/yrWo/8u1qP/Ltan/y7Wp/8u2qv/Mtqr/zLar/6eC
- bv+ccVv/o3tm/8iwpP/EqZz/wHsA//3stv/+77D///G2///wtf/+7q///e24/8B7AP9oSkDxAAAAAP//
- /wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AABlSD5ikXtv8uvj3v/Vw7n/yLKj/8iypP/IsqT/ybOl/8mzpf/Js6b/ybOm/8q0pv/KtKf/yrSn/8q1
- p//Ltaj/y7Wo/76jlP+zlIL/m29Z/6B3Yf+cclr/nW5W/8B7AP//9tL///TN///0yv//9s//wHsA/3BO
- P/Lu27oB////Af///wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAZUg+YpF6bvLr497/1cO4/8exov/HsaP/yLGj/8iyo//IsqT/yLKk/8my
- pP/Js6X/ybOl/8mzpv/KtKb/yrSn/8q0p//Ks6b/mW1V/5luVv+ablf/mW5V/55tT//AewD///rk///5
- 4v/AewD/e1I79AAAAAD+/fwB////Af///wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGVIPmKRem7y6+Pd/9TDt//GsKH/x7Ch/8ew
- of/HsaL/x7Gi/8ixo//IsaP/yLKk/8iypP/JsqT/ybOl/8Opm/+Zb1f/lmpR/5drUv+XbFP/mGxU/5ds
- U/+3jnP/wHsA/8B7AP+FWDj1AAAAAPv38AH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlSD5ikXpu8uvj
- 3f/Uw7f/xq+f/8avoP/Gr6D/xrCh/8ewof/HsKH/x7Gi/8exov/HsaP/yLGj/8Cml/+UZ03/lGhO/5Vo
- T/+VaVD/lmpQ/5ZqUP+fd1//xJx+/5hmMfcAAAAA+fPpAf///wH///8B////Af///wH///8B////Af//
- /wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAZUg+YpF5bvLq4t3/08K3/8Wunv/Frp7/xa6f/8Wvn//Gr6D/xq+g/8awoP/GsKH/x7Ch/8Or
- nP+ohW7/kWVI/5JlSf+SZkr/k2ZL/5x0W/+6oJH/ZUlB8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGVIPmKQeW7y6uLc/9PCtv/ErZ3/xK2d/8Stnf/Frp7/xa6e/8Wu
- n//Fr5//xq+f/8avoP/Gr6D/j2JF/5BjRv+QY0b/nXRa/7uik/9lSUHxAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiSDtikHht8uri3P/Twrb/w6yb/8Os
- nP/ErZz/xK2c/8Stnf/ErZ3/xa6e/6iGb/+Vak3/jWBB/45gQv+ddlz/vaSV/2VJQfEAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYkY7YpB4
- bfLq4tv/08K1/8Krmv/Dq5r/w6yb/8Osm//DrJv/xKyc/5FmSP+LXT3/i10+/555Xv++ppb/ZElB8QAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAGJGO2KQeG3y6uHc/9LBtf/Cqpj/wqqZ/8Krmf/Cq5r/wqqa/6J9Y/+IWjn/oXxh/76n
- l/9kSUDxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiRjtikHds8urh3P/SwbT/wamX/8Gpl//BqZf/uZ6L/7yi
- j/+jgWf/v6iX/2RGQPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYkY7YpB3bPLp4dv/0sG0/8Co
- lv+lgmj/g1Qw/6mJcP+/p5f/ZEZA8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJG
- O2KPdmvy6eHa/9G/sv+FVzP/qolx/76mlv9kRT/xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAABiRjlij3Zr8ung2v/SwLP/vaaV/2RFP/EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYkY5Yo1xafK8o5D/ZEU/8QAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJGOWJkRjvOAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AABfPz8YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAD///////8AAP//gAH//wAA//gAAAODAAD/wAAAAcMAAP8AAAAAQwAA/AAAAAADAAD8AAAAAAMAAPgA
- AAAAAwAA+AAAAAADAAD4AAAAAAMAAPwAAAAAAwAA/gAAAAADAAD/gAAAAAMAAP/wAAAAAwAA//wAAB+D
- AAD/+AAAAAMAAP/wAAAAAwAA/+AAAAADAAD/wAAAAAMAAP+AAAAAAwAA/wAAAAADAAD+AAAAAD8AAPwA
- AAAAAwAA+AAAAAAHAADwAAAAAAMAAPAAAAAAAwAA+AAAAAADAAD8AAAAACMAAP4AAAAAAwAA/wAAAACD
- AAD/gAAAAAMAAP/AAAACAwAA/+AAAAQDAAD/8AAACAMAAP/4AAAf/wAA//wAAD//AAD//gAAf/8AAP//
- AAD//wAA//+AAf//AAD//8AD//8AAP//4Af//wAA///wD///AAD///gf//8AAP///D///wAA///+f///
- AAD///9///8AAP///////wAA////////AAA=
-
-
-
\ No newline at end of file
diff --git a/Launcheroid/GFX.cs b/Launcheroid/GFX.cs
deleted file mode 100644
index 2c931c7..0000000
--- a/Launcheroid/GFX.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Launcheroid
-{
- class GFX
- {
- }
-}
diff --git a/Launcheroid/Glass.cs b/Launcheroid/Glass.cs
deleted file mode 100644
index bf287c3..0000000
--- a/Launcheroid/Glass.cs
+++ /dev/null
@@ -1,540 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Runtime.InteropServices;
-using System.Windows.Forms;
-using System.ComponentModel;
-using System.Drawing;
-using System.ComponentModel.Design.Serialization;
-using System.Globalization;
-using System.Collections;
-using System.Drawing.Drawing2D;
-
-namespace XWolf.Aero
-{
- #region XGlassForm
- public class XGlassForm : Form
- {
- private bool composite;
- private GlassMargins glassMargins = new GlassMargins(50, 0, 0, 0);
- private Image glassImage = null;
- private Point glassImageLocation = new Point();
- private bool glassDrag = true;
-
- public XGlassForm()
- {
- DoubleBuffered = true;
- composite = Glass.Composite;
- this.Shown += new EventHandler(XGlassForm_Shown);
- this.Paint += new PaintEventHandler(XGlassForm_Paint);
- this.Resize += new EventHandler(XGlassForm_Resize);
- this.MouseDown += new MouseEventHandler(XGlassForm_MouseDown);
- }
-
- void XGlassForm_Resize(object sender, EventArgs e)
- {
- Invalidate();
- }
-
- //protected override void WndProc(ref Message msg)
- //{
- // int[] except={3,6,8,13,14,20,28,32,36,70,71,132,134,160,161,174,274,512,533,534,561,562,641,642,674,675};
- // //mensaje 20
-
- // //switch (msg.Msg)
- // //{
- // // case WM_DWMCOLORIZATIONCOLORCHANGED:
- // // // The color format of currColor is 0xAARRGGBB.
- // // uint currColor = (uint)msg.WParam.ToInt32();
- // // bool opacityblend = (msg.LParam.ToInt32() != 0);
- // // ...
- // // break;
- // //}
- // base.WndProc(ref msg);
- // foreach (int msge in except)
- // if (msg.Msg == msge)
- // return;
- // Console.WriteLine("MSG: " + msg.Msg);
-
- //}
-
- void XGlassForm_Shown(object sender, EventArgs e)
- {
- UpdateGlass();
- }
- void XGlassForm_Paint(object sender, PaintEventArgs e)
- {
- Size client = ClientSize;
- if (DesignMode)
- {
- Pen p = new Pen(Color.Gray);
- Rectangle glassclient = new Rectangle(glassMargins.Left - 1, glassMargins.Top - 1, client.Width - (glassMargins.Left + glassMargins.Right) + 1, client.Height - (glassMargins.Top + glassMargins.Bottom) + 1);
- e.Graphics.DrawRectangle(p, glassclient);
- }
- else
- if (glassMargins.IsFull)
- e.Graphics.Clear(Color.Transparent);
- else
- {
-
- Rectangle glassclient = new Rectangle(glassMargins.Left, glassMargins.Top, client.Width - (glassMargins.Left + glassMargins.Right), client.Height - (glassMargins.Top + glassMargins.Bottom));
- e.Graphics.Clear(composite ? Color.Transparent : SystemColors.ButtonShadow);
- e.Graphics.FillRectangle(new SolidBrush(BackColor), glassclient);
- }
- if (glassImage != null)
- {
- Rectangle r = new Rectangle(glassImageLocation, glassImage.Size);
- e.Graphics.DrawImage(glassImage, r);
- }
- //if (glassMargins.IsFull)
- // e.Graphics.Clear(Color.Transparent);
- //else
- //{
- // Brush b = new SolidBrush(Color.Transparent);
- // Size client=ClientSize;
- // e.Graphics.FillRectangle(b, 0, 0, glassMargins.Left, client.Width);
- //}
- }
-
- void XGlassForm_MouseDown(object sender, MouseEventArgs e)
- {
- if (!glassDrag)
- return;
- Size c = ClientSize;
- if (e.X > glassMargins.Left && e.X < c.Width - glassMargins.Right &&
- e.Y > glassMargins.Top && e.Y < c.Height - glassMargins.Bottom)
- return;
- // Releasing the mouse capture to allow the form to receive the order
- Aero.ReleaseCapture();
- // Ordering the form
- // Simulating left mouse button clicking on the title bar
- Aero.SendMessage(this.Handle, // Form handle
- Aero.WM_NCLBUTTONDOWN, // Simulating the click
- Aero.HTCAPTION, // Attaching it to the title bar
- 0); // No further options required
- }
-
-
- private void UpdateGlass()
- {
- if (composite)
- {
- Glass.GlassForm(this, glassMargins);
- Invalidate();
- }
- }
-
- protected void DrawText(Graphics g, string text, Font font, Brush brush, PointF p)
- {
- GraphicsPath gp = new GraphicsPath();
- gp.AddString(text, font.FontFamily, (int)font.Style, font.Size, p, StringFormat.GenericDefault);
- g.FillPath(brush, gp);
- gp.Dispose();
- }
-
- protected void DrawText(Graphics g, string text, FontFamily fontfam, int fontstyle, float fontsize, Brush brush, PointF p)
- {
- GraphicsPath gp = new GraphicsPath();
- gp.AddString(text, fontfam, fontstyle, fontsize, p, StringFormat.GenericDefault);
- g.FillPath(brush, gp);
- gp.Dispose();
- }
-
- [Description("Margenes del efecto cristal"), Category("Aero Glass"), RefreshProperties(RefreshProperties.All)]
- public GlassMargins GlassMargins
- {
- get { return glassMargins; }
- set { glassMargins = value; UpdateGlass(); }
- }
-
- [Description("Cristal completo"), Category("Aero Glass"), RefreshProperties(RefreshProperties.All)]
- public bool FullGlass
- {
- get { return glassMargins.IsFull; }
- set { if (value) glassMargins = GlassMargins.GetFullGlassMargins(); UpdateGlass(); }
- }
-
- [Description("Imagen en el cristal"), Category("Aero Glass")]
- public Image GlassImage
- {
- get { return glassImage; }
- set { glassImage = value; Invalidate(); }
- }
-
- [Description("Posicion de Imagen en el cristal"), Category("Aero Glass")]
- public Point GlassImageLocation
- {
- get { return glassImageLocation; }
- set { glassImageLocation = value; Invalidate(); }
- }
-
- [Description("Usar la extensión del glass como un tirador"), Category("Aero Glass")]
- public bool GlassDrag
- {
- get { return glassDrag; }
- set { glassDrag = value; }
- }
- }
- #endregion
-
- public class Aero
- {
- internal static bool hasAero;
-
- #region API
- private class DWNAPI
- {
- [DllImport("dwmapi.dll")]
- public extern static int DwmExtendFrameIntoClientArea(IntPtr hwnd, ref GlassMargins margin);
- [DllImport("dwmapi.dll")]
- public extern static int DwmIsCompositionEnabled(ref int en);
- }
-
- [DllImport("user32.dll")]
- [return: MarshalAs(UnmanagedType.I4)]
- public static extern int SendMessage(IntPtr hWnd, [param: MarshalAs(UnmanagedType.U4)]uint Msg, [param: MarshalAs(UnmanagedType.U4)]uint wParam, [param: MarshalAs(UnmanagedType.I4)]int lParam);
-
- [DllImport("user32.dll")]
- [return: MarshalAs(UnmanagedType.Bool)]
- public static extern bool ReleaseCapture();
-
- public const uint WM_NCLBUTTONDOWN = 0xA1; // 161
- public const uint HTCAPTION = 2;
- #endregion
-
-
- #region APIex
- internal static void DwmExtendFrameIntoClientArea(IntPtr hwnd, GlassMargins margin)
- {
- try
- {
- DWNAPI.DwmExtendFrameIntoClientArea(hwnd, ref margin);
- }
- catch { };
- }
- internal static bool DwmIsCompositionEnabled()
- {
- try
- {
- int result = 0;
- DWNAPI.DwmIsCompositionEnabled(ref result);
- return result > 0;
- }
- catch { return false; };
- }
- #endregion
-
- static Aero()
- {
- hasAero = false;
- try
- {
- DwmIsCompositionEnabled();
- hasAero = true;
- }
- catch { };
- }
-
- public static bool HasAero { get { return hasAero; } }
- }
-
- #region GalssMarginsConverter
- public class GalssMarginsConverter : TypeConverter
- {
- private static CultureInfo FixCulture(CultureInfo c)
- {
- if (c == null)
- return CultureInfo.CurrentCulture;
- return c;
- }
- private static char GetListSeparator(CultureInfo c)
- {
- c = FixCulture(c);
- return c.TextInfo.ListSeparator[0];
- }
-
- #region ConvertFrom
-
- public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
- {
- return sourceType == typeof(string) || base.CanConvertFrom(context, sourceType);
- }
-
- public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
- {
- string str = value as string;
- if (str == null)
- return base.ConvertFrom(context, culture, value);
- str = str.Trim();
- if (str.Length == 0)
- return null;
- culture = FixCulture(culture);
- char ch = culture.TextInfo.ListSeparator[0];
- string[] strArray = str.Split(new char[] { ch });
- int[] numArray = new int[strArray.Length];
- if (numArray.Length != 4)
- throw new ArgumentException("Solo se admiten 4 valores");
- TypeConverter converter = TypeDescriptor.GetConverter(typeof(int));
- for (int i = 0; i < numArray.Length; i++)
- numArray[i] = (int)converter.ConvertFromString(context, culture, strArray[i]);
- return new GlassMargins(numArray[0], numArray[1], numArray[2], numArray[3]);
- }
-
- #endregion
-
- #region ConvertTo
-
- public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
- {
- return ((destinationType == typeof(InstanceDescriptor)) || base.CanConvertTo(context, destinationType));
- }
-
- public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
- {
- if (destinationType == null)
- throw new ArgumentNullException("destinationType");
- if (value is GlassMargins)
- {
- if (destinationType == typeof(string))
- {
- GlassMargins gmargins = (GlassMargins)value;
- if (culture == null)
- culture = CultureInfo.CurrentCulture;
- string separator = culture.TextInfo.ListSeparator + " ";
- TypeConverter converter = TypeDescriptor.GetConverter(typeof(int));
- string[] strArray ={
- converter.ConvertToString(context, culture, gmargins.Left),
- converter.ConvertToString(context, culture, gmargins.Top),
- converter.ConvertToString(context, culture, gmargins.Right),
- converter.ConvertToString(context, culture, gmargins.Bottom)
- };
- return string.Join(separator, strArray);
- }
- //if (destinationType == typeof(InstanceDescriptor))
- //{
- // GlassMargins gmargins = (GlassMargins)value;
-
- // return new InstanceDescriptor(typeof(GlassMargins).GetConstructor(new Type[] { typeof(int), typeof(int), typeof(int), typeof(int) }), new object[] { gmargins.Left, gmargins.Top, gmargins.Right, gmargins.Bottom });
- //}
- }
- return base.ConvertTo(context, culture, value, destinationType);
- }
-
- #endregion
-
- #region Instancia
- public override object CreateInstance(ITypeDescriptorContext context, IDictionary propertyValues)
- {
- if (context == null)
- {
- throw new ArgumentNullException("context");
- }
- if (propertyValues == null)
- {
- throw new ArgumentNullException("propertyValues");
- }
- GlassMargins gmargins = (GlassMargins)context.PropertyDescriptor.GetValue(context.Instance);
- return new GlassMargins((int)propertyValues["Left"], (int)propertyValues["Top"], (int)propertyValues["Right"], (int)propertyValues["Bottom"]);
- }
-
- public override bool GetCreateInstanceSupported(ITypeDescriptorContext context)
- {
- return true;
- }
- #endregion
-
- #region Properties
- public override bool GetPropertiesSupported(ITypeDescriptorContext context)
- {
- return true;
- }
-
- public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes)
- {
- return TypeDescriptor.GetProperties(value, attributes).Sort(new string[] { "Left", "Top", "Right", "Bottom" });
- }
- #endregion
- }
- #endregion
-
- //#region GalssMarginsConverter
- //public class GalssMarginsConverter : TypeConverter
- //{
- // #region ConvertFrom
-
- // public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
- // {
- // return ((sourceType == typeof(string)) || base.CanConvertFrom(context, sourceType));
- // }
-
- // public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
- // {
- // string str = value as string;
- // if (str == null)
- // return base.ConvertFrom(context, culture, value);
- // str = str.Trim();
- // if (str.Length == 0)
- // return null;
- // if (culture == null)
- // culture = CultureInfo.CurrentCulture;
- // char ch = culture.TextInfo.ListSeparator[0];
- // string[] strArray = str.Split(new char[] { ch });
- // int[] numArray = new int[strArray.Length];
- // TypeConverter converter = TypeDescriptor.GetConverter(typeof(int));
- // for (int i = 0; i < numArray.Length; i++)
- // numArray[i] = (int)converter.ConvertFromString(context, culture, strArray[i]);
- // if (numArray.Length != 4)
- // throw new ArgumentException();
- // return new GlassMargins(numArray[0], numArray[1], numArray[2], numArray[3]);
- // }
-
- // #endregion
-
- // #region ConvertTo
-
- // public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
- // {
- // //return ((destinationType == typeof(InstanceDescriptor)) || base.CanConvertTo(context, destinationType));
- // return ((destinationType == typeof(String)) || base.CanConvertTo(context, destinationType));
- // }
-
- // public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
- // {
- // if (destinationType == null)
- // throw new ArgumentNullException("destinationType");
- // if (value is GlassMargins)
- // {
- // if (destinationType == typeof(string))
- // {
- // GlassMargins gmargins = (GlassMargins)value;
- // if (culture == null)
- // culture = CultureInfo.CurrentCulture;
- // string separator = culture.TextInfo.ListSeparator + " ";
- // TypeConverter converter = TypeDescriptor.GetConverter(typeof(int));
- // string[] strArray ={
- // converter.ConvertToString(context, culture, gmargins.Left),
- // converter.ConvertToString(context, culture, gmargins.Top),
- // converter.ConvertToString(context, culture, gmargins.Right),
- // converter.ConvertToString(context, culture, gmargins.Bottom)
- // };
- // return string.Join(separator, strArray);
- // }
- // //if (destinationType == typeof(InstanceDescriptor))
- // //{
- // // GlassMargins gmargins = (GlassMargins)value;
-
- // // return new InstanceDescriptor(typeof(GlassMargins).GetConstructor(new Type[] { typeof(int), typeof(int), typeof(int), typeof(int) }), new object[] { gmargins.Left, gmargins.Top, gmargins.Right, gmargins.Bottom });
- // //}
- // }
- // return base.ConvertTo(context, culture, value, destinationType);
- // }
-
- // #endregion
-
- // //public override object CreateInstance(ITypeDescriptorContext context, IDictionary propertyValues)
- // //{
- // // if (context == null)
- // // {
- // // throw new ArgumentNullException("context");
- // // }
- // // if (propertyValues == null)
- // // {
- // // throw new ArgumentNullException("propertyValues");
- // // }
- // // GlassMargins gmargins = (GlassMargins)context.PropertyDescriptor.GetValue(context.Instance);
- // // return new GlassMargins((int)propertyValues["Left"], (int)propertyValues["Top"], (int)propertyValues["Right"], (int)propertyValues["Bottom"]);
- // //}
-
- // //public override bool GetCreateInstanceSupported(ITypeDescriptorContext context)
- // //{
- // // return true;
- // //}
-
- // #region Properties
- // public override bool GetPropertiesSupported(ITypeDescriptorContext context)
- // {
- // return true;
- // }
-
- // public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes)
- // {
- // return TypeDescriptor.GetProperties(value, attributes).Sort(new string[] { "Left", "Top", "Right", "Bottom" });
- // }
- // #endregion
- //}
- //#endregion
-
- #region GlassMargins
- [Serializable, StructLayout(LayoutKind.Sequential), TypeConverter(typeof(GalssMarginsConverter))]
- public struct GlassMargins
- {
- private int left;
- private int right;
- private int top;
- private int bottom;
-
- public static GlassMargins GetFullGlassMargins()
- {
- return new GlassMargins(-1, -1, -1, -1);
- }
-
- public GlassMargins(int left, int top, int right, int bottom)
- {
- this.left = left;
- this.right = right;
- this.top = top;
- this.bottom = bottom;
- }
-
- public int Top { get { return top; } set { top = value; } }
- public int Left { get { return left; } set { left = value; } }
- public int Right { get { return right; } set { right = value; } }
- public int Bottom { get { return bottom; } set { bottom = value; } }
-
- [Browsable(false)]
- public bool IsFull { get { return top == -1 && left == -1 && right == -1 & bottom == -1; } }
-
- [Browsable(false)]
- public bool IsNone { get { return top == 0 && left == 0 && right == 0 & bottom == 0; } }
-
- public override string ToString()
- {
- if (IsFull)
- return "Full Glass";
- if (IsNone)
- return "No Glass";
- return left + "; " + top + "; " + right + "; " + bottom;
- }
- };
- #endregion
-
- internal class Glass
- {
- private static bool CheckComposite()
- {
- if (!Aero.hasAero)
- return false;
- return Aero.DwmIsCompositionEnabled();
- }
-
- public static void GlassForm(Form f)
- {
- GlassForm(f, GlassMargins.GetFullGlassMargins());
- }
-
- public static void GlassForm(Form f, int leftmargin, int bottommargin, int rightmargin, int topmargin)
- {
- GlassForm(f, new GlassMargins(leftmargin, bottommargin, rightmargin, topmargin));
- }
-
- public static void GlassForm(Form f, GlassMargins margins)
- {
- if (!Composite)
- return;
- Aero.DwmExtendFrameIntoClientArea(f.Handle, margins);
- }
-
- public static bool Composite { get { return CheckComposite(); } }
- }
-
-}
diff --git a/Launcheroid/LRD3.cs b/Launcheroid/LRD3.cs
deleted file mode 100644
index cb4300f..0000000
--- a/Launcheroid/LRD3.cs
+++ /dev/null
@@ -1,116 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Drawing;
-using System.Drawing.Imaging;
-using System.IO;
-using System.Text;
-
-namespace Launcheroid
-{
- public class LRD3
- {
- public class Item
- {
- public string Name { get; set; }
- public string Path { get; set; }
- public string Arguments { get; set; }
- public string InitialFolder { get; set; }
- public Image Image { get; set; }
- }
-
- public LRD3()
- {
- Reset();
- }
-
- public void Reset()
- {
- NavigationRoot = null;
- IconSize = 48;
- IconSpacing = 5;
- IconMargin = 7;
- Items.Clear();
- }
-
- #region Load/Save
- ///
- /// Load all information from file
- ///
- ///
- public void Load(string path)
- {
- if (!File.Exists(path))
- return;
- Reset();
-
- }
-
- ///
- /// Save the current information to a file
- ///
- ///
- public void Save(string path)
- {
- using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write))
- using (StreamWriter sw = new StreamWriter(fs, Encoding.UTF8))
- {
- sw.WriteLine("// Launcheroid3 file (Text mode) Autogenerated by Lancheroid on " + DateTime.Now.ToString());
- sw.WriteLine("// Launcheroid3 by XWolfOverride in 2019");
- sw.WriteLine();
- foreach (Item i in Items)
- {
- sw.WriteLine("[Item]");
- sw.Write("name:"); sw.WriteLine(i.Name);
- sw.Write("path:"); sw.WriteLine(i.Path);
- sw.Write("idir:"); sw.WriteLine(i.InitialFolder);
- sw.Write("args:"); sw.WriteLine(i.Arguments);
- sw.Write("icon:"); sw.WriteLine(Image64(i.Image));
- sw.WriteLine("");
- }
- sw.WriteLine("[Settings]");
- sw.Write("root:"); sw.WriteLine(NavigationRoot);
- sw.Write("size:"); sw.WriteLine(IconSize);
- sw.Write("spac:"); sw.WriteLine(IconSpacing);
- sw.Write("marg:"); sw.WriteLine(IconMargin);
- }
- }
-
- private string Image64(Image i)
- {
- if (i == null)
- return "";
- MemoryStream ms = new MemoryStream();
- i.Save(ms, ImageFormat.Png);
- ms.Close();
- byte[] data = ms.GetBuffer();
- return Convert.ToBase64String(data);
- }
- #endregion
-
- ///
- /// Navigation root for navigation panel (if not null)
- /// use '/' for root
- ///
- public string NavigationRoot { get; set; }
-
- ///
- /// Size (in pixels) of icons in screen
- ///
- public int IconSize { get; set; }
-
- ///
- /// Size (in pixels) of spacing between icons
- ///
- public int IconSpacing { get; set; }
-
- ///
- /// Size (in pixels) of between icons and window frame
- ///
- public int IconMargin { get; set; }
-
- ///
- /// List of items in Launcher
- ///
- public List- Items { get; } = new List
- ();
- }
-}
diff --git a/Launcheroid/Launcheroid.csproj b/Launcheroid/Launcheroid.csproj
deleted file mode 100644
index 54234c0..0000000
--- a/Launcheroid/Launcheroid.csproj
+++ /dev/null
@@ -1,115 +0,0 @@
-
-
-
-
- Debug
- AnyCPU
- {042236E2-8C4A-4D85-9968-89AFC2D2271D}
- WinExe
- Launcheroid
- Launcheroid
- v4.8
- 512
- true
- true
-
-
-
- AnyCPU
- true
- full
- false
- bin\Debug\
- DEBUG;TRACE
- prompt
- 4
-
-
- AnyCPU
- pdbonly
- true
- bin\Release\
- TRACE
- prompt
- 4
-
-
- AppIconLN.ico
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Form
-
-
- FImageLoad.cs
-
-
- Form
-
-
- FItem.cs
-
-
- Form
-
-
- Form1.cs
-
-
-
- Form
-
-
-
-
-
- FImageLoad.cs
-
-
- FItem.cs
-
-
- Form1.cs
-
-
- ResXFileCodeGenerator
- Resources.Designer.cs
- Designer
-
-
- True
- Resources.resx
- True
-
-
- SettingsSingleFileGenerator
- Settings.Designer.cs
-
-
- True
- Settings.settings
- True
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Launcheroid/Program.cs b/Launcheroid/Program.cs
deleted file mode 100644
index 6966ab2..0000000
--- a/Launcheroid/Program.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-
-namespace Launcheroid
-{
- static class Program
- {
- private const string DEFAULTFILENAME = "Links.lrd";
- ///
- /// The main entry point for the application.
- ///
- [STAThread]
- static void Main()
- {
- Application.EnableVisualStyles();
- Application.SetCompatibleTextRenderingDefault(false);
- Application.Run(new Form1());
- }
-
- public static string ArgumentFile
- {
- get
- {
- string[] args = Environment.GetCommandLineArgs();
- if (args.Length > 1)
- return args[1];
- return null;
- }
- }
-
- public static string DefaultFile
- {
- get
- {
- string path = System.Reflection.Assembly.GetExecutingAssembly().Location;
- return Path.Combine(Path.GetDirectoryName(path), DEFAULTFILENAME);
- }
- }
- }
-}
diff --git a/Launcheroid/Properties/AssemblyInfo.cs b/Launcheroid/Properties/AssemblyInfo.cs
deleted file mode 100644
index f36ec22..0000000
--- a/Launcheroid/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("Launcheroid")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("Launcheroid")]
-[assembly: AssemblyCopyright("Copyright © 2019")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("042236e2-8c4a-4d85-9968-89afc2d2271d")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Launcheroid/Properties/Resources.Designer.cs b/Launcheroid/Properties/Resources.Designer.cs
deleted file mode 100644
index f7a33d0..0000000
--- a/Launcheroid/Properties/Resources.Designer.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// Este código fue generado por una herramienta.
-// Versión de runtime:4.0.30319.42000
-//
-// Los cambios en este archivo podrían causar un comportamiento incorrecto y se perderán si
-// se vuelve a generar el código.
-//
-//------------------------------------------------------------------------------
-
-namespace Launcheroid.Properties {
- using System;
-
-
- ///
- /// Clase de recurso fuertemente tipado, para buscar cadenas traducidas, etc.
- ///
- // StronglyTypedResourceBuilder generó automáticamente esta clase
- // a través de una herramienta como ResGen o Visual Studio.
- // Para agregar o quitar un miembro, edite el archivo .ResX y, a continuación, vuelva a ejecutar ResGen
- // con la opción /str o recompile su proyecto de VS.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class Resources {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal Resources() {
- }
-
- ///
- /// Devuelve la instancia de ResourceManager almacenada en caché utilizada por esta clase.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager {
- get {
- if (object.ReferenceEquals(resourceMan, null)) {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Launcheroid.Properties.Resources", typeof(Resources).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- ///
- /// Reemplaza la propiedad CurrentUICulture del subproceso actual para todas las
- /// búsquedas de recursos mediante esta clase de recurso fuertemente tipado.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture {
- get {
- return resourceCulture;
- }
- set {
- resourceCulture = value;
- }
- }
-
- ///
- /// Busca un recurso adaptado de tipo System.Drawing.Bitmap.
- ///
- internal static System.Drawing.Bitmap imgbg {
- get {
- object obj = ResourceManager.GetObject("imgbg", resourceCulture);
- return ((System.Drawing.Bitmap)(obj));
- }
- }
- }
-}
diff --git a/Launcheroid/Properties/Resources.resx b/Launcheroid/Properties/Resources.resx
deleted file mode 100644
index 7ece317..0000000
--- a/Launcheroid/Properties/Resources.resx
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
-
- ..\res\imgbg.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
\ No newline at end of file
diff --git a/Launcheroid/Properties/Settings.Designer.cs b/Launcheroid/Properties/Settings.Designer.cs
deleted file mode 100644
index 385fa47..0000000
--- a/Launcheroid/Properties/Settings.Designer.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// Este código fue generado por una herramienta.
-// Versión de runtime:4.0.30319.42000
-//
-// Los cambios en este archivo podrían causar un comportamiento incorrecto y se perderán si
-// se vuelve a generar el código.
-//
-//------------------------------------------------------------------------------
-
-namespace Launcheroid.Properties {
-
-
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.8.0.0")]
- internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
-
- private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
-
- public static Settings Default {
- get {
- return defaultInstance;
- }
- }
- }
-}
diff --git a/Launcheroid/Properties/Settings.settings b/Launcheroid/Properties/Settings.settings
deleted file mode 100644
index 3964565..0000000
--- a/Launcheroid/Properties/Settings.settings
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/Launcheroid/res/AppIcon.ico b/Launcheroid/res/AppIcon.ico
deleted file mode 100644
index 1fcba38..0000000
--- a/Launcheroid/res/AppIcon.ico
+++ /dev/null
Binary files differ
diff --git a/Launcheroid/res/AppIconLN.ico b/Launcheroid/res/AppIconLN.ico
deleted file mode 100644
index 3b09534..0000000
--- a/Launcheroid/res/AppIconLN.ico
+++ /dev/null
Binary files differ
diff --git a/Launcheroid/res/BlueLauncher.ico b/Launcheroid/res/BlueLauncher.ico
deleted file mode 100644
index ce77a12..0000000
--- a/Launcheroid/res/BlueLauncher.ico
+++ /dev/null
Binary files differ
diff --git a/Launcheroid/res/Gnome App Green.ico b/Launcheroid/res/Gnome App Green.ico
deleted file mode 100644
index 340605b..0000000
--- a/Launcheroid/res/Gnome App Green.ico
+++ /dev/null
Binary files differ
diff --git a/Launcheroid/res/WhiteLauncher.ico b/Launcheroid/res/WhiteLauncher.ico
deleted file mode 100644
index 77326a3..0000000
--- a/Launcheroid/res/WhiteLauncher.ico
+++ /dev/null
Binary files differ
diff --git a/Launcheroid/res/imgbg.png b/Launcheroid/res/imgbg.png
deleted file mode 100644
index 4a250e0..0000000
--- a/Launcheroid/res/imgbg.png
+++ /dev/null
Binary files differ
diff --git a/Launcheroid4/Form1.Designer.cs b/Launcheroid4/Form1.Designer.cs
new file mode 100644
index 0000000..a805a86
--- /dev/null
+++ b/Launcheroid4/Form1.Designer.cs
@@ -0,0 +1,138 @@
+namespace Launcheroid4
+{
+ partial class Form1
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ components = new System.ComponentModel.Container();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
+ tt = new ToolTip(components);
+ cmsMain = new ContextMenuStrip(components);
+ ejecutarToolStripMenuItem = new ToolStripMenuItem();
+ abrirDirectorioToolStripMenuItem = new ToolStripMenuItem();
+ toolStripSeparator1 = new ToolStripSeparator();
+ propiedadesToolStripMenuItem = new ToolStripMenuItem();
+ toolStripSeparator2 = new ToolStripSeparator();
+ añadirToolStripMenuItem = new ToolStripMenuItem();
+ borrarToolStripMenuItem = new ToolStripMenuItem();
+ toolStripSeparator3 = new ToolStripSeparator();
+ configuraciónToolStripMenuItem = new ToolStripMenuItem();
+ cmsMain.SuspendLayout();
+ SuspendLayout();
+ //
+ // cmsMain
+ //
+ cmsMain.ImageScalingSize = new Size(20, 20);
+ cmsMain.Items.AddRange(new ToolStripItem[] { ejecutarToolStripMenuItem, abrirDirectorioToolStripMenuItem, toolStripSeparator1, propiedadesToolStripMenuItem, toolStripSeparator2, añadirToolStripMenuItem, borrarToolStripMenuItem, toolStripSeparator3, configuraciónToolStripMenuItem });
+ cmsMain.Name = "cmsMain";
+ cmsMain.Size = new Size(181, 166);
+ //
+ // ejecutarToolStripMenuItem
+ //
+ ejecutarToolStripMenuItem.Name = "ejecutarToolStripMenuItem";
+ ejecutarToolStripMenuItem.Size = new Size(180, 24);
+ ejecutarToolStripMenuItem.Text = "Ejecutar";
+ //
+ // abrirDirectorioToolStripMenuItem
+ //
+ abrirDirectorioToolStripMenuItem.Name = "abrirDirectorioToolStripMenuItem";
+ abrirDirectorioToolStripMenuItem.Size = new Size(180, 24);
+ abrirDirectorioToolStripMenuItem.Text = "Abrir directorio";
+ //
+ // toolStripSeparator1
+ //
+ toolStripSeparator1.Name = "toolStripSeparator1";
+ toolStripSeparator1.Size = new Size(177, 6);
+ //
+ // propiedadesToolStripMenuItem
+ //
+ propiedadesToolStripMenuItem.Name = "propiedadesToolStripMenuItem";
+ propiedadesToolStripMenuItem.Size = new Size(180, 24);
+ propiedadesToolStripMenuItem.Text = "Propiedades";
+ //
+ // toolStripSeparator2
+ //
+ toolStripSeparator2.Name = "toolStripSeparator2";
+ toolStripSeparator2.Size = new Size(177, 6);
+ //
+ // añadirToolStripMenuItem
+ //
+ añadirToolStripMenuItem.Name = "añadirToolStripMenuItem";
+ añadirToolStripMenuItem.Size = new Size(180, 24);
+ añadirToolStripMenuItem.Text = "Añadir";
+ //
+ // borrarToolStripMenuItem
+ //
+ borrarToolStripMenuItem.Name = "borrarToolStripMenuItem";
+ borrarToolStripMenuItem.Size = new Size(180, 24);
+ borrarToolStripMenuItem.Text = "Borrar";
+ //
+ // toolStripSeparator3
+ //
+ toolStripSeparator3.Name = "toolStripSeparator3";
+ toolStripSeparator3.Size = new Size(177, 6);
+ //
+ // configuraciónToolStripMenuItem
+ //
+ configuraciónToolStripMenuItem.Name = "configuraciónToolStripMenuItem";
+ configuraciónToolStripMenuItem.Size = new Size(180, 24);
+ configuraciónToolStripMenuItem.Text = "Configuración";
+ //
+ // Form1
+ //
+ AutoScaleDimensions = new SizeF(120F, 120F);
+ AutoScaleMode = AutoScaleMode.Dpi;
+ BackColor = Color.FromArgb(64, 64, 64);
+ ClientSize = new Size(800, 450);
+ ContextMenuStrip = cmsMain;
+ DoubleBuffered = true;
+ FormBorderStyle = FormBorderStyle.None;
+ Icon = (Icon)resources.GetObject("$this.Icon");
+ MaximizeBox = false;
+ MinimizeBox = false;
+ Name = "Form1";
+ StartPosition = FormStartPosition.Manual;
+ Load += Form1_Load;
+ cmsMain.ResumeLayout(false);
+ ResumeLayout(false);
+ }
+
+ #endregion
+
+ private ToolTip tt;
+ private ContextMenuStrip cmsMain;
+ private ToolStripMenuItem ejecutarToolStripMenuItem;
+ private ToolStripMenuItem abrirDirectorioToolStripMenuItem;
+ private ToolStripSeparator toolStripSeparator1;
+ private ToolStripMenuItem propiedadesToolStripMenuItem;
+ private ToolStripSeparator toolStripSeparator2;
+ private ToolStripMenuItem añadirToolStripMenuItem;
+ private ToolStripMenuItem borrarToolStripMenuItem;
+ private ToolStripSeparator toolStripSeparator3;
+ private ToolStripMenuItem configuraciónToolStripMenuItem;
+ }
+}
diff --git a/Launcheroid4/Form1.cs b/Launcheroid4/Form1.cs
new file mode 100644
index 0000000..4e88fd6
--- /dev/null
+++ b/Launcheroid4/Form1.cs
@@ -0,0 +1,15 @@
+namespace Launcheroid4
+{
+ public partial class Form1 : Form
+ {
+ public Form1()
+ {
+ InitializeComponent();
+ }
+
+ private void Form1_Load(object sender, EventArgs e)
+ {
+ Top = Left = 10;
+ }
+ }
+}
diff --git a/Launcheroid4/Form1.resx b/Launcheroid4/Form1.resx
new file mode 100644
index 0000000..066844e
--- /dev/null
+++ b/Launcheroid4/Form1.resx
@@ -0,0 +1,383 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
+ 87, 17
+
+
+
+
+ AAABAAMAEBAAAAEAIABoBAAANgAAACAgAAABACAAqBAAAJ4EAAAwMAAAAQAgAKglAABGFQAAKAAAABAA
+ AAAgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8BAAAAAAAAAAAAAAAA////AWtZ
+ OgUAAAAIGRkACpljAP+ZYwD/AAAAAAAAAADfvoIC////Av///wL///8B////AQAAAAAAAAAMNzc3Gi0t
+ LScAAAAxmWMA/5ljAP/2yHX/mWMA/5ljAP+ZYwD/AAAAA////wL///8C////Af///wEAAAALAAAAGC4u
+ LiUnJycxNSkmVvbIdf+ZYwD/VEZEcwAAADP2yHX/mWMA/wAAAA7V1dUD////Av///wH///8BAAAABQAA
+ AA83NzcaSDQwP4pratq9mpb/x6im/5ljAP+ZYwD/AAAAGwAAABJePgUK////Av///wL///8B////AQAA
+ AAAAAAAAdVRHJ4pvZtW3kor/mWMA/5ljAP/+66f/mWMA/5ljAP+ZYwD/AAAAAP///wH///8C////Af//
+ /wEAAAAAeFRNJIttZNKwioD/s4yB//7rp/+ZYwD/yaym/7eSiv/+66f/mWMA/wAAAAD///8C////Av//
+ /wH///8BeFRNJItmW9GpgnP/q4R1/6yFd/+uhnn/y7Kq/8qvp/+yi4D/s4yC/4tsYed/XFhC////Av//
+ /wL///8BfmlcIaSKfNvJsab/0Lyy/9C7sf/Mtav/mWMA/5ljAP+ZYwD/mWMA/5ljAP+ZYwD/h2Re5oJq
+ X0P///8C////AXtZTHLRvrf9zbes/824rf/Oua7/z7qv/5ljAP/rvpL/7MGV/+zBlf/rvpL/mWMA/6qC
+ cv+NbGKRioCAC////wEAAAAAoYZ9ltC+tf3KtKf/y7Wo/8y2qv+ZYwD/7MGV/+yhUv/soVL/67+S/5lj
+ AP+JZlunAAAAAP///wH///8B////AQAAAACfhnyWmWMA/5ljAP+ZYwD/mWMA//DNoP/xt2f/8LJf/+7H
+ lv+ZYwD/mWMA/5ljAP+ZYwD/////Af7+/gEAAAAAAAAAAJ+CepeZYwD/27qJ//bXqv/23K3/+M17//fO
+ f//23bP/9dev/ty9jv+ZYwD/69e5A////wH///8BAAAAAAAAAAD+/v4BoIZ3lpljAP/juGf//NmE//ze
+ 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
+ v//ZxsH/mWMA/5ljAP+ZYwD/mWMA//DNoP/xt2f/8LJf/+7Hlv+ZYwD/mWMA/5ljAP+ZYwD/AAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBRSYSFY1nzqoJz/6uEdf+shHb/rYV3/66Gef+uh3r/r4h7/7CJ
+ fP/Xw77/2MS+/9jEv/+5lYr/mWMA/9u6if/216r/9tyt//jNe//3zn//9t2z//XXr/7cvY7/mWMA/+C/
+ hAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuUUeEh2FT87CLff/Ksab/qoJz/7+hlf+/oJT/qoJz/6+I
+ e/+shHb/rYV3/7WShv/IraT/18K8/7+hmP+win3/mWMA/+O4Z//82YT//N6M//3fkP/72o7/5b10/5lj
+ AP/gv4QC/v7+AQAAAAAAAAAAAAAAAAAAAAAAAAAAblFFhKaOgPa+oZT/yK+k/9G8s//RvbT/0r20/863
+ rv+/opb/0buz/66HeP+pgXL/qoJz/7aUh//Vwbn/zbSs/62FeP+uh3n/mWMA/+7Pg//+7Kf//uun/+/Q
+ iP+ZYwD/5MaMAQAAAAD///8BAAAAAAAAAAAAAAAAVVUqBnBRR4SYe2r0yrOo/8+6r//PurD/z7qx/9C7
+ sf/Qu7L/0Lyy/9G8s//RvLP/upuN/7aUh/+winz/w6ab/9O/t//Tv7f/t5eJ/6uCdP+rhHX/mWMA//Hb
+ qP/x26b/mWMA/4RnXf9rTkbRpIeHBf///wEAAAAAAAAAAAAAAABmPz8UrpqU8dnIwP/Nt6z/zbit/824
+ rf/Oua7/zrmv/8+5r//PurD/z7qw/9C7sf/Qu7L/0Lux/62Id//Ls6n/xaqf/9K9tf/OuK7/q4Z2/6iA
+ b/+pgHH/mWMA/5ljAP+rg3T/p4By/4dpX/9vUk2a////AQAAAAAAAAAAAAAAAGYzMwVsTUV9zr+6+dnI
+ v//Mtqr/zLar/8y3q//Nt6z/zbis/824rf/OuK7/zrmu/865r//Puq//tZSF/6yHdv+ieWX/wKSX/9G8
+ s//IsKX/qYFw/6Z9a/+mfmz/p39u/6h/b/+pg3P/cVRNygAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AABsTUN9zr+4+djHvf/KtKf/y7Wo/8u1qf/Ltqr/zLaq/8y3q//Mt6z/zbes/824rf/OuK3/xKue/6B2
+ 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
+ AD/+AAB//wAA//+AAf//wAP//+AH///wD///+B////w////+f////3///////ygAAAAwAAAAYAAAAAEA
+ IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAABAAA
+ AAYAAAAHAAAACAAAAAgAAAAJAAAACAAAAAgAAAAHAAAABgAAAAQAAAACAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAcAAAAKAAAADQAA
+ ABAAAAASAAAAFAAAABYAAAAYAAAAGQAAABk2NjYbTU1NG01NTRtQUFAZUVFQGD4+PhUAAAASAAAAD4he
+ NBrAewD/wHsA/8B7AP/AewD/sHpGDgAAAAAAAAAAAAAAAP38+wL///8B////Af///wH///8BAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAEAAA
+ ABMAAAAXAAAAGgAAAB4AAAAhAAAAJAAAACYAAAAoAAAAKgAAACoqKiosKioqKysrKyoAAAAoAAAAJQAA
+ ACMAAAAgAAAAHQAAABnAewD/4KRL/+CkS//AewD/AAAABwAAAAMAAAAAAAAAAAAAAAD///8B////Af//
+ /wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAADAAA
+ ABEAAAAVAAAAGQAAAB4AAAAiAAAAJgAAACoAAAAuAAAAMQAAADUAAAA3AAAAOgAAADtWPjmiIyMjPCQk
+ JDoAAAA3AAAANMB7AP/AewD/wHsA/8B7AP/AewD/4KRL/+CkS//AewD/wHsA/8B7AP/AewD/wHsA/wAA
+ AAD///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAA
+ AAoAAAAOAAAAEwAAABcAAAAcAAAAIAAAACUAAAApAAAALgAAADIAAAA3AAAAOwAAAD8AAABEAAAASGJF
+ QfaMcXDxWUJBqh8fH0gAAABDAAAAPsB7AP/gpEv/4KRL/8B7AP/AewD/wHsA/8B7AP/AewD/wHsA/+Ck
+ S//gpEv/wHsA/wAAAAT///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAFAAAACQAAAA4AAAASAAAAFwAAABsAAAAfAAAAJAAAACgAAAAtAAAAMQAAADYAAAA6AAAAPgAA
+ AEIAAABGYEQ/9ZJ4ef+HcHH/fGNg9FlCQKoAAABFAAAAQcB7AP/fo0v/36NL/8B7AP8AAAAsAAAAJwAA
+ ACMAAAAewHsA/9+jS//fo0v/wHsA/wAAAAiJiYkE////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAIAAAAGAAAACwAAAA8AAAATAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAA
+ ADQAAAA4AAAAOwAAAD5fRD/1kXZ2/5d+fv+3mJn/loaG/4p3c/ZZQD2mIiIiPsB7AP/AewD/wHsA/8B7
+ AP8AAAArAAAAJwAAACMAAAAfwHsA/8B7AP/AewD/wHsA/wAAAApycnIGvLy8Av///wH///8BAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAACgAAAA8AAAATAAAAFwAAABsAAAAeAAAAIgAA
+ ACYAAAApAAAALQAAADAAAAAzAAAANWJHP/SOdHT/m399/8ShoP/Go6P/uZub/5aGhv+KcnH1WkI/oQAA
+ ADQAAAAyAAAALwAAACzAewD/wHsA/8B7AP/AewD/AAAAGQAAABYAAAARAAAADQAAAAlycnIGvLy8Av//
+ /wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAACQAAAAwAAAAQAAAAFAAA
+ ABcAAAAbAAAAHgAAACEAAAAkAAAAJwAAACoAAAAsYkc/9I5ycP+dgH//w5+d/8Ognv/EoZ//xKGf/7yf
+ n/+ajY3/iHFt9F5EP50AAAArAAAAKQAAACbAegD/+dWJ//zdj//AegD/AAAAFgAAABMAAAAPAAAACwAA
+ AAcAAAAD////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABQAA
+ AAkAAAAMAAAADwAAABMAAAAWAAAAGQAAABsAAAAeAAAAIAAAACJgR0Lzi3Bt/6GCgP/AnJj/wZ2Z/8Gd
+ mv/Cn5z/wp+d/9W8uv/Pvr3/mY2M/8B7AP/AewD/wHsA/8B7AP/AegD/+teK//zfkP/AegD/wHsA/8B7
+ AP/AewD/wHsA/wAAAAT///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAQAAAAQAAAAHAAAACgAAAA0AAAAQAAAAEgAAABUAAAAXAAAAGWBHQvOKbmr/o4N//76Z
+ lP++mpX/vpqW/7+blv/Fo6H/xaSh/9zHxv/gzcz/z7+9/8B6AP/51Yn//N2P/8B6AP+/egD/v3oA/796
+ AP+/egD/wHoA//nVif/83Y//wHoA/////wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAYAAAAJAAAACwAAAA0AAAAPY0VB8olt
+ aP+mhH//u5aQ/7uWkP+8l5H/vJiS/72Yk//ey8n/3svJ/97Myf/fzMr/2cPB/8B6AP/614r//N+Q/8B6
+ AP8AAAAPAAAADQAAAAsAAAAIwHoA//rXiv/835D/wHoA/////wH///8B////Af///wH///8BAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABAAA
+ AAZjREHyiGxm/6eFfv+4k4v/uZSM/7mUjf+6lY7/upWP/7uWj//bx8T/3crH/93KyP/ey8j/0bm0/796
+ AP+/egD/v3oA/796AP9qTUeLAAAABQAAAAMAAAABv3oA/796AP+/egD/v3oA/////wH///8B////Af//
+ /wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAGNEQfKJa2T/qIV9/7aQh/+2kIj/t5GJ/7eSif+4kor/uJOL/7mTjP+6lo7/zLCr/9zJ
+ xv/dysb/zLCr/7yXkf+8l5H/r42H/4FoZP93XFbxbU1JhwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
+ /wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAY0RB8olqYv+phHv/s42C/7SNg/+0joT/tY6F/7WPhv+2kIf/tpCH/7eR
+ iP+3kor/x6mj/9vIxP/cyMT/yKul/8B7AP/AewD/wHsA/8B7AP/AewD/wHsA/8B7AP/AewD/wHsA/8B7
+ AP/AewD/wHsA/////wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABjREHyiWph/6mEeP+xin7/sYp//7KLgP+yjIH/s4yB/7ON
+ gv+0jYP/tI6E/7WOhf+1kIb/xaag/9rHwv/ax8P/x6qk/8B7AP/two3/8riB//O6hP/zuoT/87qE//O6
+ hP/zuoT/87qE//K4gf/two3/wHsA/////wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBEQPKKamD/qYJ2/66Hev+vh3v/r4h7/7CI
+ fP+wiX3/sYl+/7GKf/+yi3//souA/7KMgf/AoJj/z7ex/9nGwf/ZxsH/ya2m/8B7AP/nsGv/651N/+uf
+ UP/rn1D/659Q/+ufUP/rn1D/659Q/+udTf/nsGv/wHsA/////wH///8B////Af///wH///8BAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYERA8oxqX/+ogXP/rIR1/6yE
+ dv+thXf/rYV4/62Gef+uh3n/rod6/6+Ie/+viHz/sIl9/7CJfv/YxL7/2MS+/9jEv//Yxb//zbOr/8B7
+ AP/nsGv/655O/+ygUv/soFL/7KBS/+ygUv/soFL/7KBS/+ueTv/nsGv/wHsA/////wH///8B////Af//
+ /wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgREDyjWpd/6h/
+ b/+pgXH/qYFy/6qCcv+qgnP/q4N0/6uDdf+shHb/rIV3/62Fd/+thnj/roZ5/66Hev/Pt6//z7ev/9fD
+ vP/Xw73/1L64/8B7AP/nsWz/651O/+ygUv/soFL/7KBS/+ygUv/soFL/7KBS/+ueTv/nsGv/wHsA////
+ /wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGNE
+ QvKPalz/pX1s/7aVhv/SvrX/tJKE/6uDdP+4l4r/07+3/7aUhv+qgXL/qoJz/7SQgv+rg3X/rIR1/6yE
+ dv+thnj/rYd5/861rv/Wwrz/18K8/8B7AP/osW3/7KBR/+ugUv/soFL/7KBS/+ygUv/roFH/66BR/+ud
+ Tv/nsGv/wHsA/////wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAY0RC8q+WjP+3l4j/t5aH/8ivpP/RvbT/0b20/9K9tP/SvbX/0r61/8ivpf+5mIv/vJ6R/9O/
+ t/+zj4H/qoFy/6qCc/+rgnT/q4N0/8Chlf/Vwbr/1cG6/8B7AP/nsm//7aRY/+6mWf/tpFX/7aRU/+2j
+ VP/to1P/7KFT/+ufT//nsGv/wHsA/2tLR4cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAABgQ0DymHJi/8+6sP/PurH/0Lux/9C7sf/Qu7L/0Lyy/9G8s//RvLP/0byz/9G9
+ tP/SvbT/0r21/9G8s/+pgnL/qH9u/6h/b//AewD/wHsA/8B7AP/AewD/wHsA/8B7AP/utnT/7q1f//Cx
+ ZP/wsmT/769c/++sWP/uqlb/7qhW/+2lUv/ssGv/wHsA/8B7AP/AewD/wHsA/8B7AP/AewD/AAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGVFQvKif2//yLGl/865rv/Oua//z7qv/8+6sP/PurD/z7qw/9C7
+ sf/Qu7H/0Luy/9C8sv/RvLL/0byz/9G8s//Ls6n/sY1+/8aroP+1k4X/wHsA/9ebSv/1xZX/8LFr//G1
+ bv/wtWj/8rdo//S6a//0vW7/9L5v//S8bv/zuWb/8bJd/++tV//uq1n/761h/+6pYP/1v4z/2J1I+sB7
+ AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZkhC1NPBuf/Xxr3/zbes/824rf/NuK3/zrit/865
+ rv/Oua7/zrmv/865r//Puq//z7qw/8+6sP/Pu7H/0Lux/9C7sv/Qu7L/0Lyy/9G8s/+0k4T/vqGU/8B7
+ AP/boEj/8r17//K2Z//0vWv/9cFw//bFc//3x3X/98l4//fJev/3yXv/9sd9//XDd//zu3D/8bVn//K5
+ dv/boUv/wHsA/2VOQ0T///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaU8+TZN8cfLs5OD/18W8/8y2
+ q//Mt6v/zbes/823rP/NuKz/zbit/824rf/OuK7/zrmu/865r//Oua//z7qv/8+6sP/PurD/z7qx/865
+ rv+pg3H/p4Bu/7STg//AewD/5LZu//jJgv/2xXP/98p4//nPe//50X7/+tOB//nTgv/50oT/+dCD//fO
+ hP/3yoT/98yQ/+nEiv/AewD/ZEZA8XBXTxr///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGVL
+ PmKTe3Dy7OTg/9bFu//Ltqn/y7aq/8y2qv/Mtqv/zLer/8y3rP/Nt6z/zbis/824rf/NuK3/zriu/865
+ rv/Oua7/zrmv/8+5r//FrKH/rYl3/7KRgf+heGT/wHsA/+jCfP/504X/+tN///zXhP/82ob//duJ//3c
+ i//824z/+9mM//rWjP/51ZP/7MuT/8B7AP9lSUDx/Pn0Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAABlSz5ikntw8uzk4P/WxLr/yrWo/8u1qP/Ltaj/y7Wp/8u2qv/Mtqr/zLaq/8y3
+ q//Mt6v/zbes/823rP/NuK3/zbit/864rf/Oua7/zrmu/8u0qf+heGT/oHZh/8B7AP/vz47//dyL//3f
+ jf/94pH//eKU//7jlf/94pX//eCV//zdlf/x1Jv/wHsA/2VKQfEAAAAA////Af///wH///8BAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZUg+YpJ6cPLs5N//1sS6/8q0pv/KtKf/yrSn/8q0
+ p//Ltaj/y7Wo/8u1qf/Ltqr/zLaq/8y2qv/Mtqv/zLer/8y3rP/Nt6z/zLer/6N8Z/+edF7/pX5r/8y2
+ qv/AewD/+uSp///nmv//6J3//+qh///pof//6KD//+eh//vns//AewD/aEtA8e/evwH///8B////Af//
+ /wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGVIPmKSe3Dy7OTe/9XE
+ uf/Js6X/ybOl/8mzpv/KtKb/yrSm/8q0p//KtKf/yrWo/8u1qP/Ltan/y7Wp/8u2qv/Mtqr/zLar/6eC
+ bv+ccVv/o3tm/8iwpP/EqZz/wHsA//3stv/+77D///G2///wtf/+7q///e24/8B7AP9oSkDxAAAAAP//
+ /wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AABlSD5ikXtv8uvj3v/Vw7n/yLKj/8iypP/IsqT/ybOl/8mzpf/Js6b/ybOm/8q0pv/KtKf/yrSn/8q1
+ p//Ltaj/y7Wo/76jlP+zlIL/m29Z/6B3Yf+cclr/nW5W/8B7AP//9tL///TN///0yv//9s//wHsA/3BO
+ P/Lu27oB////Af///wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAZUg+YpF6bvLr497/1cO4/8exov/HsaP/yLGj/8iyo//IsqT/yLKk/8my
+ pP/Js6X/ybOl/8mzpv/KtKb/yrSn/8q0p//Ks6b/mW1V/5luVv+ablf/mW5V/55tT//AewD///rk///5
+ 4v/AewD/e1I79AAAAAD+/fwB////Af///wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGVIPmKRem7y6+Pd/9TDt//GsKH/x7Ch/8ew
+ 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
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAABiRjlij3Zr8ung2v/SwLP/vaaV/2RFP/EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYkY5Yo1xafK8o5D/ZEU/8QAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJGOWJkRjvOAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AABfPz8YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAD///////8AAP//gAH//wAA//gAAAODAAD/wAAAAcMAAP8AAAAAQwAA/AAAAAADAAD8AAAAAAMAAPgA
+ AAAAAwAA+AAAAAADAAD4AAAAAAMAAPwAAAAAAwAA/gAAAAADAAD/gAAAAAMAAP/wAAAAAwAA//wAAB+D
+ AAD/+AAAAAMAAP/wAAAAAwAA/+AAAAADAAD/wAAAAAMAAP+AAAAAAwAA/wAAAAADAAD+AAAAAD8AAPwA
+ AAAAAwAA+AAAAAAHAADwAAAAAAMAAPAAAAAAAwAA+AAAAAADAAD8AAAAACMAAP4AAAAAAwAA/wAAAACD
+ AAD/gAAAAAMAAP/AAAACAwAA/+AAAAQDAAD/8AAACAMAAP/4AAAf/wAA//wAAD//AAD//gAAf/8AAP//
+ AAD//wAA//+AAf//AAD//8AD//8AAP//4Af//wAA///wD///AAD///gf//8AAP///D///wAA///+f///
+ AAD///9///8AAP///////wAA////////AAA=
+
+
+
\ No newline at end of file
diff --git a/Launcheroid4/LRD4.cs b/Launcheroid4/LRD4.cs
new file mode 100644
index 0000000..f23ba58
--- /dev/null
+++ b/Launcheroid4/LRD4.cs
@@ -0,0 +1,110 @@
+using System.Drawing.Imaging;
+using System.Text;
+
+namespace Launcheroid
+{
+ public class LRD4
+ {
+ public class Item
+ {
+ public string Name { get; set; }
+ public string Path { get; set; }
+ public string Arguments { get; set; }
+ public string InitialFolder { get; set; }
+ public Image Image { get; set; }
+ }
+
+ public LRD4()
+ {
+ Reset();
+ }
+
+ public void Reset()
+ {
+ NavigationRoot = null;
+ IconSize = 48;
+ IconSpacing = 5;
+ IconMargin = 7;
+ Items.Clear();
+ }
+
+ #region Load/Save
+ ///
+ /// Load all information from file
+ ///
+ ///
+ public void Load(string path)
+ {
+ if (!File.Exists(path))
+ return;
+ Reset();
+ }
+
+ ///
+ /// Save the current information to a file
+ ///
+ ///
+ public void Save(string path)
+ {
+ using FileStream fs = new(path, FileMode.OpenOrCreate, FileAccess.Write);
+ using StreamWriter sw = new(fs, Encoding.UTF8);
+ sw.WriteLine("// Launcheroid4 file (Text mode) Autogenerated by Lancheroid on " + DateTime.Now.ToString());
+ sw.WriteLine("// Launcheroid4 by XWolfOverride in 2025");
+ sw.WriteLine();
+ // Create JSON version
+ foreach (Item i in Items)
+ {
+ sw.WriteLine("[Item]");
+ sw.Write("name:"); sw.WriteLine(i.Name);
+ sw.Write("path:"); sw.WriteLine(i.Path);
+ sw.Write("idir:"); sw.WriteLine(i.InitialFolder);
+ sw.Write("args:"); sw.WriteLine(i.Arguments);
+ sw.Write("icon:"); sw.WriteLine(Image64(i.Image));
+ sw.WriteLine("");
+ }
+ sw.WriteLine("[Settings]");
+ sw.Write("root:"); sw.WriteLine(NavigationRoot);
+ sw.Write("size:"); sw.WriteLine(IconSize);
+ sw.Write("spac:"); sw.WriteLine(IconSpacing);
+ sw.Write("marg:"); sw.WriteLine(IconMargin);
+ }
+
+ private string Image64(Image i)
+ {
+ if (i == null)
+ return "";
+ MemoryStream ms = new MemoryStream();
+ i.Save(ms, ImageFormat.Png);
+ ms.Close();
+ byte[] data = ms.GetBuffer();
+ return Convert.ToBase64String(data);
+ }
+ #endregion
+
+ ///
+ /// Navigation root for navigation panel (if not null)
+ /// use '/' for root
+ ///
+ public string NavigationRoot { get; set; }
+
+ ///
+ /// Size (in pixels) of icons in screen
+ ///
+ public int IconSize { get; set; }
+
+ ///
+ /// Size (in pixels) of spacing between icons
+ ///
+ public int IconSpacing { get; set; }
+
+ ///
+ /// Size (in pixels) of between icons and window frame
+ ///
+ public int IconMargin { get; set; }
+
+ ///
+ /// List of items in Launcher
+ ///
+ public List- Items { get; } = new List
- ();
+ }
+}
diff --git a/Launcheroid4/Launcheroid4.csproj b/Launcheroid4/Launcheroid4.csproj
new file mode 100644
index 0000000..acfbf20
--- /dev/null
+++ b/Launcheroid4/Launcheroid4.csproj
@@ -0,0 +1,16 @@
+
+
+
+ WinExe
+ net8.0-windows
+ enable
+ true
+ enable
+ res\AppIconLN.ico
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Launcheroid4/Program.cs b/Launcheroid4/Program.cs
new file mode 100644
index 0000000..3ac5804
--- /dev/null
+++ b/Launcheroid4/Program.cs
@@ -0,0 +1,17 @@
+namespace Launcheroid4
+{
+ internal static class Program
+ {
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ // To customize application configuration such as set high DPI settings or default font,
+ // see https://aka.ms/applicationconfiguration.
+ ApplicationConfiguration.Initialize();
+ Application.Run(new Form1());
+ }
+ }
+}
\ No newline at end of file
diff --git a/Launcheroid4/res/AppIcon.ico b/Launcheroid4/res/AppIcon.ico
new file mode 100644
index 0000000..1fcba38
--- /dev/null
+++ b/Launcheroid4/res/AppIcon.ico
Binary files differ
diff --git a/Launcheroid4/res/AppIconLN - copia.ico b/Launcheroid4/res/AppIconLN - copia.ico
new file mode 100644
index 0000000..3b09534
--- /dev/null
+++ b/Launcheroid4/res/AppIconLN - copia.ico
Binary files differ
diff --git a/Launcheroid4/res/AppIconLN.ico b/Launcheroid4/res/AppIconLN.ico
new file mode 100644
index 0000000..3b09534
--- /dev/null
+++ b/Launcheroid4/res/AppIconLN.ico
Binary files differ
diff --git a/Launcheroid4/res/AppIconLN.png b/Launcheroid4/res/AppIconLN.png
new file mode 100644
index 0000000..464e67f
--- /dev/null
+++ b/Launcheroid4/res/AppIconLN.png
Binary files differ
diff --git a/Launcheroid4/res/BlueLauncher.ico b/Launcheroid4/res/BlueLauncher.ico
new file mode 100644
index 0000000..ce77a12
--- /dev/null
+++ b/Launcheroid4/res/BlueLauncher.ico
Binary files differ
diff --git a/Launcheroid4/res/Gnome App Green.ico b/Launcheroid4/res/Gnome App Green.ico
new file mode 100644
index 0000000..340605b
--- /dev/null
+++ b/Launcheroid4/res/Gnome App Green.ico
Binary files differ
diff --git a/Launcheroid4/res/WhiteLauncher.ico b/Launcheroid4/res/WhiteLauncher.ico
new file mode 100644
index 0000000..77326a3
--- /dev/null
+++ b/Launcheroid4/res/WhiteLauncher.ico
Binary files differ
diff --git a/Launcheroid4/res/imgbg.png b/Launcheroid4/res/imgbg.png
new file mode 100644
index 0000000..4a250e0
--- /dev/null
+++ b/Launcheroid4/res/imgbg.png
Binary files differ
diff --git a/V3/App.config b/V3/App.config
new file mode 100644
index 0000000..4bfa005
--- /dev/null
+++ b/V3/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/V3/AppIconLN.ico b/V3/AppIconLN.ico
new file mode 100644
index 0000000..3b09534
--- /dev/null
+++ b/V3/AppIconLN.ico
Binary files differ
diff --git a/V3/FImageLoad.Designer.cs b/V3/FImageLoad.Designer.cs
new file mode 100644
index 0000000..220b4a6
--- /dev/null
+++ b/V3/FImageLoad.Designer.cs
@@ -0,0 +1,46 @@
+namespace Launcheroid
+{
+ partial class FImageLoad
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.SuspendLayout();
+ //
+ // FImageLoad
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(454, 439);
+ this.Name = "FImageLoad";
+ this.Text = "FImageLoad";
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/V3/FImageLoad.cs b/V3/FImageLoad.cs
new file mode 100644
index 0000000..f34d62b
--- /dev/null
+++ b/V3/FImageLoad.cs
@@ -0,0 +1,64 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Drawing.Imaging;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Launcheroid
+{
+ public partial class FImageLoad : Form
+ {
+ private FImageLoad()
+ {
+ InitializeComponent();
+ }
+
+ public static bool IsImage(string path)
+ {
+ try
+ {
+ using (Image i = Image.FromFile(path))
+ return true;
+ }
+ catch { };
+ return false;
+ }
+
+ public static Image Open(string path)
+ {
+ try
+ {
+ return Image.FromFile(path);
+ }
+ catch
+ {
+ return null;
+ }
+ }
+
+ public static Image Open()
+ {
+ string allim = "";
+ string types = "";
+ ImageCodecInfo[] decs = ImageCodecInfo.GetImageDecoders();
+ foreach (ImageCodecInfo ici in decs)
+ {
+ types += "|" + ici.FormatDescription + " (" + ici.CodecName + ")" + "|" + ici.FilenameExtension;
+ allim += ";" + ici.FilenameExtension;
+ }
+ types = "All images|" + allim.Substring(1) + types + "|All files|*.*";
+ using (OpenFileDialog ofd = new OpenFileDialog())
+ {
+ ofd.Filter = types;
+ if (ofd.ShowDialog() == DialogResult.OK)
+ return Open(ofd.FileName);
+ }
+ return null;
+ }
+ }
+}
diff --git a/V3/FImageLoad.resx b/V3/FImageLoad.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/V3/FImageLoad.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/V3/FItem.Designer.cs b/V3/FItem.Designer.cs
new file mode 100644
index 0000000..744e009
--- /dev/null
+++ b/V3/FItem.Designer.cs
@@ -0,0 +1,243 @@
+namespace Launcheroid
+{
+ partial class FItem
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ this.lbName = new System.Windows.Forms.Label();
+ this.tbName = new System.Windows.Forms.TextBox();
+ this.tbPath = new System.Windows.Forms.TextBox();
+ this.lbPath = new System.Windows.Forms.Label();
+ this.tbDirectory = new System.Windows.Forms.TextBox();
+ this.lbDir = new System.Windows.Forms.Label();
+ this.tbArguments = new System.Windows.Forms.TextBox();
+ this.lbArgs = new System.Windows.Forms.Label();
+ this.btOk = new System.Windows.Forms.Button();
+ this.btPathGet = new System.Windows.Forms.Button();
+ this.btDirectoryGet = new System.Windows.Forms.Button();
+ this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
+ this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.pbIcon = new System.Windows.Forms.PictureBox();
+ this.contextMenuStrip1.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.pbIcon)).BeginInit();
+ this.SuspendLayout();
+ //
+ // lbName
+ //
+ this.lbName.AutoSize = true;
+ this.lbName.Location = new System.Drawing.Point(146, 15);
+ this.lbName.Name = "lbName";
+ this.lbName.Size = new System.Drawing.Size(38, 13);
+ this.lbName.TabIndex = 1;
+ this.lbName.Text = "Name:";
+ //
+ // tbName
+ //
+ this.tbName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.tbName.Location = new System.Drawing.Point(204, 12);
+ this.tbName.Name = "tbName";
+ this.tbName.Size = new System.Drawing.Size(268, 20);
+ this.tbName.TabIndex = 2;
+ this.tbName.TextChanged += new System.EventHandler(this.TbName_TextChanged);
+ //
+ // tbPath
+ //
+ this.tbPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.tbPath.Location = new System.Drawing.Point(204, 38);
+ this.tbPath.Name = "tbPath";
+ this.tbPath.Size = new System.Drawing.Size(238, 20);
+ this.tbPath.TabIndex = 4;
+ //
+ // lbPath
+ //
+ this.lbPath.AutoSize = true;
+ this.lbPath.Location = new System.Drawing.Point(146, 41);
+ this.lbPath.Name = "lbPath";
+ this.lbPath.Size = new System.Drawing.Size(32, 13);
+ this.lbPath.TabIndex = 3;
+ this.lbPath.Text = "Path:";
+ //
+ // tbDirectory
+ //
+ this.tbDirectory.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.tbDirectory.Location = new System.Drawing.Point(204, 64);
+ this.tbDirectory.Name = "tbDirectory";
+ this.tbDirectory.Size = new System.Drawing.Size(238, 20);
+ this.tbDirectory.TabIndex = 6;
+ //
+ // lbDir
+ //
+ this.lbDir.AutoSize = true;
+ this.lbDir.Location = new System.Drawing.Point(146, 67);
+ this.lbDir.Name = "lbDir";
+ this.lbDir.Size = new System.Drawing.Size(52, 13);
+ this.lbDir.TabIndex = 5;
+ this.lbDir.Text = "Directory:";
+ //
+ // tbArguments
+ //
+ this.tbArguments.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.tbArguments.Location = new System.Drawing.Point(211, 90);
+ this.tbArguments.Name = "tbArguments";
+ this.tbArguments.Size = new System.Drawing.Size(261, 20);
+ this.tbArguments.TabIndex = 8;
+ //
+ // lbArgs
+ //
+ this.lbArgs.AutoSize = true;
+ this.lbArgs.Location = new System.Drawing.Point(146, 93);
+ this.lbArgs.Name = "lbArgs";
+ this.lbArgs.Size = new System.Drawing.Size(60, 13);
+ this.lbArgs.TabIndex = 7;
+ this.lbArgs.Text = "Arguments:";
+ //
+ // btOk
+ //
+ this.btOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.btOk.Location = new System.Drawing.Point(397, 117);
+ this.btOk.Name = "btOk";
+ this.btOk.Size = new System.Drawing.Size(75, 23);
+ this.btOk.TabIndex = 9;
+ this.btOk.Text = "Ok";
+ this.btOk.UseVisualStyleBackColor = true;
+ this.btOk.Click += new System.EventHandler(this.BtOk_Click);
+ //
+ // btPathGet
+ //
+ this.btPathGet.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btPathGet.Location = new System.Drawing.Point(448, 38);
+ this.btPathGet.Name = "btPathGet";
+ this.btPathGet.Size = new System.Drawing.Size(24, 20);
+ this.btPathGet.TabIndex = 10;
+ this.btPathGet.Text = "...";
+ this.btPathGet.UseVisualStyleBackColor = true;
+ this.btPathGet.Click += new System.EventHandler(this.BtPathGet_Click);
+ //
+ // btDirectoryGet
+ //
+ this.btDirectoryGet.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btDirectoryGet.Location = new System.Drawing.Point(448, 64);
+ this.btDirectoryGet.Name = "btDirectoryGet";
+ this.btDirectoryGet.Size = new System.Drawing.Size(24, 20);
+ this.btDirectoryGet.TabIndex = 11;
+ this.btDirectoryGet.Text = "...";
+ this.btDirectoryGet.UseVisualStyleBackColor = true;
+ //
+ // contextMenuStrip1
+ //
+ this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.openToolStripMenuItem,
+ this.deleteToolStripMenuItem});
+ this.contextMenuStrip1.Name = "contextMenuStrip1";
+ this.contextMenuStrip1.Size = new System.Drawing.Size(108, 48);
+ this.contextMenuStrip1.Opening += new System.ComponentModel.CancelEventHandler(this.ContextMenuStrip1_Opening);
+ //
+ // openToolStripMenuItem
+ //
+ this.openToolStripMenuItem.Name = "openToolStripMenuItem";
+ this.openToolStripMenuItem.Size = new System.Drawing.Size(107, 22);
+ this.openToolStripMenuItem.Text = "Open";
+ this.openToolStripMenuItem.Click += new System.EventHandler(this.OpenToolStripMenuItem_Click);
+ //
+ // deleteToolStripMenuItem
+ //
+ this.deleteToolStripMenuItem.Name = "deleteToolStripMenuItem";
+ this.deleteToolStripMenuItem.Size = new System.Drawing.Size(107, 22);
+ this.deleteToolStripMenuItem.Text = "Delete";
+ this.deleteToolStripMenuItem.Click += new System.EventHandler(this.DeleteToolStripMenuItem_Click);
+ //
+ // pbIcon
+ //
+ this.pbIcon.BackgroundImage = global::Launcheroid.Properties.Resources.imgbg;
+ this.pbIcon.ContextMenuStrip = this.contextMenuStrip1;
+ this.pbIcon.Location = new System.Drawing.Point(12, 12);
+ this.pbIcon.Name = "pbIcon";
+ this.pbIcon.Size = new System.Drawing.Size(128, 128);
+ this.pbIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
+ this.pbIcon.TabIndex = 0;
+ this.pbIcon.TabStop = false;
+ //
+ // FItem
+ //
+ this.AllowDrop = true;
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(484, 152);
+ this.Controls.Add(this.btDirectoryGet);
+ this.Controls.Add(this.btPathGet);
+ this.Controls.Add(this.btOk);
+ this.Controls.Add(this.tbArguments);
+ this.Controls.Add(this.lbArgs);
+ this.Controls.Add(this.tbDirectory);
+ this.Controls.Add(this.lbDir);
+ this.Controls.Add(this.tbPath);
+ this.Controls.Add(this.lbPath);
+ this.Controls.Add(this.tbName);
+ this.Controls.Add(this.lbName);
+ this.Controls.Add(this.pbIcon);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;
+ this.MaximumSize = new System.Drawing.Size(900, 191);
+ this.MinimumSize = new System.Drawing.Size(500, 191);
+ this.Name = "FItem";
+ this.ShowIcon = false;
+ this.ShowInTaskbar = false;
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "FItem";
+ this.DragDrop += new System.Windows.Forms.DragEventHandler(this.FItem_DragDrop);
+ this.DragEnter += new System.Windows.Forms.DragEventHandler(this.FItem_DragEnter);
+ this.contextMenuStrip1.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.pbIcon)).EndInit();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.PictureBox pbIcon;
+ private System.Windows.Forms.Label lbName;
+ private System.Windows.Forms.TextBox tbName;
+ private System.Windows.Forms.TextBox tbPath;
+ private System.Windows.Forms.Label lbPath;
+ private System.Windows.Forms.TextBox tbDirectory;
+ private System.Windows.Forms.Label lbDir;
+ private System.Windows.Forms.TextBox tbArguments;
+ private System.Windows.Forms.Label lbArgs;
+ private System.Windows.Forms.Button btOk;
+ private System.Windows.Forms.Button btPathGet;
+ private System.Windows.Forms.Button btDirectoryGet;
+ private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
+ private System.Windows.Forms.ToolStripMenuItem openToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem;
+ }
+}
\ No newline at end of file
diff --git a/V3/FItem.cs b/V3/FItem.cs
new file mode 100644
index 0000000..74a5393
--- /dev/null
+++ b/V3/FItem.cs
@@ -0,0 +1,139 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Launcheroid
+{
+ public partial class FItem : Form
+ {
+ private FItem()
+ {
+ InitializeComponent();
+ }
+
+ private static bool Open(LRD3.Item item, string import)
+ {
+ bool saved;
+ using (FItem f = new FItem())
+ {
+ f.LoadItem(item);
+ f.LinkToPath(import);
+ saved = f.ShowDialog() == DialogResult.OK;
+ if (saved)
+ f.SaveItem(item);
+ }
+ return saved;
+ }
+
+ public static bool Execute(LRD3.Item item)
+ {
+ return Open(item, null);
+ }
+
+ public static LRD3.Item Import(string path)
+ {
+ LRD3.Item i = new LRD3.Item();
+ if (Open(i, path))
+ return i;
+ return null;
+ }
+
+ private void LoadItem(LRD3.Item item)
+ {
+ tbName.Text = Text = item.Name;
+ tbPath.Text = item.Path;
+ tbDirectory.Text = item.InitialFolder;
+ tbArguments.Text = item.Arguments;
+ pbIcon.Image = item.Image;
+ }
+
+ private void SaveItem(LRD3.Item item)
+ {
+ item.Name = tbName.Text;
+ item.Path = tbPath.Text;
+ item.InitialFolder = tbDirectory.Text;
+ item.Arguments = tbArguments.Text;
+ item.Image = pbIcon.Image;
+ }
+
+ private void LinkToPath(string path)
+ {
+ // TODO if it is a link (.lnk) open link and recover information
+ tbName.Text = Text = Path.GetFileNameWithoutExtension(path);
+ tbPath.Text = path;
+ tbDirectory.Text = Path.GetDirectoryName(path);
+ try
+ {
+ pbIcon.Image = Icon.ExtractAssociatedIcon(path).ToBitmap();
+ }
+ catch
+ {
+ pbIcon.Image = null;
+ }
+ }
+
+ private void BtOk_Click(object sender, EventArgs e)
+ {
+ DialogResult = DialogResult.OK;
+ }
+
+ private void TbName_TextChanged(object sender, EventArgs e)
+ {
+ Text = tbName.Text;
+ }
+
+ private void OpenToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ Image i = FImageLoad.Open();
+ if (i != null)
+ pbIcon.Image = i;
+ }
+
+ private void DeleteToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ pbIcon.Image = null;
+ }
+
+ private void FItem_DragEnter(object sender, DragEventArgs e)
+ {
+ if (!e.Data.GetDataPresent(DataFormats.FileDrop))
+ return;
+ e.Effect = DragDropEffects.Copy;
+ }
+
+ private void FItem_DragDrop(object sender, DragEventArgs e)
+ {
+ string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
+ if (files.Length != 1)
+ return;
+ Point cp = PointToClient(new Point(e.X, e.Y));
+ Control dropTarget = GetChildAtPoint(cp);
+ if (dropTarget == pbIcon)
+ pbIcon.Image = FImageLoad.Open(files[0]);
+ else
+ LinkToPath(files[0]);
+ }
+
+ private void BtPathGet_Click(object sender, EventArgs e)
+ {
+ using (OpenFileDialog ofd = new OpenFileDialog())
+ {
+ ofd.Filter = "Executables|*.exe;*.com;*.lnk|All files|*.*";
+ if (ofd.ShowDialog() == DialogResult.OK)
+ LinkToPath(ofd.FileName);
+ }
+ }
+
+ private void ContextMenuStrip1_Opening(object sender, CancelEventArgs e)
+ {
+ deleteToolStripMenuItem.Enabled = pbIcon.Image != null;
+ }
+ }
+}
diff --git a/V3/FItem.resx b/V3/FItem.resx
new file mode 100644
index 0000000..ad53752
--- /dev/null
+++ b/V3/FItem.resx
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
\ No newline at end of file
diff --git a/V3/Form1.Designer.cs b/V3/Form1.Designer.cs
new file mode 100644
index 0000000..ebb6b49
--- /dev/null
+++ b/V3/Form1.Designer.cs
@@ -0,0 +1,147 @@
+namespace Launcheroid
+{
+ partial class Form1
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
+ this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
+ this.executeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.executeWithOptionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
+ this.propertiesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator();
+ this.addItemToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.deleteItemToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripSeparator();
+ this.settingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.contextMenuStrip1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // contextMenuStrip1
+ //
+ this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.executeToolStripMenuItem,
+ this.executeWithOptionsToolStripMenuItem,
+ this.toolStripMenuItem1,
+ this.propertiesToolStripMenuItem,
+ this.toolStripMenuItem2,
+ this.addItemToolStripMenuItem,
+ this.deleteItemToolStripMenuItem,
+ this.toolStripMenuItem3,
+ this.settingsToolStripMenuItem});
+ this.contextMenuStrip1.Name = "contextMenuStrip1";
+ this.contextMenuStrip1.Size = new System.Drawing.Size(193, 154);
+ //
+ // executeToolStripMenuItem
+ //
+ this.executeToolStripMenuItem.Name = "executeToolStripMenuItem";
+ this.executeToolStripMenuItem.Size = new System.Drawing.Size(192, 22);
+ this.executeToolStripMenuItem.Text = "Execute";
+ //
+ // executeWithOptionsToolStripMenuItem
+ //
+ this.executeWithOptionsToolStripMenuItem.Name = "executeWithOptionsToolStripMenuItem";
+ this.executeWithOptionsToolStripMenuItem.Size = new System.Drawing.Size(192, 22);
+ this.executeWithOptionsToolStripMenuItem.Text = "Execute with options...";
+ //
+ // toolStripMenuItem1
+ //
+ this.toolStripMenuItem1.Name = "toolStripMenuItem1";
+ this.toolStripMenuItem1.Size = new System.Drawing.Size(189, 6);
+ //
+ // propertiesToolStripMenuItem
+ //
+ this.propertiesToolStripMenuItem.Name = "propertiesToolStripMenuItem";
+ this.propertiesToolStripMenuItem.Size = new System.Drawing.Size(192, 22);
+ this.propertiesToolStripMenuItem.Text = "Properties";
+ //
+ // toolStripMenuItem2
+ //
+ this.toolStripMenuItem2.Name = "toolStripMenuItem2";
+ this.toolStripMenuItem2.Size = new System.Drawing.Size(189, 6);
+ //
+ // addItemToolStripMenuItem
+ //
+ this.addItemToolStripMenuItem.Name = "addItemToolStripMenuItem";
+ this.addItemToolStripMenuItem.Size = new System.Drawing.Size(192, 22);
+ this.addItemToolStripMenuItem.Text = "Add item";
+ this.addItemToolStripMenuItem.Click += new System.EventHandler(this.AddItemToolStripMenuItem_Click);
+ //
+ // deleteItemToolStripMenuItem
+ //
+ this.deleteItemToolStripMenuItem.Name = "deleteItemToolStripMenuItem";
+ this.deleteItemToolStripMenuItem.Size = new System.Drawing.Size(192, 22);
+ this.deleteItemToolStripMenuItem.Text = "Delete item";
+ //
+ // toolStripMenuItem3
+ //
+ this.toolStripMenuItem3.Name = "toolStripMenuItem3";
+ this.toolStripMenuItem3.Size = new System.Drawing.Size(189, 6);
+ //
+ // settingsToolStripMenuItem
+ //
+ this.settingsToolStripMenuItem.Name = "settingsToolStripMenuItem";
+ this.settingsToolStripMenuItem.Size = new System.Drawing.Size(192, 22);
+ this.settingsToolStripMenuItem.Text = "Settings";
+ //
+ // Form1
+ //
+ this.AllowDrop = true;
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 450);
+ this.ContextMenuStrip = this.contextMenuStrip1;
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "Form1";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
+ this.DragDrop += new System.Windows.Forms.DragEventHandler(this.Form1_DragDrop);
+ this.DragEnter += new System.Windows.Forms.DragEventHandler(this.Form1_DragEnter);
+ this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);
+ this.contextMenuStrip1.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
+ private System.Windows.Forms.ToolStripMenuItem executeToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem executeWithOptionsToolStripMenuItem;
+ private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;
+ private System.Windows.Forms.ToolStripMenuItem propertiesToolStripMenuItem;
+ private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2;
+ private System.Windows.Forms.ToolStripMenuItem addItemToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem deleteItemToolStripMenuItem;
+ private System.Windows.Forms.ToolStripSeparator toolStripMenuItem3;
+ private System.Windows.Forms.ToolStripMenuItem settingsToolStripMenuItem;
+ }
+}
+
diff --git a/V3/Form1.cs b/V3/Form1.cs
new file mode 100644
index 0000000..7b73181
--- /dev/null
+++ b/V3/Form1.cs
@@ -0,0 +1,95 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using XWolf.Aero;
+
+namespace Launcheroid
+{
+ public partial class Form1 : XGlassForm
+ {
+ private const int WM_NCHITTEST = 0x0084;
+ private static IntPtr HTCAPTION = (IntPtr)2;
+
+ private LRD3 lib = new LRD3();
+ private string libPath;
+
+ public Form1()
+ {
+ InitializeComponent();
+ FullGlass = true;
+ GoToCursor();
+ libPath = Program.ArgumentFile;
+ if (string.IsNullOrEmpty(libPath))
+ libPath = Program.DefaultFile;
+ lib.Load(libPath);
+ }
+
+ protected override void WndProc(ref Message message)
+ {
+ base.WndProc(ref message);
+ if (message.Msg == WM_NCHITTEST)
+ {
+ int r = message.Result.ToInt32();
+ if (r >= 10 && r <= 18)
+ message.Result = HTCAPTION;
+ }
+ }
+
+ private void GoToCursor()
+ {
+ Point c = Cursor.Position;
+ c.X -= Width / 2;
+ if (c.X < 0)
+ c.X = 0;
+ c.Y -= Height / 2;
+ if (c.Y < 0)
+ c.Y = 0;
+ Location = c;
+ }
+
+ private void UpdateLibrary()
+ {
+
+ }
+
+ private void Add(LRD3.Item item)
+ {
+ lib.Items.Add(item);
+ lib.Save(libPath);
+ UpdateLibrary();
+ }
+
+ private void Form1_Paint(object sender, PaintEventArgs e)
+ {
+
+ }
+
+ private void AddItemToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ LRD3.Item item = new LRD3.Item();
+ if (FItem.Execute(item))
+ Add(item);
+ }
+
+ private void Form1_DragEnter(object sender, DragEventArgs e)
+ {
+ if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy;
+ }
+
+ private void Form1_DragDrop(object sender, DragEventArgs e)
+ {
+ string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
+ if (files.Length != 1)
+ return;
+ LRD3.Item item = FItem.Import(files[0]);
+ if (item != null)
+ Add(item);
+ }
+ }
+}
diff --git a/V3/Form1.resx b/V3/Form1.resx
new file mode 100644
index 0000000..783b959
--- /dev/null
+++ b/V3/Form1.resx
@@ -0,0 +1,380 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
+
+
+ AAABAAMAEBAAAAEAIABoBAAANgAAACAgAAABACAAqBAAAJ4EAAAwMAAAAQAgAKglAABGFQAAKAAAABAA
+ AAAgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8BAAAAAAAAAAAAAAAA////AWtZ
+ OgUAAAAIGRkACpljAP+ZYwD/AAAAAAAAAADfvoIC////Av///wL///8B////AQAAAAAAAAAMNzc3Gi0t
+ LScAAAAxmWMA/5ljAP/2yHX/mWMA/5ljAP+ZYwD/AAAAA////wL///8C////Af///wEAAAALAAAAGC4u
+ LiUnJycxNSkmVvbIdf+ZYwD/VEZEcwAAADP2yHX/mWMA/wAAAA7V1dUD////Av///wH///8BAAAABQAA
+ AA83NzcaSDQwP4pratq9mpb/x6im/5ljAP+ZYwD/AAAAGwAAABJePgUK////Av///wL///8B////AQAA
+ AAAAAAAAdVRHJ4pvZtW3kor/mWMA/5ljAP/+66f/mWMA/5ljAP+ZYwD/AAAAAP///wH///8C////Af//
+ /wEAAAAAeFRNJIttZNKwioD/s4yB//7rp/+ZYwD/yaym/7eSiv/+66f/mWMA/wAAAAD///8C////Av//
+ /wH///8BeFRNJItmW9GpgnP/q4R1/6yFd/+uhnn/y7Kq/8qvp/+yi4D/s4yC/4tsYed/XFhC////Av//
+ /wL///8BfmlcIaSKfNvJsab/0Lyy/9C7sf/Mtav/mWMA/5ljAP+ZYwD/mWMA/5ljAP+ZYwD/h2Re5oJq
+ X0P///8C////AXtZTHLRvrf9zbes/824rf/Oua7/z7qv/5ljAP/rvpL/7MGV/+zBlf/rvpL/mWMA/6qC
+ cv+NbGKRioCAC////wEAAAAAoYZ9ltC+tf3KtKf/y7Wo/8y2qv+ZYwD/7MGV/+yhUv/soVL/67+S/5lj
+ AP+JZlunAAAAAP///wH///8B////AQAAAACfhnyWmWMA/5ljAP+ZYwD/mWMA//DNoP/xt2f/8LJf/+7H
+ lv+ZYwD/mWMA/5ljAP+ZYwD/////Af7+/gEAAAAAAAAAAJ+CepeZYwD/27qJ//bXqv/23K3/+M17//fO
+ f//23bP/9dev/ty9jv+ZYwD/69e5A////wH///8BAAAAAAAAAAD+/v4BoIZ3lpljAP/juGf//NmE//ze
+ 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
+ v//ZxsH/mWMA/5ljAP+ZYwD/mWMA//DNoP/xt2f/8LJf/+7Hlv+ZYwD/mWMA/5ljAP+ZYwD/AAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBRSYSFY1nzqoJz/6uEdf+shHb/rYV3/66Gef+uh3r/r4h7/7CJ
+ fP/Xw77/2MS+/9jEv/+5lYr/mWMA/9u6if/216r/9tyt//jNe//3zn//9t2z//XXr/7cvY7/mWMA/+C/
+ hAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuUUeEh2FT87CLff/Ksab/qoJz/7+hlf+/oJT/qoJz/6+I
+ e/+shHb/rYV3/7WShv/IraT/18K8/7+hmP+win3/mWMA/+O4Z//82YT//N6M//3fkP/72o7/5b10/5lj
+ AP/gv4QC/v7+AQAAAAAAAAAAAAAAAAAAAAAAAAAAblFFhKaOgPa+oZT/yK+k/9G8s//RvbT/0r20/863
+ rv+/opb/0buz/66HeP+pgXL/qoJz/7aUh//Vwbn/zbSs/62FeP+uh3n/mWMA/+7Pg//+7Kf//uun/+/Q
+ iP+ZYwD/5MaMAQAAAAD///8BAAAAAAAAAAAAAAAAVVUqBnBRR4SYe2r0yrOo/8+6r//PurD/z7qx/9C7
+ sf/Qu7L/0Lyy/9G8s//RvLP/upuN/7aUh/+winz/w6ab/9O/t//Tv7f/t5eJ/6uCdP+rhHX/mWMA//Hb
+ qP/x26b/mWMA/4RnXf9rTkbRpIeHBf///wEAAAAAAAAAAAAAAABmPz8UrpqU8dnIwP/Nt6z/zbit/824
+ rf/Oua7/zrmv/8+5r//PurD/z7qw/9C7sf/Qu7L/0Lux/62Id//Ls6n/xaqf/9K9tf/OuK7/q4Z2/6iA
+ b/+pgHH/mWMA/5ljAP+rg3T/p4By/4dpX/9vUk2a////AQAAAAAAAAAAAAAAAGYzMwVsTUV9zr+6+dnI
+ v//Mtqr/zLar/8y3q//Nt6z/zbis/824rf/OuK7/zrmu/865r//Puq//tZSF/6yHdv+ieWX/wKSX/9G8
+ s//IsKX/qYFw/6Z9a/+mfmz/p39u/6h/b/+pg3P/cVRNygAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AABsTUN9zr+4+djHvf/KtKf/y7Wo/8u1qf/Ltqr/zLaq/8y3q//Mt6z/zbes/824rf/OuK3/xKue/6B2
+ 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
+ AD/+AAB//wAA//+AAf//wAP//+AH///wD///+B////w////+f////3///////ygAAAAwAAAAYAAAAAEA
+ IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAABAAA
+ AAYAAAAHAAAACAAAAAgAAAAJAAAACAAAAAgAAAAHAAAABgAAAAQAAAACAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAcAAAAKAAAADQAA
+ ABAAAAASAAAAFAAAABYAAAAYAAAAGQAAABk2NjYbTU1NG01NTRtQUFAZUVFQGD4+PhUAAAASAAAAD4he
+ NBrAewD/wHsA/8B7AP/AewD/sHpGDgAAAAAAAAAAAAAAAP38+wL///8B////Af///wH///8BAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAEAAA
+ ABMAAAAXAAAAGgAAAB4AAAAhAAAAJAAAACYAAAAoAAAAKgAAACoqKiosKioqKysrKyoAAAAoAAAAJQAA
+ ACMAAAAgAAAAHQAAABnAewD/4KRL/+CkS//AewD/AAAABwAAAAMAAAAAAAAAAAAAAAD///8B////Af//
+ /wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAADAAA
+ ABEAAAAVAAAAGQAAAB4AAAAiAAAAJgAAACoAAAAuAAAAMQAAADUAAAA3AAAAOgAAADtWPjmiIyMjPCQk
+ JDoAAAA3AAAANMB7AP/AewD/wHsA/8B7AP/AewD/4KRL/+CkS//AewD/wHsA/8B7AP/AewD/wHsA/wAA
+ AAD///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAA
+ AAoAAAAOAAAAEwAAABcAAAAcAAAAIAAAACUAAAApAAAALgAAADIAAAA3AAAAOwAAAD8AAABEAAAASGJF
+ QfaMcXDxWUJBqh8fH0gAAABDAAAAPsB7AP/gpEv/4KRL/8B7AP/AewD/wHsA/8B7AP/AewD/wHsA/+Ck
+ S//gpEv/wHsA/wAAAAT///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAFAAAACQAAAA4AAAASAAAAFwAAABsAAAAfAAAAJAAAACgAAAAtAAAAMQAAADYAAAA6AAAAPgAA
+ AEIAAABGYEQ/9ZJ4ef+HcHH/fGNg9FlCQKoAAABFAAAAQcB7AP/fo0v/36NL/8B7AP8AAAAsAAAAJwAA
+ ACMAAAAewHsA/9+jS//fo0v/wHsA/wAAAAiJiYkE////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAIAAAAGAAAACwAAAA8AAAATAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAA
+ ADQAAAA4AAAAOwAAAD5fRD/1kXZ2/5d+fv+3mJn/loaG/4p3c/ZZQD2mIiIiPsB7AP/AewD/wHsA/8B7
+ AP8AAAArAAAAJwAAACMAAAAfwHsA/8B7AP/AewD/wHsA/wAAAApycnIGvLy8Av///wH///8BAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAACgAAAA8AAAATAAAAFwAAABsAAAAeAAAAIgAA
+ ACYAAAApAAAALQAAADAAAAAzAAAANWJHP/SOdHT/m399/8ShoP/Go6P/uZub/5aGhv+KcnH1WkI/oQAA
+ ADQAAAAyAAAALwAAACzAewD/wHsA/8B7AP/AewD/AAAAGQAAABYAAAARAAAADQAAAAlycnIGvLy8Av//
+ /wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAACQAAAAwAAAAQAAAAFAAA
+ ABcAAAAbAAAAHgAAACEAAAAkAAAAJwAAACoAAAAsYkc/9I5ycP+dgH//w5+d/8Ognv/EoZ//xKGf/7yf
+ n/+ajY3/iHFt9F5EP50AAAArAAAAKQAAACbAegD/+dWJ//zdj//AegD/AAAAFgAAABMAAAAPAAAACwAA
+ AAcAAAAD////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABQAA
+ AAkAAAAMAAAADwAAABMAAAAWAAAAGQAAABsAAAAeAAAAIAAAACJgR0Lzi3Bt/6GCgP/AnJj/wZ2Z/8Gd
+ mv/Cn5z/wp+d/9W8uv/Pvr3/mY2M/8B7AP/AewD/wHsA/8B7AP/AegD/+teK//zfkP/AegD/wHsA/8B7
+ AP/AewD/wHsA/wAAAAT///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAQAAAAQAAAAHAAAACgAAAA0AAAAQAAAAEgAAABUAAAAXAAAAGWBHQvOKbmr/o4N//76Z
+ lP++mpX/vpqW/7+blv/Fo6H/xaSh/9zHxv/gzcz/z7+9/8B6AP/51Yn//N2P/8B6AP+/egD/v3oA/796
+ AP+/egD/wHoA//nVif/83Y//wHoA/////wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAYAAAAJAAAACwAAAA0AAAAPY0VB8olt
+ aP+mhH//u5aQ/7uWkP+8l5H/vJiS/72Yk//ey8n/3svJ/97Myf/fzMr/2cPB/8B6AP/614r//N+Q/8B6
+ AP8AAAAPAAAADQAAAAsAAAAIwHoA//rXiv/835D/wHoA/////wH///8B////Af///wH///8BAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABAAA
+ AAZjREHyiGxm/6eFfv+4k4v/uZSM/7mUjf+6lY7/upWP/7uWj//bx8T/3crH/93KyP/ey8j/0bm0/796
+ AP+/egD/v3oA/796AP9qTUeLAAAABQAAAAMAAAABv3oA/796AP+/egD/v3oA/////wH///8B////Af//
+ /wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAGNEQfKJa2T/qIV9/7aQh/+2kIj/t5GJ/7eSif+4kor/uJOL/7mTjP+6lo7/zLCr/9zJ
+ xv/dysb/zLCr/7yXkf+8l5H/r42H/4FoZP93XFbxbU1JhwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
+ /wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAY0RB8olqYv+phHv/s42C/7SNg/+0joT/tY6F/7WPhv+2kIf/tpCH/7eR
+ iP+3kor/x6mj/9vIxP/cyMT/yKul/8B7AP/AewD/wHsA/8B7AP/AewD/wHsA/8B7AP/AewD/wHsA/8B7
+ AP/AewD/wHsA/////wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABjREHyiWph/6mEeP+xin7/sYp//7KLgP+yjIH/s4yB/7ON
+ gv+0jYP/tI6E/7WOhf+1kIb/xaag/9rHwv/ax8P/x6qk/8B7AP/two3/8riB//O6hP/zuoT/87qE//O6
+ hP/zuoT/87qE//K4gf/two3/wHsA/////wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBEQPKKamD/qYJ2/66Hev+vh3v/r4h7/7CI
+ fP+wiX3/sYl+/7GKf/+yi3//souA/7KMgf/AoJj/z7ex/9nGwf/ZxsH/ya2m/8B7AP/nsGv/651N/+uf
+ UP/rn1D/659Q/+ufUP/rn1D/659Q/+udTf/nsGv/wHsA/////wH///8B////Af///wH///8BAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYERA8oxqX/+ogXP/rIR1/6yE
+ dv+thXf/rYV4/62Gef+uh3n/rod6/6+Ie/+viHz/sIl9/7CJfv/YxL7/2MS+/9jEv//Yxb//zbOr/8B7
+ AP/nsGv/655O/+ygUv/soFL/7KBS/+ygUv/soFL/7KBS/+ueTv/nsGv/wHsA/////wH///8B////Af//
+ /wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgREDyjWpd/6h/
+ b/+pgXH/qYFy/6qCcv+qgnP/q4N0/6uDdf+shHb/rIV3/62Fd/+thnj/roZ5/66Hev/Pt6//z7ev/9fD
+ vP/Xw73/1L64/8B7AP/nsWz/651O/+ygUv/soFL/7KBS/+ygUv/soFL/7KBS/+ueTv/nsGv/wHsA////
+ /wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGNE
+ QvKPalz/pX1s/7aVhv/SvrX/tJKE/6uDdP+4l4r/07+3/7aUhv+qgXL/qoJz/7SQgv+rg3X/rIR1/6yE
+ dv+thnj/rYd5/861rv/Wwrz/18K8/8B7AP/osW3/7KBR/+ugUv/soFL/7KBS/+ygUv/roFH/66BR/+ud
+ Tv/nsGv/wHsA/////wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAY0RC8q+WjP+3l4j/t5aH/8ivpP/RvbT/0b20/9K9tP/SvbX/0r61/8ivpf+5mIv/vJ6R/9O/
+ t/+zj4H/qoFy/6qCc/+rgnT/q4N0/8Chlf/Vwbr/1cG6/8B7AP/nsm//7aRY/+6mWf/tpFX/7aRU/+2j
+ VP/to1P/7KFT/+ufT//nsGv/wHsA/2tLR4cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAABgQ0DymHJi/8+6sP/PurH/0Lux/9C7sf/Qu7L/0Lyy/9G8s//RvLP/0byz/9G9
+ tP/SvbT/0r21/9G8s/+pgnL/qH9u/6h/b//AewD/wHsA/8B7AP/AewD/wHsA/8B7AP/utnT/7q1f//Cx
+ ZP/wsmT/769c/++sWP/uqlb/7qhW/+2lUv/ssGv/wHsA/8B7AP/AewD/wHsA/8B7AP/AewD/AAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGVFQvKif2//yLGl/865rv/Oua//z7qv/8+6sP/PurD/z7qw/9C7
+ sf/Qu7H/0Luy/9C8sv/RvLL/0byz/9G8s//Ls6n/sY1+/8aroP+1k4X/wHsA/9ebSv/1xZX/8LFr//G1
+ bv/wtWj/8rdo//S6a//0vW7/9L5v//S8bv/zuWb/8bJd/++tV//uq1n/761h/+6pYP/1v4z/2J1I+sB7
+ AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZkhC1NPBuf/Xxr3/zbes/824rf/NuK3/zrit/865
+ rv/Oua7/zrmv/865r//Puq//z7qw/8+6sP/Pu7H/0Lux/9C7sv/Qu7L/0Lyy/9G8s/+0k4T/vqGU/8B7
+ AP/boEj/8r17//K2Z//0vWv/9cFw//bFc//3x3X/98l4//fJev/3yXv/9sd9//XDd//zu3D/8bVn//K5
+ dv/boUv/wHsA/2VOQ0T///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaU8+TZN8cfLs5OD/18W8/8y2
+ q//Mt6v/zbes/823rP/NuKz/zbit/824rf/OuK7/zrmu/865r//Oua//z7qv/8+6sP/PurD/z7qx/865
+ rv+pg3H/p4Bu/7STg//AewD/5LZu//jJgv/2xXP/98p4//nPe//50X7/+tOB//nTgv/50oT/+dCD//fO
+ hP/3yoT/98yQ/+nEiv/AewD/ZEZA8XBXTxr///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGVL
+ PmKTe3Dy7OTg/9bFu//Ltqn/y7aq/8y2qv/Mtqv/zLer/8y3rP/Nt6z/zbis/824rf/NuK3/zriu/865
+ rv/Oua7/zrmv/8+5r//FrKH/rYl3/7KRgf+heGT/wHsA/+jCfP/504X/+tN///zXhP/82ob//duJ//3c
+ i//824z/+9mM//rWjP/51ZP/7MuT/8B7AP9lSUDx/Pn0Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAABlSz5ikntw8uzk4P/WxLr/yrWo/8u1qP/Ltaj/y7Wp/8u2qv/Mtqr/zLaq/8y3
+ q//Mt6v/zbes/823rP/NuK3/zbit/864rf/Oua7/zrmu/8u0qf+heGT/oHZh/8B7AP/vz47//dyL//3f
+ jf/94pH//eKU//7jlf/94pX//eCV//zdlf/x1Jv/wHsA/2VKQfEAAAAA////Af///wH///8BAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZUg+YpJ6cPLs5N//1sS6/8q0pv/KtKf/yrSn/8q0
+ p//Ltaj/y7Wo/8u1qf/Ltqr/zLaq/8y2qv/Mtqv/zLer/8y3rP/Nt6z/zLer/6N8Z/+edF7/pX5r/8y2
+ qv/AewD/+uSp///nmv//6J3//+qh///pof//6KD//+eh//vns//AewD/aEtA8e/evwH///8B////Af//
+ /wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGVIPmKSe3Dy7OTe/9XE
+ uf/Js6X/ybOl/8mzpv/KtKb/yrSm/8q0p//KtKf/yrWo/8u1qP/Ltan/y7Wp/8u2qv/Mtqr/zLar/6eC
+ bv+ccVv/o3tm/8iwpP/EqZz/wHsA//3stv/+77D///G2///wtf/+7q///e24/8B7AP9oSkDxAAAAAP//
+ /wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AABlSD5ikXtv8uvj3v/Vw7n/yLKj/8iypP/IsqT/ybOl/8mzpf/Js6b/ybOm/8q0pv/KtKf/yrSn/8q1
+ p//Ltaj/y7Wo/76jlP+zlIL/m29Z/6B3Yf+cclr/nW5W/8B7AP//9tL///TN///0yv//9s//wHsA/3BO
+ P/Lu27oB////Af///wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAZUg+YpF6bvLr497/1cO4/8exov/HsaP/yLGj/8iyo//IsqT/yLKk/8my
+ pP/Js6X/ybOl/8mzpv/KtKb/yrSn/8q0p//Ks6b/mW1V/5luVv+ablf/mW5V/55tT//AewD///rk///5
+ 4v/AewD/e1I79AAAAAD+/fwB////Af///wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGVIPmKRem7y6+Pd/9TDt//GsKH/x7Ch/8ew
+ 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
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAABiRjlij3Zr8ung2v/SwLP/vaaV/2RFP/EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYkY5Yo1xafK8o5D/ZEU/8QAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJGOWJkRjvOAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AABfPz8YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAD///////8AAP//gAH//wAA//gAAAODAAD/wAAAAcMAAP8AAAAAQwAA/AAAAAADAAD8AAAAAAMAAPgA
+ AAAAAwAA+AAAAAADAAD4AAAAAAMAAPwAAAAAAwAA/gAAAAADAAD/gAAAAAMAAP/wAAAAAwAA//wAAB+D
+ AAD/+AAAAAMAAP/wAAAAAwAA/+AAAAADAAD/wAAAAAMAAP+AAAAAAwAA/wAAAAADAAD+AAAAAD8AAPwA
+ AAAAAwAA+AAAAAAHAADwAAAAAAMAAPAAAAAAAwAA+AAAAAADAAD8AAAAACMAAP4AAAAAAwAA/wAAAACD
+ AAD/gAAAAAMAAP/AAAACAwAA/+AAAAQDAAD/8AAACAMAAP/4AAAf/wAA//wAAD//AAD//gAAf/8AAP//
+ AAD//wAA//+AAf//AAD//8AD//8AAP//4Af//wAA///wD///AAD///gf//8AAP///D///wAA///+f///
+ AAD///9///8AAP///////wAA////////AAA=
+
+
+
\ No newline at end of file
diff --git a/V3/GFX.cs b/V3/GFX.cs
new file mode 100644
index 0000000..2c931c7
--- /dev/null
+++ b/V3/GFX.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Launcheroid
+{
+ class GFX
+ {
+ }
+}
diff --git a/V3/Glass.cs b/V3/Glass.cs
new file mode 100644
index 0000000..bf287c3
--- /dev/null
+++ b/V3/Glass.cs
@@ -0,0 +1,540 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Runtime.InteropServices;
+using System.Windows.Forms;
+using System.ComponentModel;
+using System.Drawing;
+using System.ComponentModel.Design.Serialization;
+using System.Globalization;
+using System.Collections;
+using System.Drawing.Drawing2D;
+
+namespace XWolf.Aero
+{
+ #region XGlassForm
+ public class XGlassForm : Form
+ {
+ private bool composite;
+ private GlassMargins glassMargins = new GlassMargins(50, 0, 0, 0);
+ private Image glassImage = null;
+ private Point glassImageLocation = new Point();
+ private bool glassDrag = true;
+
+ public XGlassForm()
+ {
+ DoubleBuffered = true;
+ composite = Glass.Composite;
+ this.Shown += new EventHandler(XGlassForm_Shown);
+ this.Paint += new PaintEventHandler(XGlassForm_Paint);
+ this.Resize += new EventHandler(XGlassForm_Resize);
+ this.MouseDown += new MouseEventHandler(XGlassForm_MouseDown);
+ }
+
+ void XGlassForm_Resize(object sender, EventArgs e)
+ {
+ Invalidate();
+ }
+
+ //protected override void WndProc(ref Message msg)
+ //{
+ // int[] except={3,6,8,13,14,20,28,32,36,70,71,132,134,160,161,174,274,512,533,534,561,562,641,642,674,675};
+ // //mensaje 20
+
+ // //switch (msg.Msg)
+ // //{
+ // // case WM_DWMCOLORIZATIONCOLORCHANGED:
+ // // // The color format of currColor is 0xAARRGGBB.
+ // // uint currColor = (uint)msg.WParam.ToInt32();
+ // // bool opacityblend = (msg.LParam.ToInt32() != 0);
+ // // ...
+ // // break;
+ // //}
+ // base.WndProc(ref msg);
+ // foreach (int msge in except)
+ // if (msg.Msg == msge)
+ // return;
+ // Console.WriteLine("MSG: " + msg.Msg);
+
+ //}
+
+ void XGlassForm_Shown(object sender, EventArgs e)
+ {
+ UpdateGlass();
+ }
+ void XGlassForm_Paint(object sender, PaintEventArgs e)
+ {
+ Size client = ClientSize;
+ if (DesignMode)
+ {
+ Pen p = new Pen(Color.Gray);
+ Rectangle glassclient = new Rectangle(glassMargins.Left - 1, glassMargins.Top - 1, client.Width - (glassMargins.Left + glassMargins.Right) + 1, client.Height - (glassMargins.Top + glassMargins.Bottom) + 1);
+ e.Graphics.DrawRectangle(p, glassclient);
+ }
+ else
+ if (glassMargins.IsFull)
+ e.Graphics.Clear(Color.Transparent);
+ else
+ {
+
+ Rectangle glassclient = new Rectangle(glassMargins.Left, glassMargins.Top, client.Width - (glassMargins.Left + glassMargins.Right), client.Height - (glassMargins.Top + glassMargins.Bottom));
+ e.Graphics.Clear(composite ? Color.Transparent : SystemColors.ButtonShadow);
+ e.Graphics.FillRectangle(new SolidBrush(BackColor), glassclient);
+ }
+ if (glassImage != null)
+ {
+ Rectangle r = new Rectangle(glassImageLocation, glassImage.Size);
+ e.Graphics.DrawImage(glassImage, r);
+ }
+ //if (glassMargins.IsFull)
+ // e.Graphics.Clear(Color.Transparent);
+ //else
+ //{
+ // Brush b = new SolidBrush(Color.Transparent);
+ // Size client=ClientSize;
+ // e.Graphics.FillRectangle(b, 0, 0, glassMargins.Left, client.Width);
+ //}
+ }
+
+ void XGlassForm_MouseDown(object sender, MouseEventArgs e)
+ {
+ if (!glassDrag)
+ return;
+ Size c = ClientSize;
+ if (e.X > glassMargins.Left && e.X < c.Width - glassMargins.Right &&
+ e.Y > glassMargins.Top && e.Y < c.Height - glassMargins.Bottom)
+ return;
+ // Releasing the mouse capture to allow the form to receive the order
+ Aero.ReleaseCapture();
+ // Ordering the form
+ // Simulating left mouse button clicking on the title bar
+ Aero.SendMessage(this.Handle, // Form handle
+ Aero.WM_NCLBUTTONDOWN, // Simulating the click
+ Aero.HTCAPTION, // Attaching it to the title bar
+ 0); // No further options required
+ }
+
+
+ private void UpdateGlass()
+ {
+ if (composite)
+ {
+ Glass.GlassForm(this, glassMargins);
+ Invalidate();
+ }
+ }
+
+ protected void DrawText(Graphics g, string text, Font font, Brush brush, PointF p)
+ {
+ GraphicsPath gp = new GraphicsPath();
+ gp.AddString(text, font.FontFamily, (int)font.Style, font.Size, p, StringFormat.GenericDefault);
+ g.FillPath(brush, gp);
+ gp.Dispose();
+ }
+
+ protected void DrawText(Graphics g, string text, FontFamily fontfam, int fontstyle, float fontsize, Brush brush, PointF p)
+ {
+ GraphicsPath gp = new GraphicsPath();
+ gp.AddString(text, fontfam, fontstyle, fontsize, p, StringFormat.GenericDefault);
+ g.FillPath(brush, gp);
+ gp.Dispose();
+ }
+
+ [Description("Margenes del efecto cristal"), Category("Aero Glass"), RefreshProperties(RefreshProperties.All)]
+ public GlassMargins GlassMargins
+ {
+ get { return glassMargins; }
+ set { glassMargins = value; UpdateGlass(); }
+ }
+
+ [Description("Cristal completo"), Category("Aero Glass"), RefreshProperties(RefreshProperties.All)]
+ public bool FullGlass
+ {
+ get { return glassMargins.IsFull; }
+ set { if (value) glassMargins = GlassMargins.GetFullGlassMargins(); UpdateGlass(); }
+ }
+
+ [Description("Imagen en el cristal"), Category("Aero Glass")]
+ public Image GlassImage
+ {
+ get { return glassImage; }
+ set { glassImage = value; Invalidate(); }
+ }
+
+ [Description("Posicion de Imagen en el cristal"), Category("Aero Glass")]
+ public Point GlassImageLocation
+ {
+ get { return glassImageLocation; }
+ set { glassImageLocation = value; Invalidate(); }
+ }
+
+ [Description("Usar la extensión del glass como un tirador"), Category("Aero Glass")]
+ public bool GlassDrag
+ {
+ get { return glassDrag; }
+ set { glassDrag = value; }
+ }
+ }
+ #endregion
+
+ public class Aero
+ {
+ internal static bool hasAero;
+
+ #region API
+ private class DWNAPI
+ {
+ [DllImport("dwmapi.dll")]
+ public extern static int DwmExtendFrameIntoClientArea(IntPtr hwnd, ref GlassMargins margin);
+ [DllImport("dwmapi.dll")]
+ public extern static int DwmIsCompositionEnabled(ref int en);
+ }
+
+ [DllImport("user32.dll")]
+ [return: MarshalAs(UnmanagedType.I4)]
+ public static extern int SendMessage(IntPtr hWnd, [param: MarshalAs(UnmanagedType.U4)]uint Msg, [param: MarshalAs(UnmanagedType.U4)]uint wParam, [param: MarshalAs(UnmanagedType.I4)]int lParam);
+
+ [DllImport("user32.dll")]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ public static extern bool ReleaseCapture();
+
+ public const uint WM_NCLBUTTONDOWN = 0xA1; // 161
+ public const uint HTCAPTION = 2;
+ #endregion
+
+
+ #region APIex
+ internal static void DwmExtendFrameIntoClientArea(IntPtr hwnd, GlassMargins margin)
+ {
+ try
+ {
+ DWNAPI.DwmExtendFrameIntoClientArea(hwnd, ref margin);
+ }
+ catch { };
+ }
+ internal static bool DwmIsCompositionEnabled()
+ {
+ try
+ {
+ int result = 0;
+ DWNAPI.DwmIsCompositionEnabled(ref result);
+ return result > 0;
+ }
+ catch { return false; };
+ }
+ #endregion
+
+ static Aero()
+ {
+ hasAero = false;
+ try
+ {
+ DwmIsCompositionEnabled();
+ hasAero = true;
+ }
+ catch { };
+ }
+
+ public static bool HasAero { get { return hasAero; } }
+ }
+
+ #region GalssMarginsConverter
+ public class GalssMarginsConverter : TypeConverter
+ {
+ private static CultureInfo FixCulture(CultureInfo c)
+ {
+ if (c == null)
+ return CultureInfo.CurrentCulture;
+ return c;
+ }
+ private static char GetListSeparator(CultureInfo c)
+ {
+ c = FixCulture(c);
+ return c.TextInfo.ListSeparator[0];
+ }
+
+ #region ConvertFrom
+
+ public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
+ {
+ return sourceType == typeof(string) || base.CanConvertFrom(context, sourceType);
+ }
+
+ public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
+ {
+ string str = value as string;
+ if (str == null)
+ return base.ConvertFrom(context, culture, value);
+ str = str.Trim();
+ if (str.Length == 0)
+ return null;
+ culture = FixCulture(culture);
+ char ch = culture.TextInfo.ListSeparator[0];
+ string[] strArray = str.Split(new char[] { ch });
+ int[] numArray = new int[strArray.Length];
+ if (numArray.Length != 4)
+ throw new ArgumentException("Solo se admiten 4 valores");
+ TypeConverter converter = TypeDescriptor.GetConverter(typeof(int));
+ for (int i = 0; i < numArray.Length; i++)
+ numArray[i] = (int)converter.ConvertFromString(context, culture, strArray[i]);
+ return new GlassMargins(numArray[0], numArray[1], numArray[2], numArray[3]);
+ }
+
+ #endregion
+
+ #region ConvertTo
+
+ public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
+ {
+ return ((destinationType == typeof(InstanceDescriptor)) || base.CanConvertTo(context, destinationType));
+ }
+
+ public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
+ {
+ if (destinationType == null)
+ throw new ArgumentNullException("destinationType");
+ if (value is GlassMargins)
+ {
+ if (destinationType == typeof(string))
+ {
+ GlassMargins gmargins = (GlassMargins)value;
+ if (culture == null)
+ culture = CultureInfo.CurrentCulture;
+ string separator = culture.TextInfo.ListSeparator + " ";
+ TypeConverter converter = TypeDescriptor.GetConverter(typeof(int));
+ string[] strArray ={
+ converter.ConvertToString(context, culture, gmargins.Left),
+ converter.ConvertToString(context, culture, gmargins.Top),
+ converter.ConvertToString(context, culture, gmargins.Right),
+ converter.ConvertToString(context, culture, gmargins.Bottom)
+ };
+ return string.Join(separator, strArray);
+ }
+ //if (destinationType == typeof(InstanceDescriptor))
+ //{
+ // GlassMargins gmargins = (GlassMargins)value;
+
+ // return new InstanceDescriptor(typeof(GlassMargins).GetConstructor(new Type[] { typeof(int), typeof(int), typeof(int), typeof(int) }), new object[] { gmargins.Left, gmargins.Top, gmargins.Right, gmargins.Bottom });
+ //}
+ }
+ return base.ConvertTo(context, culture, value, destinationType);
+ }
+
+ #endregion
+
+ #region Instancia
+ public override object CreateInstance(ITypeDescriptorContext context, IDictionary propertyValues)
+ {
+ if (context == null)
+ {
+ throw new ArgumentNullException("context");
+ }
+ if (propertyValues == null)
+ {
+ throw new ArgumentNullException("propertyValues");
+ }
+ GlassMargins gmargins = (GlassMargins)context.PropertyDescriptor.GetValue(context.Instance);
+ return new GlassMargins((int)propertyValues["Left"], (int)propertyValues["Top"], (int)propertyValues["Right"], (int)propertyValues["Bottom"]);
+ }
+
+ public override bool GetCreateInstanceSupported(ITypeDescriptorContext context)
+ {
+ return true;
+ }
+ #endregion
+
+ #region Properties
+ public override bool GetPropertiesSupported(ITypeDescriptorContext context)
+ {
+ return true;
+ }
+
+ public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes)
+ {
+ return TypeDescriptor.GetProperties(value, attributes).Sort(new string[] { "Left", "Top", "Right", "Bottom" });
+ }
+ #endregion
+ }
+ #endregion
+
+ //#region GalssMarginsConverter
+ //public class GalssMarginsConverter : TypeConverter
+ //{
+ // #region ConvertFrom
+
+ // public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
+ // {
+ // return ((sourceType == typeof(string)) || base.CanConvertFrom(context, sourceType));
+ // }
+
+ // public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
+ // {
+ // string str = value as string;
+ // if (str == null)
+ // return base.ConvertFrom(context, culture, value);
+ // str = str.Trim();
+ // if (str.Length == 0)
+ // return null;
+ // if (culture == null)
+ // culture = CultureInfo.CurrentCulture;
+ // char ch = culture.TextInfo.ListSeparator[0];
+ // string[] strArray = str.Split(new char[] { ch });
+ // int[] numArray = new int[strArray.Length];
+ // TypeConverter converter = TypeDescriptor.GetConverter(typeof(int));
+ // for (int i = 0; i < numArray.Length; i++)
+ // numArray[i] = (int)converter.ConvertFromString(context, culture, strArray[i]);
+ // if (numArray.Length != 4)
+ // throw new ArgumentException();
+ // return new GlassMargins(numArray[0], numArray[1], numArray[2], numArray[3]);
+ // }
+
+ // #endregion
+
+ // #region ConvertTo
+
+ // public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
+ // {
+ // //return ((destinationType == typeof(InstanceDescriptor)) || base.CanConvertTo(context, destinationType));
+ // return ((destinationType == typeof(String)) || base.CanConvertTo(context, destinationType));
+ // }
+
+ // public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
+ // {
+ // if (destinationType == null)
+ // throw new ArgumentNullException("destinationType");
+ // if (value is GlassMargins)
+ // {
+ // if (destinationType == typeof(string))
+ // {
+ // GlassMargins gmargins = (GlassMargins)value;
+ // if (culture == null)
+ // culture = CultureInfo.CurrentCulture;
+ // string separator = culture.TextInfo.ListSeparator + " ";
+ // TypeConverter converter = TypeDescriptor.GetConverter(typeof(int));
+ // string[] strArray ={
+ // converter.ConvertToString(context, culture, gmargins.Left),
+ // converter.ConvertToString(context, culture, gmargins.Top),
+ // converter.ConvertToString(context, culture, gmargins.Right),
+ // converter.ConvertToString(context, culture, gmargins.Bottom)
+ // };
+ // return string.Join(separator, strArray);
+ // }
+ // //if (destinationType == typeof(InstanceDescriptor))
+ // //{
+ // // GlassMargins gmargins = (GlassMargins)value;
+
+ // // return new InstanceDescriptor(typeof(GlassMargins).GetConstructor(new Type[] { typeof(int), typeof(int), typeof(int), typeof(int) }), new object[] { gmargins.Left, gmargins.Top, gmargins.Right, gmargins.Bottom });
+ // //}
+ // }
+ // return base.ConvertTo(context, culture, value, destinationType);
+ // }
+
+ // #endregion
+
+ // //public override object CreateInstance(ITypeDescriptorContext context, IDictionary propertyValues)
+ // //{
+ // // if (context == null)
+ // // {
+ // // throw new ArgumentNullException("context");
+ // // }
+ // // if (propertyValues == null)
+ // // {
+ // // throw new ArgumentNullException("propertyValues");
+ // // }
+ // // GlassMargins gmargins = (GlassMargins)context.PropertyDescriptor.GetValue(context.Instance);
+ // // return new GlassMargins((int)propertyValues["Left"], (int)propertyValues["Top"], (int)propertyValues["Right"], (int)propertyValues["Bottom"]);
+ // //}
+
+ // //public override bool GetCreateInstanceSupported(ITypeDescriptorContext context)
+ // //{
+ // // return true;
+ // //}
+
+ // #region Properties
+ // public override bool GetPropertiesSupported(ITypeDescriptorContext context)
+ // {
+ // return true;
+ // }
+
+ // public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes)
+ // {
+ // return TypeDescriptor.GetProperties(value, attributes).Sort(new string[] { "Left", "Top", "Right", "Bottom" });
+ // }
+ // #endregion
+ //}
+ //#endregion
+
+ #region GlassMargins
+ [Serializable, StructLayout(LayoutKind.Sequential), TypeConverter(typeof(GalssMarginsConverter))]
+ public struct GlassMargins
+ {
+ private int left;
+ private int right;
+ private int top;
+ private int bottom;
+
+ public static GlassMargins GetFullGlassMargins()
+ {
+ return new GlassMargins(-1, -1, -1, -1);
+ }
+
+ public GlassMargins(int left, int top, int right, int bottom)
+ {
+ this.left = left;
+ this.right = right;
+ this.top = top;
+ this.bottom = bottom;
+ }
+
+ public int Top { get { return top; } set { top = value; } }
+ public int Left { get { return left; } set { left = value; } }
+ public int Right { get { return right; } set { right = value; } }
+ public int Bottom { get { return bottom; } set { bottom = value; } }
+
+ [Browsable(false)]
+ public bool IsFull { get { return top == -1 && left == -1 && right == -1 & bottom == -1; } }
+
+ [Browsable(false)]
+ public bool IsNone { get { return top == 0 && left == 0 && right == 0 & bottom == 0; } }
+
+ public override string ToString()
+ {
+ if (IsFull)
+ return "Full Glass";
+ if (IsNone)
+ return "No Glass";
+ return left + "; " + top + "; " + right + "; " + bottom;
+ }
+ };
+ #endregion
+
+ internal class Glass
+ {
+ private static bool CheckComposite()
+ {
+ if (!Aero.hasAero)
+ return false;
+ return Aero.DwmIsCompositionEnabled();
+ }
+
+ public static void GlassForm(Form f)
+ {
+ GlassForm(f, GlassMargins.GetFullGlassMargins());
+ }
+
+ public static void GlassForm(Form f, int leftmargin, int bottommargin, int rightmargin, int topmargin)
+ {
+ GlassForm(f, new GlassMargins(leftmargin, bottommargin, rightmargin, topmargin));
+ }
+
+ public static void GlassForm(Form f, GlassMargins margins)
+ {
+ if (!Composite)
+ return;
+ Aero.DwmExtendFrameIntoClientArea(f.Handle, margins);
+ }
+
+ public static bool Composite { get { return CheckComposite(); } }
+ }
+
+}
diff --git a/V3/LRD3.cs b/V3/LRD3.cs
new file mode 100644
index 0000000..cb4300f
--- /dev/null
+++ b/V3/LRD3.cs
@@ -0,0 +1,116 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Drawing.Imaging;
+using System.IO;
+using System.Text;
+
+namespace Launcheroid
+{
+ public class LRD3
+ {
+ public class Item
+ {
+ public string Name { get; set; }
+ public string Path { get; set; }
+ public string Arguments { get; set; }
+ public string InitialFolder { get; set; }
+ public Image Image { get; set; }
+ }
+
+ public LRD3()
+ {
+ Reset();
+ }
+
+ public void Reset()
+ {
+ NavigationRoot = null;
+ IconSize = 48;
+ IconSpacing = 5;
+ IconMargin = 7;
+ Items.Clear();
+ }
+
+ #region Load/Save
+ ///
+ /// Load all information from file
+ ///
+ ///
+ public void Load(string path)
+ {
+ if (!File.Exists(path))
+ return;
+ Reset();
+
+ }
+
+ ///
+ /// Save the current information to a file
+ ///
+ ///
+ public void Save(string path)
+ {
+ using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write))
+ using (StreamWriter sw = new StreamWriter(fs, Encoding.UTF8))
+ {
+ sw.WriteLine("// Launcheroid3 file (Text mode) Autogenerated by Lancheroid on " + DateTime.Now.ToString());
+ sw.WriteLine("// Launcheroid3 by XWolfOverride in 2019");
+ sw.WriteLine();
+ foreach (Item i in Items)
+ {
+ sw.WriteLine("[Item]");
+ sw.Write("name:"); sw.WriteLine(i.Name);
+ sw.Write("path:"); sw.WriteLine(i.Path);
+ sw.Write("idir:"); sw.WriteLine(i.InitialFolder);
+ sw.Write("args:"); sw.WriteLine(i.Arguments);
+ sw.Write("icon:"); sw.WriteLine(Image64(i.Image));
+ sw.WriteLine("");
+ }
+ sw.WriteLine("[Settings]");
+ sw.Write("root:"); sw.WriteLine(NavigationRoot);
+ sw.Write("size:"); sw.WriteLine(IconSize);
+ sw.Write("spac:"); sw.WriteLine(IconSpacing);
+ sw.Write("marg:"); sw.WriteLine(IconMargin);
+ }
+ }
+
+ private string Image64(Image i)
+ {
+ if (i == null)
+ return "";
+ MemoryStream ms = new MemoryStream();
+ i.Save(ms, ImageFormat.Png);
+ ms.Close();
+ byte[] data = ms.GetBuffer();
+ return Convert.ToBase64String(data);
+ }
+ #endregion
+
+ ///
+ /// Navigation root for navigation panel (if not null)
+ /// use '/' for root
+ ///
+ public string NavigationRoot { get; set; }
+
+ ///
+ /// Size (in pixels) of icons in screen
+ ///
+ public int IconSize { get; set; }
+
+ ///
+ /// Size (in pixels) of spacing between icons
+ ///
+ public int IconSpacing { get; set; }
+
+ ///
+ /// Size (in pixels) of between icons and window frame
+ ///
+ public int IconMargin { get; set; }
+
+ ///
+ /// List of items in Launcher
+ ///
+ public List- Items { get; } = new List
- ();
+ }
+}
diff --git a/V3/Launcheroid.csproj b/V3/Launcheroid.csproj
new file mode 100644
index 0000000..54234c0
--- /dev/null
+++ b/V3/Launcheroid.csproj
@@ -0,0 +1,115 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {042236E2-8C4A-4D85-9968-89AFC2D2271D}
+ WinExe
+ Launcheroid
+ Launcheroid
+ v4.8
+ 512
+ true
+ true
+
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+ AppIconLN.ico
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ FImageLoad.cs
+
+
+ Form
+
+
+ FItem.cs
+
+
+ Form
+
+
+ Form1.cs
+
+
+
+ Form
+
+
+
+
+
+ FImageLoad.cs
+
+
+ FItem.cs
+
+
+ Form1.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+ True
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/V3/Program.cs b/V3/Program.cs
new file mode 100644
index 0000000..6966ab2
--- /dev/null
+++ b/V3/Program.cs
@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Launcheroid
+{
+ static class Program
+ {
+ private const string DEFAULTFILENAME = "Links.lrd";
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new Form1());
+ }
+
+ public static string ArgumentFile
+ {
+ get
+ {
+ string[] args = Environment.GetCommandLineArgs();
+ if (args.Length > 1)
+ return args[1];
+ return null;
+ }
+ }
+
+ public static string DefaultFile
+ {
+ get
+ {
+ string path = System.Reflection.Assembly.GetExecutingAssembly().Location;
+ return Path.Combine(Path.GetDirectoryName(path), DEFAULTFILENAME);
+ }
+ }
+ }
+}
diff --git a/V3/Properties/AssemblyInfo.cs b/V3/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..f36ec22
--- /dev/null
+++ b/V3/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Launcheroid")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Launcheroid")]
+[assembly: AssemblyCopyright("Copyright © 2019")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("042236e2-8c4a-4d85-9968-89afc2d2271d")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/V3/Properties/Resources.Designer.cs b/V3/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..f7a33d0
--- /dev/null
+++ b/V3/Properties/Resources.Designer.cs
@@ -0,0 +1,73 @@
+//------------------------------------------------------------------------------
+//
+// Este código fue generado por una herramienta.
+// Versión de runtime:4.0.30319.42000
+//
+// Los cambios en este archivo podrían causar un comportamiento incorrecto y se perderán si
+// se vuelve a generar el código.
+//
+//------------------------------------------------------------------------------
+
+namespace Launcheroid.Properties {
+ using System;
+
+
+ ///
+ /// Clase de recurso fuertemente tipado, para buscar cadenas traducidas, etc.
+ ///
+ // StronglyTypedResourceBuilder generó automáticamente esta clase
+ // a través de una herramienta como ResGen o Visual Studio.
+ // Para agregar o quitar un miembro, edite el archivo .ResX y, a continuación, vuelva a ejecutar ResGen
+ // con la opción /str o recompile su proyecto de VS.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// Devuelve la instancia de ResourceManager almacenada en caché utilizada por esta clase.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Launcheroid.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Reemplaza la propiedad CurrentUICulture del subproceso actual para todas las
+ /// búsquedas de recursos mediante esta clase de recurso fuertemente tipado.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ ///
+ /// Busca un recurso adaptado de tipo System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap imgbg {
+ get {
+ object obj = ResourceManager.GetObject("imgbg", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+ }
+}
diff --git a/V3/Properties/Resources.resx b/V3/Properties/Resources.resx
new file mode 100644
index 0000000..7ece317
--- /dev/null
+++ b/V3/Properties/Resources.resx
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+ ..\res\imgbg.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
\ No newline at end of file
diff --git a/V3/Properties/Settings.Designer.cs b/V3/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..385fa47
--- /dev/null
+++ b/V3/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+//
+// Este código fue generado por una herramienta.
+// Versión de runtime:4.0.30319.42000
+//
+// Los cambios en este archivo podrían causar un comportamiento incorrecto y se perderán si
+// se vuelve a generar el código.
+//
+//------------------------------------------------------------------------------
+
+namespace Launcheroid.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.8.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/V3/Properties/Settings.settings b/V3/Properties/Settings.settings
new file mode 100644
index 0000000..3964565
--- /dev/null
+++ b/V3/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/V3/res/AppIcon.ico b/V3/res/AppIcon.ico
new file mode 100644
index 0000000..1fcba38
--- /dev/null
+++ b/V3/res/AppIcon.ico
Binary files differ
diff --git a/V3/res/AppIconLN.ico b/V3/res/AppIconLN.ico
new file mode 100644
index 0000000..3b09534
--- /dev/null
+++ b/V3/res/AppIconLN.ico
Binary files differ
diff --git a/V3/res/BlueLauncher.ico b/V3/res/BlueLauncher.ico
new file mode 100644
index 0000000..ce77a12
--- /dev/null
+++ b/V3/res/BlueLauncher.ico
Binary files differ
diff --git a/V3/res/Gnome App Green.ico b/V3/res/Gnome App Green.ico
new file mode 100644
index 0000000..340605b
--- /dev/null
+++ b/V3/res/Gnome App Green.ico
Binary files differ
diff --git a/V3/res/WhiteLauncher.ico b/V3/res/WhiteLauncher.ico
new file mode 100644
index 0000000..77326a3
--- /dev/null
+++ b/V3/res/WhiteLauncher.ico
Binary files differ
diff --git a/V3/res/imgbg.png b/V3/res/imgbg.png
new file mode 100644
index 0000000..4a250e0
--- /dev/null
+++ b/V3/res/imgbg.png
Binary files differ