Skip to content
Snippets Groups Projects
FXMenuButton.rb 3.49 KiB
Newer Older
  • Learn to ignore specific revisions
  • module Fox
      #
      # An FXMenuButton posts a popup menu when clicked.
      # There are many ways to control the placement where the popup will appear;
      # first, the popup may be placed on either of the four sides relative to the
      # menu button; this is controlled by the flags +MENUBUTTON_DOWN+, etc.
      # Next, there are several attachment modes; the popup's left/bottom edge may
      # attach to the menu button's left/top edge, or the popup's right/top edge may
    
      # attach to the menu button's right/bottom edge, or both.
    
      # Also, the popup may appear centered relative to the menu button.
      # Finally, a small offset may be specified to displace the location of the
    
      # popup by a few pixels so as to account for borders and so on.
    
      # Normally, the menu button shows an arrow pointing to the direction where
      # the popup is set to appear; this can be turned off by passing the option
      # +MENUBUTTON_NOARROWS+.
      #
      # === Events
      #
      # The following messages are sent by FXMenuButton to its target:
      #
      # +SEL_KEYPRESS+::		sent when a key goes down; the message data is an FXEvent instance.
      # +SEL_KEYRELEASE+::		sent when a key goes up; the message data is an FXEvent instance.
      # +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.
      #
      # === Menu Button Style Flags
      #
      # Any combination of the following flags can be assigned as the menu
      # button style flags.
      #
      # +MENUBUTTON_AUTOGRAY+::		Automatically gray out when no target
      # +MENUBUTTON_AUTOHIDE+::		Automatically hide when no target
      # +MENUBUTTON_TOOLBAR+::		Toolbar style
      # +MENUBUTTON_NOARROWS+::		Do not show arrows
      #
      # === Menu Button Popup Style
      #
      # Any one of the following options can be assigned as the menu
      # button's popup style.
      #
      # +MENUBUTTON_DOWN+::			Popup window appears below menu button
      # +MENUBUTTON_UP+::			Popup window appears above menu button
      # +MENUBUTTON_LEFT+::			Popup window to the left of the menu button
      # +MENUBUTTON_RIGHT+::		Popup window to the right of the menu button
      #
      # === Menu Button Attachment
      #
      # Any combination of the following flags can be assigned as the menu
      # button's attachment flags.
      #
      # +MENUBUTTON_ATTACH_LEFT+::		Popup attaches to the left side of the menu button
      # +MENUBUTTON_ATTACH_TOP+::		Popup attaches to the top of the menu button
      # +MENUBUTTON_ATTACH_RIGHT+::		Popup attaches to the right side of the menu button
      # +MENUBUTTON_ATTACH_BOTTOM+::	Popup attaches to the bottom of the menu button
      # +MENUBUTTON_ATTACH_CENTER+::	Popup attaches to the center of the menu button
      # +MENUBUTTON_ATTACH_BOTH+::		Popup attaches to both sides of the menu button
      #
      class FXMenuButton < FXLabel
    
        # The popup menu [FXPopup]
        attr_accessor :menu
    
        # X-offset where menu pops up relative to button [Integer]
        attr_accessor :xOffset
    
        # Y-offset where menu pops up relative to button [Integer]
        attr_accessor :yOffset
    
        # Menu button style [Integer]
        attr_accessor :buttonStyle
    
        # Popup style [Integer]
        attr_accessor :popupStyle
    
        # Attachment [Integer]
        attr_accessor :attachment
    
        #
        # Constructor
        #
        def initialize(parent, text, icon=nil, popupMenu=nil, opts=JUSTIFY_NORMAL|ICON_BEFORE_TEXT|MENUBUTTON_DOWN, x=0, y=0, width=0, height=0, padLeft=DEFAULT_SPACING, padRight=DEFAULT_SPACING, padTop=DEFAULT_SPACING, padBottom=DEFAULT_SPACING) # :yields: theMenuButton
      end
    end