module Fox
  #
  # The scroll bar is used when a document has a larger content than may be made
  # visible.  The range is the total size of the document, the page size is the viewable
  # space available for the document.  The size of the scrollbar thumb is adjusted to give
  # feedback of the relative sizes of each.
  # The scroll bar may be manipulated by the left mouse button (normal scrolling), by the
  # middle mouse button (same as the left mouse only the scroll position can jump to the 
  # place where the click is made), or by the right mouse button (vernier- or fine-scrolling).
  # Holding down the control key while scrolling with the left or middle mouse button also 
  # enables vernier-scrolling mode.  The vernier-scrolling mode is very useful for accurate
  # positioning in large documents.
  # Finally, if the mouse sports a wheel, the scroll bar can be manipulated by means
  # of the mouse wheel as well.  Holding down the Control-key during wheel motion
  # will cause the scrolling to go faster than normal.
  #
  # === Events
  #
  # The following messages are sent by FXScrollBar 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_MIDDLEBUTTONPRESS+::	sent when the middle mouse button goes down; the message data is an FXEvent instance.
  # +SEL_MIDDLEBUTTONRELEASE+::	sent when the middle mouse button goes up; the message data is an FXEvent instance.
  # +SEL_RIGHTBUTTONPRESS+::	sent when the right mouse button goes down; the message data is an FXEvent instance.
  # +SEL_RIGHTBUTTONRELEASE+::	sent when the right mouse button goes up; the message data is an FXEvent instance.
  # +SEL_CHANGED+::
  #   sent continuously while the scroll bar is moving; the message data is an integer
  #   indicating the current position of the scroll bar.
  # +SEL_COMMAND+::
  #   sent at the end of a scrolling operation, to signal that the scrolling is complete.
  #   The message data is an integer indicating the new position of the scroll bar.
  #
  # === Scrollbar styles
  #
  # +SCROLLBAR_HORIZONTAL+::	Horizontally oriented
  # +SCROLLBAR_VERTICAL+::	Vertically oriented (the default)
  #
  # === Message identifiers
  #
  # +ID_TIMEWHEEL+::	x
  # +ID_AUTOINC_LINE+::	x
  # +ID_AUTODEC_LINE+::	x
  # +ID_AUTOINC_PAGE+::	x
  # +ID_AUTODEC_PAGE+::	x
  # +ID_AUTOINC_PIX+::	x
  # +ID_AUTODEC_PIX+::	x
  #
  class FXScrollBar < FXWindow
    #
    # The content size range [Integer]. The range must be at least 1,
    # but may be smaller than the viewable page size.
    #
    attr_accessor :range
    
    #
    # The viewable page size [Integer]. The page size must be at least 1,
    # but may be larger than the range.
    #
    attr_accessor :page
    
    # Scroll increment for line [Integer]
    attr_accessor :line
    
    #
    # The current scroll position [Integer].
    # The position is always greater or equal to 0, up to the range less the page size.
    # If the range is less than the page size, the position will simply be equal to zero.
    #
    attr_accessor :position
    
    # Highlight color [FXColor]
    attr_accessor :hiliteColor

    # Shadow color [FXColor]
    attr_accessor :shadowColor

    # Border color [FXColor]
    attr_accessor :borderColor

    # Scroll bar style [Integer]
    attr_accessor :scrollbarStyle
    
    # Bar size [Integer]
    attr_accessor :barSize

    #
    # Return an initialized FXScrollBar instance.
    #
    # ==== Parameters:
    #
    # +p+::	the parent widget for this scroll bar [FXComposite]
    # +target+::	the initial message target (if any) for this scroll bar [FXObject]
    # +selector+::	the message identifier for this scroll bar [Integer]
    # +opts+::	the options [Integer]
    # +x+::	initial x-position, when the +LAYOUT_FIX_X+ layout hint is in effect [Integer]
    # +y+::	initial y-position, when the +LAYOUT_FIX_Y+ layout hint is in effect [Integer]
    # +width+::	initial width, when the +LAYOUT_FIX_WIDTH+ layout hint is in effect [Integer]
    # +height+::	initial height, when the +LAYOUT_FIX_HEIGHT+ layout hint is in effect [Integer]
    #
    def initialize(p, target=nil, selector=0, opts=SCROLLBAR_VERTICAL, x=0, y=0, width=0, height=0) # :yields: theScrollBar
    end
  end
  
  #
  # Corner between scroll bars
  #
  class FXScrollCorner < FXWindow
    #
    # Return an initialized FXScrollCorner instance, where _p_ is the
    # parent window (an FXComposite instance).
    #
    def initialize(p) # :yields: theScrollCorner
    end
  end
end

