aboutsummaryrefslogtreecommitdiffstats
path: root/ext/tk/lib/tkextlib/tcllib/autoscroll.rb
diff options
context:
space:
mode:
authornagai <nagai@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-07-01 09:38:48 +0000
committernagai <nagai@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-07-01 09:38:48 +0000
commitffcedd79505ea2e99f859c7cea2fb2221c948d4c (patch)
tree02232516faf0e1959ecb5d5b7aca25a52f9f87ca /ext/tk/lib/tkextlib/tcllib/autoscroll.rb
parent73cf1d02bac2dbdd5d7f673a33d81444a00c865e (diff)
downloadruby-ffcedd79505ea2e99f859c7cea2fb2221c948d4c.tar.gz
* ext/tk/lib/tcltklib : bug fix
* ext/tk/lib/tk : bug fix and add Tcl/Tk extension support libraries git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6559 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/tk/lib/tkextlib/tcllib/autoscroll.rb')
-rw-r--r--ext/tk/lib/tkextlib/tcllib/autoscroll.rb100
1 files changed, 100 insertions, 0 deletions
diff --git a/ext/tk/lib/tkextlib/tcllib/autoscroll.rb b/ext/tk/lib/tkextlib/tcllib/autoscroll.rb
new file mode 100644
index 0000000000..9c161d7ec9
--- /dev/null
+++ b/ext/tk/lib/tkextlib/tcllib/autoscroll.rb
@@ -0,0 +1,100 @@
+#
+# tkextlib/tcllib/autoscroll.rb
+# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
+#
+# * Part of tcllib extension
+# * Provides for a scrollbar to automatically mapped and unmapped as needed
+#
+# (The following is the original description of the library.)
+#
+# This package allows scrollbars to be mapped and unmapped as needed
+# depending on the size and content of the scrollbars scrolled widget.
+# The scrollbar must be managed by either pack or grid, other geometry
+# managers are not supported.
+#
+# When managed by pack, any geometry changes made in the scrollbars parent
+# between the time a scrollbar is unmapped, and when it is mapped will be
+# lost. It is an error to destroy any of the scrollbars siblings while the
+# scrollbar is unmapped. When managed by grid, if anything becomes gridded
+# in the same row and column the scrollbar occupied it will be replaced by
+# the scrollbar when remapped.
+#
+# This package may be used on any scrollbar-like widget as long as it
+# supports the set subcommand in the same style as scrollbar. If the set
+# subcommand is not used then this package will have no effect.
+#
+
+require 'tk'
+require 'tk/scrollbar'
+
+# call setup script for general 'tkextlib' libraries
+require 'tkextlib/setup.rb'
+
+# call setup script
+require File.join(File.dirname(File.expand_path(__FILE__)), 'setup.rb')
+
+# TkPackage.require('autoscroll', '1.0')
+TkPackage.require('autoscroll')
+
+module Tk
+ module Scrollable
+ def autoscroll(mode = nil)
+ case mode
+ when :x, 'x'
+ if @xscrollbar
+ tk_send_without_enc('::autoscroll::autoscroll', @xscrollbar)
+ end
+ when :y, 'y'
+ if @yscrollbar
+ tk_send_without_enc('::autoscroll::autoscroll', @yscrollbar)
+ end
+ when nil, :both, 'both'
+ if @xscrollbar
+ tk_send_without_enc('::autoscroll::autoscroll', @xscrollbar)
+ end
+ if @yscrollbar
+ tk_send_without_enc('::autoscroll::autoscroll', @yscrollbar)
+ end
+ else
+ fail ArgumentError, "'x', 'y' or 'both' (String or Symbol) is expected"
+ end
+ self
+ end
+ def unautoscroll(mode = nil)
+ case mode
+ when :x, 'x'
+ if @xscrollbar
+ tk_send_without_enc('::autoscroll::unautoscroll', @xscrollbar)
+ end
+ when :y, 'y'
+ if @yscrollbar
+ tk_send_without_enc('::autoscroll::unautoscroll', @yscrollbar)
+ end
+ when nil, :both, 'both'
+ if @xscrollbar
+ tk_send_without_enc('::autoscroll::unautoscroll', @xscrollbar)
+ end
+ if @yscrollbar
+ tk_send_without_enc('::autoscroll::unautoscroll', @yscrollbar)
+ end
+ else
+ fail ArgumentError, "'x', 'y' or 'both' (String or Symbol) is expected"
+ end
+ self
+ end
+ end
+end
+
+class TkScrollbar
+ def autoscroll
+ # Arranges for the already existing scrollbar to be mapped
+ # and unmapped as needed.
+ tk_send_without_enc('::autoscroll::autoscroll', @path)
+ self
+ end
+ def unautoscroll
+ # Returns the scrollbar to its original static state.
+ tk_send_without_enc('::autoscroll::unautoscroll', @path)
+ self
+ end
+end