pascalabcnet/WeifenLuoLinux/WinFormsUI/Docking/DockPanelExtender.cs
Mikhalkovich Stanislav 3072383106 Для Linux-версии исправлен DockContent, редактор (показ всплывающего окна)
Сделан новый проект VisualPABCLinux
И пришлось склонировать PluginsSupport, поскольку он вносит зависимость по редактору
Компоненты WeifenLuo для Linux надо после перекомпиляции скопировать в Libraries - подшить их к основному проекту просто не получилось
2022-06-30 09:47:11 +03:00

228 lines
7.2 KiB
C#

using System.Drawing;
using System.Diagnostics.CodeAnalysis;
using System.Windows.Forms;
using static WeifenLuo.WinFormsUI.Docking.DockPanel;
using static WeifenLuo.WinFormsUI.Docking.DockPanel.DockDragHandler;
namespace WeifenLuo.WinFormsUI.Docking
{
public sealed class DockPanelExtender
{
[SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")]
public interface IDockPaneFactory
{
DockPane CreateDockPane(IDockContent content, DockState visibleState, bool show);
[SuppressMessage("Microsoft.Naming", "CA1720:AvoidTypeNamesInParameters", MessageId = "1#")]
DockPane CreateDockPane(IDockContent content, FloatWindow floatWindow, bool show);
DockPane CreateDockPane(IDockContent content, DockPane previousPane, DockAlignment alignment,
double proportion, bool show);
[SuppressMessage("Microsoft.Naming", "CA1720:AvoidTypeNamesInParameters", MessageId = "1#")]
DockPane CreateDockPane(IDockContent content, Rectangle floatWindowBounds, bool show);
}
public interface IDockPaneSplitterControlFactory
{
DockPane.SplitterControlBase CreateSplitterControl(DockPane pane);
}
public interface IWindowSplitterControlFactory
{
SplitterBase CreateSplitterControl(ISplitterHost host);
}
[SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")]
public interface IFloatWindowFactory
{
FloatWindow CreateFloatWindow(DockPanel dockPanel, DockPane pane);
FloatWindow CreateFloatWindow(DockPanel dockPanel, DockPane pane, Rectangle bounds);
}
public interface IDockWindowFactory
{
DockWindow CreateDockWindow(DockPanel dockPanel, DockState dockState);
}
[SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")]
public interface IDockPaneCaptionFactory
{
DockPaneCaptionBase CreateDockPaneCaption(DockPane pane);
}
[SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")]
public interface IDockPaneStripFactory
{
DockPaneStripBase CreateDockPaneStrip(DockPane pane);
}
[SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")]
public interface IAutoHideStripFactory
{
AutoHideStripBase CreateAutoHideStrip(DockPanel panel);
}
public interface IAutoHideWindowFactory
{
AutoHideWindowControl CreateAutoHideWindow(DockPanel panel);
}
public interface IPaneIndicatorFactory
{
IPaneIndicator CreatePaneIndicator(ThemeBase theme);
}
public interface IPanelIndicatorFactory
{
IPanelIndicator CreatePanelIndicator(DockStyle style, ThemeBase theme);
}
public interface IDockOutlineFactory
{
DockOutlineBase CreateDockOutline();
}
public interface IDockIndicatorFactory
{
DockIndicator CreateDockIndicator(DockDragHandler dockDragHandler);
}
#region DefaultDockPaneFactory
private class DefaultDockPaneFactory : IDockPaneFactory
{
public DockPane CreateDockPane(IDockContent content, DockState visibleState, bool show)
{
return new DockPane(content, visibleState, show);
}
public DockPane CreateDockPane(IDockContent content, FloatWindow floatWindow, bool show)
{
return new DockPane(content, floatWindow, show);
}
public DockPane CreateDockPane(IDockContent content, DockPane prevPane, DockAlignment alignment,
double proportion, bool show)
{
return new DockPane(content, prevPane, alignment, proportion, show);
}
public DockPane CreateDockPane(IDockContent content, Rectangle floatWindowBounds, bool show)
{
return new DockPane(content, floatWindowBounds, show);
}
}
#endregion
#region DefaultFloatWindowFactory
private class DefaultFloatWindowFactory : IFloatWindowFactory
{
public FloatWindow CreateFloatWindow(DockPanel dockPanel, DockPane pane)
{
return new FloatWindow(dockPanel, pane);
}
public FloatWindow CreateFloatWindow(DockPanel dockPanel, DockPane pane, Rectangle bounds)
{
return new FloatWindow(dockPanel, pane, bounds);
}
}
#endregion
private IDockPaneFactory m_dockPaneFactory = null;
public IDockPaneFactory DockPaneFactory
{
get
{
if (m_dockPaneFactory == null)
{
m_dockPaneFactory = new DefaultDockPaneFactory();
}
return m_dockPaneFactory;
}
set
{
m_dockPaneFactory = value;
}
}
public IDockPaneSplitterControlFactory DockPaneSplitterControlFactory { get; set; }
public IWindowSplitterControlFactory WindowSplitterControlFactory { get; set; }
private IFloatWindowFactory m_floatWindowFactory = null;
public IFloatWindowFactory FloatWindowFactory
{
get
{
if (m_floatWindowFactory == null)
{
m_floatWindowFactory = new DefaultFloatWindowFactory();
}
return m_floatWindowFactory;
}
set
{
m_floatWindowFactory = value;
}
}
public IDockWindowFactory DockWindowFactory { get; set; }
public IDockPaneCaptionFactory DockPaneCaptionFactory { get; set; }
public IDockPaneStripFactory DockPaneStripFactory { get; set; }
private IAutoHideStripFactory m_autoHideStripFactory = null;
public IAutoHideStripFactory AutoHideStripFactory
{
get
{
return m_autoHideStripFactory;
}
set
{
if (m_autoHideStripFactory == value)
{
return;
}
m_autoHideStripFactory = value;
}
}
private IAutoHideWindowFactory m_autoHideWindowFactory;
public IAutoHideWindowFactory AutoHideWindowFactory
{
get { return m_autoHideWindowFactory; }
set
{
if (m_autoHideWindowFactory == value)
{
return;
}
m_autoHideWindowFactory = value;
}
}
public IPaneIndicatorFactory PaneIndicatorFactory { get; set; }
public IPanelIndicatorFactory PanelIndicatorFactory { get; set; }
public IDockOutlineFactory DockOutlineFactory { get; set; }
public IDockIndicatorFactory DockIndicatorFactory { get; set; }
}
}