1
0
Fork 0

Directory dialog

New directory dialog - just an option for the existing file dialog really.
This commit is contained in:
ThorstenB 2011-08-21 15:00:45 +02:00
parent b98a091e0b
commit 8e7d7012ce
2 changed files with 32 additions and 4 deletions

View file

@ -505,7 +505,7 @@ var OverlaySelector = {
# selector.open();
#
var FileSelector = {
new: func(callback, title, button, pattern = nil, dir = "", file = "", dotfiles = 0) {
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)
@ -520,6 +520,7 @@ var FileSelector = {
m.set_button(button);
m.set_directory(dir);
m.set_file(file);
m.set_show_files(show_files);
m.set_dotfiles(dotfiles);
m.set_pattern(pattern);
m.cblistener = setlistener(data.getNode("path", 1), callback);
@ -530,6 +531,7 @@ var FileSelector = {
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_show_files: func(show) { me.data.getNode("show-files", 1).setValue(show) },
set_dotfiles: func(dot) { me.data.getNode("dotfiles", 1).setBoolValue(dot) },
set_pattern: func(pattern) {
me.data.removeChildren("pattern");
@ -545,6 +547,14 @@ var FileSelector = {
},
};
##
# DirSelector - convenience "class" (indeed using a reconfigured FileSelector)
#
var DirSelector = {
new: func(callback, title, button, dir = "") {
return FileSelector.new(callback, title, button, nil, dir, "", 0, show_files=0);
}
};
##
# Save/load flight menu functions.

View file

@ -94,6 +94,13 @@
<command>nasal</command>
<script>file_input()</script>
</binding>
<visible>
<equals> <!-- yes, odd condition. easier ways somehow fail,
since we're changing the values with Nasal below... -->
<value>1</value>
<value>1</value>
</equals>
</visible>
</input>
<button>
@ -134,6 +141,9 @@
var path = dlg.getNode("path", 1);
var dotfiles = dlg.getNode("dotfiles", 1);
dotfiles.setBoolValue(dotfiles.getValue());
# disable files to show a directory dialog only
self.show_files = dlg.getNode("show-files",1).getValue();
self.getNode("group[1]/input/visible/equals/value").setValue(self.show_files);
var kbdctrl = props.globals.getNode("/devices/status/keyboard/ctrl", 1);
var kbdshift = props.globals.getNode("/devices/status/keyboard/shift", 1);
@ -177,7 +187,7 @@
if (stat[11] == "dir")
append(dirs, e ~ "/");
elsif (!size(pattern) or matches(e))
elsif (self.show_files and (!size(pattern) or matches(e)))
append(files, e);
}
@ -239,7 +249,10 @@
var ok = func {
dir_input();
file_input();
if (self.show_files)
file_input();
else
current.file = "";
var p = string.normpath(current.dir ~ "/" ~ current.file);
var stat = io.stat(p);
path.setValue(stat != nil and stat[11] == "dir" ? p ~ "/" : p);
@ -254,7 +267,12 @@
var t = title.getValue();
if (t == nil or t == "")
t = "Select File";
{
if (self.show_files)
t = "Select Directory";
else
t = "Select File";
}
self.getNode("group[0]/text/label").setValue(t);
current.dir = (var d = dir.getValue()) != nil and d != "" ? d : getprop("/sim/fg-current");