added desktop and some small additions and changes to shiftwm

This commit is contained in:
John T 2017-09-27 18:32:16 -04:00
parent dc7533184a
commit a25baf0820
23 changed files with 909 additions and 458 deletions

3
.vs/ProjectSettings.json Normal file
View file

@ -0,0 +1,3 @@
{
"CurrentProjectSetting": null
}

Binary file not shown.

View file

@ -0,0 +1,6 @@
{
"ExpandedNodes": [
""
],
"PreviewInSolutionExplorer": false
}

BIN
.vs/slnx.sqlite Normal file

Binary file not shown.

View file

@ -20,6 +20,7 @@
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
@ -30,6 +31,9 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Magick.NET-Q16-AnyCPU, Version=7.0.0.0, Culture=neutral, PublicKeyToken=2004825badfa91ec, processorArchitecture=MSIL">
<HintPath>..\packages\Magick.NET-Q16-AnyCPU.7.0.7.300\lib\net40\Magick.NET-Q16-AnyCPU.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
@ -48,6 +52,7 @@
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Tools.cs" />
<Compile Include="WindowManager\InfoboxTemplate.cs">
<SubType>UserControl</SubType>
</Compile>
@ -75,6 +80,7 @@
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
<None Include="Resources\nullIcon.png" />
</ItemGroup>
<ItemGroup>

32
ShiftOS.Engine/Tools.cs Normal file
View file

@ -0,0 +1,32 @@
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Runtime.InteropServices;
using ImageMagick;
namespace ShiftOS.Engine
{
/// <summary>
/// Random class full of unassorted [but also uncategorizable] tools.
/// </summary>
public static class Tools
{
public static Random Rnd = new Random();
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public extern static bool DestroyIcon(IntPtr handle);
public static Icon ToIcon(this Bitmap bm)
{
Icon tempicon = Icon.FromHandle(bm.GetHicon());
Icon newIcon = tempicon.Clone() as Icon;
//for some reason this exists
DestroyIcon(tempicon.Handle);
return newIcon;
}
}
}

View file

@ -1,11 +1,5 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Media;
using System.IO;
@ -14,38 +8,39 @@ namespace ShiftOS.Engine.WindowManager
{
public partial class InfoboxTemplate : UserControl
{
Stream str;
public int buttonChoice;
public int buttonSelected;
public InfoboxTemplate(buttonType type)
Stream _str;
private int _buttonChoice;
private int _buttonSelected;
public InfoboxTemplate(ButtonType type)
{
InitializeComponent();
switch (type)
{
case buttonType.OK:
case ButtonType.Ok:
btnOpt1.Text = "OK";
btnOpt2.Hide();
btnOpt1.Location = new Point(109, 134);
buttonChoice = 1;
_buttonChoice = 1;
break;
case buttonType.OKCancel:
case ButtonType.OkCancel:
btnOpt1.Text = "OK";
btnOpt2.Text = "Cancel";
buttonChoice = 2;
_buttonChoice = 2;
break;
case buttonType.YesNo:
case ButtonType.YesNo:
btnOpt1.Text = "Yes";
btnOpt2.Text = "No";
buttonChoice = 3;
_buttonChoice = 3;
break;
}
}
public enum buttonType
public enum ButtonType
{
YesNo,
OKCancel,
OK
OkCancel,
Ok
}
private void btnOpt1_Click(object sender, EventArgs e)
@ -53,12 +48,12 @@ namespace ShiftOS.Engine.WindowManager
switch (btnOpt1.Text)
{
case "OK":
buttonSelected = 1;
ParentForm.Close();
_buttonSelected = 1;
ParentForm?.Close();
break;
case "Yes":
buttonSelected = 2;
ParentForm.Close();
_buttonSelected = 2;
ParentForm?.Close();
break;
}
}
@ -68,25 +63,24 @@ namespace ShiftOS.Engine.WindowManager
switch (btnOpt2.Text)
{
case "No":
buttonSelected = 3;
_buttonSelected = 3;
break;
case "Cancel":
buttonSelected = 4;
_buttonSelected = 4;
break;
}
}
public void Play()
{
str = Properties.Resources.infobox;
SoundPlayer sp = new SoundPlayer(str);
_str = Properties.Resources.infobox;
SoundPlayer sp = new SoundPlayer(_str);
sp.Play();
sp.Stream.Position = 0;
}
private void InfoboxTemplate_Load(object sender, EventArgs e)
{
Play();
}
=> Play();
private void changeSize_Tick(object sender, EventArgs e)
{

View file

@ -1,17 +1,31 @@
using System.Drawing;
using System;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using static ShiftOS.Engine.WindowManager.InfoboxTemplate;
namespace ShiftOS.Engine.WindowManager
{
public class ShiftWM
public static class ShiftWM
{
public ShiftWindow Init(UserControl content, string title, Image icon, bool ShowAsInfobox = false, bool resize = true)
public static ObservableCollection<ShiftWindow> Windows { get; } = new ObservableCollection<ShiftWindow>();
public static ShiftWindow GetShiftWindow(this UserControl control)
{
return Windows.First(p => (uint) control.Tag == p.Id);
}
public static ShiftWindow Init(UserControl content, string title, Icon icon, bool showAsInfobox = false, bool resize = true)
{
// Setup Window
ShiftWindow app = new ShiftWindow();
app.Text = title;
app.Title.Text = title;
ShiftWindow app = new ShiftWindow
{
Text = title,
Title = {Text = title}
};
app.Width = content.Width + app.left.Width + app.right.Width;
app.Height = content.Height + app.bottom.Height + app.top.Height;
@ -22,20 +36,46 @@ namespace ShiftOS.Engine.WindowManager
app.programIcon.Image = Properties.Resources.nullIcon;
app.Title.Location = new Point(2, 7);
}
else app.programIcon.Image = icon;
else
{
app.programIcon.Image = icon.ToBitmap();
app.Icon = icon;
}
// Setup UC
content.Parent = app.programContent;
content.BringToFront();
content.Dock = DockStyle.Fill;
app.Show();
content.Tag = app.SetId();
Debug.WriteLine($"usercontrol: {content.Tag} window: {app.Id}");
app.Closed += (sender, args) =>
{
Windows.Remove((ShiftWindow) sender);
};
Windows.Add(app);
if (content is IShiftWindowExtensions extensions)
{
extensions.OnLoaded(app);
}
return app;
}
public InfoboxTemplate StartInfoboxSession(string title, string body, buttonType type)
public static InfoboxTemplate StartInfoboxSession(string title, string body, ButtonType type)
{
InfoboxTemplate info = new InfoboxTemplate(type);
info.label1.Text = body;
Init(info, title, Properties.Resources.iconInfoBox_fw, true, false);
InfoboxTemplate info = new InfoboxTemplate(type)
{
label1 = { Text = body }
};
Init(info, title, Properties.Resources.iconInfoBox_fw.ToIcon(), true, false);
return info;
}
}

View file

@ -65,34 +65,38 @@
this.program.Controls.Add(this.left);
this.program.Dock = System.Windows.Forms.DockStyle.Fill;
this.program.Location = new System.Drawing.Point(0, 0);
this.program.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.program.Name = "program";
this.program.Size = new System.Drawing.Size(284, 261);
this.program.Size = new System.Drawing.Size(426, 402);
this.program.TabIndex = 11;
//
// programContent
//
this.programContent.Dock = System.Windows.Forms.DockStyle.Fill;
this.programContent.Location = new System.Drawing.Point(4, 30);
this.programContent.Location = new System.Drawing.Point(6, 46);
this.programContent.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.programContent.Name = "programContent";
this.programContent.Size = new System.Drawing.Size(276, 227);
this.programContent.Size = new System.Drawing.Size(414, 350);
this.programContent.TabIndex = 11;
//
// bottomleftcorner
//
this.bottomleftcorner.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.bottomleftcorner.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.bottomleftcorner.Location = new System.Drawing.Point(0, 257);
this.bottomleftcorner.Location = new System.Drawing.Point(0, 395);
this.bottomleftcorner.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.bottomleftcorner.Name = "bottomleftcorner";
this.bottomleftcorner.Size = new System.Drawing.Size(5, 4);
this.bottomleftcorner.Size = new System.Drawing.Size(8, 6);
this.bottomleftcorner.TabIndex = 10;
//
// toprightcorner
//
this.toprightcorner.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.toprightcorner.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.toprightcorner.Location = new System.Drawing.Point(278, 0);
this.toprightcorner.Location = new System.Drawing.Point(417, 0);
this.toprightcorner.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.toprightcorner.Name = "toprightcorner";
this.toprightcorner.Size = new System.Drawing.Size(6, 30);
this.toprightcorner.Size = new System.Drawing.Size(9, 46);
this.toprightcorner.TabIndex = 9;
//
// bottomrightcorner
@ -100,9 +104,10 @@
this.bottomrightcorner.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.bottomrightcorner.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.bottomrightcorner.Cursor = System.Windows.Forms.Cursors.SizeNWSE;
this.bottomrightcorner.Location = new System.Drawing.Point(280, 257);
this.bottomrightcorner.Location = new System.Drawing.Point(420, 395);
this.bottomrightcorner.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.bottomrightcorner.Name = "bottomrightcorner";
this.bottomrightcorner.Size = new System.Drawing.Size(4, 4);
this.bottomrightcorner.Size = new System.Drawing.Size(6, 6);
this.bottomrightcorner.TabIndex = 4;
//
// topleftcorner
@ -110,8 +115,9 @@
this.topleftcorner.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.topleftcorner.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
this.topleftcorner.Location = new System.Drawing.Point(0, 0);
this.topleftcorner.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.topleftcorner.Name = "topleftcorner";
this.topleftcorner.Size = new System.Drawing.Size(7, 30);
this.topleftcorner.Size = new System.Drawing.Size(10, 46);
this.topleftcorner.TabIndex = 8;
//
// bottom
@ -119,9 +125,10 @@
this.bottom.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.bottom.Cursor = System.Windows.Forms.Cursors.SizeNS;
this.bottom.Dock = System.Windows.Forms.DockStyle.Bottom;
this.bottom.Location = new System.Drawing.Point(4, 257);
this.bottom.Location = new System.Drawing.Point(6, 396);
this.bottom.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.bottom.Name = "bottom";
this.bottom.Size = new System.Drawing.Size(276, 4);
this.bottom.Size = new System.Drawing.Size(414, 6);
this.bottom.TabIndex = 3;
//
// top
@ -134,9 +141,10 @@
this.top.Controls.Add(this.closebutton);
this.top.Dock = System.Windows.Forms.DockStyle.Top;
this.top.ForeColor = System.Drawing.SystemColors.ControlText;
this.top.Location = new System.Drawing.Point(4, 0);
this.top.Location = new System.Drawing.Point(6, 0);
this.top.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.top.Name = "top";
this.top.Size = new System.Drawing.Size(276, 30);
this.top.Size = new System.Drawing.Size(414, 46);
this.top.TabIndex = 0;
this.top.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Programtopbar_drag);
//
@ -145,9 +153,11 @@
this.programIcon.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.programIcon.ErrorImage = null;
this.programIcon.InitialImage = null;
this.programIcon.Location = new System.Drawing.Point(6, 7);
this.programIcon.Location = new System.Drawing.Point(9, 11);
this.programIcon.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.programIcon.Name = "programIcon";
this.programIcon.Size = new System.Drawing.Size(16, 16);
this.programIcon.Size = new System.Drawing.Size(24, 25);
this.programIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.programIcon.TabIndex = 7;
this.programIcon.TabStop = false;
//
@ -155,9 +165,10 @@
//
this.maximizebutton.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.maximizebutton.BackColor = System.Drawing.Color.Black;
this.maximizebutton.Location = new System.Drawing.Point(230, 4);
this.maximizebutton.Location = new System.Drawing.Point(345, 6);
this.maximizebutton.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.maximizebutton.Name = "maximizebutton";
this.maximizebutton.Size = new System.Drawing.Size(21, 21);
this.maximizebutton.Size = new System.Drawing.Size(32, 32);
this.maximizebutton.TabIndex = 6;
this.maximizebutton.TabStop = false;
this.maximizebutton.MouseDown += new System.Windows.Forms.MouseEventHandler(this.maximizebutton_MouseDown);
@ -169,9 +180,10 @@
//
this.minimizebutton.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.minimizebutton.BackColor = System.Drawing.Color.Black;
this.minimizebutton.Location = new System.Drawing.Point(207, 4);
this.minimizebutton.Location = new System.Drawing.Point(310, 6);
this.minimizebutton.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.minimizebutton.Name = "minimizebutton";
this.minimizebutton.Size = new System.Drawing.Size(21, 21);
this.minimizebutton.Size = new System.Drawing.Size(32, 32);
this.minimizebutton.TabIndex = 5;
this.minimizebutton.TabStop = false;
this.minimizebutton.MouseDown += new System.Windows.Forms.MouseEventHandler(this.minimizebutton_MouseDown);
@ -185,9 +197,10 @@
this.Title.BackColor = System.Drawing.Color.Transparent;
this.Title.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.Title.ForeColor = System.Drawing.Color.White;
this.Title.Location = new System.Drawing.Point(25, 8);
this.Title.Location = new System.Drawing.Point(38, 12);
this.Title.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.Title.Name = "Title";
this.Title.Size = new System.Drawing.Size(98, 13);
this.Title.Size = new System.Drawing.Size(149, 21);
this.Title.TabIndex = 3;
this.Title.Text = "Application Title";
this.Title.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Programtopbar_drag);
@ -196,9 +209,10 @@
//
this.closebutton.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.closebutton.BackColor = System.Drawing.Color.Black;
this.closebutton.Location = new System.Drawing.Point(253, 4);
this.closebutton.Location = new System.Drawing.Point(380, 6);
this.closebutton.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.closebutton.Name = "closebutton";
this.closebutton.Size = new System.Drawing.Size(21, 21);
this.closebutton.Size = new System.Drawing.Size(32, 32);
this.closebutton.TabIndex = 4;
this.closebutton.TabStop = false;
this.closebutton.Click += new System.EventHandler(this.closebutton_Click);
@ -212,9 +226,10 @@
this.right.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.right.Cursor = System.Windows.Forms.Cursors.SizeWE;
this.right.Dock = System.Windows.Forms.DockStyle.Right;
this.right.Location = new System.Drawing.Point(280, 0);
this.right.Location = new System.Drawing.Point(420, 0);
this.right.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.right.Name = "right";
this.right.Size = new System.Drawing.Size(4, 261);
this.right.Size = new System.Drawing.Size(6, 402);
this.right.TabIndex = 2;
//
// left
@ -222,18 +237,21 @@
this.left.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.left.Dock = System.Windows.Forms.DockStyle.Left;
this.left.Location = new System.Drawing.Point(0, 0);
this.left.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.left.Name = "left";
this.left.Size = new System.Drawing.Size(4, 261);
this.left.Size = new System.Drawing.Size(6, 402);
this.left.TabIndex = 1;
//
// ShiftWindow
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 261);
this.ClientSize = new System.Drawing.Size(426, 402);
this.Controls.Add(this.program);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.Name = "ShiftWindow";
this.Text = "c";
this.program.ResumeLayout(false);
this.top.ResumeLayout(false);
this.top.PerformLayout();

View file

@ -1,11 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;
@ -13,91 +8,86 @@ namespace ShiftOS.Engine.WindowManager
{
public partial class ShiftWindow : Form
{
public uint Id { get; private set; }
public UserControl ChildControl { get; set; }
public ShiftWindow()
{
InitializeComponent();
}
public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_CAPTION = 0x2;
public uint SetId()
{
do
{
Id = (uint)Tools.Rnd.Next(100000, 999999);
}
while (ShiftWM.Windows.FirstOrDefault(w => w.Id == Id) != null);
return Id;
}
private const int WM_NCLBUTTONDOWN = 0xA1;
private const int HT_CAPTION = 0x2;
[DllImportAttribute("user32.dll")]
public static extern int SendMessage(IntPtr hWnd,
private static extern int SendMessage(IntPtr hWnd,
int Msg, int wParam, int lParam);
[DllImportAttribute("user32.dll")]
public static extern bool ReleaseCapture();
private static extern bool ReleaseCapture();
private void Programtopbar_drag(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (e.Button != MouseButtons.Left) return;
ReleaseCapture();
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
}
private void closebutton_Click(object sender, EventArgs e)
{
this.Close();
}
=> this.Close();
private void closebutton_MouseEnter(object sender, EventArgs e)
{
closebutton.BackColor = Color.Gray;
}
=> closebutton.BackColor = Color.Gray;
private void closebutton_MouseLeave(object sender, EventArgs e)
{
closebutton.BackColor = Color.Black;
}
=> closebutton.BackColor = Color.Black;
private void maximizebutton_MouseEnter(object sender, EventArgs e)
{
maximizebutton.BackColor = Color.Gray;
}
=> maximizebutton.BackColor = Color.Gray;
private void maximizebutton_MouseLeave(object sender, EventArgs e)
{
maximizebutton.BackColor = Color.Black;
}
=> maximizebutton.BackColor = Color.Black;
private void minimizebutton_MouseEnter(object sender, EventArgs e)
{
minimizebutton.BackColor = Color.Gray;
}
=> minimizebutton.BackColor = Color.Gray;
private void minimizebutton_MouseLeave(object sender, EventArgs e)
{
minimizebutton.BackColor = Color.Black;
}
=> minimizebutton.BackColor = Color.Black;
private void closebutton_MouseDown(object sender, MouseEventArgs e)
{
closebutton.BackColor = Color.Black;
}
=> closebutton.BackColor = Color.Black;
private void maximizebutton_MouseDown(object sender, MouseEventArgs e)
{
maximizebutton.BackColor = Color.Black;
}
=> maximizebutton.BackColor = Color.Black;
private void minimizebutton_MouseDown(object sender, MouseEventArgs e)
{
minimizebutton.BackColor = Color.Black;
}
=> minimizebutton.BackColor = Color.Black;
private void minimizebutton_MouseUp(object sender, MouseEventArgs e)
{
minimizebutton.BackColor = Color.Gray;
}
=> minimizebutton.BackColor = Color.Gray;
private void maximizebutton_MouseUp(object sender, MouseEventArgs e)
{
maximizebutton.BackColor = Color.Gray;
}
=> maximizebutton.BackColor = Color.Gray;
private void closebutton_MouseUp(object sender, MouseEventArgs e)
=> closebutton.BackColor = Color.Gray;
}
public interface IShiftWindowExtensions
{
closebutton.BackColor = Color.Gray;
}
void OnLoaded(ShiftWindow window);
}
}

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Magick.NET-Q16-AnyCPU" version="7.0.7.300" targetFramework="net45" />
</packages>

View file

@ -1,8 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using ShiftOS.Main.ShiftOS;
namespace ShiftOS.Main
{
@ -16,7 +15,10 @@ namespace ShiftOS.Main
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new TestForm());
Parallel.Invoke(
() => Application.Run(new TestForm()),
() => Application.Run(new Desktop()));
}
}
}

View file

@ -76,6 +76,12 @@
<Compile Include="ShiftOS\Apps\TestForm.Designer.cs">
<DependentUpon>TestForm.cs</DependentUpon>
</Compile>
<Compile Include="ShiftOS\Desktop.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ShiftOS\Desktop.Designer.cs">
<DependentUpon>Desktop.cs</DependentUpon>
</Compile>
<EmbeddedResource Include="HijackScreen.resx">
<DependentUpon>HijackScreen.cs</DependentUpon>
</EmbeddedResource>
@ -101,6 +107,9 @@
<EmbeddedResource Include="ShiftOS\Apps\TestForm.resx">
<DependentUpon>TestForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ShiftOS\Desktop.resx">
<DependentUpon>Desktop.cs</DependentUpon>
</EmbeddedResource>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>

View file

@ -29,24 +29,38 @@
private void InitializeComponent()
{
this.label1 = new System.Windows.Forms.Label();
this.icon = new System.Windows.Forms.PictureBox();
((System.ComponentModel.ISupportInitialize)(this.icon)).BeginInit();
this.SuspendLayout();
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(18, 16);
this.label1.Location = new System.Drawing.Point(27, 25);
this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(35, 13);
this.label1.Size = new System.Drawing.Size(51, 20);
this.label1.TabIndex = 0;
this.label1.Text = "label1";
//
// icon
//
this.icon.Location = new System.Drawing.Point(31, 61);
this.icon.Name = "icon";
this.icon.Size = new System.Drawing.Size(300, 300);
this.icon.TabIndex = 1;
this.icon.TabStop = false;
//
// ShiftDemo
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.icon);
this.Controls.Add(this.label1);
this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.Name = "ShiftDemo";
this.Size = new System.Drawing.Size(300, 300);
this.Size = new System.Drawing.Size(450, 462);
((System.ComponentModel.ISupportInitialize)(this.icon)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
@ -55,5 +69,6 @@
#endregion
public System.Windows.Forms.Label label1;
private System.Windows.Forms.PictureBox icon;
}
}

View file

@ -7,14 +7,20 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ShiftOS.Engine.WindowManager;
namespace ShiftOS.Main
{
public partial class ShiftDemo : UserControl
public partial class ShiftDemo : UserControl, IShiftWindowExtensions
{
public ShiftDemo()
{
InitializeComponent();
}
public void OnLoaded(ShiftWindow window)
{
icon.Image = this.GetShiftWindow().Icon.ToBitmap();
}
}
}

View file

@ -1,11 +1,5 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ShiftOS.Engine.WindowManager;
@ -13,11 +7,10 @@ namespace ShiftOS.Main.ShiftOS.Apps
{
public partial class SelectColor : UserControl
{
ShiftWM shiftWM = new ShiftWM();
Color finalColor;
int colorType1;
int colorType2;
int colorType3;
Color _finalColor;
int _colorType1;
int _colorType2;
int _colorType3;
public SelectColor()
{
InitializeComponent();
@ -28,31 +21,31 @@ namespace ShiftOS.Main.ShiftOS.Apps
{
try
{
colorType1 = Convert.ToInt32(textBox1.Text);
colorType2 = Convert.ToInt32(textBox2.Text);
colorType3 = Convert.ToInt32(textBox3.Text);
_colorType1 = Convert.ToInt32(textBox1.Text);
_colorType2 = Convert.ToInt32(textBox2.Text);
_colorType3 = Convert.ToInt32(textBox3.Text);
}
catch(Exception ex)
catch(FormatException ex)
{
shiftWM.StartInfoboxSession("Error!", "Failed to parse integer. Error:\n" + ex, InfoboxTemplate.buttonType.OK);
ShiftWM.StartInfoboxSession("Error!", "Failed to parse integer. Error:\n" + ex, InfoboxTemplate.ButtonType.Ok);
}
if (colorType1 > 255 || colorType2 > 255 || colorType3 > 255)
if (_colorType1 > 255 || _colorType2 > 255 || _colorType3 > 255)
{
shiftWM.StartInfoboxSession("Error!", "A value cannot be greater than 255!", InfoboxTemplate.buttonType.OK);
ShiftWM.StartInfoboxSession("Error!", "A value cannot be greater than 255!", InfoboxTemplate.ButtonType.Ok);
}
else
{
try
{
ShiftWindow sw = new ShiftWindow();
finalColor = Color.FromArgb(colorType1, colorType2, colorType3);
this.BackColor = finalColor;
shiftWM.StartInfoboxSession("Success!", "Changed color to:\n" + colorType1.ToString() + ", " + colorType2.ToString() + ", " + colorType3.ToString() + ".", InfoboxTemplate.buttonType.OK);
_finalColor = Color.FromArgb(_colorType1, _colorType2, _colorType3);
BackColor = _finalColor;
ShiftWM.StartInfoboxSession("Success!", "Changed color to:\n" + _colorType1.ToString() + ", " + _colorType2.ToString() + ", " + _colorType3.ToString() + ".", InfoboxTemplate.ButtonType.Ok);
}
catch (Exception ex)
catch (Exception)
{
shiftWM.StartInfoboxSession("Error!", "An error occured while setting the color.", InfoboxTemplate.buttonType.OK);
ShiftWM.StartInfoboxSession("Error!", "An error occured while setting the color.", InfoboxTemplate.ButtonType.Ok);
}
}
}

View file

@ -1,12 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ShiftOS.Engine;
using ShiftOS.Engine.WindowManager;
namespace ShiftOS.Main.ShiftOS.Apps
@ -14,7 +8,6 @@ namespace ShiftOS.Main.ShiftOS.Apps
public partial class Shifter : UserControl
{
public int colorType; //This is a check to see what option was chosen.
ShiftWM wm = new ShiftWM();
public Shifter()
{
InitializeComponent();
@ -23,7 +16,7 @@ namespace ShiftOS.Main.ShiftOS.Apps
private void button1_Click(object sender, EventArgs e)
{
colorType = 1;
wm.Init(new SelectColor(), "Select a color", Properties.Resources.iconColourPicker_fw);
ShiftWM.Init(new SelectColor(), "Select a color", Properties.Resources.iconColourPicker_fw.ToIcon());
}
}
}

View file

@ -28,33 +28,40 @@
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.textBox1 = new System.Windows.Forms.TextBox();
this.textBox2 = new System.Windows.Forms.TextBox();
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.comboBox1 = new System.Windows.Forms.ComboBox();
this.systemIconsBindingSource = new System.Windows.Forms.BindingSource(this.components);
((System.ComponentModel.ISupportInitialize)(this.systemIconsBindingSource)).BeginInit();
this.SuspendLayout();
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(12, 13);
this.textBox1.Location = new System.Drawing.Point(18, 20);
this.textBox1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(260, 20);
this.textBox1.Size = new System.Drawing.Size(388, 26);
this.textBox1.TabIndex = 0;
this.textBox1.Text = "Title";
//
// textBox2
//
this.textBox2.Location = new System.Drawing.Point(12, 39);
this.textBox2.Location = new System.Drawing.Point(18, 60);
this.textBox2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.textBox2.Name = "textBox2";
this.textBox2.Size = new System.Drawing.Size(260, 20);
this.textBox2.Size = new System.Drawing.Size(388, 26);
this.textBox2.TabIndex = 1;
this.textBox2.Text = "Contents";
//
// button1
//
this.button1.Location = new System.Drawing.Point(12, 65);
this.button1.Location = new System.Drawing.Point(13, 149);
this.button1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(128, 23);
this.button1.Size = new System.Drawing.Size(192, 35);
this.button1.TabIndex = 2;
this.button1.Text = "Create Window";
this.button1.UseVisualStyleBackColor = true;
@ -62,25 +69,52 @@
//
// button2
//
this.button2.Location = new System.Drawing.Point(146, 65);
this.button2.Location = new System.Drawing.Point(217, 149);
this.button2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(126, 23);
this.button2.Size = new System.Drawing.Size(189, 35);
this.button2.TabIndex = 4;
this.button2.Text = "Test Shifter";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// comboBox1
//
this.comboBox1.FormattingEnabled = true;
this.comboBox1.Items.AddRange(new object[] {
"Application",
"Asterisk",
"Error",
"Exclamation",
"Hand",
"Information",
"Question",
"Shield",
"Warning",
"WinLogo"});
this.comboBox1.Location = new System.Drawing.Point(18, 104);
this.comboBox1.Name = "comboBox1";
this.comboBox1.Size = new System.Drawing.Size(388, 28);
this.comboBox1.TabIndex = 5;
//
// systemIconsBindingSource
//
this.systemIconsBindingSource.DataSource = typeof(System.Drawing.SystemIcons);
//
// TestForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 100);
this.ClientSize = new System.Drawing.Size(426, 198);
this.Controls.Add(this.comboBox1);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.Controls.Add(this.textBox2);
this.Controls.Add(this.textBox1);
this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.Name = "TestForm";
this.Text = "TestForm";
((System.ComponentModel.ISupportInitialize)(this.systemIconsBindingSource)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
@ -92,5 +126,7 @@
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.ComboBox comboBox1;
private System.Windows.Forms.BindingSource systemIconsBindingSource;
}
}

View file

@ -1,5 +1,8 @@
using System;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using ShiftOS.Engine;
using ShiftOS.Engine.WindowManager;
using ShiftOS.Main.ShiftOS.Apps;
@ -7,8 +10,6 @@ namespace ShiftOS.Main
{
public partial class TestForm : Form
{
public ShiftWM shiftWM = new ShiftWM();
public TestForm()
{
InitializeComponent();
@ -16,14 +17,16 @@ namespace ShiftOS.Main
private void Button1_Click(object sender, EventArgs e)
{
ShiftDemo demo = new ShiftDemo();
demo.label1.Text = textBox2.Text;
shiftWM.Init(demo, textBox1.Text, null);
shiftWM.StartInfoboxSession(textBox1.Text, textBox2.Text, InfoboxTemplate.buttonType.OK);
ShiftDemo demo = new ShiftDemo {label1 = {Text = textBox2.Text}};
var item = typeof(SystemIcons).GetProperties()
.First(p => p.Name == comboBox1.SelectedItem as string);
ShiftWM.Init(demo, textBox1.Text, (item.GetMethod.Invoke(null, new object[0]) as Icon));
ShiftWM.StartInfoboxSession(textBox1.Text, textBox2.Text, InfoboxTemplate.ButtonType.Ok);
}
private void button2_Click(object sender, EventArgs e)
{
shiftWM.Init(new Shifter(), "Shifter", Properties.Resources.iconShifter); }
=> ShiftWM.Init(new Shifter(), "Shifter", Properties.Resources.iconShifter.ToIcon());
}
}

View file

@ -117,4 +117,7 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="systemIconsBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

111
ShiftOS.Main/ShiftOS/Desktop.Designer.cs generated Normal file
View file

@ -0,0 +1,111 @@
namespace ShiftOS.Main.ShiftOS
{
partial class Desktop
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.listView1 = new System.Windows.Forms.ListView();
this.taskbar = new System.Windows.Forms.ToolStrip();
this.toolStripDropDownButton1 = new System.Windows.Forms.ToolStripDropDownButton();
this.taskbarClock = new System.Windows.Forms.ToolStripLabel();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.taskbar.SuspendLayout();
this.SuspendLayout();
//
// listView1
//
this.listView1.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;
this.listView1.Location = new System.Drawing.Point(0, 0);
this.listView1.Name = "listView1";
this.listView1.Size = new System.Drawing.Size(1962, 1236);
this.listView1.TabIndex = 0;
this.listView1.UseCompatibleStateImageBehavior = false;
//
// taskbar
//
this.taskbar.Dock = System.Windows.Forms.DockStyle.Bottom;
this.taskbar.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
this.taskbar.ImageScalingSize = new System.Drawing.Size(24, 24);
this.taskbar.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripDropDownButton1,
this.taskbarClock});
this.taskbar.Location = new System.Drawing.Point(0, 1204);
this.taskbar.Name = "taskbar";
this.taskbar.Size = new System.Drawing.Size(1962, 32);
this.taskbar.TabIndex = 1;
this.taskbar.Text = "toolStrip1";
//
// toolStripDropDownButton1
//
this.toolStripDropDownButton1.Image = global::ShiftOS.Main.Properties.Resources.iconWebBrowser;
this.toolStripDropDownButton1.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripDropDownButton1.Name = "toolStripDropDownButton1";
this.toolStripDropDownButton1.Size = new System.Drawing.Size(131, 29);
this.toolStripDropDownButton1.Tag = ((uint)(0u));
this.toolStripDropDownButton1.Text = "Programs";
//
// taskbarClock
//
this.taskbarClock.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
this.taskbarClock.Image = global::ShiftOS.Main.Properties.Resources.iconClock;
this.taskbarClock.Name = "taskbarClock";
this.taskbarClock.Size = new System.Drawing.Size(70, 29);
this.taskbarClock.Tag = ((uint)(0u));
this.taskbarClock.Text = "0:00";
//
// timer1
//
this.timer1.Interval = 1000;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// Desktop
//
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1962, 1236);
this.Controls.Add(this.taskbar);
this.Controls.Add(this.listView1);
this.Name = "Desktop";
this.Text = "Desktop";
this.taskbar.ResumeLayout(false);
this.taskbar.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.ListView listView1;
private System.Windows.Forms.ToolStrip taskbar;
private System.Windows.Forms.ToolStripDropDownButton toolStripDropDownButton1;
private System.Windows.Forms.ToolStripLabel taskbarClock;
private System.Windows.Forms.Timer timer1;
}
}

View file

@ -0,0 +1,61 @@
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.WindowManager;
namespace ShiftOS.Main.ShiftOS
{
public partial class Desktop : Form
{
public Desktop()
{
InitializeComponent();
timer1.Start();
this.Closed += (sender, args) =>
{
Application.Exit();
};
#region Disgusting taskbar code
ShiftWM.Windows.CollectionChanged += (sender, args) =>
{
args.NewItems?.OfType<ShiftWindow>().ToList().ForEach(window =>
{
taskbar.Invoke(new Action(() =>
{
taskbar.Items.Add(new ToolStripButton
{
Text = window.Title.Text,
Image = window.Icon.ToBitmap(),
Tag = window.Id
});
}));
});
args.OldItems?.OfType<ShiftWindow>().ToList().ForEach(window =>
{
taskbar.Invoke(new Action(() =>
{
var tbRemovalList = taskbar.Items.OfType<ToolStripItem>().Where(i => (uint) i.Tag == window.Id);
tbRemovalList.ToList().ForEach(p => taskbar.Items.Remove(p));
}));
});
};
#endregion
}
private void timer1_Tick(object sender, EventArgs e) =>
taskbarClock.Text = $"{DateTime.Now:t}";
}
}

View file

@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="taskbar.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>159, 17</value>
</metadata>
</root>