New Splitter implementation

  1. 2 weeks ago

    Alternative Xojo Splitter Code

    The following code should be viewed in conjunction with my screen shots previously posted. You can find (and optionally download) them here:

    Click on "SB Screen Shots" at the top left-hand-side of the page and, if asked for a p/w, it is the same thing (omitting the quotes). Note that these are .png files; if you need a different format (for example, if you can't resize them without blurring the images), please e-Mail request to:

    Also please note that this short code does not claim to be particularly elegant and its use of Public variables is not necessarily best practice; it is merely a test to demonstrate that the concept and paradigm work.

    Global Variables:
    Public Property gInitialABWidth as Integer
    Public Property gInitialABHeight as Integer
    Public Property gInitialCBHeight as Integer
    Public Property gInitialCBWidth as Integer
    Public Property gInitialNBHeight as Integer
    Public Property gInitialNBWidth as Integer
    Public Property gInitialSBHeight as Integer
    Public Property gInitialSBWidth as Integer
    Public Property gRelativePSValue as Single
    MainWindow Code:
    // Set application's window size to occupy two-thirds of maximum available:
    self.Width = Screen.ScreenAt(0).AvailableWidth / 3 * 2
    self.Height = Screen.ScreenAt(0).AvailableHeight / 3 * 2
    // Centre it:
    Self.Left = (Screen.ScreenAt(0).AvailableWidth - Self.Width) / 2
    Self.Top = (Screen.ScreenAt(0).AvailableHeight - Self.Height) / 2
    // Position Navigator and Control boxes, taking three-quarters
    // and one-quarter respectively of left-hand-side of screen:
    NavigatorBox.Width = 171 'Arbitary left-right break
    NavigatorBox.Height = self.Height / 4 * 3
    ControlBox.Width = NavigatorBox.Width
    ControlBox.Top = NavigatorBox.Height
    ControlBox.Height = self.Height - NavigatorBox.Height - 5 '(Allow a 5-unit border cushion at bottom)
    // Position Analyses and Sand boxes, each
    // taking half of right-hand-side of screen:
    AnalysesBox.Width = self.Width - NavigatorBox.Width - 8 ' (Allow an 8-unit border cushion at right)
    AnalysesBox.Height = self.Height / 2
    SandBox.Width = AnalysesBox.Width
    SandBox.Top = AnalysesBox.Height
    SandBox.Height = AnalysesBox.Height - 4 '(Allow a 4 unit cushion at bottom)
    // Preserve the dimensions for use by other routines . . .
    gInitialNBWidth = NavigatorBox.Width
    gInitialNBHeight = NavigatorBox.Height
    gInitialCBWidth = ControlBox.Width
    gInitialCBHeight = ControlBox.Height
    gInitialABWidth = AnalysesBox.Width
    gInitialABHeight = AnalysesBox.Height
    gInitialSBWidth = SandBox.Width
    gInitialSBHeight = SandBox.Height
    // If window is being resized, ensure Navigator and Control Boxes don't recede:
    If NavigatorBox.Width < gInitialNBWidth then NavigatorBox.Width = gInitialNBWidth
    If ControlBox.Width < gInitialCBWidth then ControlBox.Width = gInitialCBWidth
    Slider Control (Name: PaneSplitter, Allow Live Scrolling: On)
    // Convert Pane Splitter slider value to a floating point value between 0 and 1:
    gRelativePSValue = PaneSplitter.Value / PaneSplitter.MaximumValue
    // Adjust right-hand window space accordingly:
    AnalysesBox.Height = gInitialABHeight * gRelativePSValue * 2
    SandBox.Top = AnalysesBox.Height
    SandBox.Height = self.Height - SandBox.Top - 5 '(Allow a 5-unit border cushion at bottom)

or Sign Up to reply!