ruby-****@lists*****
ruby-****@lists*****
2003年 5月 26日 (月) 22:20:25 JST
------------------------- REMOTE_ADDR = 210.249.193.205 REMOTE_HOST = URL = http://ruby-gnome2.sourceforge.jp/?%A5%C4%A1%BC%A5%EB%A5%D0%A1%BC ------------------------- ------------------------- = ツールバー == 基本的な使い方 hoge.xpmは適当にXPM形式ファイルを使ってください。 require 'gtk' window = Gtk::Window.new window.realize pix, mask = Gdk::Pixmap::create_from_xpm(window.window, nil, "hoge.xpm") toolbar = Gtk::Toolbar.new toolbar.append_item("Open", "Open File", nil, Gtk::Pixmap.new(pix, mask), nil) do p "Open" end toolbar.append_item("Save", "Save File", nil, Gtk::Pixmap.new(pix, mask), nil) do p "Save" end window.add(toolbar) window.show_all Gtk.main --- Gtk::Toolbar#append_item(text, tooltip_text, tooltip_private_text, icon, proc) do 〜 end * text - 表示文字列 * tooltip_text - ToolTip用文字列 * tooltip_private_text - ToolTipのさらに詳細な説明(って使い方よくわかりません) * icon - Gtk::Pixmapオブジェクト * proc - Procオブジェクト。do 〜 endの代わりに使うことができる。 第5引数のprocは本家のGTK+と互換性を残すためにあるようなイメージ。なくても良いと思うんだけどなぁ、ということで、私の場合は上記のように常にnilを設定するようにしてます。 それから画像が同じだからと言ってiconを使い回そうとすると(先にGtk::Pixmap.new()しておいてそれを繰り返し使う)エラーが発生します。そんなわけで、この例では、iconのところで毎回Gtk::Pixmap.new()してます。これもバグっぽいんだけどなぁ。まぁ、使い回さなければ良いってことで。 == 表示形式を変える(ツールバー生成時) 次に、ツールバーを縦に表示したり、文字だけ表示したりしてみます。 require 'gtk' window = Gtk::Window.new window.realize pix, mask = Gdk::Pixmap::create_from_xpm(window.window, nil, "hoge.xpm") toolbar = Gtk::Toolbar.new(Gtk::ORIENTATION_VERTICAL, Gtk::Toolbar::TEXT) toolbar.append_item("Open", "Open File", nil, Gtk::Pixmap.new(pix, mask), nil) do p "Open" end toolbar.append_item("Save", "Save File", nil, Gtk::Pixmap.new(pix, mask), nil) do p "Save" end window.add(toolbar) window.show_all Gtk.main --- Gtk::Toolbar.new(orientation, style) * orientation - 表示方向。 * Gtk::ORIENTATION_VERTICAL - 縦方向 * Gtk::ORIENTATION_HORIZONTAL - 横方向(デフォルト) * style - Toolbarのボタンがテキストのみを含むかアイコンのみ含むかあるいは両方含むかを決める * Gtk::Toolbar::TEXT - テキスト * Gtk::Toolbar::ICONS - アイコン * Gtk::Toolbar::BOTH - 両方 ちなみにオイラの環境だとstyleの方、何を指定してもBOTHになってしまいます。なぜなんだろう。そもそも解釈間違えてるかな? == 表示形式を変える(ツールバー生成後) 今度は、ツールバー生成後に、2と同じことをしてみます。オイラの環境だとこっちはOKなんだよね。 require 'gtk' window = Gtk::Window.new window.realize pix, mask = Gdk::Pixmap::create_from_xpm(window.window, nil, "hoge.xpm") toolbar = Gtk::Toolbar.new toolbar.set_orientation(Gtk::ORIENTATION_VERTICAL) toolbar.append_item("Open", "Open File", nil, Gtk::Pixmap.new(pix, mask), nil) do p "Open" end toolbar.append_item("Save", "Save File", nil, Gtk::Pixmap.new(pix, mask), nil) do p "Save" end window.add(toolbar) window.show_all toolbar.set_style(Gtk::Toolbar::TEXT) Gtk.main Gtk::Toolbar#set_orientation(orientation)で縦横方向を、 Gtk::Toolbar#set_style(style)でスタイルを決めてます。 Gtk::Toolbar#set_style()は、ツールバーが画面に表示された後ではないと変更できないみたいです。なんでだろ。 == ボタンのレリーフ(縁の部分)のスタイルを変える ボタンのレリーフ(縁の部分)のスタイルを設定します。 require 'gtk' window = Gtk::Window.new window.realize pix, mask = Gdk::Pixmap::create_from_xpm(window.window, nil, "hoge.xpm") toolbar = Gtk::Toolbar.new toolbar.set_button_relief(Gtk::RELIEF_NONE) toolbar.append_item("Open", "Open File", nil, Gtk::Pixmap.new(pix, mask), nil) do p "Open" end toolbar.append_item("Save", "Save File", nil, Gtk::Pixmap.new(pix, mask), nil) do p "Save" end window.add(toolbar) window.show_all Gtk.main --- Gtk::Toolbar#set_button_relief(style) * Gtk::RELIEF_NONE - 枠が無くなります。 * Gtk::RELIEF_HALF - 枠の大きさが半分になる?NORMALと同じ? * Gtk::RELIEF_NORMAL - 枠が表示されます(デフォルト)。 == ボタン間にスペースをあける ボタン間にスペースをあけます。 require 'gtk' window = Gtk::Window.new window.realize pix, mask = Gdk::Pixmap::create_from_xpm(window.window, nil, "hoge.xpm") toolbar = Gtk::Toolbar.new toolbar.set_space_size(30) toolbar.set_space_style(Gtk::Toolbar::SPACE_LINE) toolbar.append_item("Open", "Open File", nil, Gtk::Pixmap.new(pix, mask), nil) do p "Open" end toolbar.append_space toolbar.append_item("Save", "Save File", nil, Gtk::Pixmap.new(pix, mask), nil) do p "Save" end window.add(toolbar) window.show_all Gtk.main Gtk::Toolbar#set_space_size(size)でツールバーのスペース部分のサイズを設定します。 Gtk::Toolbar#set_space_style(style)でスペース部分のスタイルを設定します。 * Gtk::Toolbar::SPACE_LINE - 仕切線が表示されます。 * Gtk::Toolbar::SPACE_EMPTY - 何も表示されません(デフォルト)。 実際にスペースを空けたいアイテムの間でGtk::Toolbar#append_space()を呼びます。 == ToolTipを表示しないようにする まぁ、滅多に使うことも無いでしょうが。 require 'gtk' window = Gtk::Window.new window.realize pix, mask = Gdk::Pixmap::create_from_xpm(window.window, nil, "hoge.xpm") toolbar = Gtk::Toolbar.new toolbar.set_tooltips(false) toolbar.append_item("Open", "Open File", nil, Gtk::Pixmap.new(pix, mask), nil) do p "Open" end toolbar.append_item("Save", "Save File", nil, Gtk::Pixmap.new(pix, mask), nil) do p "Save" end window.add(toolbar) window.show_all Gtk.main Gtk::Toolbar#set_tooltips(enable)で、enableにtrueを設定すると表示、enableにfalseを設定すると非表示となります。 == ツールバーへウィジェットを追加する ツールバーに別のウィジェットを追加することもできます。ここでは、Gtk::Entryウィジェットを追加してみます。使いようによっては結構使えるかも。 require 'gtk' window = Gtk::Window.new window.realize pix, mask = Gdk::Pixmap::create_from_xpm(window.window, nil, "hoge.xpm") toolbar = Gtk::Toolbar.new toolbar.append_item("Open", "Open File", nil, Gtk::Pixmap.new(pix, mask), nil) do p "Open" end toolbar.append_widget(Gtk::Entry.new, "Entry Widget", nil) toolbar.append_item("Save", "Save File", nil, Gtk::Pixmap.new(pix, mask), nil) do p "Save" end window.add(toolbar) window.show_all Gtk.main --- Gtk::Toolbar#append_widget(widget, tooltip_text, tooltip_private_text) * widget - 追加するウィジェット * tooltip_text - ToolTip用文字列 * tooltip_private_text - ToolTipのさらに詳細な説明 == ある特定のウィジェットを追加する 先ほどのGtk::Toolbar#append_widget()は任意のウィジェットを生成できましたが、同様にいくつかのウィジェットに関してはGtk::Toolbar#append_element()を使うこともできます。 require 'gtk' window = Gtk::Window.new window.realize pix, mask = Gdk::Pixmap::create_from_xpm(window.window, nil, "hoge.xpm") toolbar = Gtk::Toolbar.new toolbar.append_element(Gtk::Toolbar::CHILD_BUTTON, nil, "button", "button 1", nil, Gtk::Pixmap.new(pix, mask)) do p "button 1" end toolbar.append_element(Gtk::Toolbar::CHILD_SPACE, nil, nil, nil, nil, nil) toolbar.append_element(Gtk::Toolbar::CHILD_TOGGLEBUTTON, nil, "togglebutton", "toggle button 1", nil, Gtk::Pixmap.new(pix, mask)) do p "toggle button 1" end radio1 = toolbar.append_element(Gtk::Toolbar::CHILD_RADIOBUTTON, nil, "radiobutton1", "radio button 1", nil, Gtk::Pixmap.new(pix, mask)) do p "radio button 1" end toolbar.append_element(Gtk::Toolbar::CHILD_RADIOBUTTON, radio1, "radiobutton2", "radio button 2", nil, Gtk::Pixmap.new(pix, mask)) do p "radio button 2" end toolbar.append_element(Gtk::Toolbar::CHILD_WIDGET, Gtk::Entry.new, "widget1", "widget 1", nil, Gtk::Pixmap.new(pix, mask)) do p "widget 1" end window.add(toolbar) window.show_all Gtk.main --- Gtk::Toolbar#append_element(type, widget, text, tooltip_text, tooltip_private_text, icon) do 〜 end * type - 追加するウィジェットの種類 * Gtk::Toolbar::CHILD_SPACE - スペースを空けます。Gtk::Toolbar#append_space()と同じです、たぶん。 * Gtk::Toolbar::CHILD_BUTTON - ボタンを追加します。Gtk::Toolbar#append_item()と同じです。 * Gtk::Toolbar::CHILD_TOGGLEBUTTON - トグルボタンを追加します。 * Gtk::Toolbar::CHILD_RADIOBUTTON - ラジオボタンを追加します。 * Gtk::Toolbar::CHILD_WIDGET - 任意のウィジェットを追加します。Gtk::Toolbar#append_widget()と同じです。 * widget - typeによって指定するものが異なります。 * Gtk::Toolbar::CHILD_SPACE, Gtk::Toolbar::CHILD_BUTTON, Gtk::Toolbar::CHILD_TOGGLEBUTTON。それ以外の場合はnilを指定します。 * Gtk::Toolbar::CHILD_RADIOBUTTON - グループ化したいものに対し最初に取得した(メソッドの戻り値)のGtk::RadioButtonを指定します。詳しくはラジオボタンのところを参照してください。 * Gtk::Toolbar::CHILD_WIDGET - 追加したいウィジェットを指定します。たとえば、Gtk::Entryなど。 * tooltip_text - ToolTip用文字列 * tooltip_private_text - ToolTipのさらに詳細な説明 * icon - Gtk::Pixmapオブジェクト 上記例ではradio1のところでしか使ってませんが、このメソッドは生成したウィジェットを返します。それから、ブロック(do 〜 end)はあってもなくても大丈夫ですが、Gtk::Toolbar::CHILD_SPACEなどでは意味がありません。 --- Gtk::Toolbar#prepend_xxx(), Gtk::Toolbar#insert_xxx() 今まではすべてGtk::Toolbar#append_xxx()を使っていたのですが、同様なメソッドにGtk::Toolbar#prepend_xxx(), Gtk::Toolbar#insert_xxx()があります。これらは「先に」「場所を指定して」ボタンを追加(挿入)していくということ以外はGtk::Toolbar#append_xxx()と変わりません。 require 'gtk' window = Gtk::Window.new window.realize pix, mask = Gdk::Pixmap::create_from_xpm(window.window, nil, "hoge.xpm") toolbar = Gtk::Toolbar.new toolbar.prepend_item("prepend1", "prepend 1", nil, Gtk::Pixmap.new(pix, mask), nil) do p "prepend1" end toolbar.prepend_item("prepend2", "prepend 2", nil, Gtk::Pixmap.new(pix, mask), nil) do p "prepend2" end toolbar.insert_item("insert", "insert 1", nil, Gtk::Pixmap.new(pix, mask), nil, 0) do p "insert" end window.add(toolbar) window.show_all Gtk.main メソッドの紹介だけ。 --- Gtk::Toolbar#prepend_item(text, tooltip_text, tooltip_private_text, icon, proc) do 〜 end --- Gtk::Toolbar#insert_item(text, tooltip_text, tooltip_private_text, icon, proc, position) do 〜 end --- Gtk::Toolbar#prepend_space --- Gtk::Toolbar#insert_space(position) --- Gtk::Toolbar#prepend_widget(widget, tooltip_text, tooltip_private_text) --- Gtk::Toolbar#insert_widget(widget, tooltip_text, tooltip_private_text, position) * widget - 追加するウィジェット * tooltip_text - ToolTip用文字列 * tooltip_private_text - ToolTipのさらに詳細な説明 Gtk::insert_xxx()のpositionは挿入位置です。0が一番左になります。