fzeet 0.6.5 → 0.6.6

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 (140) hide show
  1. data/LICENSE_CEF +29 -0
  2. data/checks/Bstr.rb +14 -0
  3. data/checks/Decimal.rb +27 -0
  4. data/checks/OSVERSIONINFOEX.rb +14 -0
  5. data/checks/Point.rb +65 -0
  6. data/checks/Rect.rb +104 -0
  7. data/checks/RunAll.rb +2 -0
  8. data/checks/SafeArray.rb +27 -0
  9. data/checks/Size.rb +45 -0
  10. data/checks/SystemTime.rb +43 -0
  11. data/checks/Variant.rb +160 -0
  12. data/examples/Control/DateTimePicker.rbw +1 -1
  13. data/examples/Control/MonthCalendar.rbw +1 -1
  14. data/examples/Control/{WebBrowser.rbw → WebBrowser/WebBrowser.rbw} +2 -2
  15. data/examples/Control/{WebBrowser1.rbw → WebBrowser/WebBrowser1.rbw} +0 -0
  16. data/examples/Control/WebBrowser/WebBrowser2.rbw +24 -0
  17. data/examples/Control/{WebBrowser3.rbw → WebBrowser/WebBrowser3.rbw} +0 -0
  18. data/examples/Control/{WebBrowser4.rbw → WebBrowser/WebBrowser4.rbw} +8 -3
  19. data/examples/Control/{WebBrowser4Sinatra.rb → WebBrowser/WebBrowser4Sinatra.rb} +0 -0
  20. data/examples/Control/{WebBrowser5.rbw → WebBrowser/WebBrowser5.rbw} +4 -2
  21. data/examples/Control/WebBrowser/jQueryUI.html +53 -0
  22. data/examples/Control/WebBrowser/jQueryUI.rbw +26 -0
  23. data/examples/MDI.rbw +2 -2
  24. data/examples/Raw/UIRibbon/Command.rbw +3 -3
  25. data/examples/Raw/UIRibbon/Minimal.rbw +3 -3
  26. data/examples/Version.rbw +1 -1
  27. data/lib/fzeet.rb +22 -7
  28. data/lib/fzeet/windows.rb +82 -5
  29. data/lib/fzeet/windows/com.rb +1 -318
  30. data/lib/fzeet/windows/com/Common.rb +318 -0
  31. data/lib/fzeet/windows/comctl.rb +1 -1
  32. data/lib/fzeet/windows/comctl/ComboBoxEx.rb +32 -0
  33. data/lib/fzeet/windows/comctl/DateTimePicker.rb +35 -0
  34. data/lib/fzeet/windows/comctl/Header.rb +61 -1
  35. data/lib/fzeet/windows/comctl/ListView.rb +133 -3
  36. data/lib/fzeet/windows/comctl/MonthCalendar.rb +35 -0
  37. data/lib/fzeet/windows/comctl/ProgressBar.rb +37 -0
  38. data/lib/fzeet/windows/comctl/PropertySheet.rb +50 -2
  39. data/lib/fzeet/windows/comctl/SysLink.rb +37 -0
  40. data/lib/fzeet/windows/comctl/Tab.rb +56 -0
  41. data/lib/fzeet/windows/comctl/TreeView.rb +81 -2
  42. data/lib/fzeet/windows/comctl/UpDown.rb +33 -0
  43. data/lib/fzeet/windows/comdlg.rb +1 -0
  44. data/lib/fzeet/windows/comdlg/ColorDialog.rb +41 -0
  45. data/lib/fzeet/windows/comdlg/Common.rb +87 -0
  46. data/lib/fzeet/windows/comdlg/FileDialog.rb +133 -0
  47. data/lib/fzeet/windows/comdlg/FindReplaceDialog.rb +102 -0
  48. data/lib/fzeet/windows/comdlg/FontDialog.rb +36 -0
  49. data/lib/fzeet/windows/comdlg/PrintDialog.rb +72 -0
  50. data/lib/fzeet/{Dialog → windows/comdlg}/ShellFileDialog.rb +0 -0
  51. data/lib/fzeet/windows/core.rb +5 -0
  52. data/lib/fzeet/windows/core/Common.rb +324 -0
  53. data/lib/fzeet/windows/core/Point.rb +42 -0
  54. data/lib/fzeet/windows/core/Rect.rb +114 -0
  55. data/lib/fzeet/windows/core/Size.rb +34 -0
  56. data/lib/fzeet/windows/core/SystemTime.rb +46 -0
  57. data/lib/fzeet/windows/core/Version.rb +57 -0
  58. data/lib/fzeet/windows/gdi.rb +1 -62
  59. data/lib/fzeet/windows/gdi/Common.rb +40 -0
  60. data/lib/fzeet/windows/gdi/Font.rb +64 -0
  61. data/lib/fzeet/windows/kernel.rb +1 -92
  62. data/lib/fzeet/windows/kernel/Common.rb +92 -0
  63. data/lib/fzeet/windows/libc.rb +1 -1
  64. data/lib/fzeet/windows/libcef.rb +1 -0
  65. data/lib/fzeet/windows/mshtml.rb +1 -1135
  66. data/lib/fzeet/windows/mshtml/Common.rb +1135 -0
  67. data/lib/fzeet/windows/ole.rb +1 -561
  68. data/lib/fzeet/windows/ole/Common.rb +112 -0
  69. data/lib/fzeet/windows/ole/PropVariant.rb +141 -0
  70. data/lib/fzeet/windows/oleaut.rb +3 -0
  71. data/lib/fzeet/windows/oleaut/Bstr.rb +39 -0
  72. data/lib/fzeet/windows/oleaut/Common.rb +187 -0
  73. data/lib/fzeet/windows/oleaut/SafeArray.rb +104 -0
  74. data/lib/fzeet/windows/oleaut/Variant.rb +269 -0
  75. data/lib/fzeet/windows/scintilla.rb +115 -1
  76. data/lib/fzeet/windows/{SciLexer.dll → scintilla/SciLexer.dll} +0 -0
  77. data/lib/fzeet/windows/shdocvw.rb +150 -0
  78. data/lib/fzeet/windows/shell.rb +1 -1
  79. data/lib/fzeet/windows/shell/Common.rb +94 -2
  80. data/lib/fzeet/windows/shlwapi.rb +1 -1
  81. data/lib/fzeet/windows/uiribbon.rb +416 -0
  82. data/lib/fzeet/windows/urlmon.rb +2 -2
  83. data/lib/fzeet/windows/user.rb +20 -0
  84. data/lib/fzeet/windows/user/Accelerator.rb +45 -0
  85. data/lib/fzeet/windows/user/Common.rb +3 -2
  86. data/lib/fzeet/windows/user/Control/Button.rb +54 -0
  87. data/lib/fzeet/windows/user/Control/ComboBox.rb +44 -1
  88. data/lib/fzeet/windows/user/Control/Common.rb +88 -1
  89. data/lib/fzeet/windows/user/Control/Edit.rb +50 -0
  90. data/lib/fzeet/windows/user/Control/ListBox.rb +69 -0
  91. data/lib/fzeet/windows/user/Control/Static.rb +31 -0
  92. data/lib/fzeet/windows/user/Menu.rb +130 -0
  93. data/lib/fzeet/windows/user/Message.rb +9 -0
  94. data/lib/fzeet/windows/user/MessageBox.rb +47 -0
  95. data/lib/fzeet/windows/user/SystemParametersInfo.rb +1 -1
  96. data/lib/fzeet/windows/user/Window.rb +5 -463
  97. data/lib/fzeet/{Window → windows/user/Window}/Common.rb +460 -0
  98. data/lib/fzeet/{Window → windows/user/Window}/Container.rb +0 -0
  99. data/lib/fzeet/{Window → windows/user/Window}/Dialog.rb +0 -0
  100. data/lib/fzeet/{Window → windows/user/Window}/MDI.rb +0 -0
  101. data/lib/fzeet/{Window → windows/user/Window}/View.rb +0 -0
  102. data/lib/fzeet/{Window → windows/user/Window}/Window.rb +0 -0
  103. data/lib/fzeet/{Window → windows/user/Window}/WindowMethods.rb +1 -1
  104. metadata +55 -61
  105. data/examples/Control/WebBrowser2.rbw +0 -39
  106. data/lib/fzeet/Accelerator.rb +0 -48
  107. data/lib/fzeet/Application.rb +0 -71
  108. data/lib/fzeet/Common.rb +0 -350
  109. data/lib/fzeet/Control.rb +0 -19
  110. data/lib/fzeet/Control/Button.rb +0 -57
  111. data/lib/fzeet/Control/ComboBox.rb +0 -46
  112. data/lib/fzeet/Control/ComboBoxEx.rb +0 -35
  113. data/lib/fzeet/Control/Common.rb +0 -89
  114. data/lib/fzeet/Control/DateTimePicker.rb +0 -38
  115. data/lib/fzeet/Control/Edit.rb +0 -53
  116. data/lib/fzeet/Control/ExplorerBrowser.rb +0 -66
  117. data/lib/fzeet/Control/Header.rb +0 -63
  118. data/lib/fzeet/Control/ListBox.rb +0 -72
  119. data/lib/fzeet/Control/ListView.rb +0 -133
  120. data/lib/fzeet/Control/MonthCalendar.rb +0 -38
  121. data/lib/fzeet/Control/ProgressBar.rb +0 -40
  122. data/lib/fzeet/Control/PropertySheet.rb +0 -51
  123. data/lib/fzeet/Control/Scintilla.rb +0 -117
  124. data/lib/fzeet/Control/Static.rb +0 -34
  125. data/lib/fzeet/Control/SysLink.rb +0 -40
  126. data/lib/fzeet/Control/Tab.rb +0 -59
  127. data/lib/fzeet/Control/TreeView.rb +0 -82
  128. data/lib/fzeet/Control/UpDown.rb +0 -36
  129. data/lib/fzeet/Control/WebBrowser.rb +0 -153
  130. data/lib/fzeet/Dialog.rb +0 -6
  131. data/lib/fzeet/Dialog/ColorDialog.rb +0 -44
  132. data/lib/fzeet/Dialog/Common.rb +0 -89
  133. data/lib/fzeet/Dialog/FileDialog.rb +0 -136
  134. data/lib/fzeet/Dialog/FindReplaceDialog.rb +0 -105
  135. data/lib/fzeet/Dialog/FontDialog.rb +0 -39
  136. data/lib/fzeet/Dialog/PrintDialog.rb +0 -75
  137. data/lib/fzeet/Menu.rb +0 -133
  138. data/lib/fzeet/UIRibbon.rb +0 -417
  139. data/lib/fzeet/Window.rb +0 -5
  140. data/lib/fzeet/windows/common.rb +0 -244
data/lib/fzeet/Menu.rb DELETED
@@ -1,133 +0,0 @@
1
- require_relative 'Common'
2
-
3
- module Fzeet
4
- module MenuMethods
5
- def rdetach; submenus.each(&:rdetach); detach end
6
-
7
- class Item
8
- include Toggle
9
-
10
- def initialize(menu, id) @menu, @id = menu, Command[id] end
11
-
12
- attr_reader :menu, :id
13
-
14
- def enabled?
15
- flags = Windows.DetonateLastError(-1, :GetMenuState, @menu.handle, @id, 0)
16
-
17
- (flags & Windows::MF_GRAYED) != Windows::MF_GRAYED
18
- end
19
-
20
- def enabled=(enabled)
21
- Windows.DetonateLastError(-1, :EnableMenuItem,
22
- @menu.handle,
23
- @id,
24
- (enabled) ? Windows::MF_ENABLED : Windows::MF_GRAYED
25
- )
26
- end
27
-
28
- def checked?
29
- flags = Windows.DetonateLastError(-1, :GetMenuState, @menu.handle, @id, 0)
30
-
31
- (flags & Windows::MF_CHECKED) == Windows::MF_CHECKED
32
- end
33
-
34
- def checked=(checked)
35
- Windows.DetonateLastError(-1, :CheckMenuItem,
36
- @menu.handle,
37
- @id,
38
- (checked) ? Windows::MF_CHECKED : Windows::MF_UNCHECKED
39
- )
40
- end
41
-
42
- def select(first, last)
43
- Windows.DetonateLastError(0, :CheckMenuRadioItem,
44
- @menu.handle, Command[first], Command[last], @id, 0
45
- )
46
-
47
- self
48
- end
49
-
50
- def info(mask)
51
- Windows.DetonateLastError(0, :GetMenuItemInfo,
52
- @menu.handle,
53
- @id,
54
- 0,
55
- info = Windows::MENUITEMINFO.new.tap { |mii|
56
- mii[:cbSize] = mii.size
57
- mii[:fMask] = Fzeet.constant(mask, :miim_)
58
- }
59
- )
60
-
61
- info
62
- end
63
-
64
- def info=(mii)
65
- Windows.DetonateLastError(0, :SetMenuItemInfo,
66
- @menu.handle,
67
- @id,
68
- 0,
69
- mii.tap { mii[:cbSize] = mii.size }
70
- )
71
- end
72
-
73
- def image; (Handle.instance?(handle = info(:bitmap)[:hbmpItem])) ? Handle.instance(handle) : nil end
74
-
75
- def image=(image)
76
- self.info = Windows::MENUITEMINFO.new.tap { |mii|
77
- mii[:fMask] = Windows::MIIM_BITMAP
78
- mii[:hbmpItem] = image.handle
79
- }
80
- end
81
- end
82
-
83
- def [](id) Item.new(self, id) end
84
-
85
- def append(flags, item = nil, id = 0)
86
- Windows.DetonateLastError(0, :AppendMenu,
87
- @handle,
88
- Fzeet.flags(flags, :mf_, :mft_, :mfs_),
89
- case id
90
- when Integer; id
91
- when Symbol; Command[id]
92
- when MenuMethods; submenus << id; id.handle.to_i
93
- else raise ArgumentError
94
- end,
95
- item
96
- )
97
-
98
- self
99
- end
100
-
101
- def images=(images) images.each { |id, image| self[id].image = image } end
102
- end
103
-
104
- class Menu < Handle
105
- include MenuMethods
106
-
107
- def initialize
108
- @submenus = []
109
-
110
- @handle = Windows.DetonateLastError(FFI::Pointer::NULL, :CreateMenu); attach
111
- end
112
-
113
- attr_reader :submenus
114
-
115
- def dispose; Windows.DestroyMenu(@handle); rdetach end
116
- end
117
-
118
- class PopupMenu < Handle
119
- include MenuMethods
120
-
121
- def initialize
122
- @submenus = []
123
-
124
- @handle = Windows.DetonateLastError(FFI::Pointer::NULL, :CreatePopupMenu); attach
125
- end
126
-
127
- attr_reader :submenus
128
-
129
- def dispose; Windows.DestroyMenu(@handle); rdetach end
130
-
131
- def track(window, x, y, flags = 0) Windows.TrackPopupMenu(@handle, Fzeet.flags(flags, :tpm_), x, y, 0, window.handle, nil); self end
132
- end
133
- end
@@ -1,417 +0,0 @@
1
- require_relative 'Common'
2
-
3
- module Fzeet
4
- class Windows::PropertyStore
5
- def uiprop(*args)
6
- args[0] = Windows.const_get("UI_PKEY_#{args[0]}")
7
-
8
- prop(*args)
9
- end
10
-
11
- def update(from)
12
- case from
13
- when Windows::LOGFONT
14
- uiprop(:FontProperties_Family, Windows::PROPVARIANT[:wstring, from.face])
15
- uiprop(:FontProperties_Size, Windows::PROPVARIANT[:decimal, from.size.round])
16
- uiprop(:FontProperties_Bold, Windows::PROPVARIANT[:uint, (from.bold?) ? 2 : 1])
17
- uiprop(:FontProperties_Italic, Windows::PROPVARIANT[:uint, (from.italic?) ? 2 : 1])
18
- uiprop(:FontProperties_Underline, Windows::PROPVARIANT[:uint, (from.underline?) ? 2 : 1])
19
- uiprop(:FontProperties_Strikethrough, Windows::PROPVARIANT[:uint, (from.strikeout?) ? 2 : 1])
20
- else raise ArgumentError
21
- end
22
-
23
- self
24
- end
25
- end
26
-
27
- class Windows::UISimplePropertySet
28
- def get(k) Windows::PROPVARIANT.new.tap { |v| GetValue(k, v) } end
29
-
30
- def prop(*args)
31
- case args.length
32
- when 1; get(*args)
33
- else raise ArgumentError
34
- end
35
- end
36
-
37
- def uiprop(*args)
38
- args[0] = Windows.const_get("UI_PKEY_#{args[0]}")
39
-
40
- prop(*args)
41
- end
42
- end
43
-
44
- class UIRibbon
45
- class Command
46
- include Toggle
47
-
48
- def initialize(ribbon, id)
49
- @ribbon, @id = ribbon, id
50
- end
51
-
52
- attr_reader :ribbon, :id
53
-
54
- def [](k) Windows::PROPVARIANT.new.tap { |v| ribbon.uif.GetUICommandProperty(id, k, v) } end
55
- def []=(k, v) ribbon.uif.SetUICommandProperty(id, k, v) end
56
-
57
- def enabled?; self[Windows::UI_PKEY_Enabled].bool end
58
- def enabled=(enabled) self[Windows::UI_PKEY_Enabled] = Windows::PROPVARIANT[:bool, enabled] end
59
-
60
- def checked?; self[Windows::UI_PKEY_BooleanValue].bool end
61
- def checked=(checked) self[Windows::UI_PKEY_BooleanValue] = Windows::PROPVARIANT[:bool, checked] end
62
- end
63
-
64
- def [](id) Command.new(self, id) end
65
-
66
- module Color
67
- def self.enhance(hsb, ribbon, method)
68
- hsb.instance_variable_set(:@ribbon, ribbon)
69
- hsb.instance_variable_set(:@method, method)
70
-
71
- class << hsb
72
- attr_reader :ribbon, :method
73
-
74
- include Color
75
- end
76
-
77
- hsb
78
- end
79
-
80
- def darken(amount) self[2] -= amount; ribbon.send("#{method}=", self); self end
81
- def lighten(amount) self[2] += amount; ribbon.send("#{method}=", self); self end
82
-
83
- def saturate(amount) self[1] += amount; ribbon.send("#{method}=", self); self end
84
- def bleach(amount) self[1] -= amount; ribbon.send("#{method}=", self); self end
85
-
86
- def shift(amount) self[0] += amount; ribbon.send("#{method}=", self); self end
87
- end
88
-
89
- def background
90
- hsb = nil
91
-
92
- uif.QueryInstance(Windows::PropertyStore) { |ps|
93
- hsb = ps.uiprop(:GlobalBackgroundColor).uint
94
- }
95
-
96
- Color.enhance([Windows::UI_GetHValue(hsb), Windows::UI_GetSValue(hsb), Windows::UI_GetBValue(hsb)], self, __method__)
97
- end
98
-
99
- def background=(hsb)
100
- uif.QueryInstance(Windows::PropertyStore) { |ps|
101
- ps.uiprop(:GlobalBackgroundColor, Windows::PROPVARIANT[:uint, Windows::UI_HSB(*hsb)]).commit
102
- }
103
- end
104
-
105
- def color
106
- hsb = nil
107
-
108
- uif.QueryInstance(Windows::PropertyStore) { |ps|
109
- hsb = ps.uiprop(:GlobalTextColor).uint
110
- }
111
-
112
- Color.enhance([Windows::UI_GetHValue(hsb), Windows::UI_GetSValue(hsb), Windows::UI_GetBValue(hsb)], self, __method__)
113
- end
114
-
115
- def color=(hsb)
116
- uif.QueryInstance(Windows::PropertyStore) { |ps|
117
- ps.uiprop(:GlobalTextColor, Windows::PROPVARIANT[:uint, Windows::UI_HSB(*hsb)]).commit
118
- }
119
- end
120
-
121
- def highlight
122
- hsb = nil
123
-
124
- uif.QueryInstance(Windows::PropertyStore) { |ps|
125
- hsb = ps.uiprop(:GlobalHighlightColor).uint
126
- }
127
-
128
- Color.enhance([Windows::UI_GetHValue(hsb), Windows::UI_GetSValue(hsb), Windows::UI_GetBValue(hsb)], self, __method__)
129
- end
130
-
131
- def highlight=(hsb)
132
- uif.QueryInstance(Windows::PropertyStore) { |ps|
133
- ps.uiprop(:GlobalHighlightColor, Windows::PROPVARIANT[:uint, Windows::UI_HSB(*hsb)]).commit
134
- }
135
- end
136
-
137
- class GalleryItem < Windows::UISimplePropertySetCallback
138
- def initialize(label, categoryId = 0, image = nil)
139
- @label, @categoryId, @image = label, categoryId, image
140
-
141
- super()
142
- end
143
-
144
- attr_reader :label, :categoryId, :image
145
-
146
- def GetValue(pkey, pvalue)
147
- key, value = Windows::PROPERTYKEY.new(pkey), Windows::PROPVARIANT.new(pvalue)
148
-
149
- case key
150
- when Windows::UI_PKEY_CategoryId
151
- value.uint = @categoryId; Windows::S_OK
152
- when Windows::UI_PKEY_Label
153
- value.wstring = @label; Windows::S_OK
154
- when Windows::UI_PKEY_ItemImage
155
- FFI::MemoryPointer.new(:pointer) { |punk|
156
- Windows::UIImageFromBitmap.new.CreateImage(PARGB32.new(@image).handle, Windows::UI_OWNERSHIP_TRANSFER, punk)
157
-
158
- unk = Windows::Unknown.new(punk.read_pointer)
159
- value.unknown = unk
160
- unk.Release
161
- }
162
-
163
- Windows::S_OK
164
- else
165
- Windows::E_NOTIMPL
166
- end
167
- end
168
- end
169
-
170
- def initialize(_window, opts = {})
171
- handlers = {}
172
-
173
- opts.delete_if { |k, v|
174
- next false unless v.kind_of?(Proc)
175
-
176
- handlers[k] = v; true
177
- }
178
-
179
- _opts = {
180
- name: Application.name,
181
- resname: 'APPLICATION_RIBBON'
182
- }
183
- badopts = opts.keys - _opts.keys; raise "Bad option(s): #{badopts.join(', ')}." unless badopts.empty?
184
- _opts.merge!(opts)
185
-
186
- @creates = []
187
- @destroys = []
188
- @sizes = []
189
- @executesAllVerbs = {}
190
- @executesExecute = {}
191
- @executesPreview = {}
192
- @executesCancelPreview = {}
193
- @updatesAllKeys = {}
194
-
195
- @window = _window
196
-
197
- window.instance_variable_set(:@ribbon, self)
198
-
199
- class << window
200
- attr_reader :ribbon
201
- end
202
-
203
- @uich = Windows::UICommandHandler.new
204
-
205
- uich.instance_variable_set(:@ribbon, self)
206
-
207
- class << uich
208
- attr_reader :ribbon
209
-
210
- def Execute(*args) ribbon.execute(*args); Windows::S_OK end
211
- def UpdateProperty(*args) ribbon.update(*args); Windows::S_OK end
212
- end
213
-
214
- @uia = Windows::UIApplication.new
215
-
216
- uia.instance_variable_set(:@uich, @uich)
217
-
218
- class << uia
219
- attr_reader :uich, :uir
220
-
221
- def OnViewChanged(viewId, typeId, view, verb, reason)
222
- return Windows::S_OK unless typeId == Windows::UI_VIEWTYPE_RIBBON
223
-
224
- args = {
225
- viewId: viewId,
226
- typeId: typeId,
227
- view: view,
228
- verb: verb,
229
- reason: reason,
230
- ribbon: self,
231
- sender: self
232
- }
233
-
234
- case verb
235
- when Windows::UI_VIEWVERB_CREATE
236
- @uir = Windows::Unknown.new(view).QueryInstance(Windows::UIRibbon)
237
-
238
- uir.instance_variable_set(:@height, 0)
239
-
240
- class << uir
241
- attr_accessor :height
242
- end
243
-
244
- uich.ribbon.instance_variable_get(:@creates).each { |handler|
245
- (handler.arity == 0) ? handler.call : handler.call(args)
246
- }
247
- when Windows::UI_VIEWVERB_DESTROY
248
- uich.ribbon.instance_variable_get(:@destroys).each { |handler|
249
- (handler.arity == 0) ? handler.call : handler.call(args)
250
- }
251
-
252
- uir.Release
253
- when Windows::UI_VIEWVERB_SIZE
254
- FFI::MemoryPointer.new(:uint) { |p| uir.GetHeight(p); uir.height = p.read_int }
255
-
256
- uich.ribbon.instance_variable_get(:@sizes).each { |handler|
257
- (handler.arity == 0) ? handler.call : handler.call(args)
258
- }
259
- end
260
-
261
- Windows::S_OK
262
- rescue
263
- Fzeet.message %Q{#{$!}\n\n#{$!.backtrace.join("\n")}}, icon: :error
264
-
265
- Windows::S_OK
266
- end
267
-
268
- def OnCreateUICommand(*args) uich.QueryInterface(uich.class::IID, args[-1]); Windows::S_OK end
269
- end
270
-
271
- @hdll = Windows.LoadRibbonDll(_opts[:name])
272
-
273
- handlers.each { |k, v|
274
- k[1] = Object.const_get(k[1]) if k.length > 1
275
-
276
- on(*k, &v)
277
- }
278
-
279
- @uif = Windows::UIFramework.new
280
-
281
- uif.Initialize(window.handle, uia)
282
- uif.LoadUI(@hdll, "#{_opts[:resname]}\0".encode('utf-16le'))
283
-
284
- window.on(:destroy) {
285
- uich.Release
286
- uia.Release
287
- uif.Destroy; uif.Release
288
- }
289
- end
290
-
291
- attr_reader :hdll, :window, :uich, :uia, :uif
292
-
293
- def height; uia.uir.height end
294
-
295
- def execute(commandId, verb, key, value, props)
296
- args = {
297
- commandId: commandId,
298
- verb: verb,
299
- key: (key.null?) ? nil : Windows::PROPERTYKEY.new(key),
300
- value: (value.null?) ? nil : Windows::PROPVARIANT.new(value),
301
- props: (props.null?) ? nil : Windows::UISimplePropertySet.new(props),
302
- ribbon: self,
303
- sender: Command.new(self, commandId)
304
- }
305
-
306
- (handlers = @executesAllVerbs[commandId]) and handlers.each { |handler|
307
- (handler.arity == 0) ? handler.call : handler.call(args)
308
- }
309
-
310
- case verb
311
- when Windows::UI_EXECUTIONVERB_EXECUTE
312
- (handlers = @executesExecute[commandId]) and handlers.each { |handler|
313
- (handler.arity == 0) ? handler.call : handler.call(args)
314
- }
315
- when Windows::UI_EXECUTIONVERB_PREVIEW
316
- (handlers = @executesPreview[commandId]) and handlers.each { |handler|
317
- (handler.arity == 0) ? handler.call : handler.call(args)
318
- }
319
- when Windows::UI_EXECUTIONVERB_CANCELPREVIEW
320
- (handlers = @executesCancelPreview[commandId]) and handlers.each { |handler|
321
- (handler.arity == 0) ? handler.call : handler.call(args)
322
- }
323
- end
324
-
325
- self
326
- rescue
327
- Fzeet.message %Q{#{$!}\n\n#{$!.backtrace.join("\n")}}, icon: :error
328
-
329
- self
330
- end
331
-
332
- def update(commandId, key, value, newValue)
333
- args = {
334
- commandId: commandId,
335
- key: (key.null?) ? nil : Windows::PROPERTYKEY.new(key),
336
- value: (value.null?) ? nil : Windows::PROPVARIANT.new(value),
337
- newValue: (newValue.null?) ? nil : Windows::PROPVARIANT.new(newValue),
338
- ribbon: self,
339
- sender: Command.new(self, commandId)
340
- }
341
-
342
- (handlers = @updatesAllKeys[commandId]) and handlers.each { |handler|
343
- (handler.arity == 0) ? handler.call : handler.call(args)
344
- }
345
-
346
- self
347
- rescue
348
- Fzeet.message %Q{#{$!}\n\n#{$!.backtrace.join("\n")}}, icon: :error
349
-
350
- self
351
- end
352
-
353
- def invalidate(commandId, flags = Windows::UI_INVALIDATIONS_ALLPROPERTIES, key = nil)
354
- @uif.InvalidateUICommand(commandId, flags, key)
355
-
356
- self
357
- end
358
-
359
- def on(*args, &block)
360
- case args.size
361
- when 1
362
- case args[0]
363
- when /^create$/i; @creates << block
364
- when /^destroy$/i; @destroys << block
365
- when /^size$/i; @sizes << block
366
- when Integer; (@executesAllVerbs[args[0]] ||= []) << block
367
- else raise ArgumentError
368
- end
369
- when 2
370
- case args[0]
371
- when /^execute$/i; (@executesExecute[args[1]] ||= []) << block
372
- when /^preview$/i; (@executesPreview[args[1]] ||= []) << block
373
- when /^cancelpreview$/i; (@executesCancelPreview[args[1]] ||= []) << block
374
- when /^update$/i; (@updatesAllKeys[args[1]] ||= []) << block
375
- else raise ArgumentError
376
- end
377
- else raise ArgumentError
378
- end
379
-
380
- self
381
- end
382
-
383
- def fontPropsUpdate(args)
384
- return self unless args[:key] == Windows::UI_PKEY_FontProperties
385
-
386
- args[:value].unknown { |current|
387
- current.QueryInstance(Windows::PropertyStore) { |ps|
388
- yield ps
389
-
390
- args[:newValue].unknown = current
391
- }
392
- }
393
-
394
- self
395
- end
396
-
397
- def fontPropsChanged(args)
398
- return self unless args[:key] == Windows::UI_PKEY_FontProperties
399
-
400
- args[:props].uiprop(:FontProperties_ChangedProperties).unknown { |changed|
401
- changed.QueryInstance(Windows::PropertyStore) { |ps|
402
- yield ps
403
- }
404
- }
405
-
406
- self
407
- end
408
-
409
- def contextualUI(id, x, y)
410
- uif.UseInstance(Windows::UIContextualUI, :GetView, id) { |view|
411
- view.ShowAtLocation(x, y)
412
- }
413
-
414
- self
415
- end
416
- end
417
- end