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.



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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/fzeet/windows/user/Window/Dialog.rb', line 28

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



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

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

#resultObject



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

def result; DialogResult.new(@result) end