Skip to content
Snippets Groups Projects
FXWindow.rb 23.6 KiB
Newer Older
  • Learn to ignore specific revisions
  • module Fox
      #
      # Base class for all windows
      #
      # === Events
      #
      # The following messages are sent by FXWindow to its target:
      #
    
      # +SEL_MAP+::   sent when the window is mapped to the screen; the message data is an FXEvent instance.
      # +SEL_UNMAP+::  sent when the window is unmapped; the message data is an FXEvent instance.
      # +SEL_CONFIGURE+::  sent when the window's size changes; the message data is an FXEvent instance.
      # +SEL_ENTER+::  sent when the mouse cursor enters this window
      # +SEL_LEAVE+::  sent when the mouse cursor leaves this window
      # +SEL_FOCUSIN+::  sent when this window gains the focus
      # +SEL_FOCUSOUT+::  sent when this window loses the focus
      # +SEL_UPDATE+::  sent when this window needs an update
      # +SEL_UNGRABBED+::  sent when this window loses the mouse grab (or capture)
    
      #
      # For each of the following keyboard-related events, the message data is an FXEvent instance:
      #
    
      # +SEL_KEYPRESS+::  sent when a key is pressed
      # +SEL_KEYRELEASE+::  sent when a key is released
    
      #
      # For each of the following mouse-related events, the message data is an FXEvent instance:
      #
    
      # +SEL_MOTION+::  sent when the mouse moves
      # +SEL_LEFTBUTTONPRESS+:: sent when the left mouse button goes down
      # +SEL_LEFTBUTTONRELEASE+:: sent when the left mouse button goes up
      # +SEL_MIDDLEBUTTONPRESS+:: sent when the middle mouse button goes down
      # +SEL_MIDDLEBUTTONRELEASE+:: sent when the middle mouse button goes up
      # +SEL_RIGHTBUTTONPRESS+:: sent when the right mouse button goes down
      # +SEL_RIGHTBUTTONRELEASE+:: sent when the right mouse button goes up
      # +SEL_MOUSEWHEEL+::  sent when the mouse wheel is scrolled
    
      #
      # For each of the following selection-related events, the message data is an FXEvent instance:
      #
    
      # +SEL_SELECTION_GAINED+:: sent when this window acquires the selection
      # +SEL_SELECTION_LOST+:: sent when this window loses the selection
      # +SEL_SELECTION_REQUEST+:: sent when this window's selection is requested
    
      #
      # For each of the following clipboard-related events, the message data is an FXEvent instance:
      #
    
      # +SEL_CLIPBOARD_GAINED+:: sent when this window acquires the clipboard
      # +SEL_CLIPBOARD_LOST+:: sent when this window loses the clipboard
      # +SEL_CLIPBOARD_REQUEST+:: sent when this window's clipboard data is requested
    
      #
      # For each of the following drag-and-drop events, the message data is an FXEvent instance:
      #
    
      # +SEL_BEGINDRAG+::  sent at the beginning of a drag operation
      # +SEL_DRAGGED+::  sent while stuff is being dragged around
      # +SEL_ENDDRAG+::  sent at the end of a drag operation
      # +SEL_DND_ENTER+::  drag-and-drop enter
      # +SEL_DND_LEAVE+::  drag-and-drop leave
      # +SEL_DND_MOTION+::  drag-and-drop motion
      # +SEL_DND_DROP+::  drag-and-drop motion
      # +SEL_DND_REQUEST+::  drag-and-drop request
    
      #
      # === Layout hints for child widgets
      #
      # +LAYOUT_NORMAL+::       Default layout mode
      # +LAYOUT_SIDE_TOP+::     Pack on top side (default)
      # +LAYOUT_SIDE_BOTTOM+::  Pack on bottom side
      # +LAYOUT_SIDE_LEFT+::    Pack on left side
      # +LAYOUT_SIDE_RIGHT+::   Pack on right side
      # +LAYOUT_FILL_COLUMN+::  Matrix column is stretchable
      # +LAYOUT_FILL_ROW+::     Matrix row is stretchable
      # +LAYOUT_LEFT+::         Stick on left (default)
      # +LAYOUT_RIGHT+::        Stick on right
      # +LAYOUT_CENTER_X+::     Center horizontally
      # +LAYOUT_FIX_X+::        X fixed
      # +LAYOUT_TOP+::          Stick on top (default)
      # +LAYOUT_BOTTOM+::       Stick on bottom
      # +LAYOUT_CENTER_Y+::     Center vertically
      # +LAYOUT_FIX_Y+::        Y fixed
      # +LAYOUT_FIX_WIDTH+::    Width fixed
      # +LAYOUT_FIX_HEIGHT+::   Height fixed
      # +LAYOUT_MIN_WIDTH+::    Minimum width is the default
      # +LAYOUT_MIN_HEIGHT+::   Minimum height is the default
      # +LAYOUT_FILL_X+::       Stretch or shrink horizontally
      # +LAYOUT_FILL_Y+::       Stretch or shrink vertically
    
      # +LAYOUT_FILL::          Stretch or shrink in both directions
    
      # +LAYOUT_EXPLICIT+::     Explicit placement
      # +LAYOUT_DOCK_SAME+::    Dock on same galley, if it fits
      # +LAYOUT_DOCK_NEXT+::    Dock on next galley
      #
      # === Frame border appearance styles (for subclasses)
      #
      # +FRAME_NONE+::          Default is no frame
      # +FRAME_SUNKEN+::        Sunken border
      # +FRAME_RAISED+::        Raised border
      # +FRAME_THICK+::         Thick border
      # +FRAME_GROOVE+::        A groove or etched-in border
      # +FRAME_RIDGE+::         A ridge or embossed border
      # +FRAME_LINE+::          Simple line border
      # +FRAME_NORMAL+::        Regular raised/thick border
      #
      # === Packing style (for packers)
      #
      # +PACK_NORMAL+::         Default is each its own size
      # +PACK_UNIFORM_HEIGHT+:: Uniform height
      # +PACK_UNIFORM_WIDTH+::  Uniform width
      #
      # === Message IDs common to most windows
      #
      # +ID_NONE+::                 x
      # +ID_HIDE+::                 x
      # +ID_SHOW+::                 x
      # +ID_TOGGLESHOWN+::          x
      # +ID_LOWER+::                x
      # +ID_RAISE+::                x
      # +ID_DELETE+::               x
      # +ID_DISABLE+::              x
      # +ID_ENABLE+::               x
      # +ID_TOGGLEENABLED+::        x
      # +ID_UNCHECK+::              x
      # +ID_CHECK+::                x
      # +ID_UNKNOWN+::              x
      # +ID_UPDATE+::               x
      # +ID_AUTOSCROLL+::           x
      # +ID_HSCROLLED+::            x
      # +ID_VSCROLLED+::            x
      # +ID_SETVALUE+::             x
      # +ID_SETINTVALUE+::          x
      # +ID_SETREALVALUE+::         x
      # +ID_SETSTRINGVALUE+::       x
      # +ID_SETINTRANGE+::          x
      # +ID_SETREALRANGE+::         x
      # +ID_GETINTVALUE+::          x
      # +ID_GETREALVALUE+::         x
      # +ID_GETSTRINGVALUE+::       x
      # +ID_GETINTRANGE+::          x
      # +ID_GETREALRANGE+::         x
      # +ID_QUERY_MENU+::           x
      # +ID_HOTKEY+::               x
      # +ID_ACCEL+::                x
      # +ID_UNPOST+::               x
      # +ID_POST+::                 x
      # +ID_MDI_TILEHORIZONTAL+::   x
      # +ID_MDI_TILEVERTICAL+::     x
      # +ID_MDI_CASCADE+::          x
      # +ID_MDI_MAXIMIZE+::         x
      # +ID_MDI_MINIMIZE+::         x
      # +ID_MDI_RESTORE+::          x
      # +ID_MDI_CLOSE+::            x
      # +ID_MDI_WINDOW+::           x
      # +ID_MDI_MENUWINDOW+::       x
      # +ID_MDI_MENUMINIMIZE+::     x
      # +ID_MDI_MENURESTORE+::      x
      # +ID_MDI_MENUCLOSE+::        x
      # +ID_MDI_NEXT+::             x
      # +ID_MDI_PREV+::             x
    
      class FXWindow < FXDrawable
    
        # This window's parent window {FXWindow}
    
        # This window's owner window {FXWindow}
    
        # The shell window for this window {FXWindow}
    
        # Root window {FXWindow}
    
        # Next (sibling) window, if any {FXWindow}
    
        # Previous (sibling) window, if any {FXWindow}
    
        # This window's first child window, if any {FXWindow}
    
        # This window's last child window, if any {FXWindow}
    
        # Currently focused child window, if any {FXWindow}
    
    
        # Window key [Integer]
    
        # Message target object for this window {FXObject}
    
    
        # Message identifier for this window [Integer]
    
    
        # This window's x-coordinate, in the parent's coordinate system [Integer]
    
    
        # This window's y-coordinate, in the parent's coordinate system [Integer]
    
        # The accelerator table for this window {FXAccelTable}
    
    
        # Layout hints for this window [Integer]
    
    
        # Number of child windows for this window [Integer]
    
        # Default cursor for this window {FXCursor}
    
        # Drag cursor for this window {FXCursor}
    
        # Window background color {FXColor}
    
    
        # Common DND type: Raw octet stream
        def FXWindow.octetType; end
    
        # Common DND type: Delete request
        def FXWindow.deleteType; end
    
        # Common DND type: ASCII text request
        def FXWindow.textType; end
    
        # Common DND type: UTF-8 text request
        def FXWindow.utf8Type; end
    
        # Common DND type: UTF-16 text request
        def FXWindow.utf16Type; end
    
        # Common DND type: Color
        def FXWindow.colorType; end
    
        # Common DND type: URI List
        def FXWindow.urilistType; end
    
        # Common DND type: Clipboard text type (pre-registered)
        def FXWindow.stringType; end
    
        # Common DND type: Clipboard image type (pre-registered)
        def FXWindow.imageType; end
    
        # Common DND type name: Raw octet stream
        def FXWindow.octetTypeName() ; end
    
        # Common DND type name: Delete request
        def FXWindow.deleteTypeName() ; end
    
        # Common DND type name: ASCII text
        def FXWindow.textTypeName() ; end
    
        # Common DND type name: Color
        def FXWindow.colorTypeName() ; end
    
        # Common DND type name: URI List
        def FXWindow.urilistTypeName() ; end
    
        # Common DND type name: UTF-8 text request
        def FXWindow.utf8TypeName() ; end
    
        # Common DND type name: UTF-16 text request
        def FXWindow.utf16TypeName() ; end
    
        #
        # Return an initialized FXWindow instance, for a child window.
        #
        # ==== Parameters:
        #
    
        # +p+:: the parent window for this window {FXComposite}
    
        # +opts+:: window options [Integer]
        # +x+:: initial x-position [Integer]
        # +y+:: initial y-position [Integer]
        # +width+:: initial width [Integer]
        # +height+:: initial height [Integer]
    
        #
        def initialize(p, opts=0, x=0, y=0, width=0, height=0) # :yields: theWindow
        end
    
        #
        # Return an initialized FXWindow instance, for a shell window.
        #
        # ==== Parameters:
        #
    
        # +a+:: an application instance {FXApp}
        # +vis+:: the visual to use for this window {FXVisual}
    
        #
        def initialize(a, vis) # :yields: theWindow
        end
    
        #
        # Return an initialized FXWindow instance, for an owned window.
        #
        # ==== Parameters:
        #
    
        # +a+:: an application instance {FXApp}
        # +own+:: the owner window for this window {FXWindow}
    
        # +opts+:: window options [Integer]
        # +x+:: initial x-position [Integer]
        # +y+:: initial y-position [Integer]
        # +width+:: initial width [Integer]
        # +height+:: initial height [Integer]
    
        #
        def initialize(a, own, opts, x, y, w, h) # :yields: theWindow
        end
    
        # Return the window width (in pixels).
        def width; end
    
        #
        # Set the window width; and flag the widget as being in need of
        # layout by its parent.  This does not immediately update the server-
        # side representation of the widget.
        #
        def width=(w); end
    
        # Return the window height (in pixels).
        def height; end
    
        #
        # Set the window height; and flag the widget as being in need of
        # layout by its parent.  This does not immediately update the server-
        # side representation of the widget.
        #
        def height=(h); end
    
        # Return the default width of this window
        def defaultWidth(); end
    
    
        # Return the default height of this window
    
        def defaultHeight(); end
    
        # Return width for given height
        def getWidthForHeight(givenHeight); end
    
        # Return height for given width
        def getHeightForWidth(givenWidth); end
    
        #
        # Add this hot key to the closest ancestor's accelerator table.
        #
        def addHotKey(code)
          accel = nil
          win = self
          while win && (accel = win.accelTable).nil?
            win = win.parent
          end
          if accel
            accel.addAccel(code, self, MKUINT(ID_HOTKEY, SEL_KEYPRESS), MKUINT(ID_HOTKEY, SEL_KEYRELEASE))
          end
        end
    
        #
        # Remove this hot key from the closest ancestor's accelerator
        # table.
        #
        def remHotKey(code)
          accel = nil
          win = self
          while win && (accel = win.accelTable).nil?
            win = win.parent
          end
          if accel
            accel.removeAccel(code)
          end
        end
    
        # Return +true+ if this window is a shell window.
        def shell?() ; end
    
        #
        # Return +true+ if specified _window_ is ancestor of this window.
        #
        def childOf?(window) ; end
    
        #
        # Return +true+ if this window contains _child_ in its subtree.
        #
        def containsChild?(child) ; end
    
        # Return the child window at specified coordinates (_x_, _y_)
        def getChildAt(x, y) ; end
    
    
        # Return the index (starting from zero) of the specified child _window_,
    
        # or -1 if the window is not a child of this window.
        def indexOfChild(window) ; end
    
        # Remove specified child window
        def removeChild(child) ; end
    
        # Return the child window at specified index. Raises IndexError if _index_ is out of range.
        def childAtIndex(index) ; end
    
        # Return the common ancestor of window _a_ and window _b_.
        def FXWindow.commonAncestor(a, b); end
    
        # Return +true+ if sibling _a_ comes before sibling _b_.
        def FXWindow.before?(a, b); end
    
        # Return +true+ if sibling _a_ comes after sibling _b_.
        def FXWindow.after?(a, b); end
    
        # Return compose context (an FXComposeContext).
        def composeContext; end
    
        # Create compose context.
        def createComposeContext; end
    
        # Destroy compose context.
        def destroyComposeContext; end
    
        # Return the cursor position and mouse button-state as a three-element array.
        def cursorPosition() ; end
    
        # Warp the cursor to the new position (_x_, _y_).
        def setCursorPosition(x, y); end
    
        # Return +true+ if this window is able to receive mouse and keyboard events.
        def enabled?() ; end
    
        # Return +true+ if this window is active.
        def active?() ; end
    
        # Return +true+ if this window is a control capable of receiving the focus.
        def canFocus?() ; end
    
        # Return +true+ if this window has the focus.
        def hasFocus?() ; end
    
        # Return +true+ if this window is in the focus chain.
        def inFocusChain? ; end
    
        # Move the focus to this window.
        def setFocus(); end
    
        # Remove the focus from this window.
        def killFocus(); end
    
        # Notification that focus moved to a new child window.
        def changeFocus(child); end
    
        # This changes the default window which responds to the *Enter*
    
        # key in a dialog. If _enable_ is +true+, this window becomes the default
    
        # window; when _enable_ is +false+, this window will no longer be the
        # default window.  Finally, when _enable_ is +MAYBE+, the default window
        # will revert to the initial default window.
        def setDefault(enable=TRUE) ; end
    
        # Return +true+ if this is the default window.
        def default?() ; end
    
        # Make this window the initial default window.
        def setInitial(enable=true) ; end
    
        # Return +true+ if this is the initial default window.
        def initial?() ; end
    
        # Enable the window to receive mouse and keyboard events.
        def enable(); end
    
        # Disable the window from receiving mouse and keyboard events.
        def disable(); end
    
        # Create all of the server-side resources for this window.
        def create(); end
    
        # Detach the server-side resources for this window.
        def detach(); end
    
        # Destroy the server-side resources for this window.
        def destroy(); end
    
        #
        # Set window shape, where _shape_ is either an FXRegion, FXBitmap or
        # FXIcon instance.
        #
        def setShape(shape); end
    
        # Clear window shape
        def clearShape(); end
    
        # Raise this window to the top of the stacking order.
        def raiseWindow(); end
    
        # Lower this window to the bottom of the stacking order.
        def lower(); end
    
        #
        # Move the window immediately, in the parent's coordinate system.
        # Update the server representation as well if the window is realized.
        # Perform layout of the children when necessary.
        #
        def move(x, y) ; end
    
        #
        # Resize the window to the specified width and height immediately,
        # updating the server representation as well, if the window was realized.
        # Perform layout of the children when necessary.
        #
        def resize(w, h) ; end
    
        #
        # Move and resize the window immediately, in the parent's coordinate system.
        # Update the server representation as well if the window is realized.
        # Perform layout of the children when necessary.
        #
        def position(x, y, w, h); end
    
        # Mark this window's layout as dirty
        def recalc(); end
    
        # Perform layout immediately.
        def layout(); end
    
        # Generate a SEL_UPDATE message for the window and its children.
        def forceRefresh(); end
    
        # Reparent this window under new _father_ window, before _other_ sibling..
        def reparent(father, other); end
    
        # Scroll rectangle (_x_, _y_, _w_, _h_) by a shift of (_dx_, _dy_)
        def scroll(x, y, w, h, dx, dy); end
    
        # Mark the entire window client area dirty.
        def update() ; end
    
        # Mark the specified rectangle dirty
        def update(x, y, w, h) ; end
    
        # Process any outstanding repaint messages immediately, for the given rectangle
        def repaint(x, y, w, h) ; end
    
        # If marked but not yet painted, paint the entire window
        def repaint() ; end
    
        # Grab the mouse to this window; future mouse events will be
        # reported to this window even while the cursor goes outside of this window
        def grab() ; end
    
    
        # Release the mouse grab
    
        def ungrab(); end
    
        # Return +true+ if the window has been grabbed
        def grabbed?() ; end
    
        # Grab keyboard device
        def grabKeyboard(); end
    
        # Ungrab keyboard device
        def ungrabKeyboard(); end
    
        # Return +true+ if active grab is in effect
        def grabbedKeyboard?() ; end
    
    
        # Show this window
    
        def show(); end
    
    
        # Hide this window
    
        def hide(); end
    
        # Return +true+ if this window is shown.
        def shown?() ; end
    
        alias visible? shown?
    
        # Return +true+ if this window is a composite.
        def composite?() ; end
    
        # Return +true+ if this window is under the cursor
        def underCursor?() ; end
    
        # Return +true+ if this window owns the primary selection
        def hasSelection?() ; end
    
        #
        # Try to acquire the primary selection, given an array of drag types.
        # Returns +true+ on success.
        #
        def acquireSelection(typesArray) ; end
    
        #
        # Release the primary selection. Returns +true+ on success.
        #
        def releaseSelection(); end
    
        # Return +true+ if this window owns the clipboard
        def hasClipboard?() ; end
    
        #
        # Try to acquire the clipboard, given an array of drag types.
        # Returns +true+ on success.
        #
        def acquireClipboard(typesArray) ; end
    
        #
        # Release the clipboard. Returns +true+ on success.
        #
        def releaseClipboard(); end
    
    
        # Enable this window to receive drops
    
        def dropEnable(); end
    
        # Disable this window from receiving drops
        def dropDisable(); end
    
        # Return +true+ if this window is able to receive drops
        def dropEnabled?() ; end
    
        # Return +true+ if a drag operation has been initiated from this window
        def dragging?() ; end
    
        # Initiate a drag operation with an array of previously registered drag types
        def beginDrag(typesArray) ; end
    
        # When dragging, inform the drop target of the new position and
        # the drag action. The _action_ is a constant, one of:
        #
    
        # +DRAG_REJECT+:: reject all drop actions
        # +DRAG_ACCEPT+:: accept any drop action
        # +DRAG_COPY+:: accept this drop as a copy
        # +DRAG_MOVE+:: accept this drop as a move
        # +DRAG_LINK+:: accept this drop as a link
        # +DRAG_PRIVATE+:: private
    
    
        def handleDrag(x, y, action=DRAG_COPY) ; end
    
        #
        # Terminate the drag operation with or without actually dropping the data.
        # Return the action performed by the target.
        #
        def endDrag(drop=true); end
    
        # Return +true+ if this window is the target of a drop
        def dropTarget?() ; end
    
        # When being dragged over, indicate that no further +SEL_DND_MOTION+ messages
        # are required while the cursor is inside the given rectangle
        def setDragRectangle(x, y, w, h, wantUpdates=true); end
    
        # When being dragged over, indicate we want to receive +SEL_DND_MOTION+ messages
        # every time the cursor moves
    
        # When being dragged over, indicate acceptance or rejection of the dragged data.
        # The _action_ is a constant indicating the suggested drag action, one of:
        #
    
        # +DRAG_REJECT+:: reject all drop actions
        # +DRAG_ACCEPT+:: accept any drop action
        # +DRAG_COPY+:: accept this drop as a copy
        # +DRAG_MOVE+:: accept this drop as a move
        # +DRAG_LINK+:: accept this drop as a link
        # +DRAG_PRIVATE+:: private
    
    
        def acceptDrop(action=DRAG_ACCEPT); end
    
        # Returns +DRAG_REJECT+ when the drop target would not accept the drop;
        # otherwise indicates acceptance by returning one of +DRAG_ACCEPT+,
        # +DRAG_COPY+, +DRAG_MOVE+ or +DRAG_LINK+.
        def didAccept() ; end
    
        #
        # Sent by the drop target in response to +SEL_DND_DROP+.  The drag action
        # should be the same as the action the drop target reported to the drag
        # source in reponse to the +SEL_DND_MOTION+ message.
        # This function notifies the drag source that its part of the drop transaction
        # is finished, and that it is free to release any resources involved in the
        # drag operation.
    
        # Calling {#dropFinished} is advisable in cases where the drop target needs
    
        # to perform complex processing on the data received from the drag source,
        # prior to returning from the +SEL_DND_DROP+ message handler.
        #
        def dropFinished(action=DRAG_REJECT); end
    
        # When being dragged over, inquire the drag types being offered.
        # The _origin_ is a constant indicating the origin of the data, one of
        # +FROM_SELECTION+, +FROM_CLIPBOARD+ or +FROM_DRAGNDROP+.
        # Returns an array of drag types.
        def inquireDNDTypes(origin) ; end
    
        # When being dragged over, return +true+ if we are offered the given drag type.
        # The _origin_ is a constant indicating the origin of the data, one of
        # +FROM_SELECTION+, +FROM_CLIPBOARD+ or +FROM_DRAGNDROP+.
        # The _type_ is a previously registered drag type.
        def offeredDNDType?(origin, type) ; end
    
        # When being dragged over, return the drag action
        def inquireDNDAction() ; end
    
        # Get DND data; the caller becomes the owner of the array.
        # The _origin_ is a constant indicating the origin of the data, one of
        # +FROM_SELECTION+, +FROM_CLIPBOARD+ or +FROM_DRAGNDROP+.
        # The _type_ is a previously registered drag type.
        def getDNDData(origin, type) ; end
    
        # Set DND data; ownership is transferred to the system.
        # The _origin_ is a constant indicating the origin of the data, one of
        # +FROM_SELECTION+, +FROM_CLIPBOARD+ or +FROM_DRAGNDROP+.
        # The _type_ is a previously registered drag type.
        def setDNDData(origin, type, data) ; end
    
        # Return +true+ if this window logically contains the given point (_parentX_, _parentY_).
        def contains?(parentX, parentY) ; end
    
        # Translate coordinates (_fromX_, _fromY_) from _fromWindow_'s coordinate system
        # to this window's coordinate system. Returns a two-element array containing the
        # coordinates in this window's coordinate system.
        def translateCoordinatesFrom(fromWindow, fromX, fromY) ; end
    
        # Translate coordinates (_fromX_, _fromY_) from this window's coordinate system
        # to _toWindow_'s coordinate system. Returns a two-element array containing the
        # coordinates in _toWindow_'s coordinate system.
        def translateCoordinatesTo(toWindow, fromX, fromY) ; end
    
        # Return +true+ if this window does save-unders.
        def doesSaveUnder?() ; end
    
        #
        # Translate message for localization; using the current FXTranslator,
        # an attempt is made to translate the given message into the current
        # language.  An optional hint may be passed to break any ties in case
        # more than one tranlation is possible for the given message text.
        # In addition, the name of the widget is passed as context name so
        # that controls in a single dialog may be grouped together.
        #
        def tr(message, hint=nil); end
      end
    end