1# 2# tkextlib/tcllib/swaplist.rb 3# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) 4# 5# * Part of tcllib extension 6# * A dialog which allows a user to move options between two lists 7# 8 9require 'tk' 10require 'tkextlib/tcllib.rb' 11 12# TkPackage.require('swaplist', '0.1') 13TkPackage.require('swaplist') 14 15module Tk::Tcllib 16 class Swaplist_Dialog < TkWindow 17 PACKAGE_NAME = 'swaplist'.freeze 18 def self.package_name 19 PACKAGE_NAME 20 end 21 22 def self.package_version 23 begin 24 TkPackage.require('swaplist') 25 rescue 26 '' 27 end 28 end 29 end 30end 31 32 33class Tk::Tcllib::Swaplist_Dialog 34 TkCommandNames = ['::swaplist::swaplist'.freeze].freeze 35 WidgetClassName = 'Swaplist'.freeze 36 WidgetClassNames[WidgetClassName] ||= self 37 38 def self.show(*args) 39 dialog = self.new(*args) 40 dialog.show 41 [dialog.status, dialog.value] 42 end 43 def self.display(*args) 44 self.show(*args) 45 end 46 47 def initialize(*args) 48 # args = (parent=nil, complete_list=[], selected_list=[], keys=nil) 49 keys = args.pop 50 if keys.kind_of?(Hash) 51 @selected_list = args.pop 52 @complete_list = args.pop 53 @keys = _symbolkey2str(keys) 54 args.push(keys) 55 else 56 @selected_list = keys 57 @complete_list = args.pop 58 @keys = {} 59 end 60 61 @selected_list = [] unless @selected_list 62 @complete_list = [] unless @complete_list 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, 79 @complete_list, @selected_list, 80 *hash_kv(@keys))) 81 end 82 alias display show 83 84 def status 85 @status 86 end 87 88 def value 89 @variable.list 90 end 91 alias selected value 92 93 def cget_strict(slot) 94 slot = slot.to_s 95 if slot == 'complete_list' 96 @complete_list 97 elsif slot == 'selected_list' 98 @selected_list 99 else 100 @keys[slot] 101 end 102 end 103 def cget(slot) 104 cget_strict(slot) 105 end 106 107 def configure(slot, value=None) 108 if slot.kind_of?(Hash) 109 slot.each{|k, v| configure(k, v)} 110 else 111 slot = slot.to_s 112 value = _symbolkey2str(value) if value.kind_of?(Hash) 113 if value && value != None 114 if slot == 'complete_list' 115 @complete_list = value 116 elsif slot == 'selected_list' 117 @selected_list = value 118 else 119 @keys[slot] = value 120 end 121 else 122 if slot == 'complete_list' 123 @complete_list = [] 124 elsif slot == 'selected_list' 125 @selected_list = [] 126 else 127 @keys.delete(slot) 128 end 129 end 130 end 131 self 132 end 133 134 def configinfo(slot = nil) 135 if slot 136 slot = slot.to_s 137 if slot == 'complete_list' 138 [ slot, nil, nil, nil, @complete_list ] 139 elsif slot == 'selected_list' 140 [ slot, nil, nil, nil, @selected_list ] 141 else 142 [ slot, nil, nil, nil, @keys[slot] ] 143 end 144 else 145 @keys.collect{|k, v| [ k, nil, nil, nil, v ] } \ 146 << [ 'complete_list', nil, nil, nil, @complete_list ] \ 147 << [ 'selected_list', nil, nil, nil, @selected_list ] 148 end 149 end 150end 151