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

Back to archive index

ruby-gnome2-hiki-pt_BR****@sourc***** ruby-gnome2-hiki-pt_BR****@sourc*****
2004年 4月 9日 (金) 22:49:55 JST


-------------------------
REMOTE_ADDR = 200.216.146.35
REMOTE_HOST = 
        URL = http://ruby-gnome2.sourceforge.jp/pt_BR/?tut-gtk2-packing-demo
-------------------------
= Programa de Demonstra$Bgc(Bo de Posicionamento
{{link "tut-gtk2-packing-box-details", "tut-gtk2-packing-intro", "tut-gtk", "tut-gtk2-packing-tables"}}

  #!/usr/bin/env ruby

  require 'gtk2'

  # Cria uma nova caixa hbox preenchida com bot$B(Bs-r$B(Bulos. Os areumentos para Gtk::HBox.new e 
  # Gtk::Box#pack_start em que estamos interessados s$BeP(B passados para este m$BqU(Bodo.
  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" o argumento de linha de comando.
  which = ARGV.shift
  unless which
      $stderr.puts "uso: #{$0} num"
      $stderr.puts "	onde num 1, 2, ou 3."
      exit 1
  end

  # N$BeP(B esque$BmB(B de inicializar a Ruby/GTK2!
  Gtk.init

  # Cria a janela principal.
  window = Gtk::Window.new
  
  # Vocdeve sempre lembrar-se de conectar o sinal delete_event
  # a janela principal. Isso bastante importante para comportamento intuitivo apropriado.
  window.signal_connect("delete_event") do
      Gtk::main_quit
      false
  end
  window.border_width = 10

  # A gente cria uma caixa vertical (vbox) e posiciona as caixas horizontais dentro (criado por make_box).
  # Isso nos permite empilhar as caixas horizontais preenchidas com bot$B(Bs uma sobre a outra nesta vbox.
  box1 = Gtk::VBox.new(false, 0)

  case which.to_i
  when 1
      # Cria e alinha um novo r$B(Bulo ao lado esquerdo.  
      # Discutiremos esta fun$Bne(Bo e outras na se$Bne(Bo sobre atributos de componentes.
      label = Gtk::Label.new("Gtk::HBox.new(false, 0)")
      label.set_alignment(0, 0)
      box1.pack_start(label, false, false, 0)

      # As primeiras 2 entradas s$BeP(B para os par$BcN(Betros homog$BsO(Beo e espa$BmB(Bmento para Gtk::HBox.new.
      # As 3 $B(Btimas entradas s$BeP(B para os argumentos "expandir", "preencher" e espa$BmP(B_externo para Gtk::HBox#pack_start.
      [
          [false, 0, false, false, 0],
          [false, 0, true,  false, 0],
          [false, 0, true,  true,  0],
      ].each do |args|
          # Cria uma caixa horizontal com os par$BcN(Betros especificados 
          # e o posiciona acima da caixa vertical.

          box2 = make_box(*args)
          box1.pack_start(box2, false, false, 0)
      end

      # Insere um separador na caixa vertical.
      separator = Gtk::HSeparator.new
      box1.pack_start(separator, false, true, 5)

      # Mesmo do anterior.
      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
      # Isto demonstra a habilidade de usar Gtk::Box#pack_end para justificar
      # a direita os componentes. Primeiramente, a gente cria uma nova caixa como antes.
      box2 = make_box(false, 0, false, false, 0);

      # Cria um r$B(Bulo que sercolocado no fim.
      label = Gtk::Label.new("fim")
      box2.pack_end(label, false, false, 0)
      box1.pack_start(box2, false, false, 0)

      # Um separador para o bot$BeP(B.
      separator = Gtk::HSeparator.new

      # Isto explicitamente configura o separador para 400 pixels de largura por 5 de altura.
      # Isto para que a caixa hbox que a gente criou seja tamb$BqN(B 400 pixels de largura,
      # e o r$B(Bulo "fim" seja separado dos outros r$B(Bulos na caixa hbox.
      # De outra maneira, todos os componentes na hbox seriam posicionados t$BeP(B pr$B(Bimos 
      # uns dos outros quanto poss$ByW(Bel. 

      separator.set_size_request(400, 5)
      box1.pack_start(separator, false, true, 5)
  end

  # Cria uma nova caixa box, e posiciona um bot$BeP(B 'Sair' a ela.
  # Esse bot$BeP(B pode ser usado para terminar o programa, exatamente como o X da janela.
  quitbox = Gtk::HBox.new(false, 0)
  button = Gtk::Button.new("Sair")
  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)

  # Mostra todos os componentes.
  window.show_all

  # Como sempre, a gente termina ao entrar no loop principal, com Gtk.main.
  Gtk.main







ruby-gnome2-cvs メーリングリストの案内
Back to archive index