initial checkin of yaulw (locally)

This commit is contained in:
Donald Duck
2016-02-15 12:32:26 -05:00
commit 857eda29e3
115 changed files with 27392 additions and 0 deletions

187
WinForms/MDIHelper.cs Normal file
View File

@@ -0,0 +1,187 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Yaulw.WinForms
{
/// <remarks>
/// Helper functions for WinForms MDI Layout
/// </remarks>
public static class MDIHelper
{
/// <summary>
/// Use this function to retrive the actual MDIClient Object from
/// an MDIContainer Form
/// </summary>
/// <param name="mdiFormContainer">Window form that is a valid MDIContainter</param>
/// <returns>Valid MdiClient object if found, null otherwise</returns>
public static MdiClient GetMDIClientObj(Form mdiFormContainer)
{
if (mdiFormContainer.IsMdiContainer)
{
for (int i = 0; i < mdiFormContainer.Controls.Count; ++i)
{
MdiClient mdiClient = mdiFormContainer.Controls[i] as MdiClient;
if (mdiClient != null)
return mdiClient;
}
}
return null;
}
/// <summary>
/// Closes all MDI Children for the specified MDI Form Container
/// </summary>
/// <param name="mdiFormContainer">Window form that is a valid MDIContainter</param>
public static void CloseAllChildWindows(Form mdiFormContainer)
{
if (mdiFormContainer.IsMdiContainer)
{
if (mdiFormContainer.MdiChildren.Length > 0)
{
Form[] form = mdiFormContainer.MdiChildren;
foreach (Form f in form)
{
f.Close();
}
}
}
}
/// <summary>
/// Changes the Child MDI Window Layout for the specified MDI Form Containter
/// </summary>
/// <param name="mdiFormContainter">Window form that is a valid MDIContainter</param>
/// <param name="pLayout">Specify the MdiLaoyt to use</param>
public static void HandleChildWindowsLayout(Form mdiFormContainer, MdiLayout pLayout)
{
if (!mdiFormContainer.IsMdiContainer)
throw new InvalidOperationException("mdiFormContainter not and MDI Container");
// We don't handle Vertical * we are done *
if (pLayout == MdiLayout.TileVertical)
return;
// Arrange Icon works fine with MDI
if (pLayout == MdiLayout.ArrangeIcons)
{
mdiFormContainer.LayoutMdi(pLayout);
return;
}
////
// For Some Reason *YTBD* Cascade and Horizontal MDI Layout stopped working,
// So now we just do the same logic manually and don't use the build in functions
// provided by the MDI
////
if (pLayout == MdiLayout.Cascade)
{
// Incr. Consts
const int N_INCR_TOP = 30;
const int N_INCR_LEFT = 18;
Form ActiveMDI = mdiFormContainer.ActiveMdiChild;
if (ActiveMDI != null)
{
int nTop = -1 * N_INCR_TOP;
int nLeft = -1 * N_INCR_LEFT;
// By Default, Cascade windows increases the size of the Form
// to a percentage of available with on the screen. any screen size > 800
// width we'll use the calculated width
MdiClient client = GetMDIClientObj(mdiFormContainer);
int nCalculatedWidth = (client.Width / 100) * 80;
int nCalculatedHeight = (client.Height / 100) * 60;
foreach (Form child in mdiFormContainer.MdiChildren)
{
if (child != ActiveMDI)
{
// Incr. nTop N' nLeft
nTop = nTop + N_INCR_TOP;
nLeft = nLeft + N_INCR_LEFT;
// Position Childe
child.Top = nTop;
child.Left = nLeft;
child.Height = (nCalculatedHeight > child.MinimumSize.Height) ? nCalculatedHeight : child.MinimumSize.Height;
child.Width = (nCalculatedWidth > child.MinimumSize.Width) ? nCalculatedWidth : child.MinimumSize.Width;
child.Activate();
}
}
// Position Active MDI
ActiveMDI.Top = nTop + N_INCR_TOP;
ActiveMDI.Left = nLeft + N_INCR_LEFT;
ActiveMDI.Height = (nCalculatedHeight > ActiveMDI.MinimumSize.Height) ? nCalculatedHeight : ActiveMDI.MinimumSize.Height;
ActiveMDI.Width = (nCalculatedWidth > ActiveMDI.MinimumSize.Width) ? nCalculatedWidth : ActiveMDI.MinimumSize.Width;
ActiveMDI.Activate();
}
}
else if (pLayout == MdiLayout.TileHorizontal)
{
Form ActiveMDI = mdiFormContainer.ActiveMdiChild;
if (ActiveMDI != null && mdiFormContainer.MdiChildren.Length > 1)
{
MdiClient client = GetMDIClientObj(mdiFormContainer);
int nMaxHeight = client.Height;
int nMaxWidth = client.Width;
// MDI Window Counts
int nCount = mdiFormContainer.MdiChildren.Length;
int nHalf = (nCount / 2);
// Position the first half of the Windows
int nTop = 0;
int nCalculatedHeight = nMaxHeight / nHalf;
int nCalculatedWidth = (nMaxWidth / 2);
for (int i = 0; i < nHalf; ++i)
{
Form child = mdiFormContainer.MdiChildren[i];
// Title the Window
child.Top = nTop;
child.Left = 0;
// Always set to Mins
child.Height = (child.MinimumSize.Height < nCalculatedHeight) ? nCalculatedHeight : child.MinimumSize.Height;
child.Width = (child.MinimumSize.Width < nCalculatedWidth) ? nCalculatedWidth : child.MinimumSize.Width;
// incr. nTop
nTop = nTop + nCalculatedHeight;
}
// Position the remaining half of the Windows
nTop = 0;
nCalculatedHeight = (nMaxHeight / (nCount - nHalf));
for (int i = nHalf; i < nCount; ++i)
{
Form child = mdiFormContainer.MdiChildren[i];
// Title the Window
child.Top = nTop;
child.Left = nCalculatedWidth;
// Always set to Mins
child.Height = (child.MinimumSize.Height < nCalculatedHeight) ? nCalculatedHeight : child.MinimumSize.Height;
child.Width = (child.MinimumSize.Width < (nCalculatedWidth - 20)) ? (nCalculatedWidth - 20) : child.MinimumSize.Width;
// incr. nTop
nTop = nTop + nCalculatedHeight;
}
}
else if (ActiveMDI != null && mdiFormContainer.MdiChildren.Length == 1)
{
ActiveMDI.Top = 0;
ActiveMDI.Left = 0;
ActiveMDI.Height = ActiveMDI.MinimumSize.Height;
ActiveMDI.Width = ActiveMDI.MinimumSize.Width;
}
}
}
}
}