CP-13100: XenCenter: Convert a thickly provisoned LVM-based SR to a thinly provisioned SR

Created ThinProvisioningParametersControl user control using existing code to have the thin provisioning settings at one place. It needs to be initialized by providing an SR and it will expose its internal state via NewSMConfig property that we need at other places.
This does not include refactoring of existing code or replacing existing code to use this new control, but the new Conversion dialog is using this. Next step would be to remove existing code and start using this new ThinProvisioningParametersControl instead.

Signed-off-by: Gabor Apati-Nagy <gabor.apati-nagy@citrix.com>
This commit is contained in:
Gabor Apati-Nagy 2015-08-27 12:14:27 +01:00
parent f1f036cc71
commit 6b6e7daa4f
9 changed files with 768 additions and 317 deletions

View File

@ -0,0 +1,179 @@
namespace XenAdmin.Controls
{
partial class ThinProvisioningParametersControl
{
/// <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 Component 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.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.incremental_allocation_units = new System.Windows.Forms.ComboBox();
this.label1 = new System.Windows.Forms.Label();
this.initialAllocationNumericUpDown = new System.Windows.Forms.NumericUpDown();
this.initial_allocation_units = new System.Windows.Forms.ComboBox();
this.label2 = new System.Windows.Forms.Label();
this.allocationQuantumNumericUpDown = new System.Windows.Forms.NumericUpDown();
this.tableLayoutPanel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.initialAllocationNumericUpDown)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.allocationQuantumNumericUpDown)).BeginInit();
this.SuspendLayout();
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.AutoSize = true;
this.tableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.tableLayoutPanel1.ColumnCount = 3;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.tableLayoutPanel1.Controls.Add(this.incremental_allocation_units, 2, 1);
this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.initialAllocationNumericUpDown, 1, 0);
this.tableLayoutPanel1.Controls.Add(this.initial_allocation_units, 2, 0);
this.tableLayoutPanel1.Controls.Add(this.label2, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.allocationQuantumNumericUpDown, 1, 1);
this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 3);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 2;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel1.Size = new System.Drawing.Size(302, 58);
this.tableLayoutPanel1.TabIndex = 0;
//
// incremental_allocation_units
//
this.incremental_allocation_units.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.incremental_allocation_units.Font = new System.Drawing.Font("Segoe UI", 9F);
this.incremental_allocation_units.FormattingEnabled = true;
this.incremental_allocation_units.Items.AddRange(new object[] {
"GB",
"MB"});
this.incremental_allocation_units.Location = new System.Drawing.Point(250, 32);
this.incremental_allocation_units.Name = "incremental_allocation_units";
this.incremental_allocation_units.Size = new System.Drawing.Size(49, 23);
this.incremental_allocation_units.TabIndex = 24;
this.incremental_allocation_units.SelectedIndexChanged += new System.EventHandler(this.incremental_allocation_units_SelectedIndexChanged);
//
// label1
//
this.label1.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("Segoe UI", 9F);
this.label1.ImeMode = System.Windows.Forms.ImeMode.NoControl;
this.label1.Location = new System.Drawing.Point(3, 7);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(94, 15);
this.label1.TabIndex = 11;
this.label1.Text = "&Initial allocation:";
//
// initialAllocationNumericUpDown
//
this.initialAllocationNumericUpDown.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.initialAllocationNumericUpDown.DecimalPlaces = 1;
this.initialAllocationNumericUpDown.Font = new System.Drawing.Font("Segoe UI", 9F);
this.initialAllocationNumericUpDown.Location = new System.Drawing.Point(139, 3);
this.initialAllocationNumericUpDown.Margin = new System.Windows.Forms.Padding(0, 3, 3, 3);
this.initialAllocationNumericUpDown.Name = "initialAllocationNumericUpDown";
this.initialAllocationNumericUpDown.Size = new System.Drawing.Size(105, 23);
this.initialAllocationNumericUpDown.TabIndex = 12;
this.initialAllocationNumericUpDown.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
this.initialAllocationNumericUpDown.Value = new decimal(new int[] {
10,
0,
0,
0});
//
// initial_allocation_units
//
this.initial_allocation_units.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.initial_allocation_units.Font = new System.Drawing.Font("Segoe UI", 9F);
this.initial_allocation_units.FormattingEnabled = true;
this.initial_allocation_units.Items.AddRange(new object[] {
"GB",
"MB"});
this.initial_allocation_units.Location = new System.Drawing.Point(250, 3);
this.initial_allocation_units.Name = "initial_allocation_units";
this.initial_allocation_units.Size = new System.Drawing.Size(49, 23);
this.initial_allocation_units.TabIndex = 23;
this.initial_allocation_units.SelectedIndexChanged += new System.EventHandler(this.initial_allocation_units_SelectedIndexChanged);
//
// label2
//
this.label2.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.label2.AutoSize = true;
this.label2.Font = new System.Drawing.Font("Segoe UI", 9F);
this.label2.ImeMode = System.Windows.Forms.ImeMode.NoControl;
this.label2.Location = new System.Drawing.Point(3, 36);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(133, 15);
this.label2.TabIndex = 13;
this.label2.Text = "In&cremental allocations:";
//
// allocationQuantumNumericUpDown
//
this.allocationQuantumNumericUpDown.Anchor = System.Windows.Forms.AnchorStyles.Left;
this.allocationQuantumNumericUpDown.DecimalPlaces = 1;
this.allocationQuantumNumericUpDown.Font = new System.Drawing.Font("Segoe UI", 9F);
this.allocationQuantumNumericUpDown.Location = new System.Drawing.Point(139, 32);
this.allocationQuantumNumericUpDown.Margin = new System.Windows.Forms.Padding(0, 3, 3, 3);
this.allocationQuantumNumericUpDown.Name = "allocationQuantumNumericUpDown";
this.allocationQuantumNumericUpDown.Size = new System.Drawing.Size(105, 23);
this.allocationQuantumNumericUpDown.TabIndex = 14;
this.allocationQuantumNumericUpDown.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
this.allocationQuantumNumericUpDown.Value = new decimal(new int[] {
10,
0,
0,
0});
//
// ThinProvisioningParameters
//
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.AutoSize = true;
this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.Controls.Add(this.tableLayoutPanel1);
this.Name = "ThinProvisioningParameters";
this.Size = new System.Drawing.Size(308, 64);
this.tableLayoutPanel1.ResumeLayout(false);
this.tableLayoutPanel1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.initialAllocationNumericUpDown)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.allocationQuantumNumericUpDown)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.NumericUpDown initialAllocationNumericUpDown;
private System.Windows.Forms.ComboBox initial_allocation_units;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.NumericUpDown allocationQuantumNumericUpDown;
private System.Windows.Forms.ComboBox incremental_allocation_units;
}
}

View File

@ -0,0 +1,221 @@
/* Copyright (c) Citrix Systems Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms,
* with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above
* copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the
* following disclaimer in the documentation and/or other
* materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using XenAdmin.Core;
using XenAdmin.Network;
using XenAPI;
using System.Globalization;
namespace XenAdmin.Controls
{
/// <summary>
/// Picker for LunPerVDI SRs
/// </summary>
public partial class ThinProvisioningParametersControl : UserControl
{
private SR sr = null;
private string previousUnitsValueInitAlloc;
private string previousUnitsValueIncrAlloc;
private const int DecimalPlacesMB = 0;
private const int DecimalPlacesGB = 3;
private const int IncrementMB = 256;
private const int IncrementGB = 1;
public ThinProvisioningParametersControl()
{
InitializeComponent();
incremental_allocation_units.SelectedItem = previousUnitsValueIncrAlloc = Messages.VAL_MEGB;
initial_allocation_units.SelectedItem = previousUnitsValueInitAlloc = Messages.VAL_MEGB;
}
public SR SR
{
set
{
sr = value;
InitializeNumericUpDowns();
}
}
private long SRSize
{
get
{
if (sr != null)
return sr.physical_size;
return 0;
}
}
public Dictionary<string, string> SMConfig
{
get
{
var smconfig = new Dictionary<string, string>();
smconfig["allocation"] = "xlvhd";
smconfig["allocation_quantum"] = (incremental_allocation_units.SelectedItem.ToString() == Messages.VAL_MEGB ? (long)(allocationQuantumNumericUpDown.Value * Util.BINARY_MEGA)
: (long)(allocationQuantumNumericUpDown.Value * Util.BINARY_GIGA))
.ToString(CultureInfo.InvariantCulture);
smconfig["initial_allocation"] = (initial_allocation_units.SelectedItem.ToString() == Messages.VAL_MEGB ? (long)(initialAllocationNumericUpDown.Value * Util.BINARY_MEGA)
: (long)(initialAllocationNumericUpDown.Value * Util.BINARY_GIGA))
.ToString(CultureInfo.InvariantCulture);
return smconfig;
}
}
private void InitializeNumericUpDowns()
{
// Because we do not initialize the NumericUpDown with values from an existing sm_config
// the value passed to the setup functions is -1.
SetUpInitAllocationNumericUpDown(-1);
SetUpIncrAllocationNumericUpDown(-1);
}
// The value parameter is -1 if we do not use an existing SM Config. Otherwise
// it is the value of the initial_allocation in the SM config. The value received is in bytes.
private void SetUpInitAllocationNumericUpDown(decimal value)
{
Helpers.AllocationBounds allocBounds = Helpers.SRInitialAllocationBounds(SRSize);
if (value != -1)
{
allocBounds = new Helpers.AllocationBounds(allocBounds.Min, allocBounds.Max, value);
}
initial_allocation_units.SelectedItem = previousUnitsValueInitAlloc = allocBounds.Unit;
SetNumUpDownIncrementAndDecimals(initialAllocationNumericUpDown, allocBounds.Unit);
initialAllocationNumericUpDown.Minimum = allocBounds.MinInUnits;
initialAllocationNumericUpDown.Maximum = allocBounds.MaxInUnits;
initialAllocationNumericUpDown.Value = allocBounds.DefaultValueInUnits;
}
// The value parameter is -1 if we do not use an existing SM Config. Otherwise
// it is the value of the allocation_quantum in the SM config.
private void SetUpIncrAllocationNumericUpDown(decimal value)
{
Helpers.AllocationBounds allocBounds = Helpers.SRIncrementalAllocationBounds(SRSize);
if (value != -1)
{
allocBounds = new Helpers.AllocationBounds(allocBounds.Min, allocBounds.Max, value);
}
incremental_allocation_units.SelectedItem = previousUnitsValueInitAlloc = allocBounds.Unit;
SetNumUpDownIncrementAndDecimals(allocationQuantumNumericUpDown, allocBounds.Unit);
allocationQuantumNumericUpDown.Minimum = allocBounds.MinInUnits;
allocationQuantumNumericUpDown.Maximum = allocBounds.MaxInUnits;
allocationQuantumNumericUpDown.Value = allocBounds.DefaultValueInUnits;
}
private void SetNumUpDownIncrementAndDecimals(NumericUpDown upDown, string units)
{
if (units == Messages.VAL_GIGB)
{
upDown.DecimalPlaces = DecimalPlacesGB;
upDown.Increment = IncrementGB;
}
else
{
upDown.DecimalPlaces = DecimalPlacesMB;
upDown.Increment = IncrementMB;
}
}
public void SetControlsUsingExistingSMConfig(Dictionary<string, string> smConfig)
{
long temp = 0;
if (smConfig.ContainsKey("allocation") && smConfig["allocation"] == "xlvhd")
{
if (smConfig.ContainsKey("initial_allocation") && long.TryParse(smConfig["initial_allocation"], out temp))
SetUpInitAllocationNumericUpDown(temp);
if (smConfig.ContainsKey("allocation_quantum") && long.TryParse(smConfig["allocation_quantum"], out temp))
SetUpIncrAllocationNumericUpDown(temp);
}
}
private void initial_allocation_units_SelectedIndexChanged(object sender, EventArgs e)
{
UpdateValuesWhenUnitsChanged(initialAllocationNumericUpDown,
previousUnitsValueInitAlloc,
initial_allocation_units.SelectedItem.ToString());
previousUnitsValueInitAlloc = initial_allocation_units.SelectedItem.ToString();
}
private void incremental_allocation_units_SelectedIndexChanged(object sender, EventArgs e)
{
UpdateValuesWhenUnitsChanged(allocationQuantumNumericUpDown,
previousUnitsValueIncrAlloc,
incremental_allocation_units.SelectedItem.ToString());
previousUnitsValueIncrAlloc = incremental_allocation_units.SelectedItem.ToString();
}
public static void UpdateValuesWhenUnitsChanged(NumericUpDown upDown, string previousUnits, string newUnits)
{
if (previousUnits == newUnits)
return;
decimal min = upDown.Minimum;
decimal max = upDown.Maximum;
if (newUnits == Messages.VAL_MEGB)
{
upDown.Maximum *= Util.BINARY_KILO;
upDown.Value *= Util.BINARY_KILO;
upDown.Minimum *= Util.BINARY_KILO;
upDown.DecimalPlaces = DecimalPlacesMB;
upDown.Increment = IncrementMB;
}
else
{
upDown.Minimum /= Util.BINARY_KILO;
upDown.Value /= Util.BINARY_KILO;
upDown.Maximum /= Util.BINARY_KILO;
upDown.DecimalPlaces = DecimalPlacesGB;
upDown.Increment = IncrementGB;
}
}
}
}

View File

@ -0,0 +1,101 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 1.3
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">1.3</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object]
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object]
</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="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>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,120 @@
<?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>

View File

@ -0,0 +1,101 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 1.3
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">1.3</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object]
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object]
</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="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>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -38,18 +38,11 @@ namespace XenAdmin.Dialogs
this.OkButton = new System.Windows.Forms.Button();
this.panel2 = new System.Windows.Forms.Panel();
this.label6 = new System.Windows.Forms.Label();
this.labelAllocationQuantum = new System.Windows.Forms.Label();
this.labelInitialAllocation = new System.Windows.Forms.Label();
this.initialAllocationNumericUpDown = new System.Windows.Forms.NumericUpDown();
this.allocationQuantumNumericUpDown = new System.Windows.Forms.NumericUpDown();
this.label5 = new System.Windows.Forms.Label();
this.label7 = new System.Windows.Forms.Label();
this.queuedBackgroundWorker1 = new XenCenterLib.QueuedBackgroundWorker();
this.thinProvisioningParameters1 = new XenAdmin.Controls.ThinProvisioningParametersControl();
this.tableLayoutPanel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.panel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.initialAllocationNumericUpDown)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.allocationQuantumNumericUpDown)).BeginInit();
this.SuspendLayout();
//
// GbLabel
@ -65,12 +58,7 @@ namespace XenAdmin.Dialogs
this.tableLayoutPanel1.Controls.Add(this.panel1, 1, 8);
this.tableLayoutPanel1.Controls.Add(this.panel2, 2, 4);
this.tableLayoutPanel1.Controls.Add(this.label6, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.labelAllocationQuantum, 0, 3);
this.tableLayoutPanel1.Controls.Add(this.labelInitialAllocation, 0, 2);
this.tableLayoutPanel1.Controls.Add(this.initialAllocationNumericUpDown, 2, 2);
this.tableLayoutPanel1.Controls.Add(this.allocationQuantumNumericUpDown, 2, 3);
this.tableLayoutPanel1.Controls.Add(this.label5, 2, 2);
this.tableLayoutPanel1.Controls.Add(this.label7, 2, 3);
this.tableLayoutPanel1.Controls.Add(this.thinProvisioningParameters1, 0, 2);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
//
// labelWarning
@ -122,52 +110,11 @@ namespace XenAdmin.Dialogs
this.tableLayoutPanel1.SetColumnSpan(this.label6, 5);
this.label6.Name = "label6";
//
// labelAllocationQuantum
// thinProvisioningParameters1
//
resources.ApplyResources(this.labelAllocationQuantum, "labelAllocationQuantum");
this.tableLayoutPanel1.SetColumnSpan(this.labelAllocationQuantum, 2);
this.labelAllocationQuantum.Name = "labelAllocationQuantum";
//
// labelInitialAllocation
//
resources.ApplyResources(this.labelInitialAllocation, "labelInitialAllocation");
this.tableLayoutPanel1.SetColumnSpan(this.labelInitialAllocation, 2);
this.labelInitialAllocation.Name = "labelInitialAllocation";
//
// initialAllocationNumericUpDown
//
resources.ApplyResources(this.initialAllocationNumericUpDown, "initialAllocationNumericUpDown");
this.initialAllocationNumericUpDown.DecimalPlaces = 1;
this.initialAllocationNumericUpDown.Name = "initialAllocationNumericUpDown";
this.initialAllocationNumericUpDown.Value = new decimal(new int[] {
10,
0,
0,
0});
this.initialAllocationNumericUpDown.ValueChanged += new System.EventHandler(this.initialAllocationNumericUpDown_ValueChanged);
this.initialAllocationNumericUpDown.Enter += new System.EventHandler(this.initialAllocationNumericUpDown_Enter);
this.initialAllocationNumericUpDown.Leave += new System.EventHandler(this.initialAllocationNumericUpDown_Leave);
//
// allocationQuantumNumericUpDown
//
resources.ApplyResources(this.allocationQuantumNumericUpDown, "allocationQuantumNumericUpDown");
this.allocationQuantumNumericUpDown.DecimalPlaces = 1;
this.allocationQuantumNumericUpDown.Name = "allocationQuantumNumericUpDown";
this.allocationQuantumNumericUpDown.Value = new decimal(new int[] {
10,
0,
0,
0});
//
// label5
//
resources.ApplyResources(this.label5, "label5");
this.label5.Name = "label5";
//
// label7
//
resources.ApplyResources(this.label7, "label7");
this.label7.Name = "label7";
resources.ApplyResources(this.thinProvisioningParameters1, "thinProvisioningParameters1");
this.tableLayoutPanel1.SetColumnSpan(this.thinProvisioningParameters1, 5);
this.thinProvisioningParameters1.Name = "thinProvisioningParameters1";
//
// ConvertToThinSRDialog
//
@ -181,8 +128,6 @@ namespace XenAdmin.Dialogs
this.tableLayoutPanel1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.panel1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.initialAllocationNumericUpDown)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.allocationQuantumNumericUpDown)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
@ -195,17 +140,12 @@ namespace XenAdmin.Dialogs
private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.Label label6;
private XenCenterLib.QueuedBackgroundWorker queuedBackgroundWorker1;
private System.Windows.Forms.Label labelAllocationQuantum;
private System.Windows.Forms.Label labelInitialAllocation;
private System.Windows.Forms.NumericUpDown initialAllocationNumericUpDown;
private System.Windows.Forms.NumericUpDown allocationQuantumNumericUpDown;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.Label labelWarning;
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.FlowLayoutPanel panel1;
public System.Windows.Forms.Button CloseButton;
public System.Windows.Forms.Button OkButton;
private Controls.ThinProvisioningParametersControl thinProvisioningParameters1;
}
}

View File

@ -59,6 +59,7 @@ namespace XenAdmin.Dialogs
this.connection = connection;
TheSR = sr;
thinProvisioningParameters1.SR = TheSR;
this.Text = string.Format(Messages.ACTION_SR_UPGRADE_TO_THIN, TheSR.Name);
}
@ -68,17 +69,6 @@ namespace XenAdmin.Dialogs
this.Owner = Program.MainWindow;
}
private void LoadValues()
{
SetupDropDowns();
OkButton.Text = Messages.OK;
}
private void SetupDropDowns()
{
//todo set the defaults (this will have to be done after the API has been changed to use bytes instead of %
}
private void OkButton_Click(object sender, EventArgs e)
{
new XenAdmin.Actions.SrAction(SrActionKind.ConvertToThin, TheSR, NewSMConfig).RunAsync();
@ -91,52 +81,16 @@ namespace XenAdmin.Dialogs
{
get
{
var smconfig = new Dictionary<string, string>();
if (allocationQuantumNumericUpDown.Enabled && initialAllocationNumericUpDown.Enabled)
{
smconfig["allocation"] = "xlvhd";
smconfig["allocation_quantum"] = (allocationQuantumNumericUpDown.Value / 100).ToString(CultureInfo.InvariantCulture);
smconfig["initial_allocation"] = (initialAllocationNumericUpDown.Value / 100).ToString(CultureInfo.InvariantCulture);
}
return smconfig;
return thinProvisioningParameters1.SMConfig;
}
}
private void updateErrorsAndButtons()
{
if (this.TheSR == null)
return;
//todo gabor: check thin prov related values?
OkButton.Enabled = true;
}
private void CloseButton_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
}
bool userChangedInitialAllocationValue = false;
bool userEntered = false;
private void initialAllocationNumericUpDown_ValueChanged(object sender, EventArgs e)
{
if (userEntered)
userChangedInitialAllocationValue = true;
//if (userChangedInitialAllocationValue)
// UpdateDiskSize();
}
private void initialAllocationNumericUpDown_Enter(object sender, EventArgs e)
{
userEntered = true;
}
internal override string HelpName
{
get
@ -144,11 +98,5 @@ namespace XenAdmin.Dialogs
return "ConvertToThinSRDialog";
}
}
private void initialAllocationNumericUpDown_Leave(object sender, EventArgs e)
{
userEntered = false;
}
}
}

View File

@ -166,7 +166,7 @@
<value>NoControl</value>
</data>
<data name="labelWarning.Location" type="System.Drawing.Point, System.Drawing">
<value>31, 115</value>
<value>31, 127</value>
</data>
<data name="labelWarning.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 0</value>
@ -204,7 +204,7 @@
<value>NoControl</value>
</data>
<data name="pictureBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 115</value>
<value>3, 127</value>
</data>
<data name="pictureBox1.Size" type="System.Drawing.Size, System.Drawing">
<value>22, 27</value>
@ -330,7 +330,7 @@
<value>Segoe UI, 9pt</value>
</data>
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
<value>139, 100</value>
<value>121, 112</value>
</data>
<data name="panel2.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 0, 0, 0</value>
@ -392,210 +392,36 @@
<data name="&gt;&gt;label6.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="labelAllocationQuantum.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left</value>
</data>
<data name="labelAllocationQuantum.AutoSize" type="System.Boolean, mscorlib">
<data name="thinProvisioningParameters1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="labelAllocationQuantum.Font" type="System.Drawing.Font, System.Drawing">
<data name="thinProvisioningParameters1.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="thinProvisioningParameters1.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 9pt</value>
</data>
<data name="labelAllocationQuantum.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
<data name="thinProvisioningParameters1.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 45</value>
</data>
<data name="labelAllocationQuantum.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 78</value>
<data name="thinProvisioningParameters1.Size" type="System.Drawing.Size, System.Drawing">
<value>308, 64</value>
</data>
<data name="labelAllocationQuantum.Size" type="System.Drawing.Size, System.Drawing">
<value>133, 15</value>
<data name="thinProvisioningParameters1.TabIndex" type="System.Int32, mscorlib">
<value>23</value>
</data>
<data name="labelAllocationQuantum.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
<data name="&gt;&gt;thinProvisioningParameters1.Name" xml:space="preserve">
<value>thinProvisioningParameters1</value>
</data>
<data name="labelAllocationQuantum.Text" xml:space="preserve">
<value>In&amp;cremental allocations:</value>
<data name="&gt;&gt;thinProvisioningParameters1.Type" xml:space="preserve">
<value>XenAdmin.Controls.ThinProvisioningParameters, XenCenterMain, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;labelAllocationQuantum.Name" xml:space="preserve">
<value>labelAllocationQuantum</value>
</data>
<data name="&gt;&gt;labelAllocationQuantum.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;labelAllocationQuantum.Parent" xml:space="preserve">
<data name="&gt;&gt;thinProvisioningParameters1.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;labelAllocationQuantum.ZOrder" xml:space="preserve">
<data name="&gt;&gt;thinProvisioningParameters1.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="labelInitialAllocation.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left</value>
</data>
<data name="labelInitialAllocation.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="labelInitialAllocation.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 9pt</value>
</data>
<data name="labelInitialAllocation.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="labelInitialAllocation.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 49</value>
</data>
<data name="labelInitialAllocation.Size" type="System.Drawing.Size, System.Drawing">
<value>94, 15</value>
</data>
<data name="labelInitialAllocation.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
</data>
<data name="labelInitialAllocation.Text" xml:space="preserve">
<value>&amp;Initial allocation:</value>
</data>
<data name="&gt;&gt;labelInitialAllocation.Name" xml:space="preserve">
<value>labelInitialAllocation</value>
</data>
<data name="&gt;&gt;labelInitialAllocation.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;labelInitialAllocation.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;labelInitialAllocation.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="initialAllocationNumericUpDown.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left</value>
</data>
<data name="initialAllocationNumericUpDown.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 9pt</value>
</data>
<data name="initialAllocationNumericUpDown.Location" type="System.Drawing.Point, System.Drawing">
<value>139, 45</value>
</data>
<data name="initialAllocationNumericUpDown.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 3, 3, 3</value>
</data>
<data name="initialAllocationNumericUpDown.Size" type="System.Drawing.Size, System.Drawing">
<value>105, 23</value>
</data>
<data name="initialAllocationNumericUpDown.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
</data>
<data name="initialAllocationNumericUpDown.TextAlign" type="System.Windows.Forms.HorizontalAlignment, System.Windows.Forms">
<value>Right</value>
</data>
<data name="&gt;&gt;initialAllocationNumericUpDown.Name" xml:space="preserve">
<value>initialAllocationNumericUpDown</value>
</data>
<data name="&gt;&gt;initialAllocationNumericUpDown.Type" xml:space="preserve">
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;initialAllocationNumericUpDown.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;initialAllocationNumericUpDown.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="allocationQuantumNumericUpDown.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left</value>
</data>
<data name="allocationQuantumNumericUpDown.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 9pt</value>
</data>
<data name="allocationQuantumNumericUpDown.Location" type="System.Drawing.Point, System.Drawing">
<value>139, 74</value>
</data>
<data name="allocationQuantumNumericUpDown.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 3, 3, 3</value>
</data>
<data name="allocationQuantumNumericUpDown.Size" type="System.Drawing.Size, System.Drawing">
<value>105, 23</value>
</data>
<data name="allocationQuantumNumericUpDown.TabIndex" type="System.Int32, mscorlib">
<value>14</value>
</data>
<data name="allocationQuantumNumericUpDown.TextAlign" type="System.Windows.Forms.HorizontalAlignment, System.Windows.Forms">
<value>Right</value>
</data>
<data name="&gt;&gt;allocationQuantumNumericUpDown.Name" xml:space="preserve">
<value>allocationQuantumNumericUpDown</value>
</data>
<data name="&gt;&gt;allocationQuantumNumericUpDown.Type" xml:space="preserve">
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;allocationQuantumNumericUpDown.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;allocationQuantumNumericUpDown.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="label5.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left</value>
</data>
<data name="label5.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label5.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 9pt</value>
</data>
<data name="label5.Location" type="System.Drawing.Point, System.Drawing">
<value>250, 49</value>
</data>
<data name="label5.Size" type="System.Drawing.Size, System.Drawing">
<value>17, 15</value>
</data>
<data name="label5.TabIndex" type="System.Int32, mscorlib">
<value>16</value>
</data>
<data name="label5.Text" xml:space="preserve">
<value>%</value>
</data>
<data name="&gt;&gt;label5.Name" xml:space="preserve">
<value>label5</value>
</data>
<data name="&gt;&gt;label5.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label5.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;label5.ZOrder" xml:space="preserve">
<value>9</value>
</data>
<data name="label7.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left</value>
</data>
<data name="label7.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label7.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 9pt</value>
</data>
<data name="label7.Location" type="System.Drawing.Point, System.Drawing">
<value>250, 78</value>
</data>
<data name="label7.Size" type="System.Drawing.Size, System.Drawing">
<value>17, 15</value>
</data>
<data name="label7.TabIndex" type="System.Int32, mscorlib">
<value>17</value>
</data>
<data name="label7.Text" xml:space="preserve">
<value>%</value>
</data>
<data name="&gt;&gt;label7.Name" xml:space="preserve">
<value>label7</value>
</data>
<data name="&gt;&gt;label7.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label7.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;label7.ZOrder" xml:space="preserve">
<value>10</value>
</data>
<data name="tableLayoutPanel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
@ -606,7 +432,7 @@
<value>12, 12</value>
</data>
<data name="tableLayoutPanel1.RowCount" type="System.Int32, mscorlib">
<value>7</value>
<value>10</value>
</data>
<data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
<value>550, 188</value>
@ -627,7 +453,7 @@
<value>0</value>
</data>
<data name="tableLayoutPanel1.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="labelWarning" Row="5" RowSpan="1" Column="1" ColumnSpan="4" /&gt;&lt;Control Name="pictureBox1" Row="5" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="panel1" Row="8" RowSpan="1" Column="1" ColumnSpan="5" /&gt;&lt;Control Name="panel2" Row="4" RowSpan="1" Column="2" ColumnSpan="2" /&gt;&lt;Control Name="label6" Row="1" RowSpan="1" Column="0" ColumnSpan="5" /&gt;&lt;Control Name="labelAllocationQuantum" Row="3" RowSpan="1" Column="0" ColumnSpan="2" /&gt;&lt;Control Name="labelInitialAllocation" Row="2" RowSpan="1" Column="0" ColumnSpan="2" /&gt;&lt;Control Name="initialAllocationNumericUpDown" Row="2" RowSpan="1" Column="2" ColumnSpan="1" /&gt;&lt;Control Name="allocationQuantumNumericUpDown" Row="3" RowSpan="1" Column="2" ColumnSpan="1" /&gt;&lt;Control Name="label5" Row="2" RowSpan="1" Column="2" ColumnSpan="1" /&gt;&lt;Control Name="label7" Row="3" RowSpan="1" Column="2" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,Percent,100" /&gt;&lt;Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,Absolute,12,AutoSize,0,AutoSize,0,Percent,100,AutoSize,0,AutoSize,0" /&gt;&lt;/TableLayoutSettings&gt;</value>
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="labelWarning" Row="5" RowSpan="1" Column="1" ColumnSpan="4" /&gt;&lt;Control Name="pictureBox1" Row="5" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="panel1" Row="8" RowSpan="1" Column="1" ColumnSpan="5" /&gt;&lt;Control Name="panel2" Row="4" RowSpan="1" Column="2" ColumnSpan="2" /&gt;&lt;Control Name="label6" Row="1" RowSpan="1" Column="0" ColumnSpan="5" /&gt;&lt;Control Name="thinProvisioningParameters1" Row="2" RowSpan="1" Column="0" ColumnSpan="5" /&gt;&lt;/Controls&gt;&lt;Columns Styles="AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,Percent,100" /&gt;&lt;Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,Absolute,12,AutoSize,0,AutoSize,0,Percent,100,AutoSize,0,AutoSize,0,Absolute,20" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<metadata name="queuedBackgroundWorker1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>

View File

@ -167,6 +167,12 @@
<SubType>Component</SubType>
</Compile>
<Compile Include="Controls\CustomGridView\GridTreeExpanderItem.cs" />
<Compile Include="Controls\ThinProvisioningParametersControl.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Controls\ThinProvisioningParametersControl.Designer.cs">
<DependentUpon>ThinProvisioningParametersControl.cs</DependentUpon>
</Compile>
<Compile Include="Controls\NonReopeningContextMenuStrip.cs">
<SubType>Component</SubType>
</Compile>
@ -1384,6 +1390,15 @@
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Controls\ThinProvisioningParametersControl.ja.resx">
<DependentUpon>ThinProvisioningParametersControl.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Controls\ThinProvisioningParametersControl.resx">
<DependentUpon>ThinProvisioningParametersControl.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Controls\ThinProvisioningParametersControl.zh-CN.resx">
<DependentUpon>ThinProvisioningParametersControl.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Dialogs\CommandErrorDialog.resx">
<SubType>Designer</SubType>
<DependentUpon>CommandErrorDialog.cs</DependentUpon>