ruby-****@lists*****
ruby-****@lists*****
2003年 5月 26日 (月) 22:52:18 JST
------------------------- REMOTE_ADDR = 210.249.193.205 REMOTE_HOST = URL = http://ruby-gnome2.sourceforge.jp/?%A5%CF%A5%F3%A5%C9%A5%EB%A5%DC%A5%C3%A5%AF%A5%B9 ------------------------- ------------------------- = Gtk::HandleBox ((*まだRuby/GTK(1)向けです*)) 最近、メニューバーやツールバーをマウスのドラッグで取り外しできるようになっているツールが増えてきました。Ruby/GTKではGtk::HandleBoxを使うとこのようなGUIを実現できます。 もちろん、Gtk::HandleBoxはメニューバーやツールバー以外のウィジェットでも使えます。 == 基本的な使い方 メニューバーを取り外し可能にしてみます。 require 'gtk' window = Gtk::Window.new window.set_usize(300, 300) accel = Gtk::AccelGroup.new accel.attach(window) callback = Proc.new{|i| print "#{i} is activated.\n"} quit = Proc.new{ Gtk.main_quit } ifp = Gtk::ItemFactory.new(Gtk::ItemFactory::TYPE_MENU_BAR, "<main>", accel) ifp.create_items( [["/ファイル(_F)", nil, Gtk::ItemFactory::BRANCH, nil, nil], ["/ファイル(_F)/Tearoff1", nil, Gtk::ItemFactory::TEAROFF, nil, nil], ["/ファイル(_F)/新規作成(_N)", "<control>N", Gtk::ItemFactory::ITEM, callback, 1], ["/ファイル(_F)/セパレータ", nil, Gtk::ItemFactory::SEPARATOR, nil, nil], ["/ファイル(_F)/終了(_Q)", "<control>Q", nil, quit, nil], ["/ヘルプ(_H)", nil, Gtk::ItemFactory::LAST_BRANCH, nil, nil], ["/ヘルプ(_H)/_About", nil, nil, nil, nil]]) menubar = ifp.get_widget("<main>") vbox = Gtk::VBox.new handlebox = Gtk::HandleBox.new handlebox.add(menubar) vbox.pack_start(handlebox, false, false, 0) vbox.pack_start(Gtk::Label.new("test"), true, true, 0) window.add(vbox) window.show_all Gtk.main == 各種プロパティの指定 Gtk::HandleBoxのプロパティを指定してみます。ただし、GUIの使いやすさの観点から言うと、特別な理由がない限りデフォルトのままの方が良いでしょう。 require 'gtk' window = Gtk::Window.new window.set_usize(300, 300) accel = Gtk::AccelGroup.new accel.attach(window) callback = Proc.new{|i| print "#{i} is activated.\n"} quit = Proc.new{ Gtk.main_quit } ifp = Gtk::ItemFactory.new(Gtk::ItemFactory::TYPE_MENU_BAR, "<main>", accel) ifp.create_items( [["/ファイル(_F)", nil, Gtk::ItemFactory::BRANCH, nil, nil], ["/ファイル(_F)/Tearoff1", nil, Gtk::ItemFactory::TEAROFF, nil, nil], ["/ファイル(_F)/新規作成(_N)", "<control>N", Gtk::ItemFactory::ITEM, callback, 1], ["/ファイル(_F)/セパレータ", nil, Gtk::ItemFactory::SEPARATOR, nil, nil], ["/ファイル(_F)/終了(_Q)", "<control>Q", nil, quit, nil], ["/ヘルプ(_H)", nil, Gtk::ItemFactory::LAST_BRANCH, nil, nil], ["/ヘルプ(_H)/_About", nil, nil, nil, nil]]) menubar = ifp.get_widget("<main>") vbox = Gtk::VBox.new handlebox = Gtk::HandleBox.new handlebox.add(menubar) handlebox.set_shadow_type(Gtk::SHADOW_IN) handlebox.set_handle_position(Gtk::POS_RIGHT) handlebox.set_snap_edge(Gtk::POS_TOP) vbox.pack_start(handlebox, false, false, 0) vbox.pack_start(Gtk::Label.new("test"), true, true, 0) window.add(vbox) window.show_all Gtk.main Gtk::HandleBox#set_shadow_type(shadow_type)はGtk::HandleBoxの周囲に描かれる陰の部分(ボーダー)の種類を指定.....するんだそうですが、イマイチ違いがよくわかりません。GTKのテーマとかによるのかなぁ。まぁ、あまり使うこともないから追うのはやめときます(^^;)。shadow_typeには以下の定数を指定します。 * Gtk::SHADOW_NONE - ボーダーなし * Gtk::SHADOW_IN - 彫り込みボーダー * Gtk::SHADOW_OUT - ボタンのような浮き彫りボーダー * Gtk::SHADOW_ETCHED_IN - 浮き彫りエッチングボーダー * Gtk::SHADOW_ETCHED_OUT - 彫り込みエッチングボーダー Gtk::HandleBox#set_handle_position(position)はハンドル(この上でマウスをドラッグするとGtk::HandleBoxを取り外すことができる)部分の位置を指定します。positionには以下の定数を指定します。 * Gtk::POS_LEFT - 左側(デフォルト) * Gtk::POS_RIGHT - 右側 * Gtk::POS_TOP - 上側 * Gtk::POS_BOTTOM - 下側 Gtk::HandleBox#set_snap_edge(position)は一度取り外したGtk::HandleBoxを再度取り付ける(reattach)場合、元の位置(面)のどこに取り外したGtk::HandleBoxを合わせると元に戻るのか、その面を指定します....。って意味わかります?(^^;)。positionには以下の定数を指定します。 * Gtk::POS_LEFT - 左側(デフォルト) * Gtk::POS_RIGHT - 右側 * Gtk::POS_TOP - 上側 * Gtk::POS_BOTTOM - 下側