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