class Fzeet::FolderDialog
Constants
- DialogStruct
- HookProc
Public Class Methods
new(opts = {})
click to toggle source
Calls superclass method
Fzeet::CommonDialog::new
# File lib/fzeet/windows/comdlg/FileDialog.rb, line 217 def initialize(opts = {}) _opts = { root: nil, displayName: nil, title: nil, flags: 0, hook: nil, param: 0, image: 0 } badopts = opts.keys - _opts.keys; raise "Bad option(s): #{badopts.join(', ')}." unless badopts.empty? _opts.merge!(opts) @struct = DialogStruct.new @struct[:ulFlags] = Fzeet.flags([:returnonlyfsdirs, :usenewui], :bif_) @struct[:lpfn] = HookProc @struct[:lParam] = object_id super() end
Public Instance Methods
path()
click to toggle source
# File lib/fzeet/windows/comdlg/FileDialog.rb, line 239 def path; @path && @path.dup end
show(window = Application.window)
click to toggle source
# File lib/fzeet/windows/comdlg/FileDialog.rb, line 241 def show(window = Application.window) @struct[:hwndOwner] = window.handle @path = nil DialogResult.new(((pidl = Windows.SHBrowseForFolder(@struct)).null?) ? Windows::IDCANCEL : Windows::IDOK).tap { |result| next unless result.ok? FFI::MemoryPointer.new(:char, 4096) { |p| Windows.SHGetPathFromIDList(pidl, p) @path = p.read_string } } ensure Windows.CoTaskMemFree(pidl) end