1
0
Fork 0

- add setters to the gui.FileSelector, so that title/button text/dir/file/

dotfile flag can be set later (and take effect after the next open())
- add Alt-".." binding: change to $PWD (which is the default starting dir)
This commit is contained in:
mfranz 2007-06-17 22:56:22 +00:00
parent d9945b43ce
commit 31eff644c1
2 changed files with 29 additions and 15 deletions

View file

@ -239,11 +239,11 @@ Dialog = {
##
# FileSelector class (derived from Dialog class).
#
# SYNOPSIS: FileSelector.new(<callback> [, <title> [, <button> [, <dir> [, <file> [, <dotfiles>]]]])
# SYNOPSIS: FileSelector.new(<callback>, <title>, <button> [, <dir> [, <file> [, <dotfiles>]]])
#
# callback ... callback function that gets return value as cmdarg().getValue()
# title ... dialog title
# button ... button text ("OK" by default, but should say "Save", "Load", etc.))
# button ... button text (should say "Save", "Load", etc. and not just "OK")
# dir ... starting dir ($FG_ROOT if unset)
# file ... pre-selected default file name
# dotfiles ... flag that decids whether UNIX dotfiles should be shown (1) or not (0)
@ -252,11 +252,14 @@ Dialog = {
#
# var report = func { print("file ", cmdarg().getValue(), " selected") }
# var selector = gui.FileSelector.new(report, "Save Flight", "Save", "/tmp", "flight.sav");
# selector.open(); # see the Dialog class for other methods
# selector.open();
#
# selector.close();
# selector.set_title("Save Another Flight");
# selector.open();
#
var FileSelector = {
new : func(callback, title = "File Selection", button = "OK",
dir = "", file = "", dotfiles = 0) {
new : func(callback, title, button, dir = "", file = "", dotfiles = 0) {
var name = "file-select-";
var data = props.globals.getNode("/sim/gui/dialogs/", 1);
var i = nil;
@ -264,17 +267,24 @@ var FileSelector = {
if (data.getNode(name ~ i, 0) == nil)
break;
data = data.getNode(name ~= i, 1);
var m = Dialog.new(data.getNode("dialog", 1), "gui/dialogs/file-select.xml", name);
m.parents = [FileSelector, Dialog];
m.data = data;
m.data.getNode("title", 1).setValue(title);
m.data.getNode("button", 1).setValue(button);
m.data.getNode("directory", 1).setValue(dir);
m.data.getNode("selection", 1).setValue(file);
m.data.getNode("dotfiles", 1).setBoolValue(dotfiles);
m.set_title(title);
m.set_button(button);
m.set_directory(dir);
m.set_file(file);
m.set_dotfiles(dotfiles);
m.cblistener = setlistener(data.getNode("path", 1), callback);
return m;
},
# setters only take effect after the next call to open()
set_title : func(title) { me.data.getNode("title", 1).setValue(title) },
set_button : func(button) { me.data.getNode("button", 1).setValue(button) },
set_directory : func(dir) { me.data.getNode("directory", 1).setValue(dir) },
set_file : func(file) { me.data.getNode("selection", 1).setValue(file) },
set_dotfiles : func(dot) { me.data.getNode("dotfiles", 1).setBoolValue(dot) },
del : func {
me.close();
delete(me.instance, me.name);

View file

@ -4,6 +4,7 @@
Ctrl-click on "." toggles display of hidden Unix filex (dotfiles)
Ctrl-click on ".." enters $FG_ROOT
Shift-click on ".." enters $FG_HOME
Alt-click on ".." enters current working directory
-->
<PropertyList>
@ -129,8 +130,11 @@
var kbdctrl = props.globals.getNode("/devices/status/keyboard/ctrl", 1);
var kbdshift = props.globals.getNode("/devices/status/keyboard/shift", 1);
var kbdalt = props.globals.getNode("/devices/status/keyboard/alt", 1);
var current = { dir : "", file : "" };
var isletter = func(c) { c >= `A` and `Z` >= c or c >= `a` and `z` >= c }
var squeeze = func(s, n) {
return n >= size(s) ? s : "... " ~ substr(s, size(s) - n);
}
@ -157,7 +161,7 @@
continue;
var stat = io.stat(d ~ "/" ~ e);
if (stat == nil) # dead link
if (stat == nil) # dead link, no permission
continue;
if (io.isdir(stat[2]))
@ -172,7 +176,7 @@
list.getChild("value", i, 1).setValue(entries[i]);
dir.setValue(d);
gui.dialog_apply("dir-input", "list");
gui.dialog_update(dlgname, "dir-input", "list");
return 1;
}
@ -189,6 +193,8 @@
new = getprop("/sim/fg-root");
elsif (kbdshift.getValue())
new = getprop("/sim/fg-home");
elsif (kbdalt.getValue())
new = getprop("/sim/fg-current");
else
new = current.dir ~ "/..";
} elsif (e[size(e) - 1] == `/`) {
@ -202,7 +208,6 @@
if (update(p))
current.dir = p;
selection.setValue("");
gui.dialog_update(dlgname, "list", "file-input"); ## apply?
}
}
@ -211,7 +216,6 @@
}
var dir_input = func {
print("dir input");
var p = io.fixpath(dir.getValue());
if (update(p))
current.dir = p;
@ -244,7 +248,7 @@
t = "Select File";
self.getNode("group[0]/text/label").setValue(t);
current.dir = (var d = dir.getValue()) != nil and d != "" ? d : getprop("/sim/fg-root");
current.dir = (var d = dir.getValue()) != nil and d != "" ? d : getprop("/sim/fg-current");
current.file = (var d = file.getValue()) != nil and d != "" ? d : "";
gui.dialog_update(dlgname, "file-input"); ## dir-input ?
update(io.fixpath(current.dir));