81 lines
2.7 KiB
VB.net
81 lines
2.7 KiB
VB.net
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
|