Add dialog API.
Supported APIs: * openFile * openMultiFiles * openFolder * saveAs Each API is asynchronous and accepts a callback.
This commit is contained in:
parent
42f10a15d5
commit
4aeb5e1388
11 changed files with 344 additions and 5 deletions
41
renderer/api/lib/dialog.coffee
Normal file
41
renderer/api/lib/dialog.coffee
Normal file
|
@ -0,0 +1,41 @@
|
|||
ipc = require 'ipc'
|
||||
|
||||
callbackId = 0
|
||||
callbacks = {}
|
||||
|
||||
storeCallback = (callback) ->
|
||||
throw new TypeError('Bad argument') unless typeof callback is 'function'
|
||||
|
||||
++callbackId
|
||||
callbacks[callbackId] = callback
|
||||
callbackId
|
||||
|
||||
makeCallback = (id, args...) ->
|
||||
callbacks[id].call global, args...
|
||||
delete callbacks[id]
|
||||
|
||||
# Force loading dialog code in browser.
|
||||
remote.require 'dialog'
|
||||
|
||||
ipc.on 'ATOM_RENDERER_DIALOG', (id, args...) ->
|
||||
makeCallback(id, args...)
|
||||
|
||||
callFileDialogs = (options, callback, args...) ->
|
||||
if typeof options is 'function'
|
||||
callback = options
|
||||
options = {}
|
||||
|
||||
ipc.sendChannel 'ATOM_BROWSER_FILE_DIALOG', storeCallback(callback), args..., options
|
||||
|
||||
module.exports =
|
||||
openFolder: (options, callback) ->
|
||||
callFileDialogs options, callback, 1, 'Open Folder'
|
||||
|
||||
saveAs: (options, callback) ->
|
||||
callFileDialogs options, callback, 2, 'Save As'
|
||||
|
||||
openFile: (options, callback) ->
|
||||
callFileDialogs options, callback, 3, 'Open File'
|
||||
|
||||
openMultiFiles: (options, callback) ->
|
||||
callFileDialogs options, callback, 4, 'Open Files'
|
Loading…
Add table
Add a link
Reference in a new issue