1
0
Fork 0

GUI: switch to internal file dialog interface.

This should give no visible change on platforms other than Mac. On Mac file-dialogs (open, save, choose dir) are now Cocoa native panels, not PUI. If someone wants to create a Windows equivalent, the API is pretty trivial.
This commit is contained in:
James Turner 2013-01-26 14:16:00 +00:00
parent 1c9f110192
commit 124017a696

View file

@ -544,47 +544,48 @@ var OverlaySelector = {
# #
var FileSelector = { var FileSelector = {
new: func(callback, title, button, pattern = nil, dir = "", file = "", dotfiles = 0, show_files=1) { new: func(callback, title, button, pattern = nil, dir = "", file = "", dotfiles = 0, show_files=1) {
var name = "file-select-";
var data = props.globals.getNode("/sim/gui/dialogs/", 1);
for (var i = 1; 1; i += 1) var usage = gui.FILE_DIALOG_OPEN_FILE;
if (data.getNode(name ~ i, 0) == nil) if (!show_files) {
break; usage = gui.FILE_DIALOG_CHOOSE_DIR;
data = data.getNode(name ~= i, 1); } else if (button == 'Save') {
# nasty, should make this explicit
var m = Dialog.new(data.getNode("dialog", 1), "gui/dialogs/file-select.xml", name); usage = gui.FILE_DIALOG_SAVE_FILE;
m.parents = [FileSelector, Dialog]; }
m.data = data;
m = { parents:[FileSelector],
_inner: gui._createFileDialog(usage)};
m.set_title(title); m.set_title(title);
m.set_button(button); m.set_button(button);
m.set_directory(dir); m.set_directory(dir);
m.set_file(file); m.set_file(file);
m.set_show_files(show_files);
m.set_dotfiles(dotfiles); m.set_dotfiles(dotfiles);
m.set_pattern(pattern); m.set_pattern(pattern);
m.cblistener = setlistener(data.getNode("path", 1), callback);
m._inner.setCallback(func (path) {
var node = props.Node.new();
node.setValue(path);
callback(node);
} );
return m; return m;
}, },
# setters only take effect after the next call to open() # setters only take effect after the next call to open()
set_title: func(title) { me.data.getNode("title", 1).setValue(title) }, set_title: func(title) { me._inner.title = title },
set_button: func(button) { me.data.getNode("button", 1).setValue(button) }, set_button: func(button) { me._inner.button = button },
set_directory: func(dir) { me.data.getNode("directory", 1).setValue(dir) }, set_directory: func(dir) { me._inner.directory = directory },
set_file: func(file) { me.data.getNode("selection", 1).setValue(file) }, set_file: func(file) { me._inner.placeholder = file },
set_show_files: func(show) { me.data.getNode("show-files", 1).setValue(show) }, set_dotfiles: func(dot) { me._inner.show_hidden = dot },
set_dotfiles: func(dot) { me.data.getNode("dotfiles", 1).setBoolValue(dot) }, set_pattern: func(pattern) { me._inner.pattern = (pattern == nil) ? [] : pattern },
set_pattern: func(pattern) {
me.data.removeChildren("pattern"); open: func() { me._inner.open(); },
if (pattern != nil) close: func() { me._inner.close(); },
forindex (var i; pattern)
me.data.getChild("pattern", i, 1).setValue(pattern[i]);
},
del: func { del: func {
me.close(); me._inner.close();
delete(me.instance, me.name); me._inner = nil;
removelistener(me.cblistener);
me.data.remove();
# call inherited 'del'
me.parents = subvec(me.parents,1);
me.del();
}, },
}; };