diff --git a/GUIs.Common/Common.vbproj b/GUIs.Common/Common.vbproj
index 5b96cea7..6145fd45 100644
--- a/GUIs.Common/Common.vbproj
+++ b/GUIs.Common/Common.vbproj
@@ -209,6 +209,7 @@
Form
+
diff --git a/GUIs.Common/SplitContainerBuilder.vb b/GUIs.Common/SplitContainerBuilder.vb
new file mode 100644
index 00000000..ec6a19a8
--- /dev/null
+++ b/GUIs.Common/SplitContainerBuilder.vb
@@ -0,0 +1,80 @@
+Imports System.Windows.Forms
+Imports DevExpress.XtraBars.Ribbon
+Imports DevExpress.XtraEditors
+Imports DigitalData.Modules.Base
+Imports DigitalData.Modules.Logging
+
+Public Class SplitContainerBuilder
+ Inherits BaseClass
+
+ Private LastWindowState As FormWindowState = FormWindowState.Normal
+ Private SplitContainer As SplitContainerControl
+ Private WithEvents Form As Form
+
+ Private Const BIG_SIDEPANEL_LIMIT = 0.55
+ Private Const SMALL_SIDEPANEL_LIMIT = 0.9
+ Private Const RESIZE_FACTOR_HORIZONTAL = 0.7
+ Private Const RESIZE_FACTOR_VERTICAL = 0.4
+
+ Public Sub New(pLogConfig As LogConfig, pForm As Form, pSplitContainer As SplitContainerControl)
+ MyBase.New(pLogConfig)
+ Form = pForm
+ SplitContainer = pSplitContainer
+ End Sub
+
+ Public Sub InitAutoResize()
+ AddHandler Form.Resize, AddressOf Form_Resize
+ AddHandler Form.ResizeEnd, AddressOf Form_ResizeEnd
+ End Sub
+
+ Private Sub Form_ResizeEnd(sender As Object, e As EventArgs)
+ ResizePanel()
+ End Sub
+
+ Private Sub Form_Resize(sender As Object, e As EventArgs)
+ If LastWindowState <> Form.WindowState Then
+ LastWindowState = Form.WindowState
+ ResizePanel()
+ End If
+ End Sub
+
+ Private Sub ResizePanel()
+ Dim oWindowDimension As Integer
+ Dim oResizeFactor As Double
+ Dim oSplitterPosition As Integer = SplitContainer.SplitterPosition
+ Dim oPlaceholdersExpanded As Boolean = Not SplitContainer.Collapsed
+
+ If SplitContainer.Horizontal Then
+ oWindowDimension = Form.Width
+ oResizeFactor = RESIZE_FACTOR_HORIZONTAL
+ Else
+ oWindowDimension = Form.Height
+ oResizeFactor = RESIZE_FACTOR_VERTICAL
+
+ ' Factor in the height of the RibbonControl
+ If TypeOf Form Is RibbonForm Then
+ oWindowDimension -= 160
+ End If
+ End If
+
+ If oSplitterPosition > (oWindowDimension * SMALL_SIDEPANEL_LIMIT) Then
+ ' Very small Sidepanel
+ '----------------,----
+ '| | |
+ '| main panel |sp|
+ '| | |
+ '---------------------
+ oSplitterPosition = oWindowDimension * oResizeFactor
+ ElseIf oSplitterPosition < (oWindowDimension * BIG_SIDEPANEL_LIMIT) Then
+ ' Very big Sidepanel
+ '----------,----------
+ '| | |
+ '|mp| side panel |
+ '| | |
+ '---------------------
+ oSplitterPosition = oWindowDimension * oResizeFactor
+ End If
+
+ SplitContainer.SplitterPosition = oSplitterPosition
+ End Sub
+End Class