Criar  Editar  FrontPage  Índices  Buscar  Alterações  History  RSS  Back  Login

tips_toolbar_icon Diff - Ruby-GNOME2 Project Website

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

= Altera um ícone em um botão de uma "toolbar"
{{link nil, "Ruby-GNOME2+Tips", nil, nil}}

Gtk::Toolbar, como um bocado de outros componentes, é uma subclasse de Gtk::Container ou Gtk::Bin. Eles podem conter componentes filho e você pode iteragir sobre cada filho e mandar métodos para ele.

Eis um script de exemplo:

require 'gtk2'

toolbar = Gtk::Toolbar.new
toolbar.append(Gtk::Stock::NEW) do
   toolbar.children[0].child.children[0].set(Gtk::Stock::QUIT, Gtk::IconSize::SMALL_TOOLBAR)  #(1)
end
Gtk::Window.new.add(toolbar).show_all

Gtk.main

Clique no botão, e então o ícone será alterado.
Em vez da linha (1) você também pode escrever:

button = toolbar.children[0]
vbox = button.child
image = vbox.children[0]
image.set(Gtk::Stock::QUIT, Gtk::IconSize::SMALL_TOOLBAR)

Claro que você pode usar ambas as maneiras se quiser. Mas a primeira usa a habilidade de chamada em cadeia de Ruby.
E a figura a seguir mostra as relações entre esses objetos:

((<Containers|URL:/ja/hiki.cgi?c=plugin;plugin=attach_download;p=tips_toolbar;file_name=containers.jpg>))
{{br}}

(1) Gtk::Toolbar é uma subclasse de Gtk::Container, assim você pode obter todos os componentes filhos usando  Gtk::Container#children. Aqui, o primeiro filho é o objeto alvo (Gtk::Button), assim você pode obtê-lo com toolbar.children[0].
(2) Gtk::Button é uma subclasse de Gtk::Bin, assim ele tem apenas um filho. Você pode obter o componente filho com Gtk::Bin#child. Nesse caso, o componente filho é um Gtk::VBox.
(3) Gtk::VBox é também uma subclasse de Gtk::Container. Assim você obtém o objeto Gtk::Image usando vbox.children[0].
(4) Finalmente, use Gtk::Image#set para alterar o ícone.

== Log de Alterações
:2003-09-11 ((<Laurent|lrz>))
  Inglês corrigido.
:2003-09-11 ((<Masao>))
  Versão inicial.

Autor da Tradução para Português: ((<Joao Pedrosa|jpedrosa>))