From 6b804f03ebcdd1c5aa145f29ae71b62bd61f8cb9 Mon Sep 17 00:00:00 2001 From: MichaelTheShifter Date: Tue, 19 Jul 2016 21:53:26 -0400 Subject: Full ShiftUI conversion The only bugs are that windows don't show in the center of the screen, and Gecko webbrowsers are not serializing properly to be converted to ShiftUI widgets (you can use the ToWidget() extension method to convert a WinForms control to a ShiftUI widget) Also multiple desktop panels are removed due to some odd bug I can't diagnose. Will add them back in the future. Promise. I loved creating GNOME2 skins. --- .../Desktop/ShiftOSDesktop.cs | 119 +++++++++------------ 1 file changed, 53 insertions(+), 66 deletions(-) (limited to 'source/WindowsFormsApplication1/Desktop/ShiftOSDesktop.cs') diff --git a/source/WindowsFormsApplication1/Desktop/ShiftOSDesktop.cs b/source/WindowsFormsApplication1/Desktop/ShiftOSDesktop.cs index 19a641d..d8be8a0 100644 --- a/source/WindowsFormsApplication1/Desktop/ShiftOSDesktop.cs +++ b/source/WindowsFormsApplication1/Desktop/ShiftOSDesktop.cs @@ -6,7 +6,7 @@ using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; -using System.Windows.Forms; +using ShiftUI; using SaveSystem; using System.Threading; using Newtonsoft.Json; @@ -33,7 +33,7 @@ namespace ShiftOS public delegate void WindowDrawEventHandler(Form win); //Event handler for passing a single control (e.g, a desktop panel) to the Lua API. - public delegate void ControlDrawEventHandler(string ControlGUID); + public delegate void WidgetDrawEventHandler(string WidgetGUID); //Lua events. public event EmptyEventHandler OnDesktopReload; @@ -49,7 +49,7 @@ namespace ShiftOS public event WindowDrawEventHandler BorderReset; public event ListEventHandler DesktopIconsPopulated; public event EmptyEventHandler OnUnityToggle; - public event ControlDrawEventHandler OnDesktopPanelDraw; + public event WidgetDrawEventHandler OnDesktopPanelDraw; public void InvokeWindowOp(string operation, Form win) { @@ -97,7 +97,7 @@ namespace ShiftOS public ToolStripMenuItem AppLauncher { get { return this.ApplicationsToolStripMenuItem; } } - public List CurrentWidgets = null; + public List CurrentWidgets = null; public void SetUnityMode() { @@ -133,7 +133,7 @@ namespace ShiftOS switch (FinalMission.EndGameHandler.CurrentChoice) { case Choice.SideWithDevX: - var t = new System.Windows.Forms.Timer(); + var t = new ShiftUI.Timer(); t.Interval = 10000; t.Tick += (object se, EventArgs ea) => { @@ -176,11 +176,11 @@ namespace ShiftOS this.WindowState = FormWindowState.Maximized; this.KeyDown += (object s, KeyEventArgs ea) => { - if (ea.KeyCode == Keys.T && ea.Control) + if (ea.KeyCode == Keys.T && ea.Widget) { InvokeCTRLT(); } - else if (ea.KeyCode == Keys.D && ea.Control) + else if (ea.KeyCode == Keys.D && ea.Widget) { if (API.DeveloperMode == true) { @@ -198,9 +198,10 @@ namespace ShiftOS CheckIfNew(); API.CurrentSession = this; + this.Location = new Point(0, 0); - System.Windows.Forms.Timer clocktick = new System.Windows.Forms.Timer(); + ShiftUI.Timer clocktick = new ShiftUI.Timer(); clocktick.Interval = 2; clocktick.Tick += (object s, EventArgs a) => { @@ -311,7 +312,7 @@ namespace ShiftOS public FlowLayoutPanel PanelButtonHolder { get { return pnlpanelbuttonholder; } } public Panel AppLauncherPanel { get { return applaunchermenuholder; } } public Panel Clock { get { return timepanel; } } - public Control SelectedObject = null; + public Widget SelectedObject = null; private string SelectedIconName = null; @@ -382,8 +383,8 @@ namespace ShiftOS wid.Dispose(); } } - WidgetsToMaintain = new List(); - Control ctrl = null; + WidgetsToMaintain = new List(); + Widget ctrl = null; switch(w.Type) { case WidgetType.FreePanel: @@ -401,7 +402,7 @@ namespace ShiftOS } if(ctrl != null) { - p.Controls.Add(ctrl); + p.Widgets.Add(ctrl); ctrl.Show(); ctrl.BringToFront(); ctrl.Left = w.XLocation; @@ -445,7 +446,7 @@ namespace ShiftOS move.Click += (object s, EventArgs e) => { ctrl.Tag = w; - MovingControl = ctrl; + MovingWidget = ctrl; }; ToolStripMenuItem move_to = (ToolStripMenuItem)cb_thiswidget.Items.Add("Move to..."); foreach(var dp in DesktopPanels) @@ -493,9 +494,9 @@ namespace ShiftOS } - public List WidgetsToMaintain = null; + public List WidgetsToMaintain = null; - public Control MovingControl = null; + public Widget MovingWidget = null; public bool WidgetContains(string Name) { @@ -533,7 +534,7 @@ namespace ShiftOS { flicons.ContextMenuStrip = cmbdesktopoptions; DesktopIconManager.GetIcons(); - flicons.Controls.Clear(); + flicons.Widgets.Clear(); foreach (DesktopIcon dl in DesktopIconManager.Icons) { dl.ContextMenuStrip = cmbfactions; @@ -544,7 +545,7 @@ namespace ShiftOS SelectedIconName = dl.IconName; } }; - flicons.Controls.Add(dl); + flicons.Widgets.Add(dl); } DesktopIconsPopulated?.Invoke(DesktopIconManager.Icons); } @@ -563,41 +564,27 @@ namespace ShiftOS public void SetupDesktopPanel() { - if (DesktopPanels != null) + if(API.Upgrades["desktoppanel"]) { - foreach (var pnl in DesktopPanels) + desktoppanel.BackColor = API.CurrentSkin.desktoppanelcolour; + desktoppanel.Height = API.CurrentSkin.desktoppanelheight; + switch(API.CurrentSkin.desktoppanelposition) { - if (this.Controls.Contains(pnl)) - { - pnl.Hide(); - this.Controls.Remove(pnl); - } + case "Top": + desktoppanel.Dock = DockStyle.Top; + break; + case "Bottom": + desktoppanel.Dock = DockStyle.Bottom; + break; } - } - var old_list = new List(); - var dp = new Skinning.DesktopPanel(); - dp.Position = API.CurrentSkin.desktoppanelposition; - dp.Height = API.CurrentSkin.desktoppanelheight; - dp.BackgroundColor = API.CurrentSkin.desktoppanelcolour; - dp.BackgroundImage = API.CurrentSkinImages.desktoppanel; - old_list.Add(dp); - - if (API.CurrentSkin.DesktopPanels.Count == 0) - { - API.CurrentSkin.DesktopPanels = old_list; - } - if(API.Upgrades["advanceddesktop"]) - { - SetupPanels(API.CurrentSkin.DesktopPanels); + desktoppanel.BackgroundImageLayout = (ImageLayout)API.CurrentSkin.desktoppanellayout; + desktoppanel.BackgroundImage = API.CurrentSkinImages.desktoppanel; + } else { - if(API.Upgrades["desktoppanel"]) - { - SetupPanels(old_list); - } + desktoppanel.Hide(); } - desktopappmenu.BackgroundImageLayout = (ImageLayout)API.CurrentSkin.applauncherlayout; } public void SetupPanels(List lst) @@ -621,31 +608,31 @@ namespace ShiftOS pnl.Height = dp.Height; pnl.MouseMove += (object s, MouseEventArgs a) => { - if (MovingControl != null) + if (MovingWidget != null) { var newloc = new Point(a.X + 15, 0); var proper = pnl.PointToClient(newloc); - MovingControl.Location = proper; + MovingWidget.Location = proper; } }; pnl.MouseDown += (object s, MouseEventArgs a) => { - if (MovingControl != null) + if (MovingWidget != null) { if (a.Button == MouseButtons.Left) { - var w = (Skinning.DesktopWidget)MovingControl.Tag; - w.XLocation = MovingControl.Left; + var w = (Skinning.DesktopWidget)MovingWidget.Tag; + w.XLocation = MovingWidget.Left; Skinning.Utilities.saveskin(); } else if (a.Button == MouseButtons.Left) { - var w = (Skinning.DesktopWidget)MovingControl.Tag; - MovingControl.Left = w.XLocation; + var w = (Skinning.DesktopWidget)MovingWidget.Tag; + MovingWidget.Left = w.XLocation; Skinning.Utilities.saveskin(); } - MovingControl = null; + MovingWidget = null; } }; DesktopPanels.Add(pnl); @@ -698,13 +685,13 @@ namespace ShiftOS pnl.ContextMenuStrip = null; } pnl.Size = new Size(desktoppanel.Size.Width, dp.Height); - this.Controls.Add(pnl); + this.Widgets.Add(pnl); pnl.Show(); } else { pnl.Hide(); - this.Controls.Remove(pnl); + this.Widgets.Remove(pnl); } string guid = Guid.NewGuid().ToString(); API.DEF_PanelGUIDs.Add(guid, pnl); @@ -893,7 +880,7 @@ namespace ShiftOS { API.CurrentSkin.PanelButtonPosition = itm.Text; } - SelectedObject.Parent.Controls.Remove(SelectedObject); + SelectedObject.Parent.Widgets.Remove(SelectedObject); SetupDesktopPanel(); Skinning.Utilities.saveskin(); } @@ -980,22 +967,22 @@ namespace ShiftOS } } - public void ChangePosition(Control ctrl, Panel newPanel) + public void ChangePosition(Widget ctrl, Panel newPanel) { try { - ctrl.Parent.Controls.Remove(ctrl); - newPanel.Controls.Add(ctrl); + ctrl.Parent.Widgets.Remove(ctrl); + newPanel.Widgets.Add(ctrl); } catch { - newPanel.Controls.Add(ctrl); + newPanel.Widgets.Add(ctrl); } ctrl.BringToFront(); } public void SetupPanelButtons() { - pnlpanelbuttonholder.Controls.Clear(); + pnlpanelbuttonholder.Widgets.Clear(); if (API.Upgrades["panelbuttons"] == true) { foreach (PanelButton pbtn in API.PanelButtons) @@ -1015,7 +1002,7 @@ namespace ShiftOS setuppanelbuttonicons(ref pb, pbtn.Icon); - pnlpanelbuttonholder.Controls.Add(pnl); + pnlpanelbuttonholder.Widgets.Add(pnl); pnl.ContextMenuStrip = null; pnl.Show(); pnl.Click += new EventHandler(this.PanelButton_Click); @@ -1039,8 +1026,8 @@ namespace ShiftOS public void setpanelbuttonappearnce(ref Panel panelbutton, ref PictureBox icon, ref Label text) { - panelbutton.Controls.Add(text); - panelbutton.Controls.Add(icon); + panelbutton.Widgets.Add(text); + panelbutton.Widgets.Add(icon); text.Show(); if (API.Upgrades["appicons"] == true) { @@ -1075,7 +1062,7 @@ namespace ShiftOS { if (API.Upgrades["usefulpanelbuttons"]) { - Control ctrl = (Control)sender; + Widget ctrl = (Widget)sender; try { PanelButton pbtn = (PanelButton)ctrl.Tag; @@ -1138,7 +1125,7 @@ namespace ShiftOS n.Location = new Point(this.Width - n.Width, this.Height - n.Height - desktoppanel.Height); break; } - this.Controls.Add(n); + this.Widgets.Add(n); n.Show(); n.BringToFront(); } -- cgit v1.2.3 From dcb7c04de1ac07f7004af7d5af8450308ba2e29d Mon Sep 17 00:00:00 2001 From: MichaelTheShifter Date: Sat, 23 Jul 2016 15:25:46 -0400 Subject: Fix panel buttons --- source/WindowsFormsApplication1/Apps/Shifter.cs | 24 +++++++++++- .../Desktop/ShiftOSDesktop.cs | 9 +++++ .../WindowsFormsApplication1/SkinEngine/skins.cs | 44 ++++++++++++++-------- 3 files changed, 59 insertions(+), 18 deletions(-) (limited to 'source/WindowsFormsApplication1/Desktop/ShiftOSDesktop.cs') diff --git a/source/WindowsFormsApplication1/Apps/Shifter.cs b/source/WindowsFormsApplication1/Apps/Shifter.cs index ff618cb..3e16184 100644 --- a/source/WindowsFormsApplication1/Apps/Shifter.cs +++ b/source/WindowsFormsApplication1/Apps/Shifter.cs @@ -36,14 +36,14 @@ select new { Type = t, Attributes = attributes.Cast() btn.Text = type.Attributes.First().Name; btn.Click += (o, a) => { - ShowAllPropertyGridsInCategory(btn.Text); + ShowAllPropertyGridsInCategory(Activator.CreateInstance(type.Type)); }; pnlcategories.Widgets.Add(btn); btn.Show(); } } - public void ShowAllPropertyGridsInCategory(string cat) + public void ShowAllPropertyGridsInCategory(object cls) { } @@ -53,13 +53,33 @@ select new { Type = t, Attributes = attributes.Cast() [ShifterPropertyGrid("Desktop")] public class ShifterDesktopSettings { + [Upgrade("skinning")] [SkinMap("images/desktopbackground")] public Image DesktopBackground { get; set; } + [Upgrade("shiftdesktopbackground")] [SkinMap("skin/desktopbackgroundcolour")] public Color DesktopBackgroundColor { get; set; } } + public class UpgradeAttribute : Attribute + { + public UpgradeAttribute(string upgrade) + { + upg = upgrade; + } + + private string upg = ""; + + public bool UpgradeInstalled + { + get + { + return API.Upgrades[upg]; + } + } + } + public class SkinMapAttribute : Attribute { public SkinMapAttribute(string varName) diff --git a/source/WindowsFormsApplication1/Desktop/ShiftOSDesktop.cs b/source/WindowsFormsApplication1/Desktop/ShiftOSDesktop.cs index d8be8a0..6d8af77 100644 --- a/source/WindowsFormsApplication1/Desktop/ShiftOSDesktop.cs +++ b/source/WindowsFormsApplication1/Desktop/ShiftOSDesktop.cs @@ -170,6 +170,15 @@ namespace ShiftOS private void ShiftOSDesktop_Load(object sender, EventArgs e) { + this.pnlpanelbuttonholder.AutoSize = false; + this.pnlpanelbuttonholder.WidgetAdded += (o, a) => + { + pnlpanelbuttonholder.Width += a.Widget.Width + API.CurrentSkin.panelbuttongap; + }; + this.pnlpanelbuttonholder.WidgetRemoved += (o, a) => + { + pnlpanelbuttonholder.Width -= a.Widget.Width + API.CurrentSkin.panelbuttongap; + }; Viruses.CheckForInfected(); this.ShowInTaskbar = false; this.FormBorderStyle = FormBorderStyle.None; diff --git a/source/WindowsFormsApplication1/SkinEngine/skins.cs b/source/WindowsFormsApplication1/SkinEngine/skins.cs index d18770d..b9688ba 100644 --- a/source/WindowsFormsApplication1/SkinEngine/skins.cs +++ b/source/WindowsFormsApplication1/SkinEngine/skins.cs @@ -574,33 +574,45 @@ namespace Skinning /// public static void loadskin() { - if (Directory.Exists(Paths.LoadedSkin)) + try { - string rawData = File.ReadAllText(Paths.LoadedSkin + "data.json"); - loadedSkin = JsonConvert.DeserializeObject(rawData); - if (File.Exists(Paths.LoadedSkin + "panels.json")) + if (Directory.Exists(Paths.LoadedSkin)) { - try - { - string panels = File.ReadAllText(Paths.LoadedSkin + "panels.json"); - loadedSkin.DesktopPanels = JsonConvert.DeserializeObject>(panels); - Application.LoadSkin(loadedSkin); //Send the skin to ShiftUI so buttons and stuff get rendered with custom colors. - LoadPanels(); - } - catch + string rawData = File.ReadAllText(Paths.LoadedSkin + "data.json"); + loadedSkin = JsonConvert.DeserializeObject(rawData); + if (File.Exists(Paths.LoadedSkin + "panels.json")) { + try + { + string panels = File.ReadAllText(Paths.LoadedSkin + "panels.json"); + loadedSkin.DesktopPanels = JsonConvert.DeserializeObject>(panels); + Application.LoadSkin(loadedSkin); //Send the skin to ShiftUI so buttons and stuff get rendered with custom colors. + LoadPanels(); + } + catch + { + } } - } - loadimages(); - LoadEmbeddedNamePack(); + loadimages(); + LoadEmbeddedNamePack(); + } + else + { + loadedSkin = new Skin(); + Application.LoadSkin(loadedSkin); + loadedskin_images = new Images(); + saveskin(); + } } - else + catch { loadedSkin = new Skin(); + Application.LoadSkin(loadedSkin); loadedskin_images = new Images(); saveskin(); + } } -- cgit v1.2.3 From bf7a488011c09be39bdb4980c2bb020cb1fdb71a Mon Sep 17 00:00:00 2001 From: Carver Harrison Date: Sun, 24 Jul 2016 11:17:36 -0700 Subject: Added Hashing API and Fixed Bugs --- source/ShiftUI Designer/Program.cs | 8 +- source/WindowsFormsApplication1/API.cs | 720 +++++++++++---------- .../Desktop/ShiftOSDesktop.cs | 332 +++++----- source/WindowsFormsApplication1/Program.cs | 16 +- 4 files changed, 566 insertions(+), 510 deletions(-) (limited to 'source/WindowsFormsApplication1/Desktop/ShiftOSDesktop.cs') diff --git a/source/ShiftUI Designer/Program.cs b/source/ShiftUI Designer/Program.cs index 7e4be98..4ca9e98 100644 --- a/source/ShiftUI Designer/Program.cs +++ b/source/ShiftUI Designer/Program.cs @@ -1423,10 +1423,10 @@ namespace ShiftUI_DesignerGenerated { forms.Add(type.Name, Activator.CreateInstance(type) as Form); } } - catch - { - - } + catch (Exception catcherror) + { + Console.WriteLine(catcherror); + } } foreach(var item in forms) { diff --git a/source/WindowsFormsApplication1/API.cs b/source/WindowsFormsApplication1/API.cs index e81788d..157f373 100644 --- a/source/WindowsFormsApplication1/API.cs +++ b/source/WindowsFormsApplication1/API.cs @@ -80,341 +80,391 @@ namespace ShiftOS } - public class API - { - public static Dictionary OpenGUIDs = new Dictionary(); - public static Dictionary DEF_PanelGUIDs = new Dictionary(); - - - /// - /// Settings file. - /// - public static Settings LoadedSettings = null; - - /// - /// Whether or not dev commands like '05tray' are available. - /// Typically, this is set to true if the release is classified as - /// an alpha, beta, or release candidate. - /// - /// Turn it off if the release is the final RC, or the stable release! - /// - /// Enabling developer mode will cause the save engine to not encrypt the save file - /// or Shiftorium Registry on save, enabling you to easily modify your save - /// to test new features or to bring in lots of codepoints. This is why - /// Developer mode should ALWAYS be off in non-dev releases, to prevent cheating. - /// - public static bool DeveloperMode = true; - - /// - /// If this is true, only certain applications will open and only - /// certain features will work. - /// - /// This is useful for story plots like the End Game where you don't - /// want the user being distracted by novelty features when they should - /// be focusing on what's happening. - /// - /// Think of it like the opposite of what Developer Mode would do. - /// - public static bool LimitedMode = false; - - public static bool InfoboxesPlaySounds = true; - - public static void SkinWidget(Widget c) - { - if(c is Button) - { - var b = c as Button; - b.FlatStyle = FlatStyle.Standard; - } - if(c is Panel || c is FlowLayoutPanel) - { - foreach(Widget child in c.Widgets) - { - SkinWidget(child); - } - } - } - - public static List RunningModProcesses = new List(); - public static Dictionary CommandAliases = new Dictionary(); - public static Terminal LoggerTerminal = null; - - // Alternate Names for True and False - public static bool yes = true; - public static bool no = false; - - /// - /// Logs an exception to the log. - /// - /// The text to log. - /// Is it a fatal crash? - public static void LogException(string Message, bool fatal) - { - if(!File.Exists(Paths.SystemDir + "_Log.txt")) - { - if (fatal == true) - { - File.WriteAllText(Paths.SystemDir + "_Log.txt", GetLogTime() + " [ExWatch/WARNING] ShiftOS has encountered an UNHANDLED exception with message \"" + Message + "\". Report this to Michael as well as what you were doing when it happened ASAP."); - } - else - { - File.WriteAllText(Paths.SystemDir + "_Log.txt", GetLogTime() + " ShiftOS encountered a handled exception with message \"" + Message + "\" and was able to keep going. Ignore this."); - } - } - else - { - List Entries = new List(); - foreach(string entry in File.ReadAllLines(Paths.SystemDir + "_Log.txt")) { - Entries.Add(entry); - } - if (fatal == true) - { - Entries.Add(GetLogTime() + " [ExWatch/WARNING] ShiftOS has encountered an UNHANDLED exception with message \"" + Message + "\". Report this to Michael as well as what you were doing when it happened ASAP."); - } - else - { - Entries.Add(GetLogTime() + " ShiftOS encountered a handled exception with message \"" + Message + "\" and was able to keep going. Ignore this."); - } - File.WriteAllLines(Paths.SystemDir + "_Log.txt", Entries.ToArray()); - } - } - - /// - /// Logs text to the log file. - /// - /// The text to log. - public static void Log(string Message) - { - if (!File.Exists(Paths.SystemDir + "_Log.txt")) - { - File.WriteAllText(Paths.SystemDir + "_Log.txt", GetLogTime() + " " + Message); - } - else - { - List Entries = new List(); - foreach (string entry in File.ReadAllLines(Paths.SystemDir + "_Log.txt")) - { - Entries.Add(entry); - } - Entries.Add(GetLogTime() + " " + Message); - File.WriteAllLines(Paths.SystemDir + "_Log.txt", Entries.ToArray()); - } - } - - /// - /// Gets a proper-formatted date/time string for the log. - /// - /// - public static string GetLogTime() - { - return "[" + DateTime.Now.ToLongDateString() + "\\" + DateTime.Now.ToLongTimeString() + "]"; - } - - /// - /// Property representing the currently loaded name pack. - /// - public static Skinning.NamePack LoadedNames - { - get - { - if (Skinning.Utilities.LoadedNames != null) - { - return Skinning.Utilities.LoadedNames; - } - else - { - Skinning.Utilities.LoadedNames = new Skinning.NamePack(); - Skinning.Utilities.loadedSkin.EmbeddedNamePackPath = "names.npk"; - Skinning.Utilities.SaveEmbeddedNamePack(); - Log("[Name Changer] Couldn't locate loaded name pack, using default name pack."); - return Skinning.Utilities.LoadedNames; - } - } - } - - /// - /// Adds a command line alias. - /// - /// Alias name - /// Command to run. - /// - public static bool AddAlias(string key, string value) - { - if(!AliasExists(key)) - { - CommandAliases.Add(key, value); - return true; - } - else - { - return false; - } - } - - /// - /// Saves alias list to save game. - /// - public static void SaveAliases() - { - string json = JsonConvert.SerializeObject(CommandAliases); - File.WriteAllText(Paths.SystemDir + "_aliases.json", json); - } - - /// - /// Loads alias list from the save game. - /// - public static void LoadAliases() - { - if (File.Exists(Paths.SystemDir + "_aliases.json")) { - string json = File.ReadAllText(Paths.SystemDir + "_aliases.json"); - CommandAliases = JsonConvert.DeserializeObject>(json); - } - else - { - CommandAliases = new Dictionary(); - } - - } - - /// - /// Removes an alias from the list. - /// - /// Alias to remove. - /// Whether the alias could be removed. - public static bool RemoveAlias(string key) - { - if(AliasExists(key)) - { - CommandAliases.Remove(key); - return true; - } - else - { - return false; - } - } - - /// - /// Checks if the provided alias exists. - /// - /// The alias to check. - /// Whether the alias exists. - public static bool AliasExists(string key) - { - bool no = false; - foreach(KeyValuePair kv in CommandAliases) - { - if(kv.Key == key) - { - no = true; - } - } - return no; - } - - /// - /// I have no idea what this does - Michael - /// - /// - public static void CreateNewLoggerTerminal(string AppName) - { - CreateForm(new Terminal(true), AppName, Properties.Resources.iconTerminal); - } - - public const string HiddenAPMCommand = "0Ifm0DcBBy10VZo/p4r1Jg=="; - public const string HiddenBTNConvertCommand = "js2qrls5kvZnutMbfH46sUKzKVrBtjzPlWn/wIIe/3g="; - public const string HiddenDodgeCommand = "mpL4WPUoDcZrsXnNUJ5RWQ=="; - public const string HiddenLabyrinthCommand = "NbNzpplGKaS5D/RdwrQMXw=="; - public const string HiddenQuickChatCommand = "iQm+/qDqgkHT/zgPiYRlZQ=="; - public const string HiddenShiftnetCommand = "NCM++hbZox7B+m9tXRXGnw=="; - public const string HiddenBWalletCommand = "1nLiZELFcaxkXDufrLuyfw=="; - public const string HiddenBDiggerCommand = "g/efSjsaglt//dr3XHnPOw=="; - public const string HiddenDecryptorCommand = "CYPXaweggfWAuS7ONt/OPQ=="; - - /// - /// Launches an saa file, hooks it up to the Lua API, and runs it. - /// - /// File to run. - public static void LaunchMod(string modSAA) - { - if (!LimitedMode) - { - if (Upgrades["shiftnet"] == true) - { - if (File.Exists(modSAA)) - { - if (File.ReadAllText(modSAA) == HiddenAPMCommand) - { - CreateForm(new Appscape(), "Appscape Package Manager", Properties.Resources.iconAppscape); - } - else if (File.ReadAllText(modSAA) == HiddenDecryptorCommand) - { - CreateForm(new ShiftnetDecryptor(), "Shiftnet Decryptor", Properties.Resources.iconShiftnet); - } - else if (File.ReadAllText(modSAA) == HiddenBDiggerCommand) - { - CreateForm(new BitnoteDigger(), "Bitnote Digger", Properties.Resources.iconBitnoteDigger); - } - else if (File.ReadAllText(modSAA) == HiddenBWalletCommand) - { - CreateForm(new BitnoteWallet(), "Bitnote Wallet", Properties.Resources.iconBitnoteWallet); - } - else if (File.ReadAllText(modSAA) == HiddenShiftnetCommand) - { - CreateForm(new Shiftnet(), "Shiftnet", Properties.Resources.iconShiftnet); - } - else if (File.ReadAllText(modSAA) == HiddenBTNConvertCommand) - { - CreateForm(new BitnoteConverter(), "Bitnote Converter", Properties.Resources.iconBitnoteWallet); - } - else if (File.ReadAllText(modSAA) == HiddenDodgeCommand) - { - CreateForm(new Dodge(), "Dodge", Properties.Resources.iconDodge); - } - else if (File.ReadAllText(modSAA) == HiddenLabyrinthCommand) - { - CreateForm(new Labyrinth(), "Labyrinth", null); - } - else - { - try - { - ExtractFile(modSAA, Paths.Mod_Temp, true); - var l = new LuaInterpreter(Paths.Mod_Temp + "main.lua"); - } - catch (Exception ex) - { - LogException("Error launching mod file (.saa): " + ex.Message, false); - CreateInfoboxSession("Error", "Could not launch the .saa file you specified. It is unsupported by this version of ShiftOS.", infobox.InfoboxMode.Info); - } - } - var story_rnd = new Random(); - int story_chance = story_rnd.Next(0, 3); - switch (story_chance) { - case 2: - if(API.Upgrades["holochat"] == false) - { - var t = new Terminal(); - API.CreateForm(t, API.LoadedNames.TerminalName, API.GetIcon("Terminal")); - t.StartDevXFuriousStory(); - t.BringToFront(); - } - break; - } - - } - else - { - throw new ModNotFoundException(); - } - } - } - else - { - CreateInfoboxSession("Limited mode", "ShiftOS is in limited mode and cannot perform this action. Please complete the current Mission first.", infobox.InfoboxMode.Info); - } - } - + public class API + { + public static Dictionary OpenGUIDs = new Dictionary(); + public static Dictionary DEF_PanelGUIDs = new Dictionary(); + + + /// + /// Settings file. + /// + public static Settings LoadedSettings = null; + + /// + /// Whether or not dev commands like '05tray' are available. + /// Typically, this is set to true if the release is classified as + /// an alpha, beta, or release candidate. + /// + /// Turn it off if the release is the final RC, or the stable release! + /// + /// Enabling developer mode will cause the save engine to not encrypt the save file + /// or Shiftorium Registry on save, enabling you to easily modify your save + /// to test new features or to bring in lots of codepoints. This is why + /// Developer mode should ALWAYS be off in non-dev releases, to prevent cheating. + /// + public static bool DeveloperMode = true; + + /// + /// If this is true, only certain applications will open and only + /// certain features will work. + /// + /// This is useful for story plots like the End Game where you don't + /// want the user being distracted by novelty features when they should + /// be focusing on what's happening. + /// + /// Think of it like the opposite of what Developer Mode would do. + /// + public static bool LimitedMode = false; + + public static bool InfoboxesPlaySounds = true; + + public static void SkinWidget(Widget c) + { + if (c is Button) + { + var b = c as Button; + b.FlatStyle = FlatStyle.Standard; + } + if (c is Panel || c is FlowLayoutPanel) + { + foreach (Widget child in c.Widgets) + { + SkinWidget(child); + } + } + } + + public static List RunningModProcesses = new List(); + public static Dictionary CommandAliases = new Dictionary(); + public static Terminal LoggerTerminal = null; + + // Alternate Names for True and False + public static bool yes = true; + public static bool no = false; + + /// + /// Logs an exception to the log. + /// + /// The text to log. + /// Is it a fatal crash? + public static void LogException(string Message, bool fatal) + { + if (!File.Exists(Paths.SystemDir + "_Log.txt")) + { + if (fatal == true) + { + File.WriteAllText(Paths.SystemDir + "_Log.txt", GetLogTime() + " [ExWatch/WARNING] ShiftOS has encountered an UNHANDLED exception with message \"" + Message + "\". Report this to Michael as well as what you were doing when it happened ASAP."); + } + else + { + File.WriteAllText(Paths.SystemDir + "_Log.txt", GetLogTime() + " ShiftOS encountered a handled exception with message \"" + Message + "\" and was able to keep going. Ignore this."); + } + } + else + { + List Entries = new List(); + foreach (string entry in File.ReadAllLines(Paths.SystemDir + "_Log.txt")) + { + Entries.Add(entry); + } + if (fatal == true) + { + Entries.Add(GetLogTime() + " [ExWatch/WARNING] ShiftOS has encountered an UNHANDLED exception with message \"" + Message + "\". Report this to Michael as well as what you were doing when it happened ASAP."); + } + else + { + Entries.Add(GetLogTime() + " ShiftOS encountered a handled exception with message \"" + Message + "\" and was able to keep going. Ignore this."); + } + File.WriteAllLines(Paths.SystemDir + "_Log.txt", Entries.ToArray()); + } + } + + /// + /// Logs text to the log file. + /// + /// The text to log. + public static void Log(string Message) + { + if (!File.Exists(Paths.SystemDir + "_Log.txt")) + { + File.WriteAllText(Paths.SystemDir + "_Log.txt", GetLogTime() + " " + Message); + } + else + { + List Entries = new List(); + foreach (string entry in File.ReadAllLines(Paths.SystemDir + "_Log.txt")) + { + Entries.Add(entry); + } + Entries.Add(GetLogTime() + " " + Message); + File.WriteAllLines(Paths.SystemDir + "_Log.txt", Entries.ToArray()); + } + } + + /// + /// Gets a proper-formatted date/time string for the log. + /// + /// + public static string GetLogTime() + { + return "[" + DateTime.Now.ToLongDateString() + "\\" + DateTime.Now.ToLongTimeString() + "]"; + } + + /// + /// Property representing the currently loaded name pack. + /// + public static Skinning.NamePack LoadedNames + { + get + { + if (Skinning.Utilities.LoadedNames != null) + { + return Skinning.Utilities.LoadedNames; + } + else + { + Skinning.Utilities.LoadedNames = new Skinning.NamePack(); + Skinning.Utilities.loadedSkin.EmbeddedNamePackPath = "names.npk"; + Skinning.Utilities.SaveEmbeddedNamePack(); + Log("[Name Changer] Couldn't locate loaded name pack, using default name pack."); + return Skinning.Utilities.LoadedNames; + } + } + } + + /// + /// Adds a command line alias. + /// + /// Alias name + /// Command to run. + /// + public static bool AddAlias(string key, string value) + { + if (!AliasExists(key)) + { + CommandAliases.Add(key, value); + return true; + } + else + { + return false; + } + } + + /// + /// Saves alias list to save game. + /// + public static void SaveAliases() + { + string json = JsonConvert.SerializeObject(CommandAliases); + File.WriteAllText(Paths.SystemDir + "_aliases.json", json); + } + + /// + /// Loads alias list from the save game. + /// + public static void LoadAliases() + { + if (File.Exists(Paths.SystemDir + "_aliases.json")) + { + string json = File.ReadAllText(Paths.SystemDir + "_aliases.json"); + CommandAliases = JsonConvert.DeserializeObject>(json); + } + else + { + CommandAliases = new Dictionary(); + } + + } + + /// + /// Removes an alias from the list. + /// + /// Alias to remove. + /// Whether the alias could be removed. + public static bool RemoveAlias(string key) + { + if (AliasExists(key)) + { + CommandAliases.Remove(key); + return true; + } + else + { + return false; + } + } + + /// + /// Checks if the provided alias exists. + /// + /// The alias to check. + /// Whether the alias exists. + public static bool AliasExists(string key) + { + bool nay = false; + foreach (KeyValuePair kv in CommandAliases) + { + if (kv.Key == key) + { + nay = true; + } + } + return nay; + } + + /// + /// I have no idea what this does - Michael + /// + /// + public static void CreateNewLoggerTerminal(string AppName) + { + CreateForm(new Terminal(true), AppName, Properties.Resources.iconTerminal); + } + + public const string HiddenAPMCommand = "0Ifm0DcBBy10VZo/p4r1Jg=="; + public const string HiddenBTNConvertCommand = "js2qrls5kvZnutMbfH46sUKzKVrBtjzPlWn/wIIe/3g="; + public const string HiddenDodgeCommand = "mpL4WPUoDcZrsXnNUJ5RWQ=="; + public const string HiddenLabyrinthCommand = "NbNzpplGKaS5D/RdwrQMXw=="; + public const string HiddenQuickChatCommand = "iQm+/qDqgkHT/zgPiYRlZQ=="; + public const string HiddenShiftnetCommand = "NCM++hbZox7B+m9tXRXGnw=="; + public const string HiddenBWalletCommand = "1nLiZELFcaxkXDufrLuyfw=="; + public const string HiddenBDiggerCommand = "g/efSjsaglt//dr3XHnPOw=="; + public const string HiddenDecryptorCommand = "CYPXaweggfWAuS7ONt/OPQ=="; + + /// + /// Launches an saa file, hooks it up to the Lua API, and runs it. + /// + /// File to run. + public static void LaunchMod(string modSAA) + { + if (!LimitedMode) + { + if (Upgrades["shiftnet"] == true) + { + if (File.Exists(modSAA)) + { + if (File.ReadAllText(modSAA) == HiddenAPMCommand) + { + CreateForm(new Appscape(), "Appscape Package Manager", Properties.Resources.iconAppscape); + } + else if (File.ReadAllText(modSAA) == HiddenDecryptorCommand) + { + CreateForm(new ShiftnetDecryptor(), "Shiftnet Decryptor", Properties.Resources.iconShiftnet); + } + else if (File.ReadAllText(modSAA) == HiddenBDiggerCommand) + { + CreateForm(new BitnoteDigger(), "Bitnote Digger", Properties.Resources.iconBitnoteDigger); + } + else if (File.ReadAllText(modSAA) == HiddenBWalletCommand) + { + CreateForm(new BitnoteWallet(), "Bitnote Wallet", Properties.Resources.iconBitnoteWallet); + } + else if (File.ReadAllText(modSAA) == HiddenShiftnetCommand) + { + CreateForm(new Shiftnet(), "Shiftnet", Properties.Resources.iconShiftnet); + } + else if (File.ReadAllText(modSAA) == HiddenBTNConvertCommand) + { + CreateForm(new BitnoteConverter(), "Bitnote Converter", Properties.Resources.iconBitnoteWallet); + } + else if (File.ReadAllText(modSAA) == HiddenDodgeCommand) + { + CreateForm(new Dodge(), "Dodge", Properties.Resources.iconDodge); + } + else if (File.ReadAllText(modSAA) == HiddenLabyrinthCommand) + { + CreateForm(new Labyrinth(), "Labyrinth", null); + } + else + { + try + { + ExtractFile(modSAA, Paths.Mod_Temp, true); + var l = new LuaInterpreter(Paths.Mod_Temp + "main.lua"); + } + catch (Exception ex) + { + LogException("Error launching mod file (.saa): " + ex.Message, false); + CreateInfoboxSession("Error", "Could not launch the .saa file you specified. It is unsupported by this version of ShiftOS.", infobox.InfoboxMode.Info); + } + } + var story_rnd = new Random(); + int story_chance = story_rnd.Next(0, 3); + switch (story_chance) + { + case 2: + if (API.Upgrades["holochat"] == false) + { + var t = new Terminal(); + API.CreateForm(t, API.LoadedNames.TerminalName, API.GetIcon("Terminal")); + t.StartDevXFuriousStory(); + t.BringToFront(); + } + break; + } + + } + else + { + throw new ModNotFoundException(); + } + } + } + else + { + CreateInfoboxSession("Limited mode", "ShiftOS is in limited mode and cannot perform this action. Please complete the current Mission first.", infobox.InfoboxMode.Info); + } + } + + /// + /// Base64 Function + /// + public static class Base64 + { + public static string Encrypt(string text) + { + return Convert.ToBase64String(Encoding.UTF8.GetBytes(text)); + } + + public static string Decrypt(string text) + { + return Encoding.UTF8.GetString(Convert.FromBase64String(text)); + } + } + + /// + /// Hashing API + /// By Carver Harrison (@carverh) + /// + public static class Hash + { + public static string MD5(string text) + { + return Encoding.UTF8.GetString(System.Security.Cryptography.MD5.Create(text).Hash); + } + public static string SHA1(string text) + { + return Encoding.UTF8.GetString(System.Security.Cryptography.SHA1.Create(text).Hash); + } + public static string SHA256(string text) + { + return Encoding.UTF8.GetString(System.Security.Cryptography.SHA256.Create(text).Hash); + } + public static string SHA384(string text) + { + return Encoding.UTF8.GetString(System.Security.Cryptography.SHA384.Create(text).Hash); + } + public static string SHA512(string text) + { + return Encoding.UTF8.GetString(System.Security.Cryptography.SHA512.Create(text).Hash); + } + public static string DSA(string text) + { + return Encoding.UTF8.GetString(System.Security.Cryptography.DSA.Create().CreateSignature(Encoding.UTF8.GetBytes(text))); + } + } /// /// Source: http://stackoverflow.com/questions/10168240/encrypting-decrypting-a-string-in-c-sharp diff --git a/source/WindowsFormsApplication1/Desktop/ShiftOSDesktop.cs b/source/WindowsFormsApplication1/Desktop/ShiftOSDesktop.cs index 6d8af77..85659c2 100644 --- a/source/WindowsFormsApplication1/Desktop/ShiftOSDesktop.cs +++ b/source/WindowsFormsApplication1/Desktop/ShiftOSDesktop.cs @@ -327,45 +327,53 @@ namespace ShiftOS public void SetupDesktop() { - SetupRenderers(); - SetupDesktopPanel(); - SetupAppLauncher(); - SetupDesktopIcons(); - SetupGNOME2Elements(); - SetupPanelClock(); - SetupPanelButtons(); - CheckUnity(); - SetupWidgets(); - CheckForChristmas(); - //Set up the context menus. - addDesktopPanelToolStripMenuItem.Visible = API.Upgrades["advanceddesktop"]; - widgetManagerToolStripMenuItem.Visible = API.Upgrades["advanceddesktop"]; - if (API.Upgrades["advanceddesktop"]) - { - AppLauncherPanel.ContextMenuStrip = cbwidget; - Clock.ContextMenuStrip = cbwidget; - PanelButtonHolder.ContextMenuStrip = cbwidget; - } - else - { - AppLauncherPanel.ContextMenuStrip = null; - Clock.ContextMenuStrip = null; - PanelButtonHolder.ContextMenuStrip = null; - } - if (DesktopPanels != null) { - foreach (var dp in DesktopPanels) - { - if (API.Upgrades["advanceddesktop"]) - { - dp.ContextMenuStrip = cbdpanel; - } - else - { - dp.ContextMenuStrip = cbdpanel; - } - } - } - OnDesktopReload?.Invoke(); + try + { + SetupRenderers(); + SetupDesktopPanel(); + SetupAppLauncher(); + SetupDesktopIcons(); + SetupGNOME2Elements(); + SetupPanelClock(); + SetupPanelButtons(); + CheckUnity(); + SetupWidgets(); + CheckForChristmas(); + //Set up the context menus. + addDesktopPanelToolStripMenuItem.Visible = API.Upgrades["advanceddesktop"]; + widgetManagerToolStripMenuItem.Visible = API.Upgrades["advanceddesktop"]; + if (API.Upgrades["advanceddesktop"]) + { + AppLauncherPanel.ContextMenuStrip = cbwidget; + Clock.ContextMenuStrip = cbwidget; + PanelButtonHolder.ContextMenuStrip = cbwidget; + } + else + { + AppLauncherPanel.ContextMenuStrip = null; + Clock.ContextMenuStrip = null; + PanelButtonHolder.ContextMenuStrip = null; + } + if (DesktopPanels != null) + { + foreach (var dp in DesktopPanels) + { + if (API.Upgrades["advanceddesktop"]) + { + dp.ContextMenuStrip = cbdpanel; + } + else + { + dp.ContextMenuStrip = cbdpanel; + } + } + } + OnDesktopReload?.Invoke(); + } + catch (Exception catcherror) + { + Console.WriteLine(catcherror); + } } public void SetupWidgets() @@ -1072,23 +1080,23 @@ namespace ShiftOS if (API.Upgrades["usefulpanelbuttons"]) { Widget ctrl = (Widget)sender; - try - { - PanelButton pbtn = (PanelButton)ctrl.Tag; - var frm = pbtn.FormToManage; - if(frm.Left < Screen.PrimaryScreen.Bounds.Width) - { - API.MinimizeForm(frm); - } - else - { - API.ToggleMinimized(frm); - } - } - catch - { - - } + try + { + PanelButton pbtn = (PanelButton)ctrl.Tag; + var frm = pbtn.FormToManage; + if (frm.Left < Screen.PrimaryScreen.Bounds.Width) + { + API.MinimizeForm(frm); + } + else + { + API.ToggleMinimized(frm); + } + } + catch (Exception catcherror) + { + Console.WriteLine(catcherror); + } } } @@ -1315,113 +1323,111 @@ namespace ShiftOS public static List Icons = null; public static List Models = null; - public static void GetIcons() - { - Icons = new List(); - Models = new List(); - API.GetAppLauncherItems(); - if (!Directory.Exists(Paths.Desktop)) - { - Directory.CreateDirectory(Paths.Desktop); - } - else - { - foreach (string dir in Directory.GetDirectories(Paths.Desktop)) - { - //Get dir info - var dinf = new DirectoryInfo(dir); - //Create new IconModel - var m = new IconModel(); - //Set name to dir name - m.Name = dinf.Name; - //Set type to Directory - m.Type = IconType.Directory; - //Set lua to open directory in File Skimmer - m.Lua = $"fileskimmer('/Home/Desktop/{dinf.Name}')"; - Models.Add(m); - } - foreach (string file in Directory.GetFiles(Paths.Desktop)) - { - //Get file info - var finf = new FileInfo(file); - //Create new IconModel - var icm = new IconModel(); - //Set IconModel name to filename - icm.Name = finf.Name; - //Set IconModel's type based on file extension - switch (finf.Extension.ToLower()) //Make the string lower-case for ease of use. - { - case ".desktop": - //Desktop script. - icm.Type = IconType.Script; - icm.Lua = File.ReadAllText(finf.FullName); //The Lua that is to be ran by this script is in the file. - break; - case ".sct": - //Desktop Shortcut - NYI - break; - default: - //File. - icm.Type = IconType.File; - icm.Lua = $"fopen('/Home/Desktop/{finf.Name}')"; - break; - } - Models.Add(icm); - } - } - - foreach(IconModel m in Models) - { - var d = new DesktopIcon(); - d.IconName = m.Name; - d.LuaAction = m.Lua; - switch(m.Type) - { - case IconType.Directory: - d.Icon = API.GetIcon("Folder"); - break; - default: - var finf = new FileInfo(Paths.Desktop + d.IconName); - switch(finf.Extension) - { - case ".txt": - case ".doc": - case ".owd": - case ".docx": - d.Icon = API.GetIcon("TextFile"); - break; - case ".skn": - case ".spk": - d.Icon = API.GetIcon("SkinFile"); - break; - case ".saa": - d.Icon = API.GetIcon("SAAFile"); - break; - case ".pkg": - case ".stp": - d.Icon = API.GetIcon("SetupPackage"); - break; - default: - d.Icon = API.GetIcon("UnrecognizedFile"); - break; - } - break; - } - Icons.Add(d); - } - foreach (ApplauncherItem al in API.AppLauncherItems) - { - if (al.Display == true) - { - var dl = new DesktopIcon(); - dl.Icon = al.Icon; - dl.IconName = al.Name; - dl.LuaAction = al.Lua; - Icons.Add(dl); - } - } - - } - + public static void GetIcons() + { + Icons = new List(); + Models = new List(); + API.GetAppLauncherItems(); + if (!Directory.Exists(Paths.Desktop)) + { + Directory.CreateDirectory(Paths.Desktop); + } + else + { + foreach (string dir in Directory.GetDirectories(Paths.Desktop)) + { + //Get dir info + var dinf = new DirectoryInfo(dir); + //Create new IconModel + var m = new IconModel(); + //Set name to dir name + m.Name = dinf.Name; + //Set type to Directory + m.Type = IconType.Directory; + //Set lua to open directory in File Skimmer + m.Lua = $"fileskimmer('/Home/Desktop/{dinf.Name}')"; + Models.Add(m); + } + foreach (string file in Directory.GetFiles(Paths.Desktop)) + { + //Get file info + var finf = new FileInfo(file); + //Create new IconModel + var icm = new IconModel(); + //Set IconModel name to filename + icm.Name = finf.Name; + //Set IconModel's type based on file extension + switch (finf.Extension.ToLower()) //Make the string lower-case for ease of use. + { + case ".desktop": + //Desktop script. + icm.Type = IconType.Script; + icm.Lua = File.ReadAllText(finf.FullName); //The Lua that is to be ran by this script is in the file. + break; + case ".sct": + //Desktop Shortcut - NYI + break; + default: + //File. + icm.Type = IconType.File; + icm.Lua = $"fopen('/Home/Desktop/{finf.Name}')"; + break; + } + Models.Add(icm); + } + } + + foreach (IconModel m in Models) + { + var d = new DesktopIcon(); + d.IconName = m.Name; + d.LuaAction = m.Lua; + switch (m.Type) + { + case IconType.Directory: + d.Icon = API.GetIcon("Folder"); + break; + default: + var finf = new FileInfo(Paths.Desktop + d.IconName); + switch (finf.Extension) + { + case ".txt": + case ".doc": + case ".owd": + case ".docx": + d.Icon = API.GetIcon("TextFile"); + break; + case ".skn": + case ".spk": + d.Icon = API.GetIcon("SkinFile"); + break; + case ".saa": + d.Icon = API.GetIcon("SAAFile"); + break; + case ".pkg": + case ".stp": + d.Icon = API.GetIcon("SetupPackage"); + break; + default: + d.Icon = API.GetIcon("UnrecognizedFile"); + break; + } + break; + } + Icons.Add(d); + } + foreach (ApplauncherItem al in API.AppLauncherItems) + { + if (al.Display == true) + { + var dl = new DesktopIcon(); + dl.Icon = al.Icon; + dl.IconName = al.Name; + dl.LuaAction = al.Lua; + Icons.Add(dl); + } + } + } public class IconModel { public string Name { get; set; } diff --git a/source/WindowsFormsApplication1/Program.cs b/source/WindowsFormsApplication1/Program.cs index af294db..e6c4c23 100644 --- a/source/WindowsFormsApplication1/Program.cs +++ b/source/WindowsFormsApplication1/Program.cs @@ -40,10 +40,10 @@ namespace ShiftOS int port = Convert.ToInt32(addSplitter[1]); Package_Grabber.ConnectToServer(host, port); } - catch - { - - } + catch (Exception catcherror) + { + Console.WriteLine(catcherror); + } } } catch @@ -129,10 +129,10 @@ namespace ShiftOS } } } - catch - { - - } + catch (Exception e) + { + Console.WriteLine(e); + } } -- cgit v1.2.3