roketto-launch/EditTileFolderForm.cs
Ray aecc5d8b5a Changed main menu icons for RyzStudio ttf-icons
Added file version tracking to improve loading speed
2024-08-07 00:00:05 +01:00

284 lines
8.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using RokettoLaunch.Models;
using RyzStudio.Windows.Forms;
using RyzStudio.Windows.ThemedForms;
using RyzStudio.Windows.ThemedForms.ButtonTextBox;
namespace RokettoLaunch
{
public class EditTileFolderForm : Form
{
private Label label1;
private ThClearableTextBox textBox1;
private ThListBox listBox1;
private Label label2;
private RyzStudio.Windows.ThemedForms.Composite.DialogFooter dialogFooter1;
private TileModel result = null;
public EditTileFolderForm(TileModel model = null)
{
InitializeComponent();
UISetup.Dialog(this);
this.Text = (result == null) ? "Add Folder" : "Edit Folder";
result = model;
if (result != null)
{
textBox1.Text = result?.Title ?? string.Empty;
foreach (TileModel item in result.Items ?? new List<TileModel>())
{
if (item.IsGroup)
{
continue;
}
listBox1.ListBox.Items.Add(item);
}
}
}
private void InitializeComponent()
{
textBox1 = new ThClearableTextBox();
label1 = new Label();
listBox1 = new ThListBox();
label2 = new Label();
dialogFooter1 = new RyzStudio.Windows.ThemedForms.Composite.DialogFooter();
SuspendLayout();
//
// textBox1
//
textBox1.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
textBox1.BackColor = Color.Transparent;
textBox1.ClearedValue = "";
textBox1.EnableReactiveVisual = true;
textBox1.Font = new Font("Microsoft Sans Serif", 8.25F);
textBox1.Icon = "O";
textBox1.IconSize = 13F;
textBox1.Location = new Point(109, 20);
textBox1.Name = "textBox1";
textBox1.Size = new Size(260, 32);
textBox1.TabIndex = 152;
textBox1.TabStop = false;
textBox1.UseSystemPasswordChar = false;
//
// label1
//
label1.AutoSize = true;
label1.BackColor = Color.Transparent;
label1.ForeColor = SystemColors.ControlText;
label1.Location = new Point(10, 20);
label1.Margin = new Padding(0);
label1.Name = "label1";
label1.Padding = new Padding(0, 9, 0, 0);
label1.Size = new Size(29, 24);
label1.TabIndex = 153;
label1.Text = "Title";
label1.TextAlign = ContentAlignment.MiddleLeft;
//
// listBox1
//
listBox1.AllowDrop = true;
listBox1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
listBox1.BackColor = Color.Transparent;
listBox1.EnableReactiveVisual = true;
listBox1.Font = new Font("Microsoft Sans Serif", 8.25F);
listBox1.Location = new Point(109, 62);
listBox1.Name = "listBox1";
listBox1.Size = new Size(260, 366);
listBox1.TabIndex = 180;
listBox1.OnAdd += listBox1_OnAdd;
listBox1.OnEdit += listBox1_OnEdit;
listBox1.OnCopy += listBox1_OnCopy;
listBox1.DragDrop += listBox1_DragDrop;
listBox1.DragOver += listBox1_DragOver;
//
// label2
//
label2.AutoSize = true;
label2.BackColor = Color.Transparent;
label2.ForeColor = SystemColors.ControlText;
label2.Location = new Point(10, 62);
label2.Margin = new Padding(0);
label2.Name = "label2";
label2.Padding = new Padding(0, 9, 0, 0);
label2.Size = new Size(82, 24);
label2.TabIndex = 181;
label2.Text = "Tile Collection";
label2.TextAlign = ContentAlignment.MiddleLeft;
//
// dialogFooter1
//
dialogFooter1.BackColor = Color.FromArgb(240, 240, 240);
dialogFooter1.Button1Text = "&Save";
dialogFooter1.Dialog = this;
dialogFooter1.Dock = DockStyle.Bottom;
dialogFooter1.IsBusy = false;
dialogFooter1.Location = new Point(0, 437);
dialogFooter1.Name = "dialogFooter1";
dialogFooter1.Size = new Size(384, 84);
//
// EditTileFolderForm
//
BackColor = Color.White;
ClientSize = new Size(384, 521);
Controls.Add(dialogFooter1);
Controls.Add(label2);
Controls.Add(listBox1);
Controls.Add(label1);
Controls.Add(textBox1);
MinimumSize = new Size(400, 560);
Name = "EditTileFolderForm";
Text = "Add List Tile";
ResumeLayout(false);
PerformLayout();
}
public TileModel Result
{
get
{
if (result == null)
{
result = new TileModel();
}
result.Title = textBox1.Text?.Trim() ?? string.Empty;
result.IsGroup = true;
result.Items = new List<TileModel>();
foreach (TileModel item in listBox1.ListBox.Items.OfType<TileModel>())
{
if (item.IsGroup)
{
continue;
}
result.Items.Add(item);
}
return result;
}
}
private void listBox1_OnAdd(object sender, EventArgs e)
{
var form = new EditTileForm();
if (form.ShowDialog() == DialogResult.OK)
{
listBox1.ListBox.Items.Add(form.Result);
};
}
private void listBox1_OnEdit(object sender, EventArgs e)
{
if (listBox1.ListBox.Items.Count <= 0)
{
return;
}
var n = listBox1.ListBox.SelectedIndex;
if (n < 0)
{
return;
}
if (listBox1.ListBox.SelectedItem == null)
{
return;
}
var form = new EditTileForm((TileModel)listBox1.ListBox.SelectedItem);
if (form.ShowDialog() == DialogResult.OK)
{
listBox1.ListBox.Items.RemoveAt(n);
listBox1.ListBox.Items.Insert(n, form.Result);
};
}
private void listBox1_OnCopy(object sender, EventArgs e)
{
listBox1.ListBox.CopyItem<TileModel>();
}
private void listBox1_DragOver(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effect = DragDropEffects.Link;
}
else
{
e.Effect = DragDropEffects.None;
}
}
private void listBox1_DragDrop(object sender, DragEventArgs e)
{
var fileList = e.Data.GetData(DataFormats.FileDrop) as string[];
if (fileList == null)
{
return;
}
if (fileList.Length <= 0)
{
return;
}
if (string.IsNullOrWhiteSpace(fileList[0]))
{
return;
}
var model = new TileModel()
{
ProcessFilename = fileList[0],
Title = Path.GetFileName(fileList[0])
};
// exe
if (Path.GetExtension(fileList[0]).Equals(".exe", StringComparison.CurrentCultureIgnoreCase))
{
if (File.Exists(fileList[0]))
{
try
{
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(fileList[0]);
if (fvi != null)
{
model.Title = fvi.ProductName;
}
}
catch
{
// do nothing
}
}
if (string.IsNullOrWhiteSpace(model.Title))
{
model.Title = Path.GetFileNameWithoutExtension(fileList[0]);
}
}
listBox1.ListBox.Items.Add(model);
}
}
}