module Fox
  #
  # The MDI client window manages a number of MDI child windows in a multiple-document
  # interface (MDI) application. MDI child windows usually receive messages from the GUI controls
  # by delegation via the MDI client.  This is accomplished by making the MDI client window
  # the target for most GUI controls.  The MDI client filters out messages intented for itself,
  # and delegates the remaining messages to its currently active MDI child, if any.
  # If you use the auto-gray or auto-hide feature available in some GUI controls, these
  # controls can be automatically grayed out or hidden when there is no active MDI child.
  # When delegating messages via MDI client to MDI child windows of different types, care
  # should be taken that message ID's do not overlap, so that all message ID's only map to
  # the intented handlers no matter which MDI child window type is active.
  # The MDI client sends a SEL_CHANGED message to its target when the active MDI child is
  # switched, with the void  # pointer refering to the new MDI child.
  # A MDI Window selection dialog can be brought up through the ID_MDI_OVER_X messages;
  # a menu button connected to the MDI client with the ID_MDI_OVER_X message will be
  # automatically grayed out if there are less than X MDI child windows.
  # The +ID_MDI_ANY+ may be connected to a menu separator to cause automatic hiding of the
  # menu separator when no MDI child windows are present.
  #
  # === Events
  #
  # The following messages are sent by FXMDIClient to its target:
  #
  # +SEL_CHANGED+::
  #   sent when the active child changes; the message data is a reference to the new active child window (or +nil+ if there is none)
  #
  class FXMDIClient < FXComposite
  
    # Active MDI child window, or +nil+ if none [FXMDIChild].
    attr_accessor :activeChild
  
    # Cascade offset X [Integer]
    attr_accessor :cascadeX
  
    # Cascade offset Y [Integer]
    attr_accessor :cascadeY

    # Construct MDI Client window
    def initialize(p, opts=0, x=0, y=0, width=0, height=0) # :yields: theMDIClient
    end

    #
    # Pass message to all MDI windows, stopping when one of
    # the MDI windows fails to handle the message.
    #
    def forallWindows(sender, sel, ptr); end
  
    #
    # Pass message once to all MDI windows with the same document,
    # stopping when one of the MDI windows fails to handle the message.
    #
    def forallDocuments(sender, sel, ptr); end

    #
    # Pass message to all MDI Child windows whose target is _document_,
    # stopping when one of the MDI windows fails to handle the message.
    #
    def forallDocWindows(document, sender, sel, ptr); end
  
    #
    # Set active MDI child window for this MDI client to _child_.
    #
    def setActiveChild(child=nil, notify=true); end
  end
end

