diff options
| author | Michael <[email protected]> | 2017-01-08 09:57:10 -0500 |
|---|---|---|
| committer | Michael <[email protected]> | 2017-01-08 09:57:10 -0500 |
| commit | f30dcf5ef41d54c588d7b42c48be8d941abba72e (patch) | |
| tree | 7705f99b965673b1c034ac2b1c56e65072c827df /ShiftOS.WinForms/WinformsDesktop.cs | |
| parent | 69dfad54724d4176dfce238a8d7e73970e6eef24 (diff) | |
| download | shiftos_thereturn-f30dcf5ef41d54c588d7b42c48be8d941abba72e.tar.gz shiftos_thereturn-f30dcf5ef41d54c588d7b42c48be8d941abba72e.tar.bz2 shiftos_thereturn-f30dcf5ef41d54c588d7b42c48be8d941abba72e.zip | |
Initial upload
Diffstat (limited to 'ShiftOS.WinForms/WinformsDesktop.cs')
| -rw-r--r-- | ShiftOS.WinForms/WinformsDesktop.cs | 264 |
1 files changed, 264 insertions, 0 deletions
diff --git a/ShiftOS.WinForms/WinformsDesktop.cs b/ShiftOS.WinForms/WinformsDesktop.cs new file mode 100644 index 0000000..f358c95 --- /dev/null +++ b/ShiftOS.WinForms/WinformsDesktop.cs @@ -0,0 +1,264 @@ +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; +using ShiftOS.Engine; +using static ShiftOS.Engine.SkinEngine; +using ShiftOS.WinForms.Tools; + +namespace ShiftOS.WinForms +{ + public partial class WinformsDesktop : Form, IDesktop + { + private static event Action<WindowBorder> windowAdded; + + public WinformsDesktop() + { + InitializeComponent(); + this.TopMost = false; + this.LocationChanged += (o, a) => + { + if (this.Left != 0) + this.Left = 0; + if (this.Top != 0) + this.Top = 0; + }; + + this.SizeChanged += (o, a) => + { + if (this.ClientRectangle != Screen.PrimaryScreen.Bounds) + { + this.WindowState = FormWindowState.Maximized; + } + }; + + SaveSystem.GameReady += () => this.Invoke(new Action(() => SetupDesktop())); + Shiftorium.Installed += () => this.Invoke(new Action(() => SetupDesktop())); + var time = new Timer(); + time.Interval = 100; + this.KeyDown += (o, a) => + { + if (a.Control && a.KeyCode == Keys.T) + { + Engine.AppearanceManager.SetupWindow(new Applications.Terminal()); + } + /*if (a.Control && a.KeyCode == Keys.Tab) + { + // CtrlTabMenu + CtrlTabMenu.Show(); + if (a.Shift) CtrlTabMenu.CycleBack(); + else CtrlTabMenu.CycleForwards(); + }*/ //nyi + }; + SkinEngine.SkinLoaded += () => + { + SetupDesktop(); + }; + time.Tick += (o, a) => + { + if (SaveSystem.CurrentSave != null) + { + lbtime.Text = Applications.Terminal.GetTime(); + lbtime.Left = desktoppanel.Width - lbtime.Width - LoadedSkin.DesktopPanelClockFromRight.X; + lbtime.Top = LoadedSkin.DesktopPanelClockFromRight.Y; + } + }; + time.Start(); + + this.DoubleBuffered = true; + } + + public void PopulatePanelButtons() + { + panelbuttonholder.Controls.Clear(); + if (Shiftorium.UpgradeInstalled("wm_panel_buttons")) + { + foreach (WindowBorder form in Engine.AppearanceManager.OpenForms) + { + if (form != null) + { + if (form.Visible == true) + { + var pnlbtn = new Panel(); + pnlbtn.Margin = new Padding(2, LoadedSkin.PanelButtonFromTop, 0, 0); + pnlbtn.BackgroundImage = GetImage("panelbutton"); + pnlbtn.BackgroundImageLayout = GetImageLayout("panelbutton"); + + var pnlbtntext = new Label(); + pnlbtntext.Text = form.Text; + pnlbtntext.AutoSize = true; + pnlbtntext.Location = LoadedSkin.PanelButtonFromLeft; + pnlbtntext.ForeColor = LoadedSkin.PanelButtonTextColor; + pnlbtntext.Font = LoadedSkin.PanelButtonFont; + + pnlbtn.BackColor = LoadedSkin.PanelButtonColor; + if (pnlbtn.BackgroundImage != null) + { + pnlbtntext.BackColor = Color.Transparent; + } + pnlbtn.Size = LoadedSkin.PanelButtonSize; + + pnlbtn.Controls.Add(pnlbtntext); + this.panelbuttonholder.Controls.Add(pnlbtn); + ControlManager.SetupControls(pnlbtn); + pnlbtn.Show(); + pnlbtntext.Show(); + } + } + } + } + } + + public void SetupDesktop() + { + ToolStripManager.Renderer = new ShiftOSMenuRenderer(); + + this.DoubleBuffered = true; + this.FormBorderStyle = FormBorderStyle.None; + this.WindowState = FormWindowState.Maximized; + desktoppanel.BackColor = Color.Green; + + //upgrades + + if (SaveSystem.CurrentSave != null) + { + desktoppanel.Visible = Shiftorium.UpgradeInstalled("desktop"); + lbtime.Visible = Shiftorium.UpgradeInstalled("desktop_clock_widget"); + + //skinning + lbtime.ForeColor = LoadedSkin.DesktopPanelClockColor; + + panelbuttonholder.Top = 0; + panelbuttonholder.Left = LoadedSkin.PanelButtonHolderFromLeft; + panelbuttonholder.Height = desktoppanel.Height; + panelbuttonholder.BackColor = Color.Transparent; + panelbuttonholder.Margin = new Padding(0, 0, 0, 0); + + sysmenuholder.Visible = Shiftorium.UpgradeInstalled("app_launcher"); + + //The Color Picker can give us transparent colors - which Windows Forms fucking despises when dealing with form backgrounds. + //To compensate, we must recreate the desktop color and make the alpha channel '255'. + this.BackColor = Color.FromArgb(LoadedSkin.DesktopColor.R, LoadedSkin.DesktopColor.G, LoadedSkin.DesktopColor.B); + //Not doing this will cause an ArgumentException. + + DitheringEngine.DitherImage(SkinEngine.GetImage("desktopbackground"), new Action<Image>((img) => + { + this.BackgroundImage = img; + })); + this.BackgroundImageLayout = GetImageLayout("desktopbackground"); + desktoppanel.BackgroundImage = GetImage("desktoppanel"); + menuStrip1.BackgroundImage = GetImage("applauncher"); + lbtime.ForeColor = LoadedSkin.DesktopPanelClockColor; + lbtime.Font = LoadedSkin.DesktopPanelClockFont; + if (desktoppanel.BackgroundImage == null) + { + lbtime.BackColor = LoadedSkin.DesktopPanelClockBackgroundColor; + } + else + { + lbtime.BackColor = Color.Transparent; + } + apps.Text = LoadedSkin.AppLauncherText; + sysmenuholder.Location = LoadedSkin.AppLauncherFromLeft; + sysmenuholder.Size = LoadedSkin.AppLauncherHolderSize; + apps.Size = sysmenuholder.Size; + menuStrip1.Renderer = new ShiftOSMenuRenderer(new AppLauncherColorTable()); + desktoppanel.BackColor = LoadedSkin.DesktopPanelColor; + desktoppanel.BackgroundImageLayout = GetImageLayout("desktoppanel"); + desktoppanel.Height = LoadedSkin.DesktopPanelHeight; + if (LoadedSkin.DesktopPanelPosition == 1) + { + desktoppanel.Dock = DockStyle.Bottom; + } + else + { + desktoppanel.Dock = DockStyle.Top; + } + } + + PopulatePanelButtons(); + } + + public void PopulateAppLauncher(LauncherItem[] items) + { + apps.DropDownItems.Clear(); + + foreach (var kv in items) + { + var item = new ToolStripMenuItem(); + item.Text = kv.DisplayData.Name; + item.Click += (o, a) => + { + Engine.AppearanceManager.SetupWindow(Activator.CreateInstance(kv.LaunchType) as IShiftOSWindow); + }; + apps.DropDownItems.Add(item); + } + + if (Shiftorium.UpgradeInstalled("al_shutdown")) + { + apps.DropDownItems.Add(new ToolStripSeparator()); + var item = new ToolStripMenuItem(); + item.Text = Localization.Parse("{SHUTDOWN}"); + item.Click += (o, a) => + { + TerminalBackend.InvokeCommand("sos.shutdown"); + }; + apps.DropDownItems.Add(item); + + } + } + + + + private void Desktop_Load(object sender, EventArgs e) + { + + SaveSystem.Begin(); + + SetupDesktop(); + } + + public void ShowWindow(IWindowBorder border) + { + var brdr = border as Form; + brdr.FormBorderStyle = FormBorderStyle.None; + brdr.Show(); + brdr.TopMost = true; + } + + public void KillWindow(IWindowBorder border) + { + throw new NotImplementedException(); + } + + public void MinimizeWindow(IWindowBorder brdr) + { + throw new NotImplementedException(); + } + + public void MaximizeWindow(IWindowBorder brdr) + { + throw new NotImplementedException(); + } + + public void RestoreWindow(IWindowBorder brdr) + { + throw new NotImplementedException(); + } + + public void InvokeOnWorkerThread(Action act) + { + this.Invoke(act); + } + + public Size GetSize() + { + return this.Size; + } + } +} |
