exerb 6.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +8 -0
  3. data/ChangeLog.ja.rd +305 -0
  4. data/README.en.txt +12 -0
  5. data/README.ja.html +143 -0
  6. data/README.ja.txt +6 -0
  7. data/README.md +50 -0
  8. data/Rakefile +205 -0
  9. data/bin/exerb +185 -0
  10. data/bin/mkexy +47 -0
  11. data/doc/LGPL +513 -0
  12. data/doc/class.ja.html +92 -0
  13. data/doc/command.ja.html +109 -0
  14. data/doc/core.ja.html +72 -0
  15. data/doc/example.ja.html +89 -0
  16. data/doc/faq.ja.html +59 -0
  17. data/doc/inside.ja.rd +404 -0
  18. data/doc/license.ja.html +62 -0
  19. data/doc/logo.gif +0 -0
  20. data/doc/misc.ja.html +72 -0
  21. data/doc/navi.gif +0 -0
  22. data/doc/recipe.ja.html +317 -0
  23. data/doc/style.css +187 -0
  24. data/doc/tutorial.ja.html +182 -0
  25. data/example/Makefile +54 -0
  26. data/example/cat_n.rb +14 -0
  27. data/example/exception.rb +9 -0
  28. data/example/ext/Win32API.so +0 -0
  29. data/example/ext/swin.so +0 -0
  30. data/example/msgbox.rb +14 -0
  31. data/example/rubytk.rb +22 -0
  32. data/example/runtime.ico +0 -0
  33. data/example/runtime.rb +19 -0
  34. data/example/vr/clipboard.rb +106 -0
  35. data/example/vr/compat/rubycompat.rb +18 -0
  36. data/example/vr/compat/vrcomctl.rb +12 -0
  37. data/example/vr/compat/vrcontrol.rb +50 -0
  38. data/example/vr/compat/vrmmedia.rb +24 -0
  39. data/example/vr/contrib/inifile.rb +116 -0
  40. data/example/vr/contrib/msgboxconst.rb +55 -0
  41. data/example/vr/contrib/toolbar.rb +371 -0
  42. data/example/vr/contrib/vrctlcolor.rb +110 -0
  43. data/example/vr/contrib/vrhotkey.rb +35 -0
  44. data/example/vr/contrib/vrlistviewex.rb +71 -0
  45. data/example/vr/contrib/vrstdscrollbar.rb +414 -0
  46. data/example/vr/contrib/vrwincomponent.rb +54 -0
  47. data/example/vr/dragdropformat.rb +209 -0
  48. data/example/vr/rscutil.rb +168 -0
  49. data/example/vr/sysmod.rb +249 -0
  50. data/example/vr/vractivex.rb +56 -0
  51. data/example/vr/vrclipboard.rb +53 -0
  52. data/example/vr/vrcomctl.rb +1819 -0
  53. data/example/vr/vrcontrol.rb +1374 -0
  54. data/example/vr/vrdde.rb +623 -0
  55. data/example/vr/vrddrop.rb +190 -0
  56. data/example/vr/vrdialog.rb +406 -0
  57. data/example/vr/vrhandler.rb +195 -0
  58. data/example/vr/vrlayout.old.rb +209 -0
  59. data/example/vr/vrlayout.rb +173 -0
  60. data/example/vr/vrlayout2.rb +340 -0
  61. data/example/vr/vrmargin.rb +141 -0
  62. data/example/vr/vrmgdlayout.rb +381 -0
  63. data/example/vr/vrmmedia.rb +287 -0
  64. data/example/vr/vrolednd.rb +192 -0
  65. data/example/vr/vrowndraw.rb +108 -0
  66. data/example/vr/vrrichedit.rb +366 -0
  67. data/example/vr/vrtimer.rb +148 -0
  68. data/example/vr/vrtooltip.rb +273 -0
  69. data/example/vr/vrtray.rb +143 -0
  70. data/example/vr/vrtvitem.rb +118 -0
  71. data/example/vr/vrtwopane.rb +223 -0
  72. data/example/vr/vruby.rb +1051 -0
  73. data/example/vr/winconst.rb +158 -0
  74. data/example/vruby.rb +38 -0
  75. data/exerb.gemspec +26 -0
  76. data/extconf.rb +7 -0
  77. data/lib/exerb/archive.rb +143 -0
  78. data/lib/exerb/config.rb +51 -0
  79. data/lib/exerb/error.rb +15 -0
  80. data/lib/exerb/executable.rb +68 -0
  81. data/lib/exerb/file_table.rb +189 -0
  82. data/lib/exerb/mkexy.rb +81 -0
  83. data/lib/exerb/name_table.rb +120 -0
  84. data/lib/exerb/recipe.rb +465 -0
  85. data/lib/exerb/resource.rb +190 -0
  86. data/lib/exerb/resource/base.rb +29 -0
  87. data/lib/exerb/resource/binary.rb +31 -0
  88. data/lib/exerb/resource/dialog.rb +30 -0
  89. data/lib/exerb/resource/group_icon.rb +85 -0
  90. data/lib/exerb/resource/icon.rb +52 -0
  91. data/lib/exerb/resource/version_info.rb +155 -0
  92. data/lib/exerb/resource_library.rb +120 -0
  93. data/lib/exerb/utility.rb +95 -0
  94. data/lib/exerb/utility2.rb +122 -0
  95. data/lib/exerb/version.rb +13 -0
  96. data/lib/exerb/win32/const/resource.rb +51 -0
  97. data/lib/exerb/win32/icon_file.rb +78 -0
  98. data/lib/exerb/win32/pe_file.rb +59 -0
  99. data/lib/exerb/win32/resource_directory.rb +105 -0
  100. data/lib/exerb/win32/resource_directory_root.rb +67 -0
  101. data/lib/exerb/win32/resource_entry.rb +98 -0
  102. data/lib/exerb/win32/struct/base.rb +43 -0
  103. data/lib/exerb/win32/struct/icon_dir_entry.rb +83 -0
  104. data/lib/exerb/win32/struct/icon_header.rb +43 -0
  105. data/lib/exerb/win32/struct/icon_res_entry.rb +48 -0
  106. data/lib/exerb/win32/struct/image_dos_header.rb +73 -0
  107. data/lib/exerb/win32/struct/image_file_header.rb +47 -0
  108. data/lib/exerb/win32/struct/image_nt_headers32.rb +53 -0
  109. data/lib/exerb/win32/struct/image_optional_header32.rb +107 -0
  110. data/lib/exerb/win32/struct/image_resource_data_entry.rb +45 -0
  111. data/lib/exerb/win32/struct/image_resource_directory.rb +47 -0
  112. data/lib/exerb/win32/struct/image_resource_directory_entry.rb +72 -0
  113. data/lib/exerb/win32/struct/image_section_header.rb +53 -0
  114. data/lib/exerb/win32/struct/version_info_block.rb +75 -0
  115. data/lib/exerb/win32/struct/vs_fixed_file_info.rb +62 -0
  116. data/src/exerb/cui.c +48 -0
  117. data/src/exerb/default.rb +1 -0
  118. data/src/exerb/exerb.c +877 -0
  119. data/src/exerb/exerb.h +92 -0
  120. data/src/exerb/gui.c +176 -0
  121. data/src/exerb/module.c +138 -0
  122. data/src/exerb/module.h +7 -0
  123. data/src/exerb/patch.c +27 -0
  124. data/src/exerb/resource.h +22 -0
  125. data/src/exerb/resource.rc +121 -0
  126. data/src/exerb/ruby.ico +0 -0
  127. data/src/exerb/utility.c +263 -0
  128. data/src/exerb/utility.h +33 -0
  129. data/test/alltests.rb +16 -0
  130. data/test/test-argv.rb +26 -0
  131. data/test/test-argv/test-argv.rb +9 -0
  132. data/test/test-argv/test-argv.ret +1 -0
  133. data/test/test-dollarzero.rb +26 -0
  134. data/test/test-dollarzero/test-dollarzero.rb +10 -0
  135. data/test/test-dollarzero/test-dollarzero.ret +2 -0
  136. data/test/test-dot.rb +26 -0
  137. data/test/test-dot/dot.dot.dot.rb +9 -0
  138. data/test/test-dot/dot.dot.rb +9 -0
  139. data/test/test-dot/test-dot.rb +13 -0
  140. data/test/test-dot/test-dot.ret +5 -0
  141. data/test/test-exitcode.rb +28 -0
  142. data/test/test-exitcode/test-exitcode.rb +9 -0
  143. data/test/test-kcode.rb +43 -0
  144. data/test/test-kcode/euc.rb +10 -0
  145. data/test/test-kcode/euc.ret +2 -0
  146. data/test/test-kcode/none.rb +10 -0
  147. data/test/test-kcode/none.ret +2 -0
  148. data/test/test-kcode/sjis.rb +10 -0
  149. data/test/test-kcode/sjis.ret +2 -0
  150. data/test/test-kcode/utf8.rb +10 -0
  151. data/test/test-kcode/utf8.ret +2 -0
  152. data/test/test-loadpath.rb +24 -0
  153. data/test/test-loadpath/test-loadpath.rb +9 -0
  154. data/test/test-nest.rb +18 -0
  155. data/test/test-nest/foo.rb +1 -0
  156. data/test/test-nest/foo/bar.rb +2 -0
  157. data/test/test-nest/foo/foo.rb +1 -0
  158. data/test/test-nest/test-nest.rb +1 -0
  159. data/test/test-nest/test-nest.ret +1 -0
  160. data/test/test-preload.rb +24 -0
  161. data/test/test-preload/test-preload.rb +9 -0
  162. data/test/test-regexp.rb +26 -0
  163. data/test/test-regexp/test-regexp.rb +23 -0
  164. data/test/test-regexp/test-regexp.ret +13 -0
  165. data/test/test-require1.rb +26 -0
  166. data/test/test-require1/require1.rb +9 -0
  167. data/test/test-require1/require2.rb +9 -0
  168. data/test/test-require1/require3.rb +9 -0
  169. data/test/test-require1/require4.rb +9 -0
  170. data/test/test-require1/require5.rb +9 -0
  171. data/test/test-require1/require6.rb +9 -0
  172. data/test/test-require1/test-require1.rb +41 -0
  173. data/test/test-require1/test-require1.ret +27 -0
  174. data/test/test-socket.rb +26 -0
  175. data/test/test-socket/test-socket.rb +7 -0
  176. data/test/test-socket/test-socket.ret +1 -0
  177. data/test/testcase.rb +66 -0
  178. data/vendor/mkexports.rb +167 -0
  179. metadata +352 -0
@@ -0,0 +1,340 @@
1
+ ###################################
2
+ #
3
+ # vrlayout2.rb
4
+ # Programmed by nyasu <nyasu@osk.3web.ne.jp>
5
+ # Copyright 2000-2005 Nishikawa,Yasuhiro
6
+ #
7
+ # More information at http://vruby.sourceforge.net/index.html
8
+ #
9
+ ###################################
10
+
11
+ require 'Win32API'
12
+
13
+ class VRLayoutFrame
14
+ =begin
15
+ == VRLayoutFrame
16
+ This is a base class for layout frames.
17
+
18
+ === Methods
19
+ --- register(*controls)
20
+ Registers controls for LayoutFrame
21
+ --- move(x,y,w,h)
22
+ Resizes the layout frame size.
23
+ This re-calculate the registered controls coordinates.
24
+ =end
25
+
26
+ def initialize()
27
+ @_vr_layoutclients=[]
28
+ @_vr_lx,@_vr_ly,@_vr_lw,@_vr_lh = 0,0,10,10
29
+ end
30
+
31
+ def register(*cntl)
32
+ @_vr_layoutclients.concat cntl
33
+ _vr_relayout
34
+ end
35
+
36
+ def move(x,y,w,h)
37
+ @_vr_lx,@_vr_ly,@_vr_lw,@_vr_lh = x,y,w,h
38
+ _vr_relayout
39
+ end
40
+
41
+ def _vr_relayout
42
+ end
43
+ end
44
+
45
+
46
+ class VRVertLayoutFrame < VRLayoutFrame
47
+ =begin
48
+ == VRVertLayoutFrame
49
+ This is a frame that lays out its controls vertically.
50
+ Use ((|register|)) and ((|move|)) method of VRLayoutFrame
51
+ =end
52
+
53
+ def _vr_relayout
54
+ return if @_vr_layoutclients.size==0
55
+ height = @_vr_lh.to_f / @_vr_layoutclients.size
56
+ @_vr_layoutclients.each_index do |i|
57
+ @_vr_layoutclients[i].move @_vr_lx, @_vr_ly+height*i,@_vr_lw,height
58
+ end
59
+ end
60
+ end
61
+
62
+ class VRHorizLayoutFrame < VRLayoutFrame
63
+ =begin
64
+ == VRHorizLayoutFrame
65
+ This is a frame that lays out its controls horizontally.
66
+ Use ((|register|)) and ((|move|)) method of VRLayoutFrame
67
+ =end
68
+ def _vr_relayout
69
+ return if @_vr_layoutclients.size==0
70
+ width = @_vr_lw.to_f / @_vr_layoutclients.size
71
+ @_vr_layoutclients.each_index do |i|
72
+ @_vr_layoutclients[i].move @_vr_lx+width*i, @_vr_ly,width,@_vr_lh
73
+ end
74
+ end
75
+ end
76
+
77
+ class VRFullsizeLayoutFrame < VRVertLayoutFrame
78
+ =begin
79
+ == VRFullsizeLayoutFrame
80
+ This is a frame that lays out its one control full-sized.
81
+ Use ((|register|)) and ((|move|)) method of VRLayoutFrame
82
+ ((|register|)) method can be called once and accept only one control.
83
+ =end
84
+
85
+ def register(re)
86
+ super
87
+ def self.register
88
+ raise "register twice"
89
+ end
90
+ end
91
+ end
92
+
93
+ class VRGridLayoutFrame <VRLayoutFrame
94
+ def initialize(xs,ys)
95
+ super()
96
+ @_vr_xsize=xs
97
+ @_vr_ysize=ys
98
+ @_vr_layoutclients = Array.new
99
+ end
100
+ def setDimention(xs,ys)
101
+ @_vr_xsize=xs
102
+ @_vr_ysize=ys
103
+ end
104
+
105
+ def register(cntl,x,y,w,h)
106
+ @_vr_layoutclients.push [cntl,x,y,w,h]
107
+ _vr_relayout
108
+ end
109
+
110
+ def _vr_relayout
111
+ @_vr_layoutclients.each do |c|
112
+ c[0].move( @_vr_lw * c[1] / @_vr_xsize,
113
+ @_vr_lh * c[2] / @_vr_ysize,
114
+ @_vr_lw * c[3] / @_vr_xsize,
115
+ @_vr_lh * c[4] / @_vr_ysize)
116
+ end
117
+ end
118
+ end
119
+
120
+ class VRTwoPaneFrame
121
+ =begin
122
+ == VRTwoPaneFrame
123
+ This is a base class for twopane frames.
124
+
125
+ === Methods
126
+ --- register(*controls)
127
+ --- move(x,y,w,h)
128
+ same as ((<VRLayoutFrame>))
129
+ --- setup(parent)
130
+ Call this method to combine the frame to the window.
131
+ --- window_parent
132
+ Find the first actual window object from its parent or ancestors.
133
+ =end
134
+ SPLITTER_MOVEWINDOW=0
135
+ SPLITTER_DRAWLINE=1
136
+ @@_vr_paned_splitter_movingmethod = SPLITTER_DRAWLINE
137
+
138
+ def splitter_operation_type
139
+ @@_vr_paned_splitter_movingmethod
140
+ end
141
+
142
+ def splitter_operation_type=(tp)
143
+ @@_vr_paned_splitter_movingmethod=tp
144
+ end
145
+
146
+ attr :ratio,1
147
+ attr :separatorheight,1
148
+
149
+ Cursor="Size"
150
+
151
+ PatBlt = Win32API.new("gdi32","PatBlt","IIIIII","I")
152
+
153
+ module VRTwoPaneFrameUsable
154
+ attr :_vr_twopaneframes,1
155
+
156
+ def _vr_twopaneframesinit
157
+ return if defined?(@_vr_twopaneframes) # no init twice
158
+ @_vr_twopaneframes = Array.new
159
+ @_vr_current_tpframe=nil
160
+ addHandler(
161
+ WMsg::WM_LBUTTONUP, "vrsepl2buttonup", MSGTYPE::ARGINTSINTSINT,nil)
162
+ addHandler(
163
+ WMsg::WM_LBUTTONDOWN,"vrsepl2buttondown",MSGTYPE::ARGINTSINTSINT,nil)
164
+ addHandler(
165
+ WMsg::WM_MOUSEMOVE, "vrsepl2mousemove", MSGTYPE::ARGINTSINTSINT,nil)
166
+
167
+ acceptEvents [
168
+ WMsg::WM_LBUTTONUP,WMsg::WM_LBUTTONDOWN,WMsg::WM_MOUSEMOVE
169
+ ]
170
+ end
171
+
172
+ def self_vrsepl2buttondown(s,x,y)
173
+ @_vr_twopaneframes.each do |f|
174
+ if f.hittest(x,y)
175
+ f.setDragCur
176
+ f.dragstart
177
+ @_vr_current_tpframe=f
178
+ end
179
+ end
180
+ end
181
+
182
+ def self_vrsepl2buttonup(s,x,y)
183
+ @_vr_current_tpframe=nil
184
+ @_vr_twopaneframes.each do |f|
185
+ f.dragend
186
+ end
187
+ refresh
188
+ end
189
+
190
+ def self_vrsepl2mousemove(s,x,y)
191
+ @_vr_twopaneframes.each do |f|
192
+ if f.hittest(x,y)
193
+ f.setDragCur
194
+ end
195
+ end
196
+ if @_vr_current_tpframe then
197
+ @_vr_current_tpframe.splitterDragging(x,y)
198
+ end
199
+ end
200
+ end
201
+
202
+ def window_parent
203
+ a=self
204
+ while(! a.is_a?(SWin::Window) ) do
205
+ a = a.instance_eval("@parent")
206
+ end
207
+ return a
208
+ end
209
+
210
+ def initialize(pane1,pane2)
211
+ @pane1,@pane2 = pane1,pane2
212
+ @_vr_dragging=false
213
+ @ratio=0.5
214
+ @separatorheight=4
215
+ @_vr_splitter_last=nil
216
+ end
217
+
218
+ def hittest(x,y)
219
+ return unless @_vr_lxs
220
+ if (@_vr_lxs < x) and (x < @_vr_lxe) and
221
+ (@_vr_lys < y) and (y < @_vr_lye)
222
+ then
223
+ true
224
+ else
225
+ false
226
+ end
227
+ end
228
+
229
+ def setDragCur
230
+ @_vr_app.setCursor @_vr_dragcur if @_vr_app
231
+ end
232
+
233
+ def dragstart
234
+ @parent.setCapture
235
+ @_vr_dragging=true
236
+ end
237
+
238
+ def dragend
239
+ return unless @_vr_dragging
240
+ @parent.releaseCapture
241
+ @_vr_dragging=false
242
+ splitterDragEnd
243
+ end
244
+
245
+ def setup(parent)
246
+ raise "setup twice" if defined? @parent
247
+ @parent = parent
248
+ @_vr_app = parent.instance_eval("@screen.application") # parent.application
249
+ @_vr_dragcur = eval("@_vr_app::SysCursors::#{self.class::Cursor}()")
250
+ parent.extend VRTwoPaneFrameUsable
251
+ parent._vr_twopaneframesinit
252
+ parent._vr_twopaneframes.push self
253
+ self
254
+ end
255
+
256
+ def move(x,y,w,h)
257
+ @_vr_lx,@_vr_ly,@_vr_lw,@_vr_lh = x,y,w,h
258
+ self._vr_relayout
259
+ end
260
+
261
+ def splitterDragging(x,y) end
262
+ def splitterDragEnd(x,y) end
263
+ def _vr_relayout() raise "using base class #{self.class}" end
264
+ end
265
+
266
+ class VRVertTwoPaneFrame < VRTwoPaneFrame
267
+ Cursor = "SizeNS"
268
+ def splitterDragEnd
269
+ @_vr_splitter_last=nil
270
+ _vr_relayout
271
+ end
272
+ def splitterDragging(x,y)
273
+ return if y<@separatorheight+@_vr_ly or y>@_vr_ly+@_vr_lh-@separatorheight
274
+ @ratio=(y-@_vr_ly).to_f/@_vr_lh
275
+
276
+ case(splitter_operation_type)
277
+ when SPLITTER_MOVEWINDOW
278
+ _vr_relayout(y-@_vr_ly)
279
+ when SPLITTER_DRAWLINE
280
+ w = window_parent
281
+ w.dopaint do |hdc|
282
+ w.setBrush(RGB(0x255,0x255,0x255))
283
+ if @_vr_splitter_last then
284
+ VRTwoPaneFrame::PatBlt.call(hdc,*@_vr_splitter_last)
285
+ end
286
+ current=[@_vr_lx,y,@_vr_lw,@separatorheight,0x5a0049] # PATINVERT
287
+ VRTwoPaneFrame::PatBlt.call(hdc,*current)
288
+ @_vr_splitter_last = current
289
+ end
290
+ end
291
+ end
292
+
293
+ def _vr_relayout( ys = (@_vr_lh*@ratio).to_i)
294
+ sh=(@separatorheight/2).to_i
295
+ @_vr_lxs,@_vr_lxe = @_vr_lx,@_vr_lx+@_vr_lw
296
+ @_vr_lys,@_vr_lye = @_vr_ly+ys-sh,@_vr_ly+ys+sh
297
+
298
+ @pane1.move @_vr_lx,@_vr_ly, @_vr_lw,ys-sh
299
+ @pane2.move @_vr_lx,@_vr_lys+@separatorheight, @_vr_lw,@_vr_lh-ys-sh
300
+ end
301
+ end
302
+
303
+ class VRHorizTwoPaneFrame < VRTwoPaneFrame
304
+ Cursor = "SizeWE"
305
+ def splitterDragEnd
306
+ @_vr_splitter_last=nil
307
+ _vr_relayout
308
+ end
309
+ def splitterDragging(x,y)
310
+ return if x<@separatorheight+@_vr_lx or x>@_vr_lx+@_vr_lw-@separatorheight
311
+ @ratio=(x-@_vr_lx).to_f/@_vr_lw
312
+
313
+ case(splitter_operation_type)
314
+ when SPLITTER_MOVEWINDOW
315
+ _vr_relayout(x-@_vr_lx)
316
+ when SPLITTER_DRAWLINE
317
+ w = window_parent
318
+ w.dopaint do |hdc|
319
+ w.setBrush(RGB(0x255,0x255,0x255))
320
+ if @_vr_splitter_last then
321
+ VRTwoPaneFrame::PatBlt.call(hdc,*@_vr_splitter_last)
322
+ end
323
+ current=[x,@_vr_ly,@separatorheight,@_vr_lh,0x5a0049] # PATINVERT
324
+ VRTwoPaneFrame::PatBlt.call(hdc,*current)
325
+ @_vr_splitter_last = current
326
+ end
327
+ end
328
+
329
+
330
+ end
331
+
332
+ def _vr_relayout( xs = (@_vr_lw*@ratio).to_i)
333
+ sh=(@separatorheight/2).to_i
334
+ @_vr_lxs,@_vr_lxe = @_vr_lx+xs-sh,@_vr_lx+xs+sh
335
+ @_vr_lys,@_vr_lye = @_vr_ly,@_vr_ly+@_vr_lh
336
+
337
+ @pane1.move @_vr_lx,@_vr_ly, xs-sh,@_vr_lh
338
+ @pane2.move @_vr_lxs+@separatorheight,@_vr_ly, @_vr_lw-xs-sh,@_vr_lh
339
+ end
340
+ end
@@ -0,0 +1,141 @@
1
+ ###################################
2
+ #
3
+ # vrmargin.rb
4
+ #
5
+ # Programmed by yukimi_sake <yukimi_sake@mbi.nifty.com>
6
+ # Copyright 2003-2004 Yukio Sakaue
7
+ #
8
+ ###################################
9
+
10
+ require 'vr/vruby'
11
+ require 'vr/vrhandler'
12
+
13
+ module VRMargin
14
+ =begin
15
+ == VRMargin
16
+ This is a module to space itself from parent window on resized.
17
+ Also useable for layout flames and two panes.
18
+ === Methods
19
+ --- initMargin(left=nil,top=nil,right=nil,bottom=nil)
20
+ Call this method first to use margin and set each margins.
21
+ If the margins are set to nil,the control becomes original size.
22
+ --- setMargin(left=nil,top=nil,right=nil,bottom=nil)
23
+ Set all margins
24
+ --- mgLeft
25
+ --- mgLeft=
26
+ Get/Set left margin.
27
+ --- mgTop
28
+ --- mgTop=
29
+ Get/Set top margin.
30
+ ---mgRight
31
+ ---mgRight=
32
+ Get/Set right margin.
33
+ --- mgBottom
34
+ --- mgBottom=
35
+ Get/Set bottom margin.
36
+ =end
37
+
38
+ def initMargin(left=nil,top=nil,right=nil,bottom=nil)
39
+ if respond_to?(:vrinit)
40
+ extend MarginForWindow
41
+ vrinit
42
+ @__org_x,@__org_y,@__org_w,@__org_h=x,y,w,h
43
+ @_mg_x,@_mg_y,@_mg_w,@_mg_h = x,y,w,h
44
+ else
45
+ extend MarginForClass
46
+ mgLeft = 0 unless left
47
+ mgTop = 0 unless top
48
+ mgRight = 0 unless right
49
+ mgBottom = 0 unless bottom
50
+ end
51
+ @_mg_top=top
52
+ @_mg_bottom=bottom
53
+ @_mg_left=left
54
+ @_mg_right=right
55
+ self
56
+ end
57
+
58
+ def mgTop(); @_mg_top; end
59
+ def mgBottom(); @_mg_bottom; end
60
+ def mgLeft(); @_mg_left; end
61
+ def mgRight(); @_mg_right;end
62
+
63
+ def setMargin(left=nil,top=nil,right=nil,bottom=nil)
64
+ @_mg_top=top
65
+ @_mg_bottom=bottom
66
+ @_mg_left=left
67
+ @_mg_right=right
68
+ self.move(@_mg_x,@_mg_y,@_mg_w,@_mg_h)if @_mg_x&&@_mg_y&&@_mg_w&&@_mg_h
69
+ end
70
+
71
+ def mgTop=(t)
72
+ @_mg_top=t
73
+ self.move(@_mg_x,@_mg_y,@_mg_w,@_mg_h)
74
+ end
75
+ def mgBottom=(b)
76
+ @_mg_bottom=b
77
+ self.move(@_mg_x,@_mg_y,@_mg_w,@_mg_h)
78
+ end
79
+ def mgLeft=(l)
80
+ @_mg_left=l
81
+ self.move(@_mg_x,@_mg_y,@_mg_w,@_mg_h)
82
+ end
83
+ def mgRight=(r)
84
+ @_mg_right=r
85
+ self.move(@_mg_x,@_mg_y,@_mg_w,@_mg_h)
86
+ end
87
+
88
+ module MarginForClass
89
+ def move(x,y,w,h)
90
+ return unless x || y || w || h
91
+ @_mg_x,@_mg_y,@_mg_w,@_mg_h = x,y,w,h
92
+ _x = x + @_mg_left
93
+ _w = w - @_mg_right - @_mg_left
94
+ _y = y + @_mg_top
95
+ _h = h - @_mg_bottom - @_mg_top
96
+ super(_x,_y,_w,_h)
97
+ end
98
+ end
99
+
100
+ module MarginForWindow
101
+ def move(x,y,w,h)
102
+ @_mg_x,@_mg_y,@_mg_w,@_mg_h = x,y,w,h
103
+ if @_mg_left then
104
+ if @_mg_right then
105
+ _x = x + @_mg_left
106
+ _w = w - @_mg_right - @_mg_left
107
+ else
108
+ _x = x + @_mg_left
109
+ _w = @__org_w
110
+ end
111
+ else
112
+ if @_mg_right then
113
+ _x = w - @_mg_right + x - @__org_w
114
+ _w = @__org_w
115
+ else
116
+ _x = @__org_x
117
+ _w = @__org_w
118
+ end
119
+ end
120
+
121
+ if @_mg_top then
122
+ if @_mg_bottom then
123
+ _y = y + @_mg_top
124
+ _h = h - @_mg_bottom - @_mg_top
125
+ else
126
+ _y = y + @_mg_top
127
+ _h = @__org_h
128
+ end
129
+ else
130
+ if @_mg_bottom then
131
+ _y = y+h-@__org_h-@_mg_bottom
132
+ _h = @__org_h
133
+ else
134
+ _y = @__org_y
135
+ _h = @__org_h
136
+ end
137
+ end
138
+ super(_x,_y,_w,_h)
139
+ end
140
+ end
141
+ end