#/usr/bin/env ruby require 'fox16' include Fox class ButtonWindow < FXMainWindow def initialize(app) # Invoke base class initialize first super(app, "Button Test", :opts => DECOR_ALL, :x => 100, :y => 100) # Create a tooltip FXToolTip.new(self.getApp()) # Status bar statusbar = FXStatusBar.new(self, LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|STATUSBAR_WITH_DRAGCORNER) # Controls on the right controls = FXVerticalFrame.new(self, LAYOUT_SIDE_RIGHT|LAYOUT_FILL_Y|PACK_UNIFORM_WIDTH) # Separator FXVerticalSeparator.new(self, LAYOUT_SIDE_RIGHT|LAYOUT_FILL_Y|SEPARATOR_GROOVE) # Contents contents = FXHorizontalFrame.new(self, LAYOUT_SIDE_LEFT|FRAME_NONE|LAYOUT_FILL_X|LAYOUT_FILL_Y|PACK_UNIFORM_WIDTH, :padding => 20) # Construct icon from a PNG file on disk bigpenguin = loadIcon("bigpenguin.png") # The button @button = FXButton.new(contents, "&This is a multi-line label on\na button to show off the full\n" + "capabilities of the button object.\t" + "It also has a tooltip\n(which, by the way, can be multi-line also).\t" + "Here's a helpful message for the status line.", bigpenguin, :opts => FRAME_RAISED|FRAME_THICK|LAYOUT_CENTER_X|LAYOUT_CENTER_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT, :width => 300, :height => 200) checkButton = FXCheckButton.new(controls, "Toolbar Style\tCool \"poppy\" style buttons") checkButton.connect(SEL_COMMAND) do |sender, sel, checked| if checked @button.buttonStyle |= BUTTON_TOOLBAR @button.frameStyle = FRAME_RAISED else @button.buttonStyle &= ~BUTTON_TOOLBAR @button.frameStyle = FRAME_RAISED|FRAME_THICK end end group1 = FXGroupBox.new(controls, "Horizontal Placement", GROUPBOX_TITLE_CENTER|FRAME_RIDGE) @group1_dt = FXDataTarget.new(2) @group1_dt.connect(SEL_COMMAND) do case @group1_dt.value when 0 @button.iconPosition = (@button.iconPosition|ICON_BEFORE_TEXT) & ~ICON_AFTER_TEXT when 1 @button.iconPosition = (@button.iconPosition|ICON_AFTER_TEXT) & ~ICON_BEFORE_TEXT when 2 @button.iconPosition = (@button.iconPosition & ~ICON_AFTER_TEXT) & ~ICON_BEFORE_TEXT end end FXRadioButton.new(group1, "Before Text", @group1_dt, FXDataTarget::ID_OPTION) FXRadioButton.new(group1, "After Text", @group1_dt, FXDataTarget::ID_OPTION + 1) FXRadioButton.new(group1, "Centered", @group1_dt, FXDataTarget::ID_OPTION + 2) group2 = FXGroupBox.new(controls, "Vertical Placement", GROUPBOX_TITLE_CENTER|FRAME_RIDGE) @group2_dt = FXDataTarget.new(2) @group2_dt.connect(SEL_COMMAND) do case @group2_dt.value when 0 @button.iconPosition = (@button.iconPosition|ICON_ABOVE_TEXT) & ~ICON_BELOW_TEXT when 1 @button.iconPosition = (@button.iconPosition|ICON_BELOW_TEXT) & ~ICON_ABOVE_TEXT when 2 @button.iconPosition = (@button.iconPosition & ~ICON_ABOVE_TEXT) & ~ICON_BELOW_TEXT end end FXRadioButton.new(group2, "Above Text", @group2_dt, FXDataTarget::ID_OPTION) FXRadioButton.new(group2, "Below Text", @group2_dt, FXDataTarget::ID_OPTION + 1) FXRadioButton.new(group2, "Centered", @group2_dt, FXDataTarget::ID_OPTION + 2) group3 = FXGroupBox.new(controls, "Horizontal Justification", GROUPBOX_TITLE_CENTER|FRAME_RIDGE) @group3_dt = FXDataTarget.new(0) @group3_dt.connect(SEL_COMMAND) do case @group3_dt.value when 0 @button.justify &= ~JUSTIFY_HZ_APART when 1 @button.justify = (@button.justify & ~JUSTIFY_HZ_APART) | JUSTIFY_LEFT when 2 @button.justify = (@button.justify & ~JUSTIFY_HZ_APART) | JUSTIFY_RIGHT when 3 @button.justify |= JUSTIFY_HZ_APART end end FXRadioButton.new(group3, "Center", @group3_dt, FXDataTarget::ID_OPTION) FXRadioButton.new(group3, "Left", @group3_dt, FXDataTarget::ID_OPTION + 1) FXRadioButton.new(group3, "Right", @group3_dt, FXDataTarget::ID_OPTION + 2) FXRadioButton.new(group3, "Apart", @group3_dt, FXDataTarget::ID_OPTION + 3) group4 = FXGroupBox.new(controls, "Vertical Justification", GROUPBOX_TITLE_CENTER|FRAME_RIDGE) @group4_dt = FXDataTarget.new(0) @group4_dt.connect(SEL_COMMAND) do case @group4_dt.value when 0 @button.justify &= ~JUSTIFY_VT_APART when 1 @button.justify = (@button.justify & ~JUSTIFY_VT_APART) | JUSTIFY_TOP when 2 @button.justify = (@button.justify & ~JUSTIFY_VT_APART) | JUSTIFY_BOTTOM when 3 @button.justify |= JUSTIFY_VT_APART end end FXRadioButton.new(group4, "Center", @group4_dt, FXDataTarget::ID_OPTION) FXRadioButton.new(group4, "Top", @group4_dt, FXDataTarget::ID_OPTION + 1) FXRadioButton.new(group4, "Bottom", @group4_dt, FXDataTarget::ID_OPTION + 2) FXRadioButton.new(group4, "Apart", @group4_dt, FXDataTarget::ID_OPTION + 3) quitButton = FXButton.new(controls, "&Quit", :opts => FRAME_RAISED|FRAME_THICK|LAYOUT_FILL_X) quitButton.connect(SEL_COMMAND) { getApp().exit(0) } end # Load the named icon from a file def loadIcon(filename) filename = File.expand_path("../icons/#{filename}", __FILE__) File.open(filename, "rb") do |f| FXPNGIcon.new(getApp(), f.read) end end def create super show(PLACEMENT_SCREEN) end end if __FILE__ == $0 # Construct an application application = FXApp.new("Button", "FoxTest") # Construct the main window ButtonWindow.new(application) # Create the application application.create # Run it application.run end