diff options
author | Florrie <towerofnix@gmail.com> | 2018-01-19 09:29:57 -0400 |
---|---|---|
committer | Florrie <towerofnix@gmail.com> | 2018-01-19 09:29:57 -0400 |
commit | 6ee1936266dda3bd22e4412a7b51cdc6e3c396d5 (patch) | |
tree | 8b07b4ed2d6ebab22814c792c4e1c6e29249498f /ui/tools/OpenFileDialog.js | |
parent | 159c042e3cddf1f585812840b4189295f2e5ebba (diff) |
Pass false to firstInput to not select the form if it wasn't already selected
Diffstat (limited to 'ui/tools/OpenFileDialog.js')
-rw-r--r-- | ui/tools/OpenFileDialog.js | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/ui/tools/OpenFileDialog.js b/ui/tools/OpenFileDialog.js new file mode 100644 index 0000000..92bd4af --- /dev/null +++ b/ui/tools/OpenFileDialog.js @@ -0,0 +1,110 @@ +const path = require('path') + +const Button = require('../form/Button') +const Dialog = require('../Dialog') +const FilePickerForm = require('./FilePickerForm') +const Form = require('../form/Form') +const Label = require('../Label') +const TextInput = require('../form/TextInput') + +module.exports = class OpenFileDialog extends Dialog { + constructor() { + super() + + this.visible = false + + this.form = new Form() + this.pane.addChild(this.form) + + this.filePathLabel = new Label('Enter file path:') + this.filePathInput = new TextInput() + this.openButton = new Button('Open') + this.cancelButton = new Button('Cancel') + + this.filePickerForm = new FilePickerForm() + this.filePickerForm.captureTab = false + + this.form.addChild(this.filePathLabel) + this.form.addInput(this.filePathInput) + this.form.addInput(this.filePickerForm) + this.form.addInput(this.openButton) + this.form.addInput(this.cancelButton) + + this._resolve = null + + this.openButton.on('pressed', () => { + this._resolve(this.filePathInput.value) + }) + + this.filePathInput.on('value', () => { + this._resolve(this.filePathInput.value) + }) + + { + const cb = append => p => { + this.filePathInput.setValue((path.relative(__dirname, p) || '.') + append) + } + + this.filePickerForm.on('selected', cb('')) + this.filePickerForm.on('browsingDirectory', cb('/')) + } + + this.cancelButton.on('pressed', () => { + this._resolve(null) + }) + + const dir = (this.lastFilePath + ? path.relative(__dirname, path.dirname(this.lastFilePath)) + '/' + : './') + + this.filePathInput.setValue(dir) + this.filePickerForm.fillItems(dir) + } + + fixLayout() { + super.fixLayout() + + this.pane.w = Math.min(this.contentW, 40) + this.pane.h = Math.min(this.contentH, 20) + this.pane.centerInParent() + + this.form.w = this.pane.contentW + this.form.h = this.pane.contentH + + this.filePathLabel.x = 0 + this.filePathLabel.y = 0 + + this.filePathInput.x = this.filePathLabel.right + 2 + this.filePathInput.y = this.filePathLabel.y + this.filePathInput.w = this.form.contentW - this.filePathInput.x + + this.filePickerForm.x = 0 + this.filePickerForm.y = this.filePathInput.y + 2 + this.filePickerForm.w = this.form.contentW + this.filePickerForm.h = this.form.contentH - this.filePickerForm.y - 2 + + this.openButton.x = 0 + this.openButton.y = this.form.contentH - 1 + + this.cancelButton.x = this.openButton.right + 2 + this.cancelButton.y = this.openButton.y + } + + focused() { + this.form.firstInput() + } + + go() { + this.visible = true + this.root.select(this) + + return new Promise(resolve => { + this._resolve = resolve + }).then(filePath => { + this.visible = false + this.lastFilePath = filePath + return filePath + }) + } +} + |