Codebase list ruby-fxruby / master examples / foursplit.rb
master

Tree @master (Download .tar.gz)

foursplit.rb @masterraw · history · blame

#!/usr/bin/env ruby

require 'fox16'

include Fox

class FourSplitWindow < FXMainWindow
  def initialize(app)
    # Call the base class initialize() first
    super(app, "4-Way Splitter Test", :opts => DECOR_ALL, :width => 800, :height => 600)

    # Menu bar, along the top
    menubar = FXMenuBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X)

    # Status bar, along the bottom
    FXStatusBar.new(self,
      LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|STATUSBAR_WITH_DRAGCORNER)

    # The top-level splitter takes up the rest of the space
    splitter = FX4Splitter.new(self,
      LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y|FOURSPLITTER_TRACKING)

    # File menu
    filemenu = FXMenuPane.new(self)
    FXMenuCommand.new(filemenu, "&Quit\tCtl-Q\tQuit the application.", nil,
      getApp(), FXApp::ID_QUIT)
    FXMenuTitle.new(menubar, "&File", nil, filemenu)

    # Expand menu
    expandmenu = FXMenuPane.new(self)
    FXMenuCommand.new(expandmenu, "All four", nil,
      splitter, FX4Splitter::ID_EXPAND_ALL)
    FXMenuCommand.new(expandmenu, "Top/left", nil,
      splitter, FX4Splitter::ID_EXPAND_TOPLEFT)
    FXMenuCommand.new(expandmenu, "Top/right", nil,
      splitter, FX4Splitter::ID_EXPAND_TOPRIGHT)
    FXMenuCommand.new(expandmenu, "Bottom/left", nil,
      splitter, FX4Splitter::ID_EXPAND_BOTTOMLEFT)
    FXMenuCommand.new(expandmenu, "Bottom/right", nil,
      splitter, FX4Splitter::ID_EXPAND_BOTTOMRIGHT)
    FXMenuTitle.new(menubar, "&Expand", nil, expandmenu)

    # The 4-splitter accepts exactly four child widgets, and the
    # order in which they are added matters (top left, top right,
    # bottom left and bottom right, in that order). For our case,
    # the first three child widgets are just regular pushbuttons,
    # but the fourth is itself another 4-splitter. There is no
    # restriction on nesting these kinds of widgets.

    FXButton.new(splitter, "Top &Left\tThis splitter tracks", :opts => FRAME_RAISED|FRAME_THICK)

    FXButton.new(splitter, "Top &Right\tThis splitter tracks", :opts => FRAME_RAISED|FRAME_THICK)

    FXButton.new(splitter, "&Bottom Left\tThis splitter tracks", :opts => FRAME_SUNKEN|FRAME_THICK)

    subsplitter = FX4Splitter.new(splitter, LAYOUT_FILL_X|LAYOUT_FILL_Y)

    # Create the four children of the sub-splitter...
    FXButton.new(subsplitter, "&Of course\tThis splitter does NOT track") do |theButton|
      theButton.frameStyle = FRAME_SUNKEN|FRAME_THICK
      theButton.backColor = FXRGB(0, 128, 0)
      theButton.textColor = FXRGB(255, 255, 255)
    end

    button = FXButton.new(subsplitter,
      "the&y CAN\tThis splitter does NOT track", :opts => FRAME_SUNKEN|FRAME_THICK)
    button.backColor = FXRGB(128, 0, 0)
    button.textColor = FXRGB(255, 255, 255)

    button = FXButton.new(subsplitter,
      "be &NESTED\tThis splitter does NOT track", :opts => FRAME_SUNKEN|FRAME_THICK)
    button.backColor = FXRGB(0, 0, 200)
    button.textColor = FXRGB(255, 255, 255)

    button = FXButton.new(subsplitter,
      "&arbitrarily!\tThis splitter does NOT track", :opts => FRAME_SUNKEN|FRAME_THICK)
    button.backColor = FXRGB(128, 128, 0)
    button.textColor = FXRGB(255, 255, 255)

    # Finally, create the tool tip object
    FXToolTip.new(getApp())
  end

  def create
    super
    show(PLACEMENT_SCREEN)
  end
end

def runme
  application = FXApp.new("FourSplit", "FoxTest")
  FourSplitWindow.new(application)
  application.create
  application.run
end

runme