#!/usr/bin/env ruby require 'fox16' require 'fox16/kwargs' include Fox class TabBookWindow < FXMainWindow def initialize(app) # Call the base class initializer first super(app, "Tab Book Test", :opts => DECOR_ALL, :width => 600, :height => 400) # Make a tooltip FXToolTip.new(getApp()) # Menubar appears along the top of the main window menubar = FXMenuBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X) # Separator FXHorizontalSeparator.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X|SEPARATOR_GROOVE) # Contents contents = FXHorizontalFrame.new(self, LAYOUT_SIDE_TOP|FRAME_NONE|LAYOUT_FILL_X|LAYOUT_FILL_Y|PACK_UNIFORM_WIDTH) # Switcher @tabbook = FXTabBook.new(contents,:opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_RIGHT) # First item is a list @tab1 = FXTabItem.new(@tabbook, "&Simple List", nil) listframe = FXHorizontalFrame.new(@tabbook, FRAME_THICK|FRAME_RAISED) simplelist = FXList.new(listframe, :opts => LIST_EXTENDEDSELECT|LAYOUT_FILL_X|LAYOUT_FILL_Y) simplelist.appendItem("First Entry") simplelist.appendItem("Second Entry") simplelist.appendItem("Third Entry") simplelist.appendItem("Fourth Entry") # Second item is a file list @tab2 = FXTabItem.new(@tabbook, "F&ile List", nil) @fileframe = FXHorizontalFrame.new(@tabbook, FRAME_THICK|FRAME_RAISED) filelist = FXFileList.new(@fileframe, :opts => ICONLIST_EXTENDEDSELECT|LAYOUT_FILL_X|LAYOUT_FILL_Y) # Third item is a directory list @tab3 = FXTabItem.new(@tabbook, "T&ree List", nil) dirframe = FXHorizontalFrame.new(@tabbook, FRAME_THICK|FRAME_RAISED) dirlist = FXDirList.new(dirframe, :opts => DIRLIST_SHOWFILES|TREELIST_SHOWS_LINES|TREELIST_SHOWS_BOXES|LAYOUT_FILL_X|LAYOUT_FILL_Y) # File Menu filemenu = FXMenuPane.new(self) FXMenuCommand.new(filemenu, "&Simple List", nil, @tabbook, FXTabBar::ID_OPEN_FIRST+0) FXMenuCommand.new(filemenu, "F&ile List", nil, @tabbook, FXTabBar::ID_OPEN_FIRST+1) FXMenuCommand.new(filemenu, "T&ree List", nil, @tabbook, FXTabBar::ID_OPEN_FIRST+2) FXMenuCommand.new(filemenu, "&Quit\tCtl-Q", nil, getApp(), FXApp::ID_QUIT) FXMenuTitle.new(menubar, "&File", nil, filemenu) # Tab side tabmenu = FXMenuPane.new(self) hideShow = FXMenuCheck.new(tabmenu, "Hide/Show Tab 2") hideShow.connect(SEL_COMMAND) { if @tab2.shown? @tab2.hide @fileframe.hide else @tab2.show @fileframe.show end @tab2.recalc @fileframe.recalc } hideShow.connect(SEL_UPDATE) { hideShow.check = @tab2.shown? } FXMenuSeparator.new(tabmenu) topTabsCmd = FXMenuRadio.new(tabmenu, "&Top Tabs") topTabsCmd.connect(SEL_COMMAND) do @tabbook.tabStyle = TABBOOK_TOPTABS @tab1.tabOrientation = TAB_TOP @tab2.tabOrientation = TAB_TOP @tab3.tabOrientation = TAB_TOP end topTabsCmd.connect(SEL_UPDATE) do |sender, sel, ptr| sender.check = (@tabbook.tabStyle == TABBOOK_TOPTABS) end bottomTabsCmd = FXMenuRadio.new(tabmenu, "&Bottom Tabs") bottomTabsCmd.connect(SEL_COMMAND) do @tabbook.tabStyle = TABBOOK_BOTTOMTABS @tab1.tabOrientation = TAB_BOTTOM @tab2.tabOrientation = TAB_BOTTOM @tab3.tabOrientation = TAB_BOTTOM end bottomTabsCmd.connect(SEL_UPDATE) do |sender, sel, ptr| sender.check = (@tabbook.tabStyle == TABBOOK_BOTTOMTABS) end leftTabsCmd = FXMenuRadio.new(tabmenu, "&Left Tabs") leftTabsCmd.connect(SEL_COMMAND) do @tabbook.tabStyle = TABBOOK_LEFTTABS @tab1.tabOrientation = TAB_LEFT @tab2.tabOrientation = TAB_LEFT @tab3.tabOrientation = TAB_LEFT end leftTabsCmd.connect(SEL_UPDATE) do |sender, sel, ptr| sender.check = (@tabbook.tabStyle == TABBOOK_LEFTTABS) end rightTabsCmd = FXMenuRadio.new(tabmenu, "&Right Tabs") rightTabsCmd.connect(SEL_COMMAND) do @tabbook.tabStyle = TABBOOK_RIGHTTABS @tab1.tabOrientation = TAB_RIGHT @tab2.tabOrientation = TAB_RIGHT @tab3.tabOrientation = TAB_RIGHT end rightTabsCmd.connect(SEL_UPDATE) do |sender, sel, ptr| sender.check = (@tabbook.tabStyle == TABBOOK_RIGHTTABS) end FXMenuSeparator.new(tabmenu) addTabCmd = FXMenuCommand.new(tabmenu, "Add Tab") addTabCmd.connect(SEL_COMMAND) do FXTabItem.new(@tabbook, "New Tab") FXHorizontalFrame.new(@tabbook, FRAME_THICK|FRAME_RAISED) do |hf| FXLabel.new(hf, "Always add tab item and contents together.", :opts => LAYOUT_FILL) end @tabbook.create # realize widgets @tabbook.recalc # mark parent layout dirty end removeTabCmd = FXMenuCommand.new(tabmenu, "Remove Last Tab") removeTabCmd.connect(SEL_COMMAND) do numTabs = @tabbook.numChildren/2 doomedTab = numTabs - 1 @tabbook.removeChild(@tabbook.childAtIndex(2*doomedTab+1)) @tabbook.removeChild(@tabbook.childAtIndex(2*doomedTab)) end FXMenuTitle.new(menubar, "&Tab Placement", nil, tabmenu) end def create super show(PLACEMENT_SCREEN) end end if __FILE__ == $0 # Make an application application = FXApp.new("TabBook", "FoxTest") # Build the main window TabBookWindow.new(application) # Create the application and its windows application.create # Run application.run end