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 is the part
  # of the document which is visible.  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
    # Content size range [Integer]
    attr_accessor :range

    # Viewport page size [Integer]
    attr_accessor :page

    # Scroll increment for line [Integer]
    attr_accessor :line

    # Current scroll position [Integer]
    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

