forked from fanruan/design
Browse Source
* commit 'f698d757257d430d1c53bd196ce3a8d9910f441b': REPORT-42381 删除tab页之后选中body布局 CHART-17249 高德地图设计器配置界面research/10.0
superman
4 years ago
13 changed files with 1023 additions and 700 deletions
@ -1,15 +0,0 @@
|
||||
package com.fr.van.chart.heatmap.designer.type; |
||||
|
||||
import com.fr.design.gui.ilable.UILabel; |
||||
|
||||
import com.fr.van.chart.map.designer.type.VanChartMapSourceChoosePane; |
||||
|
||||
/** |
||||
* Created by Mitisky on 16/10/20. |
||||
*/ |
||||
public class VanChartHeatMapSourceChoosePane extends VanChartMapSourceChoosePane { |
||||
@Override |
||||
protected UILabel createSourceTitleLabel() { |
||||
return new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Map_Area_And_Point")); |
||||
} |
||||
} |
@ -0,0 +1,258 @@
|
||||
package com.fr.van.chart.map.designer.type; |
||||
|
||||
import com.fr.base.Parameter; |
||||
import com.fr.decision.webservice.v10.map.geojson.helper.GEOJSONHelper; |
||||
import com.fr.design.constants.LayoutConstants; |
||||
import com.fr.design.event.UIObserver; |
||||
import com.fr.design.event.UIObserverListener; |
||||
import com.fr.design.file.HistoryTemplateListCache; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.design.gui.icombobox.FRTreeComboBox; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.gui.itextfield.UITextField; |
||||
import com.fr.design.i18n.Toolkit; |
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.mainframe.JTemplate; |
||||
import com.fr.design.utils.gui.GUICoreUtils; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.general.IOUtils; |
||||
import com.fr.plugin.chart.map.VanChartMapPlot; |
||||
import com.fr.plugin.chart.map.designer.type.GEOJSONTreeHelper; |
||||
import com.fr.plugin.chart.map.server.ChartGEOJSONHelper; |
||||
import com.fr.plugin.chart.map.server.CompatibleGEOJSONHelper; |
||||
import com.fr.plugin.chart.type.MapType; |
||||
import com.fr.van.chart.designer.TableLayout4VanChartHelper; |
||||
import com.fr.van.chart.drillmap.designer.data.comp.MapDataTree; |
||||
import com.fr.workspace.WorkContext; |
||||
|
||||
import javax.swing.JPanel; |
||||
import javax.swing.event.PopupMenuEvent; |
||||
import javax.swing.event.PopupMenuListener; |
||||
import javax.swing.tree.DefaultMutableTreeNode; |
||||
import javax.swing.tree.TreeNode; |
||||
import javax.swing.tree.TreePath; |
||||
import java.awt.BorderLayout; |
||||
import java.awt.Component; |
||||
import java.awt.event.ActionEvent; |
||||
import java.awt.event.ActionListener; |
||||
|
||||
/** |
||||
* @author Bjorn |
||||
* @version 10.0 |
||||
* Created by Bjorn on 2020-12-07 |
||||
*/ |
||||
public class GeoUrlPane extends JPanel implements UIObserver { |
||||
|
||||
private UILabel sourceTitleLabel; |
||||
private FRTreeComboBox sourceComboBox; |
||||
private MapDataTree mapDataTree; |
||||
private TreePath selectTreePath; |
||||
|
||||
private UIObserverListener listener; |
||||
|
||||
private String[] oldParams; |
||||
|
||||
public GeoUrlPane() { |
||||
initComps(); |
||||
} |
||||
|
||||
private void initComps() { |
||||
this.setLayout(new BorderLayout()); |
||||
this.add(createMapSourcesPane(), BorderLayout.CENTER); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public void registerChangeListener(UIObserverListener listener) { |
||||
this.listener = listener; |
||||
} |
||||
|
||||
@Override |
||||
public boolean shouldResponseChangeListener() { |
||||
return true; |
||||
} |
||||
|
||||
private JPanel createMapSourcesPane() { |
||||
|
||||
mapDataTree = new MapDataTree(this.getRootNode()); |
||||
mapDataTree.setEditable(false); |
||||
mapDataTree.selectDefaultTreeNode(); |
||||
sourceComboBox = new FRTreeComboBox(mapDataTree, mapDataTree.getCellRenderer()) { |
||||
//搜索
|
||||
protected void dealSamePath(TreePath parent, TreeNode node, UITextField textField) { |
||||
String searchText = textField.getText(); |
||||
GeoUrlPane.this.mapDataTree.search(searchText); |
||||
} |
||||
|
||||
//选中 tree---combobox
|
||||
public void setSelectedItem(Object o) { |
||||
TreePath oldPath = mapDataTree.getSelectionPath(); |
||||
Object oldText = getSelectedItem(); |
||||
if (o != null && o instanceof TreePath) { |
||||
selectTreePath = (TreePath) o; |
||||
this.tree.setSelectionPath(selectTreePath); |
||||
this.getModel().setSelectedItem(pathToString(selectTreePath)); |
||||
if (ComparatorUtils.equals(oldText, getSelectedItem()) && !ComparatorUtils.equals(oldPath, selectTreePath)) { |
||||
//point的江苏省切换到area的江苏省
|
||||
listener.doChange(); |
||||
} |
||||
} else if (o instanceof String) {//list里面没有
|
||||
selectTreePath = null; |
||||
this.tree.setSelectionPath(null); |
||||
this.getModel().setSelectedItem(ChartGEOJSONHelper.getPresentNameWithPath((String) o)); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
protected String pathToString(TreePath path) { |
||||
DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent(); |
||||
//不显示后缀
|
||||
return ChartGEOJSONHelper.getPresentNameWithPath(node.toString()); |
||||
} |
||||
|
||||
@Override |
||||
protected boolean customSelectable(DefaultMutableTreeNode node) { |
||||
return GEOJSONTreeHelper.isSelectableTreeNode(node); |
||||
} |
||||
}; |
||||
sourceComboBox.setEditable(true); |
||||
sourceComboBox.setOnlyLeafSelectable(false); |
||||
sourceComboBox.addPopupMenuListener(popupMenuListener); |
||||
sourceTitleLabel = createSourceTitleLabel(); |
||||
|
||||
|
||||
boolean hasRefreshButton = !WorkContext.getCurrent().isLocal(); |
||||
UIButton button = new UIButton(IOUtils.readIcon("/com/fr/design/images/control/refresh.png")); |
||||
button.setToolTipText(Toolkit.i18nText("Fine-Design_Chart_Update_Remote_Map_JSON")); |
||||
button.addActionListener(new ActionListener() { |
||||
@Override |
||||
public void actionPerformed(ActionEvent e) { |
||||
GEOJSONHelper.reset(); |
||||
GEOJSONHelper.getInstance(); |
||||
} |
||||
}); |
||||
|
||||
double p = TableLayout.PREFERRED; |
||||
double d = TableLayout4VanChartHelper.DESCRIPTION_AREA_WIDTH; |
||||
double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH; |
||||
double f = TableLayout.FILL; |
||||
double[] rowSize = {p, p}; |
||||
double[] columnSize = hasRefreshButton ? new double[]{d + 10, e - 20, 20} : new double[]{f, e}; |
||||
|
||||
Component[] comps = hasRefreshButton |
||||
? new Component[]{sourceTitleLabel, sourceComboBox, button} |
||||
: new Component[]{sourceTitleLabel, sourceComboBox}; |
||||
|
||||
double hGap = hasRefreshButton ? 0 : TableLayout4VanChartHelper.COMPONENT_INTERVAL; |
||||
Component[][] components = new Component[][]{ |
||||
new Component[]{null, null}, |
||||
comps, |
||||
}; |
||||
return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, hGap, LayoutConstants.VGAP_LARGE); |
||||
} |
||||
|
||||
protected UILabel createSourceTitleLabel() { |
||||
return new UILabel(Toolkit.i18nText("Fine-Design_Chart_Map_Area")); |
||||
} |
||||
|
||||
protected TreeNode getRootNode() { |
||||
return GEOJSONTreeHelper.getInstance().getRootNodeWithPara(); |
||||
} |
||||
|
||||
private String[] getParamsName() { |
||||
JTemplate jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); |
||||
|
||||
if (jTemplate == null) { |
||||
return new String[0]; |
||||
} |
||||
|
||||
Parameter[] parameters = jTemplate.getJTemplateParameters(); |
||||
|
||||
int len = parameters.length; |
||||
String[] names = new String[len]; |
||||
|
||||
for (int i = 0; i < len; i++) { |
||||
names[i] = parameters[i].getName(); |
||||
} |
||||
|
||||
return names; |
||||
} |
||||
|
||||
private PopupMenuListener popupMenuListener = new PopupMenuListener() { |
||||
public void popupMenuCanceled(PopupMenuEvent e) { |
||||
} |
||||
|
||||
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { |
||||
} |
||||
|
||||
public void popupMenuWillBecomeVisible(PopupMenuEvent e) { |
||||
|
||||
GEOJSONTreeHelper.reset(); |
||||
mapDataTree.changeRootNode(GeoUrlPane.this.getRootNode()); |
||||
GEOJSONTreeHelper.getInstance().updateParamRootNode(GeoUrlPane.this.getParamsName()); |
||||
|
||||
if (selectTreePath != null) { |
||||
mapDataTree.setSelectNodePath(CompatibleGEOJSONHelper.completeJSONName(selectTreePath.getLastPathComponent().toString())); |
||||
selectTreePath = mapDataTree.getSelectionPath(); |
||||
} |
||||
|
||||
mapDataTree.updateUI();//因为服务器那边可能随时编辑,所以这边要重画
|
||||
mapDataTree.setSelectionPath(selectTreePath); |
||||
mapDataTree.scrollPathToVisible(selectTreePath); |
||||
} |
||||
}; |
||||
|
||||
public void populate(VanChartMapPlot mapPlot) { |
||||
resetComponentValue(mapPlot, false); |
||||
String geoUrl = mapPlot.getGeoUrl(); |
||||
mapDataTree.setSelectNodePath(geoUrl); |
||||
selectTreePath = mapDataTree.getSelectionPath(); |
||||
|
||||
if (selectTreePath == null) {//此url当前环境没有
|
||||
sourceComboBox.setSelectedItem(geoUrl); |
||||
} else { |
||||
sourceComboBox.setSelectedItem(selectTreePath); |
||||
} |
||||
boolean enabled = !CompatibleGEOJSONHelper.isDeprecated(mapPlot.getGeoUrl()); |
||||
GUICoreUtils.setEnabled(sourceComboBox, enabled); |
||||
} |
||||
|
||||
public String update() { |
||||
return mapDataTree.getSelectNodeJSONPath(); |
||||
} |
||||
|
||||
protected void resetComponentValue(VanChartMapPlot mapPlot, boolean samePlotChange) { |
||||
MapType mapType = mapPlot.getMapType(); |
||||
|
||||
//获取最新的参数
|
||||
String[] params = getParamsName(); |
||||
|
||||
if (!ComparatorUtils.equals(oldParams, params)) { |
||||
oldParams = params; |
||||
GEOJSONTreeHelper.getInstance().updateParamRootNode(params); |
||||
} |
||||
|
||||
mapDataTree.changeRootNode(this.getRootNode()); |
||||
if (samePlotChange) { |
||||
String nodePath = ChartGEOJSONHelper.getDefaultJSONURL(); |
||||
mapPlot.setGeoUrl(nodePath); |
||||
mapDataTree.setSelectNodePath(nodePath); |
||||
selectTreePath = mapDataTree.getSelectionPath(); |
||||
sourceComboBox.setSelectedItem(selectTreePath); |
||||
} |
||||
switch (mapType) { |
||||
case CUSTOM: |
||||
sourceTitleLabel.setText(Toolkit.i18nText("Fine-Design_Chart_Map_Area_And_Point")); |
||||
break; |
||||
case POINT: |
||||
sourceTitleLabel.setText(Toolkit.i18nText("Fine-Design_Chart_Map_Point")); |
||||
break; |
||||
case LINE: |
||||
sourceTitleLabel.setText(Toolkit.i18nText("Fine-Design_Chart_Map_Point")); |
||||
break; |
||||
default: |
||||
sourceTitleLabel.setText(Toolkit.i18nText("Fine-Design_Chart_Map_Area")); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,303 @@
|
||||
package com.fr.van.chart.map.designer.type; |
||||
|
||||
import com.fr.base.Utils; |
||||
import com.fr.design.event.UIObserver; |
||||
import com.fr.design.event.UIObserverListener; |
||||
import com.fr.design.gui.ibutton.UIButtonGroup; |
||||
import com.fr.design.gui.icombobox.UIComboBox; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.i18n.Toolkit; |
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.plugin.chart.base.GisLayer; |
||||
import com.fr.plugin.chart.map.VanChartMapPlot; |
||||
import com.fr.plugin.chart.map.server.MapLayerConfigManager; |
||||
import com.fr.plugin.chart.type.GISLayerType; |
||||
import com.fr.plugin.chart.type.GaoDeGisType; |
||||
import com.fr.plugin.chart.type.ZoomLevel; |
||||
import com.fr.van.chart.designer.TableLayout4VanChartHelper; |
||||
|
||||
import javax.swing.BorderFactory; |
||||
import javax.swing.DefaultComboBoxModel; |
||||
import javax.swing.JPanel; |
||||
import javax.swing.event.PopupMenuEvent; |
||||
import javax.swing.event.PopupMenuListener; |
||||
import java.awt.BorderLayout; |
||||
import java.awt.CardLayout; |
||||
import java.awt.Component; |
||||
import java.awt.Dimension; |
||||
import java.awt.event.ItemEvent; |
||||
|
||||
/** |
||||
* @author Bjorn |
||||
* @version 10.0 |
||||
* Created by Bjorn on 2020-12-07 |
||||
*/ |
||||
public class GisLayerPane extends JPanel implements UIObserver { |
||||
|
||||
private UIButtonGroup gisButton; |
||||
private JPanel layerPaneCheckPane; |
||||
private UIComboBox gisGaoDeLayer; |
||||
private UIComboBox gisLayer; |
||||
private JPanel layerCardPane; |
||||
|
||||
private WMSLayerPane wmsLayerPane; |
||||
private TileLayerPane tileLayerPane; |
||||
|
||||
private UIComboBox zoomLevel; |
||||
|
||||
private String[] layers = MapLayerConfigManager.getLayerItems(); |
||||
|
||||
public GisLayerPane() { |
||||
initComps(); |
||||
} |
||||
|
||||
private void initComps() { |
||||
this.setLayout(new BorderLayout()); |
||||
this.add(createGISLayerPane(), BorderLayout.CENTER); |
||||
} |
||||
|
||||
@Override |
||||
public void registerChangeListener(UIObserverListener listener) { |
||||
this.wmsLayerPane.registerChangeListener(listener); |
||||
} |
||||
|
||||
@Override |
||||
public boolean shouldResponseChangeListener() { |
||||
return true; |
||||
} |
||||
|
||||
public void registerZoomLevel(UIComboBox zoomLevel) { |
||||
this.zoomLevel = zoomLevel; |
||||
} |
||||
|
||||
private boolean isStandardGis() { |
||||
return gisButton.getSelectedIndex() == 0; |
||||
} |
||||
|
||||
|
||||
private JPanel createGISLayerPane() { |
||||
gisButton = new UIButtonGroup(new String[]{Toolkit.i18nText("Fine-Design_Form_Widget_Style_Standard"), Toolkit.i18nText("Fine-Design_Chart_Custom")}); |
||||
gisGaoDeLayer = new UIComboBox(MapLayerConfigManager.getGaoDeLayerItems()); |
||||
gisButton.addActionListener(event -> { |
||||
refreshZoomLevel(); |
||||
checkLayerCardPane(); |
||||
}); |
||||
|
||||
gisGaoDeLayer.addItemListener(event -> refreshZoomLevel()); |
||||
|
||||
initCustomGISLayerPane(); |
||||
initLayerCardPane(); |
||||
|
||||
layerPaneCheckPane = new JPanel(new CardLayout()) { |
||||
@Override |
||||
public Dimension getPreferredSize() { |
||||
if (isStandardGis()) { |
||||
return gisGaoDeLayer.getPreferredSize(); |
||||
} else { |
||||
return gisLayer.getPreferredSize(); |
||||
} |
||||
} |
||||
}; |
||||
layerPaneCheckPane.add(gisGaoDeLayer, "standard"); |
||||
layerPaneCheckPane.add(gisLayer, "custom"); |
||||
|
||||
|
||||
double p = TableLayout.PREFERRED; |
||||
double f = TableLayout.FILL; |
||||
double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH; |
||||
double[] row = {p, p, p}; |
||||
double[] col = {f, e}; |
||||
|
||||
Component[][] components = new Component[][]{ |
||||
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Gis_Layer")), gisButton}, |
||||
new Component[]{null, layerPaneCheckPane}, |
||||
new Component[]{layerCardPane, null}, |
||||
}; |
||||
|
||||
JPanel panel = TableLayoutHelper.createTableLayoutPane(components, row, col); |
||||
panel.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0)); |
||||
return panel; |
||||
} |
||||
|
||||
private void initLayerCardPane() { |
||||
tileLayerPane = new TileLayerPane(); |
||||
wmsLayerPane = new WMSLayerPane(); |
||||
|
||||
layerCardPane = new JPanel(new CardLayout()) { |
||||
@Override |
||||
public Dimension getPreferredSize() { |
||||
if (isStandardGis()) { |
||||
return new Dimension(0, 0); |
||||
} |
||||
String itemName = Utils.objectToString(gisLayer.getSelectedItem()); |
||||
if (MapLayerConfigManager.isCustomLayer(itemName)) { |
||||
return tileLayerPane.getPreferredSize(); |
||||
} else if (MapLayerConfigManager.isCustomWmsLayer(itemName)) { |
||||
return wmsLayerPane.getPreferredSize(); |
||||
} |
||||
return new Dimension(0, 0); |
||||
} |
||||
}; |
||||
|
||||
for (String itemName : layers) { |
||||
JPanel pane = new JPanel(); |
||||
if (MapLayerConfigManager.isCustomLayer(itemName)) { |
||||
pane = tileLayerPane; |
||||
} else if (MapLayerConfigManager.isCustomWmsLayer(itemName)) { |
||||
pane = wmsLayerPane; |
||||
} |
||||
layerCardPane.add(pane, itemName); |
||||
} |
||||
} |
||||
|
||||
private void initCustomGISLayerPane() { |
||||
gisLayer = new UIComboBox(layers); |
||||
|
||||
gisLayer.addItemListener(e -> |
||||
{ |
||||
if (e.getStateChange() == ItemEvent.SELECTED) { |
||||
checkCustomLayerCardPane(); |
||||
} |
||||
refreshZoomLevel(); |
||||
} |
||||
); |
||||
|
||||
gisLayer.addPopupMenuListener(new PopupMenuListener() { |
||||
public void popupMenuCanceled(PopupMenuEvent e) { |
||||
} |
||||
|
||||
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { |
||||
} |
||||
|
||||
public void popupMenuWillBecomeVisible(PopupMenuEvent e) { |
||||
|
||||
String selected = Utils.objectToString(gisLayer.getSelectedItem()); |
||||
ZoomLevel zoomSelected = (ZoomLevel) zoomLevel.getSelectedItem(); |
||||
|
||||
gisLayer.setModel(new DefaultComboBoxModel(MapLayerConfigManager.getLayerItems())); |
||||
|
||||
gisLayer.setSelectedItem(selected); |
||||
zoomLevel.setSelectedItem(zoomSelected); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
private void refreshZoomLevel() { |
||||
//gis图层不同,对应的缩放等级不同。
|
||||
ZoomLevel[] levels; |
||||
if (isStandardGis()) { |
||||
if (gisGaoDeLayer.getSelectedIndex() == gisGaoDeLayer.getItemCount() - 1) { |
||||
levels = MapStatusPane.ZOOM_LEVELS; |
||||
} else { |
||||
levels = MapStatusPane.GAODE_ZOOM_LEVELS; |
||||
} |
||||
} else { |
||||
if (ComparatorUtils.equals(gisLayer.getSelectedItem(), Toolkit.i18nText("Fine-Design_Chart_Layer_Blue"))) { |
||||
levels = MapStatusPane.BLUE_ZOOM_LEVELS; |
||||
} else if (ComparatorUtils.equals(gisLayer.getSelectedItem(), Toolkit.i18nText("Fine-Design_Chart_Layer_GaoDe"))) { |
||||
levels = MapStatusPane.GAODE_ZOOM_LEVELS; |
||||
} else { |
||||
levels = MapStatusPane.ZOOM_LEVELS; |
||||
} |
||||
} |
||||
zoomLevel.setModel(new DefaultComboBoxModel(levels)); |
||||
} |
||||
|
||||
|
||||
private void checkLayerCardPane() { |
||||
CardLayout cardLayout = (CardLayout) layerPaneCheckPane.getLayout(); |
||||
cardLayout.show(layerPaneCheckPane, isStandardGis() ? "standard" : "custom"); |
||||
} |
||||
|
||||
private void checkCustomLayerCardPane() { |
||||
CardLayout cardLayout = (CardLayout) layerCardPane.getLayout(); |
||||
cardLayout.show(layerCardPane, Utils.objectToString(gisLayer.getSelectedItem())); |
||||
} |
||||
|
||||
public void resetGisLayer(VanChartMapPlot mapPlot) { |
||||
//TODO Bjorn 地图gis图层自动逻辑
|
||||
/* mapPlot.getGisLayer().setGisLayerType(GISLayerType.AUTO); |
||||
mapPlot.getGisLayer().setLayerName(GISLayerType.getLocString(GISLayerType.AUTO));*/ |
||||
|
||||
GaoDeGisType gaoDeGisType= mapPlot.getDefaultGisLayerType(); |
||||
|
||||
mapPlot.getGisLayer().setGisLayerType(GISLayerType.GAO_DE_API); |
||||
mapPlot.getGisLayer().setLayerName(gaoDeGisType.getTypeName()); |
||||
mapPlot.getGisLayer().setGaoDeGisType(gaoDeGisType); |
||||
populate(mapPlot.getGisLayer()); |
||||
} |
||||
|
||||
public void populate(GisLayer layer) { |
||||
switch (layer.getGisLayerType()) { |
||||
case GAO_DE_API: |
||||
case LAYER_NULL: |
||||
populateStandardGis(layer); |
||||
break; |
||||
default: |
||||
populateCustomGis(layer); |
||||
} |
||||
refreshZoomLevel(); |
||||
|
||||
checkCustomLayerCardPane(); |
||||
checkLayerCardPane(); |
||||
} |
||||
|
||||
private void populateStandardGis(GisLayer layer) { |
||||
gisButton.setSelectedIndex(0); |
||||
if (layer.getGisLayerType() == GISLayerType.LAYER_NULL) { |
||||
gisGaoDeLayer.setSelectedIndex(gisGaoDeLayer.getItemCount() - 1); |
||||
} else { |
||||
gisGaoDeLayer.setSelectedItem(layer.getGaoDeGisType().getTypeName()); |
||||
} |
||||
} |
||||
|
||||
private void populateCustomGis(GisLayer layer) { |
||||
gisButton.setSelectedIndex(1); |
||||
gisLayer.setSelectedItem(layer.getShowItemName()); |
||||
|
||||
switch (layer.getGisLayerType()) { |
||||
case CUSTOM_WMS_LAYER: |
||||
wmsLayerPane.populate(layer); |
||||
break; |
||||
case CUSTOM_TILE_LAYER: |
||||
tileLayerPane.populate(layer); |
||||
break; |
||||
} |
||||
} |
||||
|
||||
public void update(GisLayer layer) { |
||||
if (isStandardGis()) { |
||||
updateStandardGis(layer); |
||||
} else { |
||||
updateCustomGis(layer); |
||||
} |
||||
} |
||||
|
||||
private void updateStandardGis(GisLayer layer) { |
||||
String layerName = Utils.objectToString(gisGaoDeLayer.getSelectedItem()); |
||||
layer.setLayerName(layerName); |
||||
if (gisGaoDeLayer.getSelectedIndex() == gisGaoDeLayer.getItemCount() - 1) { |
||||
layer.setGisLayerType(MapLayerConfigManager.getGisLayerType(layerName)); |
||||
} else { |
||||
layer.setGisLayerType(GISLayerType.GAO_DE_API); |
||||
layer.setGaoDeGisType(GaoDeGisType.parseByLocaleName(layerName)); |
||||
} |
||||
} |
||||
|
||||
private void updateCustomGis(GisLayer layer) { |
||||
String layerName = Utils.objectToString(gisLayer.getSelectedItem()); |
||||
layer.setLayerName(layerName); |
||||
layer.setGisLayerType(MapLayerConfigManager.getGisLayerType(layerName)); |
||||
|
||||
switch (layer.getGisLayerType()) { |
||||
case CUSTOM_WMS_LAYER: |
||||
wmsLayerPane.update(layer); |
||||
break; |
||||
case CUSTOM_TILE_LAYER: |
||||
tileLayerPane.update(layer); |
||||
break; |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,167 @@
|
||||
package com.fr.van.chart.map.designer.type; |
||||
|
||||
import com.fr.design.gui.ibutton.UIButtonGroup; |
||||
import com.fr.design.gui.icombobox.UIComboBox; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.gui.ispinner.UISpinner; |
||||
import com.fr.design.i18n.Toolkit; |
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.plugin.chart.base.ViewCenter; |
||||
import com.fr.plugin.chart.map.VanChartMapPlot; |
||||
import com.fr.plugin.chart.type.ZoomLevel; |
||||
import com.fr.stable.ArrayUtils; |
||||
import com.fr.van.chart.designer.TableLayout4VanChartHelper; |
||||
|
||||
import javax.swing.BorderFactory; |
||||
import javax.swing.JPanel; |
||||
import java.awt.BorderLayout; |
||||
import java.awt.Component; |
||||
import java.awt.Dimension; |
||||
|
||||
/** |
||||
* @author Bjorn |
||||
* @version 10.0 |
||||
* Created by Bjorn on 2020-12-07 |
||||
*/ |
||||
public class MapStatusPane extends JPanel { |
||||
|
||||
public static final ZoomLevel[] ZOOM_LEVELS = new ZoomLevel[]{ |
||||
ZoomLevel.AUTO, |
||||
ZoomLevel.ZERO, ZoomLevel.ZEROPOINTFIVE, |
||||
ZoomLevel.ONE, ZoomLevel.ONEPOINTFIVE, |
||||
ZoomLevel.TWO, ZoomLevel.TWOPOINTFIVE, |
||||
ZoomLevel.THREE, ZoomLevel.THREEPOINTFIVE, |
||||
ZoomLevel.FOUR, ZoomLevel.FOURPOINTFIVE, |
||||
ZoomLevel.FIVE, ZoomLevel.FIVEPOINTFIVE, |
||||
ZoomLevel.SIX, ZoomLevel.SIXPOINTFIVE, |
||||
ZoomLevel.SEVEN, ZoomLevel.SEVENPOINTFIVE, |
||||
ZoomLevel.EIGHT, ZoomLevel.EIGHTPOINTFIVE, |
||||
ZoomLevel.NINE, ZoomLevel.NINEPOINTFIVE, |
||||
ZoomLevel.TEN, ZoomLevel.TENPOINTFIVE, |
||||
ZoomLevel.ELEVEN, ZoomLevel.ELEVENTPOINTFIVE, |
||||
ZoomLevel.TWELVE, ZoomLevel.TWELVEPOINTFIVE, |
||||
ZoomLevel.THIRTEEN, ZoomLevel.THIRTEENPOINTFIVE, |
||||
ZoomLevel.FOURTEEN, ZoomLevel.FOURTEENPOINTFIVE, |
||||
ZoomLevel.FIFTEEN, ZoomLevel.FIFTEENPOINTFIVE, |
||||
ZoomLevel.SIXTEEN, ZoomLevel.SIXTEENPOINTFIVE, |
||||
ZoomLevel.SEVENTEEN, ZoomLevel.SEVENTEENPOINTFIVE, |
||||
ZoomLevel.EIGHTEEN |
||||
}; |
||||
//深蓝和高德地图下拉框层级
|
||||
public static final ZoomLevel[] BLUE_ZOOM_LEVELS = ArrayUtils.subarray(ZOOM_LEVELS, 0, 34); |
||||
public static final ZoomLevel[] GAODE_ZOOM_LEVELS = ArrayUtils.addAll(new ZoomLevel[]{ZoomLevel.AUTO}, (ZoomLevel[]) ArrayUtils.subarray(ZOOM_LEVELS, 7, 38)); |
||||
private static final String AUTO_CENTER_STRING = Toolkit.i18nText("Fine-Design_Chart_Automatic"); |
||||
private static final String CUSTOM_CENTER_STRING = Toolkit.i18nText("Fine-Design_Chart_Custom"); |
||||
|
||||
|
||||
private JPanel levelAndCenterPane; |
||||
private JPanel longAndLatPane; |
||||
|
||||
private UIComboBox zoomLevel; |
||||
private UIButtonGroup viewCenterCom; |
||||
private UISpinner longitude; |
||||
private UISpinner latitude; |
||||
|
||||
public MapStatusPane() { |
||||
initComps(); |
||||
} |
||||
|
||||
public UIComboBox getZoomLevel() { |
||||
return zoomLevel; |
||||
} |
||||
|
||||
private void initComps() { |
||||
zoomLevel = new UIComboBox(ZOOM_LEVELS); |
||||
viewCenterCom = new UIButtonGroup(new String[]{AUTO_CENTER_STRING, CUSTOM_CENTER_STRING}); |
||||
longitude = new UISpinner(-Double.MAX_VALUE, Double.MAX_VALUE, 1, 0.0); |
||||
latitude = new UISpinner(-Double.MAX_VALUE, Double.MAX_VALUE, 1, 0.0); |
||||
|
||||
double p = TableLayout.PREFERRED; |
||||
double d = TableLayout4VanChartHelper.DESCRIPTION_AREA_WIDTH; |
||||
double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH; |
||||
double s = TableLayout4VanChartHelper.SECOND_EDIT_AREA_WIDTH; |
||||
double[] rowSize = {p, p, p}; |
||||
double[] columnSize = {d, e}; |
||||
double[] column = {d, s}; |
||||
|
||||
Component[][] comps = new Component[][]{ |
||||
new Component[]{null, null}, |
||||
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Zoom_Layer")), zoomLevel}, |
||||
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_View_Center")), viewCenterCom}, |
||||
}; |
||||
levelAndCenterPane = TableLayout4VanChartHelper.createGapTableLayoutPane(comps, rowSize, columnSize); |
||||
|
||||
Component[][] longAndLatComps = new Component[][]{ |
||||
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Longitude")), longitude}, |
||||
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Latitude")), latitude} |
||||
}; |
||||
longAndLatPane = TableLayout4VanChartHelper.createGapTableLayoutPane(longAndLatComps, rowSize, column); |
||||
longAndLatPane.setBorder(BorderFactory.createEmptyBorder(0, 12, 0, 0)); |
||||
longAndLatPane.setVisible(false); |
||||
|
||||
this.setLayout(new BorderLayout(0, 6)); |
||||
|
||||
this.add(levelAndCenterPane, BorderLayout.NORTH); |
||||
this.add(longAndLatPane, BorderLayout.CENTER); |
||||
|
||||
viewCenterCom.addActionListener(event -> |
||||
longAndLatPane.setVisible(!isAutoViewCenter())); |
||||
} |
||||
|
||||
@Override |
||||
public Dimension getPreferredSize() { |
||||
if (longAndLatPane.isVisible()) { |
||||
return super.getPreferredSize(); |
||||
} else { |
||||
return levelAndCenterPane.getPreferredSize(); |
||||
} |
||||
} |
||||
|
||||
private boolean isAutoViewCenter() { |
||||
return viewCenterCom.getSelectedIndex() == 0; |
||||
} |
||||
|
||||
|
||||
public void resetViewCenter(VanChartMapPlot mapPlot) { |
||||
mapPlot.setViewCenter(new ViewCenter()); |
||||
viewCenterCom.setSelectedIndex(0); |
||||
longitude.setValue(0); |
||||
latitude.setValue(0); |
||||
longAndLatPane.setVisible(false); |
||||
} |
||||
|
||||
public void resetZoomLevel(VanChartMapPlot mapPlot) { |
||||
mapPlot.setZoomLevel(ZoomLevel.AUTO); |
||||
zoomLevel.setSelectedItem(mapPlot.getZoomLevel()); |
||||
} |
||||
|
||||
public void populate(VanChartMapPlot mapPlot) { |
||||
zoomLevel.setSelectedItem(mapPlot.getZoomLevel()); |
||||
|
||||
ViewCenter viewCenter = mapPlot.getViewCenter(); |
||||
if (viewCenter.isAuto()) { |
||||
viewCenterCom.setSelectedIndex(0); |
||||
longitude.setValue(0); |
||||
latitude.setValue(0); |
||||
} else { |
||||
viewCenterCom.setSelectedIndex(1); |
||||
longitude.setValue(viewCenter.getLongitude()); |
||||
latitude.setValue(viewCenter.getLatitude()); |
||||
} |
||||
|
||||
longAndLatPane.setVisible(!isAutoViewCenter()); |
||||
} |
||||
|
||||
public void update(VanChartMapPlot mapPlot) { |
||||
mapPlot.setZoomLevel((ZoomLevel) zoomLevel.getSelectedItem()); |
||||
|
||||
ViewCenter viewCenter = mapPlot.getViewCenter(); |
||||
if (isAutoViewCenter()) { |
||||
viewCenter.setAuto(true); |
||||
} else { |
||||
viewCenter.setAuto(false); |
||||
viewCenter.setLongitude(longitude.getValue()); |
||||
viewCenter.setLatitude(latitude.getValue()); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,51 @@
|
||||
package com.fr.van.chart.map.designer.type; |
||||
|
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.gui.itextarea.UITextArea; |
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.plugin.chart.base.GisLayer; |
||||
import com.fr.van.chart.designer.TableLayout4VanChartHelper; |
||||
|
||||
import javax.swing.JPanel; |
||||
import java.awt.BorderLayout; |
||||
import java.awt.Component; |
||||
|
||||
/** |
||||
* @author Bjorn |
||||
* @version 10.0 |
||||
* Created by Bjorn on 2020-12-07 |
||||
*/ |
||||
public class TileLayerPane extends JPanel { |
||||
|
||||
private UITextArea customTileLayer; |
||||
private UITextArea attribution; |
||||
|
||||
|
||||
public TileLayerPane() { |
||||
double p = TableLayout.PREFERRED; |
||||
double[] rowSize = {p, p}; |
||||
double[] COLUMN_SIZE = {TableLayout4VanChartHelper.DESCRIPTION_AREA_WIDTH, TableLayout4VanChartHelper.SECOND_EDIT_AREA_WIDTH - 3}; |
||||
|
||||
customTileLayer = new UITextArea(); |
||||
attribution = new UITextArea(); |
||||
Component[][] comps = new Component[][]{ |
||||
new Component[]{new UILabel("url"), customTileLayer}, |
||||
new Component[]{new UILabel("Attribution"), attribution} |
||||
}; |
||||
JPanel panel = TableLayout4VanChartHelper.createGapTableLayoutPane(comps, rowSize, COLUMN_SIZE); |
||||
panel.setBorder(TableLayout4VanChartHelper.SECOND_EDIT_AREA_BORDER); |
||||
|
||||
this.setLayout(new BorderLayout()); |
||||
this.add(panel, BorderLayout.CENTER); |
||||
} |
||||
|
||||
public void populate(GisLayer layer) { |
||||
customTileLayer.setText(layer.getCustomTileLayer()); |
||||
attribution.setText(layer.getAttribution()); |
||||
} |
||||
|
||||
public void update(GisLayer layer) { |
||||
layer.setCustomTileLayer(customTileLayer.getText()); |
||||
layer.setAttribution(attribution.getText()); |
||||
} |
||||
} |
@ -0,0 +1,165 @@
|
||||
package com.fr.van.chart.map.designer.type; |
||||
|
||||
import com.fr.decision.webservice.v10.map.WMSFactory; |
||||
import com.fr.design.dialog.FineJOptionPane; |
||||
import com.fr.design.event.UIObserver; |
||||
import com.fr.design.event.UIObserverListener; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.design.gui.icheckbox.UICheckBox; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.gui.itextarea.UITextArea; |
||||
import com.fr.design.i18n.Toolkit; |
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.general.http.HttpClient; |
||||
import com.fr.plugin.chart.base.GisLayer; |
||||
import com.fr.plugin.chart.map.layer.WMSLayer; |
||||
import com.fr.van.chart.designer.TableLayout4VanChartHelper; |
||||
|
||||
import javax.swing.JPanel; |
||||
import javax.swing.SwingConstants; |
||||
import javax.swing.SwingWorker; |
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
import java.awt.BorderLayout; |
||||
import java.awt.Component; |
||||
import java.awt.event.ActionEvent; |
||||
import java.awt.event.ActionListener; |
||||
import java.awt.event.MouseAdapter; |
||||
import java.awt.event.MouseEvent; |
||||
|
||||
/** |
||||
* @author Bjorn |
||||
* @version 10.0 |
||||
* Created by Bjorn on 2020-12-07 |
||||
*/ |
||||
public class WMSLayerPane extends JPanel implements UIObserver { |
||||
private static final double[] COLUMN_SIZE = {48, TableLayout.FILL, TableLayout.PREFERRED}; |
||||
|
||||
private UITextArea wmsUrl; |
||||
private UIButton connectButton; |
||||
private JPanel wmsLayerPane; |
||||
|
||||
private List<UICheckBox> wmsLayerCheckBoxs = new ArrayList<>(); |
||||
|
||||
private UIObserverListener listener; |
||||
|
||||
@Override |
||||
public void registerChangeListener(UIObserverListener listener) { |
||||
this.listener = listener; |
||||
} |
||||
|
||||
@Override |
||||
public boolean shouldResponseChangeListener() { |
||||
return true; |
||||
} |
||||
|
||||
|
||||
public WMSLayerPane() { |
||||
final double p = TableLayout.PREFERRED; |
||||
double[] rowSize = {p}; |
||||
double[] COLUMN_SIZE = {TableLayout4VanChartHelper.DESCRIPTION_AREA_WIDTH, 84, 44}; |
||||
|
||||
|
||||
wmsUrl = new UITextArea(); |
||||
connectButton = new UIButton(Toolkit.i18nText("Fine-Design_Chart_Connect_WMP")); |
||||
|
||||
Component[][] comps = new Component[][]{ |
||||
new Component[]{new UILabel("url"), wmsUrl, connectButton} |
||||
}; |
||||
JPanel northPane = TableLayout4VanChartHelper.createGapTableLayoutPane(comps, rowSize, COLUMN_SIZE); |
||||
northPane.setBorder(TableLayout4VanChartHelper.SECOND_EDIT_AREA_BORDER); |
||||
|
||||
wmsLayerPane = new JPanel(new BorderLayout()); |
||||
resetWMSLayerPane(new ArrayList<>()); |
||||
|
||||
this.setLayout(new BorderLayout(0, 6)); |
||||
this.add(northPane, BorderLayout.NORTH); |
||||
this.add(wmsLayerPane, BorderLayout.CENTER); |
||||
addListener(); |
||||
} |
||||
|
||||
private void addListener() { |
||||
connectButton.addActionListener(new ActionListener() { |
||||
@Override |
||||
public void actionPerformed(ActionEvent e) { |
||||
|
||||
new SwingWorker<Void, Double>() { |
||||
private java.util.List<WMSLayer> list = new ArrayList<>(); |
||||
|
||||
@Override |
||||
protected Void doInBackground() { |
||||
HttpClient httpClient = new HttpClient(wmsUrl.getText() + "service=WMS&request=GetCapabilities"); |
||||
httpClient.asGet(); |
||||
|
||||
if (!httpClient.isServerAlive()) { |
||||
return null; |
||||
} |
||||
|
||||
String res = httpClient.getResponseText(); |
||||
List<String> layers = WMSFactory.readLayers(res); |
||||
list.clear(); |
||||
for (String layer : layers) { |
||||
list.add(new WMSLayer(layer, false)); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
protected void done() { |
||||
connectButton.setText(Toolkit.i18nText("Fine-Design_Chart_Connect_WMP")); |
||||
if (list != null && list.size() > 0) { |
||||
resetWMSLayerPane(list); |
||||
} else { |
||||
FineJOptionPane.showMessageDialog(null, Toolkit.i18nText("Fine-Design_Chart_Invalid_WMS")); |
||||
} |
||||
} |
||||
}.execute(); |
||||
} |
||||
}); |
||||
|
||||
connectButton.addMouseListener(new MouseAdapter() { |
||||
@Override |
||||
public void mousePressed(MouseEvent e) { |
||||
connectButton.setText(Toolkit.i18nText("Fine-Design_Chart_Connecting_WMP")); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
private void resetWMSLayerPane(java.util.List<WMSLayer> wmsLayers) { |
||||
int size = wmsLayers.size(); |
||||
double[] rowSize = new double[size]; |
||||
Component[][] comps = new Component[size][2]; |
||||
wmsLayerCheckBoxs.clear(); |
||||
wmsLayerPane.removeAll(); |
||||
for (int i = 0; i < size; i++) { |
||||
rowSize[i] = TableLayout.PREFERRED; |
||||
comps[i][0] = i == 0 ? new UILabel(Toolkit.i18nText("Fine-Design_Chart_WMS_Layers"), SwingConstants.RIGHT) : null; |
||||
WMSLayer layer = wmsLayers.get(i); |
||||
UICheckBox checkBox = new UICheckBox(layer.getLayer()); |
||||
checkBox.registerChangeListener(listener); |
||||
checkBox.setToolTipText(layer.getLayer()); |
||||
checkBox.setSelected(layer.isSelected()); |
||||
comps[i][1] = checkBox; |
||||
wmsLayerCheckBoxs.add(checkBox); |
||||
} |
||||
|
||||
wmsLayerPane.add(TableLayoutHelper.createCommonTableLayoutPane(comps, rowSize, COLUMN_SIZE, 0), BorderLayout.CENTER); |
||||
|
||||
updateUI(); |
||||
} |
||||
|
||||
public void populate(GisLayer layer) { |
||||
wmsUrl.setText(layer.getWmsUrl()); |
||||
resetWMSLayerPane(layer.getWmsLayers()); |
||||
} |
||||
|
||||
public void update(GisLayer layer) { |
||||
layer.setWmsUrl(wmsUrl.getText()); |
||||
layer.setWmsLayers(new ArrayList<>()); |
||||
for (UICheckBox checkBox : wmsLayerCheckBoxs) { |
||||
layer.addWmsLayer(new WMSLayer(checkBox.getText(), checkBox.isSelected())); |
||||
} |
||||
} |
||||
} |
||||
|
Loading…
Reference in new issue