1#
2#   tk/winpkg.rb : methods for Tcl/Tk packages for Microsoft Windows
3#                     2000/11/22 by Hidetoshi Nagai <nagai@ai.kyutech.ac.jp>
4#
5#     ATTENTION !!
6#         This is NOT TESTED. Because I have no test-environment.
7#
8require 'tk'
9
10module Tk::WinDDE
11end
12#TkWinDDE = Tk::WinDDE
13#Tk.__set_toplevel_aliases__(:Tk, Tk::WinDDE, :TkWinDDE)
14Tk.__set_loaded_toplevel_aliases__('tk/winpkg.rb', :Tk, Tk::WinDDE, :TkWinDDE)
15
16module Tk::WinDDE
17  extend Tk
18  extend Tk::WinDDE
19
20  TkCommandNames = ['dde'.freeze].freeze
21
22  PACKAGE_NAME = 'dde'.freeze
23  def self.package_name
24    PACKAGE_NAME
25  end
26
27  if self.const_defined? :FORCE_VERSION
28    tk_call_without_enc('package', 'require', 'dde', FORCE_VERSION)
29  else
30    tk_call_without_enc('package', 'require', 'dde')
31  end
32
33  #def servername(topic=None)
34  #  tk_call('dde', 'servername', topic)
35  #end
36  def servername(*args)
37    if args.size == 0
38      tk_call('dde', 'servername')
39    else
40      if args[-1].kind_of?(Hash)  # dde 1.2 +
41        keys = _symbolkey2str(args.pop)
42        force = (keys.delete('force'))? '-force': None
43        exact = (keys.delete('exact'))? '-exact': None
44        if keys.size == 0
45          tk_call('dde', 'servername', force, exact)
46        elsif args.size == 0
47          tk_call('dde', 'servername', force, exact, *hash_kv(keys))
48        else
49          tk_call('dde', 'servername', force, exact,
50                  *((hash_kv(keys) << '--') + args))
51        end
52      else
53        tk_call('dde', 'servername', *args)
54      end
55    end
56  end
57
58  def execute(service, topic, data)
59    tk_call('dde', 'execute', service, topic, data)
60  end
61
62  def async_execute(service, topic, data)
63    tk_call('dde', '-async', 'execute', service, topic, data)
64  end
65
66  def poke(service, topic, item, data)
67    tk_call('dde', 'poke', service, topic, item, data)
68  end
69
70  def request(service, topic, item)
71    tk_call('dde', 'request', service, topic, item)
72  end
73
74  def binary_request(service, topic, item)
75    tk_call('dde', 'request', '-binary', service, topic, item)
76  end
77
78  def services(service, topic)
79    tk_call('dde', 'services', service, topic)
80  end
81
82  def eval(topic, cmd, *args)
83    tk_call('dde', 'eval', topic, cmd, *args)
84  end
85
86  def async_eval(topic, cmd, *args)
87    tk_call('dde', 'eval', -async, topic, cmd, *args)
88  end
89
90  module_function :servername, :execute, :async_execute,
91                  :poke, :request, :services, :eval
92end
93
94module Tk::WinRegistry
95end
96#TkWinRegistry = Tk::WinRegistry
97#Tk.__set_toplevel_aliases__(:Tk, Tk::WinRegistry, :TkWinRegistry)
98Tk.__set_loaded_toplevel_aliases__('tk/winpkg.rb', :Tk, Tk::WinRegistry,
99                                   :TkWinRegistry)
100
101module Tk::WinRegistry
102  extend Tk
103  extend Tk::WinRegistry
104
105  TkCommandNames = ['registry'.freeze].freeze
106
107  if self.const_defined? :FORCE_VERSION
108    tk_call('package', 'require', 'registry', FORCE_VERSION)
109  else
110    tk_call('package', 'require', 'registry')
111  end
112
113  def broadcast(keynam, timeout=nil)
114    if timeout
115      tk_call('registry', 'broadcast', keynam, '-timeout', timeout)
116    else
117      tk_call('registry', 'broadcast', keynam)
118    end
119  end
120
121  def delete(keynam, valnam=None)
122    tk_call('registry', 'delete', keynam, valnam)
123  end
124
125  def get(keynam, valnam)
126    tk_call('registry', 'get', keynam, valnam)
127  end
128
129  def keys(keynam, pattern=nil)
130    lst = tk_split_simplelist(tk_call('registry', 'keys', keynam))
131    if pattern
132      lst.find_all{|key| key =~ pattern}
133    else
134      lst
135    end
136  end
137
138  def set(keynam, valnam=None, data=None, dattype=None)
139    tk_call('registry', 'set', keynam, valnam, data, dattype)
140  end
141
142  def type(keynam, valnam)
143    tk_call('registry', 'type', keynam, valnam)
144  end
145
146  def values(keynam, pattern=nil)
147    lst = tk_split_simplelist(tk_call('registry', 'values', keynam))
148    if pattern
149      lst.find_all{|val| val =~ pattern}
150    else
151      lst
152    end
153  end
154
155  module_function :delete, :get, :keys, :set, :type, :values
156end
157