From afd03809e8bd060bde9421276f94934fb2f87008 Mon Sep 17 00:00:00 2001
From: Emux <devemux86@gmail.com>
Date: Wed, 9 Nov 2016 11:44:45 +0200
Subject: [PATCH] Render theme styles sample improvements #93

---
 .../resources/assets/styles/style.xml         | 38 +++++++++----------
 .../org/oscim/test/MapsforgeStyleTest.java    | 27 +++++++------
 2 files changed, 32 insertions(+), 33 deletions(-)

diff --git a/vtm-playground/resources/assets/styles/style.xml b/vtm-playground/resources/assets/styles/style.xml
index b3fa9ea2..695ffb54 100644
--- a/vtm-playground/resources/assets/styles/style.xml
+++ b/vtm-playground/resources/assets/styles/style.xml
@@ -4,51 +4,47 @@
     xsi:schemaLocation="http://opensciencemap.org/rendertheme https://raw.githubusercontent.com/mapsforge/vtm/master/resources/rendertheme.xsd">
 
     <stylemenu defaultlang="en" defaultvalue="1" id="menu">
-        <layer enabled="true" id="sea">
-            <name lang="de" value="Meer" />
-            <name lang="en" value="Sea" />
-            <name lang="es" value="Mar" />
-            <name lang="fr" value="Mer" />
-            <cat id="sea" />
-        </layer>
-
-        <layer id="land">
-            <name lang="de" value="Land" />
-            <name lang="en" value="Land" />
-            <name lang="es" value="Tierra" />
-            <name lang="fr" value="Terrain" />
-            <cat id="land" />
+        <layer enabled="true" id="nature">
+            <name lang="de" value="Natur" />
+            <name lang="en" value="Nature" />
+            <name lang="es" value="Naturaleza" />
+            <name lang="fr" value="Nature" />
+            <cat id="nature" />
         </layer>
 
         <layer id="base">
-            <overlay id="sea" />
+            <cat id="sea" />
+            <cat id="land" />
         </layer>
 
-        <!-- Sea with land -->
+        <!-- Show nature layers (enabled by default) -->
         <layer id="1" parent="base" visible="true">
             <name lang="de" value="1" />
             <name lang="en" value="1" />
             <name lang="es" value="1" />
             <name lang="fr" value="1" />
-            <cat id="land" />
+            <overlay id="nature" />
         </layer>
 
-        <!-- Sea without land -->
+        <!-- Don't show nature layers -->
         <layer id="2" parent="base" visible="true">
             <name lang="de" value="2" />
             <name lang="en" value="2" />
             <name lang="es" value="2" />
             <name lang="fr" value="2" />
-            <overlay id="land" />
         </layer>
     </stylemenu>
 
     <m cat="sea" e="way" k="natural" v="issea|sea">
-        <area fill="#0000ff" mesh="true" />
+        <area fill="#b5d6f1" mesh="true" />
     </m>
 
     <m cat="land" e="way" k="natural" v="nosea">
-        <area fill="#00ff00" mesh="true" />
+        <area fill="#f8f8f8" mesh="true" />
+    </m>
+
+    <m cat="nature" e="way" k="natural|landuse" v="forest|wood">
+        <area fill="#83aa5b" />
     </m>
 
 </rendertheme>
diff --git a/vtm-playground/src/org/oscim/test/MapsforgeStyleTest.java b/vtm-playground/src/org/oscim/test/MapsforgeStyleTest.java
index fb911dcb..7de4f8a9 100644
--- a/vtm-playground/src/org/oscim/test/MapsforgeStyleTest.java
+++ b/vtm-playground/src/org/oscim/test/MapsforgeStyleTest.java
@@ -36,7 +36,6 @@ import java.util.Set;
 public class MapsforgeStyleTest extends GdxMap {
 
     private static File mapFile;
-    private String style;
 
     @Override
     public void createLayers() {
@@ -45,7 +44,7 @@ public class MapsforgeStyleTest extends GdxMap {
         tileSource.setPreferredLanguage("en");
 
         VectorTileLayer l = mMap.setBaseMap(tileSource);
-        loadTheme();
+        loadTheme(null);
 
         mMap.layers().add(new BuildingLayer(mMap, l));
         mMap.layers().add(new LabelLayer(mMap, l));
@@ -72,23 +71,31 @@ public class MapsforgeStyleTest extends GdxMap {
         return file;
     }
 
-    private void loadTheme() {
+    private void loadTheme(final String styleId) {
         mMap.setTheme(new StreamRenderTheme("", getClass().getResourceAsStream("/assets/styles/style.xml"), new XmlRenderThemeMenuCallback() {
             @Override
             public Set<String> getCategories(XmlRenderThemeStyleMenu renderThemeStyleMenu) {
-                if (style == null)
-                    style = renderThemeStyleMenu.getDefaultValue();
+                // Use the selected style or the default
+                String style = styleId != null ? styleId : renderThemeStyleMenu.getDefaultValue();
+
+                // Retrieve the layer from the style id
                 XmlRenderThemeStyleLayer renderThemeStyleLayer = renderThemeStyleMenu.getLayer(style);
                 if (renderThemeStyleLayer == null) {
                     System.err.println("Invalid style " + style);
                     return null;
                 }
+
+                // First get the selected layer's categories that are enabled together
                 Set<String> categories = renderThemeStyleLayer.getCategories();
-                // Add the categories from overlays that are enabled
+
+                // Then add the selected layer's overlays that are enabled individually
+                // Here we use the style menu, but users can use their own preferences
                 for (XmlRenderThemeStyleLayer overlay : renderThemeStyleLayer.getOverlays()) {
                     if (overlay.isEnabled())
                         categories.addAll(overlay.getCategories());
                 }
+
+                // This is the whole categories set to be enabled
                 return categories;
             }
         }));
@@ -98,15 +105,11 @@ public class MapsforgeStyleTest extends GdxMap {
     protected boolean onKeyDown(int keycode) {
         switch (keycode) {
             case Input.Keys.NUM_1:
-                System.out.println("Sea with land");
-                style = "1";
-                loadTheme();
+                loadTheme("1");
                 mMap.clearMap();
                 return true;
             case Input.Keys.NUM_2:
-                System.out.println("Sea without land");
-                style = "2";
-                loadTheme();
+                loadTheme("2");
                 mMap.clearMap();
                 return true;
         }