aircraft.nas: make aircraft.livery a wrapper for gui.OverlaySelector
gui.nas: add file name to stored data (needed for MP-livery)
This commit is contained in:
parent
4b9f8ecb1f
commit
da7d1ded71
2 changed files with 18 additions and 63 deletions
|
@ -510,56 +510,10 @@ var timer = {
|
|||
# aircraft.livery.next();
|
||||
#
|
||||
var livery = {
|
||||
init: func(livery_dir, name_path = "sim/model/livery/name", sort_path = nil) {
|
||||
me.dir = livery_dir;
|
||||
if (me.dir[-1] != `/`)
|
||||
me.dir ~= "/";
|
||||
me.name_path = name_path;
|
||||
me.sort_path = sort_path or name_path;
|
||||
me.rescan();
|
||||
aircraft.data.add(name_path);
|
||||
me.dialog = gui.Dialog.new("livery-select");
|
||||
},
|
||||
rescan: func {
|
||||
me.data = [];
|
||||
var path = getprop("/sim/fg-root") ~ "/" ~ me.dir;
|
||||
foreach (var file; directory(path)) {
|
||||
if (substr(file, -4) != ".xml")
|
||||
continue;
|
||||
var n = io.read_properties(path ~ file);
|
||||
var name = n.getNode(me.name_path);
|
||||
var index = n.getNode(me.sort_path);
|
||||
if (name == nil or index == nil)
|
||||
continue;
|
||||
append(me.data, [name.getValue(), index.getValue(), n.getValues(),
|
||||
substr(file, 0, size(file) - 4)]);
|
||||
}
|
||||
me.data = sort(me.data, func(a, b) {
|
||||
num(a[1]) == nil or num(b[1]) == nil ? cmp(a[1], b[1]) : a[1] - b[1];
|
||||
});
|
||||
me.select(getprop(me.name_path));
|
||||
},
|
||||
# select by index (out-of-bounds indices are wrapped)
|
||||
set: func(i) {
|
||||
if (i < 0)
|
||||
i = size(me.data) - 1;
|
||||
if (i >= size(me.data))
|
||||
i = 0;
|
||||
me.current = i;
|
||||
props.globals.setValues(me.data[i][2]);
|
||||
setprop("sim/model/livery/file", me.data[i][3]);
|
||||
},
|
||||
# select by name
|
||||
select: func(name) {
|
||||
forindex (var i; me.data)
|
||||
if (me.data[i][0] == name)
|
||||
me.set(i);
|
||||
},
|
||||
next: func {
|
||||
me.set(me.current + 1);
|
||||
},
|
||||
previous: func {
|
||||
me.set(me.current - 1);
|
||||
init: func(dir, nameprop = "/sim/model/livery/name", sortprop = nil) {
|
||||
data.add(nameprop);
|
||||
me.parents = [me.dialog = gui.OverlaySelector.new("Select Livery", dir, nameprop,
|
||||
sortprop, func setprop("sim/model/livery/file", me.data[me.current][2]))];
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
@ -173,7 +173,6 @@ var Widget = {
|
|||
};
|
||||
|
||||
|
||||
|
||||
##
|
||||
# Dialog class. Maintains one XML dialog.
|
||||
#
|
||||
|
@ -277,14 +276,16 @@ var Dialog = {
|
|||
# dir ... directory where to find the XML overlay files,
|
||||
# relative to FG_ROOT
|
||||
# nameprop ... property in an overlay file that contains the name
|
||||
# The result is written to this property in the
|
||||
# The result is written to this place in the
|
||||
# property tree.
|
||||
# sortprop ... property in an overlay file that should be used
|
||||
# as sorting criterion, if alphabetic sorting by
|
||||
# name is undesirable. Use nil if you don't need
|
||||
# this, but want to set a callback function.
|
||||
# callback ... function that's called after a new entry was chosen
|
||||
# It is called with these arguments:
|
||||
# callback(<number>, <name>, <sort-criterion>, <path>)
|
||||
# callback ... function that's called after a new entry was chosen,
|
||||
# with these arguments:
|
||||
#
|
||||
# callback(<number>, <name>, <sort-criterion>, <file>, <path>)
|
||||
#
|
||||
# EXAMPLE:
|
||||
# aircraft.data.add("sim/model/pilot"); # autosave the pilot
|
||||
|
@ -299,8 +300,7 @@ var OverlaySelector = {
|
|||
new: func(title, dir, nameprop, sortprop = nil, callback = nil) {
|
||||
var name = "overlay-select-";
|
||||
var data = props.globals.getNode("/sim/gui/dialogs/", 1);
|
||||
var i = nil;
|
||||
for (i = 1; 1; i += 1)
|
||||
for (var i = 1; 1; i += 1)
|
||||
if (data.getNode(name ~ i, 0) == nil)
|
||||
break;
|
||||
data = data.getNode(name ~= i, 1);
|
||||
|
@ -334,9 +334,11 @@ var OverlaySelector = {
|
|||
if (substr(file, -4) != ".xml")
|
||||
continue;
|
||||
var n = io.read_properties(me.dir ~ file);
|
||||
var name = n.getNode(me.nameprop, 1).getValue() or "[NO NAME]";
|
||||
var index = n.getNode(me.sortprop, 1).getValue() or 0;
|
||||
append(me.data, [name, index, me.dir ~ file]);
|
||||
var name = n.getNode(me.nameprop, 1).getValue();
|
||||
var index = n.getNode(me.sortprop, 1).getValue();
|
||||
if (name == nil or index == nil)
|
||||
continue;
|
||||
append(me.data, [name, index, substr(file, 0, size(file) - 4), me.dir ~ file]);
|
||||
me.data = sort(me.data, func(a, b) num(a[1]) == nil or num(b[1]) == nil
|
||||
? cmp(a[1], b[1]) : a[1] - b[1]);
|
||||
}
|
||||
|
@ -348,7 +350,7 @@ var OverlaySelector = {
|
|||
set: func(index) {
|
||||
var last = me.current;
|
||||
me.current = math.mod(index, size(me.data));
|
||||
io.read_properties(me.data[me.current][2], props.globals);
|
||||
io.read_properties(me.data[me.current][3], props.globals);
|
||||
if (last != me.current and me.callback != nil)
|
||||
call(me.callback, [me.current] ~ me.data[me.current], me);
|
||||
},
|
||||
|
@ -399,8 +401,7 @@ var FileSelector = {
|
|||
new: func(callback, title, button, pattern = nil, dir = "", file = "", dotfiles = 0) {
|
||||
var name = "file-select-";
|
||||
var data = props.globals.getNode("/sim/gui/dialogs/", 1);
|
||||
var i = nil;
|
||||
for (i = 1; 1; i += 1)
|
||||
for (var i = 1; 1; i += 1)
|
||||
if (data.getNode(name ~ i, 0) == nil)
|
||||
break;
|
||||
data = data.getNode(name ~= i, 1);
|
||||
|
|
Loading…
Add table
Reference in a new issue