aboutsummaryrefslogtreecommitdiff
path: root/ShiftOS.WinForms/Applications/Shifter.cs
diff options
context:
space:
mode:
authorwilliam341 <[email protected]>2017-05-28 12:37:00 -0700
committerGitHub <[email protected]>2017-05-28 12:37:00 -0700
commit771c20cfb3a703e0f1550fdcf9eb07b78298c944 (patch)
tree59cb532e15ebff313fdba2be264d78ec0033f407 /ShiftOS.WinForms/Applications/Shifter.cs
parent496b0cbf8659c99203f48210fd39c572400ae623 (diff)
parentc7ba7d733c756d196f98dd4533289a1ef4db715f (diff)
downloadshiftos_thereturn-771c20cfb3a703e0f1550fdcf9eb07b78298c944.tar.gz
shiftos_thereturn-771c20cfb3a703e0f1550fdcf9eb07b78298c944.tar.bz2
shiftos_thereturn-771c20cfb3a703e0f1550fdcf9eb07b78298c944.zip
Merge pull request #1 from shiftos-game/master
welp, no longer a dev.
Diffstat (limited to 'ShiftOS.WinForms/Applications/Shifter.cs')
-rw-r--r--ShiftOS.WinForms/Applications/Shifter.cs1030
1 files changed, 736 insertions, 294 deletions
diff --git a/ShiftOS.WinForms/Applications/Shifter.cs b/ShiftOS.WinForms/Applications/Shifter.cs
index 4d29cf8..1a59c80 100644
--- a/ShiftOS.WinForms/Applications/Shifter.cs
+++ b/ShiftOS.WinForms/Applications/Shifter.cs
@@ -26,20 +26,17 @@ using Newtonsoft.Json;
using ShiftOS.Objects.ShiftFS;
using System;
using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
using System.Drawing;
-using System.Linq;
using System.Reflection;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
using System.Windows.Forms;
using ShiftOS.Engine;
using ShiftOS.WinForms.Tools;
+using System.Linq;
+using System.Threading;
namespace ShiftOS.WinForms.Applications
{
+ [MultiplayerOnly]
[Launcher("Shifter", true, "al_shifter", "Customization")]
[RequiresUpgrade("shifter")]
[WinOpen("shifter")]
@@ -52,6 +49,348 @@ namespace ShiftOS.WinForms.Applications
PopulateShifter();
}
+ [ShifterMeta("Desktop")]
+ public void ResetDesktop()
+ {
+ pnldesktoppreview.BringToFront();
+ pnldesktoppreview.Tag = "keepbg";
+ SetupDesktop();
+ }
+
+ /// <summary>
+ /// Populates the panel buttons.
+ /// </summary>
+ /// <returns>The panel buttons.</returns>
+ public void PopulatePanelButtons()
+ {
+ if (DesktopFunctions.ShowDefaultElements == true)
+ {
+ panelbuttonholder.Controls.Clear();
+ if (Shiftorium.IsInitiated == true)
+ {
+ if (Shiftorium.UpgradeInstalled("wm_panel_buttons"))
+ {
+
+ var pnlbtn = new Panel();
+ pnlbtn.Margin = new Padding(2, LoadedSkin.PanelButtonFromTop, 0, 0);
+ pnlbtn.BackColor = LoadedSkin.PanelButtonColor;
+ pnlbtn.BackgroundImage = GetImage("panelbutton");
+ pnlbtn.BackgroundImageLayout = GetImageLayout("panelbutton");
+
+ var pnlbtntext = new Label();
+ pnlbtntext.Text = "Panel Button Text";
+ pnlbtntext.AutoSize = true;
+ pnlbtntext.Location = LoadedSkin.PanelButtonFromLeft;
+ pnlbtntext.ForeColor = LoadedSkin.PanelButtonTextColor;
+ pnlbtntext.BackColor = Color.Transparent;
+
+ pnlbtn.BackColor = LoadedSkin.PanelButtonColor;
+ if (pnlbtn.BackgroundImage != null)
+ {
+ pnlbtntext.BackColor = Color.Transparent;
+ }
+ pnlbtn.Size = LoadedSkin.PanelButtonSize;
+ pnlbtn.Tag = "keepbg";
+ pnlbtntext.Tag = "keepbg";
+ pnlbtn.Controls.Add(pnlbtntext);
+ this.panelbuttonholder.Controls.Add(pnlbtn);
+ pnlbtn.Show();
+ pnlbtntext.Show();
+
+ pnlbtntext.Font = LoadedSkin.PanelButtonFont;
+
+
+
+
+ }
+ }
+ }
+
+ }
+
+ /// <summary>
+ /// Setups the desktop.
+ /// </summary>
+ /// <returns>The desktop.</returns>
+ public void SetupDesktop()
+ {
+ if (DesktopFunctions.ShowDefaultElements == true)
+ {
+ desktoppanel.BackColor = Color.Green;
+
+ //upgrades
+
+ if (Shiftorium.IsInitiated == true)
+ {
+ 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'.
+ pnldesktoppreview.BackColor = Color.FromArgb(LoadedSkin.DesktopColor.R, LoadedSkin.DesktopColor.G, LoadedSkin.DesktopColor.B);
+ //Not doing this will cause an ArgumentException.
+
+ pnldesktoppreview.BackgroundImage = SkinEngine.GetImage("desktopbackground");
+ pnldesktoppreview.BackgroundImageLayout = GetImageLayout("desktopbackground");
+ desktoppanel.BackColor = LoadedSkin.DesktopPanelColor;
+
+ var pnlimg = GetImage("desktoppanel");
+ if (pnlimg != null)
+ {
+ var bmp = new Bitmap(pnlimg);
+ bmp.MakeTransparent(Color.FromArgb(1, 0, 1));
+ pnlimg = bmp;
+ }
+
+ desktoppanel.BackgroundImage = pnlimg;
+ if (desktoppanel.BackgroundImage != null)
+ {
+ desktoppanel.BackColor = Color.Transparent;
+ }
+ var appimg = GetImage("applauncher");
+ if (appimg != null)
+ {
+ var bmp = new Bitmap(appimg);
+ bmp.MakeTransparent(Color.FromArgb(1, 0, 1));
+ appimg = bmp;
+ }
+ menuStrip1.BackgroundImage = appimg;
+ 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(LoadedSkin));
+ desktoppanel.BackgroundImageLayout = GetImageLayout("desktoppanel");
+ desktoppanel.Height = LoadedSkin.DesktopPanelHeight;
+ if (LoadedSkin.DesktopPanelPosition == 1)
+ {
+ desktoppanel.Dock = DockStyle.Bottom;
+ }
+ else
+ {
+ desktoppanel.Dock = DockStyle.Top;
+ }
+ }
+ }
+ else
+ {
+ desktoppanel.Hide();
+ }
+
+ PopulatePanelButtons();
+ }
+
+
+
+
+ [ShifterMeta("Windows")]
+ public void SetupWindowPreview()
+ {
+ pnlwindow.BringToFront();
+ WBSetup();
+ }
+
+ [ShifterMeta("Menus")]
+ public void SetupMenusPreview()
+ {
+ SetupWindowPreview();
+ }
+
+ [ShifterMeta("System")]
+ public void SetupSystemPreview()
+ {
+ SetupWindowPreview();
+ }
+
+ /// <summary>
+ /// Setup this instance.
+ /// </summary>
+ public void WBSetup()
+ {
+ this.lbtitletext.Text = "Window Preview";
+
+ if (SaveSystem.CurrentSave != null)
+ {
+ this.pnltitle.Visible = Shiftorium.UpgradeInstalled("wm_titlebar");
+ this.pnlclose.Visible = Shiftorium.UpgradeInstalled("close_button");
+ this.pnlminimize.Visible = Shiftorium.UpgradeInstalled("minimize_button");
+ this.pnlmaximize.Visible =Shiftorium.UpgradeInstalled("maximize_button");
+ WBSetupSkin();
+ }
+ else
+ {
+ this.pnltitle.Visible = false;
+ this.pnlclose.Visible = false;
+ this.pnlminimize.Visible = false;
+ this.pnlmaximize.Visible = false;
+
+ }
+ }
+
+ public Image GetImage(string id)
+ {
+ var type = typeof(ShiftOS.Engine.Skin);
+ foreach(var field in type.GetFields(BindingFlags.Public | BindingFlags.Instance))
+ {
+ foreach(var attrib in field.GetCustomAttributes(false))
+ {
+ if(attrib is ImageAttribute)
+ {
+ var img = attrib as ImageAttribute;
+ if(img.Name == id)
+ {
+ return SkinEngine.ImageFromBinary((byte[])field.GetValue(LoadedSkin));
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ public ImageLayout GetImageLayout(string img)
+ {
+ if (LoadedSkin.SkinImageLayouts.ContainsKey(img))
+ {
+ return LoadedSkin.SkinImageLayouts[img];
+ }
+ else
+ {
+ LoadedSkin.SkinImageLayouts.Add(img, ImageLayout.Tile);
+ return ImageLayout.Tile;
+ }
+
+ }
+
+ /// <summary>
+ /// Setups the skin.
+ /// </summary>
+ /// <returns>The skin.</returns>
+ public void WBSetupSkin()
+ {
+ this.DoubleBuffered = true;
+ var renderer = new ShiftOSMenuRenderer(LoadedSkin);
+ mspreview.Renderer = renderer;
+ tspreview.Renderer = renderer;
+ pnltitle.Height = LoadedSkin.TitlebarHeight;
+ pnltitle.BackColor = LoadedSkin.TitleBackgroundColor;
+ pnltitle.BackgroundImage = GetImage("titlebar");
+ pnltitleleft.Visible = LoadedSkin.ShowTitleCorners;
+ pnltitleright.Visible = LoadedSkin.ShowTitleCorners;
+ pnltitleleft.BackColor = LoadedSkin.TitleLeftCornerBackground;
+ pnltitleright.BackColor = LoadedSkin.TitleRightCornerBackground;
+ pnltitleleft.Width = LoadedSkin.TitleLeftCornerWidth;
+ pnltitleright.Width = LoadedSkin.TitleRightCornerWidth;
+ pnltitleleft.BackgroundImage = GetImage("titleleft");
+ pnltitleleft.BackgroundImageLayout = GetImageLayout("titleleft");
+ pnltitleright.BackgroundImage = GetImage("titleright");
+ pnltitleright.BackgroundImageLayout = GetImageLayout("titleright");
+ pnltitle.BackgroundImageLayout = GetImageLayout("titlebar"); //RETARD ALERT. WHY WASN'T THIS THERE WHEN IMAGELAYOUTS WERE FIRST IMPLEMENTED?
+
+ lbtitletext.BackColor = (pnltitle.BackgroundImage != null) ? Color.Transparent : LoadedSkin.TitleBackgroundColor;
+ lbtitletext.ForeColor = LoadedSkin.TitleTextColor;
+ lbtitletext.Font = LoadedSkin.TitleFont;
+
+ pnlleft.BackColor = LoadedSkin.BorderLeftBackground;
+ pnlleft.BackgroundImage = GetImage("leftborder");
+ pnlleft.BackgroundImageLayout = GetImageLayout("leftborder");
+ pnlleft.Width = LoadedSkin.LeftBorderWidth;
+ pnlright.BackColor = LoadedSkin.BorderRightBackground;
+ pnlright.BackgroundImage = GetImage("rightborder");
+ pnlright.BackgroundImageLayout = GetImageLayout("rightborder");
+ pnlright.Width = LoadedSkin.RightBorderWidth;
+
+ pnlbottom.BackColor = LoadedSkin.BorderBottomBackground;
+ pnlbottom.BackgroundImage = GetImage("bottomborder");
+ pnlbottom.BackgroundImageLayout = GetImageLayout("bottomborder");
+ pnlbottom.Height = LoadedSkin.BottomBorderWidth;
+
+ pnlbottomr.BackColor = LoadedSkin.BorderBottomRightBackground;
+ pnlbottomr.BackgroundImage = GetImage("bottomrborder");
+ pnlbottomr.BackgroundImageLayout = GetImageLayout("bottomrborder");
+ pnlbottoml.BackColor = LoadedSkin.BorderBottomLeftBackground;
+ pnlbottoml.BackgroundImage = GetImage("bottomlborder");
+ pnlbottoml.BackgroundImageLayout = GetImageLayout("bottomlborder");
+
+ lbtitletext.ForeColor = LoadedSkin.TitleTextColor;
+ lbtitletext.Font = LoadedSkin.TitleFont;
+ pnlclose.BackColor = LoadedSkin.CloseButtonColor;
+ pnlclose.BackgroundImage = GetImage("closebutton");
+ pnlclose.BackgroundImageLayout = GetImageLayout("closebutton");
+ pnlminimize.BackColor = LoadedSkin.MinimizeButtonColor;
+ pnlminimize.BackgroundImage = GetImage("minimizebutton");
+ pnlminimize.BackgroundImageLayout = GetImageLayout("minimizebutton");
+ pnlmaximize.BackColor = LoadedSkin.MaximizeButtonColor;
+ pnlmaximize.BackgroundImage = GetImage("maximizebutton");
+ pnlmaximize.BackgroundImageLayout = GetImageLayout("maximizebutton");
+
+ pnlclose.Size = LoadedSkin.CloseButtonSize;
+ pnlminimize.Size = LoadedSkin.MinimizeButtonSize;
+ pnlmaximize.Size = LoadedSkin.MaximizeButtonSize;
+ pnlclose.Location = FromRight(LoadedSkin.CloseButtonFromSide);
+ pnlminimize.Location = FromRight(LoadedSkin.MinimizeButtonFromSide);
+ pnlmaximize.Location = FromRight(LoadedSkin.MaximizeButtonFromSide);
+ pnlclose.Left -= pnlclose.Width;
+ pnlmaximize.Left -= pnlmaximize.Width;
+ pnlminimize.Left -= pnlminimize.Width;
+
+ switch (LoadedSkin.TitleTextCentered)
+ {
+ case false:
+ lbtitletext.Location = new Point(16 + LoadedSkin.TitlebarIconFromSide.X + LoadedSkin.TitleTextLeft.X,
+ LoadedSkin.TitleTextLeft.Y);
+ break;
+ default:
+ lbtitletext.Left = (pnltitle.Width - lbtitletext.Width) / 2;
+ lbtitletext.Top = LoadedSkin.TitleTextLeft.Y;
+ break;
+ }
+
+ if (Shiftorium.UpgradeInstalled("app_icons"))
+ {
+ pnlicon.Show();
+ pnlicon.Size = new Size(16, 16);
+ pnlicon.BackColor = Color.Transparent;
+ pnlicon.BackgroundImageLayout = ImageLayout.Stretch;
+ pnlicon.Location = LoadedSkin.TitlebarIconFromSide;
+ }
+ else
+ {
+ pnlicon.Hide();
+ }
+ }
+
+ /// <summary>
+ /// Froms the right.
+ /// </summary>
+ /// <returns>The right.</returns>
+ /// <param name="input">Input.</param>
+ public Point FromRight(Point input)
+ {
+ return new Point(pnltitle.Width - input.X, input.Y);
+ }
+
+
public int CodepointValue = 0;
public List<ShifterSetting> settings = new List<ShifterSetting>();
public Skin LoadedSkin = null;
@@ -128,6 +467,21 @@ namespace ShiftOS.WinForms.Applications
btn.FlatStyle = FlatStyle.Flat;
btn.Click += (o, a) =>
{
+ foreach(var mth in this.GetType().GetMethods(BindingFlags.Public | BindingFlags.Instance))
+ {
+ foreach(var attrib in mth.GetCustomAttributes(false))
+ {
+ if(attrib is ShifterMetaAttribute)
+ {
+ var meta = attrib as ShifterMetaAttribute;
+ if(meta.Meta == btn.Text)
+ {
+ mth?.Invoke(this, null);
+ }
+ }
+ }
+ }
+
PopulateSubcategories(c);
};
@@ -169,357 +523,444 @@ namespace ShiftOS.WinForms.Applications
}
}
- public void PopulateBody(string cat, string subcat)
+ public void InvokeSetup(string cat)
{
- flbody.Controls.Clear();
-
- List<ShifterSetting> cats = new List<ShifterSetting>();
-
- foreach (var c in this.settings)
+ foreach(var mth in this.GetType().GetMethods(BindingFlags.Public | BindingFlags.Instance))
{
- if (c.SubCategory == subcat && c.Category == cat)
+ foreach(var attr in mth.GetCustomAttributes(false))
{
- if (c.Field.FlagFullfilled(LoadedSkin))
+ if(attr is ShifterMetaAttribute)
{
- if (!cats.Contains(c))
- {
- cats.Add(c);
- }
+ if ((attr as ShifterMetaAttribute).Meta == cat)
+ mth.Invoke(this, null);
}
}
}
+ }
- foreach(var c in cats)
+ public void PopulateBody(string cat, string subcat)
+ {
+ flbody.Controls.Clear();
+
+ IEnumerable<ShifterSetting> cats = this.settings.Where(x => x.SubCategory == subcat && x.Category == cat && x.Field.FlagFullfilled(LoadedSkin)).OrderBy(x=>x.Name);
+
+ new Thread(() =>
{
- var lbl = new Label();
- int labelHeight = 0;
- lbl.AutoSize = true;
- lbl.Text = c.Name + ":";
- flbody.Controls.Add(lbl);
- lbl.TextAlign = ContentAlignment.MiddleLeft;
- lbl.Show();
- //Cool - label's in.
- if(c.Field.FieldType == typeof(Point))
+ foreach (var c in cats)
{
- var width = new TextBox();
- var height = new TextBox();
- labelHeight = width.Height; //irony?
- width.Width = 30;
- height.Width = width.Width;
- width.Text = ((Point)c.Field.GetValue(this.LoadedSkin)).X.ToString();
- height.Text = ((Point)c.Field.GetValue(this.LoadedSkin)).Y.ToString();
- flbody.SetFlowBreak(height, true);
- ControlManager.SetupControl(width);
- ControlManager.SetupControl(height);
-
- flbody.Controls.Add(width);
- width.Show();
- flbody.Controls.Add(height);
- height.Show();
-
- EventHandler tc = (o, a) =>
+ Label lbl = null;
+ int labelHeight = 0;
+ Desktop.InvokeOnWorkerThread(() =>
+ {
+ lbl = new Label();
+ lbl.AutoSize = true;
+ lbl.Text = c.Name + ":";
+ flbody.Controls.Add(lbl);
+ lbl.TextAlign = ContentAlignment.MiddleLeft;
+ lbl.Show();
+ });
+ //Cool - label's in.
+ if (c.Field.FieldType == typeof(Point))
{
- try
+ TextBox width = null;
+ TextBox height = null;
+ Desktop.InvokeOnWorkerThread(() =>
{
- int x = Convert.ToInt32(width.Text);
- int y = Convert.ToInt32(height.Text);
+ width = new TextBox();
+ height = new TextBox();
+ labelHeight = width.Height; //irony?
+ width.Width = 30;
+ height.Width = width.Width;
+ width.Text = ((Point)c.Field.GetValue(this.LoadedSkin)).X.ToString();
+ height.Text = ((Point)c.Field.GetValue(this.LoadedSkin)).Y.ToString();
+ flbody.SetFlowBreak(height, true);
+ ControlManager.SetupControl(width);
+ ControlManager.SetupControl(height);
- int oldx = ((Point)c.Field.GetValue(this.LoadedSkin)).X;
- int oldy = ((Point)c.Field.GetValue(this.LoadedSkin)).Y;
+ flbody.Controls.Add(width);
+ width.Show();
+ flbody.Controls.Add(height);
+ height.Show();
- if(x != oldx || y != oldy)
+ EventHandler tc = (o, a) =>
{
- c.Field.SetValue(LoadedSkin, new Point(x, y));
- CodepointValue += 200;
- }
- }
- catch
- {
- width.Text = ((Point)c.Field.GetValue(this.LoadedSkin)).X.ToString();
- height.Text = ((Point)c.Field.GetValue(this.LoadedSkin)).Y.ToString();
- }
- };
+ try
+ {
+ int x = Convert.ToInt32(width.Text);
+ int y = Convert.ToInt32(height.Text);
- width.TextChanged += tc;
- height.TextChanged += tc;
+ int oldx = ((Point)c.Field.GetValue(this.LoadedSkin)).X;
+ int oldy = ((Point)c.Field.GetValue(this.LoadedSkin)).Y;
- }
- else if(c.Field.FieldType == typeof(string))
- {
- var str = new TextBox();
- str.Width = 120;
- ControlManager.SetupControl(str);
- labelHeight = str.Height;
- str.Text = c.Field.GetValue(LoadedSkin).ToString();
- flbody.SetFlowBreak(str, true);
- str.TextChanged += (o, a) => { c.Field.SetValue(LoadedSkin, str.Text); CodepointValue += 100; };
- flbody.Controls.Add(str);
- str.Show();
- }
- else if(c.Field.FieldType == typeof(byte[]))
- {
- //We'll assume that this is an image file.
- var color = new Button();
- color.Width = 40;
- labelHeight = color.Height;
- //just so it's flat like the system.
- ControlManager.SetupControl(color);
- flbody.SetFlowBreak(color, true);
-
- color.BackgroundImage = SkinEngine.ImageFromBinary((byte[])c.Field.GetValue(this.LoadedSkin));
- color.Click += (o, a) =>
+ if (x != oldx || y != oldy)
+ {
+ c.Field.SetValue(LoadedSkin, new Point(x, y));
+ CodepointValue += 200;
+ }
+ }
+ catch
+ {
+ width.Text = ((Point)c.Field.GetValue(this.LoadedSkin)).X.ToString();
+ height.Text = ((Point)c.Field.GetValue(this.LoadedSkin)).Y.ToString();
+ }
+ InvokeSetup(cat);
+ };
+
+ width.TextChanged += tc;
+ height.TextChanged += tc;
+ });
+ }
+ else if (c.Field.FieldType == typeof(string))
{
- AppearanceManager.SetupDialog(new GraphicPicker(color.BackgroundImage, c.Name, GetLayout(c.Field.GetImageName()), new Action<byte[], Image, ImageLayout>((col, gdiImg, layout) =>
+ Desktop.InvokeOnWorkerThread(() =>
{
- c.Field.SetValue(LoadedSkin, col);
- color.BackgroundImage = SkinEngine.ImageFromBinary(col);
- color.BackgroundImageLayout = layout;
- LoadedSkin.SkinImageLayouts[c.Field.GetImageName()] = layout;
- CodepointValue += 700;
- })));
- };
- flbody.Controls.Add(color);
- color.Show();
- }
- else if (c.Field.FieldType == typeof(Size))
- {
- var width = new TextBox();
- var height = new TextBox();
- width.Width = 30;
- height.Width = width.Width;
- labelHeight = width.Height;
- flbody.SetFlowBreak(height, true);
-
- width.Text = ((Size)c.Field.GetValue(this.LoadedSkin)).Width.ToString();
- height.Text = ((Size)c.Field.GetValue(this.LoadedSkin)).Height.ToString();
- ControlManager.SetupControl(width);
- ControlManager.SetupControl(height);
-
- flbody.Controls.Add(width);
- width.Show();
- flbody.Controls.Add(height);
- height.Show();
-
- EventHandler tc = (o, a) =>
+ var str = new TextBox();
+ str.Width = 120;
+ ControlManager.SetupControl(str);
+ labelHeight = str.Height;
+ str.Text = c.Field.GetValue(LoadedSkin).ToString();
+ flbody.SetFlowBreak(str, true);
+ str.TextChanged += (o, a) =>
+ {
+ c.Field.SetValue(LoadedSkin, str.Text); CodepointValue += 100;
+
+ InvokeSetup(cat);
+ };
+ flbody.Controls.Add(str);
+ str.Show();
+ });
+ }
+ else if (c.Field.FieldType == typeof(byte[]))
{
- try
+ Desktop.InvokeOnWorkerThread(() =>
{
- int x = Convert.ToInt32(width.Text);
- int y = Convert.ToInt32(height.Text);
-
- int oldx = ((Size)c.Field.GetValue(this.LoadedSkin)).Width;
- int oldy = ((Size)c.Field.GetValue(this.LoadedSkin)).Height;
-
- if (x != oldx || y != oldy)
+ //We'll assume that this is an image file.
+ var color = new Button();
+ color.Width = 40;
+ labelHeight = color.Height;
+ //just so it's flat like the system.
+ ControlManager.SetupControl(color);
+ flbody.SetFlowBreak(color, true);
+
+ color.BackgroundImage = SkinEngine.ImageFromBinary((byte[])c.Field.GetValue(this.LoadedSkin));
+ color.Click += (o, a) =>
{
- c.Field.SetValue(LoadedSkin, new Size(x, y));
- CodepointValue += 200;
- }
- }
- catch
+ AppearanceManager.SetupDialog(new GraphicPicker(color.BackgroundImage, c.Name, GetLayout(c.Field.GetImageName()), new Action<byte[], Image, ImageLayout>((col, gdiImg, layout) =>
+ {
+ c.Field.SetValue(LoadedSkin, col);
+ color.BackgroundImage = SkinEngine.ImageFromBinary(col);
+ color.BackgroundImageLayout = layout;
+ LoadedSkin.SkinImageLayouts[c.Field.GetImageName()] = layout;
+ CodepointValue += 700;
+ InvokeSetup(cat);
+
+ })));
+ };
+ flbody.Controls.Add(color);
+ color.Show();
+ });
+ }
+ else if (c.Field.FieldType == typeof(Size))
+ {
+ Desktop.InvokeOnWorkerThread(() =>
{
+ var width = new TextBox();
+ var height = new TextBox();
+ width.Width = 30;
+ height.Width = width.Width;
+ labelHeight = width.Height;
+ flbody.SetFlowBreak(height, true);
+
width.Text = ((Size)c.Field.GetValue(this.LoadedSkin)).Width.ToString();
height.Text = ((Size)c.Field.GetValue(this.LoadedSkin)).Height.ToString();
- }
- };
+ ControlManager.SetupControl(width);
+ ControlManager.SetupControl(height);
- width.TextChanged += tc;
- height.TextChanged += tc;
+ flbody.Controls.Add(width);
+ width.Show();
+ flbody.Controls.Add(height);
+ height.Show();
- }
- else if(c.Field.FieldType == typeof(bool))
- {
- var check = new CheckBox();
- check.Checked = ((bool)c.Field.GetValue(LoadedSkin));
- labelHeight = check.Height;
- check.CheckedChanged += (o, a) =>
- {
- c.Field.SetValue(LoadedSkin, check.Checked);
- CodepointValue += 50;
- };
- flbody.SetFlowBreak(check, true);
+ EventHandler tc = (o, a) =>
+ {
+ try
+ {
+ int x = Convert.ToInt32(width.Text);
+ int y = Convert.ToInt32(height.Text);
- flbody.Controls.Add(check);
- check.Show();
- }
- else if(c.Field.FieldType == typeof(Font))
- {
- var name = new ComboBox();
- var size = new TextBox();
- var style = new ComboBox();
-
- name.Width = 120;
- labelHeight = name.Height;
- size.Width = 40;
- style.Width = 80;
- flbody.SetFlowBreak(style, true);
-
- ControlManager.SetupControl(name);
- ControlManager.SetupControl(size);
- ControlManager.SetupControl(style);
-
- //populate the font name box
- foreach(var font in FontFamily.Families)
- {
- name.Items.Add(font.Name);
- }
- name.Text = ((Font)c.Field.GetValue(LoadedSkin)).Name;
+ int oldx = ((Size)c.Field.GetValue(this.LoadedSkin)).Width;
+ int oldy = ((Size)c.Field.GetValue(this.LoadedSkin)).Height;
+
+ if (x != oldx || y != oldy)
+ {
+ c.Field.SetValue(LoadedSkin, new Size(x, y));
+ CodepointValue += 200;
+ }
+ }
+ catch
+ {
+ width.Text = ((Size)c.Field.GetValue(this.LoadedSkin)).Width.ToString();
+ height.Text = ((Size)c.Field.GetValue(this.LoadedSkin)).Height.ToString();
+ }
+ InvokeSetup(cat);
- size.Text = ((Font)c.Field.GetValue(LoadedSkin)).Size.ToString();
+ };
- //populate the style box
- foreach(var s in (FontStyle[])Enum.GetValues(typeof(FontStyle)))
- {
- style.Items.Add(s.ToString());
+ width.TextChanged += tc;
+ height.TextChanged += tc;
+ });
}
- style.Text = ((Font)c.Field.GetValue(LoadedSkin)).Style.ToString();
+ else if (c.Field.FieldType == typeof(bool))
+ {
+ Desktop.InvokeOnWorkerThread(() =>
+ {
+ var check = new CheckBox();
+ check.Checked = ((bool)c.Field.GetValue(LoadedSkin));
+ labelHeight = check.Height;
+ check.CheckedChanged += (o, a) =>
+ {
+ c.Field.SetValue(LoadedSkin, check.Checked);
+ CodepointValue += 50;
+ InvokeSetup(cat);
+
+ };
+ flbody.SetFlowBreak(check, true);
- name.SelectedIndexChanged += (o, a) =>
+ flbody.Controls.Add(check);
+ check.Show();
+ });
+ }
+ else if (c.Field.FieldType == typeof(Font))
{
- var en = (FontStyle[])Enum.GetValues(typeof(FontStyle));
+ Desktop.InvokeOnWorkerThread(() =>
+ {
+ var name = new ComboBox();
+ var size = new TextBox();
+ var style = new ComboBox();
+
+ name.Width = 120;
+ labelHeight = name.Height;
+ size.Width = 40;
+ style.Width = 80;
+ flbody.SetFlowBreak(style, true);
+
+ ControlManager.SetupControl(name);
+ ControlManager.SetupControl(size);
+ ControlManager.SetupControl(style);
+
+ //populate the font name box
+ foreach (var font in FontFamily.Families)
+ {
+ name.Items.Add(font.Name);
+ }
+ name.Text = ((Font)c.Field.GetValue(LoadedSkin)).Name;
- var f = en[style.SelectedIndex];
+ size.Text = ((Font)c.Field.GetValue(LoadedSkin)).Size.ToString();
- c.Field.SetValue(LoadedSkin, new Font(name.Text, (float)Convert.ToDouble(size.Text), f));
- CodepointValue += 100;
- };
+ //populate the style box
+ foreach (var s in (FontStyle[])Enum.GetValues(typeof(FontStyle)))
+ {
+ style.Items.Add(s.ToString());
+ }
+ style.Text = ((Font)c.Field.GetValue(LoadedSkin)).Style.ToString();
- style.SelectedIndexChanged += (o, a) =>
- {
- var en = (FontStyle[])Enum.GetValues(typeof(FontStyle));
+ name.SelectedIndexChanged += (o, a) =>
+ {
+ var en = (FontStyle[])Enum.GetValues(typeof(FontStyle));
- var f = en[style.SelectedIndex];
+ var f = en[style.SelectedIndex];
- c.Field.SetValue(LoadedSkin, new Font(name.Text, (float)Convert.ToDouble(size.Text), f));
- CodepointValue += 50;
- };
+ c.Field.SetValue(LoadedSkin, new Font(name.Text, (float)Convert.ToDouble(size.Text), f));
+ CodepointValue += 100;
+ InvokeSetup(cat);
- size.TextChanged += (o, a) =>
- {
- try
- {
- var en = (FontStyle[])Enum.GetValues(typeof(FontStyle));
+ };
- var f = en[style.SelectedIndex];
+ style.SelectedIndexChanged += (o, a) =>
+ {
+ var en = (FontStyle[])Enum.GetValues(typeof(FontStyle));
- c.Field.SetValue(LoadedSkin, new Font(name.Text, (float)Convert.ToDouble(size.Text), f));
- }
- catch
- {
- size.Text = ((Font)c.Field.GetValue(LoadedSkin)).Size.ToString();
- }
- CodepointValue += 50;
- };
+ var f = en[style.SelectedIndex];
- flbody.Controls.Add(name);
- flbody.Controls.Add(size);
- flbody.Controls.Add(style);
+ c.Field.SetValue(LoadedSkin, new Font(name.Text, (float)Convert.ToDouble(size.Text), f));
+ CodepointValue += 50;
+ InvokeSetup(cat);
- name.Show();
- size.Show();
- style.Show();
+ };
- }
- else if(c.Field.FieldType == typeof(Color))
- {
- var color = new Button();
- color.Width = 40;
- labelHeight = color.Height;
- //just so it's flat like the system.
- ControlManager.SetupControl(color);
-
- color.BackColor = ((Color)c.Field.GetValue(LoadedSkin));
- color.BackColorChanged += (o, a) =>
- {
- c.Field.SetValue(LoadedSkin, color.BackColor);
- };
- color.Click += (o, a) =>
+ size.TextChanged += (o, a) =>
+ {
+ try
+ {
+ var en = (FontStyle[])Enum.GetValues(typeof(FontStyle));
+
+ var f = en[style.SelectedIndex];
+
+ c.Field.SetValue(LoadedSkin, new Font(name.Text, (float)Convert.ToDouble(size.Text), f));
+ }
+ catch
+ {
+ size.Text = ((Font)c.Field.GetValue(LoadedSkin)).Size.ToString();
+ }
+ CodepointValue += 50;
+ InvokeSetup(cat);
+
+ };
+
+ flbody.Controls.Add(name);
+ flbody.Controls.Add(size);
+ flbody.Controls.Add(style);
+
+ name.Show();
+ size.Show();
+ style.Show();
+ });
+ }
+ else if (c.Field.FieldType == typeof(Color))
{
- AppearanceManager.SetupDialog(new ColorPicker(color.BackColor, c.Name, new Action<Color>((col) =>
+ Desktop.InvokeOnWorkerThread(() =>
{
- color.BackColor = col;
- CodepointValue += 300;
- })));
- };
- flbody.SetFlowBreak(color, true);
-
- flbody.Controls.Add(color);
- color.Show();
- }
- else if(c.Field.FieldType == typeof(int))
- {
- if (c.Field.HasShifterEnumMask())
+ var color = new Button();
+ color.Width = 40;
+ labelHeight = color.Height;
+ //just so it's flat like the system.
+ ControlManager.SetupControl(color);
+
+ color.BackColor = ((Color)c.Field.GetValue(LoadedSkin));
+ color.Click += (o, a) =>
+ {
+ AppearanceManager.SetupDialog(new ColorPicker((Color)c.Field.GetValue(LoadedSkin), c.Name, new Action<Color>((col) =>
+ {
+ color.BackColor = col;
+ c.Field.SetValue(LoadedSkin, col);
+ CodepointValue += 300;
+ InvokeSetup(cat);
+
+ })));
+ };
+ flbody.SetFlowBreak(color, true);
+ color.Tag = "keepbg";
+ flbody.Controls.Add(color);
+ color.Show();
+ });
+ }
+ else if (c.Field.FieldType.IsEnum == true)
{
- var name = new ComboBox();
- name.Width = 120;
- ControlManager.SetupControl(name);
- string[] items = c.Field.GetShifterEnumMask();
- foreach(var item in items)
+ Desktop.InvokeOnWorkerThread(() =>
{
- name.Items.Add(item);
- }
- name.SelectedIndex = (int)c.Field.GetValue(LoadedSkin);
- name.SelectedIndexChanged += (o, a) =>
- {
- c.Field.SetValue(LoadedSkin, name.SelectedIndex);
- CodepointValue += 75;
- };
- labelHeight = name.Height;
- flbody.Controls.Add(name);
- name.Show();
- flbody.SetFlowBreak(name, true);
+ var cBox = new ComboBox();
+ cBox.Width = 150;
+ ControlManager.SetupControl(cBox);
+
+ foreach (var itm in Enum.GetNames(c.Field.FieldType))
+ {
+ cBox.Items.Add(itm);
+ }
+
+ cBox.Text = c.Field.GetValue(LoadedSkin).ToString();
+
+ cBox.SelectedIndexChanged += (o, a) =>
+ {
+ c.Field.SetValue(LoadedSkin, Enum.Parse(c.Field.FieldType, cBox.Text));
+ InvokeSetup(cat);
+ };
+
+ labelHeight = cBox.Height;
+
+ flbody.Controls.Add(cBox);
+ cBox.Show();
+ flbody.SetFlowBreak(cBox, true);
+ });
}
- else
+ else if (c.Field.FieldType == typeof(int))
{
- var width = new TextBox();
- width.Width = 30;
- width.Text = ((int)c.Field.GetValue(this.LoadedSkin)).ToString();
- ControlManager.SetupControl(width);
- labelHeight = width.Height;
- flbody.Controls.Add(width);
- width.Show();
-
- EventHandler tc = (o, a) =>
+ Desktop.InvokeOnWorkerThread(() =>
{
- try
+ if (c.Field.HasShifterEnumMask())
{
- int x = Convert.ToInt32(width.Text);
-
- int oldx = ((int)c.Field.GetValue(this.LoadedSkin));
-
- if (x != oldx)
+ var name = new ComboBox();
+ name.Width = 120;
+ ControlManager.SetupControl(name);
+ string[] items = c.Field.GetShifterEnumMask();
+ foreach (var item in items)
{
- c.Field.SetValue(LoadedSkin, x);
- CodepointValue += 75;
+ name.Items.Add(item);
}
+ name.SelectedIndex = (int)c.Field.GetValue(LoadedSkin);
+ name.SelectedIndexChanged += (o, a) =>
+ {
+ c.Field.SetValue(LoadedSkin, name.SelectedIndex);
+ CodepointValue += 75;
+ InvokeSetup(cat);
+
+ };
+ labelHeight = name.Height;
+ flbody.Controls.Add(name);
+ name.Show();
+ flbody.SetFlowBreak(name, true);
+
}
- catch
+ else
{
+ var width = new TextBox();
+ width.Width = 30;
width.Text = ((int)c.Field.GetValue(this.LoadedSkin)).ToString();
- }
- };
+ ControlManager.SetupControl(width);
+ labelHeight = width.Height;
+ flbody.Controls.Add(width);
+ width.Show();
+
+ EventHandler tc = (o, a) =>
+ {
+ try
+ {
+ int x = Convert.ToInt32(width.Text);
+
+ int oldx = ((int)c.Field.GetValue(this.LoadedSkin));
+
+ if (x != oldx)
+ {
+ c.Field.SetValue(LoadedSkin, x);
+ CodepointValue += 75;
+ }
+ }
+ catch
+ {
+ width.Text = ((int)c.Field.GetValue(this.LoadedSkin)).ToString();
+ }
+ InvokeSetup(cat);
+
+ };
- width.TextChanged += tc;
- flbody.SetFlowBreak(width, true);
+ width.TextChanged += tc;
+ flbody.SetFlowBreak(width, true);
+ }
+ });
}
- }
- lbl.AutoSize = false;
- lbl.Width = (int)this.CreateGraphics().MeasureString(lbl.Text, SkinEngine.LoadedSkin.MainFont).Width + 15;
- lbl.Height = labelHeight;
- lbl.TextAlign = ContentAlignment.MiddleLeft;
+ Desktop.InvokeOnWorkerThread(() =>
+ {
+ lbl.AutoSize = false;
+ lbl.Width = (int)this.CreateGraphics().MeasureString(lbl.Text, SkinEngine.LoadedSkin.MainFont).Width + 15;
+ lbl.Height = labelHeight;
+ lbl.TextAlign = ContentAlignment.MiddleLeft;
+ });
- if (!string.IsNullOrWhiteSpace(c.Description))
- {
- var desc = new Label();
- flbody.SetFlowBreak(desc, true);
- desc.Text = c.Description;
- desc.AutoSize = true;
- flbody.Controls.Add(desc);
- desc.Show();
+ if (!string.IsNullOrWhiteSpace(c.Description))
+ {
+ Desktop.InvokeOnWorkerThread(() =>
+ {
+ var desc = new Label();
+ flbody.SetFlowBreak(desc, true);
+ desc.Text = c.Description;
+ desc.AutoSize = true;
+ flbody.Controls.Add(desc);
+ desc.Show();
+ });
+ }
}
- }
+ }).Start();
}
public ImageLayout GetLayout(string name)
@@ -555,6 +996,7 @@ namespace ShiftOS.WinForms.Applications
public void OnLoad()
{
+ pnlintro.BringToFront();
}
public void OnSkinLoad()