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;
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;
private FileFieldEditor addNew;
+ private DynamicComboFieldEditor currentTilesSelector;
+
public MapsServerPreferencePage() {
super(GRID);
setDescription("Maps server preferences");
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() {
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);
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);
}
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();
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
}
}
+ 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
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();
}
try {
server.stop();
- new TileserverMapnikStartJob().schedule();
+ new TileserverMapnikStartJob(status -> {}).schedule();
} catch (Exception e) {
LOGGER.error("Could not restart tileserver-mapnik", e);
}