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 36ea3c20ca
commit afc6f429f0
8 changed files with 112 additions and 12 deletions

View file

@ -101,4 +101,12 @@ public interface MarkerSet {
* @return true if layer for set will be hidden by default
*/
public boolean getHideByDefault();
/**
* Set layer ordering priority (0=default, low before high in layer order)
*/
public void setLayerPriority(int prio);
/**
* Get layer ordering priority (0=default, low before high in layer order)
*/
public int getLayerPriority();
}

View file

@ -424,6 +424,7 @@ public class MarkerAPIImpl implements MarkerAPI, Event.Listener<DynmapWorld> {
private static final String ARG_HIDE = "hide";
private static final String ARG_ICON = "icon";
private static final String ARG_SET = "set";
private static final String ARG_PRIO = "prio";
/* Parse argument strings : handle 'attrib:value' and quoted strings */
private static Map<String,String> parseArgs(String[] args, CommandSender snd) {
@ -487,7 +488,7 @@ public class MarkerAPIImpl implements MarkerAPI, Event.Listener<DynmapWorld> {
public static boolean onCommand(DynmapPlugin plugin, CommandSender sender, Command cmd, String commandLabel, String[] args) {
String id, setid, file, label, newlabel, iconid;
String id, setid, file, label, newlabel, iconid, prio;
if(api == null) {
sender.sendMessage("Markers component is not enabled.");
@ -734,6 +735,7 @@ public class MarkerAPIImpl implements MarkerAPI, Event.Listener<DynmapWorld> {
if(parms == null) return true;
id = parms.get(ARG_ID);
label = parms.get(ARG_LABEL);
prio = parms.get(ARG_PRIO);
if((id == null) && (label == null)) {
sender.sendMessage("<label> or id:<marker-id> required");
return true;
@ -757,6 +759,13 @@ public class MarkerAPIImpl implements MarkerAPI, Event.Listener<DynmapWorld> {
String h = parms.get(ARG_HIDE);
if((h != null) && (h.equals("true")))
set.setHideByDefault(true);
if(prio != null) {
try {
set.setLayerPriority(Integer.valueOf(prio));
} catch (NumberFormatException nfx) {
sender.sendMessage("Invalid priority: " + prio);
}
}
sender.sendMessage("Added marker set id:'" + set.getMarkerSetID() + "' (" + set.getMarkerSetLabel() + ")");
}
}
@ -771,6 +780,7 @@ public class MarkerAPIImpl implements MarkerAPI, Event.Listener<DynmapWorld> {
if(parms == null) return true;
id = parms.get(ARG_ID);
label = parms.get(ARG_LABEL);
prio = parms.get(ARG_PRIO);
if((id == null) && (label == null)) {
sender.sendMessage("<label> or id:<marker-id> required");
return true;
@ -804,6 +814,13 @@ public class MarkerAPIImpl implements MarkerAPI, Event.Listener<DynmapWorld> {
if(hide != null) {
set.setHideByDefault(hide.equals("true"));
}
if(prio != null) {
try {
set.setLayerPriority(Integer.valueOf(prio));
} catch (NumberFormatException nfx) {
sender.sendMessage("Invalid priority: " + prio);
}
}
sender.sendMessage("Marker set '" + set.getMarkerSetID() + "' updated");
}
else {
@ -855,7 +872,7 @@ public class MarkerAPIImpl implements MarkerAPI, Event.Listener<DynmapWorld> {
Set<String> setids = new TreeSet<String>(api.markersets.keySet());
for(String s : setids) {
MarkerSet set = api.markersets.get(s);
sender.sendMessage(set.getMarkerSetID() + ": label:\"" + set.getMarkerSetLabel() + "\", hide=" + set.getHideByDefault());
sender.sendMessage(set.getMarkerSetID() + ": label:\"" + set.getMarkerSetLabel() + "\", hide:" + set.getHideByDefault() + ", prio:" + set.getLayerPriority());
}
}
/* Add new icon */
@ -1025,6 +1042,7 @@ public class MarkerAPIImpl implements MarkerAPI, Event.Listener<DynmapWorld> {
HashMap<String, Object> msdata = new HashMap<String, Object>();
msdata.put("label", ms.getMarkerSetLabel());
msdata.put("hide", ms.getHideByDefault());
msdata.put("layerprio", ms.getLayerPriority());
HashMap<String, Object> markers = new HashMap<String, Object>();
for(Marker m : ms.getMarkers()) {
if(m.getWorld().equals(wname) == false) continue;

View file

@ -22,6 +22,7 @@ class MarkerSetImpl implements MarkerSet {
private HashMap<String, MarkerIconImpl> allowedicons = null;
private boolean hide_by_def;
private boolean ispersistent;
private int prio = 0;
MarkerSetImpl(String id) {
setid = id;
@ -215,6 +216,7 @@ class MarkerSetImpl implements MarkerSet {
}
setnode.put("markers", node);
setnode.put("hide", hide_by_def);
setnode.put("layerprio", prio);
return setnode;
}
@ -248,6 +250,7 @@ class MarkerSetImpl implements MarkerSet {
}
}
hide_by_def = node.getBoolean("hide", false);
prio = node.getInt("layerprio", 0);
ispersistent = true;
return true;
@ -265,4 +268,18 @@ class MarkerSetImpl implements MarkerSet {
public boolean getHideByDefault() {
return hide_by_def;
}
@Override
public void setLayerPriority(int prio) {
if(this.prio != prio) {
this.prio = prio;
MarkerAPIImpl.markerSetUpdated(this, MarkerUpdate.UPDATED);
if(ispersistent)
MarkerAPIImpl.saveMarkers();
}
}
@Override
public int getLayerPriority() {
return this.prio;
}
}