ruby/ext/tk/sample/demos-jp/toolbar.rb
nagai 41b74c6e20 * ext/tk/extconf.rb: New strategy for searching Tcl/Tk libraries.
* ext/tk/*: Support new features of Tcl/Tk8.6b1 and minor bug fixes.
     ( [KNOWN BUG] Ruby/Tk on Ruby 1.9 will not work on Cygwin. )
* ext/tk/*: Unify sources between Ruby 1.8 & 1.9.
            Improve default_widget_set handling.
* ext/tk/*: Multi-TkInterpreter (multi-tk.rb) works on Ruby 1.8 & 1.9.
     ( [KNOWN BUG] On Ruby 1.8, join to a long term Thread on Tk
       callbacks may freeze. On Ruby 1.9, cannot create a second 
       master interpreter (creating slaves are OK); supported master
       interpreter is the default master interpreter only. )
* ext/tk/lib/tkextlib/*: Update supported versions of Tk extensions.
         Tcllib 1.8/Tklib 0.4.1  ==>  Tcllib 1.11.1/Tklib 0.5
         BWidgets 1.7            ==>  BWidgets 1.8
         TkTable 2.9             ==>  TkTable 2.10
         TkTreeCtrl 2005-12-02   ==>  TkTreeCtrl 2.2.9
         Tile 0.8.0/8.5.1        ==>  Tile 0.8.3/8.6b1
         IncrTcl 2005-02-14      ==>  IncrTcl 2008-12-15
         TclX 2005-02-07         ==>  TclX 2008-12-15
         Trofs 0.4.3             ==>  Trofs 0.4.4


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@24064 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-07-12 23:09:52 +00:00

136 lines
5.3 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- coding: euc-jp -*-
#
# toolbar.rb --
#
# This demonstration script creates a toolbar that can be torn off.
#
# based on "Id: toolbar.tcl,v 1.3 2007/12/13 15:27:07 dgp Exp"
if defined?($toolbar_demo) && $toolbar_demo
$toolbar_demo.destroy
$toolbar_demo = nil
end
$toolbar_demo = TkToplevel.new {|w|
title("Ttk Menu Buttons")
iconname("toolbar")
positionWindow(w)
}
base_frame = Ttk::Frame.new($toolbar_demo).pack(:fill=>:both, :expand=>true)
if Tk.windowingsystem != 'aqua'
msg = Ttk::Label.new(base_frame, :wraplength=>'4i', :text=><<EOL)
\
\
Tcl/Tk8.5\
'Toolbutton'使\
"toolbar style"\
\
\
\
\
\
\
EOL
else
msg = Ttk::Label.new(base_frame, :wraplength=>'4i', :text=><<EOL)
\
\
'Toolbutton'使\
"toolbar style"
EOL
end
## Set up the toolbar hull
tbar_base = Tk::Frame.new(base_frame, # Tk 標準の frame でなければなりません.
:widgetname=>'toolbar') # ウィンドウタイトル文字列とするために,ウィジェット名を明示しています.
sep = Ttk::Separator.new(base_frame)
to_base = Ttk::Frame.new(tbar_base, :cursor=>'fleur')
if Tk.windowingsystem != 'aqua'
to = Ttk::Separator.new(to_base, :orient=>:vertical)
to2 = Ttk::Separator.new(to_base, :orient=>:vertical)
to.pack(:fill=>:y, :expand=>true, :padx=>2, :side=>:left)
to2.pack(:fill=>:y, :expand=>true, :side=>:left)
end
contents = Ttk::Frame.new(tbar_base)
Tk.grid(to_base, contents, :sticky=>'nsew')
tbar_base.grid_columnconfigure(contents, :weight=>1)
contents.grid_columnconfigure(1000, :weight=>1)
if Tk.windowingsystem != 'aqua'
## Bindings so that the toolbar can be torn off and reattached
to_base.bind('B1-Motion', '%X %Y'){|x, y| tbar_base.tearoff(to_base, x, y)}
to. bind('B1-Motion', '%X %Y'){|x, y| tbar_base.tearoff(to_base, x, y)}
to2. bind('B1-Motion', '%X %Y'){|x, y| tbar_base.tearoff(to_base, x, y)}
def tbar_base.tearoff(w, x, y)
on_win = TkWinfo.containing(x, y)
return unless (on_win && on_win.path =~ /^#{@path}(\.|$)/)
self.grid_remove
w.grid_remove
self.wm_manage
# self.wm_title('Toolbar') # もしウィジェット名をウィンドウタイトルにしたくないなら,ここで設定してください
self.wm_protocol('WM_DELETE_WINDOW'){ self.untearoff(w) }
end
def tbar_base.untearoff(w)
self.wm_forget
w.grid
self.grid
end
end
## Some content for the rest of the toplevel
text = TkText.new(base_frame, :width=>40, :height=>10)
## Toolbar contents
tb_btn = Ttk::Button.new(tbar_base, :text=>'ボタン', :style=>'Toolbutton',
:command=>proc{
text.insert(:end, "ボタンが押されました.\n")
})
tb_chk = Ttk::Checkbutton.new(tbar_base, :text=>'チェックボタン',
:style=>'Toolbutton',
:variable=>(check = TkVariable.new),
:command=>proc{
text.insert(:end, "チェックボタンの値は#{check.value}です.\n")
})
tb_mbtn = Ttk::Menubutton.new(tbar_base, :text=>'メニュー')
tb_combo = Ttk::Combobox.new(tbar_base, :value=>TkFont.families,
:state=>:readonly)
tb_mbtn.menu(menu = Tk::Menu.new(tb_mbtn))
menu.add(:command, :label=>'Just', :command=>proc{text.insert(:end, "Just\n")})
menu.add(:command, :label=>'An', :command=>proc{text.insert(:end, "An\n")})
menu.add(:command, :label=>'Example',
:command=>proc{text.insert(:end, "Example\n")})
tb_combo.bind('<ComboboxSelected>'){ text.font.family = tb_combo.get }
## Arrange contents
Tk.grid(tb_btn, tb_chk, tb_mbtn, tb_combo,
:in=>contents, :padx=>2, :sticky=>'ns')
Tk.grid(tbar_base, :sticky=>'ew')
Tk.grid(sep, :sticky=>'ew')
Tk.grid(msg, :sticky=>'ew')
Tk.grid(text, :sticky=>'nsew')
base_frame.grid_rowconfigure(text, :weight=>1)
base_frame.grid_columnconfigure(text, :weight=>1)
## See Code / Dismiss buttons
Ttk::Frame.new(base_frame) {|frame|
sep = Ttk::Separator.new(frame)
Tk.grid(sep, :columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2)
TkGrid('x',
Ttk::Button.new(frame, :text=>'コード参照',
:image=>$image['view'], :compound=>:left,
:command=>proc{showCode 'toolbar'}),
Ttk::Button.new(frame, :text=>'閉じる',
:image=>$image['delete'], :compound=>:left,
:command=>proc{
$toolbar_demo.destroy
$toolbar_demo = nil
}),
:padx=>4, :pady=>4)
grid_columnconfigure(0, :weight=>1)
Tk.grid(frame, :sticky=>'ew')
}