1# 2# tkextlib/bwidget/messagedlg.rb 3# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) 4# 5 6require 'tk' 7require 'tkextlib/bwidget.rb' 8require 'tkextlib/bwidget/dialog.rb' 9 10module Tk 11 module BWidget 12 class MessageDlg < TkWindow 13 end 14 end 15end 16 17class Tk::BWidget::MessageDlg 18 TkCommandNames = ['MessageDlg'.freeze].freeze 19 WidgetClassName = 'MessageDlg'.freeze 20 WidgetClassNames[WidgetClassName] ||= self 21 22 def initialize(parent=nil, keys=nil) 23 @relative = '' 24 if parent.kind_of?(Hash) 25 keys = _symbolkey2str(parent) 26 @relative = keys['parent'] if keys.key?('parent') 27 @relative = keys.delete('relative') if keys.key?('relative') 28 super(keys) 29 elsif keys 30 keys = _symbolkey2str(keys) 31 @relative = keys.delete('parent') if keys.key?('parent') 32 @relative = keys.delete('relative') if keys.key?('relative') 33 super(parent, keys) 34 else 35 super(parent) 36 end 37 end 38 39 def create_self(keys) 40 # NOT create widget. 41 # Because the widget no longer exist when returning from creation. 42 @keys = _symbolkey2str(keys).update('parent'=>@relative) 43 @info = nil 44 end 45 private :create_self 46 47 def __strval_optkeys 48 super() << 'message' << 'title' 49 end 50 private :__strval_optkeys 51 52 def __listval_optkeys 53 super() << 'buttons' 54 end 55 private :__listval_optkeys 56 57 def cget(slot) 58 slot = slot.to_s 59 if slot == 'relative' 60 slot = 'parent' 61 end 62 if winfo_exist? 63 val = super(slot) 64 @keys[slot] = val 65 end 66 @keys[slot] 67 end 68 def cget_strict(slot) 69 slot = slot.to_s 70 if slot == 'relative' 71 slot = 'parent' 72 end 73 if winfo_exist? 74 val = super(slot) 75 @keys[slot] = val 76 end 77 @keys[slot] 78 end 79 80 def configure(slot, value=None) 81 if winfo_exist? 82 super(slot, value) 83 end 84 if slot.kind_of?(Hash) 85 slot = _symbolkey2str(slot) 86 slot['parent'] = slot.delete('relative') if slot.key?('relative') 87 @keys.update(slot) 88 89 if @info 90 # update @info 91 slot.each{|k, v| 92 if TkComm::GET_CONFIGINFO_AS_ARRAY 93 if (inf = @info.assoc(k)) 94 inf[-1] = v 95 else 96 @info << [k, '', '', '', v] 97 end 98 else 99 if (inf = @info[k]) 100 inf[-1] = v 101 else 102 @info[k] = ['', '', '', v] 103 end 104 end 105 } 106 end 107 108 else # ! Hash 109 slot = slot.to_s 110 slot = 'parent' if slot == 'relative' 111 @keys[slot] = value 112 113 if @info 114 # update @info 115 if TkComm::GET_CONFIGINFO_AS_ARRAY 116 if (inf = @info.assoc(slot)) 117 inf[-1] = value 118 else 119 @info << [slot, '', '', '', value] 120 end 121 else 122 if (inf = @info[slot]) 123 inf[-1] = value 124 else 125 @info[slot] = ['', '', '', value] 126 end 127 end 128 end 129 end 130 131 self 132 end 133 134 def configinfo(slot=nil) 135 if winfo_exist? 136 @info = super() 137 if TkComm::GET_CONFIGINFO_AS_ARRAY 138 @info << ['relative', 'parent'] 139 else 140 @info['relative'] = 'parent' 141 end 142 end 143 144 if TkComm::GET_CONFIGINFO_AS_ARRAY 145 if @info 146 if winfo_exist? 147 # update @keys 148 @info.each{|inf| @keys[inf[0]] = inf[-1] if inf.size > 2 } 149 end 150 else 151 @info = [] 152 @keys.each{|k, v| 153 @info << [k, '', '', '', v] 154 } 155 @info << ['relative', 'parent'] 156 end 157 158 if slot 159 @info.asoc(slot.to_s).dup 160 else 161 @info.dup 162 end 163 164 else # ! TkComm::GET_CONFIGINFO_AS_ARRAY 165 if @info 166 if winfo_exist? 167 # update @keys 168 @info.each{|k, inf| @keys[k] = inf[-1] if inf.size > 2 } 169 end 170 else 171 @info = {} 172 @keys.each{|k, v| 173 @info[k] = ['', '', '', v] 174 } 175 @info['relative'] = 'parent' 176 end 177 178 if slot 179 @info[slot.to_s].dup 180 else 181 @info.dup 182 end 183 end 184 end 185 186 def create 187 # return the index of the pressed button, or nil if it is destroyed 188 ret = num_or_str(tk_call(self.class::TkCommandNames[0], 189 @path, *hash_kv(@keys))) 190 (ret < 0)? nil: ret 191 end 192end 193