diff --git a/Launcheroid/AppIconLN.ico b/Launcheroid/AppIconLN.ico new file mode 100644 index 0000000..3b09534 --- /dev/null +++ b/Launcheroid/AppIconLN.ico Binary files differ diff --git a/Launcheroid/FImageLoad.Designer.cs b/Launcheroid/FImageLoad.Designer.cs new file mode 100644 index 0000000..220b4a6 --- /dev/null +++ b/Launcheroid/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/Launcheroid/FImageLoad.cs b/Launcheroid/FImageLoad.cs new file mode 100644 index 0000000..f34d62b --- /dev/null +++ b/Launcheroid/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/Launcheroid/FImageLoad.resx b/Launcheroid/FImageLoad.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/Launcheroid/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/Launcheroid/FItem.Designer.cs b/Launcheroid/FItem.Designer.cs new file mode 100644 index 0000000..744e009 --- /dev/null +++ b/Launcheroid/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/Launcheroid/FItem.cs b/Launcheroid/FItem.cs new file mode 100644 index 0000000..74a5393 --- /dev/null +++ b/Launcheroid/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/Launcheroid/FItem.resx b/Launcheroid/FItem.resx new file mode 100644 index 0000000..ad53752 --- /dev/null +++ b/Launcheroid/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/Launcheroid/Form1.Designer.cs b/Launcheroid/Form1.Designer.cs index e04c98c..ebb6b49 100644 --- a/Launcheroid/Form1.Designer.cs +++ b/Launcheroid/Form1.Designer.cs @@ -29,12 +29,119 @@ 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.Text = "Form1"; + 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 index d710afe..7b73181 100644 --- a/Launcheroid/Form1.cs +++ b/Launcheroid/Form1.cs @@ -7,14 +7,89 @@ using System.Text; using System.Threading.Tasks; using System.Windows.Forms; +using XWolf.Aero; namespace Launcheroid { - public partial class Form1 : Form + 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 new file mode 100644 index 0000000..783b959 --- /dev/null +++ b/Launcheroid/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/Launcheroid/GFX.cs b/Launcheroid/GFX.cs new file mode 100644 index 0000000..2c931c7 --- /dev/null +++ b/Launcheroid/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/Launcheroid/Glass.cs b/Launcheroid/Glass.cs new file mode 100644 index 0000000..bf287c3 --- /dev/null +++ b/Launcheroid/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/Launcheroid/LRD3.cs b/Launcheroid/LRD3.cs new file mode 100644 index 0000000..9599d3c --- /dev/null +++ b/Launcheroid/LRD3.cs @@ -0,0 +1,118 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +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 index 905a7f8..cd25f18 100644 --- a/Launcheroid/Launcheroid.csproj +++ b/Launcheroid/Launcheroid.csproj @@ -32,6 +32,9 @@ prompt 4 + + AppIconLN.ico + @@ -46,14 +49,40 @@ + + Form + + + FImageLoad.cs + + + Form + + + FItem.cs + Form Form1.cs + + + Form + + + + FImageLoad.cs + + + FItem.cs + + + Form1.cs + ResXFileCodeGenerator Resources.Designer.cs @@ -62,6 +91,7 @@ True Resources.resx + True SettingsSingleFileGenerator @@ -76,5 +106,9 @@ + + + + \ No newline at end of file diff --git a/Launcheroid/Program.cs b/Launcheroid/Program.cs index b4ac4f9..6966ab2 100644 --- a/Launcheroid/Program.cs +++ b/Launcheroid/Program.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; @@ -8,6 +9,7 @@ { static class Program { + private const string DEFAULTFILENAME = "Links.lrd"; /// /// The main entry point for the application. /// @@ -18,5 +20,25 @@ 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/Resources.Designer.cs b/Launcheroid/Properties/Resources.Designer.cs index 130c198..5f07ac2 100644 --- a/Launcheroid/Properties/Resources.Designer.cs +++ b/Launcheroid/Properties/Resources.Designer.cs @@ -8,10 +8,10 @@ // //------------------------------------------------------------------------------ -namespace Launcheroid.Properties -{ - - +namespace Launcheroid.Properties { + using System; + + /// /// A strongly-typed resource class, for looking up localized strings, etc. /// @@ -19,53 +19,55 @@ // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources - { - + 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() - { + internal Resources() { } - + /// /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager - { - get - { - if ((resourceMan == null)) - { + 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; } } - + /// /// Overrides the current thread's CurrentUICulture property for all /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture - { - get - { + internal static global::System.Globalization.CultureInfo Culture { + get { return resourceCulture; } - set - { + set { resourceCulture = value; } } + + /// + /// Looks up a localized resource of type 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 index af7dbeb..7ece317 100644 --- a/Launcheroid/Properties/Resources.resx +++ b/Launcheroid/Properties/Resources.resx @@ -46,7 +46,7 @@ mimetype: application/x-microsoft.net.object.binary.base64 value : The object must be serialized with - : System.Serialization.Formatters.Binary.BinaryFormatter + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter : and then encoded with base64 encoding. mimetype: application/x-microsoft.net.object.soap.base64 @@ -60,6 +60,7 @@ : and then encoded with base64 encoding. --> + @@ -68,9 +69,10 @@ - + + @@ -85,9 +87,10 @@ - + + @@ -109,9 +112,13 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.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/res/AppIcon.ico b/Launcheroid/res/AppIcon.ico new file mode 100644 index 0000000..1fcba38 --- /dev/null +++ b/Launcheroid/res/AppIcon.ico Binary files differ diff --git a/Launcheroid/res/AppIconLN.ico b/Launcheroid/res/AppIconLN.ico new file mode 100644 index 0000000..3b09534 --- /dev/null +++ b/Launcheroid/res/AppIconLN.ico Binary files differ diff --git a/Launcheroid/res/BlueLauncher.ico b/Launcheroid/res/BlueLauncher.ico new file mode 100644 index 0000000..ce77a12 --- /dev/null +++ b/Launcheroid/res/BlueLauncher.ico Binary files differ diff --git a/Launcheroid/res/Gnome App Green.ico b/Launcheroid/res/Gnome App Green.ico new file mode 100644 index 0000000..340605b --- /dev/null +++ b/Launcheroid/res/Gnome App Green.ico Binary files differ diff --git a/Launcheroid/res/WhiteLauncher.ico b/Launcheroid/res/WhiteLauncher.ico new file mode 100644 index 0000000..77326a3 --- /dev/null +++ b/Launcheroid/res/WhiteLauncher.ico Binary files differ diff --git a/Launcheroid/res/imgbg.png b/Launcheroid/res/imgbg.png new file mode 100644 index 0000000..4a250e0 --- /dev/null +++ b/Launcheroid/res/imgbg.png Binary files differ