summaryrefslogtreecommitdiff
path: root/ruby_1_8_6/ext/tk/sample/tktextframe.rb
diff options
context:
space:
mode:
Diffstat (limited to 'ruby_1_8_6/ext/tk/sample/tktextframe.rb')
-rw-r--r--ruby_1_8_6/ext/tk/sample/tktextframe.rb162
1 files changed, 162 insertions, 0 deletions
diff --git a/ruby_1_8_6/ext/tk/sample/tktextframe.rb b/ruby_1_8_6/ext/tk/sample/tktextframe.rb
new file mode 100644
index 0000000000..bdab057d34
--- /dev/null
+++ b/ruby_1_8_6/ext/tk/sample/tktextframe.rb
@@ -0,0 +1,162 @@
+#
+# tktextframe.rb : a sample of TkComposite
+#
+# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
+#
+require 'tk'
+
+class TkTextFrame < TkText
+ include TkComposite
+
+ def initialize_composite(keys={})
+ keys = _symbolkey2str(keys)
+
+ # create scrollbars
+ @v_scroll = TkScrollbar.new(@frame, 'orient'=>'vertical')
+ @h_scroll = TkScrollbar.new(@frame, 'orient'=>'horizontal')
+
+ # create a text widget
+ @text = TkText.new(@frame, 'wrap'=>'none')
+
+ # set default receiver of method calls
+ @path = @text.path
+
+ # assign scrollbars
+ @text.xscrollbar(@h_scroll)
+ @text.yscrollbar(@v_scroll)
+
+ # allignment
+ TkGrid.rowconfigure(@frame, 0, 'weight'=>1, 'minsize'=>0)
+ TkGrid.columnconfigure(@frame, 0, 'weight'=>1, 'minsize'=>0)
+ @text.grid('row'=>0, 'column'=>0, 'sticky'=>'news')
+
+ # scrollbars ON
+ vscroll(keys.delete('vscroll'){true})
+ hscroll(keys.delete('hscroll'){true})
+
+ # set background of the text widget
+=begin
+ color = keys.delete('textbackground')
+ textbackground(color) if color
+=end
+ # please check the differences of the following definitions
+ option_methods(
+ [:scrollbarwidth, :get_scrollbarwidth],
+ [:textbackground, nil, :textbg_info],
+ :textborderwidth,
+ :textrelief
+ )
+
+ # set receiver widgets for configure methods (with alias)
+ delegate_alias('scrollbarrelief', 'relief', @h_scroll, @v_scroll)
+
+ # set receiver widgets for configure methods
+ delegate('DEFAULT', @text)
+ delegate('background', @frame, @h_scroll, @v_scroll)
+ delegate('activebackground', @h_scroll, @v_scroll)
+ delegate('troughcolor', @h_scroll, @v_scroll)
+ delegate('repeatdelay', @h_scroll, @v_scroll)
+ delegate('repeatinterval', @h_scroll, @v_scroll)
+ delegate('borderwidth', @frame)
+ delegate('relief', @frame)
+
+ # do configure
+ configure keys unless keys.empty?
+ end
+ private :initialize_composite
+
+ # set background color of text widget
+ def textbackground(color = nil)
+ if color
+ @text.background(color)
+ else
+ @text.background
+ end
+ end
+
+ def textbg_info
+ info = @text.configinfo(:background)
+ if TkComm::GET_CONFIGINFO_AS_ARRAY
+ info[0] = 'textbackground'
+ info
+ else # ! TkComm::GET_CONFIGINFO_AS_ARRAY
+ {'textbackground' => info['background']}
+ end
+ end
+
+ # get/set borderwidth of text widget
+ def set_textborderwidth(width)
+ @text.borderwidth(width)
+ end
+ def get_textborderwidth
+ @text.borderwidth
+ end
+ def textborderwidth(width = nil)
+ if width
+ set_textborderwidth(width)
+ else
+ get_textborderwidth
+ end
+ end
+
+ # set relief of text widget
+ def textrelief(type)
+ @text.relief(type)
+ end
+
+ # get/set width of scrollbar
+ def get_scrollbarwidth
+ @v_scroll.width
+ end
+ def set_scrollbarwidth(width)
+ @v_scroll.width(width)
+ @h_scroll.width(width)
+ end
+ alias :scrollbarwidth :set_scrollbarwidth
+
+ # vertical scrollbar : ON/OFF
+ def vscroll(mode)
+ st = TkGrid.info(@v_scroll)
+ if mode && st.size == 0 then
+ @v_scroll.grid('row'=>0, 'column'=>1, 'sticky'=>'ns')
+ elsif !mode && st.size != 0 then
+ @v_scroll.ungrid
+ end
+ self
+ end
+
+ # horizontal scrollbar : ON/OFF
+ def hscroll(mode, wrap_mode="char")
+ st = TkGrid.info(@h_scroll)
+ if mode && st.size == 0 then
+ @h_scroll.grid('row'=>1, 'column'=>0, 'sticky'=>'ew')
+ wrap 'none' # => self.wrap('none')
+ elsif !mode && st.size != 0 then
+ @h_scroll.ungrid
+ wrap wrap_mode # => self.wrap(wrap_mode)
+ end
+ self
+ end
+end
+
+
+################################################
+# test
+################################################
+if __FILE__ == $0
+ f = TkFrame.new.pack('fill'=>'x')
+ #t = TkTextFrame.new.pack
+ t = TkTextFrame.new(:textborderwidth=>3,
+ :textrelief=>:ridge,
+ :scrollbarrelief=>:ridge).pack
+ p t.configinfo
+ TkButton.new(f, 'text'=>'vscr OFF',
+ 'command'=>proc{t.vscroll(false)}).pack('side'=>'right')
+ TkButton.new(f, 'text'=>'vscr ON',
+ 'command'=>proc{t.vscroll(true)}).pack('side'=>'right')
+ TkButton.new(f, 'text'=>'hscr ON',
+ 'command'=>proc{t.hscroll(true)}).pack('side'=>'left')
+ TkButton.new(f, 'text'=>'hscr OFF',
+ 'command'=>proc{t.hscroll(false)}).pack('side'=>'left')
+ Tk.mainloop
+end