新規作成  編集  Ruby-GNOME2 Project Website  ページ一覧  検索  更新履歴  編集履歴  RSS  ログイン

ハンドルボックス

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::HandleBox#set_handle_position(position)はハンドル(この上でマウスをドラッグするとGtk::HandleBoxを取り外すことができる)部分の位置を指定します。positionには以下の定数を指定します。

Gtk::HandleBox#set_snap_edge(position)は一度取り外したGtk::HandleBoxを再度取り付ける(reattach)場合、元の位置(面)のどこに取り外したGtk::HandleBoxを合わせると元に戻るのか、その面を指定します....。って意味わかります?(^^;)。positionには以下の定数を指定します。

更新日時:2003/05/26 22:52:17
キーワード:
参照:[gtk2-tut]