Class: Fzeet::Dialog

Inherits:
Object
  • Object
show all
Defined in:
lib/fzeet/windows/user/Window/Dialog.rb

Instance Method Summary collapse

Constructor Details

#initialize(parent, opts = {}, &block) ⇒ Dialog

Returns a new instance of Dialog.



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/fzeet/windows/user/Window/Dialog.rb', line 9

def initialize(parent, opts = {}, &block)
	@parent = parent

	_opts = {
		xstyle: [:noparentnotify],
		caption: Application.name,
		style: [:sysmenu, :visible],
		x: 0,
		y: 0,
		width: 200,
		height: 150,
		modal: false
	}
	badopts = opts.keys - _opts.keys; raise "Bad option(s): #{badopts.join(', ')}." unless badopts.empty?
	_opts.merge!(opts)

	_opts[:xstyle] = Fzeet.flags(_opts[:xstyle], *self.class::Prefix[:xstyle])
	_opts[:caption] = _opts[:caption].to_s
	_opts[:style] = Fzeet.flags(_opts[:style], *self.class::Prefix[:style])

	@messages ||= {}
	@commands ||= {}
	@notifies ||= {}

	@processed = [0, 0]

	dt = Windows::DLGTEMPLATE.new

	dt[:style] = _opts[:style]
	dt[:dwExtendedStyle] = _opts[:xstyle]
	dt[:x] = _opts[:x]
	dt[:y] = _opts[:y]
	dt[:cx] = _opts[:width]
	dt[:cy] = _opts[:height]

	on(:initdialog) { self.text = _opts[:caption] }

	on(:initdialog, &block) if block

	unless _opts[:modal]
		@handle = Windows.DetonateLastError(FFI::Pointer::NULL, :CreateDialogIndirectParam,
			Windows.GetModuleHandle(nil),
			dt,
			@parent && @parent.handle,
			BasicWindow::DialogProc,
			object_id
		)

		self.dialog = true
	else
		@result = Windows.DetonateLastError([-1, 0], :DialogBoxIndirectParam,
			Windows.GetModuleHandle(nil),
			dt,
			@parent && @parent.handle,
			BasicWindow::DialogProc,
			object_id
		)
	end
end

Instance Method Details

#end(result) ⇒ Object



69
# File 'lib/fzeet/windows/user/Window/Dialog.rb', line 69

def end(result) Windows.DetonateLastError(0, :EndDialog, @handle, Command[result]); self end

#resultObject



71
# File 'lib/fzeet/windows/user/Window/Dialog.rb', line 71

def result; DialogResult.new(@result) end