2003-07-31 16:52:40 -04:00
# ruler.rb
#
# This demonstration script creates a canvas widget that displays a ruler
# with tab stops that can be set, moved, and deleted.
#
# ruler widget demo (called by 'widget')
#
# rulerMkTab --
# This method creates a new triangular polygon in a canvas to
# represent a tab stop.
#
# Arguments:
2004-10-11 00:51:21 -04:00
# c - The canvas window.
# x, y - Coordinates at which to create the tab stop.
2003-07-31 16:52:40 -04:00
def rulerMkTab ( c , x , y )
v = $demo_rulerInfo
TkcPolygon . new ( c , x , y , x + v . size , y + v . size , x - v . size , y + v . size )
end
# toplevel widget
if defined? ( $ruler_demo ) && $ruler_demo
2009-03-05 22:56:38 -05:00
$ruler_demo . destroy
2003-07-31 16:52:40 -04:00
$ruler_demo = nil
end
# demo toplevel widget
$ruler_demo = TkToplevel . new { | w |
title ( " Ruler Demonstration " )
iconname ( " ruler " )
positionWindow ( w )
}
* ext/tk/tcltklib.c: SEGV when tcltk-stubs is enabled.
* ext/tk/tcltklib.c: avoid error on a shared object.
* ext/tk/extconf.rb: support --with-tcltkversion
* ext/tk/README.tcltklib: add document about --with-tcltkversion
* ext/tk/lib/tk.rb, ext/tk/lib/multi-tk.rb, ext/tk/lib/remote-tk.rb:
not work on $SAFE==4
* ext/tk/lib/multi-tk.rb: Object#methods returns Symbols on Ruby1.9.
* ext/tk/lib/tk/timer.rb: add TkTimer#at_end(proc) to register the
procedure which called at end of the timer.
* ext/tk/lib/tk.rb, ext/tk/lib/tk/itemfont.rb, ext/tk/lib/font.rb:
support __IGNORE_UNKNOWN_CONFIGURE_OPTION__ about font options.
* ext/tk/lib/*: treat __IGNORE_UNKNOWN_CONFIGURE_OPTION__
* ext/tk/lib/tkextlib/iwidgets/scrolledcanvas.rb,
ext/tk/lib/tkextlib/iwidgets/scrolledlistbox.rb,
ext/tk/lib/tkextlib/iwidgets/scrolledtext.rb: bug fix.
* ext/tk/lib/tk/text.rb: typo. call a wrong method.
* ext/tk/lib/tk/itemconfig.rb: ditto.
* ext/tk/lib/tk.rb, ext/tk/lib/tk/itemconfig.rb,
ext/tk/lib/tk/canvas.rb: support alias names of option keys.
* ext/tk/lib/tk/grid.rb: lack of module-method definitions.
* ext/tk/lib/tk/pack.rb, ext/tk/lib/tk/grid.rb: increase supported
parameter patterns of configure method.
* ext/tk/lib/tk.rb: add TkWindow#grid_anchor, grid_column, grid_row.
* ext/tk/lib/tk/wm.rb: methods of Tk::Wm_for_General module cannot
pass the given block to methods of Tk::Wm module.
* ext/tk/lib/tk/wm.rb: Wm#overrideredirect overwrites arguemnt to
an invalid value.
* ext/tk/lib/tk.rb: fix memory (object) leak bug.
* ext/tk/tcltklib.c, ext/tk/tkutil/tkutil.c: fix memory leak.
* ext/tk/sample/demos-jp/aniwave.rb, ext/tk/sample/demos-en/aniwave.rb:
bug fix.
* ext/tk/lib/tkextlib/blt/component.rb,
ext/tk/lib/tkextlib/tile/tentry.rb,
ext/tk/lib/tkextlib/tile/treeview.rb: ditto.
* ext/tk/lib/tkextlib/tile/tpaned.rb: improve TPaned#add.
* ext/tk/sample/demos-jp/widget, ext/tk/sample/demos-en/widget,
ext/tk/sample/demos-jp/style.rb, ext/tk/sample/demos-en/style.rb,
ext/tk/sample/demos-jp/bind.rb, ext/tk/sample/demos-en/bind.rb:
bug fix.
* ext/tk/sample/ttk_wrapper.rb: ditto.
* ext/tk/sample/ttk_wrapper.rb: support "if __FILE__ == $0" idiom.
* ext/tk/sample/tktextio.rb: add binding for 'Ctrl-u' at console mode.
* ext/tk/lib/tkextlib/tile.rb, ext/tk/lib/tkextlib/tile/style.rb,
ext/tk/sample/ttk_wrapper.rb: improve treating and control themes.
add Tk::Tile.themes and Tk::Tile.set_theme(theme).
* ext/tk/lib/tkextlib/tile.rb: lack of autoload definitions.
* ext/tk/lib/tkextlib/tile/tnotebook.rb: cannot use kanji (not UTF-8)
characters for headings.
* ext/tk/lib/tkextlib/tkDND/shape.rb: wrong package name.
* ext/tk/tkutil/tkutil.c: improve handling callback-subst-keys.
Now, support longnam-keys (e.g. '%CTT' on tkdnd-2.0; however, still
not support tkdnd-2.0 on tkextlib), and symbols of parameters (e.g.
:widget=>'%W', :keycode=>'%k', '%x'=>:x, '%X'=>:root_x, and so on;
those are attributes of event object). It means that Ruby/Tk accepts
not only "widget.bind(ev, '%W', '%k', ...){|w, k, ...| ... }", but
also "widget.bind(ev, :widget, :keycode, ...){|w, k, ...| ... }".
It is potentially incompatible, when user passes symbols to the
arguments of the callback block (the block receives the symbols as
strings). I think that is very rare case (probably, used by Ruby/Tk
experts only). When causes such trouble, please give strings instead
of such symbol parameters (e.g. call Symbol#to_s method).
* ext/tk/lib/tk/event.rb, ext/tk/lib/tk/validation.rb,
ext/tk/lib/tkextlib/blt/treeview.rb,
ext/tk/lib/tkextlib/winico/winico.rb: ditto.
* ext/tk/tkutil/tkutil.c: strings are available on subst_tables on
TkUtil::CallbackSubst class (it is useful on Ruby 1.9).
* ext/tk/lib/tk/spinbox.rb, ext/tk/lib/tkextlib/iwidgets/hierarchy.rb,
ext/tk/lib/tkextlib/iwidgets/spinner.rb,
ext/tk/lib/tkextlib/iwidgets/entryfield.rb,
ext/tk/lib/tkextlib/iwidgets/calendar.rb,
ext/tk/lib/tkextlib/blt/dragdrop.rb,
ext/tk/lib/tkextlib/tkDND/tkdnd.rb,
ext/tk/lib/tkextlib/treectrl/tktreectrl.rb,
ext/tk/lib/tkextlib/tktable/tktable.rb: disable code piece became
unnecessary by reason of the changes of ext/tk/tkutil/tkutil.c.
* ext/tk/lib/tk.rb, ext/tk/lib/multi-tk.rb: change strategy to define
the constant WITH_ENCODING.
* ext/tk/lib/tk.rb: fix bug on Tk::Encoding.tk_encoding_names.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@17083 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-06-10 16:59:10 -04:00
base_frame = TkFrame . new ( $ruler_demo ) . pack ( :fill = > :both , :expand = > true )
2003-07-31 16:52:40 -04:00
# label
2009-03-05 22:56:38 -05:00
TkLabel . new ( base_frame , 'font' = > $font , 'wraplength' = > '5i' , 'justify' = > 'left' ,
2004-10-11 00:51:21 -04:00
'text' = > " This canvas widget shows a mock-up of a ruler. You can create tab stops by dragging them out of the well to the right of the ruler. You can also drag existing tab stops. If you drag a tab stop far enough up or down so that it turns dim, it will be deleted when you release the mouse button. " ) {
2003-07-31 16:52:40 -04:00
pack ( 'side' = > 'top' )
}
# frame
* ext/tk/tcltklib.c: SEGV when tcltk-stubs is enabled.
* ext/tk/tcltklib.c: avoid error on a shared object.
* ext/tk/extconf.rb: support --with-tcltkversion
* ext/tk/README.tcltklib: add document about --with-tcltkversion
* ext/tk/lib/tk.rb, ext/tk/lib/multi-tk.rb, ext/tk/lib/remote-tk.rb:
not work on $SAFE==4
* ext/tk/lib/multi-tk.rb: Object#methods returns Symbols on Ruby1.9.
* ext/tk/lib/tk/timer.rb: add TkTimer#at_end(proc) to register the
procedure which called at end of the timer.
* ext/tk/lib/tk.rb, ext/tk/lib/tk/itemfont.rb, ext/tk/lib/font.rb:
support __IGNORE_UNKNOWN_CONFIGURE_OPTION__ about font options.
* ext/tk/lib/*: treat __IGNORE_UNKNOWN_CONFIGURE_OPTION__
* ext/tk/lib/tkextlib/iwidgets/scrolledcanvas.rb,
ext/tk/lib/tkextlib/iwidgets/scrolledlistbox.rb,
ext/tk/lib/tkextlib/iwidgets/scrolledtext.rb: bug fix.
* ext/tk/lib/tk/text.rb: typo. call a wrong method.
* ext/tk/lib/tk/itemconfig.rb: ditto.
* ext/tk/lib/tk.rb, ext/tk/lib/tk/itemconfig.rb,
ext/tk/lib/tk/canvas.rb: support alias names of option keys.
* ext/tk/lib/tk/grid.rb: lack of module-method definitions.
* ext/tk/lib/tk/pack.rb, ext/tk/lib/tk/grid.rb: increase supported
parameter patterns of configure method.
* ext/tk/lib/tk.rb: add TkWindow#grid_anchor, grid_column, grid_row.
* ext/tk/lib/tk/wm.rb: methods of Tk::Wm_for_General module cannot
pass the given block to methods of Tk::Wm module.
* ext/tk/lib/tk/wm.rb: Wm#overrideredirect overwrites arguemnt to
an invalid value.
* ext/tk/lib/tk.rb: fix memory (object) leak bug.
* ext/tk/tcltklib.c, ext/tk/tkutil/tkutil.c: fix memory leak.
* ext/tk/sample/demos-jp/aniwave.rb, ext/tk/sample/demos-en/aniwave.rb:
bug fix.
* ext/tk/lib/tkextlib/blt/component.rb,
ext/tk/lib/tkextlib/tile/tentry.rb,
ext/tk/lib/tkextlib/tile/treeview.rb: ditto.
* ext/tk/lib/tkextlib/tile/tpaned.rb: improve TPaned#add.
* ext/tk/sample/demos-jp/widget, ext/tk/sample/demos-en/widget,
ext/tk/sample/demos-jp/style.rb, ext/tk/sample/demos-en/style.rb,
ext/tk/sample/demos-jp/bind.rb, ext/tk/sample/demos-en/bind.rb:
bug fix.
* ext/tk/sample/ttk_wrapper.rb: ditto.
* ext/tk/sample/ttk_wrapper.rb: support "if __FILE__ == $0" idiom.
* ext/tk/sample/tktextio.rb: add binding for 'Ctrl-u' at console mode.
* ext/tk/lib/tkextlib/tile.rb, ext/tk/lib/tkextlib/tile/style.rb,
ext/tk/sample/ttk_wrapper.rb: improve treating and control themes.
add Tk::Tile.themes and Tk::Tile.set_theme(theme).
* ext/tk/lib/tkextlib/tile.rb: lack of autoload definitions.
* ext/tk/lib/tkextlib/tile/tnotebook.rb: cannot use kanji (not UTF-8)
characters for headings.
* ext/tk/lib/tkextlib/tkDND/shape.rb: wrong package name.
* ext/tk/tkutil/tkutil.c: improve handling callback-subst-keys.
Now, support longnam-keys (e.g. '%CTT' on tkdnd-2.0; however, still
not support tkdnd-2.0 on tkextlib), and symbols of parameters (e.g.
:widget=>'%W', :keycode=>'%k', '%x'=>:x, '%X'=>:root_x, and so on;
those are attributes of event object). It means that Ruby/Tk accepts
not only "widget.bind(ev, '%W', '%k', ...){|w, k, ...| ... }", but
also "widget.bind(ev, :widget, :keycode, ...){|w, k, ...| ... }".
It is potentially incompatible, when user passes symbols to the
arguments of the callback block (the block receives the symbols as
strings). I think that is very rare case (probably, used by Ruby/Tk
experts only). When causes such trouble, please give strings instead
of such symbol parameters (e.g. call Symbol#to_s method).
* ext/tk/lib/tk/event.rb, ext/tk/lib/tk/validation.rb,
ext/tk/lib/tkextlib/blt/treeview.rb,
ext/tk/lib/tkextlib/winico/winico.rb: ditto.
* ext/tk/tkutil/tkutil.c: strings are available on subst_tables on
TkUtil::CallbackSubst class (it is useful on Ruby 1.9).
* ext/tk/lib/tk/spinbox.rb, ext/tk/lib/tkextlib/iwidgets/hierarchy.rb,
ext/tk/lib/tkextlib/iwidgets/spinner.rb,
ext/tk/lib/tkextlib/iwidgets/entryfield.rb,
ext/tk/lib/tkextlib/iwidgets/calendar.rb,
ext/tk/lib/tkextlib/blt/dragdrop.rb,
ext/tk/lib/tkextlib/tkDND/tkdnd.rb,
ext/tk/lib/tkextlib/treectrl/tktreectrl.rb,
ext/tk/lib/tkextlib/tktable/tktable.rb: disable code piece became
unnecessary by reason of the changes of ext/tk/tkutil/tkutil.c.
* ext/tk/lib/tk.rb, ext/tk/lib/multi-tk.rb: change strategy to define
the constant WITH_ENCODING.
* ext/tk/lib/tk.rb: fix bug on Tk::Encoding.tk_encoding_names.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@17083 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-06-10 16:59:10 -04:00
$ruler_buttons = TkFrame . new ( base_frame ) { | frame |
2003-07-31 16:52:40 -04:00
TkButton . new ( frame ) {
text 'Dismiss'
command proc {
tmppath = $ruler_demo
$ruler_demo = nil
tmppath . destroy
}
} . pack ( 'side' = > 'left' , 'expand' = > 'yes' )
TkButton . new ( frame ) {
text 'Show Code'
command proc { showCode 'ruler' }
} . pack ( 'side' = > 'left' , 'expand' = > 'yes' )
}
$ruler_buttons . pack ( 'side' = > 'bottom' , 'fill' = > 'x' , 'pady' = > '2m' )
2009-03-05 22:56:38 -05:00
# canvas
* ext/tk/tcltklib.c: SEGV when tcltk-stubs is enabled.
* ext/tk/tcltklib.c: avoid error on a shared object.
* ext/tk/extconf.rb: support --with-tcltkversion
* ext/tk/README.tcltklib: add document about --with-tcltkversion
* ext/tk/lib/tk.rb, ext/tk/lib/multi-tk.rb, ext/tk/lib/remote-tk.rb:
not work on $SAFE==4
* ext/tk/lib/multi-tk.rb: Object#methods returns Symbols on Ruby1.9.
* ext/tk/lib/tk/timer.rb: add TkTimer#at_end(proc) to register the
procedure which called at end of the timer.
* ext/tk/lib/tk.rb, ext/tk/lib/tk/itemfont.rb, ext/tk/lib/font.rb:
support __IGNORE_UNKNOWN_CONFIGURE_OPTION__ about font options.
* ext/tk/lib/*: treat __IGNORE_UNKNOWN_CONFIGURE_OPTION__
* ext/tk/lib/tkextlib/iwidgets/scrolledcanvas.rb,
ext/tk/lib/tkextlib/iwidgets/scrolledlistbox.rb,
ext/tk/lib/tkextlib/iwidgets/scrolledtext.rb: bug fix.
* ext/tk/lib/tk/text.rb: typo. call a wrong method.
* ext/tk/lib/tk/itemconfig.rb: ditto.
* ext/tk/lib/tk.rb, ext/tk/lib/tk/itemconfig.rb,
ext/tk/lib/tk/canvas.rb: support alias names of option keys.
* ext/tk/lib/tk/grid.rb: lack of module-method definitions.
* ext/tk/lib/tk/pack.rb, ext/tk/lib/tk/grid.rb: increase supported
parameter patterns of configure method.
* ext/tk/lib/tk.rb: add TkWindow#grid_anchor, grid_column, grid_row.
* ext/tk/lib/tk/wm.rb: methods of Tk::Wm_for_General module cannot
pass the given block to methods of Tk::Wm module.
* ext/tk/lib/tk/wm.rb: Wm#overrideredirect overwrites arguemnt to
an invalid value.
* ext/tk/lib/tk.rb: fix memory (object) leak bug.
* ext/tk/tcltklib.c, ext/tk/tkutil/tkutil.c: fix memory leak.
* ext/tk/sample/demos-jp/aniwave.rb, ext/tk/sample/demos-en/aniwave.rb:
bug fix.
* ext/tk/lib/tkextlib/blt/component.rb,
ext/tk/lib/tkextlib/tile/tentry.rb,
ext/tk/lib/tkextlib/tile/treeview.rb: ditto.
* ext/tk/lib/tkextlib/tile/tpaned.rb: improve TPaned#add.
* ext/tk/sample/demos-jp/widget, ext/tk/sample/demos-en/widget,
ext/tk/sample/demos-jp/style.rb, ext/tk/sample/demos-en/style.rb,
ext/tk/sample/demos-jp/bind.rb, ext/tk/sample/demos-en/bind.rb:
bug fix.
* ext/tk/sample/ttk_wrapper.rb: ditto.
* ext/tk/sample/ttk_wrapper.rb: support "if __FILE__ == $0" idiom.
* ext/tk/sample/tktextio.rb: add binding for 'Ctrl-u' at console mode.
* ext/tk/lib/tkextlib/tile.rb, ext/tk/lib/tkextlib/tile/style.rb,
ext/tk/sample/ttk_wrapper.rb: improve treating and control themes.
add Tk::Tile.themes and Tk::Tile.set_theme(theme).
* ext/tk/lib/tkextlib/tile.rb: lack of autoload definitions.
* ext/tk/lib/tkextlib/tile/tnotebook.rb: cannot use kanji (not UTF-8)
characters for headings.
* ext/tk/lib/tkextlib/tkDND/shape.rb: wrong package name.
* ext/tk/tkutil/tkutil.c: improve handling callback-subst-keys.
Now, support longnam-keys (e.g. '%CTT' on tkdnd-2.0; however, still
not support tkdnd-2.0 on tkextlib), and symbols of parameters (e.g.
:widget=>'%W', :keycode=>'%k', '%x'=>:x, '%X'=>:root_x, and so on;
those are attributes of event object). It means that Ruby/Tk accepts
not only "widget.bind(ev, '%W', '%k', ...){|w, k, ...| ... }", but
also "widget.bind(ev, :widget, :keycode, ...){|w, k, ...| ... }".
It is potentially incompatible, when user passes symbols to the
arguments of the callback block (the block receives the symbols as
strings). I think that is very rare case (probably, used by Ruby/Tk
experts only). When causes such trouble, please give strings instead
of such symbol parameters (e.g. call Symbol#to_s method).
* ext/tk/lib/tk/event.rb, ext/tk/lib/tk/validation.rb,
ext/tk/lib/tkextlib/blt/treeview.rb,
ext/tk/lib/tkextlib/winico/winico.rb: ditto.
* ext/tk/tkutil/tkutil.c: strings are available on subst_tables on
TkUtil::CallbackSubst class (it is useful on Ruby 1.9).
* ext/tk/lib/tk/spinbox.rb, ext/tk/lib/tkextlib/iwidgets/hierarchy.rb,
ext/tk/lib/tkextlib/iwidgets/spinner.rb,
ext/tk/lib/tkextlib/iwidgets/entryfield.rb,
ext/tk/lib/tkextlib/iwidgets/calendar.rb,
ext/tk/lib/tkextlib/blt/dragdrop.rb,
ext/tk/lib/tkextlib/tkDND/tkdnd.rb,
ext/tk/lib/tkextlib/treectrl/tktreectrl.rb,
ext/tk/lib/tkextlib/tktable/tktable.rb: disable code piece became
unnecessary by reason of the changes of ext/tk/tkutil/tkutil.c.
* ext/tk/lib/tk.rb, ext/tk/lib/multi-tk.rb: change strategy to define
the constant WITH_ENCODING.
* ext/tk/lib/tk.rb: fix bug on Tk::Encoding.tk_encoding_names.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@17083 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-06-10 16:59:10 -04:00
$ruler_canvas = TkCanvas . new ( base_frame , 'width' = > '14.8c' , 'height' = > '2.5c' )
2003-07-31 16:52:40 -04:00
$ruler_canvas . pack ( 'side' = > 'top' , 'fill' = > 'x' )
2009-03-05 22:56:38 -05:00
#
2003-07-31 16:52:40 -04:00
unless Struct . const_defined? ( " RulerInfo " )
2009-03-05 22:56:38 -05:00
$demo_rulerInfo = Struct . new ( " RulerInfo " , :grid , :left , :right , :x , :y ,
:top , :bottom , :size , :normalStyle ,
2004-10-11 00:51:21 -04:00
:activeStyle , :deleteStyle ) . new
2003-07-31 16:52:40 -04:00
end
$demo_rulerInfo . grid = '.25c'
$demo_rulerInfo . left = TkWinfo . fpixels ( $ruler_canvas , '1c' )
$demo_rulerInfo . right = TkWinfo . fpixels ( $ruler_canvas , '13c' )
$demo_rulerInfo . top = TkWinfo . fpixels ( $ruler_canvas , '1c' )
$demo_rulerInfo . bottom = TkWinfo . fpixels ( $ruler_canvas , '1.5c' )
$demo_rulerInfo . size = TkWinfo . fpixels ( $ruler_canvas , '.2c' )
$demo_rulerInfo . normalStyle = { 'fill' = > 'black' }
if TkWinfo . depth ( $ruler_canvas ) > 1
$demo_rulerInfo . activeStyle = { 'fill' = > 'red' , 'stipple' = > '' }
2009-03-05 22:56:38 -05:00
$demo_rulerInfo . deleteStyle = { 'fill' = > 'red' ,
'stipple' = > '@' + [ $demo_dir , '..' ,
2004-05-01 12:09:54 -04:00
'images' , 'gray25.xbm' ] . join ( File :: Separator ) }
2003-07-31 16:52:40 -04:00
else
$demo_rulerInfo . activeStyle = { 'fill' = > 'black' , 'stipple' = > '' }
2009-03-05 22:56:38 -05:00
$demo_rulerInfo . deleteStyle = { 'fill' = > 'black' ,
'stipple' = > '@' + [ $demo_dir , '..' ,
2004-05-01 12:09:54 -04:00
'images' , 'gray25.xbm' ] . join ( File :: Separator ) }
2003-07-31 16:52:40 -04:00
end
2009-03-05 22:56:38 -05:00
TkcLine . new ( $ruler_canvas ,
2004-10-11 00:51:21 -04:00
'1c' , '0.5c' , '1c' , '1c' , '13c' , '1c' , '13c' , '0.5c' , 'width' = > 1 )
2003-07-31 16:52:40 -04:00
( 0 .. 11 ) . each { | i |
x = i + 1
TkcLine . new ( $ruler_canvas , " #{ x } c " , '1c' , " #{ x } c " , '0.6c' , 'width' = > 1 )
TkcLine . new ( $ruler_canvas , " #{ x } .25c " , '1c' , " #{ x } .25c " , '0.8c' , 'width' = > 1 )
TkcLine . new ( $ruler_canvas , " #{ x } .5c " , '1c' , " #{ x } .5c " , '0.7c' , 'width' = > 1 )
TkcLine . new ( $ruler_canvas , " #{ x } .75c " , '1c' , " #{ x } .75c " , '0.8c' , 'width' = > 1 )
TkcText . new ( $ruler_canvas , " #{ x } .15c " , '0.75c' , 'text' = > i , 'anchor' = > 'sw' )
}
$rulerTag_well = TkcTag . new ( $ruler_canvas )
$ruler_canvas \
. addtag_withtag ( $rulerTag_well ,
2009-03-05 22:56:38 -05:00
TkcRectangle . new ( $ruler_canvas ,
'13.2c' , '1c' , '13.8c' , '0.5c' ,
'outline' = > 'black' ,
2004-10-11 00:51:21 -04:00
'fill' = > ( $ruler_canvas \
. configinfo ( 'background' ) ) [ 4 ] ) )
2003-07-31 16:52:40 -04:00
$ruler_canvas \
. addtag_withtag ( $rulerTag_well ,
2009-03-05 22:56:38 -05:00
rulerMkTab ( $ruler_canvas ,
TkWinfo . pixels ( $ruler_canvas , '13.5c' ) ,
2004-10-11 00:51:21 -04:00
TkWinfo . pixels ( $ruler_canvas , '.65c' ) ) )
2003-07-31 16:52:40 -04:00
$rulerTag_well . bind ( '1' , proc { | x , y | rulerNewTab ( $ruler_canvas , x , y ) } , '%x %y' )
2009-03-05 22:56:38 -05:00
$ruler_canvas . itembind ( 'tab' , '1' ,
2004-10-11 00:51:21 -04:00
proc { | x , y | rulerSelectTab ( $ruler_canvas , x , y ) } , '%x %y' )
2009-03-05 22:56:38 -05:00
$ruler_canvas . bind ( 'B1-Motion' ,
2004-10-11 00:51:21 -04:00
proc { | x , y | rulerMoveTab ( $ruler_canvas , x , y ) } , '%x %y' )
2003-07-31 16:52:40 -04:00
$ruler_canvas . bind ( 'Any-ButtonRelease-1' , proc { rulerReleaseTab ( $ruler_canvas ) } )
# rulerNewTab --
# Does all the work of creating a tab stop, including creating the
# triangle object and adding tags to it to give it tab behavior.
#
# Arguments:
2004-10-11 00:51:21 -04:00
# c - The canvas window.
# x, y - The coordinates of the tab stop.
2003-07-31 16:52:40 -04:00
def rulerNewTab ( c , x , y )
v = $demo_rulerInfo
c . addtag_withtag ( 'active' , rulerMkTab ( c , x , y ) )
c . addtag_withtag ( 'tab' , 'active' )
v . x = x
v . y = y
rulerMoveTab ( c , x , y )
end
# rulerSelectTab --
# This method is invoked when mouse button 1 is pressed over
# a tab. It remembers information about the tab so that it can
# be dragged interactively.
#
# Arguments:
2004-10-11 00:51:21 -04:00
# c - The canvas widget.
# x, y - The coordinates of the mouse (identifies the point by
# which the tab was picked up for dragging).
2003-07-31 16:52:40 -04:00
def rulerSelectTab ( c , x , y )
v = $demo_rulerInfo
v . x = c . canvasx ( x , v . grid )
v . y = v . top + 2
c . addtag_withtag ( 'active' , 'current' )
c . itemconfigure ( 'active' , v . activeStyle )
c . raise ( 'active' )
end
# rulerMoveTab --
# This method is invoked during mouse motion events to drag a tab.
# It adjusts the position of the tab, and changes its appearance if
# it is about to be dragged out of the ruler.
#
# Arguments:
2004-10-11 00:51:21 -04:00
# c - The canvas widget.
# x, y - The coordinates of the mouse.
2003-07-31 16:52:40 -04:00
def rulerMoveTab ( c , x , y )
v = $demo_rulerInfo
return if c . find_withtag ( 'active' ) == [ ]
cx = c . canvasx ( x , v . grid )
cy = c . canvasy ( y )
cx = v . left if cx < v . left
cx = v . right if cx > v . right
if ( cy > = v . top && cy < = v . bottom )
cy = v . top + 2
c . itemconfigure ( 'active' , v . activeStyle )
else
cy = cy - v . size - 2
c . itemconfigure ( 'active' , v . deleteStyle )
end
c . move ( 'active' , cx - v . x , cy - v . y )
v . x = cx
v . y = cy
end
# rulerReleaseTab --
# This method is invoked during button release events that end
# a tab drag operation. It deselects the tab and deletes the tab if
# it was dragged out of the ruler.
#
# Arguments:
2004-10-11 00:51:21 -04:00
# c - The canvas widget.
# x, y - The coordinates of the mouse.
2003-07-31 16:52:40 -04:00
def rulerReleaseTab ( c )
v = $demo_rulerInfo
return if c . find_withtag ( 'active' ) == [ ]
if v . y != v . top + 2
c . delete ( 'active' )
else
c . itemconfigure ( 'active' , v . normalStyle )
c . dtag ( 'active' )
end
end