=begin uimanager.rb - Copyright (C) 2004-2006 Masao Mutoh Original version is demos/gtk-demo/ui_manager.c. This program is licenced under the same licence as Ruby-GNOME2. $Id: uimanager.rb,v 1.6 2007/07/12 14:53:09 ggc Exp $ =end require 'gtk2' if str = Gtk.check_version(2, 4, 0) puts "This sample requires GTK+ 2.4.0 or later" puts str exit end if not Gtk.check_version(2, 12, 0) recentmenuitem = "" else recentmenuitem = "" end ui_info = %Q[ #{recentmenuitem} ] callback = Proc.new {|actiongroup, action| puts "`#{action.name}' is clicked. " if action.is_a? Gtk::ToggleAction puts "active? = #{action.active?}" end } callback_quit = Proc.new { p "Quit is called." Gtk.main_quit } callback_radio = Proc.new {|action, current| puts "action = `#{action.name}'" puts "current = `#{current.name}'" } actions = [ ["FileMenu", nil, "_File"], ["PreferencesMenu", nil, "_Preferences"], ["ColorMenu", nil, "_Color"], ["ShapeMenu", nil, "_Shape"], ["HelpMenu", nil, "_Help"], ["New", Gtk::Stock::NEW, "_New", "N", "Create a new file", callback], ["Open", Gtk::Stock::OPEN, "_Open", "O", "Open a file", callback], ["Save", Gtk::Stock::SAVE, "_Save", "S", "Save current file", callback], ["SaveAs", Gtk::Stock::SAVE, "Save _As...", nil, "Save to a file", callback], ["Quit", Gtk::Stock::QUIT, "_Quit", "Q", "Quit", callback_quit], ["About", nil, "_About", "A", "About", callback], ["Logo", "demo-gtk-logo", nil, nil, "GTK+", callback] ] toggle_actions = [ ["Bold", Gtk::Stock::BOLD, "_Bold", "B", "Bold", callback, true] ] color_radio_actions = [ ["Red", nil, "_Red", "R", "Blood", 0], ["Green", nil, "_Green", "G", "Grass", 1], ["Blue", nil, "_Blue", "B", "Sky", 2] ] shape_radio_actions = [ ["Square", nil, "_Square", "S", "Square", 0], ["Rectangle", nil, "_Rectangle", "R", "Rectangle", 1], ["Oval", nil, "_Oval", "O", "Egg", 2] ] window = Gtk::Window.new("Gtk::UIManager sample") actiongroup = Gtk::ActionGroup.new("Actions") actiongroup.add_actions(actions) actiongroup.add_toggle_actions(toggle_actions) actiongroup.add_radio_actions(color_radio_actions, 1) do |action, current| puts "action = `#{action.name}'" puts "current = `#{current.name}'" end actiongroup.add_radio_actions(shape_radio_actions, 2, callback_radio) if not Gtk.check_version(2, 12, 0) action = Gtk::RecentAction.new('recent', 'Open Recent', nil, 'gtk-open') [ 'item-activated', 'activate' ].each { |signal| action.signal_connect(signal) { |action| puts "`Recent' #{signal}, uri=#{action.current_uri || 'no item selected'}" } } actiongroup.add_action(action) end uimanager = Gtk::UIManager.new uimanager.insert_action_group(actiongroup, 0) window.add_accel_group(uimanager.accel_group) uimanager.add_ui(ui_info) vbox = Gtk::VBox.new vbox.pack_start(uimanager["/MenuBar"], false, false) vbox.pack_start(Gtk::Label.new("Gtk::UIManager Sample")) window.add(vbox) window.set_default_size(100, 100).show_all window.signal_connect("destroy"){Gtk.main_quit} Gtk.main