Directory dialog
New directory dialog - just an option for the existing file dialog really.
This commit is contained in:
parent
b98a091e0b
commit
8e7d7012ce
2 changed files with 32 additions and 4 deletions
|
@ -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.
|
||||
|
|
|
@ -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");
|
||||
|
|
Loading…
Add table
Reference in a new issue