------ #### RaUIV4 V4.0.2311.0701 - *.[全新]整合了MyDb、ryControls、MyDb_MySQL等dll文件到RaUI一个项目。 - *.[新增]新增ApkOp类,可以轻松获取APK信息。 - *.[新增]新增JsonExt扩展类,让Json操作更简单。 - *.[新增]新增WebP类,可以支持webp格式的图片。 - *.[改进]ryQuickSQL中的AddField方法改为自动替换已存在的同名值。 - *.[修复]ryQuickSQL中的AddFieldCalc方法无法正常计算的BUG。
173 lines
5.9 KiB
C#
173 lines
5.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.IO;
|
|
using System.IO.Compression;
|
|
using System.Linq;
|
|
using System.Windows.Forms;
|
|
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
|
|
namespace WeifenLuo.WinFormsUI.Docking
|
|
{
|
|
public abstract class ThemeBase : Component
|
|
{
|
|
private Color _dockBackColor;
|
|
private bool _showAutoHideContentOnHover;
|
|
|
|
protected ThemeBase()
|
|
{
|
|
Extender = new DockPanelExtender();
|
|
}
|
|
|
|
public DockPanelSkin Skin { get; protected set; }
|
|
|
|
public DockPanelColorPalette ColorPalette { get; protected set; }
|
|
|
|
public IImageService ImageService { get; protected set; }
|
|
|
|
public IPaintingService PaintingService { get; protected set; }
|
|
|
|
protected ToolStripRenderer ToolStripRenderer { get; set;}
|
|
|
|
private Dictionary<ToolStrip, KeyValuePair<ToolStripRenderMode, ToolStripRenderer>> _stripBefore
|
|
= new Dictionary<ToolStrip, KeyValuePair<ToolStripRenderMode, ToolStripRenderer>>();
|
|
|
|
public void ApplyTo(ToolStrip toolStrip)
|
|
{
|
|
if (toolStrip == null)
|
|
return;
|
|
|
|
_stripBefore[toolStrip] = new KeyValuePair<ToolStripRenderMode, ToolStripRenderer>(toolStrip.RenderMode, toolStrip.Renderer);
|
|
if(ToolStripRenderer != null)
|
|
toolStrip.Renderer = ToolStripRenderer;
|
|
|
|
if (Win32Helper.IsRunningOnMono)
|
|
{
|
|
foreach (var item in toolStrip.Items.OfType<ToolStripDropDownItem>())
|
|
{
|
|
ItemResetOwnerHack(item);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void ItemResetOwnerHack(ToolStripDropDownItem item)
|
|
{
|
|
var oldOwner = item.DropDown.OwnerItem;
|
|
item.DropDown.OwnerItem = null;
|
|
item.DropDown.OwnerItem = oldOwner;
|
|
|
|
foreach (var child in item.DropDownItems.OfType<ToolStripDropDownItem>())
|
|
{
|
|
ItemResetOwnerHack(child);
|
|
}
|
|
}
|
|
|
|
private KeyValuePair<ToolStripManagerRenderMode, ToolStripRenderer> _managerBefore;
|
|
|
|
public void ApplyToToolStripManager()
|
|
{
|
|
_managerBefore = new KeyValuePair<ToolStripManagerRenderMode, ToolStripRenderer>(ToolStripManager.RenderMode, ToolStripManager.Renderer);
|
|
}
|
|
|
|
public Measures Measures { get; } = new Measures();
|
|
|
|
public bool ShowAutoHideContentOnHover { get; protected set; } = true;
|
|
|
|
public void ApplyTo(DockPanel dockPanel)
|
|
{
|
|
if (dockPanel.Panes.Count > 0)
|
|
throw new InvalidOperationException("Before applying themes all panes must be closed.");
|
|
|
|
if (dockPanel.FloatWindows.Count > 0)
|
|
throw new InvalidOperationException("Before applying themes all float windows must be closed.");
|
|
|
|
if (dockPanel.Contents.Count > 0)
|
|
throw new InvalidOperationException("Before applying themes all dock contents must be closed.");
|
|
|
|
if (ColorPalette == null)
|
|
{
|
|
dockPanel.ResetDummy();
|
|
}
|
|
else
|
|
{
|
|
_dockBackColor = dockPanel.DockBackColor;
|
|
dockPanel.DockBackColor = ColorPalette.MainWindowActive.Background;
|
|
dockPanel.SetDummy();
|
|
}
|
|
|
|
_showAutoHideContentOnHover = dockPanel.ShowAutoHideContentOnHover;
|
|
dockPanel.ShowAutoHideContentOnHover = ShowAutoHideContentOnHover;
|
|
}
|
|
|
|
internal void PostApply(DockPanel dockPanel)
|
|
{
|
|
dockPanel.ResetAutoHideStripControl();
|
|
dockPanel.ResetAutoHideStripWindow();
|
|
dockPanel.ResetDockWindows();
|
|
}
|
|
|
|
public virtual void CleanUp(DockPanel dockPanel)
|
|
{
|
|
if (dockPanel != null)
|
|
{
|
|
if (ColorPalette != null)
|
|
{
|
|
dockPanel.DockBackColor = _dockBackColor;
|
|
}
|
|
|
|
dockPanel.ShowAutoHideContentOnHover = _showAutoHideContentOnHover;
|
|
}
|
|
|
|
foreach (var item in _stripBefore)
|
|
{
|
|
var strip = item.Key;
|
|
var cache = item.Value;
|
|
if (cache.Key == ToolStripRenderMode.Custom)
|
|
{
|
|
if (cache.Value != null)
|
|
strip.Renderer = cache.Value;
|
|
}
|
|
else
|
|
{
|
|
strip.RenderMode = cache.Key;
|
|
}
|
|
}
|
|
|
|
_stripBefore.Clear();
|
|
if (_managerBefore.Key == ToolStripManagerRenderMode.Custom)
|
|
{
|
|
if (_managerBefore.Value != null)
|
|
ToolStripManager.Renderer = _managerBefore.Value;
|
|
}
|
|
else
|
|
{
|
|
ToolStripManager.RenderMode = _managerBefore.Key;
|
|
}
|
|
}
|
|
|
|
public DockPanelExtender Extender { get; private set; }
|
|
|
|
public static byte[] Decompress(byte[] fileToDecompress)
|
|
{
|
|
using (MemoryStream originalFileStream = new MemoryStream(fileToDecompress))
|
|
{
|
|
using (MemoryStream decompressedFileStream = new MemoryStream())
|
|
{
|
|
using (GZipStream decompressionStream = new GZipStream(originalFileStream, CompressionMode.Decompress))
|
|
{
|
|
//Copy the decompression stream into the output file.
|
|
byte[] buffer = new byte[4096];
|
|
int numRead;
|
|
while ((numRead = decompressionStream.Read(buffer, 0, buffer.Length)) != 0)
|
|
{
|
|
decompressedFileStream.Write(buffer, 0, numRead);
|
|
}
|
|
|
|
return decompressedFileStream.ToArray();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|