mirror of
https://github.com/colhountech/DarkUI.Net5.git
synced 2025-07-03 23:59:26 +03:00
231 lines
7.0 KiB
C#
231 lines
7.0 KiB
C#
using DarkUI.Docking;
|
|
using DarkUI.Forms;
|
|
using DarkUI.Win32;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Windows.Forms;
|
|
|
|
namespace Example
|
|
{
|
|
public partial class MainForm : DarkForm
|
|
{
|
|
#region Field Region
|
|
|
|
private List<DarkDockContent> _toolWindows = new List<DarkDockContent>();
|
|
|
|
private DockProject _dockProject;
|
|
private DockProperties _dockProperties;
|
|
private DockConsole _dockConsole;
|
|
private DockLayers _dockLayers;
|
|
private DockHistory _dockHistory;
|
|
|
|
#endregion
|
|
|
|
#region Constructor Region
|
|
|
|
public MainForm()
|
|
{
|
|
InitializeComponent();
|
|
|
|
// Add the control scroll message filter to re-route all mousewheel events
|
|
// to the control the user is currently hovering over with their cursor.
|
|
Application.AddMessageFilter(new DarkControlScrollFilter());
|
|
|
|
// Add the dock panel message filter to filter through for dock panel splitter
|
|
// input before letting events pass through to the rest of the application.
|
|
Application.AddMessageFilter(DockPanel.MessageFilter);
|
|
|
|
// Hook in all the UI events manually for clarity.
|
|
HookEvents();
|
|
|
|
// Build the tool windows and add them to the dock panel
|
|
_dockProject = new DockProject();
|
|
_dockProperties = new DockProperties();
|
|
_dockConsole = new DockConsole();
|
|
_dockLayers = new DockLayers();
|
|
_dockHistory = new DockHistory();
|
|
|
|
// Add the tool windows to a list
|
|
_toolWindows.Add(_dockProject);
|
|
_toolWindows.Add(_dockProperties);
|
|
_toolWindows.Add(_dockConsole);
|
|
_toolWindows.Add(_dockLayers);
|
|
_toolWindows.Add(_dockHistory);
|
|
|
|
// Deserialize if a previous state is stored
|
|
if (File.Exists("dockpanel.config"))
|
|
{
|
|
DeserializeDockPanel("dockpanel.config");
|
|
}
|
|
else
|
|
{
|
|
// Add the tool window list contents to the dock panel
|
|
foreach (var toolWindow in _toolWindows)
|
|
DockPanel.AddContent(toolWindow);
|
|
|
|
// Add the history panel to the layer panel group
|
|
DockPanel.AddContent(_dockHistory, _dockLayers.DockGroup);
|
|
}
|
|
|
|
// Check window menu items which are contained in the dock panel
|
|
BuildWindowMenu();
|
|
|
|
// Add dummy documents to the main document area of the dock panel
|
|
DockPanel.AddContent(new DockDocument("Document 1", Icons.document_16xLG));
|
|
DockPanel.AddContent(new DockDocument("Document 2", Icons.document_16xLG));
|
|
DockPanel.AddContent(new DockDocument("Document 3", Icons.document_16xLG));
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Method Region
|
|
|
|
private void HookEvents()
|
|
{
|
|
FormClosing += MainForm_FormClosing;
|
|
|
|
DockPanel.ContentAdded += DockPanel_ContentAdded;
|
|
DockPanel.ContentRemoved += DockPanel_ContentRemoved;
|
|
|
|
mnuNewFile.Click += NewFile_Click;
|
|
mnuClose.Click += Close_Click;
|
|
|
|
btnNewFile.Click += NewFile_Click;
|
|
|
|
mnuDialog.Click += Dialog_Click;
|
|
|
|
mnuProject.Click += Project_Click;
|
|
mnuProperties.Click += Properties_Click;
|
|
mnuConsole.Click += Console_Click;
|
|
mnuLayers.Click += Layers_Click;
|
|
mnuHistory.Click += History_Click;
|
|
|
|
mnuAbout.Click += About_Click;
|
|
}
|
|
|
|
private void ToggleToolWindow(DarkToolWindow toolWindow)
|
|
{
|
|
if (toolWindow.DockPanel == null)
|
|
DockPanel.AddContent(toolWindow);
|
|
else
|
|
DockPanel.RemoveContent(toolWindow);
|
|
}
|
|
|
|
private void BuildWindowMenu()
|
|
{
|
|
mnuProject.Checked = DockPanel.ContainsContent(_dockProject);
|
|
mnuProperties.Checked = DockPanel.ContainsContent(_dockProperties);
|
|
mnuConsole.Checked = DockPanel.ContainsContent(_dockConsole);
|
|
mnuLayers.Checked = DockPanel.Contains(_dockLayers);
|
|
mnuHistory.Checked = DockPanel.Contains(_dockHistory);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Event Handler Region
|
|
|
|
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
|
|
{
|
|
SerializeDockPanel("dockpanel.config");
|
|
}
|
|
|
|
private void DockPanel_ContentAdded(object sender, DockContentEventArgs e)
|
|
{
|
|
if (_toolWindows.Contains(e.Content))
|
|
BuildWindowMenu();
|
|
}
|
|
|
|
private void DockPanel_ContentRemoved(object sender, DockContentEventArgs e)
|
|
{
|
|
if (_toolWindows.Contains(e.Content))
|
|
BuildWindowMenu();
|
|
}
|
|
|
|
private void NewFile_Click(object sender, EventArgs e)
|
|
{
|
|
var newFile = new DockDocument("New document", Icons.document_16xLG);
|
|
DockPanel.AddContent(newFile);
|
|
}
|
|
|
|
private void Close_Click(object sender, EventArgs e)
|
|
{
|
|
Close();
|
|
}
|
|
|
|
private void Dialog_Click(object sender, EventArgs e)
|
|
{
|
|
var test = new DialogControls();
|
|
test.ShowDialog();
|
|
}
|
|
|
|
private void Project_Click(object sender, EventArgs e)
|
|
{
|
|
ToggleToolWindow(_dockProject);
|
|
}
|
|
|
|
private void Properties_Click(object sender, EventArgs e)
|
|
{
|
|
ToggleToolWindow(_dockProperties);
|
|
}
|
|
|
|
private void Console_Click(object sender, EventArgs e)
|
|
{
|
|
ToggleToolWindow(_dockConsole);
|
|
}
|
|
|
|
private void Layers_Click(object sender, EventArgs e)
|
|
{
|
|
ToggleToolWindow(_dockLayers);
|
|
}
|
|
|
|
private void History_Click(object sender, EventArgs e)
|
|
{
|
|
ToggleToolWindow(_dockHistory);
|
|
}
|
|
|
|
private void About_Click(object sender, EventArgs e)
|
|
{
|
|
var about = new DialogAbout();
|
|
about.ShowDialog();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Serialization Region
|
|
|
|
private void SerializeDockPanel(string path)
|
|
{
|
|
var state = DockPanel.GetDockPanelState();
|
|
SerializerHelper.Serialize(state, path);
|
|
}
|
|
|
|
private void DeserializeDockPanel(string path)
|
|
{
|
|
var state = SerializerHelper.Deserialize<DockPanelState>(path);
|
|
DockPanel.RestoreDockPanelRegions(state);
|
|
|
|
foreach (var key in state.OpenContent)
|
|
{
|
|
var content = GetContentBySerializationKey(key);
|
|
|
|
if (content != null)
|
|
DockPanel.AddContent(content);
|
|
}
|
|
}
|
|
|
|
private DarkDockContent GetContentBySerializationKey(string key)
|
|
{
|
|
foreach (var window in _toolWindows)
|
|
{
|
|
if (window.SerializationKey == key)
|
|
return window;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|