aboutsummaryrefslogtreecommitdiff
path: root/ShiftOS_TheReturn/AppearanceManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'ShiftOS_TheReturn/AppearanceManager.cs')
-rw-r--r--ShiftOS_TheReturn/AppearanceManager.cs263
1 files changed, 263 insertions, 0 deletions
diff --git a/ShiftOS_TheReturn/AppearanceManager.cs b/ShiftOS_TheReturn/AppearanceManager.cs
new file mode 100644
index 0000000..81858d3
--- /dev/null
+++ b/ShiftOS_TheReturn/AppearanceManager.cs
@@ -0,0 +1,263 @@
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#define MUD_RAPIDDEV
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Drawing;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Newtonsoft.Json;
+using static ShiftOS.Engine.SaveSystem;
+
+namespace ShiftOS.Engine
+{
+ // Provides functionality for managing windows within ShiftOS.
+ public static class AppearanceManager
+ {
+ [Obsolete("Please use Localization.GetAllLanguages().")]
+ public static string[] GetLanguages()
+ {
+ return Localization.GetAllLanguages();
+ }
+
+ // Sets the title text of the specified window.
+ public static void SetWindowTitle(IShiftOSWindow window, string title)
+ {
+ if (window == null)
+ throw new ArgumentNullException("window", "The window cannot be null.");
+ winmgr.SetTitle(window, title);
+ }
+
+ //HEY LETS FIND THE WINDOWS
+ public static IEnumerable<Type> GetAllWindowTypes()
+ {
+ List<Type> types = new List<Type>();
+ foreach(var file in System.IO.Directory.GetFiles(Environment.CurrentDirectory))
+ {
+ // hey if a thing is an exe or a dll show up plz kthx
+ if(file.EndsWith(".exe") || file.EndsWith(".dll"))
+ {
+ try
+ {
+ var asm = Assembly.LoadFile(file);
+ foreach(var type in asm.GetTypes())
+ {
+ if (type.GetInterfaces().Contains(typeof(IShiftOSWindow)))
+ types.Add(type);
+ }
+ }
+ catch { }
+ }
+ }
+ return types;
+ }
+
+ // hey you know that window we just made appear? well give it its title
+ public static string GetDefaultTitle(Type winType)
+ {
+ if (winType == null)
+ throw new ArgumentNullException("winType");
+ foreach(var attrib in winType.GetCustomAttributes(false))
+ {
+ if(attrib is DefaultTitleAttribute)
+ {
+ return (attrib as DefaultTitleAttribute).Title;
+ }
+ }
+ return winType.Name;
+ }
+
+ // Current cursor position of the console
+ public static int CurrentPosition { get; set; }
+
+ // We don't know what this does. It may be gone if it does nothing.
+ public static int LastLength { get; set; }
+
+
+ // Minimize a window.
+ public static void Minimize(IWindowBorder form)
+ {
+ if (form == null)
+ //FUCK WHY THE FUCK IS THIS NULL
+ throw new ArgumentNullException("form");
+ if (winmgr == null)
+ //FUCK THIS PART OF THE ENGINE WASNT TURNED ON YET
+ throw new EngineModuleDisabledException();
+ winmgr.Minimize(form);
+ }
+
+ // Maximizes a window! :D
+ public static void Maximize(IWindowBorder form)
+ {
+ if (form == null)
+ //AHHHH SHOULDNT BE NULLLLLL
+ throw new ArgumentNullException("form");
+ if (winmgr == null)
+ //WHY ARE YOU DOING THIS PART OF THE ENGINE IT WASNT ENABLED FUCK
+ throw new EngineModuleDisabledException();
+ winmgr.Maximize(form);
+ }
+
+
+ // Provides a list of all open ShiftOS windows.
+ public static List<IWindowBorder> OpenForms = new List<IWindowBorder>();
+
+ // Decorates a window with a border, then shows the window.
+ public static void SetupWindow(IShiftOSWindow form)
+ {
+ if (form == null)
+ //YOU GET THE POINT THIS REALLY SHOULDNT BE NULL
+ throw new ArgumentNullException("form");
+ if (winmgr == null)
+ //SAME HERE
+ throw new EngineModuleDisabledException();
+ winmgr.SetupWindow(form);
+ Desktop.ResetPanelButtons();
+ }
+
+ // Closes the specified window. SHOCKED YOU ARE I KNOW, HOW COULD YOU HAVE GUESSED
+ public static void Close(IShiftOSWindow win)
+ {
+ if (win == null)
+ //NOPE SHOULDNT BE NULL
+ throw new ArgumentNullException("win");
+ if (winmgr == null)
+ //WHY IS THIS NULL
+ throw new EngineModuleDisabledException();
+ winmgr.Close(win);
+ Desktop.ResetPanelButtons();
+ }
+
+
+ // Decorates a window with a border, then shows the window, as a dialog box.
+ public static void SetupDialog(IShiftOSWindow form)
+ {
+ if (form == null)
+ //NULLLLLLLLL
+ throw new ArgumentNullException("form");
+ if (winmgr == null)
+ //ASGDFHASDGF
+ throw new EngineModuleDisabledException();
+ winmgr.SetupDialog(form);
+ Desktop.ResetPanelButtons();
+ }
+
+ // The underlying window manager for this engine module
+ private static WindowManager winmgr = null;
+
+ // Initiate this engine module, and perform mandatory configuration.
+ public static void Initiate(WindowManager mgr)
+ {
+ winmgr = mgr; // A working, configured window manager to use as a backend for this module
+ }
+
+
+ // Raised when the engine is entering its shutdown phase. Save your work!
+ public static event EmptyEventHandler OnExit;
+
+ // Starts the engine's exit routine, firing the OnExit event.
+ internal static void Exit()
+ {
+ OnExit?.Invoke();
+ //disconnect from MUD
+ ServerManager.Disconnect();
+ Desktop.InvokeOnWorkerThread(() =>
+ {
+ Environment.Exit(0); //bye bye
+ });
+ }
+
+ // The current terminal body control.
+ public static ITerminalWidget ConsoleOut { get; set; }
+
+ // Redirects the .NET to a new TerminalTextWriter instance.
+ public static void StartConsoleOut()
+ {
+ Console.SetOut(new TerminalTextWriter()); //"plz start writing text .NET kthx"
+ }
+
+ // Invokes an action on the window management thread.
+ public static void Invoke(Action act)
+ {
+ winmgr.InvokeAction(act);
+ }
+ }
+
+ // Provides the base functionality for a ShiftOS terminal.
+ public interface ITerminalWidget
+ {
+ void Write(string text); // Actually write text to this Terminal! :D:D:D:D
+ void WriteLine(string text); // Write text to this Terminal, followed by a newline.
+ void Clear(); // Clear the contents of this Terminal, i bet you wouldve never guessed that
+ void SelectBottom(); // Move the cursor to the last character in the Terminal.
+ }
+
+ // makes the window manager actually do its job
+ public abstract class WindowManager
+ {
+ public abstract void Minimize(IWindowBorder border); // guess what this does
+ public abstract void Maximize(IWindowBorder border); // ooh this too
+ public abstract void Close(IShiftOSWindow win); // omg this probably does something
+ public abstract void SetupWindow(IShiftOSWindow win); // i cant think of what this does
+ public abstract void SetupDialog(IShiftOSWindow win); // how about this???????
+ public abstract void InvokeAction(Action act); // i wonder what this invokes
+ public abstract void SetTitle(IShiftOSWindow win, string title); // what is a title again
+ }
+
+ // Provides the base functionality for a typical ShiftOS window border, what did you expect
+ public interface IWindowBorder
+ {
+ void Close(); // CLOSES THE BORDER ALONG WITH ITS WINDOW!!!!!!! HOLY SHIT I DIDNT EXPECT THAT
+ string Text { get; set; } // title text exists now
+ IShiftOSWindow ParentWindow { get; set; } // Gets or sets the underlying for this border.
+ }
+
+ // Provides a way of setting default title text for classes.
+ public class DefaultTitleAttribute : Attribute
+ {
+ // oy if you cant find a title this is the one you should use
+ public DefaultTitleAttribute(string title)
+ {
+ Title = title;
+ }
+
+ public string Title { get; private set; }
+ }
+
+ // An exception that is thrown when mandatory configuration to run a specific method or module hasn't been done yet.
+ public class EngineModuleDisabledException : Exception
+ {
+ // FUCK WE DIDNT ORDER THINGS RIGHT
+ public EngineModuleDisabledException() : base("This engine module has not yet been enabled.")
+ {
+ //FUCK
+ }
+ }
+}