aboutsummaryrefslogtreecommitdiff
path: root/ShiftOS.WinForms/Program.cs
diff options
context:
space:
mode:
authorMichael <[email protected]>2017-01-08 09:57:10 -0500
committerMichael <[email protected]>2017-01-08 09:57:10 -0500
commitf30dcf5ef41d54c588d7b42c48be8d941abba72e (patch)
tree7705f99b965673b1c034ac2b1c56e65072c827df /ShiftOS.WinForms/Program.cs
parent69dfad54724d4176dfce238a8d7e73970e6eef24 (diff)
downloadshiftos_thereturn-f30dcf5ef41d54c588d7b42c48be8d941abba72e.tar.gz
shiftos_thereturn-f30dcf5ef41d54c588d7b42c48be8d941abba72e.tar.bz2
shiftos_thereturn-f30dcf5ef41d54c588d7b42c48be8d941abba72e.zip
Initial upload
Diffstat (limited to 'ShiftOS.WinForms/Program.cs')
-rw-r--r--ShiftOS.WinForms/Program.cs180
1 files changed, 180 insertions, 0 deletions
diff --git a/ShiftOS.WinForms/Program.cs b/ShiftOS.WinForms/Program.cs
new file mode 100644
index 0000000..458f4c2
--- /dev/null
+++ b/ShiftOS.WinForms/Program.cs
@@ -0,0 +1,180 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using ShiftOS.Engine;
+using Newtonsoft.Json;
+using static ShiftOS.Objects.ShiftFS.Utils;
+using ShiftOS.WinForms.Applications;
+using ShiftOS.WinForms.Tools;
+
+namespace ShiftOS.WinForms
+{
+ static class Program
+ {
+ /// <summary>
+ /// The main entry point for the application.
+ /// </summary>
+ [STAThread]
+ static void Main()
+ {
+ Localization.RegisterProvider(new WFLanguageProvider());
+ Shiftorium.RegisterProvider(new WinformsShiftoriumProvider());
+ AppearanceManager.OnExit += () =>
+ {
+ Environment.Exit(0);
+ };
+
+ TerminalBackend.TerminalRequested += () =>
+ {
+ AppearanceManager.SetupWindow(new Applications.Terminal());
+ };
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ AppearanceManager.Initiate(new WinformsWindowManager());
+ OutOfBoxExperience.Init(new Oobe());
+ Infobox.Init(new WinformsInfobox());
+ FileSkimmerBackend.Init(new WinformsFSFrontend());
+ var desk = new WinformsDesktop();
+ Desktop.Init(desk);
+ Application.Run(desk);
+ }
+ }
+
+ internal class WinformsShiftoriumProvider : IShiftoriumProvider
+ {
+ public List<ShiftoriumUpgrade> GetDefaults()
+ {
+ return JsonConvert.DeserializeObject<List<ShiftoriumUpgrade>>(Properties.Resources.Shiftorium);
+ }
+ }
+
+ internal class WinformsInfobox : IInfobox
+ {
+ public void Open(string title, string msg)
+ {
+ Dialog frm = new Dialog();
+ frm.Text = title;
+ var pnl = new Panel();
+ var flow = new FlowLayoutPanel();
+ var btnok = new Button();
+ btnok.AutoSize = true;
+ btnok.AutoSizeMode = AutoSizeMode.GrowAndShrink;
+ flow.Height = btnok.Height + 4;
+ btnok.Text = "ok";
+ flow.Dock = DockStyle.Bottom;
+ flow.Controls.Add(btnok);
+ btnok.Show(); btnok.Click += (o, a) =>
+ {
+ frm.Close();
+ };
+ pnl.Controls.Add(flow);
+ flow.Show();
+ var lbl = new Label();
+ lbl.Text = msg;
+ lbl.TextAlign = ContentAlignment.MiddleCenter;
+ lbl.Dock = DockStyle.Fill;
+ lbl.AutoSize = false;
+ pnl.Controls.Add(lbl); lbl.Show();
+ frm.Controls.Add(pnl);
+ pnl.Dock = DockStyle.Fill;
+ frm.Size = new Size(320, 200);
+ AppearanceManager.SetupDialog(frm);
+
+ }
+ }
+
+ public class WinformsFSFrontend : IFileSkimmer
+ {
+ public void OpenDirectory(string path)
+ {
+ var fs = new Applications.FileSkimmer();
+ AppearanceManager.SetupWindow(fs);
+ fs.ChangeDirectory(path);
+ }
+
+ public void GetPath(string[] filetypes, FileOpenerStyle style, Action<string> callback)
+ {
+ AppearanceManager.SetupDialog(new Applications.FileDialog(filetypes, style, callback));
+ }
+
+ public void OpenFile(string path)
+ {
+ try
+ {
+ switch (FileSkimmerBackend.GetFileType(path))
+ {
+ case FileType.TextFile:
+ if (!Shiftorium.UpgradeInstalled("textpad"))
+ throw new Exception();
+
+ var txt = new TextPad();
+ AppearanceManager.SetupWindow(txt);
+ txt.LoadFile(path);
+ break;
+ case FileType.Executable:
+ //NYI
+ throw new Exception();
+ case FileType.Python:
+ var p = new Engine.Scripting.PythonInterpreter();
+ try
+ {
+ p.ExecuteFile(path);
+ }
+ catch (Exception ex)
+ {
+ Infobox.Show("{PY_EXCEPTION}", ex.Message);
+ }
+ break;
+ case FileType.Lua:
+ try
+ {
+ var runner = new Engine.Scripting.LuaInterpreter();
+ runner.ExecuteFile(path);
+ }
+ catch (Exception ex)
+ {
+ Infobox.Show("{LUA_ERROR}", ex.Message);
+ }
+ break;
+ case FileType.JSON:
+ //NYI
+ throw new Exception();
+ case FileType.Filesystem:
+ MountPersistent(path);
+ //If this doesn't fail...
+ FileSkimmerBackend.OpenDirectory((Mounts.Count - 1).ToString() + ":");
+ break;
+ case FileType.Skin:
+ if (!Shiftorium.UpgradeInstalled("skinning"))
+ throw new Exception();
+
+ var sl = new Skin_Loader();
+ AppearanceManager.SetupWindow(sl);
+ sl.LoadedSkin = JsonConvert.DeserializeObject<Skin>(ReadAllText(path));
+ sl.SetupUI();
+ break;
+ case FileType.Image:
+ if (!Shiftorium.UpgradeInstalled("artpad_open"))
+ throw new Exception();
+
+ var ap = new Artpad();
+ AppearanceManager.SetupWindow(ap);
+ ap.LoadPicture(path);
+ break;
+ default:
+ throw new Exception();
+
+ }
+ }
+ catch
+ {
+ Infobox.Show("{NO_APP_TO_OPEN}", "{NO_APP_TO_OPEN_EXP}");
+ }
+
+ }
+
+ }
+}