Skip to content
Snippets Groups Projects
FX4Splitter.rb 5.2 KiB
Newer Older
  • Learn to ignore specific revisions
  • module Fox
    
      #
      # The four-way splitter is a layout manager which manages
      # four children like four panes in a window.
      # You can use a four-way splitter for example in a CAD program
      # where you may want to maintain three orthographic views, and
      # one oblique view of a model.
      # The four-way splitter allows interactive repartitioning of the
      # panes by means of moving the central splitter bars.
      # When the four-way splitter is itself resized, each child is
      # proportionally resized, maintaining the same split-percentage.
      #
      # === Events
      #
      # The following messages are sent by FX4Splitter to its target:
      #
    
      # +SEL_LEFTBUTTONPRESS+:: sent when the left mouse button goes down; the message data is an FXEvent instance.
      # +SEL_LEFTBUTTONRELEASE+:: sent when the left mouse button goes up; the message data is an FXEvent instance.
      # +SEL_COMMAND+::  sent at the end of a resize operation, to signal that the resize is complete
      # +SEL_CHANGED+::  sent continuously while a resize operation is occurring
    
      #
      # === Splitter options
      #
      # +FOURSPLITTER_TRACKING+::   Track continuously during split
      # +FOURSPLITTER_NORMAL+::     Normal mode (no continuous tracking)
      #
      # === Expansion options
      #
    
      # +ExpandNone+::  None expanded
      # +ExpandTopLeft+::  Expand top left child
      # +ExpandTopRight+::  Expand top right child
      # +ExpandBottomLeft+:: Expand bottom left child
      # +ExpandBottomRight+:: Expand bottom right child
      # +ExpandTop+::  Expand top children
      # +ExpandBottom+::  Expand bottom children
      # +ExpandLeft+::  Expand left children
      # +ExpandRight+::  Expand right children
      # +ExpandAll+::  Expand all children
    
      #
      # === Message identifiers
      #
    
      # +ID_EXPAND_NONE+::  None expanded
      # +ID_EXPAND_TOP+::  Expand top left and top right panes
      # +ID_EXPAND_BOTTOM+:: Expand bottom left and bottom right panes
      # +ID_EXPAND_LEFT+::  Expand leftmost panes
      # +ID_EXPAND_RIGHT+::  Expand rightmost panes
      # +ID_EXPAND_TOPLEFT+:: Expand top left pane
      # +ID_EXPAND_TOPRIGHT+:: Expand top right pane
      # +ID_EXPAND_BOTTOMLEFT+:: Expand bottom left pane
      # +ID_EXPAND_BOTTOMRIGHT+:: Expand bottom right pane
      # +ID_EXPAND_ALL+::  Expand all panes
    
      #
      class FX4Splitter < FXComposite
    
        # Horizontal split fraction [Integer]
        attr_accessor :hSplit
    
        # Vertical split fraction [Integer]
        attr_accessor :vSplit
    
        # Current splitter style, either +FOURSPLITTER_TRACKING+ or +FOURSPLITTER_NORMAL+
        attr_accessor :splitterStyle
    
        # Splitter bar width, in pixels [Integer]
        attr_accessor :barSize
    
        # Currently expanded child (some combination of the expansion flags, or zero if no panes are expanded)
        attr_accessor :expanded
    
        # Top left child window, if any {FXWindow}
    
        attr_reader :topLeft
    
        # Top right child window, if any {FXWindow}
    
        attr_reader :topRight
    
        # Bottom left child window, if any {FXWindow}
    
        attr_reader :bottomLeft
    
        # Bottom right child window, if any {FXWindow}
    
        attr_reader :bottomRight
    
        #
        # Return an initialized FX4Splitter instance, initially shown as four unexpanded panes
        #
        # ==== Parameters:
        #
    
        # +p+:: the parent widget for this splitter {FXComposite}
    
        # +opts+:: the options [Integer]
        # +x+:: initial x-position [Integer]
        # +y+:: initial y-position [Integer]
        # +width+:: initial width [Integer]
        # +height+:: initial height [Integer]
    
        #
        def initialize(p, opts=FOURSPLITTER_NORMAL, x=0, y=0, width=0, height=0) # :yields: theSplitter
        end
    
        #
        # Return an initialized FX4Splitter instance, initially shown as four unexpanded panes;
        # notifies _tgt_ about size changes.
        #
        # ==== Parameters:
        #
    
        # +p+:: the parent widget for this splitter {FXComposite}
        # +target+:: message target {FXObject}
    
        # +selector+:: message identifier [Integer]
        # +opts+:: the options [Integer]
        # +x+:: initial x-position [Integer]
        # +y+:: initial y-position [Integer]
        # +width+:: initial width [Integer]
        # +height+:: initial height [Integer]
    
        #
        def initialize(p, tgt, sel, opts=FOURSPLITTER_NORMAL, x=0, y=0, width=0, height=0) # :yields: theSplitter
        end
    
        #
        # Change horizontal split fraction. The split fraction _s_ is
        # an integer value between 0 and 10000 (inclusive), indicating
        # how much space to allocate to the leftmost panes. For example,
        # to split the panes at 35 percent, use:
        #
        #   fourSplitter.setHSplit(3500)
        #
        # or just:
        #
        #   fourSplitter.hSplit = 3500
        #
        def setHSplit(s); end
    
        #
        # Return the horizontal split fraction, an integer between 0 and
    
        # 10000 inclusive. See {FX4Splitter#setHSplit} for more information.
    
        #
        def getHSplit(); end
    
        #
        # Change vertical split fraction. The split fraction _s_ is
        # an integer value between 0 and 10000 (inclusive), indicating
        # how much space to allocate to the topmost panes. For example,
        # to split the panes at 35 percent, use:
        #
        #   fourSplitter.setVSplit(3500)
        #
        # or just:
        #
        #   fourSplitter.vSplit = 3500
        #
        def setVSplit(s); end
    
        #
        # Return the vertical split fraction, an integer between 0 and
    
        # 10000 inclusive. See {FX4Splitter#setVSplit} for more information.
    
        #
        def getVSplit(); end
      end
    end