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