mirror of
https://github.com/xcp-ng/xenadmin.git
synced 2025-01-20 07:19:18 +01:00
Added a themed tab control. Added CI to project.
This commit is contained in:
parent
7be8f35ff4
commit
58e750ffae
36
.github/workflows/test-builds.yml
vendored
Normal file
36
.github/workflows/test-builds.yml
vendored
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
name: Test Builds
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
push:
|
||||||
|
branches: [ development ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ development ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: windows-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Setup MSBuild
|
||||||
|
uses: microsoft/setup-msbuild@v1
|
||||||
|
- name: Setup NuGet
|
||||||
|
uses: NuGet/setup-nuget@v1.0.5
|
||||||
|
- name: setup-msbuild
|
||||||
|
uses: microsoft/setup-msbuild@v1.1
|
||||||
|
- name: Restore Packages
|
||||||
|
run: nuget restore MySolution.sln
|
||||||
|
- name: Build Release solution
|
||||||
|
run: msbuild XenAdmin.sln -property:Configuration=Debug
|
||||||
|
- name: Build Debug solution
|
||||||
|
run: msbuild XenAdmin.sln -property:Configuration=Release
|
||||||
|
- name: Upload Release Artifacts
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: drop-release
|
||||||
|
path: XenAdmin/bin/Release/net481
|
||||||
|
- name: Upload Debug Artifacts
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: drop-debug
|
||||||
|
path: XenAdmin/bin/Debug/net481
|
1361
XenAdmin/Controls/TabControl/CustomTabControl.cs
Normal file
1361
XenAdmin/Controls/TabControl/CustomTabControl.cs
Normal file
File diff suppressed because it is too large
Load Diff
255
XenAdmin/Controls/TabControl/NativeMethods.cs
Normal file
255
XenAdmin/Controls/TabControl/NativeMethods.cs
Normal file
@ -0,0 +1,255 @@
|
|||||||
|
/* Copyright (c) XCP-ng Project.
|
||||||
|
*
|
||||||
|
* 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.Diagnostics.CodeAnalysis;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace XenAdmin.Controls.TabControl
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Description of NativeMethods.
|
||||||
|
/// </summary>
|
||||||
|
//[SecurityPermission(SecurityAction.Assert, Flags=SecurityPermissionFlag.UnmanagedCode)]
|
||||||
|
internal sealed class NativeMethods
|
||||||
|
{
|
||||||
|
private NativeMethods()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
#region User32.dll
|
||||||
|
|
||||||
|
// [DllImport("user32.dll"), SecurityPermission(SecurityAction.Demand)]
|
||||||
|
// public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 msg, IntPtr wParam, IntPtr lParam);
|
||||||
|
|
||||||
|
public static IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam)
|
||||||
|
{
|
||||||
|
// This Method replaces the User32 method SendMessage, but will only work for sending
|
||||||
|
// messages to Managed controls.
|
||||||
|
var control = Control.FromHandle(hWnd);
|
||||||
|
if (control == null) return IntPtr.Zero;
|
||||||
|
|
||||||
|
var message = new Message();
|
||||||
|
message.HWnd = hWnd;
|
||||||
|
message.LParam = lParam;
|
||||||
|
message.WParam = wParam;
|
||||||
|
message.Msg = msg;
|
||||||
|
|
||||||
|
var wproc = control.GetType().GetMethod("WndProc"
|
||||||
|
, BindingFlags.NonPublic
|
||||||
|
| BindingFlags.InvokeMethod
|
||||||
|
| BindingFlags.FlattenHierarchy
|
||||||
|
| BindingFlags.IgnoreCase
|
||||||
|
| BindingFlags.Instance);
|
||||||
|
|
||||||
|
object[] args = { message };
|
||||||
|
wproc.Invoke(control, args);
|
||||||
|
|
||||||
|
return ((Message)args[0]).Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// [DllImport("user32.dll")]
|
||||||
|
// public static extern IntPtr BeginPaint(IntPtr hWnd, ref PAINTSTRUCT paintStruct);
|
||||||
|
//
|
||||||
|
// [DllImport("user32.dll")]
|
||||||
|
// [return: MarshalAs(UnmanagedType.Bool)]
|
||||||
|
// public static extern bool EndPaint(IntPtr hWnd, ref PAINTSTRUCT paintStruct);
|
||||||
|
//
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Windows Constants
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
|
||||||
|
public const int WM_GETTABRECT = 0x130a;
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
|
||||||
|
public const int WS_EX_TRANSPARENT = 0x20;
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
|
||||||
|
public const int WM_SETFONT = 0x30;
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
|
||||||
|
public const int WM_FONTCHANGE = 0x1d;
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
|
||||||
|
public const int WM_HSCROLL = 0x114;
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
|
||||||
|
public const int TCM_HITTEST = 0x130D;
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
|
||||||
|
public const int WM_PAINT = 0xf;
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
|
||||||
|
public const int WS_EX_LAYOUTRTL = 0x400000;
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
|
||||||
|
public const int WS_EX_NOINHERITLAYOUT = 0x100000;
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Content Alignment
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
|
||||||
|
public static readonly ContentAlignment AnyRightAlign =
|
||||||
|
ContentAlignment.BottomRight | ContentAlignment.MiddleRight | ContentAlignment.TopRight;
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
|
||||||
|
public static readonly ContentAlignment AnyLeftAlign =
|
||||||
|
ContentAlignment.BottomLeft | ContentAlignment.MiddleLeft | ContentAlignment.TopLeft;
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
|
||||||
|
public static readonly ContentAlignment AnyTopAlign =
|
||||||
|
ContentAlignment.TopRight | ContentAlignment.TopCenter | ContentAlignment.TopLeft;
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
|
||||||
|
public static readonly ContentAlignment AnyBottomAlign =
|
||||||
|
ContentAlignment.BottomRight | ContentAlignment.BottomCenter | ContentAlignment.BottomLeft;
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
|
||||||
|
public static readonly ContentAlignment AnyMiddleAlign =
|
||||||
|
ContentAlignment.MiddleRight | ContentAlignment.MiddleCenter | ContentAlignment.MiddleLeft;
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
|
||||||
|
public static readonly ContentAlignment AnyCenterAlign =
|
||||||
|
ContentAlignment.BottomCenter | ContentAlignment.MiddleCenter | ContentAlignment.TopCenter;
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Misc Functions
|
||||||
|
|
||||||
|
public static int LoWord(IntPtr dWord)
|
||||||
|
{
|
||||||
|
return dWord.ToInt32() & 0xffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int HiWord(IntPtr dWord)
|
||||||
|
{
|
||||||
|
if ((dWord.ToInt32() & 0x80000000) == 0x80000000)
|
||||||
|
return dWord.ToInt32() >> 16;
|
||||||
|
return (dWord.ToInt32() >> 16) & 0xffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Security", "CA2106:SecureAsserts")]
|
||||||
|
[SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")]
|
||||||
|
public static IntPtr ToIntPtr(object structure)
|
||||||
|
{
|
||||||
|
var lparam = IntPtr.Zero;
|
||||||
|
lparam = Marshal.AllocCoTaskMem(Marshal.SizeOf(structure));
|
||||||
|
Marshal.StructureToPtr(structure, lparam, false);
|
||||||
|
return lparam;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Windows Structures and Enums
|
||||||
|
|
||||||
|
[Flags]
|
||||||
|
public enum TCHITTESTFLAGS
|
||||||
|
{
|
||||||
|
TCHT_NOWHERE = 1,
|
||||||
|
TCHT_ONITEMICON = 2,
|
||||||
|
TCHT_ONITEMLABEL = 4,
|
||||||
|
TCHT_ONITEM = TCHT_ONITEMICON | TCHT_ONITEMLABEL
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct TCHITTESTINFO
|
||||||
|
{
|
||||||
|
public TCHITTESTINFO(Point location)
|
||||||
|
{
|
||||||
|
pt = location;
|
||||||
|
flags = TCHITTESTFLAGS.TCHT_ONITEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Point pt;
|
||||||
|
public TCHITTESTFLAGS flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential, Pack = 4)]
|
||||||
|
public struct PAINTSTRUCT
|
||||||
|
{
|
||||||
|
public IntPtr hdc;
|
||||||
|
public int fErase;
|
||||||
|
public RECT rcPaint;
|
||||||
|
public int fRestore;
|
||||||
|
public int fIncUpdate;
|
||||||
|
|
||||||
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
|
||||||
|
public byte[] rgbReserved;
|
||||||
|
}
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct RECT
|
||||||
|
{
|
||||||
|
public int left;
|
||||||
|
public int top;
|
||||||
|
public int right;
|
||||||
|
public int bottom;
|
||||||
|
|
||||||
|
public RECT(int left, int top, int right, int bottom)
|
||||||
|
{
|
||||||
|
this.left = left;
|
||||||
|
this.top = top;
|
||||||
|
this.right = right;
|
||||||
|
this.bottom = bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RECT(Rectangle r)
|
||||||
|
{
|
||||||
|
left = r.Left;
|
||||||
|
top = r.Top;
|
||||||
|
right = r.Right;
|
||||||
|
bottom = r.Bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RECT FromXYWH(int x, int y, int width, int height)
|
||||||
|
{
|
||||||
|
return new RECT(x, y, x + width, y + height);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RECT FromIntPtr(IntPtr ptr)
|
||||||
|
{
|
||||||
|
var rect = (RECT)Marshal.PtrToStructure(ptr, typeof(RECT));
|
||||||
|
return rect;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Size Size => new Size(right - left, bottom - top);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
38
XenAdmin/Controls/TabControl/TabStyle.cs
Normal file
38
XenAdmin/Controls/TabControl/TabStyle.cs
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/* Copyright (c) XCP-ng Project.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace XenAdmin.Controls.TabControl
|
||||||
|
{
|
||||||
|
public enum TabStyle
|
||||||
|
{
|
||||||
|
Default = 0,
|
||||||
|
Angled = 1
|
||||||
|
}
|
||||||
|
}
|
664
XenAdmin/Controls/TabControl/TabStyleProvider.cs
Normal file
664
XenAdmin/Controls/TabControl/TabStyleProvider.cs
Normal file
@ -0,0 +1,664 @@
|
|||||||
|
/* Copyright (c) XCP-ng Project.
|
||||||
|
*
|
||||||
|
* 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.ComponentModel;
|
||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Drawing.Drawing2D;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using XenAdmin.Controls.TabControl.TabStyleProviders;
|
||||||
|
|
||||||
|
namespace XenAdmin.Controls.TabControl
|
||||||
|
{
|
||||||
|
[ToolboxItem(false)]
|
||||||
|
public abstract class TabStyleProvider : Component
|
||||||
|
{
|
||||||
|
#region Constructor
|
||||||
|
|
||||||
|
protected TabStyleProvider(CustomTabControl tabControl)
|
||||||
|
{
|
||||||
|
_TabControl = tabControl;
|
||||||
|
|
||||||
|
_BorderColor = Color.Empty;
|
||||||
|
_BorderColorSelected = Color.Empty;
|
||||||
|
_FocusColor = Color.Orange;
|
||||||
|
|
||||||
|
if (_TabControl.RightToLeftLayout)
|
||||||
|
_ImageAlign = ContentAlignment.MiddleRight;
|
||||||
|
else
|
||||||
|
_ImageAlign = ContentAlignment.MiddleLeft;
|
||||||
|
|
||||||
|
HotTrack = true;
|
||||||
|
|
||||||
|
// Must set after the _Overlap as this is used in the calculations of the actual padding
|
||||||
|
Padding = new Point(6, 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Factory Methods
|
||||||
|
|
||||||
|
public static TabStyleProvider CreateProvider(CustomTabControl tabControl)
|
||||||
|
{
|
||||||
|
TabStyleProvider provider;
|
||||||
|
|
||||||
|
// Depending on the display style of the tabControl generate an appropriate provider.
|
||||||
|
switch (tabControl.DisplayStyle)
|
||||||
|
{
|
||||||
|
case TabStyle.Default:
|
||||||
|
provider = new TabStyleDefaultProvider(tabControl);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TabStyle.Angled:
|
||||||
|
provider = new TabStyleAngledProvider(tabControl);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
provider = new TabStyleDefaultProvider(tabControl);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
provider._Style = tabControl.DisplayStyle;
|
||||||
|
return provider;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Tab border and rect
|
||||||
|
|
||||||
|
public GraphicsPath GetTabBorder(int index)
|
||||||
|
{
|
||||||
|
var path = new GraphicsPath();
|
||||||
|
var tabBounds = GetTabRect(index);
|
||||||
|
|
||||||
|
AddTabBorder(path, tabBounds);
|
||||||
|
|
||||||
|
path.CloseFigure();
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Protected variables
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
|
||||||
|
protected CustomTabControl _TabControl;
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
|
||||||
|
protected Point _Padding;
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
|
||||||
|
protected bool _HotTrack;
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
|
||||||
|
protected TabStyle _Style = TabStyle.Default;
|
||||||
|
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
|
||||||
|
protected ContentAlignment _ImageAlign;
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
|
||||||
|
protected int _Radius = 1;
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
|
||||||
|
protected int _Overlap;
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
|
||||||
|
protected bool _FocusTrack;
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
|
||||||
|
protected float _Opacity = 1;
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
|
||||||
|
protected Color _BorderColorSelected = Color.Empty;
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
|
||||||
|
protected Color _BorderColor = Color.Empty;
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
|
||||||
|
protected Color _BorderColorHot = Color.Empty;
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
|
||||||
|
protected Color _FocusColor = Color.Empty;
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
|
||||||
|
protected Color _TextColor = Color.Empty;
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
|
||||||
|
protected Color _TextColorSelected = Color.Empty;
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields")]
|
||||||
|
protected Color _TextColorDisabled = Color.Empty;
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region overridable Methods
|
||||||
|
|
||||||
|
public abstract void AddTabBorder(GraphicsPath path, Rectangle tabBounds);
|
||||||
|
|
||||||
|
public virtual Rectangle GetTabRect(int index)
|
||||||
|
{
|
||||||
|
if (index < 0) return new Rectangle();
|
||||||
|
var tabBounds = _TabControl.GetTabRect(index);
|
||||||
|
if (_TabControl.RightToLeftLayout) tabBounds.X = _TabControl.Width - tabBounds.Right;
|
||||||
|
var firstTabinRow = _TabControl.IsFirstTabInRow(index);
|
||||||
|
|
||||||
|
// Expand to overlap the tabpage
|
||||||
|
switch (_TabControl.Alignment)
|
||||||
|
{
|
||||||
|
case TabAlignment.Top:
|
||||||
|
tabBounds.Height += 2;
|
||||||
|
break;
|
||||||
|
case TabAlignment.Bottom:
|
||||||
|
tabBounds.Height += 2;
|
||||||
|
tabBounds.Y -= 2;
|
||||||
|
break;
|
||||||
|
case TabAlignment.Left:
|
||||||
|
tabBounds.Width += 2;
|
||||||
|
break;
|
||||||
|
case TabAlignment.Right:
|
||||||
|
tabBounds.X -= 2;
|
||||||
|
tabBounds.Width += 2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Greate Overlap unless first tab in the row to align with tabpage
|
||||||
|
if ((!firstTabinRow || _TabControl.RightToLeftLayout) && _Overlap > 0)
|
||||||
|
{
|
||||||
|
if (_TabControl.Alignment <= TabAlignment.Bottom)
|
||||||
|
{
|
||||||
|
tabBounds.X -= _Overlap;
|
||||||
|
tabBounds.Width += _Overlap;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tabBounds.Y -= _Overlap;
|
||||||
|
tabBounds.Height += _Overlap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Adjust first tab in the row to align with tabpage
|
||||||
|
EnsureFirstTabIsInView(ref tabBounds, index);
|
||||||
|
|
||||||
|
return tabBounds;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Design", "CA1045:DoNotPassTypesByReference", MessageId = "0#")]
|
||||||
|
protected virtual void EnsureFirstTabIsInView(ref Rectangle tabBounds, int index)
|
||||||
|
{
|
||||||
|
// Adjust first tab in the row to align with tabpage
|
||||||
|
// Make sure we only reposition visible tabs, as we may have scrolled out of view.
|
||||||
|
|
||||||
|
var firstTabinRow = _TabControl.IsFirstTabInRow(index);
|
||||||
|
|
||||||
|
if (firstTabinRow)
|
||||||
|
{
|
||||||
|
if (_TabControl.Alignment <= TabAlignment.Bottom)
|
||||||
|
{
|
||||||
|
if (_TabControl.RightToLeftLayout)
|
||||||
|
{
|
||||||
|
if (tabBounds.Left < _TabControl.Right)
|
||||||
|
{
|
||||||
|
var tabPageRight = _TabControl.GetPageBounds(index).Right;
|
||||||
|
if (tabBounds.Right > tabPageRight) tabBounds.Width -= tabBounds.Right - tabPageRight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (tabBounds.Right > 0)
|
||||||
|
{
|
||||||
|
var tabPageX = _TabControl.GetPageBounds(index).X;
|
||||||
|
if (tabBounds.X < tabPageX)
|
||||||
|
{
|
||||||
|
tabBounds.Width -= tabPageX - tabBounds.X;
|
||||||
|
tabBounds.X = tabPageX;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (_TabControl.RightToLeftLayout)
|
||||||
|
{
|
||||||
|
if (tabBounds.Top < _TabControl.Bottom)
|
||||||
|
{
|
||||||
|
var tabPageBottom = _TabControl.GetPageBounds(index).Bottom;
|
||||||
|
if (tabBounds.Bottom > tabPageBottom) tabBounds.Height -= tabBounds.Bottom - tabPageBottom;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (tabBounds.Bottom > 0)
|
||||||
|
{
|
||||||
|
var tabPageY = _TabControl.GetPageBounds(index).Location.Y;
|
||||||
|
if (tabBounds.Y < tabPageY)
|
||||||
|
{
|
||||||
|
tabBounds.Height -= tabPageY - tabBounds.Y;
|
||||||
|
tabBounds.Y = tabPageY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual Brush GetTabBackgroundBrush(int index)
|
||||||
|
{
|
||||||
|
LinearGradientBrush fillBrush = null;
|
||||||
|
|
||||||
|
// Capture the colours dependant on selection state of the tab
|
||||||
|
var dark = Color.FromArgb(207, 207, 207);
|
||||||
|
var light = Color.FromArgb(242, 242, 242);
|
||||||
|
|
||||||
|
if (_TabControl.SelectedIndex == index)
|
||||||
|
{
|
||||||
|
dark = SystemColors.ControlLight;
|
||||||
|
light = SystemColors.Window;
|
||||||
|
}
|
||||||
|
else if (!_TabControl.TabPages[index].Enabled)
|
||||||
|
{
|
||||||
|
light = dark;
|
||||||
|
}
|
||||||
|
else if (_HotTrack && index == _TabControl.ActiveIndex)
|
||||||
|
{
|
||||||
|
// Enable hot tracking
|
||||||
|
light = Color.FromArgb(234, 246, 253);
|
||||||
|
dark = Color.FromArgb(167, 217, 245);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the correctly aligned gradient
|
||||||
|
var tabBounds = GetTabRect(index);
|
||||||
|
tabBounds.Inflate(3, 3);
|
||||||
|
tabBounds.X -= 1;
|
||||||
|
tabBounds.Y -= 1;
|
||||||
|
switch (_TabControl.Alignment)
|
||||||
|
{
|
||||||
|
case TabAlignment.Top:
|
||||||
|
if (_TabControl.SelectedIndex == index) dark = light;
|
||||||
|
fillBrush = new LinearGradientBrush(tabBounds, light, dark, LinearGradientMode.Vertical);
|
||||||
|
break;
|
||||||
|
case TabAlignment.Bottom:
|
||||||
|
fillBrush = new LinearGradientBrush(tabBounds, light, dark, LinearGradientMode.Vertical);
|
||||||
|
break;
|
||||||
|
case TabAlignment.Left:
|
||||||
|
fillBrush = new LinearGradientBrush(tabBounds, dark, light, LinearGradientMode.Horizontal);
|
||||||
|
break;
|
||||||
|
case TabAlignment.Right:
|
||||||
|
fillBrush = new LinearGradientBrush(tabBounds, light, dark, LinearGradientMode.Horizontal);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the blend
|
||||||
|
fillBrush.Blend = GetBackgroundBlend();
|
||||||
|
|
||||||
|
return fillBrush;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Base Properties
|
||||||
|
|
||||||
|
[Browsable(false)]
|
||||||
|
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
||||||
|
public TabStyle DisplayStyle
|
||||||
|
{
|
||||||
|
get => _Style;
|
||||||
|
set => _Style = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Category("Appearance")]
|
||||||
|
public ContentAlignment ImageAlign
|
||||||
|
{
|
||||||
|
get => _ImageAlign;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_ImageAlign = value;
|
||||||
|
_TabControl.Invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Category("Appearance")]
|
||||||
|
public Point Padding
|
||||||
|
{
|
||||||
|
get => _Padding;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_Padding = value;
|
||||||
|
// This line will trigger the handle to recreate, therefore invalidating the control
|
||||||
|
|
||||||
|
if (value.X + _Radius / 2 < 1)
|
||||||
|
((System.Windows.Forms.TabControl)_TabControl).Padding = new Point(0, value.Y);
|
||||||
|
else
|
||||||
|
((System.Windows.Forms.TabControl)_TabControl).Padding =
|
||||||
|
new Point(value.X + _Radius / 2 - 1, value.Y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[Category("Appearance")]
|
||||||
|
[DefaultValue(1)]
|
||||||
|
[Browsable(true)]
|
||||||
|
public int Radius
|
||||||
|
{
|
||||||
|
get => _Radius;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value < 1) throw new ArgumentException("The radius must be greater than 1", "value");
|
||||||
|
_Radius = value;
|
||||||
|
// Adjust padding
|
||||||
|
Padding = _Padding;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Category("Appearance")]
|
||||||
|
public int Overlap
|
||||||
|
{
|
||||||
|
get => _Overlap;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value < 0) throw new ArgumentException("The tabs cannot have a negative overlap", "value");
|
||||||
|
_Overlap = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[Category("Appearance")]
|
||||||
|
public bool FocusTrack
|
||||||
|
{
|
||||||
|
get => _FocusTrack;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_FocusTrack = value;
|
||||||
|
_TabControl.Invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Category("Appearance")]
|
||||||
|
public bool HotTrack
|
||||||
|
{
|
||||||
|
get => _HotTrack;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_HotTrack = value;
|
||||||
|
((System.Windows.Forms.TabControl)_TabControl).HotTrack = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Category("Appearance")]
|
||||||
|
public float Opacity
|
||||||
|
{
|
||||||
|
get => _Opacity;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value < 0) throw new ArgumentException("The opacity must be between 0 and 1", "value");
|
||||||
|
if (value > 1) throw new ArgumentException("The opacity must be between 0 and 1", "value");
|
||||||
|
_Opacity = value;
|
||||||
|
_TabControl.Invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Category("Appearance")]
|
||||||
|
[DefaultValue(typeof(Color), "")]
|
||||||
|
public Color BorderColorSelected
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_BorderColorSelected.IsEmpty)
|
||||||
|
return ThemedColors.ToolBorder;
|
||||||
|
return _BorderColorSelected;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value.Equals(ThemedColors.ToolBorder))
|
||||||
|
_BorderColorSelected = Color.Empty;
|
||||||
|
else
|
||||||
|
_BorderColorSelected = value;
|
||||||
|
_TabControl.Invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Category("Appearance")]
|
||||||
|
[DefaultValue(typeof(Color), "")]
|
||||||
|
public Color BorderColorHot
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_BorderColorHot.IsEmpty)
|
||||||
|
return SystemColors.ControlDark;
|
||||||
|
return _BorderColorHot;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value.Equals(SystemColors.ControlDark))
|
||||||
|
_BorderColorHot = Color.Empty;
|
||||||
|
else
|
||||||
|
_BorderColorHot = value;
|
||||||
|
_TabControl.Invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Category("Appearance")]
|
||||||
|
[DefaultValue(typeof(Color), "")]
|
||||||
|
public Color BorderColor
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_BorderColor.IsEmpty)
|
||||||
|
return SystemColors.ControlDark;
|
||||||
|
return _BorderColor;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value.Equals(SystemColors.ControlDark))
|
||||||
|
_BorderColor = Color.Empty;
|
||||||
|
else
|
||||||
|
_BorderColor = value;
|
||||||
|
_TabControl.Invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Category("Appearance")]
|
||||||
|
[DefaultValue(typeof(Color), "")]
|
||||||
|
public Color TextColor
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_TextColor.IsEmpty)
|
||||||
|
return SystemColors.ControlText;
|
||||||
|
return _TextColor;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value.Equals(SystemColors.ControlText))
|
||||||
|
_TextColor = Color.Empty;
|
||||||
|
else
|
||||||
|
_TextColor = value;
|
||||||
|
_TabControl.Invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Category("Appearance")]
|
||||||
|
[DefaultValue(typeof(Color), "")]
|
||||||
|
public Color TextColorSelected
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_TextColorSelected.IsEmpty)
|
||||||
|
return SystemColors.ControlText;
|
||||||
|
return _TextColorSelected;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value.Equals(SystemColors.ControlText))
|
||||||
|
_TextColorSelected = Color.Empty;
|
||||||
|
else
|
||||||
|
_TextColorSelected = value;
|
||||||
|
_TabControl.Invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Category("Appearance")]
|
||||||
|
[DefaultValue(typeof(Color), "")]
|
||||||
|
public Color TextColorDisabled
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_TextColor.IsEmpty)
|
||||||
|
return SystemColors.ControlDark;
|
||||||
|
return _TextColorDisabled;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value.Equals(SystemColors.ControlDark))
|
||||||
|
_TextColorDisabled = Color.Empty;
|
||||||
|
else
|
||||||
|
_TextColorDisabled = value;
|
||||||
|
_TabControl.Invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[Category("Appearance")]
|
||||||
|
[DefaultValue(typeof(Color), "Orange")]
|
||||||
|
public Color FocusColor
|
||||||
|
{
|
||||||
|
get => _FocusColor;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_FocusColor = value;
|
||||||
|
_TabControl.Invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Painting
|
||||||
|
|
||||||
|
public void PaintTab(int index, Graphics graphics)
|
||||||
|
{
|
||||||
|
using (var tabpath = GetTabBorder(index))
|
||||||
|
{
|
||||||
|
using (var fillBrush = GetTabBackgroundBrush(index))
|
||||||
|
{
|
||||||
|
// Paint the background
|
||||||
|
graphics.FillPath(fillBrush, tabpath);
|
||||||
|
|
||||||
|
// Paint a focus indication
|
||||||
|
if (_TabControl.Focused) DrawTabFocusIndicator(tabpath, index, graphics);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DrawTabFocusIndicator(GraphicsPath tabpath, int index, Graphics graphics)
|
||||||
|
{
|
||||||
|
if (_FocusTrack && _TabControl.Focused && index == _TabControl.SelectedIndex)
|
||||||
|
{
|
||||||
|
Brush focusBrush = null;
|
||||||
|
var pathRect = tabpath.GetBounds();
|
||||||
|
var focusRect = Rectangle.Empty;
|
||||||
|
switch (_TabControl.Alignment)
|
||||||
|
{
|
||||||
|
case TabAlignment.Top:
|
||||||
|
focusRect = new Rectangle((int)pathRect.X, (int)pathRect.Y, (int)pathRect.Width, 4);
|
||||||
|
focusBrush = new LinearGradientBrush(focusRect, _FocusColor, SystemColors.Window,
|
||||||
|
LinearGradientMode.Vertical);
|
||||||
|
break;
|
||||||
|
case TabAlignment.Bottom:
|
||||||
|
focusRect = new Rectangle((int)pathRect.X, (int)pathRect.Bottom - 4, (int)pathRect.Width, 4);
|
||||||
|
focusBrush = new LinearGradientBrush(focusRect, SystemColors.ControlLight, _FocusColor,
|
||||||
|
LinearGradientMode.Vertical);
|
||||||
|
break;
|
||||||
|
case TabAlignment.Left:
|
||||||
|
focusRect = new Rectangle((int)pathRect.X, (int)pathRect.Y, 4, (int)pathRect.Height);
|
||||||
|
focusBrush = new LinearGradientBrush(focusRect, _FocusColor, SystemColors.ControlLight,
|
||||||
|
LinearGradientMode.Horizontal);
|
||||||
|
break;
|
||||||
|
case TabAlignment.Right:
|
||||||
|
focusRect = new Rectangle((int)pathRect.Right - 4, (int)pathRect.Y, 4, (int)pathRect.Height);
|
||||||
|
focusBrush = new LinearGradientBrush(focusRect, SystemColors.ControlLight, _FocusColor,
|
||||||
|
LinearGradientMode.Horizontal);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure the focus stip does not go outside the tab
|
||||||
|
var focusRegion = new Region(focusRect);
|
||||||
|
focusRegion.Intersect(tabpath);
|
||||||
|
graphics.FillRegion(focusBrush, focusRegion);
|
||||||
|
focusRegion.Dispose();
|
||||||
|
focusBrush.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Background brushes
|
||||||
|
|
||||||
|
private Blend GetBackgroundBlend()
|
||||||
|
{
|
||||||
|
float[] relativeIntensities = { 0f, 0.7f, 1f };
|
||||||
|
float[] relativePositions = { 0f, 0.6f, 1f };
|
||||||
|
|
||||||
|
// Glass look to top aligned tabs
|
||||||
|
if (_TabControl.Alignment == TabAlignment.Top)
|
||||||
|
{
|
||||||
|
relativeIntensities = new[] { 0f, 0.5f, 1f, 1f };
|
||||||
|
relativePositions = new[] { 0f, 0.5f, 0.51f, 1f };
|
||||||
|
}
|
||||||
|
|
||||||
|
var blend = new Blend();
|
||||||
|
blend.Factors = relativeIntensities;
|
||||||
|
blend.Positions = relativePositions;
|
||||||
|
|
||||||
|
return blend;
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual Brush GetPageBackgroundBrush(int index)
|
||||||
|
{
|
||||||
|
// Capture the colours dependant on selection state of the tab
|
||||||
|
var light = Color.FromArgb(242, 242, 242);
|
||||||
|
if (_TabControl.Alignment == TabAlignment.Top) light = Color.FromArgb(207, 207, 207);
|
||||||
|
|
||||||
|
if (_TabControl.SelectedIndex == index)
|
||||||
|
light = SystemColors.Window;
|
||||||
|
else if (!_TabControl.TabPages[index].Enabled)
|
||||||
|
light = Color.FromArgb(207, 207, 207);
|
||||||
|
else if (_HotTrack && index == _TabControl.ActiveIndex)
|
||||||
|
// Enable hot tracking
|
||||||
|
light = Color.FromArgb(234, 246, 253);
|
||||||
|
|
||||||
|
return new SolidBrush(light);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,78 @@
|
|||||||
|
/* Copyright (c) XCP-ng Project.
|
||||||
|
*
|
||||||
|
* 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.ComponentModel;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Drawing.Drawing2D;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace XenAdmin.Controls.TabControl.TabStyleProviders
|
||||||
|
{
|
||||||
|
[ToolboxItem(false)]
|
||||||
|
public class TabStyleAngledProvider : TabStyleProvider
|
||||||
|
{
|
||||||
|
public TabStyleAngledProvider(CustomTabControl tabControl) : base(tabControl)
|
||||||
|
{
|
||||||
|
_ImageAlign = ContentAlignment.MiddleRight;
|
||||||
|
_Overlap = 7;
|
||||||
|
_Radius = 10;
|
||||||
|
|
||||||
|
// Must set after the _Radius as this is used in the calculations of the actual padding
|
||||||
|
Padding = new Point(10, 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void AddTabBorder(GraphicsPath path, Rectangle tabBounds)
|
||||||
|
{
|
||||||
|
switch (_TabControl.Alignment)
|
||||||
|
{
|
||||||
|
case TabAlignment.Top:
|
||||||
|
path.AddLine(tabBounds.X, tabBounds.Bottom, tabBounds.X + _Radius - 2, tabBounds.Y + 2);
|
||||||
|
path.AddLine(tabBounds.X + _Radius, tabBounds.Y, tabBounds.Right - _Radius, tabBounds.Y);
|
||||||
|
path.AddLine(tabBounds.Right - _Radius + 2, tabBounds.Y + 2, tabBounds.Right, tabBounds.Bottom);
|
||||||
|
break;
|
||||||
|
case TabAlignment.Bottom:
|
||||||
|
path.AddLine(tabBounds.Right, tabBounds.Y, tabBounds.Right - _Radius + 2, tabBounds.Bottom - 2);
|
||||||
|
path.AddLine(tabBounds.Right - _Radius, tabBounds.Bottom, tabBounds.X + _Radius, tabBounds.Bottom);
|
||||||
|
path.AddLine(tabBounds.X + _Radius - 2, tabBounds.Bottom - 2, tabBounds.X, tabBounds.Y);
|
||||||
|
break;
|
||||||
|
case TabAlignment.Left:
|
||||||
|
path.AddLine(tabBounds.Right, tabBounds.Bottom, tabBounds.X + 2, tabBounds.Bottom - _Radius + 2);
|
||||||
|
path.AddLine(tabBounds.X, tabBounds.Bottom - _Radius, tabBounds.X, tabBounds.Y + _Radius);
|
||||||
|
path.AddLine(tabBounds.X + 2, tabBounds.Y + _Radius - 2, tabBounds.Right, tabBounds.Y);
|
||||||
|
break;
|
||||||
|
case TabAlignment.Right:
|
||||||
|
path.AddLine(tabBounds.X, tabBounds.Y, tabBounds.Right - 2, tabBounds.Y + _Radius - 2);
|
||||||
|
path.AddLine(tabBounds.Right, tabBounds.Y + _Radius, tabBounds.Right, tabBounds.Bottom - _Radius);
|
||||||
|
path.AddLine(tabBounds.Right - 2, tabBounds.Bottom - _Radius + 2, tabBounds.X, tabBounds.Bottom);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,173 @@
|
|||||||
|
/* Copyright (c) XCP-ng Project.
|
||||||
|
*
|
||||||
|
* 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.ComponentModel;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Drawing.Drawing2D;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace XenAdmin.Controls.TabControl.TabStyleProviders
|
||||||
|
{
|
||||||
|
[ToolboxItem(false)]
|
||||||
|
public class TabStyleDefaultProvider : TabStyleProvider
|
||||||
|
{
|
||||||
|
public TabStyleDefaultProvider(CustomTabControl tabControl) : base(tabControl)
|
||||||
|
{
|
||||||
|
_FocusTrack = true;
|
||||||
|
_Radius = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void AddTabBorder(GraphicsPath path, Rectangle tabBounds)
|
||||||
|
{
|
||||||
|
switch (_TabControl.Alignment)
|
||||||
|
{
|
||||||
|
case TabAlignment.Top:
|
||||||
|
path.AddLine(tabBounds.X, tabBounds.Bottom, tabBounds.X, tabBounds.Y);
|
||||||
|
path.AddLine(tabBounds.X, tabBounds.Y, tabBounds.Right, tabBounds.Y);
|
||||||
|
path.AddLine(tabBounds.Right, tabBounds.Y, tabBounds.Right, tabBounds.Bottom);
|
||||||
|
break;
|
||||||
|
case TabAlignment.Bottom:
|
||||||
|
path.AddLine(tabBounds.Right, tabBounds.Y, tabBounds.Right, tabBounds.Bottom);
|
||||||
|
path.AddLine(tabBounds.Right, tabBounds.Bottom, tabBounds.X, tabBounds.Bottom);
|
||||||
|
path.AddLine(tabBounds.X, tabBounds.Bottom, tabBounds.X, tabBounds.Y);
|
||||||
|
break;
|
||||||
|
case TabAlignment.Left:
|
||||||
|
path.AddLine(tabBounds.Right, tabBounds.Bottom, tabBounds.X, tabBounds.Bottom);
|
||||||
|
path.AddLine(tabBounds.X, tabBounds.Bottom, tabBounds.X, tabBounds.Y);
|
||||||
|
path.AddLine(tabBounds.X, tabBounds.Y, tabBounds.Right, tabBounds.Y);
|
||||||
|
break;
|
||||||
|
case TabAlignment.Right:
|
||||||
|
path.AddLine(tabBounds.X, tabBounds.Y, tabBounds.Right, tabBounds.Y);
|
||||||
|
path.AddLine(tabBounds.Right, tabBounds.Y, tabBounds.Right, tabBounds.Bottom);
|
||||||
|
path.AddLine(tabBounds.Right, tabBounds.Bottom, tabBounds.X, tabBounds.Bottom);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Rectangle GetTabRect(int index)
|
||||||
|
{
|
||||||
|
if (index < 0) return new Rectangle();
|
||||||
|
|
||||||
|
var tabBounds = base.GetTabRect(index);
|
||||||
|
var firstTabinRow = _TabControl.IsFirstTabInRow(index);
|
||||||
|
|
||||||
|
// Make non-SelectedTabs smaller and selected tab bigger
|
||||||
|
if (index != _TabControl.SelectedIndex)
|
||||||
|
switch (_TabControl.Alignment)
|
||||||
|
{
|
||||||
|
case TabAlignment.Top:
|
||||||
|
tabBounds.Y += 1;
|
||||||
|
tabBounds.Height -= 1;
|
||||||
|
break;
|
||||||
|
case TabAlignment.Bottom:
|
||||||
|
tabBounds.Height -= 1;
|
||||||
|
break;
|
||||||
|
case TabAlignment.Left:
|
||||||
|
tabBounds.X += 1;
|
||||||
|
tabBounds.Width -= 1;
|
||||||
|
break;
|
||||||
|
case TabAlignment.Right:
|
||||||
|
tabBounds.Width -= 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
switch (_TabControl.Alignment)
|
||||||
|
{
|
||||||
|
case TabAlignment.Top:
|
||||||
|
if (tabBounds.Y > 0)
|
||||||
|
{
|
||||||
|
tabBounds.Y -= 1;
|
||||||
|
tabBounds.Height += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (firstTabinRow)
|
||||||
|
{
|
||||||
|
tabBounds.Width += 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tabBounds.X -= 1;
|
||||||
|
tabBounds.Width += 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case TabAlignment.Bottom:
|
||||||
|
if (tabBounds.Bottom < _TabControl.Bottom) tabBounds.Height += 1;
|
||||||
|
if (firstTabinRow)
|
||||||
|
{
|
||||||
|
tabBounds.Width += 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tabBounds.X -= 1;
|
||||||
|
tabBounds.Width += 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case TabAlignment.Left:
|
||||||
|
if (tabBounds.X > 0)
|
||||||
|
{
|
||||||
|
tabBounds.X -= 1;
|
||||||
|
tabBounds.Width += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (firstTabinRow)
|
||||||
|
{
|
||||||
|
tabBounds.Height += 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tabBounds.Y -= 1;
|
||||||
|
tabBounds.Height += 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case TabAlignment.Right:
|
||||||
|
if (tabBounds.Right < _TabControl.Right) tabBounds.Width += 1;
|
||||||
|
if (firstTabinRow)
|
||||||
|
{
|
||||||
|
tabBounds.Height += 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tabBounds.Y -= 1;
|
||||||
|
tabBounds.Height += 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Adjust first tab in the row to align with tabpage
|
||||||
|
EnsureFirstTabIsInView(ref tabBounds, index);
|
||||||
|
|
||||||
|
return tabBounds;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
112
XenAdmin/Controls/TabControl/ThemedColors.cs
Normal file
112
XenAdmin/Controls/TabControl/ThemedColors.cs
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
/* Copyright (c) XCP-ng Project.
|
||||||
|
*
|
||||||
|
* 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.Diagnostics.CodeAnalysis;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using System.Windows.Forms.VisualStyles;
|
||||||
|
|
||||||
|
namespace XenAdmin.Controls.TabControl
|
||||||
|
{
|
||||||
|
internal sealed class ThemedColors
|
||||||
|
{
|
||||||
|
public enum ColorScheme
|
||||||
|
{
|
||||||
|
NormalColor = 0,
|
||||||
|
HomeStead = 1,
|
||||||
|
Metallic = 2,
|
||||||
|
NoTheme = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ColorScheme GetCurrentThemeIndex()
|
||||||
|
{
|
||||||
|
var theme = ColorScheme.NoTheme;
|
||||||
|
|
||||||
|
if (VisualStyleInformation.IsSupportedByOS && VisualStyleInformation.IsEnabledByUser &&
|
||||||
|
Application.RenderWithVisualStyles)
|
||||||
|
switch (VisualStyleInformation.ColorScheme)
|
||||||
|
{
|
||||||
|
case NormalColor:
|
||||||
|
theme = ColorScheme.NormalColor;
|
||||||
|
break;
|
||||||
|
case HomeStead:
|
||||||
|
theme = ColorScheme.HomeStead;
|
||||||
|
break;
|
||||||
|
case Metallic:
|
||||||
|
theme = ColorScheme.Metallic;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
theme = ColorScheme.NoTheme;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return theme;
|
||||||
|
}
|
||||||
|
|
||||||
|
#region " Variables and Constants "
|
||||||
|
|
||||||
|
private const string NormalColor = "NormalColor";
|
||||||
|
private const string HomeStead = "HomeStead";
|
||||||
|
private const string Metallic = "Metallic";
|
||||||
|
private const string NoTheme = "NoTheme";
|
||||||
|
|
||||||
|
private static readonly Color[] _toolBorder;
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region " Properties "
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||||
|
public static ColorScheme CurrentThemeIndex => GetCurrentThemeIndex();
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||||
|
public static Color ToolBorder => _toolBorder[(int)CurrentThemeIndex];
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region " Constructors "
|
||||||
|
|
||||||
|
[SuppressMessage("Microsoft.Performance", "CA1810:InitializeReferenceTypeStaticFieldsInline")]
|
||||||
|
static ThemedColors()
|
||||||
|
{
|
||||||
|
_toolBorder = new[]
|
||||||
|
{
|
||||||
|
Color.FromArgb(127, 157, 185), Color.FromArgb(164, 185, 127), Color.FromArgb(165, 172, 178),
|
||||||
|
Color.FromArgb(132, 130, 132)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private ThemedColors()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
13
XenAdmin/Dialogs/AboutDialog.Designer.cs
generated
13
XenAdmin/Dialogs/AboutDialog.Designer.cs
generated
@ -35,6 +35,7 @@ namespace XenAdmin.Dialogs
|
|||||||
this.label2 = new System.Windows.Forms.Label();
|
this.label2 = new System.Windows.Forms.Label();
|
||||||
this.VersionLabel = new System.Windows.Forms.Label();
|
this.VersionLabel = new System.Windows.Forms.Label();
|
||||||
this.pictureBox1 = new System.Windows.Forms.PictureBox();
|
this.pictureBox1 = new System.Windows.Forms.PictureBox();
|
||||||
|
this.AdditionalVersionData = new System.Windows.Forms.Label();
|
||||||
this.tableLayoutPanel1.SuspendLayout();
|
this.tableLayoutPanel1.SuspendLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
@ -52,11 +53,12 @@ namespace XenAdmin.Dialogs
|
|||||||
//
|
//
|
||||||
resources.ApplyResources(this.tableLayoutPanel1, "tableLayoutPanel1");
|
resources.ApplyResources(this.tableLayoutPanel1, "tableLayoutPanel1");
|
||||||
this.tableLayoutPanel1.BackColor = System.Drawing.Color.White;
|
this.tableLayoutPanel1.BackColor = System.Drawing.Color.White;
|
||||||
this.tableLayoutPanel1.Controls.Add(this.linkLabel1, 1, 3);
|
this.tableLayoutPanel1.Controls.Add(this.AdditionalVersionData, 1, 2);
|
||||||
this.tableLayoutPanel1.Controls.Add(this.label2, 1, 2);
|
|
||||||
this.tableLayoutPanel1.Controls.Add(this.VersionLabel, 1, 1);
|
this.tableLayoutPanel1.Controls.Add(this.VersionLabel, 1, 1);
|
||||||
this.tableLayoutPanel1.Controls.Add(this.OkButton, 1, 7);
|
this.tableLayoutPanel1.Controls.Add(this.OkButton, 1, 7);
|
||||||
this.tableLayoutPanel1.Controls.Add(this.pictureBox1, 0, 0);
|
this.tableLayoutPanel1.Controls.Add(this.pictureBox1, 0, 0);
|
||||||
|
this.tableLayoutPanel1.Controls.Add(this.label2, 1, 3);
|
||||||
|
this.tableLayoutPanel1.Controls.Add(this.linkLabel1, 1, 6);
|
||||||
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
|
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
|
||||||
//
|
//
|
||||||
// linkLabel1
|
// linkLabel1
|
||||||
@ -86,6 +88,12 @@ namespace XenAdmin.Dialogs
|
|||||||
this.pictureBox1.Name = "pictureBox1";
|
this.pictureBox1.Name = "pictureBox1";
|
||||||
this.pictureBox1.TabStop = false;
|
this.pictureBox1.TabStop = false;
|
||||||
//
|
//
|
||||||
|
// AdditionalVersionData
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.AdditionalVersionData, "AdditionalVersionData");
|
||||||
|
this.AdditionalVersionData.BackColor = System.Drawing.Color.Transparent;
|
||||||
|
this.AdditionalVersionData.Name = "AdditionalVersionData";
|
||||||
|
//
|
||||||
// AboutDialog
|
// AboutDialog
|
||||||
//
|
//
|
||||||
this.AcceptButton = this.OkButton;
|
this.AcceptButton = this.OkButton;
|
||||||
@ -113,5 +121,6 @@ namespace XenAdmin.Dialogs
|
|||||||
private System.Windows.Forms.Button OkButton;
|
private System.Windows.Forms.Button OkButton;
|
||||||
private System.Windows.Forms.LinkLabel linkLabel1;
|
private System.Windows.Forms.LinkLabel linkLabel1;
|
||||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
|
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
|
||||||
|
private System.Windows.Forms.Label AdditionalVersionData;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -48,6 +48,10 @@ namespace XenAdmin.Dialogs
|
|||||||
VersionLabel.Text = string.Format(Messages.VERSION_NUMBER, BrandManager.BrandConsole,
|
VersionLabel.Text = string.Format(Messages.VERSION_NUMBER, BrandManager.BrandConsole,
|
||||||
Program.VersionText, Program.Version.Revision, IntPtr.Size * 8);
|
Program.VersionText, Program.Version.Revision, IntPtr.Size * 8);
|
||||||
|
|
||||||
|
AdditionalVersionData.Text = string.Format(Messages.VERSION_ADDITIONAL, ThisAssembly.Git.SourceRevisionId,
|
||||||
|
ThisAssembly.InformationalData.LabId, ThisAssembly.InformationalData.BuildDateTime,
|
||||||
|
ThisAssembly.InformationalData.BuildStage);
|
||||||
|
|
||||||
label2.Text = BrandManager.Copyright;
|
label2.Text = BrandManager.Copyright;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -129,7 +129,7 @@
|
|||||||
<value>NoControl</value>
|
<value>NoControl</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="OkButton.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="OkButton.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>333, 164</value>
|
<value>333, 191</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="OkButton.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="OkButton.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>75, 23</value>
|
<value>75, 23</value>
|
||||||
@ -151,7 +151,7 @@
|
|||||||
<value>tableLayoutPanel1</value>
|
<value>tableLayoutPanel1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>OkButton.ZOrder" xml:space="preserve">
|
<data name=">>OkButton.ZOrder" xml:space="preserve">
|
||||||
<value>3</value>
|
<value>2</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tableLayoutPanel1.AutoSize" type="System.Boolean, mscorlib">
|
<data name="tableLayoutPanel1.AutoSize" type="System.Boolean, mscorlib">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
@ -162,6 +162,99 @@
|
|||||||
<data name="tableLayoutPanel1.ColumnCount" type="System.Int32, mscorlib">
|
<data name="tableLayoutPanel1.ColumnCount" type="System.Int32, mscorlib">
|
||||||
<value>3</value>
|
<value>3</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name=">>AdditionalVersionData.Name" xml:space="preserve">
|
||||||
|
<value>AdditionalVersionData</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>AdditionalVersionData.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=">>AdditionalVersionData.Parent" xml:space="preserve">
|
||||||
|
<value>tableLayoutPanel1</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>AdditionalVersionData.ZOrder" xml:space="preserve">
|
||||||
|
<value>0</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>VersionLabel.Name" xml:space="preserve">
|
||||||
|
<value>VersionLabel</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>VersionLabel.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=">>VersionLabel.Parent" xml:space="preserve">
|
||||||
|
<value>tableLayoutPanel1</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>VersionLabel.ZOrder" xml:space="preserve">
|
||||||
|
<value>1</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>pictureBox1.Name" xml:space="preserve">
|
||||||
|
<value>pictureBox1</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>pictureBox1.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>pictureBox1.Parent" xml:space="preserve">
|
||||||
|
<value>tableLayoutPanel1</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>pictureBox1.ZOrder" xml:space="preserve">
|
||||||
|
<value>3</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label2.Name" xml:space="preserve">
|
||||||
|
<value>label2</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label2.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=">>label2.Parent" xml:space="preserve">
|
||||||
|
<value>tableLayoutPanel1</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label2.ZOrder" xml:space="preserve">
|
||||||
|
<value>4</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>linkLabel1.Name" xml:space="preserve">
|
||||||
|
<value>linkLabel1</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>linkLabel1.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>linkLabel1.Parent" xml:space="preserve">
|
||||||
|
<value>tableLayoutPanel1</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>linkLabel1.ZOrder" xml:space="preserve">
|
||||||
|
<value>5</value>
|
||||||
|
</data>
|
||||||
|
<data name="tableLayoutPanel1.Font" type="System.Drawing.Font, System.Drawing">
|
||||||
|
<value>Segoe UI, 9pt</value>
|
||||||
|
</data>
|
||||||
|
<data name="tableLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>0, 0</value>
|
||||||
|
</data>
|
||||||
|
<data name="tableLayoutPanel1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||||
|
<value>0, 0, 0, 0</value>
|
||||||
|
</data>
|
||||||
|
<data name="tableLayoutPanel1.RowCount" type="System.Int32, mscorlib">
|
||||||
|
<value>10</value>
|
||||||
|
</data>
|
||||||
|
<data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>420, 226</value>
|
||||||
|
</data>
|
||||||
|
<data name="tableLayoutPanel1.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>19</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>tableLayoutPanel1.Name" xml:space="preserve">
|
||||||
|
<value>tableLayoutPanel1</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>tableLayoutPanel1.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>tableLayoutPanel1.Parent" xml:space="preserve">
|
||||||
|
<value>$this</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>tableLayoutPanel1.ZOrder" xml:space="preserve">
|
||||||
|
<value>0</value>
|
||||||
|
</data>
|
||||||
|
<data name="tableLayoutPanel1.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
|
||||||
|
<value><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="AdditionalVersionData" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="VersionLabel" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="OkButton" Row="7" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="pictureBox1" Row="0" RowSpan="1" Column="0" ColumnSpan="3" /><Control Name="label2" Row="3" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="linkLabel1" Row="6" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Absolute,9,AutoSize,0,Absolute,9" /><Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,Absolute,9" /></TableLayoutSettings></value>
|
||||||
|
</data>
|
||||||
<data name="linkLabel1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
<data name="linkLabel1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||||
<value>Bottom, Left</value>
|
<value>Bottom, Left</value>
|
||||||
</data>
|
</data>
|
||||||
@ -175,7 +268,7 @@
|
|||||||
<value>NoControl</value>
|
<value>NoControl</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="linkLabel1.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="linkLabel1.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>12, 146</value>
|
<value>12, 173</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="linkLabel1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
<data name="linkLabel1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||||
<value>3, 12, 3, 0</value>
|
<value>3, 12, 3, 0</value>
|
||||||
@ -199,7 +292,7 @@
|
|||||||
<value>tableLayoutPanel1</value>
|
<value>tableLayoutPanel1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>linkLabel1.ZOrder" xml:space="preserve">
|
<data name=">>linkLabel1.ZOrder" xml:space="preserve">
|
||||||
<value>0</value>
|
<value>5</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
|
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
@ -211,7 +304,7 @@
|
|||||||
<value>NoControl</value>
|
<value>NoControl</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>12, 119</value>
|
<value>12, 146</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label2.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
<data name="label2.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||||
<value>3, 12, 3, 0</value>
|
<value>3, 12, 3, 0</value>
|
||||||
@ -235,7 +328,7 @@
|
|||||||
<value>tableLayoutPanel1</value>
|
<value>tableLayoutPanel1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>label2.ZOrder" xml:space="preserve">
|
<data name=">>label2.ZOrder" xml:space="preserve">
|
||||||
<value>1</value>
|
<value>4</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VersionLabel.AutoSize" type="System.Boolean, mscorlib">
|
<data name="VersionLabel.AutoSize" type="System.Boolean, mscorlib">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
@ -271,7 +364,7 @@
|
|||||||
<value>tableLayoutPanel1</value>
|
<value>tableLayoutPanel1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>VersionLabel.ZOrder" xml:space="preserve">
|
<data name=">>VersionLabel.ZOrder" xml:space="preserve">
|
||||||
<value>2</value>
|
<value>1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="pictureBox1.Font" type="System.Drawing.Font, System.Drawing">
|
<data name="pictureBox1.Font" type="System.Drawing.Font, System.Drawing">
|
||||||
<value>Segoe UI, 9pt</value>
|
<value>Segoe UI, 9pt</value>
|
||||||
@ -307,41 +400,44 @@
|
|||||||
<value>tableLayoutPanel1</value>
|
<value>tableLayoutPanel1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>pictureBox1.ZOrder" xml:space="preserve">
|
<data name=">>pictureBox1.ZOrder" xml:space="preserve">
|
||||||
<value>4</value>
|
<value>3</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tableLayoutPanel1.Font" type="System.Drawing.Font, System.Drawing">
|
<data name="AdditionalVersionData.AutoSize" type="System.Boolean, mscorlib">
|
||||||
|
<value>True</value>
|
||||||
|
</data>
|
||||||
|
<data name="AdditionalVersionData.Font" type="System.Drawing.Font, System.Drawing">
|
||||||
<value>Segoe UI, 9pt</value>
|
<value>Segoe UI, 9pt</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tableLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="AdditionalVersionData.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||||
<value>0, 0</value>
|
<value>NoControl</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tableLayoutPanel1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
<data name="AdditionalVersionData.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>0, 0, 0, 0</value>
|
<value>12, 119</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tableLayoutPanel1.RowCount" type="System.Int32, mscorlib">
|
<data name="AdditionalVersionData.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||||
<value>9</value>
|
<value>3, 12, 3, 0</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="AdditionalVersionData.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>420, 199</value>
|
<value>45, 15</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tableLayoutPanel1.TabIndex" type="System.Int32, mscorlib">
|
<data name="AdditionalVersionData.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>19</value>
|
<value>20</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>tableLayoutPanel1.Name" xml:space="preserve">
|
<data name="AdditionalVersionData.Text" xml:space="preserve">
|
||||||
|
<value>version</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>AdditionalVersionData.Name" xml:space="preserve">
|
||||||
|
<value>AdditionalVersionData</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>AdditionalVersionData.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=">>AdditionalVersionData.Parent" xml:space="preserve">
|
||||||
<value>tableLayoutPanel1</value>
|
<value>tableLayoutPanel1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>tableLayoutPanel1.Type" xml:space="preserve">
|
<data name=">>AdditionalVersionData.ZOrder" xml:space="preserve">
|
||||||
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>tableLayoutPanel1.Parent" xml:space="preserve">
|
|
||||||
<value>$this</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>tableLayoutPanel1.ZOrder" xml:space="preserve">
|
|
||||||
<value>0</value>
|
<value>0</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tableLayoutPanel1.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
|
|
||||||
<value><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="linkLabel1" Row="3" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="label2" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="VersionLabel" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="OkButton" Row="7" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="pictureBox1" Row="0" RowSpan="1" Column="0" ColumnSpan="3" /></Controls><Columns Styles="Absolute,9,AutoSize,0,Absolute,9" /><Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,Absolute,9" /></TableLayoutSettings></value>
|
|
||||||
</data>
|
|
||||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
@ -355,11 +451,184 @@
|
|||||||
<value>GrowAndShrink</value>
|
<value>GrowAndShrink</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>437, 346</value>
|
<value>487, 311</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="$this.Font" type="System.Drawing.Font, System.Drawing">
|
<data name="$this.Font" type="System.Drawing.Font, System.Drawing">
|
||||||
<value>Tahoma, 8pt</value>
|
<value>Tahoma, 8pt</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
AAABAAYAICAQAAAAAADoAgAAZgAAABAQEAAAAAAAKAEAAE4DAAAgIAAAAQAIAKgIAAB2BAAAEBAAAAEA
|
||||||
|
CABoBQAAHg0AACAgAAABACAAqBAAAIYSAAAQEAAAAQAgAGgEAAAuIwAAKAAAACAAAABAAAAAAQAEAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA
|
||||||
|
/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIoiI
|
||||||
|
iIiIiIiIiIiIiIiIiIiCIigiIiIozMzMzMzMyCIogiIoIiIiKM7m5ubm5sgiKIIiKCIiIijObm5ubm7I
|
||||||
|
IiiCIigiIiIozubm5ubmyCIogiIoIiIiKM5ubm5ubsgiKIIiKCIiIijO5ubm5ubIIiiIiIiIiIiIzm5u
|
||||||
|
bm5uyCIogRERERERGM7u7u7u7sgiKIHZWVlZWRjMzMzMzMzIIiiB1ZWVlZUYiIiIiIiIiIiIgdlZWVlZ
|
||||||
|
GDMzMzMzMzMzOIHVlZWVlRg/uLi4uLi4uDiB2VlZWVkYP7uLi4uLi4s4gdWVlZWVGD+4uLi4uLi4OIHZ
|
||||||
|
WVlZWRg/u4uLi4uLiziB1ZWVlZUYP7i4uLi4uLg4gdlZWVlZGD+7i4uLi4uLOIHVlZWVlRg/uLi4uLi4
|
||||||
|
uDiB3d3d3d0YP7uLi4uLi4s4gRERERERGD+4uLi4uLi4OIiIiIiIiIg/u4uLi4uLiziCIiIiIiIoP7i4
|
||||||
|
uLi4uLg4giIiIiIiKD+7i4uLi4uLOIIiIiIiIig/uLi4uLi4uDiCIiIiIiIoP7u7u7u7u7s4giIiIiIi
|
||||||
|
KD//////////OIIiIiIiIigzMzMzMzMzMziIiIiIiIiIiIiIiIiIiIiIIiIiIiIiIiIiIiIiIiIiIv//
|
||||||
|
////////AAAAAHv4AA57+AAOe/gADnv4AA57+AAOe/gADgAAAA4AAAAOAAAADgAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/4AAB/+AAAf/gAAH/4AAB/+AAAf/gAAAAA
|
||||||
|
AAD/////KAAAABAAAAAgAAAAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACA
|
||||||
|
gACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAiIiIiIiIiIoiI
|
||||||
|
iIiIiIiIgigijMzMyCiCKCKM5mbIKIiIiIzu7sgogRERjMzMyCiB2ZGIiIiIiIHZkYMzMzM4gdmRg/u7
|
||||||
|
uziB3dGD+7u7OIEREYP7u7s4iIiIg/u7uziCIiKD+7u7OIIiIoP///84giIigzMzMziIiIiIiIiIiP//
|
||||||
|
KCIAACjObALm5mwCIigAAoiIAAKIzgAAbm4AACIoAAAREQAAGM4AAO7uAAAiKHwAWVl8ABjMfADMzAAA
|
||||||
|
IigoAAAAIAAAAEAAAAABAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAA
|
||||||
|
AACAAIAAgIAAAICAgADA3MAA8MqmAKo/KgD/PyoAAF8qAFVfKgCqXyoA/18qAAB/KgBVfyoAqn8qAP9/
|
||||||
|
KgAAnyoAVZ8qAKqfKgD/nyoAAL8qAFW/KgCqvyoA/78qAADfKgBV3yoAqt8qAP/fKgAA/yoAVf8qAKr/
|
||||||
|
KgD//yoAAABVAFUAVQCqAFUA/wBVAAAfVQBVH1UAqh9VAP8fVQAAP1UAVT9VAKo/VQD/P1UAAF9VAFVf
|
||||||
|
VQCqX1UA/19VAAB/VQBVf1UAqn9VAP9/VQAAn1UAVZ9VAKqfVQD/n1UAAL9VAFW/VQCqv1UA/79VAADf
|
||||||
|
VQBV31UAqt9VAP/fVQAA/1UAVf9VAKr/VQD//1UAAAB/AFUAfwCqAH8A/wB/AAAffwBVH38Aqh9/AP8f
|
||||||
|
fwAAP38AVT9/AKo/fwD/P38AAF9/AFVffwCqX38A/19/AAB/fwBVf38Aqn9/AP9/fwAAn38AVZ9/AKqf
|
||||||
|
fwD/n38AAL9/AFW/fwCqv38A/79/AADffwBV338Aqt9/AP/ffwAA/38AVf9/AKr/fwD//38AAACqAFUA
|
||||||
|
qgCqAKoA/wCqAAAfqgBVH6oAqh+qAP8fqgAAP6oAVT+qAKo/qgD/P6oAAF+qAFVfqgCqX6oA/1+qAAB/
|
||||||
|
qgBVf6oAqn+qAP9/qgAAn6oAVZ+qAKqfqgD/n6oAAL+qAFW/qgCqv6oA/7+qAADfqgBV36oAqt+qAP/f
|
||||||
|
qgAA/6oAVf+qAKr/qgD//6oAAADUAFUA1ACqANQA/wDUAAAf1ABVH9QAqh/UAP8f1AAAP9QAVT/UAKo/
|
||||||
|
1AD/P9QAAF/UAFVf1ACqX9QA/1/UAAB/1ABVf9QAqn/UAP9/1AAAn9QAVZ/UAKqf1AD/n9QAAL/UAFW/
|
||||||
|
1ACqv9QA/7/UAADf1ABV39QAqt/UAP/f1AAA/9QAVf/UAKr/1AD//9QAVQD/AKoA/wAAH/8AVR//AKof
|
||||||
|
/wD/H/8AAD//AFU//wCqP/8A/z//AABf/wBVX/8Aql//AP9f/wAAf/8AVX//AKp//wD/f/8AAJ//AFWf
|
||||||
|
/wCqn/8A/5//AAC//wBVv/8Aqr//AP+//wAA3/8AVd//AKrf/wD/3/8AVf//AKr//wD/zMwA/8z/AP//
|
||||||
|
MwD//2YA//+ZAP//zAAAfwAAVX8AAKp/AAD/fwAAAJ8AAFWfAACqnwAA/58AAAC/AABVvwAAqr8AAP+/
|
||||||
|
AAAA3wAAVd8AAKrfAAD/3wAAVf8AAKr/AAAAACoAVQAqAKoAKgD/ACoAAB8qAFUfKgCqHyoA/x8qAAA/
|
||||||
|
KgBVPyoA8Pv/AKSgoACAgIAAAAD/AAD/AAAA//8A/wAAAAAAAAD//wAA////AP39/f39/f39/f39/f39
|
||||||
|
/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39
|
||||||
|
/f39/f39/f39/f39/f39/f39/f39/f39qoYIqoYIhqoIqgiqCaoIqgiqhqqGhoYIhoYIqv39/f0I/f39
|
||||||
|
/ar9/f39/YY2Ng4yDg4ODgoOCgoKCgqG/f39/Yb9/f39CP39/f39qjY7Ozs3Nzc3NjMSMjIOCqr9/f39
|
||||||
|
qv39/f2G/f39/f0IN19fOzs3Nzc3NjcODg4KCP39/f0I/f39/ar9/f39/ao6X19fXzs7Ozc3NzY3NgqG
|
||||||
|
/f39/Yb9/f39CP39/f39hl9jY19jX187Ozs7Nzc3Dqr9/f39qv39/f2G/f39/f0IOodjh19jX19fXztf
|
||||||
|
OzcOCP39/f0ICAmqCAiqCKoICapfCYdjh2ODY19fXzs7Ow6q/f39/QhITEwoSCUoKSQoqmMJCYcJCWNj
|
||||||
|
Y2NfY19fNgj9/f39qkyZmZmYmJRwlCmqX19fXl9fX186WzY3Njc2gv39/f0JcJ2dmZmZlJmUJAmqCaoJ
|
||||||
|
hggIqggICKoIqggI/f39/YZwnp2dnZmZmJVMqnx8fHx8fFR8VHhUVFRUVKr9/f39CHChoZ2dnZ2ZmUwJ
|
||||||
|
fKSkxqSkxqSkpKSkpKBUCP39/f2qcKLDoqGdnZ2ZTKp8ysakxqSkxqSkxqSkpFSq/f39/QiUpqbDoqHE
|
||||||
|
nZ1Mq3ykqMakyqSkxqSkpKSkVAj9/f39hpTIyKbHoqGhoXAIfMrLpMqkxqSkxqTGpKRUqv39/f0IlMym
|
||||||
|
yKbIpcShcAh8y6jKpMqkxsqkpKSkxlQI/f39/aqUzMzMyKbIpqJwqnzLy8qpxsqkpMakxqSkeAj9/f39
|
||||||
|
CJSUlJSUlJSUlJQJgMupy8qpysqkyqSkxqRUqv39/f2GCKoIqgiqCKoIhgigrcvPqcuoy8qkxsqkxnyG
|
||||||
|
/f39/ar9/f39/f39/f39qnzPz6nLy8uoyqnKpKTKVAj9/f39CP39/f39/f39/f0IfNDPz8+py8upyqjG
|
||||||
|
yqR8hv39/f2G/f39/f39/f39/Qik0K7P0M+ty8vLy6jKpXyq/f39/ar9/f39/f39/f39CHzQ09Ctz8/P
|
||||||
|
qcupy6jKeAj9/f39CP39/f39/f39/f2qoNPQ0NPQ0M/Qz8vLy6l8CP39/f2G/f39/f39/f39/QmkfKR8
|
||||||
|
oHx8fHx8fHx8fHyG/f39/aoIqgiqCKoIqgiqCKoIqgiqCKoIqgiqCKoIqgj9/f39/f39/f39/f39/f39
|
||||||
|
/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f3/////////////
|
||||||
|
///AAAAD3vgAA974AAPe+AAD3vgAA974AAPe+AADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AA
|
||||||
|
AAPAAAADwAAAA8AAAAPAAAADwAAAA9/4AAPf+AAD3/gAA9/4AAPf+AAD3/gAA8AAAAP//////////ygA
|
||||||
|
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
|
||||||
|
ff//p3f//6Jw//+eav//mWT//pRf//qQWv/0i1b/7IVS/+V/Tv+gWC7/wr/B/wAAAAAAAAAAAAAAAAAA
|
||||||
|
AADCv8H/AAAAAAAAAAAAAAAAAAAAAMK/wf8AAAAAAAAAAAAAAAAAAAAAAAAAAMK/wf/apnP//7+d//+7
|
||||||
|
mP//uJL//7WM//+whv//rH///6d4//+jcf//n2v//5ll//+VYP/6kVv/9YxY/6diN//Cv8H/AAAAAAAA
|
||||||
|
AAAAAAAAAAAAAMK/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/96t
|
||||||
|
eP//wqL//8Gi//+/nv//vJn//7mT//+2jv//sYj//66A//+pev//pHP//6Bt//+bZ///l2L/r20//8K/
|
||||||
|
wf8AAAAAAAAAAAAAAAAAAAAAwr/B/xYXev8XF3b/GBVx/xkUbf8ZFGr/GhNm/xoSY/8bEV//HBFd/xwQ
|
||||||
|
W//Cv8H/4K96///Cov//wqL//8Ki///Cov//wJ///72b//+6lf//t4///7KJ//+ugv//qnv//6V0//+h
|
||||||
|
bv+3d0n/wr/B/wAAAAAAAAAAAAAAAAAAAADCv8H/FRqE/0dN1v8/RNL/Nz3Q/y40zv8nLcz/ISfK/xwh
|
||||||
|
yf8WHMf/GxJh/8K/wf/gr3r/4K96/+Cvev/gr3r/3614/9yqdf/apnL/16Nw/9Sea//Rmmj/zZZk/8qR
|
||||||
|
X//GjFz/w4dW/7+CUv/Cv8H/AAAAAAAAAAAAAAAAAAAAAMK/wf8SHZD/WF3a/05U1/9FS9X/PUPS/zU7
|
||||||
|
0P8uM83/JyzL/yAmyf8aFGn/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/
|
||||||
|
wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf8AAAAAAAAAAAAAAAAAAAAAwr/B/xAfnP9obt7/YGTc/1Zb
|
||||||
|
2f9NU9f/RUrU/ztB0v80OdD/LDHO/xgWcv/Cv8H/Dn+n/w18pP8MeqH/DHie/wt1m/8Kc5j/CXGV/wlv
|
||||||
|
k/8JbJD/CGqN/wdpi/8HZ4j/BmWH/wZkhf8GYoP/wr/B/wAAAAAAAAAAAAAAAAAAAADCv8H/DiKp/3l+
|
||||||
|
4/9vdeH/Zmze/11i2/9UWtn/S1HW/0NI1P86P9H/Fhh9/8K/wf8Ogar/Barp/wGo6P8Apef/AKPm/wCi
|
||||||
|
5P8An+L/AJ7h/wCd3/8AnN7/AJnc/wCY2/8AmNn/AJbX/wZjhP/Cv8H/AAAAAAAAAAAAAAAAAAAAAMK/
|
||||||
|
wf8MJbX/iI7n/4CF5v93fOP/bnPg/2Vr3f9bYdv/UljY/0lP1v8UGoj/wr/B/w+Erf8Lrur/Bqvq/wOo
|
||||||
|
6f8Apuf/AKTm/wCi5f8AoOT/AJ/i/wCd4f8AnN//AJrd/wCZ2/8AmNr/BmWH/8K/wf8AAAAAAAAAAAAA
|
||||||
|
AAAAAAAAwr/B/wkowP+WnOz/jpTq/4aL6P9+hOX/dXri/2xx4P9jaN3/WV/b/xEek//Cv8H/EIaw/xay
|
||||||
|
7P8Or+z/Cavr/wWq6v8Bp+j/AKbn/wCj5f8AoeT/AJ/j/wCe4f8AnOD/AJve/wCa3f8HZ4n/wr/B/wAA
|
||||||
|
AAAAAAAAAAAAAAAAAADCv8H/CCrK/6Ko7/+coe7/lZrr/42T6f+Fiub/fIHl/3N54v9rcN//ECGg/8K/
|
||||||
|
wf8QiLP/I7nu/xq07f8Ssez/C63r/war6v8Cqen/AKbo/wCk5v8AouX/AKHk/wCf4f8AneH/AJzf/who
|
||||||
|
i//Cv8H/AAAAAAAAAAAAAAAAAAAAAMK/wf8GLNP/q7Hy/6as8P+hpu//mp/u/5OY6/+LkOj/g4nm/3qA
|
||||||
|
5P8NI6z/wr/B/xCKtv8xvvD/J7rv/x627f8Vsuz/Dq/s/wmr6/8Equn/Aafo/wCl5/8Ao+X/AKHk/wCf
|
||||||
|
4v8AnuH/CGqO/8K/wf8AAAAAAAAAAAAAAAAAAAAAwr/B/wUu2/+vtPP/r7Tz/6qv8v+mq/D/oKXv/5me
|
||||||
|
7f+Sl+v/io/p/wsmt//Cv8H/Eo24/0HF8f82wfD/LLzv/yK47v8atO3/EbHs/wut6/8Gq+r/A6np/wCm
|
||||||
|
6P8Apeb/AKLl/wCh5P8IbJD/wr/B/wAAAAAAAAAAAAAAAAAAAADCv8H/BC/h/wQv3/8FL9z/BS3Z/wYt
|
||||||
|
1v8GLNL/ByvP/wgqy/8IKcb/CSnC/8K/wf8Sjrv/Uszy/0fH8f87w/H/Mb7v/ye67/8et+7/FbPt/w6v
|
||||||
|
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
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
|
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
|
||||||
<value>CenterParent</value>
|
<value>CenterParent</value>
|
||||||
</data>
|
</data>
|
||||||
@ -370,6 +639,6 @@
|
|||||||
<value>AboutDialog</value>
|
<value>AboutDialog</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>$this.Type" xml:space="preserve">
|
<data name=">>$this.Type" xml:space="preserve">
|
||||||
<value>XenAdmin.Dialogs.XenDialogBase, XCP-ng Center, Version=99.99.99.9999, Culture=neutral, PublicKeyToken=null</value>
|
<value>XenAdmin.Dialogs.XenDialogBase, XCP-ng Center, Version=0.0.0.24039, Culture=neutral, PublicKeyToken=null</value>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
</root>
|
22
XenAdmin/MainWindow.Designer.cs
generated
22
XenAdmin/MainWindow.Designer.cs
generated
@ -46,7 +46,7 @@ namespace XenAdmin
|
|||||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainWindow));
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainWindow));
|
||||||
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
|
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
|
||||||
this.navigationPane = new XenAdmin.Controls.MainWindowControls.NavigationPane();
|
this.navigationPane = new XenAdmin.Controls.MainWindowControls.NavigationPane();
|
||||||
this.TheTabControl = new System.Windows.Forms.TabControl();
|
this.TheTabControl = new XenAdmin.Controls.TabControl.CustomTabControl();
|
||||||
this.TabPageHome = new System.Windows.Forms.TabPage();
|
this.TabPageHome = new System.Windows.Forms.TabPage();
|
||||||
this.TabPageGeneral = new System.Windows.Forms.TabPage();
|
this.TabPageGeneral = new System.Windows.Forms.TabPage();
|
||||||
this.TabPageBallooning = new System.Windows.Forms.TabPage();
|
this.TabPageBallooning = new System.Windows.Forms.TabPage();
|
||||||
@ -343,6 +343,24 @@ namespace XenAdmin
|
|||||||
this.TheTabControl.Controls.Add(this.TabPageDockerProcess);
|
this.TheTabControl.Controls.Add(this.TabPageDockerProcess);
|
||||||
this.TheTabControl.Controls.Add(this.TabPageDockerDetails);
|
this.TheTabControl.Controls.Add(this.TabPageDockerDetails);
|
||||||
this.TheTabControl.Controls.Add(this.TabPageUSB);
|
this.TheTabControl.Controls.Add(this.TabPageUSB);
|
||||||
|
this.TheTabControl.DisplayStyle = XenAdmin.Controls.TabControl.TabStyle.Angled;
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
this.TheTabControl.DisplayStyleProvider.BorderColor = System.Drawing.SystemColors.ControlDark;
|
||||||
|
this.TheTabControl.DisplayStyleProvider.BorderColorHot = System.Drawing.SystemColors.ControlDark;
|
||||||
|
this.TheTabControl.DisplayStyleProvider.BorderColorSelected = System.Drawing.Color.FromArgb(((int)(((byte)(127)))), ((int)(((byte)(157)))), ((int)(((byte)(185)))));
|
||||||
|
this.TheTabControl.DisplayStyleProvider.FocusTrack = false;
|
||||||
|
this.TheTabControl.DisplayStyleProvider.HotTrack = true;
|
||||||
|
this.TheTabControl.DisplayStyleProvider.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||||
|
this.TheTabControl.DisplayStyleProvider.Opacity = 1F;
|
||||||
|
this.TheTabControl.DisplayStyleProvider.Overlap = 7;
|
||||||
|
this.TheTabControl.DisplayStyleProvider.Padding = new System.Drawing.Point(10, 3);
|
||||||
|
this.TheTabControl.DisplayStyleProvider.Radius = 10;
|
||||||
|
this.TheTabControl.DisplayStyleProvider.TextColor = System.Drawing.SystemColors.ControlText;
|
||||||
|
this.TheTabControl.DisplayStyleProvider.TextColorDisabled = System.Drawing.SystemColors.ControlDark;
|
||||||
|
this.TheTabControl.DisplayStyleProvider.TextColorSelected = System.Drawing.SystemColors.ControlText;
|
||||||
|
this.TheTabControl.HotTrack = true;
|
||||||
this.TheTabControl.Name = "TheTabControl";
|
this.TheTabControl.Name = "TheTabControl";
|
||||||
this.TheTabControl.SelectedIndex = 4;
|
this.TheTabControl.SelectedIndex = 4;
|
||||||
this.TheTabControl.SelectedIndexChanged += new System.EventHandler(this.TheTabControl_SelectedIndexChanged);
|
this.TheTabControl.SelectedIndexChanged += new System.EventHandler(this.TheTabControl_SelectedIndexChanged);
|
||||||
@ -2041,7 +2059,7 @@ namespace XenAdmin
|
|||||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator24;
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator24;
|
||||||
private System.Windows.Forms.ToolStripMenuItem toolbarToolStripMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem toolbarToolStripMenuItem;
|
||||||
private System.Windows.Forms.ToolStripMenuItem ShowHiddenObjectsToolStripMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem ShowHiddenObjectsToolStripMenuItem;
|
||||||
internal System.Windows.Forms.TabControl TheTabControl;
|
internal XenAdmin.Controls.TabControl.CustomTabControl TheTabControl;
|
||||||
private System.Windows.Forms.TabPage TabPageHome;
|
private System.Windows.Forms.TabPage TabPageHome;
|
||||||
internal System.Windows.Forms.TabPage TabPageSearch;
|
internal System.Windows.Forms.TabPage TabPageSearch;
|
||||||
internal System.Windows.Forms.TabPage TabPageGeneral;
|
internal System.Windows.Forms.TabPage TabPageGeneral;
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -44,10 +44,10 @@ namespace XenAdmin.Core
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static string GetFriendlyName(string s)
|
public static string GetFriendlyName(string s)
|
||||||
{
|
{
|
||||||
var result = FriendlyNames.GetString(s);
|
var result = FriendlyNames.GetString(s) ;
|
||||||
#if DEBUG
|
//#if DEBUG
|
||||||
Debug.Assert(result != null, $"{s} doesn't exist in FriendlyNames");
|
// Debug.Assert(result != null, $"{s} doesn't exist in FriendlyNames");
|
||||||
#endif
|
//#endif
|
||||||
switch (s)
|
switch (s)
|
||||||
{
|
{
|
||||||
case "Label-host.XenMemory":
|
case "Label-host.XenMemory":
|
||||||
|
9
XenModel/Messages.Designer.cs
generated
9
XenModel/Messages.Designer.cs
generated
@ -40015,6 +40015,15 @@ namespace XenAdmin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Rev: {0} BuildLab: {1}-{2}-{3}.
|
||||||
|
/// </summary>
|
||||||
|
public static string VERSION_ADDITIONAL {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("VERSION_ADDITIONAL", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to {0} version {1} (build {2}) {3}-bit..
|
/// Looks up a localized string similar to {0} version {1} (build {2}) {3}-bit..
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -7695,21 +7695,6 @@ This might result in failure to migrate VMs to this server during the RPU or to
|
|||||||
<data name="INSTALL_PENDING_UPDATES" xml:space="preserve">
|
<data name="INSTALL_PENDING_UPDATES" xml:space="preserve">
|
||||||
<value>Install pending &updates...</value>
|
<value>Install pending &updates...</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="INSTALL_SERVER_CERTIFICATE_ACTION_LINK" xml:space="preserve">
|
|
||||||
<value>Install certificate...</value>
|
|
||||||
</data>
|
|
||||||
<data name="INSTALL_SERVER_CERTIFICATE_DESCRIPTION" xml:space="preserve">
|
|
||||||
<value>Installing server certificate...</value>
|
|
||||||
</data>
|
|
||||||
<data name="INSTALL_SERVER_CERTIFICATE_HA" xml:space="preserve">
|
|
||||||
<value>You cannot install a server certificate when HA is on.</value>
|
|
||||||
</data>
|
|
||||||
<data name="INSTALL_SERVER_CERTIFICATE_MENU" xml:space="preserve">
|
|
||||||
<value>&Install certificate...</value>
|
|
||||||
</data>
|
|
||||||
<data name="INSTALL_SERVER_CERTIFICATE_TITLE" xml:space="preserve">
|
|
||||||
<value>Installing certificate on server {0}...</value>
|
|
||||||
</data>
|
|
||||||
<data name="INSTALL_XENSERVER_TOOLS" xml:space="preserve">
|
<data name="INSTALL_XENSERVER_TOOLS" xml:space="preserve">
|
||||||
<value>Install {0}</value>
|
<value>Install {0}</value>
|
||||||
</data>
|
</data>
|
||||||
@ -8961,7 +8946,7 @@ To ensure system stability, it is strongly recommended that you use multipathing
|
|||||||
<value>You must select a network</value>
|
<value>You must select a network</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MY_CITRIX_CREDENTIALS_URL" xml:space="preserve">
|
<data name="MY_CITRIX_CREDENTIALS_URL" xml:space="preserve">
|
||||||
<value></value>
|
<value />
|
||||||
</data>
|
</data>
|
||||||
<data name="NAME" xml:space="preserve">
|
<data name="NAME" xml:space="preserve">
|
||||||
<value>Name</value>
|
<value>Name</value>
|
||||||
@ -9881,15 +9866,6 @@ When you configure an NFS storage repository, you simply provide the host name o
|
|||||||
<data name="NEWVMWIZARD_TEMPLATEPAGE_WINDOWS" xml:space="preserve">
|
<data name="NEWVMWIZARD_TEMPLATEPAGE_WINDOWS" xml:space="preserve">
|
||||||
<value>Windows</value>
|
<value>Windows</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NEWVMWIZARD_VGPUPAGE_MULTIPLE_VGPU_INFO" xml:space="preserve">
|
|
||||||
<value>The selected virtual GPU type supports multiple instances.</value>
|
|
||||||
</data>
|
|
||||||
<data name="NEWVMWIZARD_VGPUPAGE_SINGLE_VGPU_INFO" xml:space="preserve">
|
|
||||||
<value>The selected virtual GPU type does not support multiple instances.</value>
|
|
||||||
</data>
|
|
||||||
<data name="NEWVMWIZARD_VGPUPAGE_TITLE" xml:space="preserve">
|
|
||||||
<value>Assign a virtual GPU</value>
|
|
||||||
</data>
|
|
||||||
<data name="NEWVMWIZARD_XENAPP_XENDESKTOP_INFO_MESSAGE_POOL" xml:space="preserve">
|
<data name="NEWVMWIZARD_XENAPP_XENDESKTOP_INFO_MESSAGE_POOL" xml:space="preserve">
|
||||||
<value>This pool is only licensed for {0} Virtual Apps and Desktops workloads</value>
|
<value>This pool is only licensed for {0} Virtual Apps and Desktops workloads</value>
|
||||||
</data>
|
</data>
|
||||||
@ -15260,4 +15236,7 @@ Do you want to synchronize immediately?</value>
|
|||||||
<data name="YUM_REPO_SYNC_YES_VISIBLE_BUTTON" xml:space="preserve">
|
<data name="YUM_REPO_SYNC_YES_VISIBLE_BUTTON" xml:space="preserve">
|
||||||
<value>Only synchronize &visible</value>
|
<value>Only synchronize &visible</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="VERSION_ADDITIONAL" xml:space="preserve">
|
||||||
|
<value>Rev: {0} BuildLab: {1}-{2}-{3}</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user