# Object Types --> click, textbox, label
var font_mapper = func(family, weight)
{
if( family == "Liberation Sans" and weight == "normal" )
return "LiberationFonts/LiberationSans-Regular.ttf";
};
var generators = {
click: func() {
return func(widget, svg_element) {
svg_element.addListener("click", func {
object.function();
})
}
}
};
var new = func(par) {
var m = {parents:[par]};
return m;
}
var mfd = {
activePage: "",
activeMenu: "",
pages: {},
menus: {},
menuLayers: [],
pageLayers: [],
svgCache: {},
new: func(placement, svg_path, svg_cache) {
var t = {parents:[mfd]};
t.display = canvas.new({
"name": "MFD Display",
"size": [800, 1024],
"view": [800, 1024],
"mipmapping": 1
});
t.display.addPlacement({"node": placement});
t.svgGroup = t.display.createGroup(); # SVG Objects for pages
canvas.parsesvg(t.svgGroup, svg_path, {'font-mapper':font_mapper});
foreach(var element; svg_cache) {
t.svgCache[element] = t.svgGroup.getElementById(element);
}
return t;
},
addMenu: func(menu) {
me.menus[menu.name] = menu;
append(me.menuLayers, menu.layer);
me.svgCache[menu.layer] = me.svgGroup.getElementById(menu.layer);
},
addPage: func(page) {
me.pages[page.name] = page;
append(me.pageLayers, page.layer);
me.svgCache[page.layer] = me.svgGroup.getElementById(page.layer);
},
loadPage: func(page) {
if(page != me.activePage) {
# Clear all other page layers and show active page layer
foreach(var layer; me.pageLayers) {
me.svgCache[layer].hide();
}
me.svgCache[me.pages[page].layer].show();
# Run page load function
me.pages[page].load(me);
me.loadMenu(me.pages[page].menu);
}
},
loadMenu: func(menu) {
if(menu != me.activeMenu) {
# Clear all other page layers and show active page layer
foreach(var layer; me.menuLayers) {
me.svgCache[layer].hide();
}
me.svgCache[me.menus[menu].layer].show();
# Run page load function
me.menus[menu].load(me);
}
},
showDlg: func {
if(getprop("sim/instrument-options/canvas-popup-enable")) {
var dlg = canvas.Window.new([400, 512], "dialog");
dlg.setCanvas(me.display);
}
}
};
var svg_elements = [];
var capt_mfd = mfd.new("mfd.l", "Aircraft/A380/Models/Instruments/MFD/display.svg", svg_elements);
var fo_mfd = mfd.new("mfd.r", "Aircraft/A380/Models/Instruments/MFD/display.svg", svg_elements);
print("Airbus Multi-Function Displays Initialized");
var fms_active_fpln = {
name: 'fms_active_fpln',
layer: 'fms_active_fpln',
menu: 'menu_fms',
widgets: [
#FIXME
],
load: func(m) {
}
};
capt_mfd.addPage(new(fms_active_fpln));
fo_mfd.addPage(new(fms_active_fpln));
activePage: "",
activeMenu: "",
pages: {},
menus: {},
menuLayers: [],
pageLayers: [],
svgCache: {},
var m = {parents:[Class]}
m.field = [];
m.pages = {};
...
struct mfd {
static std::string activePage;
static std::string activeMenu;
static std::map<..> pages;
static std::map<..> menus;
static std::vector<...> menuLayers;
static std::vector<...> pageLayers;
static std::map<...> svgCache;
};
Users browsing this forum: No registered users and 5 guests