1# 2# tkextlib/tcllib/getstring.rb 3# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) 4# 5# * Part of tcllib extension 6# * A dialog which consists of an Entry, OK, and Cancel buttons. 7# 8 9require 'tk' 10require 'tk/entry' 11require 'tkextlib/tcllib.rb' 12 13# TkPackage.require('getstring', '0.1') 14TkPackage.require('getstring') 15 16module Tk::Tcllib 17 class GetString_Dialog < TkWindow 18 PACKAGE_NAME = 'getstring'.freeze 19 def self.package_name 20 PACKAGE_NAME 21 end 22 23 def self.package_version 24 begin 25 TkPackage.require('getstring') 26 rescue 27 '' 28 end 29 end 30 end 31end 32 33 34class Tk::Tcllib::GetString_Dialog 35 TkCommandNames = ['::getstring::tk_getString'.freeze].freeze 36 WidgetClassName = 'TkSDialog'.freeze 37 WidgetClassNames[WidgetClassName] ||= self 38 39 def self.show(*args) 40 dialog = self.new(*args) 41 dialog.show 42 [dialog.status, dialog.value] 43 end 44 def self.display(*args) 45 self.show(*args) 46 end 47 48 def initialize(*args) # args = (parent=nil, text='', keys=nil) 49 keys = args.pop 50 if keys.kind_of?(Hash) 51 text = args.pop 52 @keys = _symbolkey2str(keys) 53 args.push(keys) 54 else 55 text = keys 56 @keys = {} 57 end 58 if text 59 @text = text.dup 60 else 61 @text = '' 62 end 63 64 @variable = TkVariable.new 65 @status = nil 66 67 super(*args) 68 end 69 70 def create_self(keys) 71 # dummy 72 end 73 private :create_self 74 75 def show 76 @variable.value = '' 77 @status = bool(tk_call(self.class::TkCommandNames[0], 78 @path, @variable, @text, *hash_kv(@keys))) 79 end 80 alias display show 81 82 def status 83 @status 84 end 85 86 def value 87 @variable.value 88 end 89 90 def cget_strict(slot) 91 slot = slot.to_s 92 if slot == 'text' 93 @text 94 else 95 @keys[slot] 96 end 97 end 98 def cget(slot) 99 cget_strict(slot) 100 end 101 102 def configure(slot, value=None) 103 if slot.kind_of?(Hash) 104 slot.each{|k, v| configure(k, v)} 105 else 106 slot = slot.to_s 107 value = _symbolkey2str(value) if value.kind_of?(Hash) 108 if value && value != None 109 if slot == 'text' 110 @text = value.to_s 111 else 112 @keys[slot] = value 113 end 114 else 115 if slot == 'text' 116 @text = '' 117 else 118 @keys.delete(slot) 119 end 120 end 121 end 122 self 123 end 124 125 def configinfo(slot = nil) 126 if slot 127 slot = slot.to_s 128 [ slot, nil, nil, nil, ( (slot == 'text')? @text: @keys[slot] ) ] 129 else 130 @keys.collect{|k, v| [ k, nil, nil, nil, v ] } \ 131 << [ 'text', nil, nil, nil, @text ] 132 end 133 end 134end 135