]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.maps.server.ui/src/org/simantics/maps/server/ui/prefs/MapsServerPreferencePage.java
Make background map preference changes apply immediately
[simantics/district.git] / org.simantics.maps.server.ui / src / org / simantics / maps / server / ui / prefs / MapsServerPreferencePage.java
index 8a1a6f91271f2bd2d54372f5724f5c68d99a59d3..c9e01cb0e36ab575d7f80c2aab882f4ede6bab7d 100644 (file)
@@ -16,6 +16,7 @@ import org.eclipse.jface.preference.FieldEditorPreferencePage;
 import org.eclipse.jface.preference.FileFieldEditor;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.preference.IntegerFieldEditor;
+import org.eclipse.jface.preference.StringFieldEditor;
 import org.eclipse.jface.util.IPropertyChangeListener;
 import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.swt.SWT;
@@ -31,6 +32,7 @@ import org.eclipse.ui.preferences.ScopedPreferenceStore;
 import org.simantics.district.maps.server.TileserverMapnik;
 import org.simantics.district.maps.server.TileserverMapnikInstance;
 import org.simantics.district.maps.server.prefs.MapsServerPreferences;
+import org.simantics.district.network.ui.DynamicComboFieldEditor;
 import org.simantics.maps.server.ui.TileserverMapnikStartJob;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -43,6 +45,8 @@ public class MapsServerPreferencePage extends FieldEditorPreferencePage implemen
 
     private FileFieldEditor addNew;
 
+    private DynamicComboFieldEditor currentTilesSelector;
+
     public MapsServerPreferencePage() {
         super(GRID);
         setDescription("Maps server preferences");
@@ -64,8 +68,10 @@ public class MapsServerPreferencePage extends FieldEditorPreferencePage implemen
 
     private void createServerStatusField(Composite parent) {
         Label label = new Label(parent, SWT.NONE);
-
+        GridDataFactory.fillDefaults().grab(true, false).applyTo(label);
+        
         Button b = new Button(parent, SWT.NONE);
+        GridDataFactory.fillDefaults().grab(true, false).applyTo(b);
         updateWidgets(label, b);
         b.addSelectionListener(new SelectionAdapter() {
             
@@ -76,7 +82,11 @@ public class MapsServerPreferencePage extends FieldEditorPreferencePage implemen
                         server.stop();
                         updateWidgets(label, b);
                     } else {
-                        new TileserverMapnikStartJob().schedule();
+                        new TileserverMapnikStartJob(status -> {
+                            parent.getDisplay().asyncExec(() -> {
+                                updateWidgets(label, b);
+                            });
+                        }).schedule();
                     }
                 } catch (Exception ex) {
                     LOGGER.error("Could not start/stop server", ex);
@@ -122,16 +132,10 @@ public class MapsServerPreferencePage extends FieldEditorPreferencePage implemen
         BooleanFieldEditor automatically = new BooleanFieldEditor(MapsServerPreferences.P_START_AUTOMATICALLY, "Start tileserver automatically", serverGroup);
         addField(automatically);
         
-        Button openInExplorer = new Button(serverGroup, SWT.NONE);
-        openInExplorer.setText("Open server folder");
-        openInExplorer.addSelectionListener(new SelectionAdapter() {
-            
-            @Override
-            public void widgetSelected(SelectionEvent e) {
-//                E4WorkbenchUtils.showInSystemExplorer("");
-            }
-        });
-        
+        StringFieldEditor serverFolder = new StringFieldEditor(MapsServerPreferences.P_SERVER_FOLDER, "Server folder", serverGroup);
+        serverFolder.setEnabled(false, serverGroup);
+        addField(serverFolder);
+
         GridLayoutFactory.fillDefaults().numColumns(2).equalWidth(false).extendedMargins(12, 12, 12, 12).spacing(5, 4).applyTo(serverGroup);
     }
     
@@ -167,7 +171,8 @@ public class MapsServerPreferencePage extends FieldEditorPreferencePage implemen
                 namesAndValues[i] = nameAndValue;
             }
             
-            ComboFieldEditor selector = new ComboFieldEditor(MapsServerPreferences.P_CURRENT_TM2STYLE, "Tile Styles", namesAndValues, parent);
+            ComboFieldEditor selector = new ComboFieldEditor(MapsServerPreferences.P_CURRENT_TM2STYLE, "Selected Style", namesAndValues, parent);
+            GridDataFactory.fillDefaults().grab(true, false).span(2, 1).applyTo(selector.getLabelControl(parent));
             addField(selector);
         } catch (IOException e) {
             e.printStackTrace();
@@ -176,31 +181,29 @@ public class MapsServerPreferencePage extends FieldEditorPreferencePage implemen
     
     private void createTilesGroup() {
         Group tilesGroup = new Group(getFieldEditorParent(), SWT.NONE);
-        tilesGroup.setText("MBTiles");
-        GridDataFactory.fillDefaults().grab(true, false).span(2, 1).applyTo(tilesGroup);
-        
+        tilesGroup.setText("Vector Tiles");
+        GridDataFactory.fillDefaults().grab(true, false).applyTo(tilesGroup);
         createTilesField(tilesGroup);
         
-        GridLayoutFactory.fillDefaults().numColumns(3).equalWidth(false).extendedMargins(12, 12, 12, 12).spacing(5, 4).applyTo(tilesGroup);
+        GridLayoutFactory.fillDefaults().numColumns(2).equalWidth(false).extendedMargins(12, 12, 12, 12).spacing(5, 4).applyTo(tilesGroup);
     }
 
     private void createTilesField(Composite parent) {
         try {
-            List<String> tiles = server.availableMBTiles();
-            
-            String[][] namesAndValues = new String[tiles.size()][];
-            for (int i = 0; i < tiles.size(); i++) {
-                String style = tiles.get(i);
-                String[] nameAndValue = new String[2];
-                nameAndValue[0] = style;
-                nameAndValue[1] = style;
-                namesAndValues[i] = nameAndValue;
-            }
+
+            String[][] namesAndValues = computeNamesAndValues();
+            currentTilesSelector = new DynamicComboFieldEditor(MapsServerPreferences.P_CURRENT_MBTILES, "Current Tiles", namesAndValues, parent);
             
-            ComboFieldEditor selector = new ComboFieldEditor(MapsServerPreferences.P_CURRENT_MBTILES, "MBTiles", namesAndValues, parent);
-            addField(selector);
+            GridDataFactory.fillDefaults().grab(true, false).span(2, 1).applyTo(currentTilesSelector.getLabelControl(parent));
+            addField(currentTilesSelector);
+
+            Composite newParent = new Composite(parent, SWT.NONE);
+            GridDataFactory.fillDefaults().grab(true, false).span(2, 1).applyTo(newParent);
+            GridLayoutFactory.fillDefaults().numColumns(3).applyTo(newParent);
             
-            addNew = new FileFieldEditor("Add new tiles", "Add new tiles", parent);
+            addNew = new FileFieldEditor("Add new tiles", "Add new tiles", newParent);
+            //GridDataFactory.fillDefaults().grab(true, false).span(2, 1).applyTo(addNew.getTextControl(newParent));
+            //addField(addNew);
             addNew.setPropertyChangeListener(new IPropertyChangeListener() {
                 
                 @Override
@@ -214,6 +217,19 @@ public class MapsServerPreferencePage extends FieldEditorPreferencePage implemen
         }
     }
     
+    private String[][] computeNamesAndValues() throws IOException {
+        List<String> tiles = server.availableMBTiles();
+        String[][] namesAndValues = new String[tiles.size()][];
+        for (int i = 0; i < tiles.size(); i++) {
+            String style = tiles.get(i);
+            String[] nameAndValue = new String[2];
+            nameAndValue[0] = style;
+            nameAndValue[1] = style;
+            namesAndValues[i] = nameAndValue;
+        }
+        return namesAndValues;
+    }
+
     @Override
     protected void performApply() {
         // Upload new mbtiles file
@@ -223,12 +239,19 @@ public class MapsServerPreferencePage extends FieldEditorPreferencePage implemen
             Path target = server.getDataDirectory().resolve(p.getFileName());
             try {
                 Files.copy(p, target);
+                addNew.setStringValue("");
             } catch (IOException e) {
                 String message = "Could not upload " + fileLocation + " to " + target.toAbsolutePath(); 
                 LOGGER.error(message, e);
                 setErrorMessage(message);
             }
         }
+        try {
+            currentTilesSelector.updateCombo(computeNamesAndValues());
+            currentTilesSelector.load();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
         super.performApply();
     }
     
@@ -238,7 +261,7 @@ public class MapsServerPreferencePage extends FieldEditorPreferencePage implemen
         
         try {
             server.stop();
-            new TileserverMapnikStartJob().schedule();
+            new TileserverMapnikStartJob(status -> {}).schedule();
         } catch (Exception e) {
             LOGGER.error("Could not restart tileserver-mapnik", e);
         }