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
