[ruby-gnome2-doc-cvs] [Hiki] update - tut-gtk2-packing-demo

アーカイブの一覧に戻る

ruby-****@sourc***** ruby-****@sourc*****
2004年 4月 3日 (土) 07:13:34 JST


-------------------------
REMOTE_ADDR = 200.216.151.125
REMOTE_HOST = 
        URL = http://ruby-gnome2.sourceforge.jp/en/?tut-gtk2-packing-demo
-------------------------
+ {{link "tut-gtk2-packing-box-details", "tut-gtk2-packing-intro", "tut-gtk", "tut-gtk2-packing-tables"}}
  = Packing Demonstration Program
  
    #!/usr/bin/env ruby
  
    require 'gtk2'
  
    # Make a new hbox filled with button-labels. Arguments for Gtk::HBox.new and 
    # Gtk::Box#pack_start we are interested are passed in to this method.
    def make_box(homogeneous, spacing, expand, fill, padding)
        box = Gtk::HBox.new(homogeneous, spacing)
        
        "Gtk::Box#pack_start (button, #{expand}, #{fill}, #{padding})".split(/ /).each do |s|
            button = Gtk::Button.new(s)
            box.pack_start(button, expand, fill, padding)
        end
        box
    end
  
    # Parse command line argument.
    which = ARGV.shift
    unless which
        $stderr.puts "usage: #{$0} num"
        $stderr.puts "	where num is 1, 2, or 3."
        exit 1
    end
  
    # Do not forget to initialize Ruby/GTK2!
    Gtk.init
  
    # Creates the main window.
    window = Gtk::Window.new
    
    # You should always remember to connect the delete_event signal
    # to the main window. This is very important for proper intuitive
    # behavior.
    window.signal_connect("delete_event") do
        Gtk::main_quit
        false
    end
    window.border_width = 10
  
    # We create a vertical box (vbox) to pack the horizontal boxes into (created by make_box).
    # This allows us to stack the horizontal boxes filled with buttons one
    # on top of the other in this vbox.
    box1 = Gtk::VBox.new(false, 0)
  
    case which.to_i
    when 1
        # Creates and aligns a new label to the left side.  
        # We'll discuss this function and others in the section on Widget Attributes.
        label = Gtk::Label.new("Gtk::HBox.new(false, 0)")
        label.set_alignment(0, 0)
        box1.pack_start(label, false, false, 0)
  
        # The 2 first entries are for homegeneous and spacing parameters for Gtk::HBox.new.
        # The 3 last entries are for expand, fill and padding parameters for Gtk::HBox#pack_start.
        [
            [false, 0, false, false, 0],
            [false, 0, true,  false, 0],
            [false, 0, true,  true,  0],
        ].each do |args|
            # Create a horizontal box with the specified parameters 
            # and pack it on top of the vertical box.
  
            box2 = make_box(*args)
            box1.pack_start(box2, false, false, 0)
        end
  
        # Insert a separator in the vertical box.
        separator = Gtk::HSeparator.new
        box1.pack_start(separator, false, true, 5)
  
        # Same as previous.
        label = Gtk::Label.new("Gtk::HBox.new(true, 0)")
        label.set_alignment(0, 0)
        box1.pack_start(label, false, false, 0)
        [
            [true, 0, true, false, 0],
            [true, 0, true, true,  0],
        ].each do |args|
            box2 = make_box(*args)
            box1.pack_start(box2, false, false, 0)
        end
  
        separator = Gtk::HSeparator.new
        box1.pack_start(separator, false, true, 5)
  
    when 2
        label = Gtk::Label.new("Gtk::HBox.new(false, 10)")
        label.set_alignment(0, 0)
        box1.pack_start(label, false, false, 0)
  
        [
            [false, 10, true, false, 0],
            [false, 10, true, true,  0],
        ].each do |args|
            box2 = make_box(*args)
            box1.pack_start(box2, false, false, 0)
        end
  
        separator = Gtk::HSeparator.new
        box1.pack_start(separator, false, true, 5)
  
        label = Gtk::Label.new("Gtk::HBox.new(false, 0)")
        label.set_alignment(0, 0)
        box1.pack_start(label, false, false, 0)
  
        [
            [false, 0, true, false, 10],
            [false, 0, true, true,  10],
        ].each do |args|
            box2 = make_box(*args)
            box1.pack_start(box2, false, false, 0)
        end
  
        separator = Gtk::HSeparator.new
        box1.pack_start(separator, false, true, 5)
  
    when 3
        # This demonstrates the ability to use Gtk::Box#pack_end to
        # right justify widgets. First, we create a new box as before.
        box2 = make_box(false, 0, false, false, 0);
  
        # Create a label that will be put at the end.
        label = Gtk::Label.new("end")
        box2.pack_end(label, false, false, 0)
        box1.pack_start(box2, false, false, 0)
  
        # A separator for the bottom.
        separator = Gtk::HSeparator.new
  
        # This explicitly sets the separator to 400 pixels wide by 5 pixels
        # high. This is so the hbox we created will also be 400 pixels wide,
        # and the "end" label will be separated from the other labels in the
        # hbox. Otherwise, all the widgets in the hbox would be packed as
        # close together as possible. 
        separator.set_size_request(400, 5)
        box1.pack_start(separator, false, true, 5)
    end
  
    # Creates a new box, and packs a 'quit' button to it.
    # This button can be used to terminate the program, exactly like the window
    # close cross.
    quitbox = Gtk::HBox.new(false, 0)
    button = Gtk::Button.new("Quit")
    button.signal_connect("clicked") do
        Gtk.main_quit
    end 
  
    quitbox.pack_start(button, true, false, 0)
    box1.pack_start(quitbox, true, false, 0)
    window.add(box1)
  
    # Display all widgets.
    window.show_all
  
    # As usual, we finish by entering the main loop, with Gtk.main.
    Gtk.main





ruby-gnome2-cvs メーリングリストの案内
アーカイブの一覧に戻る