Commit 7fc41e53 by Tapio Haapala

lisätty admin ui

1 parent e759bc90
Showing with 5643 additions and 0 deletions

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Express 2012 for Windows Desktop
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MoyaAdminUI", "MoyaAdminUI\MoyaAdminUI.csproj", "{56D4C2A6-B4A2-4E40-ACFB-19E188AAD703}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{56D4C2A6-B4A2-4E40-ACFB-19E188AAD703}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{56D4C2A6-B4A2-4E40-ACFB-19E188AAD703}.Debug|Any CPU.Build.0 = Debug|Any CPU
{56D4C2A6-B4A2-4E40-ACFB-19E188AAD703}.Release|Any CPU.ActiveCfg = Release|Any CPU
{56D4C2A6-B4A2-4E40-ACFB-19E188AAD703}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
namespace MoyaAdminUI
{
partial class ApiSettings
{
/// <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.apiURLTextBox = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.SaveButton = new System.Windows.Forms.Button();
this.ApiKeyTextBox = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.ApiUserTextBox = new System.Windows.Forms.TextBox();
this.label4 = new System.Windows.Forms.Label();
this.ApiPassTextBox = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// apiURLTextBox
//
this.apiURLTextBox.Location = new System.Drawing.Point(12, 25);
this.apiURLTextBox.Name = "apiURLTextBox";
this.apiURLTextBox.Size = new System.Drawing.Size(260, 20);
this.apiURLTextBox.TabIndex = 0;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(12, 9);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(47, 13);
this.label1.TabIndex = 1;
this.label1.Text = "Moya url";
//
// SaveButton
//
this.SaveButton.Location = new System.Drawing.Point(197, 192);
this.SaveButton.Name = "SaveButton";
this.SaveButton.Size = new System.Drawing.Size(75, 23);
this.SaveButton.TabIndex = 2;
this.SaveButton.Text = "Save";
this.SaveButton.UseVisualStyleBackColor = true;
this.SaveButton.Click += new System.EventHandler(this.SaveButton_Click);
//
// ApiKeyTextBox
//
this.ApiKeyTextBox.Location = new System.Drawing.Point(12, 68);
this.ApiKeyTextBox.Name = "ApiKeyTextBox";
this.ApiKeyTextBox.Size = new System.Drawing.Size(260, 20);
this.ApiKeyTextBox.TabIndex = 3;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(12, 52);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(79, 13);
this.label2.TabIndex = 4;
this.label2.Text = "Application key";
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(12, 91);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(47, 13);
this.label3.TabIndex = 6;
this.label3.Text = "Api User";
//
// ApiUserTextBox
//
this.ApiUserTextBox.Location = new System.Drawing.Point(12, 107);
this.ApiUserTextBox.Name = "ApiUserTextBox";
this.ApiUserTextBox.Size = new System.Drawing.Size(260, 20);
this.ApiUserTextBox.TabIndex = 5;
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(12, 130);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(48, 13);
this.label4.TabIndex = 8;
this.label4.Text = "Api Pass";
//
// ApiPassTextBox
//
this.ApiPassTextBox.Location = new System.Drawing.Point(12, 146);
this.ApiPassTextBox.Name = "ApiPassTextBox";
this.ApiPassTextBox.PasswordChar = 'ῷ';
this.ApiPassTextBox.Size = new System.Drawing.Size(260, 20);
this.ApiPassTextBox.TabIndex = 7;
//
// ApiSettings
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 227);
this.Controls.Add(this.label4);
this.Controls.Add(this.ApiPassTextBox);
this.Controls.Add(this.label3);
this.Controls.Add(this.ApiUserTextBox);
this.Controls.Add(this.label2);
this.Controls.Add(this.ApiKeyTextBox);
this.Controls.Add(this.SaveButton);
this.Controls.Add(this.label1);
this.Controls.Add(this.apiURLTextBox);
this.Name = "ApiSettings";
this.Text = "ApiSettings";
this.Load += new System.EventHandler(this.ApiSettings_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.TextBox apiURLTextBox;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button SaveButton;
private System.Windows.Forms.TextBox ApiKeyTextBox;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox ApiUserTextBox;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.TextBox ApiPassTextBox;
}
}
\ No newline at end of file
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;
namespace MoyaAdminUI
{
public partial class ApiSettings : Form
{
public ApiSettings()
{
InitializeComponent();
}
private void SaveButton_Click(object sender, EventArgs e)
{
Properties.Settings.Default.ApiURL = apiURLTextBox.Text;
Properties.Settings.Default.ApiApplicationKey = ApiKeyTextBox.Text;
Properties.Settings.Default.ApiUser = ApiUserTextBox.Text;
Properties.Settings.Default.ApiPass = ApiPassTextBox.Text;
Properties.Settings.Default.Save();
this.DialogResult = System.Windows.Forms.DialogResult.OK;
}
private void ApiSettings_Load(object sender, EventArgs e)
{
apiURLTextBox.Text = Properties.Settings.Default.ApiURL;
ApiKeyTextBox.Text = Properties.Settings.Default.ApiApplicationKey;
ApiUserTextBox.Text = Properties.Settings.Default.ApiUser;
ApiPassTextBox.Text = Properties.Settings.Default.ApiPass;
}
}
}
<?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>
</root>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="MoyaAdminUI.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<userSettings>
<MoyaAdminUI.Properties.Settings>
<setting name="ApiURL" serializeAs="String">
<value>http://10.220.105.194:8080/MoyaWeb</value>
</setting>
<setting name="ApiApplicationKey" serializeAs="String">
<value />
</setting>
<setting name="ApiUser" serializeAs="String">
<value />
</setting>
<setting name="ApiPass" serializeAs="String">
<value />
</setting>
</MoyaAdminUI.Properties.Settings>
</userSettings>
</configuration>
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MoyaAdminUI.MoyaAPI;
using System.Drawing;
using System.Web.Script.Serialization;
using System.ComponentModel;
namespace MoyaAdminUI
{
public class ComputerPlace
{
public ComputerPlace(Place place)
{
APIreference = place;
}
public ComputerPlace()
{
APIreference = new Place();
}
private Place APIreference;
public Place APIReference
{
get { return APIreference; }
}
public int Id
{
get { return APIreference.id; }
}
[Description("Buyer")]
public int ReserverId
{
get { return APIreference.reserverId; }
//set { APIreference.reserverId = value; }
}
[Category("Place map"),ReadOnly(true)]
public int MapId
{
get { return APIreference.mapId; }
set { APIreference.mapId = value; }
}
[Category("Reservation")]
public int ProductId
{
get { return APIreference.productId; }
set
{
if (value != APIreference.productId)
{
APIreference.productId = value;
Dirty = true;
}
}
}
/*
[Description("Binded to user")]
public int ReserverId
{
get { return APIreference.eventuserId; }
set { APIreference.eventuserId = value; }
}*/
public bool Dirty = false;
[Category("Place map")]
public bool Buyable
{
get
{ return APIreference.buyable; }
set
{
if (value != APIreference.buyable)
{
this.Dirty = true;
APIreference.buyable = value;
}
}
}
public string Details
{
get { return APIreference.details; }
set { APIreference.details = value; }
}
[Category("Place map"),DisplayName("Hide")]
public bool Disabled
{
get
{
return APIreference.disabled;
}
set
{
if (value != APIreference.disabled)
{
this.Dirty = true;
APIreference.disabled = value;
}
}
}
[Category("Reservation")]
public bool Taken
{
get { return APIreference.taken; }
}
[Category("Place map")]
public int Height
{
get { return APIreference.height; }
set { APIreference.height = value; }
}
[Category("Place map")]
public int Width
{
get { return APIreference.width; }
set { APIreference.width = value; }
}
[Category("Place map"),DisplayName("X")]
public int MapX
{
get { return APIreference.mapX; }
set { APIreference.mapX = value; }
}
[Category("Place map"), DisplayName("Y")]
public int MapY
{
get { return APIreference.mapY; }
set { APIreference.mapY = value; }
}
[Category("Place map")]
public string Name
{
get { return APIreference.name; }
set { APIreference.name = value; }
}
[Category("Reservation")]
public string ReserverUserName
{
get
{
if (APIreference.reserverId > 0)
{
if (getUser() == null)
{
return "ERR";
}
else
return User.ToString();
}
return "free";
}
}
[Category("Reservation")]
public User User
{
get
{
return getUser();
}
//set { }
}
private MoyaAdminUI.User getUser()
{
foreach (User u in User.Cache)
{
if (u.EventUserId == APIreference.reserverId)
return u;
}
return null;
}
public Point GetPoint()
{
return new Point(this.MapX, this.MapY);
}
public Size GetSize()
{
return new Size(this.Width, this.Height);
}
public void SetSize(Size size)
{
this.Width = size.Width;
this.Height = size.Height;
}
public void Save()
{
APIreference.Save();
this.Dirty = false;
}
public void Reload()
{
}
public void Delete()
{
Cache.Remove(this);
}
public static List<ComputerPlace> Cache = new List<ComputerPlace>();
public static void LoadAll(int mapId)
{
ComputerPlace.Cache.Clear();
RestClient client = new RestClient(Properties.Settings.Default.ApiURL);
string json = client.MakeRequest("placeadmin/places/" + mapId);
var ser = new JavaScriptSerializer();
PlaceMap map = ser.Deserialize<PlaceMap>(json);
foreach (Place p in map.places)
{
ComputerPlace.Cache.Add( new ComputerPlace(p));
}
}
public void Release()
{
APIreference.Release();
}
/*
public static int DefaultWidth = 23;
public static int DefaultHeight = 23;
* */
internal void Reserve(User user)
{
APIreference.Reserve(user.EventUserId);
}
}
}
namespace MoyaAdminUI
{
partial class ComputerPlaceGridSettings
{
/// <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.OkButton = new System.Windows.Forms.Button();
this.CancelGridButton = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.SeatsNud = new System.Windows.Forms.NumericUpDown();
this.label2 = new System.Windows.Forms.Label();
this.RowsNud = new System.Windows.Forms.NumericUpDown();
this.label3 = new System.Windows.Forms.Label();
this.NamePrefixTextBox = new System.Windows.Forms.TextBox();
this.label4 = new System.Windows.Forms.Label();
this.chbInvertSeats = new System.Windows.Forms.CheckBox();
this.chbInvertRows = new System.Windows.Forms.CheckBox();
this.rabVert = new System.Windows.Forms.RadioButton();
this.rabHoriz = new System.Windows.Forms.RadioButton();
this.label5 = new System.Windows.Forms.Label();
this.nudSeatSpacing = new System.Windows.Forms.NumericUpDown();
this.label6 = new System.Windows.Forms.Label();
this.label7 = new System.Windows.Forms.Label();
this.label8 = new System.Windows.Forms.Label();
this.label9 = new System.Windows.Forms.Label();
this.nudDoubleRowSpacing = new System.Windows.Forms.NumericUpDown();
((System.ComponentModel.ISupportInitialize)(this.SeatsNud)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.RowsNud)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nudSeatSpacing)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nudDoubleRowSpacing)).BeginInit();
this.SuspendLayout();
//
// OkButton
//
this.OkButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.OkButton.Enabled = false;
this.OkButton.Location = new System.Drawing.Point(154, 200);
this.OkButton.Name = "OkButton";
this.OkButton.Size = new System.Drawing.Size(75, 23);
this.OkButton.TabIndex = 0;
this.OkButton.Text = "OK";
this.OkButton.UseVisualStyleBackColor = true;
this.OkButton.Click += new System.EventHandler(this.OkButton_Click);
//
// CancelGridButton
//
this.CancelGridButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.CancelGridButton.Location = new System.Drawing.Point(73, 200);
this.CancelGridButton.Name = "CancelGridButton";
this.CancelGridButton.Size = new System.Drawing.Size(75, 23);
this.CancelGridButton.TabIndex = 1;
this.CancelGridButton.Text = "Cancel";
this.CancelGridButton.UseVisualStyleBackColor = true;
this.CancelGridButton.Click += new System.EventHandler(this.CancelButton_Click);
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(9, 7);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(34, 13);
this.label1.TabIndex = 2;
this.label1.Text = "Seats";
//
// SeatsNud
//
this.SeatsNud.Location = new System.Drawing.Point(60, 6);
this.SeatsNud.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.SeatsNud.Name = "SeatsNud";
this.SeatsNud.Size = new System.Drawing.Size(57, 20);
this.SeatsNud.TabIndex = 3;
this.SeatsNud.Value = new decimal(new int[] {
10,
0,
0,
0});
this.SeatsNud.ValueChanged += new System.EventHandler(this.XNud_ValueChanged);
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(9, 36);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(34, 13);
this.label2.TabIndex = 4;
this.label2.Text = "Rows";
//
// RowsNud
//
this.RowsNud.Location = new System.Drawing.Point(60, 34);
this.RowsNud.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.RowsNud.Name = "RowsNud";
this.RowsNud.Size = new System.Drawing.Size(57, 20);
this.RowsNud.TabIndex = 5;
this.RowsNud.Value = new decimal(new int[] {
2,
0,
0,
0});
this.RowsNud.ValueChanged += new System.EventHandler(this.YNud_ValueChanged);
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(9, 140);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(63, 13);
this.label3.TabIndex = 6;
this.label3.Text = "Name prefix";
//
// NamePrefixTextBox
//
this.NamePrefixTextBox.Location = new System.Drawing.Point(110, 137);
this.NamePrefixTextBox.Name = "NamePrefixTextBox";
this.NamePrefixTextBox.Size = new System.Drawing.Size(100, 20);
this.NamePrefixTextBox.TabIndex = 7;
this.NamePrefixTextBox.TextChanged += new System.EventHandler(this.NamePrefixTextBox_TextChanged);
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(12, 177);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(215, 13);
this.label4.TabIndex = 8;
this.label4.Text = "Hint: You can move the grid by clicking map";
//
// chbInvertSeats
//
this.chbInvertSeats.AutoSize = true;
this.chbInvertSeats.Location = new System.Drawing.Point(123, 6);
this.chbInvertSeats.Name = "chbInvertSeats";
this.chbInvertSeats.Size = new System.Drawing.Size(80, 17);
this.chbInvertSeats.TabIndex = 9;
this.chbInvertSeats.Text = "Right to left";
this.chbInvertSeats.UseVisualStyleBackColor = true;
this.chbInvertSeats.CheckedChanged += new System.EventHandler(this.chbInvertSeats_CheckedChanged);
//
// chbInvertRows
//
this.chbInvertRows.AutoSize = true;
this.chbInvertRows.Location = new System.Drawing.Point(123, 35);
this.chbInvertRows.Name = "chbInvertRows";
this.chbInvertRows.Size = new System.Drawing.Size(80, 17);
this.chbInvertRows.TabIndex = 10;
this.chbInvertRows.Text = "Right to left";
this.chbInvertRows.UseVisualStyleBackColor = true;
this.chbInvertRows.CheckedChanged += new System.EventHandler(this.chbInvertRows_CheckedChanged);
//
// rabVert
//
this.rabVert.AutoSize = true;
this.rabVert.Location = new System.Drawing.Point(12, 60);
this.rabVert.Name = "rabVert";
this.rabVert.Size = new System.Drawing.Size(84, 17);
this.rabVert.TabIndex = 11;
this.rabVert.TabStop = true;
this.rabVert.Text = "vertical rows";
this.rabVert.UseVisualStyleBackColor = true;
this.rabVert.CheckedChanged += new System.EventHandler(this.rabVert_CheckedChanged);
//
// rabHoriz
//
this.rabHoriz.AutoSize = true;
this.rabHoriz.Checked = true;
this.rabHoriz.Location = new System.Drawing.Point(110, 60);
this.rabHoriz.Name = "rabHoriz";
this.rabHoriz.Size = new System.Drawing.Size(95, 17);
this.rabHoriz.TabIndex = 12;
this.rabHoriz.TabStop = true;
this.rabHoriz.Text = "horizontal rows";
this.rabHoriz.UseVisualStyleBackColor = true;
this.rabHoriz.CheckedChanged += new System.EventHandler(this.rabHoriz_CheckedChanged);
//
// label5
//
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(12, 160);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(187, 13);
this.label5.TabIndex = 13;
this.label5.Text = "Hint: You can separate prefixes with \',\'";
//
// nudSeatSpacing
//
this.nudSeatSpacing.Location = new System.Drawing.Point(110, 83);
this.nudSeatSpacing.Name = "nudSeatSpacing";
this.nudSeatSpacing.Size = new System.Drawing.Size(51, 20);
this.nudSeatSpacing.TabIndex = 14;
this.nudSeatSpacing.ValueChanged += new System.EventHandler(this.nudSeatSpacing_ValueChanged);
//
// label6
//
this.label6.AutoSize = true;
this.label6.Location = new System.Drawing.Point(167, 85);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(39, 13);
this.label6.TabIndex = 15;
this.label6.Text = "pixel(s)";
//
// label7
//
this.label7.AutoSize = true;
this.label7.Location = new System.Drawing.Point(9, 85);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(69, 13);
this.label7.TabIndex = 16;
this.label7.Text = "Seat spacing";
//
// label8
//
this.label8.AutoSize = true;
this.label8.Location = new System.Drawing.Point(9, 113);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(101, 13);
this.label8.TabIndex = 19;
this.label8.Text = "Double row spacing";
//
// label9
//
this.label9.AutoSize = true;
this.label9.Location = new System.Drawing.Point(167, 113);
this.label9.Name = "label9";
this.label9.Size = new System.Drawing.Size(39, 13);
this.label9.TabIndex = 18;
this.label9.Text = "pixel(s)";
//
// nudDoubleRowSpacing
//
this.nudDoubleRowSpacing.Location = new System.Drawing.Point(110, 111);
this.nudDoubleRowSpacing.Name = "nudDoubleRowSpacing";
this.nudDoubleRowSpacing.Size = new System.Drawing.Size(51, 20);
this.nudDoubleRowSpacing.TabIndex = 17;
this.nudDoubleRowSpacing.ValueChanged += new System.EventHandler(this.nudDoubleRowSpacing_ValueChanged);
//
// ComputerPlaceGridSettings
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(232, 235);
this.ControlBox = false;
this.Controls.Add(this.label8);
this.Controls.Add(this.label9);
this.Controls.Add(this.nudDoubleRowSpacing);
this.Controls.Add(this.label7);
this.Controls.Add(this.label6);
this.Controls.Add(this.nudSeatSpacing);
this.Controls.Add(this.label5);
this.Controls.Add(this.rabHoriz);
this.Controls.Add(this.rabVert);
this.Controls.Add(this.chbInvertRows);
this.Controls.Add(this.chbInvertSeats);
this.Controls.Add(this.label4);
this.Controls.Add(this.NamePrefixTextBox);
this.Controls.Add(this.label3);
this.Controls.Add(this.RowsNud);
this.Controls.Add(this.label2);
this.Controls.Add(this.SeatsNud);
this.Controls.Add(this.label1);
this.Controls.Add(this.CancelGridButton);
this.Controls.Add(this.OkButton);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Name = "ComputerPlaceGridSettings";
this.Text = "ComputerPlaceGridSettings";
this.Load += new System.EventHandler(this.ComputerPlaceGridSettings_Load);
((System.ComponentModel.ISupportInitialize)(this.SeatsNud)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.RowsNud)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nudSeatSpacing)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nudDoubleRowSpacing)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button OkButton;
private System.Windows.Forms.Button CancelGridButton;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.NumericUpDown SeatsNud;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.NumericUpDown RowsNud;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox NamePrefixTextBox;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.CheckBox chbInvertSeats;
private System.Windows.Forms.CheckBox chbInvertRows;
private System.Windows.Forms.RadioButton rabVert;
private System.Windows.Forms.RadioButton rabHoriz;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.NumericUpDown nudSeatSpacing;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.Label label9;
private System.Windows.Forms.NumericUpDown nudDoubleRowSpacing;
}
}
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace MoyaAdminUI
{
public delegate void ComputerPlaceGridSettingsAnswer(bool cancel, int x, int y, bool ix, bool iy, string name, bool horizontalRow, int seatSpacing, int doubleRowSpacing);
public partial class ComputerPlaceGridSettings : Form
{
public ComputerPlaceGridSettings()
{
InitializeComponent();
}
public event ComputerPlaceGridSettingsAnswer PreviewAnswer;
public event ComputerPlaceGridSettingsAnswer AnswerGiven;
void sendAnswer(ComputerPlaceGridSettingsAnswer d, bool cancel)
{
if (d != null)
{
if(rabVert.Checked)
d(cancel, Convert.ToInt32(this.RowsNud.Value), Convert.ToInt32(this.SeatsNud.Value), chbInvertRows.Checked, chbInvertSeats.Checked, this.NamePrefixTextBox.Text.Trim(), rabHoriz.Checked, Convert.ToInt32(nudSeatSpacing.Value), Convert.ToInt32(nudDoubleRowSpacing.Value));
else
d(cancel, Convert.ToInt32(this.SeatsNud.Value), Convert.ToInt32(this.RowsNud.Value), chbInvertSeats.Checked, chbInvertRows.Checked, this.NamePrefixTextBox.Text.Trim(), rabHoriz.Checked, Convert.ToInt32(nudSeatSpacing.Value), Convert.ToInt32(nudDoubleRowSpacing.Value));
}
}
public void ResendPreview()
{
sendAnswer(PreviewAnswer, false);
}
private void OkButton_Click(object sender, EventArgs e)
{
if (this.RowsNud.Value > 1)
{
string[] prefixes = this.NamePrefixTextBox.Text.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
if (prefixes.Length != this.RowsNud.Value)
{
DialogResult result = MessageBox.Show("You haven't given the same amount of prefixes and rows. Do you want to continue with the prefix: " + this.NamePrefixTextBox.Text + "? Separate prefixes with a \',\'.", "", MessageBoxButtons.YesNo);
if (result != System.Windows.Forms.DialogResult.Yes)
return;
}
}
sendAnswer(AnswerGiven, false);
this.Close();
}
private void CancelButton_Click(object sender, EventArgs e)
{
sendAnswer(AnswerGiven, true);
this.Close();
}
private void ComputerPlaceGridSettings_Load(object sender, EventArgs e)
{
sendAnswer(PreviewAnswer, false);
}
private void XNud_ValueChanged(object sender, EventArgs e)
{
sendAnswer(PreviewAnswer, false);
}
private void YNud_ValueChanged(object sender, EventArgs e)
{
sendAnswer(PreviewAnswer, false);
}
private void NamePrefixTextBox_TextChanged(object sender, EventArgs e)
{
sendAnswer(PreviewAnswer, false);
this.OkButton.Enabled = this.NamePrefixTextBox.Text.Trim().Length > 0;
}
private void rabVert_CheckedChanged(object sender, EventArgs e)
{
if (rabVert.Checked)
{
rabHoriz.Checked = false;
sendAnswer(PreviewAnswer, false);
}
}
private void rabHoriz_CheckedChanged(object sender, EventArgs e)
{
if (rabHoriz.Checked)
{
rabVert.Checked = false;
sendAnswer(PreviewAnswer, false);
}
}
private void nudSeatSpacing_ValueChanged(object sender, EventArgs e)
{
sendAnswer(PreviewAnswer, false);
}
private void nudDoubleRowSpacing_ValueChanged(object sender, EventArgs e)
{
sendAnswer(PreviewAnswer, false);
}
private void chbInvertSeats_CheckedChanged(object sender, EventArgs e)
{
sendAnswer(PreviewAnswer, false);
}
private void chbInvertRows_CheckedChanged(object sender, EventArgs e)
{
sendAnswer(PreviewAnswer, false);
}
}
}
<?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>
</root>
\ No newline at end of file
namespace MoyaAdminUI
{
partial class MainForm
{
/// <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();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
this.placesContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
this.MapPictureBox = new System.Windows.Forms.PictureBox();
this.placeEditor = new System.Windows.Forms.PropertyGrid();
this.PlacesListView = new System.Windows.Forms.ListView();
this.colName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.colUser = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.colX = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.colY = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.toolStripSaveButton = new System.Windows.Forms.ToolStripButton();
this.toolStripRefreshButton = new System.Windows.Forms.ToolStripButton();
this.usersToolStripPrintButton = new System.Windows.Forms.ToolStripButton();
this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
this.TopPanel = new System.Windows.Forms.Panel();
this.label3 = new System.Windows.Forms.Label();
this.MapsComboBox = new System.Windows.Forms.ComboBox();
this.panel1 = new System.Windows.Forms.Panel();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
((System.ComponentModel.ISupportInitialize)(this.MapPictureBox)).BeginInit();
this.toolStrip1.SuspendLayout();
this.TopPanel.SuspendLayout();
this.panel1.SuspendLayout();
this.SuspendLayout();
//
// placesContextMenuStrip
//
this.placesContextMenuStrip.Name = "placesContextMenuStrip";
this.placesContextMenuStrip.Size = new System.Drawing.Size(61, 4);
//
// MapPictureBox
//
this.MapPictureBox.Dock = System.Windows.Forms.DockStyle.Left;
this.MapPictureBox.Location = new System.Drawing.Point(0, 70);
this.MapPictureBox.Name = "MapPictureBox";
this.MapPictureBox.Size = new System.Drawing.Size(758, 426);
this.MapPictureBox.TabIndex = 0;
this.MapPictureBox.TabStop = false;
this.MapPictureBox.Paint += new System.Windows.Forms.PaintEventHandler(this.MapPictureBox_Paint);
this.MapPictureBox.MouseDown += new System.Windows.Forms.MouseEventHandler(this.MapPictureBox_MouseDown);
this.MapPictureBox.MouseMove += new System.Windows.Forms.MouseEventHandler(this.MapPictureBox_MouseMove);
this.MapPictureBox.MouseUp += new System.Windows.Forms.MouseEventHandler(this.MapPictureBox_MouseUp);
//
// placeEditor
//
this.placeEditor.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.placeEditor.Location = new System.Drawing.Point(6, 178);
this.placeEditor.Name = "placeEditor";
this.placeEditor.Size = new System.Drawing.Size(269, 242);
this.placeEditor.TabIndex = 13;
//
// PlacesListView
//
this.PlacesListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.PlacesListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.colName,
this.colUser,
this.colX,
this.colY});
this.PlacesListView.ContextMenuStrip = this.placesContextMenuStrip;
this.PlacesListView.FullRowSelect = true;
this.PlacesListView.Location = new System.Drawing.Point(6, 6);
this.PlacesListView.Name = "PlacesListView";
this.PlacesListView.Size = new System.Drawing.Size(272, 166);
this.PlacesListView.TabIndex = 0;
this.PlacesListView.UseCompatibleStateImageBehavior = false;
this.PlacesListView.View = System.Windows.Forms.View.Details;
this.PlacesListView.SelectedIndexChanged += new System.EventHandler(this.PlacesListView_SelectedIndexChanged);
this.PlacesListView.DoubleClick += new System.EventHandler(this.PlacesListView_DoubleClick);
//
// colName
//
this.colName.Text = "Name";
this.colName.Width = 40;
//
// colUser
//
this.colUser.Text = "User";
this.colUser.Width = 95;
//
// colX
//
this.colX.Text = "X";
this.colX.Width = 46;
//
// colY
//
this.colY.Text = "Y";
this.colY.Width = 51;
//
// toolStrip1
//
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripSaveButton,
this.toolStripRefreshButton,
this.usersToolStripPrintButton,
this.toolStripSeparator1,
this.toolStripButton1});
this.toolStrip1.Location = new System.Drawing.Point(0, 0);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(1042, 25);
this.toolStrip1.TabIndex = 14;
this.toolStrip1.Text = "toolStrip1";
this.toolStrip1.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.toolStrip1_ItemClicked);
//
// toolStripSaveButton
//
this.toolStripSaveButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.toolStripSaveButton.Image = ((System.Drawing.Image)(resources.GetObject("toolStripSaveButton.Image")));
this.toolStripSaveButton.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripSaveButton.Name = "toolStripSaveButton";
this.toolStripSaveButton.Size = new System.Drawing.Size(23, 22);
this.toolStripSaveButton.Text = "Save";
this.toolStripSaveButton.Click += new System.EventHandler(this.toolStripButton1_Click);
//
// toolStripRefreshButton
//
this.toolStripRefreshButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.toolStripRefreshButton.Image = ((System.Drawing.Image)(resources.GetObject("toolStripRefreshButton.Image")));
this.toolStripRefreshButton.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripRefreshButton.Name = "toolStripRefreshButton";
this.toolStripRefreshButton.Size = new System.Drawing.Size(23, 22);
this.toolStripRefreshButton.Text = "Refresh";
this.toolStripRefreshButton.Click += new System.EventHandler(this.toolStripRefreshButton_Click);
//
// usersToolStripPrintButton
//
this.usersToolStripPrintButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.usersToolStripPrintButton.Image = ((System.Drawing.Image)(resources.GetObject("usersToolStripPrintButton.Image")));
this.usersToolStripPrintButton.ImageTransparentColor = System.Drawing.Color.Magenta;
this.usersToolStripPrintButton.Name = "usersToolStripPrintButton";
this.usersToolStripPrintButton.Size = new System.Drawing.Size(23, 22);
this.usersToolStripPrintButton.Text = "Users";
this.usersToolStripPrintButton.Click += new System.EventHandler(this.usersToolStripPrintButton_Click);
//
// toolStripButton1
//
this.toolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.toolStripButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton1.Image")));
this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton1.Name = "toolStripButton1";
this.toolStripButton1.Size = new System.Drawing.Size(23, 22);
this.toolStripButton1.Text = "Api settings";
this.toolStripButton1.Click += new System.EventHandler(this.toolStripButton1_Click_1);
//
// TopPanel
//
this.TopPanel.Controls.Add(this.label3);
this.TopPanel.Controls.Add(this.MapsComboBox);
this.TopPanel.Dock = System.Windows.Forms.DockStyle.Top;
this.TopPanel.Location = new System.Drawing.Point(0, 25);
this.TopPanel.Name = "TopPanel";
this.TopPanel.Size = new System.Drawing.Size(1042, 45);
this.TopPanel.TabIndex = 15;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(3, 4);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(54, 13);
this.label3.TabIndex = 6;
this.label3.Text = "Placemap";
//
// MapsComboBox
//
this.MapsComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.MapsComboBox.FormattingEnabled = true;
this.MapsComboBox.Location = new System.Drawing.Point(3, 20);
this.MapsComboBox.Name = "MapsComboBox";
this.MapsComboBox.Size = new System.Drawing.Size(185, 21);
this.MapsComboBox.TabIndex = 5;
this.MapsComboBox.SelectedIndexChanged += new System.EventHandler(this.MapsComboBox_SelectedIndexChanged);
//
// panel1
//
this.panel1.Controls.Add(this.PlacesListView);
this.panel1.Controls.Add(this.placeEditor);
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(758, 70);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(284, 426);
this.panel1.TabIndex = 16;
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1042, 496);
this.Controls.Add(this.panel1);
this.Controls.Add(this.MapPictureBox);
this.Controls.Add(this.TopPanel);
this.Controls.Add(this.toolStrip1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "MainForm";
this.Text = "Moya Admin UI";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.frmComputerPlaces_FormClosing);
this.Load += new System.EventHandler(this.frmEditComputerPlace_Load);
((System.ComponentModel.ISupportInitialize)(this.MapPictureBox)).EndInit();
this.toolStrip1.ResumeLayout(false);
this.toolStrip1.PerformLayout();
this.TopPanel.ResumeLayout(false);
this.TopPanel.PerformLayout();
this.panel1.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.ContextMenuStrip placesContextMenuStrip;
private System.Windows.Forms.PictureBox MapPictureBox;
private System.Windows.Forms.PropertyGrid placeEditor;
private System.Windows.Forms.ListView PlacesListView;
private System.Windows.Forms.ColumnHeader colName;
private System.Windows.Forms.ColumnHeader colUser;
private System.Windows.Forms.ColumnHeader colX;
private System.Windows.Forms.ColumnHeader colY;
private System.Windows.Forms.ToolStrip toolStrip1;
private System.Windows.Forms.ToolStripButton toolStripSaveButton;
private System.Windows.Forms.ToolStripButton toolStripRefreshButton;
private System.Windows.Forms.ToolStripButton usersToolStripPrintButton;
private System.Windows.Forms.Panel TopPanel;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.ComboBox MapsComboBox;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.ToolStripButton toolStripButton1;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MoyaAdminUI
{
public partial class MainForm : Form
{
int newPlaceHeight = 10;
int newPlaceWidth = 10;
Point clickedLocation;
List<ComputerPlace> gridPreview = new List<ComputerPlace>();
ComputerPlaceGridSettings gridSettingsForm;
Size mouseDownOffset;
ComputerPlace mouseDownComputerPlace;
Point mouseDownPoint;
Map SelectedMap;
List<ComputerPlace> unsavedComputerPlaces = new List<ComputerPlace>();
public MainForm()
{
InitializeComponent();
}
private void frmEditComputerPlace_Load(object sender, EventArgs e)
{
try
{
User.LoadAll();
Map.LoadAll();
loadPlacemap();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + "\r\nCannot connect to Moya.\r\nCheck Api url and key");
}
}
private void loadPlacemap()
{
foreach (Map m in Map.Cache)
{
MapsComboBox.Items.Add(m);
}
if (MapsComboBox.Items.Count > 0)
{
MapsComboBox.SelectedItem = MapsComboBox.Items[0];
loadComputerPlaces();
}
loadImage();
}
ComputerPlace selectedPlace;
/// <summary>
/// Loads computer places into listview from cache
/// </summary>
void loadComputerPlaces()
{
this.editComputerPlace(null);
this.PlacesListView.Items.Clear();
unsavedComputerPlaces.Clear();
try
{
ComputerPlace.LoadAll(SelectedMap.Id);
foreach (ComputerPlace place in ComputerPlace.Cache)
{
addPlaceToListView(place);
}
}
catch (Exception e)
{
MessageBox.Show("Could not connect to Moya server");
}
MapPictureBox.Refresh();
}
void addPlaceToListView(ComputerPlace place)
{
ListViewItem li = new ListViewItem();
li.Tag = place;
li.Text = place.Name;
li.SubItems.Add(place.ReserverUserName);
li.SubItems.Add(place.MapX.ToString());
li.SubItems.Add(place.MapY.ToString());
this.PlacesListView.Items.Add(li);
}
void loadImage()
{
Size borderSize = this.Size - this.ClientSize;
this.MapPictureBox.Load(MoyaAPI.RestClient.GetRequestURL(Properties.Settings.Default.ApiURL, "placeadmin/background/" + SelectedMap.Id));
MapPictureBox.Size = this.MapPictureBox.Image.Size;
this.MinimumSize = this.MapPictureBox.Image.Size + new Size(0, this.TopPanel.Size.Height + 20) + new Size(this.panel1.MinimumSize.Width + 270, 0) + borderSize;
}
private void MapPictureBox_MouseUp(object sender, MouseEventArgs e)
{
clickedLocation = e.Location;
if (e.Button == MouseButtons.Right)
{
ContextMenu menu = new ContextMenu();
ComputerPlace computerPlace = findPlace(clickedLocation);
//Creating menuitems
MenuItem mi;
mi = new MenuItem("Create a new computer place...", new EventHandler(this.createNewComputerPlace));
mi.Enabled = (computerPlace == null);
menu.MenuItems.Add(mi);
mi = new MenuItem("Create a grid of new computer places...", new EventHandler(this.createNewComputerPlaceGrid));
mi.Enabled = (computerPlace == null);
menu.MenuItems.Add(mi);
mi = new MenuItem("Select all in same group", new EventHandler(this.selectAllInGroup));
mi.Enabled = (computerPlace != null);
menu.MenuItems.Add(mi);
mi = new MenuItem("Release selected (" + this.PlacesListView.SelectedItems.Count + ")", new EventHandler(this.releaseComputerPlace));
mi.Enabled = (computerPlace != null);
menu.MenuItems.Add(mi);
mi = new MenuItem("Reserve selected (" + this.PlacesListView.SelectedItems.Count + ")", new EventHandler(this.reservePlaces));
mi.Enabled = (computerPlace != null);
menu.MenuItems.Add(mi);
mi = new MenuItem("Delete selected permanently from database (" + this.PlacesListView.SelectedItems.Count + ")", new EventHandler(this.deleteMenuItemClick));
mi.Enabled = (computerPlace != null);
menu.MenuItems.Add(mi);
menu.Show(this.MapPictureBox, clickedLocation);
}
else if (e.Button == MouseButtons.Left && multiMoveLastLocation == null)
{
if (selectedPlace == findPlace(clickedLocation))
{
ComputerPlace computerPlace = findPlace(clickedLocation);
if (computerPlace != null)
{
this.selectedPlace = computerPlace;
editComputerPlace(selectedPlace);
}
else
{
if (this.gridSettingsForm != null)
{
this.gridSettingsForm.ResendPreview();
}
if (mouseDownPoint == e.Location)
{
//clear selection if cursor didn't move
editComputerPlace(null);
}
}
}
}
else if (e.Button == MouseButtons.Left && multiMoveLastLocation != null)
{
//multimove ended
foreach (ListViewItem li in this.PlacesListView.SelectedItems)
{
ComputerPlace p = (ComputerPlace)li.Tag;
if (!this.unsavedComputerPlaces.Contains(p))
{
this.unsavedComputerPlaces.Add(p);
}
changed();
}
}
editObjects();
mouseDownComputerPlace = null;
multiSelectStart = null;
multiSelectEnd = null;
multiMoveLastLocation = null;
this.MapPictureBox.Refresh();
}
private void selectAllInGroup(object sender, EventArgs e)
{
if (selectedPlace != null && selectedPlace.ReserverId > 0)
{
foreach (ListViewItem lvi in PlacesListView.Items)
{
if (((ComputerPlace)lvi.Tag).ReserverId == selectedPlace.ReserverId)
lvi.Selected = true;
}
}
}
private void releaseComputerPlace(object sender, EventArgs e)
{
if (MessageBox.Show(this, "Do you really want kick users from selected places", "Kick users?", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
{
foreach (ListViewItem li in this.PlacesListView.SelectedItems)
{
ComputerPlace p = (ComputerPlace)li.Tag;
p.Release();
}
loadComputerPlaces();
}
}
private void reservePlaces(object sender, EventArgs e)
{
foreach (ListViewItem li in this.PlacesListView.SelectedItems)
{
ComputerPlace p = (ComputerPlace)li.Tag;
if (p.Taken)
{
MessageBox.Show("Release places first");
return;
}
}
UsersFinderForm frm = new UsersFinderForm();
frm.AllowMultiSelect = false;
if (frm.ShowDialog(this) == System.Windows.Forms.DialogResult.OK)
{
foreach (ListViewItem li in this.PlacesListView.SelectedItems)
{
ComputerPlace p = (ComputerPlace)li.Tag;
p.Reserve(frm.SelectedUser);
}
loadComputerPlaces();
}
}
/// <summary>
/// Finds a matching computer place for location clicked on picturebox.
/// </summary>
/// <param name="location"></param>
/// <returns>ID of computer place or 0 if not found</returns>
ComputerPlace findPlace(Point location)
{
foreach (ComputerPlace place in ComputerPlace.Cache)
{
if ((location.X >= place.MapX) &&
(location.Y >= place.MapY) &&
(location.X <= (place.MapX + place.Width)) &&
(location.Y <= (place.MapY + place.Height))
)
{
return place;
}
}
foreach (ComputerPlace place in this.unsavedComputerPlaces)
{
if ((location.X >= place.MapX) &&
(location.Y >= place.MapY) &&
(location.X <= (place.MapX + place.Width)) &&
(location.Y <= (place.MapY + place.Height))
)
{
return place;
}
}
return null;
}
ComputerPlace createComputerPlace(Point location)
{
ComputerPlace place = new ComputerPlace();
place.MapId = SelectedMap.Id;
place.ProductId = 262;
this.unsavedComputerPlaces.Add(place);
//place.Coord = location;
place.MapX = location.X;
place.MapY = location.Y;
//place.Code = generateVerifiedCode();
place.Name = "NEW";
addPlaceToListView(place);
MapPictureBox.Refresh();
return place;
}
/*
void updateGroupMenuItemClick(object sender, EventArgs e)
{
MenuItem mi = (MenuItem)sender;
foreach (ListViewItem li in this.PlacesListView.SelectedItems)
{
ComputerPlace p = (ComputerPlace)li.Tag;
if (mi.Tag == null)
{
throw new Exception("mi.Tag == null");
}
else if (mi.Tag is int)
{
p.User = null;
//p.SpecialGroupId = (int)mi.Tag; WTF
}
/* WTF???
else if (mi.Tag is oGroup)
{
//normal value (real ID)
//p.Group = (oGroup)mi.Tag; WTF
}
else
{
throw new Exception("Unknown type for mi.Tag: " + mi.Tag.GetType().ToString());
}
if (!this.unsavedComputerPlaces.Contains(p))
{
this.unsavedComputerPlaces.Add(p);
}
}
this.toolStripSaveButton.Enabled = true;
}
*/
private void createNewComputerPlace(object sender, EventArgs e)
{
ComputerPlace place = createComputerPlace(clickedLocation);
place.Width = newPlaceWidth;
place.Height = newPlaceHeight;
editComputerPlace(place);
this.changed();
}
private void createNewComputerPlaceGrid(object sender, EventArgs e)
{
gridSettingsForm = new ComputerPlaceGridSettings();
gridSettingsForm.PreviewAnswer += new ComputerPlaceGridSettingsAnswer(gridSettingsForm_PreviewAnswer);
gridSettingsForm.AnswerGiven += new ComputerPlaceGridSettingsAnswer(gridSettingsForm_AnswerGiven);
gridSettingsForm.Show(this);
}
void gridSettingsForm_AnswerGiven(bool cancel, int x, int y, bool ix, bool iy, string name, bool horizontalRow, int seatSpacing, int doubleRowSpacing)
{
List<ComputerPlace> returnList = new List<ComputerPlace>();
this.gridPreview.Clear();
if (!cancel)
{
addPlaceGrid(returnList, x, y, ix, iy, name, false, horizontalRow, seatSpacing, doubleRowSpacing);
foreach (ComputerPlace p in returnList)
{
unsavedComputerPlaces.Add(p);
addPlaceToListView(p);
}
this.editComputerPlace(returnList[returnList.Count - 1]); // get last
changed();
}
this.MapPictureBox.Refresh();
this.gridSettingsForm = null;
}
void gridSettingsForm_PreviewAnswer(bool cancel, int x, int y, bool ix, bool iy, string name, bool horizontalRow, int seatSpacing, int doubleRowSpacing)
{
this.gridPreview.Clear();
addPlaceGrid(gridPreview, x, y, ix, iy, name, true, horizontalRow, seatSpacing, doubleRowSpacing);
this.MapPictureBox.Refresh();
}
void addPlaceGrid(List<ComputerPlace> list, int xcount, int ycount, bool ix, bool iy, string name, bool preview, bool horizontalRow, int seatSpacing, int doubleRowSpacing)
{
int dRowCount = -1;
int count = 0;
int x;
if (ix)
{
//X is inverted (N...1)
x = xcount;
}
else
{
//X is not inverted (1...N)
x = 0;
}
if (ix && !horizontalRow)
dRowCount = Convert.ToInt32(Math.Floor((double)(xcount / 2))) + 1;
else if (iy && horizontalRow)
dRowCount = Convert.ToInt32(Math.Floor((double)(ycount / 2))) + 1;
int nameCount = -1;
bool prefixList = false;
string[] names = name.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
if (names.Length > 1)
{
if (xcount == names.Length)
prefixList = true;
else if (ycount == names.Length)
prefixList = true;
}
while (true)
{
if (ix)
{
if (x-- <= 0)
break;
}
else
{
if (x++ >= xcount)
break;
}
int y;
if (iy)
{
//Y is inverted (N...1)
y = ycount;
}
else
{
//Y is not inverted (1...N)
y = 0;
if (horizontalRow)
dRowCount = 0;
}
if (!horizontalRow)
{
count = 0;
if (prefixList)
nameCount++;
if ((x % 2) != 0)
{
if (!ix)
dRowCount++;
else
dRowCount--;
}
}
else
{
count++;
if (prefixList)
nameCount = -1;
}
while (true)
{
if (iy)
{
if (y-- <= 0)
break;
}
else
{
if (y++ >= ycount)
break;
}
if (horizontalRow)
{
if (prefixList)
nameCount++;
}
else
count++;
if (prefixList)
{
if (xcount == names.Length && nameCount < names.Length && nameCount >= 0)
{
name = names[nameCount];
}
else if (ycount == names.Length && nameCount < names.Length && nameCount >= 0)
{
name = names[nameCount];
}
}
ComputerPlace p = new ComputerPlace();
p.MapId = SelectedMap.Id;
p.ProductId = 262;
p.Width = newPlaceWidth;
p.Height = newPlaceHeight;
int xcoord = 0;
int ycoord = 0;
if (horizontalRow)
{
// y modulo 2, Checking if y is non even.
if ((y % 2) != 0)
{
if (iy)
dRowCount--;
else
dRowCount++;
}
xcoord = x * (p.Width + seatSpacing) + clickedLocation.X;
ycoord = y * p.Height + dRowCount * doubleRowSpacing + clickedLocation.Y;
}
else
{
xcoord = x * p.Width + dRowCount * doubleRowSpacing + clickedLocation.X;
ycoord = y * (p.Height + seatSpacing) + clickedLocation.Y;
}
p.MapX = xcoord;
p.MapY = ycoord;
if (!preview)
{
p.Name = name + count;
//p.Code = generateVerifiedCode();
}
list.Add(p);
}
}
}
private void editComputerPlace(object sender, EventArgs e)
{
ComputerPlace computerPlace = findPlace(clickedLocation);
if (computerPlace == null)
throw new InvalidOperationException("findPlace(clickedLocation) returned null - shouldn't happen");
editComputerPlace(computerPlace);
//this.MapPictureBox.Refresh();
}
void editComputerPlace(ComputerPlace computerplace)
{
disableEvents = true;
selectedPlace = computerplace;
this.PlacesListView.SelectedItems.Clear();
foreach (ListViewItem li in this.PlacesListView.Items)
{
if (li.Tag == computerplace)
{
li.Selected = true;
li.EnsureVisible();
break;
}
}
placeEditor.SelectedObject = computerplace;
disableEvents = false;
this.MapPictureBox.Refresh();
}
private void MapPictureBox_Paint(object sender, PaintEventArgs e)
{
//paint computer places
unsafe
{
foreach (ComputerPlace place in ComputerPlace.Cache)
{
paintPlace(e.Graphics, place, false);
}
foreach (ComputerPlace place in this.unsavedComputerPlaces)
{
paintPlace(e.Graphics, place, false);
}
foreach (ComputerPlace place in this.gridPreview)
{
paintPlace(e.Graphics, place, true);
}
}
//paint selection area rectangle
if (this.multiSelectStart != null && this.multiSelectEnd != null)
{
e.Graphics.DrawRectangle(
Pens.LightBlue,
new Rectangle(multiSelectStart.Value,
new Size(multiSelectEnd.Value.X - multiSelectStart.Value.X,
multiSelectEnd.Value.Y - multiSelectStart.Value.Y))
);
}
}
void paintPlace(Graphics g, ComputerPlace place, bool forcePreviewColor)
{
Brush brush;
if (forcePreviewColor)
{
brush = Brushes.Silver;
}
else if (place.Id == 0)
{
brush = Brushes.Purple;
}
else if (place.Taken)
{
brush = Brushes.Red;
}
else if (place.Buyable)
brush = Brushes.White;
else
{
brush = Brushes.Gray;
}
Rectangle r = new Rectangle(place.GetPoint(), place.GetSize());
Pen pen;
if (place == selectedPlace || isSelected(place))
{
pen = Pens.LightBlue;
}
else
{
pen = Pens.Black;
}
g.DrawRectangle(pen, new Rectangle(place.GetPoint(), place.GetSize() - new Size(1, 1)));
g.FillRectangle(brush, new Rectangle(new Point(place.MapX + 1, place.MapY + 1), place.GetSize() - new Size(2, 2)));
}
bool isSelected(ComputerPlace p)
{
foreach (ListViewItem li in this.PlacesListView.SelectedItems)
{
if (li.Tag == p)
return true;
}
return false;
}
bool disableEvents = false;
private void PlacesListView_SelectedIndexChanged(object sender, EventArgs e)
{
if (disableEvents)
return;
if (this.PlacesListView.SelectedItems.Count == 0)
{
this.selectedPlace = null;
placeEditor.SelectedObject = selectedPlace;
}
else if (this.PlacesListView.SelectedItems.Count == 1)
{
this.selectedPlace = (ComputerPlace)this.PlacesListView.SelectedItems[0].Tag;
placeEditor.SelectedObject = selectedPlace;
}
this.MapPictureBox.Refresh();
}
private void SaveButton_Click(object sender, EventArgs e)
{
}
bool checkSaveSafety()
{
string messages = "";
foreach (ComputerPlace newplace in unsavedComputerPlaces)
{
foreach (ComputerPlace oldplace in ComputerPlace.Cache)
{
if (newplace != oldplace)
{
if (newplace.Name.Trim().ToLower() == oldplace.Name.Trim().ToLower())
{
messages += "\r\nComputer place with name '" + newplace.Name + "' already exists.";
}
}
}
}
if (messages != "")
{
MessageBox.Show("The following errors were detected:" + messages, "Saving cancelled", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return false;
}
else
{
return true;
}
}
void save()
{
if (!checkSaveSafety())
return;
this.toolStripSaveButton.Enabled = false;
Application.DoEvents();
this.Cursor = Cursors.WaitCursor;
while (this.unsavedComputerPlaces.Count > 0)
{
ComputerPlace place = unsavedComputerPlaces[0];
unsavedComputerPlaces.Remove(place);
place.Save();
}
foreach (ComputerPlace cp in ComputerPlace.Cache)
{
if (cp.Dirty)
cp.Save();
}
this.MapPictureBox.Refresh();
this.loadComputerPlaces();
this.Cursor = Cursors.Default;
}
void changed()
{
if (disableEvents)
return;
if (!this.unsavedComputerPlaces.Contains(this.selectedPlace))
{
this.unsavedComputerPlaces.Add(this.selectedPlace);
}
this.toolStripSaveButton.Enabled = true;
this.MapPictureBox.Refresh();
}
private void CloseButton_Click(object sender, EventArgs e)
{
this.Close();
}
private void frmComputerPlaces_FormClosing(object sender, FormClosingEventArgs e)
{
if (this.unsavedComputerPlaces.Count > 0)
{
DialogResult res = MessageBox.Show("There are unsaved changes. Do you want to close anyway and lose all changes?", "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (res == DialogResult.No)
{
e.Cancel = true;
}
else if (res == DialogResult.Yes)
{
//reloading data for changed items from database
foreach (ComputerPlace place in unsavedComputerPlaces)
{
if (place.Id > 0)
place.Reload();
}
}
}
}
void deleteMenuItemClick(object sender, EventArgs e)
{
string placesList = "";
foreach (ListViewItem li in this.PlacesListView.SelectedItems)
{
ComputerPlace p = (ComputerPlace)li.Tag;
placesList += p.Name + " ";
}
DialogResult r = MessageBox.Show("Do you really want to permanently delete the following computer places?\r\n" + placesList, "Delete confirmation", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
if (r == DialogResult.Cancel)
return;
foreach (ListViewItem li in this.PlacesListView.SelectedItems)
{
ComputerPlace p = (ComputerPlace)li.Tag;
if (p.Id > 0)
{
p.Delete();
}
else
{
if (this.unsavedComputerPlaces.Contains(p))
{
this.unsavedComputerPlaces.Remove(p);
}
foreach (ListViewItem li2 in this.PlacesListView.Items)
{
if (li2.Tag == p)
{
li2.Remove();
}
}
}
}
this.MapPictureBox.Refresh();
}
/*
void selectGroupMenuItemClick(object sender, EventArgs e)
{
MenuItem mi = (MenuItem)sender;
if (mi.Tag == null)
{
throw new Exception("mi.Tag == null");
}
else if (mi.Tag is int)
{
//special value (not real ID)
this.selectedPlace.User = null;
// WTF??
//this.selectedPlace.SpecialGroupId = (int) mi.Tag;
placeEditor.SelectedObject = selectedPlace;
}
/* RLY?? WTF
else if (mi.Tag is oGroup)
{
//normal value (real ID)
this.selectedPlace.Group = (oGroup) mi.Tag;
editComputerPlace(selectedPlace);
}
/
else
{
throw new Exception("Unknown type for mi.Tag: " + mi.Tag.GetType().ToString());
}
}*/
private void MapPictureBox_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
mouseDownPoint = e.Location;
mouseDownComputerPlace = findPlace(mouseDownPoint);
if (mouseDownComputerPlace != null)
{
//editComputerPlace(mouseDownComputerPlace);
selectedPlace = mouseDownComputerPlace;
mouseDownOffset = new Size(
e.Location.X - mouseDownComputerPlace.MapX,
e.Location.Y - mouseDownComputerPlace.MapY
);
newPlaceHeight = mouseDownComputerPlace.Height;
newPlaceWidth = mouseDownComputerPlace.Width;
}
else
{
editComputerPlace(null);
}
}
}
Nullable<Point> multiSelectStart;
Nullable<Point> multiSelectEnd;
/// <summary>
/// Where the mouse cursor was during last MouseMove event when moving
/// multiple objects.
/// </summary>
Nullable<Point> multiMoveLastLocation;
int inDistance(int A, int B)
{
if (A - B > B - A)
return A - B;
else
return B - A;
}
int calculateDistance(int A, int B)
{
return B - A;
}
int nearest(int A, int B)
{
int outA = A;
int outB = B;
if (A < 0)
A = 0 - A;
if (B < 0)
B = 0 - B;
if (A < B)
return outA;
else return outB;
}
private void MapPictureBox_MouseMove(object sender, MouseEventArgs e)
{
unsafe
{
// if drag start top of place then move
if (e.Button == MouseButtons.Left && mouseDownComputerPlace != null)
{
//drag & drop
//multimove
//Calculating difference from last movement
Size difference;
if (multiMoveLastLocation == null)
{
difference = new Size(
e.Location.X - mouseDownPoint.X,
e.Location.Y - mouseDownPoint.Y
);
}
else
{
difference = new Size(
e.Location.X - multiMoveLastLocation.Value.X,
e.Location.Y - multiMoveLastLocation.Value.Y
);
}
multiMoveLastLocation = e.Location;
int snapDistance = 2;
int minXDisctance = snapDistance;
int minYDisctance = snapDistance;
//snap to other places
foreach (ComputerPlace cp in ComputerPlace.Cache)
{
if (mouseDownComputerPlace != cp && inDistance(mouseDownComputerPlace.MapX + difference.Width, cp.MapX) < snapDistance)
{
minXDisctance = nearest(minXDisctance, difference.Width + calculateDistance(mouseDownComputerPlace.MapX + difference.Width, cp.MapX));
}
if (mouseDownComputerPlace != cp && inDistance(mouseDownComputerPlace.MapY + difference.Height, cp.MapY) < snapDistance)
{
minYDisctance = nearest(minYDisctance, difference.Height + calculateDistance(mouseDownComputerPlace.MapY + difference.Height, cp.MapY));
}
}
if (minXDisctance < snapDistance)
difference = new Size(difference.Width + minXDisctance, difference.Height);
if (minYDisctance < snapDistance)
difference = new Size(difference.Width, difference.Height + minYDisctance);
//moving all selected objects with the chosen difference
foreach (ListViewItem li in this.PlacesListView.SelectedItems)
{
ComputerPlace p = (ComputerPlace)li.Tag;
//p.Coord += difference;
p.MapX += difference.Width;
p.MapY += difference.Height;
}
if (this.PlacesListView.SelectedItems.Count == 1)
{
//single move
placeEditor.SelectedObject = mouseDownComputerPlace;
changed();
}
else if (this.PlacesListView.SelectedItems.Count > 1)
{
editObjects();
}
MapPictureBox.Refresh();
}
// if drag start from blank area then paint new places
else if (e.Button == MouseButtons.Left && mouseDownComputerPlace == null)
{
//set multiselect range so we can draw the selectarea rectangle
multiSelectStart = mouseDownPoint;
multiSelectEnd = e.Location;
//selecting items
disableEvents = true;
this.PlacesListView.BeginUpdate();
foreach (ListViewItem li in this.PlacesListView.Items)
{
ComputerPlace p = (ComputerPlace)li.Tag;
if (p.MapX + (p.Width - 1) >= multiSelectStart.Value.X &&
p.MapX <= multiSelectEnd.Value.X &&
p.MapY >= multiSelectStart.Value.Y &&
p.MapY <= multiSelectEnd.Value.Y)
{
if (!li.Selected)
li.Selected = true;
}
else if (li.Selected)
{
li.Selected = false;
}
}
if (this.PlacesListView.SelectedItems.Count == 0)
{
placeEditor.SelectedObject = null;
}
this.PlacesListView.EndUpdate();
this.MapPictureBox.Refresh();
disableEvents = false;
}
}
}
private void editObjects()
{
List<ComputerPlace> selectedplaces = new List<ComputerPlace>();
foreach (ListViewItem lvi in this.PlacesListView.SelectedItems)
{
selectedplaces.Add((ComputerPlace)lvi.Tag);
}
placeEditor.SelectedObjects = selectedplaces.ToArray();
}
private void toolStripButton1_Click(object sender, EventArgs e)
{
save();
}
private void toolStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
}
private void toolStripRefreshButton_Click(object sender, EventArgs e)
{
PlacesListView.Items.Clear();
loadComputerPlaces();
MapPictureBox.Refresh();
}
private void usersToolStripPrintButton_Click(object sender, EventArgs e)
{
UsersFinderForm frm = new UsersFinderForm();
frm.ShowDialog(this);
}
private void toolStripButton1_Click_1(object sender, EventArgs e)
{
ApiSettings frm = new ApiSettings();
if (frm.ShowDialog(this) == System.Windows.Forms.DialogResult.OK)
{
try
{
User.LoadAll();
Map.LoadAll();
loadPlacemap();
}
catch (Exception ex)
{
MessageBox.Show("Cannot communicate with Moya\r\n" + ex.Message);
}
}
}
private void MapsComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
SelectedMap = (Map)MapsComboBox.SelectedItem;
loadComputerPlaces();
loadImage();
}
private void PlacesListView_DoubleClick(object sender, EventArgs e)
{
if (PlacesListView.SelectedItems.Count == 1)
{
UserInfoForm frm = new UserInfoForm();
frm.User = ((ComputerPlace)PlacesListView.SelectedItems[0].Tag).User;
frm.Show();
}
}
}
}
<?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="placesContextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>202, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="toolStripSaveButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIzSURBVDhPrZLrS9NRGMd//0LvexP0orc1NYZrsRr8yjWU
ZcOwIrr9wltpuswLKZamUcsLZCtcOmm1moSTiryAKWIii6VoZeaKpji8ohPB4Nt5zn55sqIX0QPPm8P5
fM55LtJ/iefPIqD0tS6hxbuIh+45NDWGcdcxhbrar7DfDOJaxThKSz6gsGAEeblDOH8uABWXJAK7OoHa
mlX8LVZW12BK6cLhlKc8VVySvE8WuKCqcl69+nsQHJ5bwW7LC2g0CqyHPELgfjDLBaUlk+r1jfED/hRa
QIzZh4JLEzhoaRYCZ8M0F1y0fVQRET/Db8fC2CZ7kZM9iqREpxDU3w5xQVbmkIpF41e4LxDCZoMbijII
s9khBDXVX7hAOTOoon+GOwc+Y1N8I44cfYWEhDohuF41gY52sFECx0++hvVYL+82NYxqpm/Ty1G4G8nW
l5BluxBcKRtDmw9sB4Bm1zc292VUlM/wplLDqOaM9MA6fCCpFUZjpRAUFY7C8wi471xjixOBKTV7Q1pO
2JCaVhyFExm83wODoUwIbHnDDAaqb0X4ywSxY8ToZPjfT2N4fAZK7lXsNbVwWLfHBb2+WAhoLR13sP5t
EhB8Nv8G3gVnEZxaxIXLdsQaXAxuQuyue9DF5wtBRvobVvcSh7caPdiyQ8bjth742vvQ0T2A3n4/9pmt
0OgbEMfg7dp6aLU5QpCZ5k8+faqHrydtGC0JzZlGRd2mhlHN9ColwTvjsoTg30OSvgNCVjq+glI0hgAA
AABJRU5ErkJggg==
</value>
</data>
<data name="toolStripRefreshButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAE+SURBVDhPY6Aa2HToxn90vG7flf8rd57/v2Tzyf+LN5/s
hirFDkAacIE5qw/8N/NKwW/I+v1XocoxwdqdJ//vOnoFbMiiTSd6oFpQwerdF6HKUUHBTOX/566d+V/f
v+S/lV862BCoFlSwfNsZqJb//x++PAfWCMPh1QL/1+089X/you24DVi86QRUO8TWY1dXgdlBZYL/bz+6
8P/l269gA0w9k7EbMG/dYbAGEAAZAAM/f/35/+7j9/8Pn3/Eb8CslfugWhDgz99//z99/Qk28NbDd/gN
mLZ0F1Tb//9vPt4Da/r+4/f/qw+PgNmXb7/GbwBIEgZAGpDxntN7/p+++px4A56+vf7fP0sAHHB3Hr//
f/Hmq/9Hzj8h3gDkgLt6983/k5ef/d976iFxBoBofBivASBJYjBUCzUAAwMAeL/WUt07dwcAAAAASUVO
RK5CYII=
</value>
</data>
<data name="usersToolStripPrintButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAALqSURBVDhPjZJ7SBNQGMWnhNoilMIiSiRSKpN8FGY6JaVJ
ZdN0W2abUZKvzbl0oVM3nfnKV875XLotH3M+WPnItzYVpTJIlJIiCiSjIgnFNFPbac79YyD4gw/uvec7
B+53L2ErrK2tj7u7uytcTrkMWVlZpeuOTDeUbcK4QKLl8G4j5JIHiGamuiIKDNL2aEqLYP0dlWOtJxcs
X1fsNDGrMkjbQxZLu7XaloZVdQJaE6m/iUSis0HajI0jyTIwThhnSyKf0W2NvViJYU5URmhaBC1gpYmH
5bpoNHLI8kN2dns2HP/hcyPMa/CnFt3f/qBs9N0sR9mtZVaqIWtIXNOI/JY0SZehEJzQClQqLVWsmjzH
Sco+7ObtobPu0AfYkEiW6ukFbfPnRdRP/0L1x3nkKIvRq7DFRMkBqEXmWBoiYF5jiaRqCWjyLgTX9CFQ
rJq1tHNw1IeUTszMSKd+oOTNdxROfEXu6y/IGpuG8EkHKhRsDEuPYE5phFGFE3wLakERq+AnacR+e2df
fYCwe7wj68UniEY+IHnoPeIHppCgq/j+t+D1TCK2axzRj1RIyQqHt6AQ51OLQeJlLug+i5k+gFlUlxnb
OQ522yuwWscQ/vg5QhqGcU2pQVDdAIJq+nG1uhfMml64RvJBir2HY5TgZr15He/oZHpIvQbXdQ00eSeo
VU9BrWxH4MM2BEhbECht1a/psk54cgQ4yxZgn50Dw2DXvUTQTStGbd/y+oCoVR0bxooW/cDoim5cKVPD
v6RZf28PdhIcgiNXzM3NLQx2AoFOp5tkl8u5XKnqZXBp0yKlUAnf/BpQihrAah5CVNMgGLJ2XLwvAymK
j6M+Af0G6yaMuVyuRUGBxCWjTCHkiGUjAblVC+RUCchppaA9qAZZVAy3iHgcPO1+x+DZEqPQ0NDd+flF
TumSynh2Xvkzf5F4zutuJjxjUrTeFOpJQ9+2MGIymbvy8sT2WSWVMUJxRQafz9+7IREI/wAdEn7PiZ1X
QgAAAABJRU5ErkJggg==
</value>
</data>
<data name="toolStripButton1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAMKSURBVDhPdVL/M9NxHPYH1A/V9Utdfqjr21JdnTB1JV+i
WI1CScemxtjyOanOsDEhl8/YPjZLt+VjlSncLG3VDxw3VzkOh10uzdUcTlzX0RcnnnyYcyXP3fuH9z3v
53k/r+f9dluGWv9yG0VbCBVtsSr05vEibf24XGW0SkgDkZan3+Y69n9QtJWtqrKYihvrQHXWQGWvgHIw
F9ebueCVkBBJ1SZ+egnbdfxvMDcz4swXChQOZMAy0YyOHw4k1WSh6P1N8OoCEJinxGVRvumcMHN1EiZ2
RpUO/DdHoBm6DeuEDe1Tvej/+QVPhk2IL5PDr6wfR/NzEBp3i3DJVsDMHKt4DMHLCOTaY/DgEwm9Uw6q
Ww+BwYir6klEFQ1hb8VZBEURVpdsBUxhSZQDEdoExLX5IfldIMS6GxA+tCBB3YP44mF4UQbsqDyF4+HJ
4y7ZCpi2U3WziJHKcJL2hf/zCFxUkkguGwZfMYLo/A/YqY+De7kvfDiJqw3klNEq0k5CWD6GKCIWgZpY
+NTGgF1J4VK+A9zsXgQIw+Bx+wQ8Q/irR5CQNJFKtuCaZgY8chCh6Yk4RHOx13AGu1VZCL7VAV9hMo5F
Xlww4K0ukfkkzDtfvWdHCvkKGZpq3CzR44pEge13veGdJARHQEKcU/FZrmkYySp95kwroGmBRM1xWSyk
KK7OvG9s/tU9MIzpH/MY+zqDhqYeiGQ6hCXKUF7djH85Ik83GnJFGrlokFfeYLY7xpGSSX3ccjh86mCI
YLbgfuOc3tSBMmPb76eve6GpsU1t9Txv9wgS9EmKH7fqam1gh6ealw2m5wCs33N6iOXPY1XUtnfOL+y/
fgccYzPo/PANLd1fsHEfh7wgvseSUg1DLV2jYPknTC8aLMxltnU5IJZpWyNFRX3Zyvq+Dayw2XW7grG8
9gfwR5a5Urqp9Y62Ee5e0UsJ0gqrIqWlNaOPzG/R2uXEC9tHZCvr4MslRkP5MsVa3Ob9Z5c6YBAlLuQE
x2XTbC7hZAXwnO7e0fSmA2GLTa/Nubn9ASKW9TtrNKeOAAAAAElFTkSuQmCC
</value>
</data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAYAMDAAAAEACACoDgAAZgAAACAgAAABAAgAqAgAAA4PAAAQEAAAAQAIAGgFAAC2FwAAMDAAAAEA
IACoJQAAHh0AACAgAAABACAAqBAAAMZCAAAQEAAAAQAgAGgEAABuUwAAKAAAADAAAABgAAAAAQAIAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADNZ2cA0WtrANRubgDWcHAA2XNzANt1dQDdd3cA4Hp6AOJ8
fADlf38A54GBAOmDgwDshoYA5oSDAO6IiADJc3MA8IqKAPKMjADriYgA9Y+PAPeRkQD5k5MA2YCAAMt4
eAD8lpYA/piYAM17ewD/mpoA/5ycAP+engDzlpYA/6CgAKlqagD/oqIA5pKSAI9cXAD/paUA0IeHAP+n
pwD/qakAmGVlAP+rqwD/rq4AxYaGAP+wsADnn58ArHd3AP+ysgD/tLQA6KSkAP+2tgD9tbQA+7SzAH5a
WgD/uLgAs4KCAKZ5eQD/u7sAq35+AP+9vQCYcXEA/7+/AP/BwQCziYkA/8TEAP/GxgDRoqIAgmVlANys
rACKbGwAt5CQAP/KygDEoKAA3ba2ALmamgBnVlYAdGNjAFxUVACwoaEAy7y8AFNNTQCemZkAqKSkAKGe
ngBqaWkA03FvANl5dwDlg4EA3H58AOmHhQDriYcA9JKQAPOSkADdj4wAtHVzAOucmQD0pqMA76WiAMCE
gwD2trQA56upAPy/vgD7wb8AzHFtANJ6dgDXfnoA24R/AOGHgwDiiYUAzH97APWalgDrlZAA86qmAPSt
qgD3sa4AuY2LAPW9ugDmtrQAzq2rAIt2dQB7a2oAloOCAM9+dwDlkIoA752XAOqjnQDzubUAvJWSALCQ
jQDajoYA7bu1AOSckwCojIgAxK6rAMiDeADMiX0A0o2CAN6ZjgDXlIkA3ZyQAOKroQDptKsA1pqNAN2l
mQC3j4cAwqKbAK+TjQDJq6UAya6pANKVhwDBmY8A0ZmKANSejwDbrJ8Ay6GVALmbkwDGp54Ay5eHAM+b
iwDRn48A1aSVALORhgDDn5QAvpuQAL+spgDGlIIAzZ6NANSqnADHppoAxKOYAMGhlgC+oJUAyaqfAMqs
ogDKrqQAyJyKAM2ikADPp5cAyaeZAMWjlgDJqJsArKCbAK+qqADFmYYAyZ+MANWyowDEpZcAza2fAM2w
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
P/gADwAA/gA//AAfAADwAH/+AD8AAPAAf/4AfwAA4AB//wA/AADgAH//AA8AAOAAf/8AAwAA4AB//4AD
AADgAH//gAMAAPAAf/+AAwAA/gA//4ADAAD/AD//gAMAAP4AH/+ABwAA/AAf/wA/AAD4AA//AD8AAPAA
B/4AHwAA+AAD/AAPAAD4AAH4AA8AAPwAAAAADwAA/AAAAAAPAAD+MAAAAA8AAP/wAAAAHwAA//AAAAA/
AAD/4AAAAH8AAP/gAAAD/wAA/+AAAAP/AAD/8AAAA/8AAP/4EAAD/wAA//wwAAf/AAD///AAH/8AAP//
8Af//wAA///4D///AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH9s
bQDRZmcA2W9wANdubwDTbG0A13BxANtzdADfdncA43l6AOV9fgDmfn8A6oKDAO6FhgD3i40A9oyNAPWN
jgC6bG0A/JOUAPuTlAD9nZ4A/6GiAP+lpgD/tbYA/7m6AP+6uwD/vb4A/8PEAP/FxgDVa2sA2HFxANVx
cADgd3cA2nR0AN54eADie3sA4Xt7AOWAfwDlf38A439+AOmDgwDlgIAA7oaGAOWCgQDjgIAA3Hx8AOyG
hgDphIQA8ImJANt+fQDwiooA7YqJAOeGhQDIdHMA9I6OAOuIiAD4kZEA/JSUAPuUlAD3kZEA9pOSAP2Y
lwD+mJgA6oyMAP+bmwD/np4A/6GhALh0dAD/paUArG9vAP+npwCfaGgA/6ioAP+srAD+q6sA+qqpAP+u
rgCvd3cA/6+vANuWlgDChoYA/rCwAO2kpAD/srIA76moAIVdXQD/tLQA9q2tAP+1tQD/trYAoXNzAI9n
ZwD/ubkA1pubAK9/fwD/vLwApXp6AOWrqwDVn58A/8DAAP2+vgCGZWUAfl9fAP/DwwCogIAAtYuLAP3E
xAD/x8cAjG1tAHRbWwD/ysoA/83NAJN3dwB5ZGQAiHFxAN25uQCrkJAAdGVlAF5SUgCjkpIAqJmZAGxn
ZwBeWloAioWFAIOAgABnZmYAZmVlAFZVVQClpKQAzmxqANJvbQDYdXMA2Hh2AOWGgwDskY4A+52aAPaa
lwDqlZIA4JWSAPynpQDRjYsA252cAPazsQD4t7UAyJWUAP2+vQD+wL8A3KqpAPnFwwDgtLMArI2MANF5
dADbhH8A44uGAPOWkgDyqqYA+K+sAPmzsADVgXsA3IuFAOqinADuqaMA7rizAPK9uQCIbmwAinx7AG9k
YwDgk4sA6JuTAPCzrQCNengA042DAMqGfQDRk4oAt5uXAJqTkgDSkIUAy4yCAOWtpADIpJ4A5rasAJR/
ewDFrKcAuqypAN+rngC4kokAxqmiANihkgCXhH8AyZSEANSgkADMmooA1qOUAMKnnwCpmZQAyZiHANGf
jgDRoZEAz6KSAMegkgDUq5wA0LSqAKeUjQC+mowAzaueALOWiwDGp5oAyKyhAMqvpACjjYQAyqCNAM6l
kgDOqZgAwJ6PAMirngC+pJkAzaeUANCrmADLp5UAwqKSAMamlgCfhnkAs5iLAMClmADEqp0AZGJhAM6p
lQDEpJIAyq6eAM6tmQDLrZoAyauZAMeqmQDKrZwAwaaWAMOrnQDJqpYAy6+dAMGmkgDHrJgAwaqZAJKR
jwCbm5sAmJiYAJSUlACTk5MAjIyMAIaGhgCEhIQAfX19AGpqagBlZWUAYGBgAFxcXABYWFgAAAAAAAAA
AAAAAAAAAAAAAAAA8/P49vMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPN8+fPKrnS8efMAAAAAAAAAAAAA
AAAAAAAAAAAAAPO8s5WmzdSUbm619fPzAAAAAAAAAAAAAAAAAAAAAAAA3KNra5PcyGprb3B5vJZ1+gAA
AAAAAAAAAAAAAAAAANflohxnG7S0G2drkN20G6JyfQAAAAAAAAAAAAAAAAB7qu64Z2NjY2NjY2OSopFj
Y2SlAAAAAAAAAAAAAAAA3pNp3MgZX19fX19fX18aGl9fYa8AAAAAAAAAAAAAAOOyGBmPjlxcXFwYGBkY
XFxcXFxp9gAAAAAAAAAAAAC62Z1ZWFlZWFhZVo6pqZ1ZF1hYWGh6pXB+AAAAAAAAAM/Zm1ZTU1NTU1dz
AADJ1LicU1NTV41UUXH4AAAAAAAAAM7Ym05MTExStwAAAAAA0NihTkxMTE5MkH0AAAAAAAAAAODTS0lJ
SpYAAAAAAAAA5NibSUlJSUlLeAAAAAAAAK8BubiLSEhPgAAAAAAAAAAA6MBGSEhISGIAAAAAAAAAxUYW
FkRERGAAAAAAAAAAAADQ7KAWRERegAAAAAAAANvAQkJCQkJCcQAAAAAAAAAAAADmuxVCQmb79QAAAAAA
1btBQUFBQUF1AAAAAAAAAAAAANbTFEFBiU1lfQAAAADOxYdAQEBAQG0AAAAAAAAAAAAAuuKIQEBAQED+
AAAAAAAAzMCoPT4+W/YAAAAAAAAAAAC22Zo+Pj4+Pv0AAAAAAAAA19OaOTpD+wAAAAAAAAAAAMHiPDo6
OhIT+AAAAAAAALfLiTs7Oz929AAAAAAAAAAA3744OziGiqAAAAAAAAAAx4YPNjY2NkX99AAAAAAAAADv
pxA2DqTxAAAAAAAAAOjEMDIyMjIyN1X89AAAAAAArsUzMjIwR3/yAAAAAAAAuuyZDSoNKi4uL1V/9wAA
AMLGmSouLi4qR/wAAAAAAAAA560MNKefDCgoKBFtf+G1rYUMKCgoKCgrbAAAAAAAAADk5OTk8L8nJiYm
KSwtMSsLCyYmJgoLJTF3AAAAAAAAAAAAAOTqsAkkJCQkJCQjIyQkJAmfXZgjUAAAAAAAAAAAAAAA5Nqe
CCIiCAgiIiIiCCIiIEPRXV0AAAAAAAAAAAAAAADP0oMHISGrniEhISGEISEhEXoAAAAAAAAAAAAAAAAA
AOTmsR8DQ+29BgYEntKXAwYepAAAAAAAAAAAAAAAAAAAAOTkv4wA68OCBR018L0FBTVdAAAAAAAAAAAA
AAAAAAAAAAAAAADg0oECAlq35qxdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOTpsbGtAAAAAAAAAAAAAAAA
AAD//B///8AP//8AA///AAD//gAAf/wAAH/4AAB/8AAAf+AAAA/gAwAH8AfAB/gP4AfgD/AP4B/wD8Af
+AfAH/gDwB/4A/AP+AP4D/gD8Af4B/AD+A/gAfAH4ADgB/AAAAfwAAAH/gAAD/4AAB/+AAB//gAAf/8I
AH//+AH///g//ygAAAAQAAAAIAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzJmZAMSU
lADFlpYAw5SUAMycnAC7j48Auo6OALKIiADOnp4Av5OTALeNjQCziooAsomJALqQkADNoKAAu5KSAKuF
hQDQo6MAo4CAALWPjwCae3sAkXR0ANasrACYenoAk3Z2AI9zcwCnh4cAiG5uANOsrADOqKgAiG9vANCq
qgCJcHAAtZWVAMWlpQCzlpYAknt7AKeNjQCxmJgAppCQALegoACkkZEAuKSkAJyMjACYiIgAZ2FhAFJO
TgBjX18AYl5eAJ+fnwCYmJgAkZGRAImJiQCDg4MAgoKCAICAgAB5eXkAc3NzAG5ubgBtbW0AZ2dnAGVl
ZQBkZGQAX19fAF5eXgBWVlYAU1NTAE9PTwBNTU0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
ADVDNAAAAAAAAAAAAAAtQCIBGT0sQTgAAAAAAAAPAR8MAQ0WAQY7AAAAAAA5EAEBAQEBAQEIRDw5AAAF
Cw0BAQEgAQEBAwgEMAAAAQEBASkAAAAAAQEBASoAACQBASUAAAAAAAABASE+Nx4OAQQ6AAAAAAAACQEN
E0MBAQERPwAAAAAAAB4BAQEzHh4BAkUyAAAAAAABAREmAAAjAQEcQjMAAAAnAQEVMQAAAQEBARovQi4Y
AQEBASgAABceDwEBAQEBAQEHGwEAAAAAABIBAQEBAQEBCjYAAAAAAAAXAR4dARQrAQEAAAAAAAAAAAAA
FwEBAAAAAAAAAP4/ALrwB1lY4AdYWMABjqmAAVkXg8FYaIfgcH4H4AAAB+AAzwPhVlOBwVNTgAEAAIAD
uJzgB1NX4A9Rcfx/AAAoAAAAMAAAAGAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
AAkAAAAPAAAAFQAAABAAAAADAAAAKgAAAGAAAACLAAAArAAAAKEAAACUAAAAfwAAAF0AAAAYAAAAAQAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAMAAAAQAAAAJwAAAEwAAABxAAAAiwAAAG5ZRkJDhHFlr5Z8bOTnubT72a6u882kpO6xjo7lhWpq1hkU
FKYAAAA9AAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAADQAAADEdGRd3ZFRLxKODfeHjtLL2v5eX6gAAAKebeXLMzq+d/8Ogi///ysr//8rK///K
yv//ysr//8rK/1JBQcYAAABbAAAADAAAAAkAAAAPAAAAEwAAABMAAAAEAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAKOS0qaZF3bNjTq57/87+7///Hx///x8f//8fH/2JMTNGlhn3uza2b/8mk
kf//x8f//8fH///Hx///x8f//8fH/5Z1ddoAAABrAAAAHwAAAEsAAABwAAAAiAAAAH0AAAA9AAAADQAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACjfnd7xKWU98Ofiv//xsb//8bG///Gxv//xsb//8bG/+ay
svfFn5X/y6uX/9Cnl///xsb//8bG///Gxv//xsb//8bG/6N+fuAAAACLemdfoJJ6bNy6lInx2qio8j0v
L8gAAACdAAAAVAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0jIXRz7Ce/8Sijf/vubT//8TE///E
xP//xMT//8TE///ExP/rvbb/yaiU/9ytof//xMT//8TE///ExP//xMT//8TE/82enu5XREDMy6yb/86n
lv/7wb///8TE///ExP9yV1fXAAAApwAAAGsAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAADQAAABKSZ2V80rWk/8em
kv/brKD//8HB///Bwf//wcH//8HB///Bwf//wcH//L++///Bwf//wcH//8HB///Bwf//wcH//8HB/+au
rvfMppr/yaWS//O5tf//wcH//8HB///Bwf//wcH/sIWF5wAAAKMAAAAwAAAABgAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAABDAAAAZwAA
AH8kGBiIyamb/8url//Joo///7+///+/v///v7///7+///+/v///v7///7+///+/v///v7///7+///+/
v///v7///7+///+/v///v7//97q4//+/v///v7///7+///+/v///v7///7+//1xFRbIAAAAcAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACXNc
VoOIc2bUrYh87M6Zme1QOzvLoH938M6vnf/DoYz/87ay//+9vf//vb3//729//+9vf//vb3//729//+9
vf//vb3//729//+9vf//vb3//729//+9vf//vb3//729//+9vf//vb3//729//+9vf//vb3/9LW1+gAA
AHEAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAABfFlXa82unv/Io5D/97a0//+7u///u7v/56up/9Wyo//Io4//97a0//+7u///u7v//7u7//+7
u///u7v//7u7//+7u///u7v//7u7//+7u///u7v//7u7//+7u///u7v//7u7//+7u///u7v//7u7//+7
u///u7v/tISE4QAAAEUAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABYOjocuZiM68mplf/gqp///7i4//+4uP//uLj//7i4//+4uP/3tLL//7i4//+4
uP//uLj//7i4//+4uP//uLj//7i4//+4uP//uLj//7i4//+4uP//uLj//7i4//+4uP//uLj//7i4//+4
uP//uLj//7i4//+4uP//uLj/aUxMwwAAAC0AAAADAAAACQAAAA8AAAAVAAAABwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGWbmqPz7Gg/8eijv/7tLP//7a2//+2tv//trb//7a2//+2
tv//trb//7a2//+2tv//trb//7a2//+2tv//trb//7a2//+2tv//trb//7a2//+2tv//trb//7a2//+2
tv//trb//7a2//+2tv//trb//7a2//+2tv//trb/AAAAtQAAAGgAAAA6AAAATgAAAHEAAACCAAAASAAA
AAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIFWVhO+m5DxyqmW/9immP//tLT//7S0//+0
tP//tLT//7S0//+0tP//tLT//7S0//+0tP//tLT//7S0//+0tP//tLT//bW0/++1r//jsqf/1qqb/9uq
nf/kq6L/97Gu//+0tP//tLT//7S0//+0tP//tLT//7S0//+0tP//tLT/oXJy4yMeG75rUUzKsH584eej
o/ZjRUXPAAAAiwAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJlmZiDMrZ7wzK2a/8ei
jv/zrqr//7Ky//+ysv//srL//7Ky//+ysv//srL//7Ky//+ysv//srL//7Ky//+ysv/Mj4+ghF1dHwAA
AAGZZmYwuZSLcsGekuDLrJv/yKeT/9KklP/zrqr//7Ky//+ysv//srL//7Ky//+ysv//srL//7Ky//ew
rf//srL//7Ky//+ysv/moaH3AAAArQAAAFEAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AACkdXJgyaib/8urmP/HoY3/86yo//+wsP//sLD//7Cw//+wsP//sLD//7Cw//+wsP//sLD/9amp+XpU
VGQAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAACug31gw6CU8M2um//Fo47/36ab//+wsP//sLD//7Cw//+w
sP//sLD//7Cw//+wsP//sLD//7Cw//+wsP//sLD/c09P1QAAAIwAAAAbAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAApHVyYMinmf/Lq5j/xqCM//Oqpv//rq7//66u//+urv//rq7//66u//+u
rv//rq7/YEJCfwAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmWZmELiSidDPsZ//xqWQ/9ej
lf//rq7//66u//+urv//rq7//66u//+urv//rq7//66u//+urv//rq7/5pyc9wAAAKcAAAA0AAAABgAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAB5hsaWfPsaH/yqqW/8Weiv//q6v//6ur//+r
q///q6v//6ur//+rq/+gbGzMAAAAKAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJlm
ZhC4konQz7Gf/8Wjj//fpJn//6ur//+rq///q6v//6ur//+rq///q6v//6ur//+rq///q6v//6ur/2JC
QqcAAAAtAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMAAAArAAAARQAAAFu0kojty6uY/9Cg
kP//qan//6mp//+pqf//qan//6mp//SiovokGBhxAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAACZZmYgxKKW8M2um//DoYv/76Wg//+pqf//qan//6mp//+pqf//qan//6mp//+p
qf//qan/7p6e75BfX1UAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDEpJYNQQjnAmGRk15Zi
Ytnoo5//8qei//emo///p6f//6en//+np///p6f//6en/6dtbdsAAAA3AAAABAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApHVyYM+xov/JqZX/zJ+N//+np///p6f//6en//+n
p///p6f//6en//+np//nl5flTTIyNQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvZyRt82t
m//Cnon//6Wl//+lpf//paX//6Wl//+lpf//paX//6Wl//+lpf//paX//6Wl/0QsLLQAAAAcAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALKJguDPsJ7/xKKN/+ui
m///paX//6Wl//+lpf//paX//6Wl/7R0dOEsHBxdAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAt4+H/8ysmf/Jn4z//6Ki//+iov//oqL//6Ki//+iov//oqL//6Ki//+iov//oqL//6Ki/wAA
AI8AAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKR1
cmDPsaH/yaiU/9Sej///oqL//6Ki//+iov//oqL//6Ki/2RAQMwAAABtAAAAIgAAAA0AAAAEAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAt4+H/8urmP/Rn4///6Cg//+goP//oKD//6Cg//+goP//oKD//6Cg//+g
oP//oKD/2omJ8gAAAIUAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAADAnZLwzK2a/8Kfif//oKD//6Cg//+goP//oKD//6Cg/6FlZeMAAACyAAAAkQAA
AGcAAAA3AAAAGwAAAAAAAAAAAAAAAAAAAAAAAAAAt4+H/8urmP/Rn4///56e//+env//np7//56e//+e
nv//np7//56e//+env//np7/zoCA7QAAAIgAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACxioOzz7Gf/8Sijf/vnZf//56e//+env//np7//56e//+e
nv/mj4/3oWRk4j8nJ8MAAACqAAAAiQAAABYAAAAAAAAAAAAAAAAAAAAAt4+H/8ysmf/Bnoj//5yc//+c
nP//nJz//5yc//+cnP//nJz//5yc//+cnP//nJz/zH197wAAAJsAAAAYAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACleXWD0bSi/8alkP/jm5L//5yc//+c
nP//nJz//5yc//+cnP//nJz//5yc//+cnP/zlZX7AAAApgAAABgAAAAAAAAAAAAAAAAAAAAAuZOK782u
nP/Eoo3/5JyT//Oalv//mpr//5qa//+amv//mpr//5qa//+amv//mpr/85KS+wAAAKcAAAAlAAAAAQAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSYWFU07al/8em
kv/fmo///5qa//+amv//mpr//5qa//+amv//mpr//5qa//+amv//mpr/AAAApwAAABgAAAAAAAAAAAAA
AAAAAAAAmWZmILCIgXLFpJiyyaiY/8qql//NopD/3ZyQ//eZlv/+mJj//piY//6YmP/+mJj//piY/xcO
DrQAAABGAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AACQYGBE07em/8imkv/fmo///piY//6YmP/+mJj//piY//6YmP/+mJj//piY//6YmP/+mJj/AAAApwAA
ABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmWZmEKh7d4DIp5n/yqmV/8+bi//8lpb//JaW//yW
lv/8lpb//JaW/2I6Os0AAABzAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmWZmMMmqnIKxlINJAAAABgAAAAAAAAAAr4yEmdCy
oP/Foo3/3YR//+V/f//lf3//5X9//+V/f//lf3//5X9//+V/f//lf3//5X9//+V/f//lf3//5X9//+V/
f//lf3//5X9//+V/f//lf3//5X9//+V/f//lf3//5X9//+V/f//lf3//5X9//+V/f//lf3//23p6+iIT
E2oAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAADsY2E2M2tm//Fmof/4nx8/+J8fP/ifHz/4nx8/+J8fP/ifHz/4nx8/+J8fP/ifHz/4nx8/+J8
fP/ifHz/4nx8/+J8fP/ifHz/4nx8/+J8fP/ifHz/4nx8/+J8fP/ifHz/2Y2G/8uXh//ZhH7/4nx8/+J8
fP/ifHz/lFFRxAAAACcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAB3UFApyaia/8molP/OjYH/4Hp6/+B6ev/genr/4Hp6/+B6ev/genr/4Hp6/+B6
ev/genr/4Hp6/+B6ev/genr/4Hp6/+B6ev/genr/4Hp6/+B6ev/genr/4Hp6/+B6ev/genr/wJeN+s6v
nf/GpZD/zZGD/9x+e//VdHTqPSEhOgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcdG970bOh/8Wjjv/Xfnr/3Xd3/913d//dd3f/3Xd3/913
d//dd3f/3Xd3/913d//dd3f/3Xd3/913d//dd3f/3Xd3/913d//dd3f/3Xd3/913d//dd3f/3Xd3/913
d//dd3f/ZTY202tPTLTEopbjw6WTtreWgoipW1sqAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC1kIfUza2b/8WZhv/bdXX/23V1/9t1
df/bdXX/23V1/9t1df/Yenj/zol+/9l3dv/bdXX/23V1/9t1df/bdXX/23V1/9t1df/bdXX/23V1/9t1
df/bdXX/23V1/9t1df/bdXX/olZW6wAAAKEAAAAlAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCn5T/zKyZ/8Sd
if/Uenb/2XNz/9lzc//Zc3P/2XNz/9lzc//TqJr/yKeT/8uKfv/Zc3P/2XNz/9lzc//Zc3P/2XNz/9lz
c//RjYP/zId9/9lzc//Zc3P/2XNz/9lzc//Zc3P/2XNz/xQKCrQAAABCAAAABwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AACkdXJgyaib/8ysmf/Fnor/z353/9ZwcP/WcHD/1nBw/5FSUr/Fo5b/yqmW/8aSgf/WcHD/1nBw/9Zw
cP/WcHD/1nBw/9Z9ev/Nrpv/w6GL/9B6df/WcHD/1nBw/9ZwcP/WcHD/1nBw/1ovL74AAABJAAAACgAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAroN+MMKglODOr53/xaOP/8mIfP/TcW//sVxcvgAAAB/Cn5T/y6yZ/8SY
hf/Ubm7/1G5u/9Rubv/Ubm7/1G5u/8lxcP/QsqL/yqmW/8WVg//Ubm7/1G5u/9Rubv/Ubm7/1G5u/5lP
T5sAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJlmZhC1jIWvxqaX4b+fi6e4hXd4hkREGQAA
AAG7lYzhza6b/8Kfif/Ra2v/0Wtr/9Fra//Ra2v/0Wtr/3s/P9mhe3bV0LKh/8alkP/Ig3j/0Wtr/9Fr
a//MaGj1nVBQawAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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
KoMAAAATAAAABQAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAelVUP8Skkv7lraT//7m6//+6
u//4t7X/9bWx//+5uf//ubn//7m5//+5uf//ubr//7m6//+6u///ubr//7m5//+5uf//ubn//7m5//+5
uf+vf3/hAAAAcgAAACwAAAA2AAAAPQAAABAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAGwjIK+0auZ//my
r///trf//7W1//+2tv//trb//7W1//+1tf//trb//rS0//axsP/wtK7/8LGr//izsP//trf//7W2//+1
tf//tbX//7W1/5xvb+EUEA+wUTs5rmxLS8EIBgaeAAAAQwAAAAcAAAAAAAAAAAAAAAAAAAAAl2NkBsCd
kNnPq5j/8a2n//+ztP//srL//7Ky//+ysv//srL//7Ky//esrPrGioqYxZGOTLePh2XBnZDDzqiY/96r
nv/4r6z//7Kz//+ysv//srL/9aqq+9mZmPTvqKf7/rCw/1U7O8sAAAB7AAAAFgAAAAAAAAAAAAAAAAAA
AACVX2EBoXNwRcGgkuvNqJX/8aql//+vr///rq7//66u//+urv/soaH3bUtLcwAAAA4AAAAAAAAAAAAA
AACsg3xYxKaW5M2mlP/uqaP//6+w//+urv//rq7//66v//+vr///rq7/x4iI7QAAAJkAAAApAAAABAAA
AAAAAAAAAAAAAAAAAAEAAAAXbVFPXL+llO3PpZP/+aqo//+srP//rKz//qur/4teXrYAAAAcAAAAAAAA
AAAAAAAAAAAAAAAAAAC5lIs8xaaW6M2nlP/0qKX//6yt//+srP//rKz//6ys//+srP/6qan8Vzo6hAAA
ABYAAAABAAAAAAAAAAAAAAAATEE7GEExLYZJLzC0tI2D8+KonP/8p6X//6io//+oqP/Zj4/vAAAAXgAA
AAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwhX9hx6qY/tWjlP/+p6f//6io//+oqP//qKj//6io/8mE
hMZAKiokAAAAAQAAAAAAAAAAAAAAAAAAAAC9oJCzz56P+P+np///pqb//6Wm//+lpf//paX//6Wl/5Nf
X9QAAAA9AAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJZiYwK5k4rAyKqV/+uimv//pab//6Wl//+l
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
</value>
</data>
</root>
\ No newline at end of file
using MoyaAdminUI.MoyaAPI;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Script.Serialization;
namespace MoyaAdminUI
{
public class Map
{
private PlaceMap APIreference;
public PlaceMap APIReference
{
get { return APIreference; }
}
public int Id
{
get { return APIreference.id; }
}
public string Name
{
get {return APIreference.name;}
}
public static List<Map> Cache = new List<Map>();
public Map(PlaceMap map)
{
APIreference = map;
}
public override string ToString()
{
return Name;
}
public static void LoadAll()
{
Map.Cache.Clear();
RestClient client = new RestClient(Properties.Settings.Default.ApiURL);
string json = client.MakeRequest("placeadmin/maps");
var ser = new JavaScriptSerializer();
Maps maps = ser.Deserialize<Maps>(json);
foreach (PlaceMap map in maps.maps)
{
Map.Cache.Add(new Map(map));
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Script.Serialization;
namespace MoyaAdminUI.MoyaAPI
{
public class Card
{
//{"cardId":3990,"state":"PENDING_VALIDATION","cardTemplate":"pelaaja","username":"Miketzu","wholeName":"Mirco Renko"}
public int cardId;
public string state;
public string cardTemplate;
public string username;
public string wholeName;
public static Card GetByEventUserId(int id)
{
RestClient client = new RestClient(Properties.Settings.Default.ApiURL);
string json = client.MakeRequest("user/card/" + id);
var ser = new JavaScriptSerializer();
return ser.Deserialize<Card>(json);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MoyaAdminUI.MoyaAPI
{
public class EventUsers
{
public List<Eventuser> eventusers = new List<Eventuser>();
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MoyaAdminUI.MoyaAPI
{
public class Maps
{
public List<PlaceMap> maps = new List<PlaceMap>();
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Script.Serialization;
namespace MoyaAdminUI.MoyaAPI
{
public class Place
{
public int id = 0;
public bool buyable;
//public string code;
public string details;
public bool disabled;
public int height;
public int width;
public int mapX;
public int mapY;
public string name;
public bool taken;
/// <summary>
/// Buyer eventuserid
/// </summary>
public int reserverId;
/// <summary>
/// Place is binded to this user
/// </summary>
public int eventuserId; //bind
public int mapId;
public int productId;
public void Save()
{
RestClient client;
JavaScriptSerializer ser = new JavaScriptSerializer();
if (id > 0)
{
// update
client = new RestClient(Properties.Settings.Default.ApiURL, HttpVerb.PUT);
client.PostData = ser.Serialize(this);
client.MakeRequest("placeadmin/place/"+id);
}
else
{
//create
client = new RestClient(Properties.Settings.Default.ApiURL, HttpVerb.POST);
client.PostData = ser.Serialize(this);
client.MakeRequest("placeadmin/place/");
}
}
internal void Release()
{
ComputerPlace.Cache.Clear();
RestClient client = new RestClient(Properties.Settings.Default.ApiURL, HttpVerb.PUT);
string json = client.MakeRequest("placeadmin/place/"+ id+"/release");
}
internal void Reserve(int userid)
{
ComputerPlace.Cache.Clear();
RestClient client = new RestClient(Properties.Settings.Default.ApiURL, HttpVerb.PUT);
string json = client.MakeRequest("placeadmin/place/" + id + "/reserve/" + userid);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MoyaAdminUI.MoyaAPI
{
public class PlaceMap
{
public int id;
public string name;
public List<Place> places = new List<Place>();
}
}
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace MoyaAdminUI.MoyaAPI
{
public enum HttpVerb
{
GET,
POST,
PUT,
DELETE
}
public class RestClient
{
public string EndPoint { get; set; }
public HttpVerb Method { get; set; }
public string ContentType { get; set; }
public string PostData { get; set; }
public RestClient()
{
EndPoint = "";
Method = HttpVerb.GET;
ContentType = "application/json";
PostData = "";
}
public RestClient(string endpoint)
{
EndPoint = endpoint;
Method = HttpVerb.GET;
ContentType = "application/json";
PostData = "";
}
public RestClient(string endpoint, HttpVerb method)
{
EndPoint = endpoint;
Method = method;
ContentType = "application/json";
PostData = "";
}
public RestClient(string endpoint, HttpVerb method, string postData)
{
EndPoint = endpoint;
Method = method;
ContentType = "application/json";
PostData = postData;
}
public static string CalculateSHA1(string text)
{
// Convert the input string to a byte array
byte[] buffer = Encoding.GetEncoding("iso-8859-1").GetBytes(text);
// In doing your test, you won't want to re-initialize like this every time you test a
// string.
SHA1CryptoServiceProvider cryptoTransformSHA1 =
new SHA1CryptoServiceProvider();
// The replace won't be necessary for your tests so long as you are consistent in what
// you compare.
string hash = BitConverter.ToString(cryptoTransformSHA1.ComputeHash(buffer)).Replace("-", "").ToLower();
return hash;
}
private static int ConvertToTimestamp(DateTime value)
{
//create Timespan by subtracting the value provided from
//the Unix Epoch
TimeSpan span = (value - new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime());
//return the total seconds (which is a UNIX timestamp)
return (int)span.TotalSeconds;
}
public static string GetRequestURL(string server, string parameters)
{
int timestamp = ConvertToTimestamp(DateTime.Now);
string hash = CalculateSHA1("/" + parameters + "+" + Properties.Settings.Default.ApiApplicationKey + "+" + Properties.Settings.Default.ApiUser + "+" + timestamp + "+" + Properties.Settings.Default.ApiPass);
string url = server + "/rest/" + parameters + "?appkey=" + Properties.Settings.Default.ApiApplicationKey + "&appuser=" + Properties.Settings.Default.ApiUser + "&appstamp=" + timestamp + "&appmac=" + hash;
return url;
}
public string MakeRequest(string parameters)
{
///placeadmin/places/30+abcdefg+testuser-asdf+1393735570144+acdcabbacd
///
var request = (HttpWebRequest)WebRequest.Create(GetRequestURL(EndPoint,parameters));
request.Method = Method.ToString();
request.ContentLength = 0;
request.ContentType = ContentType;
if (!string.IsNullOrEmpty(PostData) && (Method == HttpVerb.POST || Method == HttpVerb.PUT))
{
var encoding = new UTF8Encoding();
var bytes = Encoding.GetEncoding("iso-8859-1").GetBytes(PostData);
request.ContentLength = bytes.Length;
using (var writeStream = request.GetRequestStream())
{
writeStream.Write(bytes, 0, bytes.Length);
}
}
using (var response = (HttpWebResponse)request.GetResponse())
{
var responseValue = string.Empty;
if (response.StatusCode != HttpStatusCode.OK)
{
var message = String.Format("Request failed. Received HTTP {0}", response.StatusCode);
throw new ApplicationException(message);
}
// grab the response
using (var responseStream = response.GetResponseStream())
{
if (responseStream != null)
using (var reader = new StreamReader(responseStream))
{
responseValue = reader.ReadToEnd();
}
}
return responseValue;
}
}
} // class
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MoyaAdminUI.MoyaAPI
{
//"eventuserId":7019,"firstname":"Topi","lastname":"Kinnunen","login":"xxtopotxx","userId":4902,"nick":"xXtopotXx"},
public class Eventuser
{
public int eventuserId;
public string firstname;
public string lastname;
public string login;
public int userId;
public string nick;
}
}
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{56D4C2A6-B4A2-4E40-ACFB-19E188AAD703}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>MoyaAdminUI</RootNamespace>
<AssemblyName>MoyaAdminUI</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="AutoUpdateLib">
<HintPath>..\res\AutoUpdateLib.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Web" />
<Reference Include="System.Web.Extensions" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="ApiSettings.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ApiSettings.Designer.cs">
<DependentUpon>ApiSettings.cs</DependentUpon>
</Compile>
<Compile Include="ComputerPlaceGridSettings.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ComputerPlaceGridSettings.designer.cs">
<DependentUpon>ComputerPlaceGridSettings.cs</DependentUpon>
</Compile>
<Compile Include="MainForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="MainForm.Designer.cs">
<DependentUpon>MainForm.cs</DependentUpon>
</Compile>
<Compile Include="Map.cs" />
<Compile Include="MoyaAPI\Card.cs" />
<Compile Include="MoyaAPI\eventuser.cs" />
<Compile Include="MoyaAPI\EventUsers.cs" />
<Compile Include="MoyaAPI\Maps.cs" />
<Compile Include="MoyaAPI\Place.cs" />
<Compile Include="ComputerPlace.cs" />
<Compile Include="MoyaAPI\PlaceMap.cs" />
<Compile Include="MoyaAPI\RestClient.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="User.cs" />
<Compile Include="UserInfoForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="UserInfoForm.Designer.cs">
<DependentUpon>UserInfoForm.cs</DependentUpon>
</Compile>
<Compile Include="UsersFinderForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="UsersFinderForm.Designer.cs">
<DependentUpon>UsersFinderForm.cs</DependentUpon>
</Compile>
<EmbeddedResource Include="ApiSettings.resx">
<DependentUpon>ApiSettings.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ComputerPlaceGridSettings.resx">
<DependentUpon>ComputerPlaceGridSettings.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="MainForm.resx">
<DependentUpon>MainForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<EmbeddedResource Include="UserInfoForm.resx">
<DependentUpon>UserInfoForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UsersFinderForm.resx">
<DependentUpon>UsersFinderForm.cs</DependentUpon>
</EmbeddedResource>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>$(SolutionDir)/../../\AutoUpdate\src\AutoPublish\bin\Debug\AutoPublish.exe $(ConfigurationName) $(ProjectName) $(SolutionDir) $(TargetPath)</PostBuildEvent>
</PropertyGroup>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MoyaAdminUI
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
if (!Debugger.IsAttached)
{
if (args.Length == 0 || args[0] != "-noautoupdate")
{
/*
if (AutoUpdateLib.AutoUpdateCore.CheckForUpdates(null))
return; //program is required to close by autoupdate (probably updated)
* */
}
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
}
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("MoyaAdminUI")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("MoyaAdminUI")]
[assembly: AssemblyCopyright("Copyright © 2014")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("66683832-f692-451d-8ca8-ed0ce323f582")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.6")]
[assembly: AssemblyFileVersion("1.0.6")]
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18408
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace MoyaAdminUI.Properties
{
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources
{
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources()
{
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MoyaAdminUI.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
}
}
<?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.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: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" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</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" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
\ No newline at end of file
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18408
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace MoyaAdminUI.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("http://10.220.105.194:8080/MoyaWeb")]
public string ApiURL {
get {
return ((string)(this["ApiURL"]));
}
set {
this["ApiURL"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string ApiApplicationKey {
get {
return ((string)(this["ApiApplicationKey"]));
}
set {
this["ApiApplicationKey"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string ApiUser {
get {
return ((string)(this["ApiUser"]));
}
set {
this["ApiUser"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string ApiPass {
get {
return ((string)(this["ApiPass"]));
}
set {
this["ApiPass"] = value;
}
}
}
}
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="MoyaAdminUI.Properties" GeneratedClassName="Settings">
<Profiles />
<Settings>
<Setting Name="ApiURL" Type="System.String" Scope="User">
<Value Profile="(Default)">http://10.220.105.194:8080/MoyaWeb</Value>
</Setting>
<Setting Name="ApiApplicationKey" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="ApiUser" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="ApiPass" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
</Settings>
</SettingsFile>
\ No newline at end of file
using MoyaAdminUI.MoyaAPI;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Script.Serialization;
namespace MoyaAdminUI
{
public class User
{
public User(Eventuser user)
{
APIreference = user;
}
private Eventuser APIreference;
public Eventuser APIReference
{
get { return APIreference; }
}
/// <summary>
/// Event user id
/// </summary>
public int EventUserId
{
get { return APIreference.eventuserId; }
}
/*
public int UserId
{
get { return APIreference.userId; }
}*/
public string Nick
{
get { return APIreference.nick; }
}
public string Lastname
{
get { return APIreference.lastname; }
}
public string Firstname
{
get { return APIreference.firstname; }
}
public string Login
{
get { return APIreference.login; }
}
public override string ToString()
{
return this.Firstname + " "+ Lastname;
}
public static List<User> Cache = new List<User>();
public static void LoadAll()
{
User.Cache.Clear();
RestClient client = new RestClient(Properties.Settings.Default.ApiURL);
string json = client.MakeRequest("user/eventusers");
var ser = new JavaScriptSerializer();
EventUsers users = ser.Deserialize<EventUsers>(json);
foreach (Eventuser u in users.eventusers)
{
User.Cache.Add(new User(u));
}
}
}
}
namespace MoyaAdminUI
{
partial class UserInfoForm
{
/// <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()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(UserInfoForm));
this.propertyGrid1 = new System.Windows.Forms.PropertyGrid();
this.cardPictureBox = new System.Windows.Forms.PictureBox();
((System.ComponentModel.ISupportInitialize)(this.cardPictureBox)).BeginInit();
this.SuspendLayout();
//
// propertyGrid1
//
this.propertyGrid1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.propertyGrid1.Location = new System.Drawing.Point(207, 12);
this.propertyGrid1.Name = "propertyGrid1";
this.propertyGrid1.Size = new System.Drawing.Size(247, 297);
this.propertyGrid1.TabIndex = 0;
//
// cardPictureBox
//
this.cardPictureBox.Location = new System.Drawing.Point(12, 12);
this.cardPictureBox.Name = "cardPictureBox";
this.cardPictureBox.Size = new System.Drawing.Size(189, 297);
this.cardPictureBox.TabIndex = 1;
this.cardPictureBox.TabStop = false;
//
// UserInfoForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(463, 321);
this.Controls.Add(this.cardPictureBox);
this.Controls.Add(this.propertyGrid1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "UserInfoForm";
this.Text = "UserInfo";
this.Load += new System.EventHandler(this.UserInfoForm_Load);
((System.ComponentModel.ISupportInitialize)(this.cardPictureBox)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.PropertyGrid propertyGrid1;
private System.Windows.Forms.PictureBox cardPictureBox;
}
}
\ No newline at end of file
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;
namespace MoyaAdminUI
{
public partial class UserInfoForm : Form
{
public UserInfoForm()
{
InitializeComponent();
}
public User User
{
set
{
propertyGrid1.SelectedObject = value;
MoyaAdminUI.MoyaAPI.Card card = MoyaAdminUI.MoyaAPI.Card.GetByEventUserId(value.EventUserId);
try
{
cardPictureBox.Load(Properties.Settings.Default.ApiURL + "/dydata/usercard/" + card.cardId + ".png?pfdrid_c=true");
}
catch (Exception e)
{
}
}
}
private void UserInfoForm_Load(object sender, EventArgs e)
{
}
}
}
<?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>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAgAICAQAAAAAADoAgAAhgAAABAQEAAAAAAAKAEAAG4DAAAwMAAAAQAIAKgOAACWBAAAICAAAAEA
CACoCAAAPhMAABAQAAABAAgAaAUAAOYbAAAwMAAAAQAgAKglAABOIQAAICAAAAEAIACoEAAA9kYAABAQ
AAABACAAaAQAAJ5XAAAoAAAAIAAAAEAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////ABER
EREREREREREREREREREREREREREREREREREREREREREREREUREREREQRERERERERERRETMzMzMTMRBER
EREREREUzMzMzMREzMQRERERERERFMzMzMRPeERBERERERERERFMzERH9/iEERERERERERERFER/f394
AREREREREREREREH9/f3+AERERERERERERERD39/f4gBEREREREREREREQAH9/AAAAAREREREREREQAA
AH93d3d3ARERERERERAAAAAH9/f39wEREREREREQAAAAD39/f3cBERERERERAAAAAAD39/f3ARERERER
EQAAAAAPf39/dwAREREREREAAAAH9/f39/f3ARERERERAAAAD39/f39/cBEREREREQAAAAf39/f393AR
EREREREAAAAAD39/fHcBERERERERAAAAAAAH9/AAAREREREREQAAAAAAAA9/fwEREREREREAAAAAAAAA
9/dwERERERERAAAAAAAAAH9/cBERERERERAAAAAAAAAH93ABEREREREQAAAAAAAAAAAAAREREREREQAA
AAAAAAAAAAEREREREREQAAAAAAAAAAAREREREREREQAAAAAAAAABERERERERERERAAAAAAABERERERER
ERERERERERERERERERERERERERERERERERERERER////////////4AP//gAA//4AAP/+AAH//wAD//+A
B///wAf//8AH///AAP//AAB//gAAf/4AAH/8AAB//AAAP/wAAB/8AAA//AAAP/wAAH/8AAB//AAAf/wA
AD/8AAA//gAAH/4AAB//AAAf/4AAP//AAH//8AH///////////8oAAAAEAAAACAAAAABAAQAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/
AAAA//8A/wAAAP8A/wD//wAA////ABERERERERERERREREREERERTMREdMRBEREUR394RBEREREI/4BB
EREREAD3d3AREREQAA//8BEREQAAj/9wERERAAD///cBEREAAI/3xwEREQAAAH+AERERAAAAD/cBEREQ
AAAAAAEREREAAAAAARERERAAAAARERERERERERER//8REeAP9/fABwER4A8REfAfERHgD39/4A8BEcAP
ERHABxERwAcH98APAADABxER4AcREfAHAH/4D3d3//8RESgAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAD/8OIA//XsAP/fvwD/5MoA/+jSAP/69QD/+fIA1MmtAP/+
+QD//+AA///kAP//6QD//+8A7+/iAP//9AD///0A0+XAAGibUgCMtnoAQIQwABBtCwAwgysAS4xIAI+8
jAAQcA4AIHkeAABmAAAFeAUABGMEAAVsBQAGcAYABmUGAAuCCwAIYQgAC3ELAA15DQAOaw4AEXwRABF1
EQAaphoAG5UbABuMGwAiqiIAIaMhABNfEwAmrCYAHYAdACyvLAAedx4AL7EvACuiKwAplikAMrMyACiL
KAAdZR0ANLM0ADe1NwA0qTQAO7c7AD+5PwA0mTQAQLlAACx/LAA+sj4AQ7tDAEW7RQBHvEcASb1JAESw
RABLvksASrtKACpqKgBNv00AQqRCAE6/TgBPwE8AUcFRAE22TQBUwlQAWMZYAFfFVwBZxlkAXMhcAFvH
WwBPqk8AOno6AGHKYQBgyWAAYspiAGTLZABdu10AZsxmAGjNaABpzmkAa85rAGfGZwAzYjMAbc9tAG7Q
bgBx0XEAc9JzAHTSdABpvmkAMFcwAG7FbgB51XkAfdd9AH/ZfwCA2YAAg9uDAIDWgACG3IYAhduFAIvf
iwBLeEsAj+GPAE1pTQBIYUgATGVMAEtkSwBYZVgAv9m/AO/17wAAZgoAH1gyAABmOQAhdFEAn7GwAABm
fABgkJ4AUllbAE1ncwAAZpkAAWeaAAJomwAEY5QABmqcAAltoAAIYY4AC2SRAA1ungAMX4gAD3KlABJ2
qgAScaEAFHOjABh6rAAcd6UAGm2WAB56qAAjgrMAJn+rABtbewAtg68ALnqhAEGPtwA+iK0AMGN8ADx1
kgBeosUAMVRmAHCtzABCWWUAA2mfAAZspgAJb6gAFnyzABuBuQAli8YAKIW2ACR2oQAriLoAM46/ADGI
tgA5k8UAQ5nJAEae0ABQptcAYMb/AFKn1wBTqNgAUaPQAF2t2wBTm8EAX6jQAGu03gBsstkAa67TAI3F
5QCKvdkAmcrmAKrU7AC22u4AvN3wAA1zswAQdrMALZPQAEKo6QBYvv8AWsD/AF3D/wBOpNYAaLLdAHW5
4QCEwOQAoc/qABB2uQAUer8AG4HGADyi5gBSuP8AVbv/AFe9/wAWfMYAHILNACaM2QAskt8ANZvmAEqw
/wBNs/8AT7X/AFC2/wAdgtEAIYfaACKI3QAiiNkAPaP5AEKo/wBFq/8AR63/AEmv/wAmjOQAKY7qAC2T
7gAzmfIANZv5ADac+QA6oP8APaP/AD6k/wBApv8ALpT1ADGX+wAyl/wAM5n/ADSa/wA3nf8AOJ7/AG9v
bwBnZ2cAZmZmAGBgYAD///8AAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
AgICAgICAgICAgICAgICAgICAgICAgIC/Pz8/Ht3eXp6emNjeHh6evz9/QICAgICAgICAgICAgICAgIC
AgICAgICAgL8/HdjOS8dHR0dHR0gKCYhHR0dHR0dL2qF/AICAgICAgICAgICAgICAgICAgL8dTkfHR0o
LCwdLEJFRUNAQD49OjcyLissIyAdavwCAgICAgICAgICAgICAgIC/EoiHSg2PERGSzYdJUlOTktLRkRA
Pjs3NDAtKioeJPwCAgICAgICAgICAgICAgL8IiErPUBDSE1PUSYZGzZUVFJRT0tIQ0A9OjcwLSorHXsC
AgICAgICAgICAgICAvwdLDs+QEZNUVJURx0TFR1RWlVUVFJPS0ZAPjo3MC0qHXkCAgICAgICAgICAgIC
AicrOj5ASE5SVFZbOBgMDBgxX15eWVZUUU1IQD46NDAtHXcCAgICAgICAgICAgICMx06PkBITlJUWl5h
JRUNDRMdTGdlX15aVFNNSEA9NzIuHfwCAgICAgICAgICAgICMx09QEZOUlRcX2ZdHRMODg4VIGJoZ2Re
XFRTS0ZAOzcrIvwCAgICAgICAgICAgICMx1ARE1SVFxfZ2dMMw8PDw8RGDFxbGdmXlxUUUtDPjcmSgIC
AgICAgICAgICAgICMx1AS1FUWl9naG04FBEREREREx1Mbm1oZl5aVE9IQDUd/AICAgICAgICAgICAgIC
Mx1CTlRVXmZnbW8pGgsLCwsLEhUda29tZ2ReVVNLRCg5AgICAgICAgICAgICAgICAic/UVRcYWdsb3Qd
fAEBAQEBARIZKXFvbGdeW1RONh38AgICAgICAgICAgICAgICAjMoUlZeZmhvcmkdfQEBEgsLCAkQGzhz
bmhkXlZHHXUCAgICAgICAgICAgICAgICAgIdP1VfZ2xvdGsdBAMDAwQDAwMDCh1MbWxmXlAgWAICAgIC
AgICAgICAgICAgICAgIzHUxhZ21wdGkdBwcHBgYGBgYFBhUfV21mTCBYAgICAgICAgICAgICAgICAgIC
AgICMx04Ym1zdlcWBQWChI+Hh4edhAoUHUw4HxkCAgICAgICAgICAgICAgICAgICAgICAgIzHT9ddmkX
Cp2HqNHS0tLFpoeEHx0nGQICAgICAgICAgICAgICAgICAgICAgICAgICAkEdJTGAh6fY2eHh4dnZ2dGJ
g3/7AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQYGHxeLj4+Pj4+Pj4uLZp4ql/AICAgICAgIC
AgICAgICAgICAgICAgICAgICAgICAovF6urr6+vr6+vq6urj4qeQhfwCAgICAgICAgICAgICAgICAgIC
AgICAgICAgICnafr9PT19fX19fX19PTs6+Kmm/38AgICAgICAgICAgICAgICAgICAgICAgICAgICh+r3
9/f3+Pj4+Pj39/f39vThh6P8AgICAgICAgICAgICAgICAgICAgICAgICAgKfxff4+fn6+vr6+vr6+fn4
9/f30Y3+/AICAgICAgICAgICAgICAgICAgICAgICAgKd5Pr68PDw8PHx8fDw8Pr6+vn49Iej/AICAgIC
AgICAgICAgICAgICAgICAgICAgKH7vDx8fHy8vLy8vLy8fHx8Pr6+dKQ/PwCAgICAgICAgICAgICAgIC
AgICAgICAp3G8fHy8+bm5ubm5ubm5vPy8fHw+uyHpfwCAgICAgICAgICAgICAgICAgICAgICAp3Z8+bm
5ubn5+fn5+fn5ubm5vPx8fCnm/wCAgICAgICAgICAgICAgICAgICAgICAofb5ubn6Ojo6Onp6ejo6Ojn
5ubm8vHTkPz8AgICAgICAgICAgICAgICAgICAgICAofc5+jo6d3e3t7e3t7e3eno6Ofm5vPbh/38AgIC
AgICAgICAgICAgICAgICAgICAofc6N3e3t/g1dXV1dXg3t7e3ejo5+blh4b9AgICAgICAgICAgICAgIC
AgICAgICAofc3t7g1dXV1dXV1dXV1dXg3t7p6Ofmh6X9AgICAgICAgICAgICAgICAgICAgICAofU39XV
1dbW19fX19fW1tXV1d/e3ejnxqD8AgICAgICAgICAgICAgICAgICAgICAofU1dXW19fJysrKysrJ19fW
1dXg3t3oqKD9AgICAgICAgICAgICAgICAgICAgICAo/H1tfXysvLtbW1tcvLysrX19XV4N7Hj6D8AgIC
AgICAgICAgICAgICAgICAgICAp2r18nKyMeqqavU4ODg1snKydbV38iRh6D8AgICAgICAgICAgICAgIC
AgICAgICAp2SyceSkZWumZGHxtrt8PDw8PDv2Y+PiIYCAgICAgICAgICAgICAgICAgICAgICAgKHkouS
ma+xzLSymYuHp8XY2MWHk5qIh/wCAgICAgICAgICAgICAgICAgICAgICAgKWh5GZr7GztLTNzs+7sqyR
lpqenJOJjvwCAgICAgICAgICAgICAgICAgICAgICAgKdiJmxssy0trm8z7/Qw8TBwKKenJWLoAICAgIC
AgICAgICAgICAgICAgICAgICAgICj5GyzLS5vLzOz9DCxMPApLqwrJKHoQICAgICAgICAgICAgICAgIC
AgICAgICAgICnYestLm8zs/Pv8HQwr+9uLKvromhAgICAgICAgICAgICAgICAgICAgICAgICAgICAp2H
r7zOz8+/v8/Pz7y5tLOxjJcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKdh6/Pz8HQ0NC/z868
tLGMlwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICn4eWvtDCw9DBz864mYedAgICAgICAgIC
AgICAgICAgICAgICAgICAgICAgICAgICAp+Wh5S6oqK6sJOHrQICAgICAgICAgICAgICAgICAgICAgIC
AgICAgICAgICAgICAgICAp2dnZ2dnZ0CAgICAgICAgICAgICAgICAgIC////////AAD//8AAB/8AAP/8
AAAA/wAA/+AAAAB/AAD/gAAAAH8AAP8AAAAAfwAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAfwAA/AAAAAB/
AAD8AAAAAP8AAPwAAAAA/wAA/AAAAAH/AAD+AAAAAf8AAP4AAAAD/wAA/wAAAAf/AAD/AAAAD/8AAP+A
AAAf/wAA/+AAAD//AAD/+AAAf/8AAP/+AAA//wAA//8AAB//AAD//gAAD/8AAP/+AAAP/wAA//wAAAf/
AAD//AAAB/8AAP/8AAAD/wAA//gAAAP/AAD/+AAAA/8AAP/4AAAB/wAA//gAAAH/AAD/+AAAAf8AAP/4
AAAB/wAA//gAAAH/AAD/+AAAAf8AAP/4AAAB/wAA//gAAAH/AAD/+AAAA/8AAP/8AAAD/wAA//wAAAP/
AAD//AAAB/8AAP/+AAAH/wAA//4AAA//AAD//wAAH/8AAP//gAA//wAA///AAH//AAD//+AB//8AAP//
/Af//wAAKAAAACAAAABAAAAAAQAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAP/w
4gD/9ewA/9+/AP/kygD/6NIA//r1AP/58gDUya0A//75AP//4AD//+QA///pAP//7wDv7+IA///0AP//
/QDT5cAAaJtSAIy2egBAhDAAEG0LADCDKwBLjEgAj7yMABBwDgAgeR4AAGYAAAV4BQAEYwQABWwFAAZw
BgAGZQYAC4ILAAhhCAALcQsADXkNAA5rDgARfBEAEXURABqmGgAblRsAG4wbACKqIgAhoyEAE18TACas
JgAdgB0ALK8sAB53HgAvsS8AK6IrACmWKQAyszIAKIsoAB1lHQA0szQAN7U3ADSpNAA7tzsAP7k/ADSZ
NABAuUAALH8sAD6yPgBDu0MARbtFAEe8RwBJvUkARLBEAEu+SwBKu0oAKmoqAE2/TQBCpEIATr9OAE/A
TwBRwVEATbZNAFTCVABYxlgAV8VXAFnGWQBcyFwAW8dbAE+qTwA6ejoAYcphAGDJYABiymIAZMtkAF27
XQBmzGYAaM1oAGnOaQBrzmsAZ8ZnADNiMwBtz20AbtBuAHHRcQBz0nMAdNJ0AGm+aQAwVzAAbsVuAHnV
eQB9130Af9l/AIDZgACD24MAgNaAAIbchgCF24UAi9+LAEt4SwCP4Y8ATWlNAEhhSABMZUwAS2RLAFhl
WAC/2b8A7/XvAABmCgAfWDIAAGY5ACF0UQCfsbAAAGZ8AGCQngBSWVsATWdzAABmmQABZ5oAAmibAARj
lAAGapwACW2gAAhhjgALZJEADW6eAAxfiAAPcqUAEnaqABJxoQAUc6MAGHqsABx3pQAabZYAHnqoACOC
swAmf6sAG1t7AC2DrwAueqEAQY+3AD6IrQAwY3wAPHWSAF6ixQAxVGYAcK3MAEJZZQADaZ8ABmymAAlv
qAAWfLMAG4G5ACWLxgAohbYAJHahACuIugAzjr8AMYi2ADmTxQBDmckARp7QAFCm1wBgxv8AUqfXAFOo
2ABRo9AAXa3bAFObwQBfqNAAa7TeAGyy2QBrrtMAjcXlAIq92QCZyuYAqtTsALba7gC83fAADXOzABB2
swAtk9AAQqjpAFi+/wBawP8AXcP/AE6k1gBost0AdbnhAITA5AChz+oAEHa5ABR6vwAbgcYAPKLmAFK4
/wBVu/8AV73/ABZ8xgAcgs0AJozZACyS3wA1m+YASrD/AE2z/wBPtf8AULb/AB2C0QAhh9oAIojdACKI
2QA9o/kAQqj/AEWr/wBHrf8ASa//ACaM5AApjuoALZPuADOZ8gA1m/kANpz5ADqg/wA9o/8APqT/AECm
/wAulPUAMZf7ADKX/AAzmf8ANJr/ADed/wA4nv8Ab29vAGdnZwBmZmYAYGBgAP///wACAgICAgICAgIC
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv39/fz8/Pz8/Pz8/AICAgICAgICAgICAgIC
AgIC/fx7eGNjOS8vLy8vOWpj/v0CAgICAgICAgICAgIC/UovKCwsJTxCRUA9PTcrKyMgav0CAgICAgIC
AgICAjksNUROTzYYNk9PT0tDPTsyLSok/AICAgICAgICAgIhPD5IT1FWKAczWllWUU9GPTsyMB78AgIC
AgICAgICHjU+TU9SXFAUDHY4YV5cVk9IPTswIfwCAgICAgICAgJYO0hPVF5mTHwMDhldbGVeWk9FPTA5
AgICAgICAgICAhk8T1NeZ2wxEA8REClrbGVeVE8+OHUCAgICAgICAgICGTxPXGVscBgSEgEBfDFwbGFc
UUIb/AICAgICAgICAgIZLFNebG1sWAsICAkJFT9uaF5RJvwCAgICAgICAgICAgIZTGRsc2kVBgMHBwcH
GVdsWij8AgICAgICAgICAgICAgIWOGJ0aRUThJ2nj4SCHD8n/AICAgICAgICAgICAgICAgICQTg/gZPR
2dnZ2IyDOfsCAgICAgICAgICAgICAgICAgICAqGM4ePj4+Pj4tKQhQICAgICAgICAgICAgICAgICAgIC
j+v19ff39vX07NOb/QICAgICAgICAgICAgICAgICAo/i9/j5+fn5+Pj399GjAgICAgICAgICAgICAgIC
AgICk/rw8PDw8PDw8PD59I39AgICAgICAgICAgICAgICAozS8PHy8+bm8/Px8PDx0qUCAgICAgICAgIC
AgICAgICjNrm5+fn5+fn5+fm8/Dsm/wCAgICAgICAgICAgICAgKM3Ofo3d7e3t7d6Ofn5vGO/AICAgIC
AgICAgICAgICAozl3t7e39/f397e3unn58b8AgICAgICAgICAgICAgICjMje1dbW1tbW1tXe3t3n04YC
AgICAgICAgICAgICAgKM1NbW18rLy8rJ1tbg3t6phgICAgICAgICAgICAgICAozH1t7Hx8fI3uDW1eDd
3I+GAgICAgICAgICAgICAgICAqmrkayxsZXG2err2saWh/wCAgICAgICAgICAgICAgICloyssbO3zs67
nrCwsI+OAgICAgICAgICAgICAgICAgICkbLMuc3OwcPCwLqskaECAgICAgICAgICAgICAgICAgKcr7m8
z8+/wc+5spmXAgICAgICAgICAgICAgICAgICAgKPsc/B0MHPzrmxjwICAgICAgICAgICAgICAgICAgIC
AgKfmr7Ews+4mJ0CAgICAgICAgICAgICAgICAgICAgICAgICmJWYlZgCAgICAgICAgICAgIC///////w
AP//gAA//gAAH/wAAB/4AAAf8AAAH/AAAD/wAAA/8AAAP/AAAH/4AAD//AAB//8AA///wAP//8AB//+A
Af//gAD//wAA//8AAH//AAB//wAAf/8AAH//AAB//wAAf/+AAH//gAD//8AA///AAf//4AP///AH///8
H/8oAAAAEAAAACAAAAABAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAA//DiAP/1
7AD/378A/+TKAP/o0gD/+vUA//nyANTJrQD//vkA///gAP//5AD//+kA///vAO/v4gD///QA///9ANPl
wABom1IAjLZ6AECEMAAQbQsAMIMrAEuMSACPvIwAEHAOACB5HgAAZgAABXgFAARjBAAFbAUABnAGAAZl
BgALggsACGEIAAtxCwANeQ0ADmsOABF8EQARdREAGqYaABuVGwAbjBsAIqoiACGjIQATXxMAJqwmAB2A
HQAsrywAHnceAC+xLwAroisAKZYpADKzMgAoiygAHWUdADSzNAA3tTcANKk0ADu3OwA/uT8ANJk0AEC5
QAAsfywAPrI+AEO7QwBFu0UAR7xHAEm9SQBEsEQAS75LAEq7SgAqaioATb9NAEKkQgBOv04AT8BPAFHB
UQBNtk0AVMJUAFjGWABXxVcAWcZZAFzIXABbx1sAT6pPADp6OgBhymEAYMlgAGLKYgBky2QAXbtdAGbM
ZgBozWgAac5pAGvOawBnxmcAM2IzAG3PbQBu0G4AcdFxAHPScwB00nQAab5pADBXMABuxW4AedV5AH3X
fQB/2X8AgNmAAIPbgwCA1oAAhtyGAIXbhQCL34sAS3hLAI/hjwBNaU0ASGFIAExlTABLZEsAWGVYAL/Z
vwDv9e8AAGYKAB9YMgAAZjkAIXRRAJ+xsAAAZnwAYJCeAFJZWwBNZ3MAAGaZAAFnmgACaJsABGOUAAZq
nAAJbaAACGGOAAtkkQANbp4ADF+IAA9ypQASdqoAEnGhABRzowAYeqwAHHelABptlgAeeqgAI4KzACZ/
qwAbW3sALYOvAC56oQBBj7cAPoitADBjfAA8dZIAXqLFADFUZgBwrcwAQlllAANpnwAGbKYACW+oABZ8
swAbgbkAJYvGACiFtgAkdqEAK4i6ADOOvwAxiLYAOZPFAEOZyQBGntAAUKbXAGDG/wBSp9cAU6jYAFGj
0ABdrdsAU5vBAF+o0ABrtN4AbLLZAGuu0wCNxeUAir3ZAJnK5gCq1OwAttruALzd8AANc7MAEHazAC2T
0ABCqOkAWL7/AFrA/wBdw/8ATqTWAGiy3QB1ueEAhMDkAKHP6gAQdrkAFHq/ABuBxgA8ouYAUrj/AFW7
/wBXvf8AFnzGAByCzQAmjNkALJLfADWb5gBKsP8ATbP/AE+1/wBQtv8AHYLRACGH2gAiiN0AIojZAD2j
+QBCqP8ARav/AEet/wBJr/8AJozkACmO6gAtk+4AM5nyADWb+QA2nPkAOqD/AD2j/wA+pP8AQKb/AC6U
9QAxl/sAMpf8ADOZ/wA0mv8AN53/ADie/wBvb28AZ2dnAGZmZgBgYGAA////AAICAgICAgICAgICAgIC
AgICAgICAvz8/P39/f0CAgICAgIC/WMzOSwsMTNqhQICAgIC/DZRP0FaWj06MYUCAgICAixVXz8TTF9b
OzOFAgICAgI/XnAUARpdXkd1AgICAgICTEx2FXyCWExKAgICAgICAgIZGYPY2MWBhQICAgICAgICAgLr
9/f20oUCAgICAgICAgKf8vPz8u6bhQICAgICAgICn+jd3ejmqoUCAgICAgICAp/g1dXV3quFAgICAgIC
AgKfx6/U3siZhQICAgICAgICn6+2zqKfkwICAgICAgICAgKZz8G/rpMCAgICAgICAgICApmZmZkCAgIC
AgL//wIC+A9PU+AHbDHABxEQwAdsZcAPTz7AHwIC4B8CAvgfAgLwD09c8A9wGPAPAQHwD3Bs8B9RQvgf
AgL8PwICKAAAADAAAABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAcAAAAPAAAAFwAA
AB8AAAAlAAAALAAAADQAAAA+AAAARgAAAEcAAABHAAAARwAAAE0AAABWAAAAUwAAAEoAAABHAAAARwAA
AEEAAAA0AAAAKwAAACIAAAATAAAABwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABgAAABEAAAAfAAAALQAA
ADwAAABNAAAAXwAAAG4AAAB8AAAAiQAeAKYAJQCxACQAswAkALQAJAC0ACQAtAA/AM8AMgDGACMAuQAk
ALYAJAC0ACQAtAAAAJgAAACRAAAAhgAAAHQAAABXAAAAMwAAABMAAAAEAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAoAAAAcAAAANQAA
AFIAAABwABYAlQAtALYAPwDPAE8A4wBTAOsAZgD/AGYA/wBmAP8AZgD/AGYA/wBmAP8EawT/EHsQ/w15
Df8GcAb/AGYA/wBmAP8AZgD/AGYA/wBmAP8AYQD7AFIA7gA2ANQACgCoAAAAgQAAAEYAAAARAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFgAA
ADsADgBxADYAtQBPAOEAYgD6AGYA/wBmAP8QexD/HYsd/x6LHv8AZgD/H4wf/z+yP/9HvEf/RrxG/0O7
Q/9AuUD/QLlA/z+5P/86tjr/NLM0/zKzMv8sryz/IaMh/xyaHP8RjhH/C4IL/wJuAv8AYQD7ACgAygAA
AHkAAAAnAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAQAAAAdAB8AaABNANIAYgD6AGYA/xSAFP8klST/NKk0/0W7Rf9JvUn/Tb9N/yeTJ/8AZgD/CnEK/0q7
Sv9QwVD/T8BP/02/Tf9Nv03/Sb1J/0W7Rf9AuUD/P7k//zm2Of8zszP/L7Ev/yesJ/8kqyT/G6Yb/xil
GP8FeAX/AFwA9wAAAJIAAAA6AAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAQAAABUAQwCTAGIA+AZwBv8fkh//PLQ8/0C5QP9Eu0T/S75L/06/Tv9SwlL/VsRW/wty
C/9QlkL/EHAN/y2WLf9Zxln/WcZZ/1jGWP9Vw1X/UcFR/02/Tf9Lvkv/RLtE/0C5QP88tzz/NLM0/zGy
Mf8nrCf/JKsk/xumG/8UmhT/AGYA/wAUAKcAAABEAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAABABOAH0AZgD/Go0a/ze1N/8/uT//QblB/0m9Sf9Ov07/U8NT/1jG
WP9Zxln/Q65D/wBmAP/f7MD/j7x7/wBmAP9VvVX/YMlg/13IXf9axlr/WcZZ/1jFWP9RwVH/Tb9N/0i9
SP9BuUH/Prg+/zSzNP8xsjH/J6wn/yOrI/8aphr/AGYA/wAkALMAAABGAAAACwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAGQBkAPMdkR3/NbQ1/z+5P/9BuUH/S75L/0/A
T/9YxVj/WcZZ/1vHW/9iymL/Jowm/zCDKv///9/////g/zCDKv8agBr/ac5p/2bMZv9mzGb/Ycph/1vH
W/9Zxln/VcNV/06/Tv9Lvkv/QblB/z64Pv80szT/L7Ev/yasJv8gqSD/AGYA/wAlALAAAAA9AAAABwAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFoASQBmAP80szT/P7k//0G5
Qf9Lvkv/T8BP/1jGWP9Zxln/YMlg/2bMZv9rzmv/DXMN/4+8gP///+T////k/8/iuv8AZgD/QaNB/3LS
cv9u0G7/aM1o/2bMZv9gyWD/WcZZ/1fFV/9Ov07/S75L/0G5Qf87tzv/M7Mz/yyvLP8hoyH/AGYA/wAf
AJwAAAAuAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFoASQBm
AP88tzz/QLlA/0m9Sf9PwE//WMZY/1rGWv9ky2T/aM1o/3DRcP9dvl3/AGYA/8/ivf///+n////p////
6f+As3X/B20H/2jGaP900nT/c9Jz/23Pbf9mzGb/ZMtk/1rGWv9XxVf/Tb9N/0i9SP9AuUD/N7U3/zKz
Mv8Zkxn/AGIA+gAAAGoAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAFsASABmAP9AuUD/RbtF/06/Tv9YxVj/WsZa/2TLZP9ozWj/ctJy/3PSc/9DpEP/IHke////
7v///+7////w////8P////D/MIMt/yCDIP9/2X//edV5/3PSc/9x0XH/Z8xn/2TLZP9Zxln/VMNU/02/
Tf9Eu0T/Prg+/zOzM/8NeQ3/AEsA2AAAAEcAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAF8ARQBmAP9BuUH/TL9M/1TDVP9Zxln/YMlg/2jNaP9y0nL/dNJ0/33X
ff8oiij/YJ9b////8/////T////0////9f////b/z+LJ/wBmAP9BoEH/gNmA/3zXfP900nT/cNFw/2bM
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
//9Ns///TbP//02z//9Ns///TbP//02z//9Ns///S7H//0mv//9Hrf//R63//0Wr//9Dqf//Qqj//0Cm
//8qkN//AGaZ/wAAAJkAAABDAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmmf81m+b/R63//0qw
//9Ns///TbP//0+1//9Qtv//Ubf//1G3//9Rt///Ubf//1G3//9Qtv//TrT//02z//9Ns///SrD//0et
//9Hrf//RKr//0Ko//89o/n/AGaZ/wAkNbgAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABm
mf83neb/TbP//02z//9Qtv//Urj//1K4//9SuP//Urj//1O5//9Tuf//U7n//1K4//9SuP//Urj//1G3
//9Qtv//TbP//0yy//9Jr///R63//0Wr//9CqP//AGaZ/wAqQMEAAABbAAAAFgAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAABmmf86oOb/T7X//1K4//9SuP//U7n//1W7//9WvP//V73//1e9//9Xvf//V73//1e9
//9WvP//Vbv//1O5//9SuP//Ubf//0+1//9Ns///SrD//0et//9Fq///EXez/wA+XdMAAABfAAAAGAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmmf89o+b/Urj//1O5//9Vu///V73//1e9//9Zv///WsD//1rA
//9bwf//WsD//1rA//9Yvv//V73//1e9//9Vu///Urj//1K4//9Qtv//TbP//0qw//9Hrf//CW+m/wA+
XdMAAABfAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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
</value>
</data>
</root>
\ No newline at end of file
namespace MoyaAdminUI
{
partial class UsersFinderForm
{
/// <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.usersListView = new System.Windows.Forms.ListView();
this.button1 = new System.Windows.Forms.Button();
this.searchTextBox = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.searchTimer = new System.Windows.Forms.Timer(this.components);
this.SuspendLayout();
//
// usersListView
//
this.usersListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.usersListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.columnHeader1,
this.columnHeader2,
this.columnHeader3,
this.columnHeader4});
this.usersListView.FullRowSelect = true;
this.usersListView.Location = new System.Drawing.Point(12, 58);
this.usersListView.Name = "usersListView";
this.usersListView.Size = new System.Drawing.Size(570, 241);
this.usersListView.TabIndex = 0;
this.usersListView.UseCompatibleStateImageBehavior = false;
this.usersListView.View = System.Windows.Forms.View.Details;
this.usersListView.DoubleClick += new System.EventHandler(this.usersListView_DoubleClick);
//
// button1
//
this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.button1.Location = new System.Drawing.Point(507, 305);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 1;
this.button1.Text = "button1";
this.button1.UseVisualStyleBackColor = true;
//
// searchTextBox
//
this.searchTextBox.Location = new System.Drawing.Point(12, 32);
this.searchTextBox.Name = "searchTextBox";
this.searchTextBox.Size = new System.Drawing.Size(180, 20);
this.searchTextBox.TabIndex = 2;
this.searchTextBox.TextChanged += new System.EventHandler(this.searchTextBox_TextChanged);
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(13, 13);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(41, 13);
this.label1.TabIndex = 3;
this.label1.Text = "Search";
//
// columnHeader1
//
this.columnHeader1.Text = "Nick";
this.columnHeader1.Width = 118;
//
// columnHeader2
//
this.columnHeader2.Text = "Firstname";
this.columnHeader2.Width = 112;
//
// columnHeader3
//
this.columnHeader3.Text = "Lastname";
this.columnHeader3.Width = 150;
//
// columnHeader4
//
this.columnHeader4.Text = "Login";
this.columnHeader4.Width = 93;
//
// searchTimer
//
this.searchTimer.Tick += new System.EventHandler(this.searchTimer_Tick);
//
// UsersFinderForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(594, 333);
this.Controls.Add(this.label1);
this.Controls.Add(this.searchTextBox);
this.Controls.Add(this.button1);
this.Controls.Add(this.usersListView);
this.Name = "UsersFinderForm";
this.Text = "Users Finder";
this.Load += new System.EventHandler(this.UsersFinderForm_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.ListView usersListView;
private System.Windows.Forms.ColumnHeader columnHeader1;
private System.Windows.Forms.ColumnHeader columnHeader2;
private System.Windows.Forms.ColumnHeader columnHeader3;
private System.Windows.Forms.ColumnHeader columnHeader4;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.TextBox searchTextBox;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Timer searchTimer;
}
}
\ No newline at end of file
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;
namespace MoyaAdminUI
{
public partial class UsersFinderForm : Form
{
string searchString = "";
public User SelectedUser;
public bool AllowMultiSelect
{
set
{
usersListView.MultiSelect = value;
}
get
{
return usersListView.MultiSelect;
}
}
public UsersFinderForm()
{
InitializeComponent();
}
private void searchTextBox_TextChanged(object sender, EventArgs e)
{
searchTimer.Stop();
searchTimer.Start();
}
private void UsersFinderForm_Load(object sender, EventArgs e)
{
updateListview();
}
private void updateListview()
{
usersListView.SuspendLayout();
usersListView.Items.Clear();
foreach (User user in User.Cache)
{
if (searchString == "" ||
user.Login.ToLower().Contains(searchString) ||
user.Firstname.ToLower().Contains(searchString) ||
user.Lastname.ToLower().Contains(searchString) ||
user.Login.ToLower().Contains(searchString)
)
{
ListViewItem lvi = new ListViewItem(user.Nick);
lvi.Tag = user;
lvi.SubItems.Add(user.Firstname);
lvi.SubItems.Add(user.Lastname);
lvi.SubItems.Add(user.Login);
usersListView.Items.Add(lvi);
}
}
usersListView.ResumeLayout();
}
private void searchTimer_Tick(object sender, EventArgs e)
{
searchTimer.Stop();
searchString = searchTextBox.Text.ToLower();
updateListview();
}
private void usersListView_DoubleClick(object sender, EventArgs e)
{
if (usersListView.SelectedItems.Count != 1)
return;
SelectedUser = (User)usersListView.SelectedItems[0].Tag;
this.DialogResult = DialogResult.OK;
}
}
}
<?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="searchTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="MoyaAdminUI.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<userSettings>
<MoyaAdminUI.Properties.Settings>
<setting name="ApiURL" serializeAs="String">
<value>http://10.220.105.194:8080/MoyaWeb</value>
</setting>
<setting name="ApiApplicationKey" serializeAs="String">
<value />
</setting>
<setting name="ApiUser" serializeAs="String">
<value />
</setting>
<setting name="ApiPass" serializeAs="String">
<value />
</setting>
</MoyaAdminUI.Properties.Settings>
</userSettings>
</configuration>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="MoyaAdminUI.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<userSettings>
<MoyaAdminUI.Properties.Settings>
<setting name="ApiURL" serializeAs="String">
<value>http://10.220.105.194:8080/MoyaWeb</value>
</setting>
<setting name="ApiApplicationKey" serializeAs="String">
<value />
</setting>
<setting name="ApiUser" serializeAs="String">
<value />
</setting>
<setting name="ApiPass" serializeAs="String">
<value />
</setting>
</MoyaAdminUI.Properties.Settings>
</userSettings>
</configuration>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
<?xml version="1.0" encoding="utf-8"?>
<AutoUpdateSettings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ProjectName>MoyaAdminUI</ProjectName>
<Username>moya</Username>
<Password>moya</Password>
<VersionGroups>
<string>stable</string>
</VersionGroups>
<InstalledVersionGroup>stable</InstalledVersionGroup>
<InstalledVersion>1_00_06</InstalledVersion>
<ForceUpdate>false</ForceUpdate>
<DisableUpdate>false</DisableUpdate>
</AutoUpdateSettings>
\ No newline at end of file
D:\Devel\proj\MoyaAdmin\MoyaAdminUI\MoyaAdminUI\bin\Debug\MoyaAdminUI.exe.config
D:\Devel\proj\MoyaAdmin\MoyaAdminUI\MoyaAdminUI\bin\Debug\MoyaAdminUI.exe
D:\Devel\proj\MoyaAdmin\MoyaAdminUI\MoyaAdminUI\bin\Debug\MoyaAdminUI.pdb
D:\Devel\proj\MoyaAdmin\MoyaAdminUI\MoyaAdminUI\obj\Debug\MoyaAdminUI.csprojResolveAssemblyReference.cache
D:\Devel\proj\MoyaAdmin\MoyaAdminUI\MoyaAdminUI\obj\Debug\MoyaAdminUI.ComputerPlaceGridSettings.resources
D:\Devel\proj\MoyaAdmin\MoyaAdminUI\MoyaAdminUI\obj\Debug\MoyaAdminUI.MainForm.resources
D:\Devel\proj\MoyaAdmin\MoyaAdminUI\MoyaAdminUI\obj\Debug\MoyaAdminUI.Properties.Resources.resources
D:\Devel\proj\MoyaAdmin\MoyaAdminUI\MoyaAdminUI\obj\Debug\MoyaAdminUI.csproj.GenerateResource.Cache
D:\Devel\proj\MoyaAdmin\MoyaAdminUI\MoyaAdminUI\obj\Debug\MoyaAdminUI.exe
D:\Devel\proj\MoyaAdmin\MoyaAdminUI\MoyaAdminUI\obj\Debug\MoyaAdminUI.pdb
D:\Devel\proj\MoyaAdmin\MoyaAdminUI\MoyaAdminUI\obj\Debug\MoyaAdminUI.UsersFinderForm.resources
D:\Devel\proj\MoyaAdmin\MoyaAdminUI\MoyaAdminUI\obj\Debug\MoyaAdminUI.UserInfoForm.resources
D:\Devel\proj\MoyaAdmin\MoyaAdminUI\MoyaAdminUI\obj\Debug\MoyaAdminUI.ApiSettings.resources
D:\Devel\proj\MoyaAdmin\MoyaAdminUI\MoyaAdminUI\bin\Debug\AutoUpdateLib.dll
D:\Devel\proj\MoyaAdmin\MoyaAdminUI\MoyaAdminUI\bin\Debug\AutoUpdateLib.pdb
<?xml version="1.0" encoding="utf-8"?>
<AutoPublishSettings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<UploadUser>f-solu-06</UploadUser>
<UploadPath>/home/f-solu-06/software.f-solutions.fi</UploadPath>
<UploadHost>software.f-solutions.fi</UploadHost>
<ProjectName>MoyaAdminUI</ProjectName>
<Customers>
<Customer>
<Name>moya</Name>
<Password>moya</Password>
<AllowDevelopmentReleases>false</AllowDevelopmentReleases>
<Obfuscate>false</Obfuscate>
</Customer>
</Customers>
<ForceUpdate>false</ForceUpdate>
<DisableUpdate>false</DisableUpdate>
</AutoPublishSettings>
\ No newline at end of file
-----BEGIN CERTIFICATE-----
MIIFZTCCBE2gAwIBAgIHJ+f2v0HETTANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
BhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAY
BgNVBAoTEUdvRGFkZHkuY29tLCBJbmMuMTMwMQYDVQQLEypodHRwOi8vY2VydGlm
aWNhdGVzLmdvZGFkZHkuY29tL3JlcG9zaXRvcnkxMDAuBgNVBAMTJ0dvIERhZGR5
IFNlY3VyZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTERMA8GA1UEBRMIMDc5Njky
ODcwHhcNMTExMTE1MDAxMjI2WhcNMTQxMTE1MDAxMjI2WjBZMRkwFwYDVQQKFBAq
LmYtc29sdXRpb25zLmZpMSEwHwYDVQQLExhEb21haW4gQ29udHJvbCBWYWxpZGF0
ZWQxGTAXBgNVBAMUECouZi1zb2x1dGlvbnMuZmkwggEiMA0GCSqGSIb3DQEBAQUA
A4IBDwAwggEKAoIBAQCd7ksvWMcxBJiXjX3iOUnXvXynUbFA/rImWXGVHp43UI8K
SUrB8JP3zwRHj2j1ovvtr+Yo39cqAt5+ShtvlGyJB65/JqwyrACCDswY5l0gZNJJ
ijEgzAldWfiVEqR18AIdrjH8WbIRHFWxc3goPgJBfy6QYKnHENyZQeRXu9kc+XlS
YCda3wM5UiDgeUCZYpvsDqUxBBl3dcTDjoEBBYn22TUuMsyikvFHjmTLu8RCj1pv
jW1b2nCwbcJRr+w7VhLCRNO6fx3+T/8+dHkgE/HIggsOmR5weqfqo+w9yyF53YPu
QGzGZ4Yx74B4IDX0AP0MhADHHXEL0fv0SKgLAV+rAgMBAAGjggG+MIIBujAPBgNV
HRMBAf8EBTADAQEAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNV
HQ8BAf8EBAMCBaAwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5nb2RhZGR5
LmNvbS9nZHMxLTU5LmNybDBTBgNVHSAETDBKMEgGC2CGSAGG/W0BBxcBMDkwNwYI
KwYBBQUHAgEWK2h0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5jb20vcmVwb3Np
dG9yeS8wgYAGCCsGAQUFBwEBBHQwcjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3Au
Z29kYWRkeS5jb20vMEoGCCsGAQUFBzAChj5odHRwOi8vY2VydGlmaWNhdGVzLmdv
ZGFkZHkuY29tL3JlcG9zaXRvcnkvZ2RfaW50ZXJtZWRpYXRlLmNydDAfBgNVHSME
GDAWgBT9rGEyk2xF1uLuhV+auud2mWjM5zArBgNVHREEJDAighAqLmYtc29sdXRp
b25zLmZpgg5mLXNvbHV0aW9ucy5maTAdBgNVHQ4EFgQUT1kTmvnHrGt/k2qyoUif
6uqhS6cwDQYJKoZIhvcNAQEFBQADggEBAFYuQGCEwq0JDTZT51ikHqoBUJRJHfKD
yd2lCkuM5eWR5o5hyEpSeI6QBrlF76VdlwIcE7CRmue/7IjOBv3QoDgvycbiKoeK
Me+Fy+afaBCYn1sA9gzVY+nmyFa8GpjJWjlB39SWh0Hkp004rfK4PS75w/+kxsNA
OJHw/CcuXS4HyDmH++mK4XHh6WpLEG5lpp4UyZfNyWLvdo20L9Yi+fM1rHr4Te77
BiRdisAd/NIsfrrYaryHg4qZNWrC6mLPcvTj9C9Cgn2HrZ5Od5a4Fb02p5emr46c
B1+k2tysG9SD60zXu2sbA+CC4yS48h24KdIAI5z1Y7nKW9TJvwkRvMk=
-----END CERTIFICATE-----
; NSIS script - ONLY for use with AutoPublish/AutoUpdate system
; //keitsi
;--------------------------------
;Include Modern UI
!include "MUI.nsh"
;--------------------------------
;Configuration
SetCompressor lzma
Name "<$PROJECTNAME$> <$CUSTOMER$> v<$VERSION$>"
; DO NOT CHANGE OutFile "installer_temp.exe" !!! AutoPublish requires this.
; AutoPublish will move the installer according to autopublish.xml file.
OutFile "installer_temp.exe"
;Folder selection page
; InstallDir "$PROGRAMFILES\<$PROJECTNAME$>_<$CUSTOMER$>"
ShowInstDetails show
;--------------------------------
;Interface Settings
!define MUI_ABORTWARNING
;--------------------------------
;Pages
; !insertmacro MUI_PAGE_LICENSE "license.txt"
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
; !define MUI_FINISHPAGE_RUN $INSTDIR\<$BINARYNAMEORIG$>
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
;--------------------------------
;Languages
!insertmacro MUI_LANGUAGE "English"
;--------------------------------
;Installer Sections
Function GetDotNet
IfFileExists "$WINDIR\Microsoft.NET\Framework\v2.0.50727\installUtil.exe" NextStep
MessageBox MB_OK|MB_ICONEXCLAMATION "You must have the Microsoft .NET Framework 2.0 Installed to use this application. $\n$\nClick 'Open' in the following file dialog to download and run the Microsoft .NET Framework Installer..."
ExecShell Open "http://www.microsoft.com/downloads/info.aspx?na=90&p=&SrcDisplayLang=en&SrcCategoryId=&SrcFamilyId=0856eacb-4362-4b0d-8edd-aab15c5e04f5&u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f5%2f6%2f7%2f567758a3-759e-473e-bf8f-52154438565a%2fdotnetfx.exe" SW_SHOWNORMAL
Quit
NextStep:
FunctionEnd
Function .onInit
; Uber users are so uber that they do not need checks ;)
; Call GetDotNet
Call DetectInstallDir
FunctionEnd
Function DetectInstallDir
;Try to get install folder from obsoleted registry key first, if available
ClearErrors
ReadRegStr $INSTDIR HKCU "Software\<$PROJECTNAME$>" ""
IfErrors 0 instdirfound
ClearErrors
; No obsoleted regkey present, try to read the correct one
ReadRegStr $INSTDIR HKCU "Software\<$PROJECTNAME$>_<$CUSTOMER$>" ""
IfErrors 0 instdirfound
ClearErrors
; No installation dir regkey present at all - use default installation directory.
StrCpy $INSTDIR "$PROGRAMFILES\<$PROJECTNAME$>_<$CUSTOMER$>"
instdirfound:
FunctionEnd
Function .onInstSuccess
Exec '"$INSTDIR\<$BINARYNAMEORIG$>"'
FunctionEnd
Function WaitProgramClose
IfFileExists "$INSTDIR\<$BINARYNAMEORIG$>" loop NotInstalled
loop:
ClearErrors
Delete "$INSTDIR\<$BINARYNAMEORIG$>"
${If} ${Errors}
; Delete failed - means the program is still running. Sleep 2 seconds and retry.
Sleep 3000
ClearErrors
Delete "$INSTDIR\<$BINARYNAMEORIG$>"
${If} ${Errors}
MessageBox MB_OK "Program <$BINARYNAMEORIG$> didn't close in 2 seconds. Automatic update can't continue before it's closed. Please close the program manually and hit OK to retry."
goto loop
${EndIf}
${EndIf}
NotInstalled:
FunctionEnd
Section "!<$PROJECTNAME$> <$CUSTOMER$> <$VERSIONGROUP$> v<$VERSION$>" SecMain
SetShellVarContext current
SetOutPath "$INSTDIR"
Call WaitProgramClose
; SetOverwrite Off
SetOverwrite On
File /oname=autoupdate.xml "<$BINARYDIR$>\autoupdate.<$CUSTOMER$>.xml"
File /oname=<$BINARYNAMEORIG$> "<$BINARYDIR$>\<$BINARYNAMEOBF$>"
File autoupdate.crt
; this line will be replicated for every non-default existing assembly
; that is referenced to the main project.
File "<$REFERENCEDASSEMBLY$>"
File "<$DEBUGDATABASES$>"
; Write install path to registry (projectname_customer_versiongroup)
WriteRegStr HKCU "Software\<$PROJECTNAME$>_<$CUSTOMER$>" "" $INSTDIR
; Remove obsoleted registry key on install
DeleteRegKey HKCU "Software\<$PROJECTNAME$>"
;Create uninstaller
WriteUninstaller "$INSTDIR\Uninstall.exe"
;Create shortcuts
CreateDirectory "$SMPROGRAMS\<$PROJECTNAME$> <$CUSTOMER$>"
CreateShortCut "$SMPROGRAMS\<$PROJECTNAME$> <$CUSTOMER$>\<$PROJECTNAME$>.lnk" "$INSTDIR\<$BINARYNAMEORIG$>"
CreateShortCut "$SMPROGRAMS\<$PROJECTNAME$> <$CUSTOMER$>\Uninstall <$PROJECTNAME$>.lnk" "$INSTDIR\Uninstall.exe"
; Remove shortcuts from old shortcut naming scheme path, if any
SetShellVarContext all
Delete "$SMPROGRAMS\<$PROJECTNAME$>\<$PROJECTNAME$>.lnk"
Delete "$SMPROGRAMS\<$PROJECTNAME$>\Uninstall <$PROJECTNAME$>.lnk"
RMDir "$SMPROGRAMS\<$PROJECTNAME$>"
SetShellVarContext current
Delete "$SMPROGRAMS\<$PROJECTNAME$>\<$PROJECTNAME$>.lnk"
Delete "$SMPROGRAMS\<$PROJECTNAME$>\Uninstall <$PROJECTNAME$>.lnk"
RMDir "$SMPROGRAMS\<$PROJECTNAME$>"
SectionEnd
;--------------------------------
;Descriptions
LangString DESC_SecMain ${LANG_ENGLISH} "Base (required)"
;--------------------------------
;Uninstaller Section
Section "Uninstall"
Delete "$SMPROGRAMS\<$PROJECTNAME$> <$CUSTOMER$>\*"
RMDir "$SMPROGRAMS\<$PROJECTNAME$> <$CUSTOMER$>"
Delete "$INSTDIR\<$BINARYNAMEORIG$>"
Delete "$INSTDIR\autoupdate.xml"
Delete "$INSTDIR\autoupdate.crt"
; this line will be replicated for every non-default existing assembly
; that is referenced to the main project.
Delete "$INSTDIR\<$REFERENCEDASSEMBLY$>"
Delete "$INSTDIR\<$DEBUGDATABASES$>"
Delete "$INSTDIR\Uninstall.exe"
RMDir "$INSTDIR"
SectionEnd
\ No newline at end of file
; NSIS script - ONLY for use with AutoPublish/AutoUpdate system
; //keitsi
;--------------------------------
;Include Modern UI
!include "MUI.nsh"
;--------------------------------
;Configuration
SetCompressor lzma
Name "MoyaAdminUI moya v1_00_06"
; DO NOT CHANGE OutFile "installer_temp.exe" !!! AutoPublish requires this.
; AutoPublish will move the installer according to autopublish.xml file.
OutFile "installer_temp.exe"
;Folder selection page
; InstallDir "$PROGRAMFILES\MoyaAdminUI_moya"
ShowInstDetails show
;--------------------------------
;Interface Settings
!define MUI_ABORTWARNING
;--------------------------------
;Pages
; !insertmacro MUI_PAGE_LICENSE "license.txt"
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
; !define MUI_FINISHPAGE_RUN $INSTDIR\MoyaAdminUI.exe
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
;--------------------------------
;Languages
!insertmacro MUI_LANGUAGE "English"
;--------------------------------
;Installer Sections
Function GetDotNet
IfFileExists "$WINDIR\Microsoft.NET\Framework\v2.0.50727\installUtil.exe" NextStep
MessageBox MB_OK|MB_ICONEXCLAMATION "You must have the Microsoft .NET Framework 2.0 Installed to use this application. $\n$\nClick 'Open' in the following file dialog to download and run the Microsoft .NET Framework Installer..."
ExecShell Open "http://www.microsoft.com/downloads/info.aspx?na=90&p=&SrcDisplayLang=en&SrcCategoryId=&SrcFamilyId=0856eacb-4362-4b0d-8edd-aab15c5e04f5&u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f5%2f6%2f7%2f567758a3-759e-473e-bf8f-52154438565a%2fdotnetfx.exe" SW_SHOWNORMAL
Quit
NextStep:
FunctionEnd
Function .onInit
; Uber users are so uber that they do not need checks ;)
; Call GetDotNet
Call DetectInstallDir
FunctionEnd
Function DetectInstallDir
;Try to get install folder from obsoleted registry key first, if available
ClearErrors
ReadRegStr $INSTDIR HKCU "Software\MoyaAdminUI" ""
IfErrors 0 instdirfound
ClearErrors
; No obsoleted regkey present, try to read the correct one
ReadRegStr $INSTDIR HKCU "Software\MoyaAdminUI_moya" ""
IfErrors 0 instdirfound
ClearErrors
; No installation dir regkey present at all - use default installation directory.
StrCpy $INSTDIR "$PROGRAMFILES\MoyaAdminUI_moya"
instdirfound:
FunctionEnd
Function .onInstSuccess
Exec '"$INSTDIR\MoyaAdminUI.exe"'
FunctionEnd
Function WaitProgramClose
IfFileExists "$INSTDIR\MoyaAdminUI.exe" loop NotInstalled
loop:
ClearErrors
Delete "$INSTDIR\MoyaAdminUI.exe"
${If} ${Errors}
; Delete failed - means the program is still running. Sleep 2 seconds and retry.
Sleep 3000
ClearErrors
Delete "$INSTDIR\MoyaAdminUI.exe"
${If} ${Errors}
MessageBox MB_OK "Program MoyaAdminUI.exe didn't close in 2 seconds. Automatic update can't continue before it's closed. Please close the program manually and hit OK to retry."
goto loop
${EndIf}
${EndIf}
NotInstalled:
FunctionEnd
Section "!MoyaAdminUI moya stable v1_00_06" SecMain
SetShellVarContext current
SetOutPath "$INSTDIR"
Call WaitProgramClose
; SetOverwrite Off
SetOverwrite On
File /oname=autoupdate.xml "D:\Devel\proj\MoyaAdmin\MoyaAdminUI\MoyaAdminUI\bin\Debug\autoupdate.moya.xml"
File /oname=MoyaAdminUI.exe "D:\Devel\proj\MoyaAdmin\MoyaAdminUI\MoyaAdminUI\bin\Debug\MoyaAdminUI.exe"
File autoupdate.crt
; this line will be replicated for every non-default existing assembly
; that is referenced to the main project.
File "D:\Devel\proj\MoyaAdmin\MoyaAdminUI\MoyaAdminUI\bin\Debug\MoyaAdminUI.pdb"
; Write install path to registry (projectname_customer_versiongroup)
WriteRegStr HKCU "Software\MoyaAdminUI_moya" "" $INSTDIR
; Remove obsoleted registry key on install
DeleteRegKey HKCU "Software\MoyaAdminUI"
;Create uninstaller
WriteUninstaller "$INSTDIR\Uninstall.exe"
;Create shortcuts
CreateDirectory "$SMPROGRAMS\MoyaAdminUI moya"
CreateShortCut "$SMPROGRAMS\MoyaAdminUI moya\MoyaAdminUI.lnk" "$INSTDIR\MoyaAdminUI.exe"
CreateShortCut "$SMPROGRAMS\MoyaAdminUI moya\Uninstall MoyaAdminUI.lnk" "$INSTDIR\Uninstall.exe"
; Remove shortcuts from old shortcut naming scheme path, if any
SetShellVarContext all
Delete "$SMPROGRAMS\MoyaAdminUI\MoyaAdminUI.lnk"
Delete "$SMPROGRAMS\MoyaAdminUI\Uninstall MoyaAdminUI.lnk"
RMDir "$SMPROGRAMS\MoyaAdminUI"
SetShellVarContext current
Delete "$SMPROGRAMS\MoyaAdminUI\MoyaAdminUI.lnk"
Delete "$SMPROGRAMS\MoyaAdminUI\Uninstall MoyaAdminUI.lnk"
RMDir "$SMPROGRAMS\MoyaAdminUI"
SectionEnd
;--------------------------------
;Descriptions
LangString DESC_SecMain ${LANG_ENGLISH} "Base (required)"
;--------------------------------
;Uninstaller Section
Section "Uninstall"
Delete "$SMPROGRAMS\MoyaAdminUI moya\*"
RMDir "$SMPROGRAMS\MoyaAdminUI moya"
Delete "$INSTDIR\MoyaAdminUI.exe"
Delete "$INSTDIR\autoupdate.xml"
Delete "$INSTDIR\autoupdate.crt"
; this line will be replicated for every non-default existing assembly
; that is referenced to the main project.
Delete "$INSTDIR\D:\Devel\proj\MoyaAdmin\MoyaAdminUI\MoyaAdminUI\bin\Debug\MoyaAdminUI.pdb"
Delete "$INSTDIR\Uninstall.exe"
RMDir "$INSTDIR"
SectionEnd
......@@ -163,6 +163,7 @@ namespace moyaPrintServer
{
try
{
string url = Properties.Settings.Default.ApiURL + "/card/ListUnprinted";
RestClient client = new RestClient(url);
string json = client.MakeRequest("?key=" + MD5Hash.CalculateMD5Hash(client.EndPoint));
......
......@@ -9,3 +9,11 @@ C:\devel\proj\PrintServer\moyaPrintServer\moyaPrintServer\bin\Debug\moyaPrintSer
C:\devel\proj\moya\PrintServer\moyaPrintServer\moyaPrintServer\bin\Debug\moyaPrintServer.exe.config
C:\devel\proj\moya\PrintServer\moyaPrintServer\moyaPrintServer\obj\x86\Debug\moyaPrintServer.exe
C:\devel\proj\moya\PrintServer\moyaPrintServer\moyaPrintServer\obj\x86\Debug\moyaPrintServer.pdb
D:\Devel\proj\moya-info-tools\PrintServer\moyaPrintServer\moyaPrintServer\bin\Debug\moyaPrintServer.exe.config
D:\Devel\proj\moya-info-tools\PrintServer\moyaPrintServer\moyaPrintServer\obj\x86\Debug\moyaPrintServer.exe
D:\Devel\proj\moya-info-tools\PrintServer\moyaPrintServer\moyaPrintServer\obj\x86\Debug\moyaPrintServer.pdb
D:\Devel\proj\moya-info-tools\PrintServer\moyaPrintServer\moyaPrintServer\bin\Debug\moyaPrintServer.exe
D:\Devel\proj\moya-info-tools\PrintServer\moyaPrintServer\moyaPrintServer\bin\Debug\moyaPrintServer.pdb
D:\Devel\proj\moya-info-tools\PrintServer\moyaPrintServer\moyaPrintServer\obj\x86\Debug\moyaPrintServer.Form1.resources
D:\Devel\proj\moya-info-tools\PrintServer\moyaPrintServer\moyaPrintServer\obj\x86\Debug\moyaPrintServer.Properties.Resources.resources
D:\Devel\proj\moya-info-tools\PrintServer\moyaPrintServer\moyaPrintServer\obj\x86\Debug\moyaPrintServer.csproj.GenerateResource.Cache
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!