2017-02-16 22:14:18 +00:00
|
|
|
|
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;
|
2017-02-18 15:37:11 +00:00
|
|
|
|
using Newtonsoft.Json;
|
2017-02-16 22:14:18 +00:00
|
|
|
|
using ShiftOS.Engine;
|
|
|
|
|
using ShiftOS.Engine.Scripting;
|
2017-02-18 15:37:11 +00:00
|
|
|
|
using ShiftOS.Objects.ShiftFS;
|
|
|
|
|
using static ShiftOS.Engine.SkinEngine;
|
|
|
|
|
|
2017-02-16 22:14:18 +00:00
|
|
|
|
|
|
|
|
|
namespace ShiftOS.WinForms
|
|
|
|
|
{
|
|
|
|
|
public partial class LuaDesktop : Form, IDesktop
|
|
|
|
|
{
|
2017-02-18 15:37:11 +00:00
|
|
|
|
public LuaDesktop(string script)
|
2017-02-16 22:14:18 +00:00
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
2017-02-18 15:37:11 +00:00
|
|
|
|
interpreter = new LuaInterpreter();
|
|
|
|
|
interpreter.Lua.getCanvas = new Func<Panel>(() =>
|
|
|
|
|
{
|
|
|
|
|
return this.pnlcanvas;
|
|
|
|
|
});
|
|
|
|
|
if (Utils.FileExists(script))
|
|
|
|
|
{
|
|
|
|
|
interpreter.ExecuteFile(script);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Desktop.Init(new WinformsDesktop(), true);
|
|
|
|
|
Infobox.Show("Script not found.", "Couldn't find a ShiftOS script to handle the desktop environment.");
|
|
|
|
|
this.Close();
|
|
|
|
|
}
|
2017-02-16 22:14:18 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private LuaInterpreter interpreter = null;
|
|
|
|
|
|
|
|
|
|
public string DesktopName
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
string name = "Unknown";
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
name = (string.IsNullOrWhiteSpace(interpreter.Lua.deskName)) ? "Unknown" : interpreter.Lua.deskName;
|
|
|
|
|
}
|
|
|
|
|
catch
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
return name;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2017-02-18 15:37:11 +00:00
|
|
|
|
private IWindowBorder focused = null;
|
|
|
|
|
|
2017-02-16 22:14:18 +00:00
|
|
|
|
public Size GetSize()
|
|
|
|
|
{
|
|
|
|
|
return this.Size;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void InvokeOnWorkerThread(Action act)
|
|
|
|
|
{
|
|
|
|
|
this.Invoke(act);
|
|
|
|
|
}
|
|
|
|
|
|
2017-02-18 15:37:11 +00:00
|
|
|
|
public void PopulateAppLauncher(LauncherItem[] items)
|
2017-02-16 22:14:18 +00:00
|
|
|
|
{
|
2017-02-18 15:37:11 +00:00
|
|
|
|
interpreter.Lua.populateAppLauncher(interpreter.Lua.totable(new List<LauncherItem>(items)));
|
2017-02-16 22:14:18 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-02-18 15:37:11 +00:00
|
|
|
|
public void PopulatePanelButtons()
|
2017-02-16 22:14:18 +00:00
|
|
|
|
{
|
2017-02-18 15:37:11 +00:00
|
|
|
|
interpreter.Lua.populatePanelButtons();
|
2017-02-16 22:14:18 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-02-18 15:37:11 +00:00
|
|
|
|
public void SetupDesktop()
|
2017-02-16 22:14:18 +00:00
|
|
|
|
{
|
2017-02-18 15:37:11 +00:00
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
interpreter.Lua.setupDesktop();
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
Infobox.Show("Desktop setup error", "The desktop environment threw an exception: \r\n\r\n\r\n" + ex.Message);
|
|
|
|
|
Desktop.Init(new WinformsDesktop(), true);
|
|
|
|
|
this.Close();
|
|
|
|
|
}
|
2017-02-16 22:14:18 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-02-18 15:37:11 +00:00
|
|
|
|
public void ShowWindow(IWindowBorder border)
|
2017-02-16 22:14:18 +00:00
|
|
|
|
{
|
2017-02-18 15:37:11 +00:00
|
|
|
|
var brdr = border as Form;
|
|
|
|
|
focused = border;
|
|
|
|
|
brdr.GotFocus += (o, a) =>
|
|
|
|
|
{
|
|
|
|
|
focused = border;
|
|
|
|
|
};
|
|
|
|
|
brdr.FormBorderStyle = FormBorderStyle.None;
|
|
|
|
|
brdr.Show();
|
|
|
|
|
brdr.TopMost = true;
|
2017-02-16 22:14:18 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-02-18 15:37:11 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Kills the window.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns>The window.</returns>
|
|
|
|
|
/// <param name="border">Border.</param>
|
|
|
|
|
public void KillWindow(IWindowBorder border)
|
2017-02-16 22:14:18 +00:00
|
|
|
|
{
|
2017-02-18 15:37:11 +00:00
|
|
|
|
border.Close();
|
2017-02-16 22:14:18 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-02-18 15:37:11 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Minimizes the window.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="brdr">Brdr.</param>
|
|
|
|
|
public void MinimizeWindow(IWindowBorder brdr)
|
|
|
|
|
{
|
|
|
|
|
var loc = (brdr as WindowBorder).Location;
|
|
|
|
|
var sz = (brdr as WindowBorder).Size;
|
|
|
|
|
(brdr as WindowBorder).Tag = JsonConvert.SerializeObject(new
|
|
|
|
|
{
|
|
|
|
|
Size = sz,
|
|
|
|
|
Location = loc
|
|
|
|
|
});
|
|
|
|
|
(brdr as WindowBorder).Location = new Point(this.GetSize().Width * 2, this.GetSize().Height * 2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Maximizes the window.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns>The window.</returns>
|
|
|
|
|
/// <param name="brdr">Brdr.</param>
|
|
|
|
|
public void MaximizeWindow(IWindowBorder brdr)
|
2017-02-16 22:14:18 +00:00
|
|
|
|
{
|
2017-02-18 15:37:11 +00:00
|
|
|
|
int startY = (LoadedSkin.DesktopPanelPosition == 1) ? 0 : LoadedSkin.DesktopPanelHeight;
|
|
|
|
|
int h = this.GetSize().Height - LoadedSkin.DesktopPanelHeight;
|
|
|
|
|
var loc = (brdr as WindowBorder).Location;
|
|
|
|
|
var sz = (brdr as WindowBorder).Size;
|
|
|
|
|
(brdr as WindowBorder).Tag = JsonConvert.SerializeObject(new
|
|
|
|
|
{
|
|
|
|
|
Size = sz,
|
|
|
|
|
Location = loc
|
|
|
|
|
});
|
|
|
|
|
(brdr as WindowBorder).Location = new Point(0, startY);
|
|
|
|
|
(brdr as WindowBorder).Size = new Size(this.GetSize().Width, h);
|
|
|
|
|
|
2017-02-16 22:14:18 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-02-18 15:37:11 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Restores the window.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns>The window.</returns>
|
|
|
|
|
/// <param name="brdr">Brdr.</param>
|
|
|
|
|
public void RestoreWindow(IWindowBorder brdr)
|
2017-02-16 22:14:18 +00:00
|
|
|
|
{
|
2017-02-18 15:37:11 +00:00
|
|
|
|
dynamic tag = JsonConvert.DeserializeObject<dynamic>((brdr as WindowBorder).Tag.ToString());
|
|
|
|
|
(brdr as WindowBorder).Location = tag.Location;
|
|
|
|
|
(brdr as WindowBorder).Size = tag.Size;
|
|
|
|
|
|
2017-02-16 22:14:18 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-02-18 15:37:11 +00:00
|
|
|
|
private void LuaDesktop_Load(object sender, EventArgs e)
|
2017-02-16 22:14:18 +00:00
|
|
|
|
{
|
2017-02-18 15:37:11 +00:00
|
|
|
|
this.LocationChanged += (o, a) =>
|
|
|
|
|
{
|
|
|
|
|
if (this.Left != 0)
|
|
|
|
|
this.Left = 0;
|
|
|
|
|
if (this.Top != 0)
|
|
|
|
|
this.Top = 0;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
this.SizeChanged += (o, a) =>
|
|
|
|
|
{
|
|
|
|
|
if(this.DisplayRectangle != Screen.PrimaryScreen.Bounds)
|
|
|
|
|
{
|
|
|
|
|
this.WindowState = FormWindowState.Maximized;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
interpreter.Lua.onLoadDesktop();
|
|
|
|
|
SetupDesktop();
|
|
|
|
|
SaveSystem.GameReady += () =>
|
|
|
|
|
{
|
|
|
|
|
InvokeOnWorkerThread(new Action(() =>
|
|
|
|
|
{
|
|
|
|
|
SetupDesktop();
|
|
|
|
|
}));
|
|
|
|
|
};
|
|
|
|
|
SkinEngine.SkinLoaded += () =>
|
|
|
|
|
{
|
|
|
|
|
if(this.Visible == true)
|
|
|
|
|
{
|
|
|
|
|
SetupDesktop();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
Shiftorium.Installed += () =>
|
|
|
|
|
{
|
|
|
|
|
if (this.Visible == true)
|
|
|
|
|
{
|
|
|
|
|
SetupDesktop();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
2017-02-16 22:14:18 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|