This repository has been archived on 2025-01-01. You can view files and clone it, but cannot push or open issues or pull requests.
ShiftOS_TheReturn/ShiftOS_TheReturn/AppearanceManager.cs
2017-01-08 10:17:07 -05:00

208 lines
5.6 KiB
C#

/*
* 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.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Newtonsoft.Json;
using static ShiftOS.Engine.SaveSystem;
namespace ShiftOS.Engine
{
public static class AppearanceManager
{
[Obsolete("Please use Localization.GetAllLanguages().")]
public static string[] GetLanguages()
{
return Localization.GetAllLanguages();
}
public static void AddFocusEvents(Control ctrl, Control child)
{
child.Enter += (o, a) =>
{
ctrl.BringToFront();
};
child.MouseDown += (o, a) =>
{
ctrl.BringToFront();
};
foreach (Control c in child.Controls)
{
c.Enter += (o, a) =>
{
ctrl.BringToFront();
};
c.MouseDown += (o, a) =>
{
ctrl.BringToFront();
};
try
{
AddFocusEvents(ctrl, c);
}
catch { }
}
}
public static string LastTerminalText { get; set; }
public static int CurrentPosition { get; set; }
public static int LastLength { get; set; }
public static void Minimize(IWindowBorder form)
{
winmgr.Minimize(form);
}
public static void Maximize(IWindowBorder form)
{
winmgr.Maximize(form);
}
public static List<IWindowBorder> OpenForms = new List<IWindowBorder>();
public static bool CanOpenWindow(IShiftOSWindow form)
{
#if !MUD_RAPIDDEV
if (ServerManager.IsSingleplayer)
{
foreach (var attr in form.GetType().GetCustomAttributes(false))
{
if (attr is MultiplayerOnlyAttribute)
return false;
}
}
#endif
return true;
}
public static void SetupWindow(IShiftOSWindow form)
{
winmgr.SetupWindow(form);
Desktop.ResetPanelButtons();
}
public static void Close(IShiftOSWindow win)
{
winmgr.Close(win);
Desktop.ResetPanelButtons();
}
public static void SetupDialog(IShiftOSWindow form)
{
winmgr.SetupDialog(form);
Desktop.ResetPanelButtons();
}
private static WindowManager winmgr = null;
public static double Measure(this string text, Font font)
{
return Graphics.FromImage(new Bitmap(1, 1)).MeasureString(text, font).Width;
}
public static void Initiate(WindowManager mgr)
{
winmgr = mgr;
}
[Obsolete("This is a stub.")]
public static void DoWinformsSkinningMagicOnWpf(this UserControl ctrl)
{
//SetupControls(ctrl);
}
public static event EmptyEventHandler OnExit;
internal static void Exit()
{
OnExit?.Invoke();
//disconnect from MUD
ServerManager.Disconnect();
}
internal static bool BordersHidden(Form frm)
{
string t = frm.Tag as string;
if (t == null)
return false;
return t.Contains("hidden");
}
public static ITerminalWidget ConsoleOut { get; set; }
public static void StartConsoleOut()
{
Console.SetOut(new TerminalTextWriter());
}
public static void Invoke(Action act)
{
winmgr.InvokeAction(act);
}
}
public interface ITerminalWidget
{
void Write(string text);
void WriteLine(string text);
void Clear();
void SelectBottom();
}
public abstract class WindowManager
{
public abstract void Minimize(IWindowBorder border);
public abstract void Maximize(IWindowBorder border);
public abstract void Close(IShiftOSWindow win);
public abstract void SetupWindow(IShiftOSWindow win);
public abstract void SetupDialog(IShiftOSWindow win);
public abstract void InvokeAction(Action act);
}
public interface IWindowBorder
{
void Close();
string Text { get; set; }
IShiftOSWindow ParentWindow { get; set; }
}
}