207 lines
5.6 KiB
C#
207 lines
5.6 KiB
C#
using AppLauncher.Models;
|
|
using AppLauncher.Windows.Forms;
|
|
using Newtonsoft.Json;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.IO;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
|
|
namespace AppLauncher
|
|
{
|
|
public partial class MainForm : AForm
|
|
{
|
|
protected int collapsedWidth = 40;
|
|
protected int expandedWidth = 800;
|
|
protected bool isBusy = false;
|
|
|
|
public MainForm() : base()
|
|
{
|
|
InitializeComponent();
|
|
|
|
//this.Visible = false;
|
|
}
|
|
|
|
protected override void OnLoad(EventArgs e)
|
|
{
|
|
base.OnLoad(e);
|
|
|
|
//this.Visible = false;
|
|
}
|
|
|
|
protected override void OnShown(EventArgs e)
|
|
{
|
|
this.Visible = false;
|
|
|
|
base.OnShown(e);
|
|
|
|
string jsonfigFilename = Path.ChangeExtension(Application.ExecutablePath, "jsonfig");
|
|
if (File.Exists(jsonfigFilename))
|
|
{
|
|
loadSession(jsonfigFilename);
|
|
}
|
|
|
|
this.Location = this.DefaultLocation;
|
|
this.Visible = true;
|
|
}
|
|
|
|
public async Task ToggleSize()
|
|
{
|
|
if (this.Width > collapsedWidth)
|
|
{
|
|
flowLayoutPanel1.Visible = false;
|
|
//titlePanel1.LabelVisible = false;
|
|
|
|
await collapseWindow(collapsedWidth, 6);
|
|
}
|
|
else
|
|
{
|
|
await expandWindow(expandedWidth, 8);
|
|
|
|
flowLayoutPanel1.Visible = true;
|
|
//titlePanel1.LabelVisible = true;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Save As
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void toolStripMenuItem2_Click(object sender, EventArgs e)
|
|
{
|
|
if (isBusy)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (flowLayoutPanel1.Controls.Count <= 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (saveFileDialog1.ShowDialog() != DialogResult.OK)
|
|
{
|
|
return;
|
|
}
|
|
|
|
isBusy = true;
|
|
|
|
List<TileGroupModel> rs = new List<TileGroupModel>();
|
|
for (int i = 0; i < flowLayoutPanel1.Controls.Count; i++)
|
|
{
|
|
if (flowLayoutPanel1.Controls[i].GetType() != typeof(TileLayoutContainer))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
TileLayoutContainer container = flowLayoutPanel1.Controls[i] as TileLayoutContainer;
|
|
rs.Add(container.Model);
|
|
}
|
|
|
|
try
|
|
{
|
|
File.WriteAllText(saveFileDialog1.FileName, JsonConvert.SerializeObject(rs));
|
|
MessageBox.Show("Session saved!", "Save session", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
MessageBox.Show(exc.Message, "Save session");
|
|
}
|
|
|
|
isBusy = false;
|
|
}
|
|
|
|
private void toolStripMenuItem1_Click(object sender, EventArgs e)
|
|
{
|
|
this.TopMost = !this.TopMost;
|
|
|
|
toolStripMenuItem1.Checked = this.TopMost;
|
|
}
|
|
|
|
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
this.Close();
|
|
}
|
|
|
|
protected async Task collapseWindow(int width, int increment = 6)
|
|
{
|
|
await Task.Run(() =>
|
|
{
|
|
while (this.Width > width)
|
|
{
|
|
if (this.InvokeRequired)
|
|
{
|
|
this.Invoke(new MethodInvoker(() => {
|
|
this.Width -= increment;
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
this.Width -= increment;
|
|
}
|
|
|
|
Application.DoEvents();
|
|
}
|
|
});
|
|
}
|
|
|
|
protected async Task expandWindow(int width, int increment = 8)
|
|
{
|
|
await Task.Run(() =>
|
|
{
|
|
while (this.Width < width)
|
|
{
|
|
if (this.InvokeRequired)
|
|
{
|
|
this.Invoke(new MethodInvoker(() => {
|
|
this.Width += increment;
|
|
//this.Invalidate();
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
this.Width += increment;
|
|
//this.Invalidate();
|
|
}
|
|
|
|
Application.DoEvents();
|
|
}
|
|
});
|
|
}
|
|
|
|
protected void loadSession(string filename)
|
|
{
|
|
string sourceCode = File.ReadAllText(filename);
|
|
if (string.IsNullOrWhiteSpace(sourceCode))
|
|
{
|
|
return;
|
|
}
|
|
|
|
List<TileGroupModel> rs = JsonConvert.DeserializeObject<List<TileGroupModel>>(sourceCode);
|
|
if (rs == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
int maxWidth = 0;
|
|
flowLayoutPanel1.Controls.Clear();
|
|
|
|
foreach (TileGroupModel item in rs)
|
|
{
|
|
TileLayoutContainer panel = new TileLayoutContainer(item);
|
|
maxWidth = Math.Max(maxWidth, panel.Width);
|
|
|
|
flowLayoutPanel1.Controls.Add(panel);
|
|
}
|
|
|
|
flowLayoutPanel1.Width = maxWidth + SystemInformation.VerticalScrollBarWidth + 20;
|
|
|
|
//this.Width = flowLayoutPanel1.Width + (flowLayoutPanel1.Left * 2);
|
|
//##this.Width = flowLayoutPanel1.Width + flowLayoutPanel1.Left;
|
|
}
|
|
|
|
}
|
|
}
|