From 5172f1643e141c2d9aa67ff871ea9186e3fcb066 Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Wed, 21 Sep 2022 15:54:44 +0200 Subject: [PATCH] Common: Add SplitContainerBuilder --- GUIs.Common/Common.vbproj | 1 + GUIs.Common/SplitContainerBuilder.vb | 80 ++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 GUIs.Common/SplitContainerBuilder.vb 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