Add sorting and ordering controls for layer control (layerprio attribute)

This commit is contained in:
Mike Primm 2011-09-14 13:00:35 +08:00 committed by mikeprimm
parent eaaa5ceb49
commit dfcd34d4dd
8 changed files with 112 additions and 12 deletions

View file

@ -698,6 +698,46 @@ DynMap.prototype = {
}
}
return null;
},
layersetlist: [],
addToLayerSelector: function(layer, name, priority) {
var me = this;
var i;
for(i = 0; i < me.layersetlist.length; i++) {
if(me.layersetlist[i].layer === layer) {
me.layersetlist[i].priority = priority;
me.layersetlist[i].name = name;
break;
}
}
if(i >= me.layersetlist.length) {
me.layersetlist[i] = { layer: layer, priority: priority, name: name };
}
me.layersetlist.sort(function(a, b) {
if(a.priority != b.priority)
return a.priority - b.priority;
else
return ((a.name < b.name) ? -1 : ((a.name > b.name) ? 1 : 0));
});
for(i = 0; i < me.layersetlist.length; i++) {
me.layercontrol.removeLayer(me.layersetlist[i].layer);
}
for(i = 0; i < me.layersetlist.length; i++) {
me.layercontrol.addOverlay(me.layersetlist[i].layer, me.layersetlist[i].name);
}
},
removeFromLayerSelector: function(layer) {
var me = this;
var i;
for(i = 0; i < me.layersetlist.length; i++) {
if(me.layersetlist[i].layer === layer) {
me.layersetlist.splice(i, 1);
me.layercontrol.removeLayer(layer);
break;
}
}
}
// TODO: Enable hash-links.
/* updateLink: function() {

View file

@ -20,14 +20,15 @@ componentconstructors['markers'] = function(dynmap, configuration) {
$.each(data.sets, function(name, markerset) {
var ms = dynmapmarkersets[name];
if(!ms) {
ms = { label: markerset.label, hide: markerset.hide, markers: {} } ;
ms = { label: markerset.label, hide: markerset.hide, layerprio: markerset.layerprio, markers: {} } ;
createMarkerSet(ms, ts);
}
else {
if(ms.label != markerset.label) {
ms.label = markerset.label;
dynmap.layercontrol.removeLayer(ms.layergroup);
dynmap.layercontrol.addOverlay(ms.layergroup, ms.label);
//dynmap.layercontrol.removeLayer(ms.layergroup);
//dynmap.layercontrol.addOverlay(ms.layergroup, ms.label);
dynmap.addToLayerSelector(ms.layergroup, ms.label, ms.layerprio || 0);
}
ms.markers = {};
ms.hide = markerset.hide;
@ -73,7 +74,9 @@ componentconstructors['markers'] = function(dynmap, configuration) {
set.timestamp = ts;
if(!set.hide)
dynmap.map.addLayer(set.layergroup);
dynmap.layercontrol.addOverlay(set.layergroup, set.label);
// dynmap.layercontrol.addOverlay(set.layergroup, set.label);
dynmap.addToLayerSelector(set.layergroup, set.label, set.layerprio || 0);
}
$(dynmap).bind('component.markers', function(event, msg) {
@ -96,20 +99,24 @@ componentconstructors['markers'] = function(dynmap, configuration) {
}
else if(msg.msg == 'setupdated') {
if(!dynmapmarkersets[msg.id]) {
dynmapmarkersets[msg.id] = { label: msg.label, markers:{} };
dynmapmarkersets[msg.id] = { label: msg.label, layerprio: msg.layerprio, markers:{} };
createMarkerSet(dynmapmarkersets[msg.id]);
}
else {
if(dynmapmarkersets[msg.id].label != msg.label) {
dynmapmarkersets[msg.id].label = msg.label;
dynmap.layercontrol.removeLayer(dynmapmarkersets[msg.id].layergroup);
dynmap.layercontrol.addOverlay(dynmapmarkersets[msg.id].layergroup, dynmapmarkersets[msg.id].label);
//dynmap.layercontrol.removeLayer(dynmapmarkersets[msg.id].layergroup);
//dynmap.layercontrol.addOverlay(dynmapmarkersets[msg.id].layergroup, dynmapmarkersets[msg.id].label);
dynmap.addToLayerSelector(dynmapmarkersets[msg.id].layergroup, dynmapmarkersets[msg.id].label,
dynmapmarkersets[msg.id].layerprio || 0);
}
}
}
else if(msg.msg == 'setdeleted') {
if(dynmapmarkersets[msg.id]) {
dynmap.layercontrol.removeLayer(dynmapmarkersets[msg.id].layergroup);
//dynmap.layercontrol.removeLayer(dynmapmarkersets[msg.id].layergroup);
dynmap.removeFromLayerSelector(dynmapmarkersets[msg.id].layergroup);
delete dynmapmarkersets[msg.id].layergroup;
delete dynmapmarkersets[msg.id];
}

View file

@ -130,5 +130,6 @@ componentconstructors['playermarkers'] = function(dynmap, configuration) {
dynmap.playermarkergroup = new L.LayerGroup();
if(!configuration.hidebydefault)
dynmap.map.addLayer(dynmap.playermarkergroup);
dynmap.layercontrol.addOverlay(dynmap.playermarkergroup, 'Players');
//dynmap.layercontrol.addOverlay(dynmap.playermarkergroup, 'Players');
dynmap.addToLayerSelector(dynmap.playermarkergroup, configuration.label || 'Players', configuration.layerprio || 0);
};

View file

@ -190,7 +190,8 @@ componentconstructors['regions'] = function(dynmap, configuration) {
configuration.activeLayer = regionsLayer;
if(!configuration.hidebydefault)
dynmap.map.addLayer(configuration.activeLayer);
dynmap.layercontrol.addOverlay(configuration.activeLayer, regionType);
//dynmap.layercontrol.addOverlay(configuration.activeLayer, regionType);
dynmap.addToLayerSelector(configuration.activeLayer, regionType, configuration.layerprio || 0);
}
}
}));