LAPTOP-SB56SG4Q\86185
3 years ago
36 changed files with 2898 additions and 2 deletions
@ -1,3 +1,6 @@ |
|||||||
# open-JSD-6602 |
# open-JSD-6602 热力图 |
||||||
|
|
||||||
JSD-6602 热力图 |
JSD-6602 热力图\ |
||||||
|
免责说明:该源码为第三方爱好者提供,不保证源码和方案的可靠性,也不提供任何形式的源码教学指导和协助!\ |
||||||
|
仅作为开发者学习参考使用!禁止用于任何商业用途!\ |
||||||
|
为保护开发者隐私,开发者信息已隐去!若原开发者希望公开自己的信息,可联系hugh处理。 |
Binary file not shown.
@ -0,0 +1,19 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
||||||
|
<plugin> |
||||||
|
<id>com.fr.plugin.third.party.jsdggac</id> |
||||||
|
<name><![CDATA[矿场人员位置图]]></name> |
||||||
|
<active>yes</active> |
||||||
|
<version>0.6</version> |
||||||
|
<env-version>10.0</env-version> |
||||||
|
<jartime>2019-01-01</jartime> |
||||||
|
<vendor>fr.open</vendor> |
||||||
|
<description><![CDATA[]]></description> |
||||||
|
<change-notes><![CDATA[]]></change-notes> |
||||||
|
<extra-chart> |
||||||
|
<ChartTypeProvider class="com.fr.plugin.third.party.jsdggac.CustomChartType" chartID="CUSTOM_HEAT_MAP_CHART_JSDGGAC"/> |
||||||
|
</extra-chart> |
||||||
|
<extra-chart-designer> |
||||||
|
<IndependentChartUIProvider class="com.fr.plugin.third.party.jsdggac.CustomChartUI" chartID="CUSTOM_HEAT_MAP_CHART_JSDGGAC"/> |
||||||
|
</extra-chart-designer> |
||||||
|
<function-recorder class="com.fr.plugin.third.party.jsdggac.CustomChartType"/> |
||||||
|
</plugin> |
@ -0,0 +1,396 @@ |
|||||||
|
package com.fr.plugin.third.party.jsdggac; |
||||||
|
|
||||||
|
import com.fanruan.api.report.chart.BaseChartWithData; |
||||||
|
import com.fanruan.api.util.AssistKit; |
||||||
|
import com.fanruan.api.util.IOKit; |
||||||
|
import com.fanruan.api.util.StringKit; |
||||||
|
import com.fr.base.chart.cross.FormulaProcessor; |
||||||
|
import com.fr.base.chart.result.WebChartIDInfo; |
||||||
|
import com.fr.chart.ChartWebPara; |
||||||
|
import com.fr.chart.ChartWebParaProvider; |
||||||
|
import com.fr.chartx.data.field.ColumnField; |
||||||
|
import com.fr.general.GeneralUtils; |
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.plugin.third.party.jsdggac.data.CustomGanttColumnFieldCollection; |
||||||
|
import com.fr.stable.xml.XMLPrintWriter; |
||||||
|
import com.fr.stable.xml.XMLableReader; |
||||||
|
import com.fr.web.core.SessionPoolManager; |
||||||
|
import com.fr.web.core.TemplateSessionIDInfo; |
||||||
|
|
||||||
|
import java.awt.*; |
||||||
|
import java.math.BigDecimal; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
|
||||||
|
public class CustomChartConfig extends BaseChartWithData { |
||||||
|
private static final String ID = "CUSTOM_HEAT_MAP_CHART_JSDGGAC"; |
||||||
|
|
||||||
|
private double originX = 0; |
||||||
|
private double originY = 0; |
||||||
|
|
||||||
|
private double originDiagonalX = 0; |
||||||
|
private double originDiagonalY = 0; |
||||||
|
|
||||||
|
public double getOriginX() { |
||||||
|
return originX; |
||||||
|
} |
||||||
|
|
||||||
|
public void setOriginX(double originX) { |
||||||
|
this.originX = originX; |
||||||
|
} |
||||||
|
|
||||||
|
public double getOriginY() { |
||||||
|
return originY; |
||||||
|
} |
||||||
|
|
||||||
|
public void setOriginY(double originY) { |
||||||
|
this.originY = originY; |
||||||
|
} |
||||||
|
|
||||||
|
public double getOriginDiagonalX() { |
||||||
|
return originDiagonalX; |
||||||
|
} |
||||||
|
|
||||||
|
public void setOriginDiagonalX(double originDiagonalX) { |
||||||
|
this.originDiagonalX = originDiagonalX; |
||||||
|
} |
||||||
|
|
||||||
|
public double getOriginDiagonalY() { |
||||||
|
return originDiagonalY; |
||||||
|
} |
||||||
|
|
||||||
|
public void setOriginDiagonalY(double originDiagonalY) { |
||||||
|
this.originDiagonalY = originDiagonalY; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected Image designImage(int width, int height, int resolution, ChartWebParaProvider chartWebPara) { |
||||||
|
return IOKit.readImageWithCache("com/fr/plugin/third/party/jsdggac/images/chart_type_demo.png"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected Image exportImage(int width, int height, int resolution, ChartWebParaProvider chartWebPara) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public CustomChartConfig clone() throws CloneNotSupportedException { |
||||||
|
CustomChartConfig result = (CustomChartConfig) super.clone(); |
||||||
|
result.setOriginX(this.getOriginX()); |
||||||
|
result.setOriginY(this.getOriginY()); |
||||||
|
result.setOriginDiagonalX(this.getOriginDiagonalX()); |
||||||
|
result.setOriginDiagonalY(this.getOriginDiagonalY()); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int hashCode() { |
||||||
|
return super.hashCode() + AssistKit.hashCode(this.getOriginX()) + AssistKit.hashCode(this.getOriginY()) + AssistKit.hashCode(this.getOriginDiagonalX()) |
||||||
|
+ AssistKit.hashCode(this.getOriginDiagonalY()) |
||||||
|
; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean equals(Object ob) { |
||||||
|
return super.equals(ob) |
||||||
|
&& ob instanceof CustomChartConfig |
||||||
|
&& AssistKit.equals(this.getOriginX(), ((CustomChartConfig) ob).getOriginX()) |
||||||
|
&& AssistKit.equals(this.getOriginY(), ((CustomChartConfig) ob).getOriginY()) |
||||||
|
&& AssistKit.equals(this.getOriginDiagonalX(), ((CustomChartConfig) ob).getOriginDiagonalX()) |
||||||
|
&& AssistKit.equals(this.getOriginDiagonalY(), ((CustomChartConfig) ob).getOriginDiagonalY()) |
||||||
|
; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public JSONObject createAttributeConfig(ChartWebParaProvider chartWebPara) { |
||||||
|
JSONObject jsonObject = super.createAttributeConfig(chartWebPara); |
||||||
|
jsonObject.put("dataStatus", false); |
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return jsonObject; |
||||||
|
} |
||||||
|
if (isDatasEmpty()) { |
||||||
|
return jsonObject; |
||||||
|
} |
||||||
|
|
||||||
|
JSONObject mapConfigJson = new JSONObject(); |
||||||
|
mapConfigJson.put("originX", getOriginX()); |
||||||
|
mapConfigJson.put("originY", getOriginY()); |
||||||
|
mapConfigJson.put("originDiagonalX", getOriginDiagonalX()); |
||||||
|
mapConfigJson.put("originDiagonalY", getOriginDiagonalY()); |
||||||
|
jsonObject.put("mapConfig", mapConfigJson); |
||||||
|
|
||||||
|
//jsonObject.put("coordinates", createCoordinatesContent());
|
||||||
|
jsonObject.put("datas", createDatas()); |
||||||
|
jsonObject.put("dataStatus", true); |
||||||
|
return jsonObject; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void dealFormula(FormulaProcessor formulaProcessor) { |
||||||
|
super.dealFormula(formulaProcessor); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getID() { |
||||||
|
return ID; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void readAttr(XMLableReader xmLableReader) { |
||||||
|
super.readAttr(xmLableReader); |
||||||
|
setOriginX(xmLableReader.getAttrAsDouble("originX", 10)); |
||||||
|
if (getOriginX() <= 0) { |
||||||
|
setOriginX(10); |
||||||
|
} |
||||||
|
setOriginY(xmLableReader.getAttrAsDouble("originY", 0)); |
||||||
|
setOriginDiagonalX(xmLableReader.getAttrAsDouble("originDiagonalX", 0)); |
||||||
|
setOriginDiagonalY(xmLableReader.getAttrAsDouble("originDiagonalY", 0)); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void writeAttr(XMLPrintWriter xmlPrintWriter) { |
||||||
|
super.writeAttr(xmlPrintWriter); |
||||||
|
xmlPrintWriter.attr("originX", getOriginX()); |
||||||
|
xmlPrintWriter.attr("originY", getOriginY()); |
||||||
|
xmlPrintWriter.attr("originDiagonalX", getOriginDiagonalX()); |
||||||
|
xmlPrintWriter.attr("originDiagonalY", getOriginDiagonalY()); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private String createCoordinatesContent() { |
||||||
|
/* |
||||||
|
[[[[0, 0],[1200, 0],[1200, 800],[0, 800]]]] |
||||||
|
*/ |
||||||
|
String content = "[[[[" + getOriginX() + ", " + getOriginY() + "],[" + getOriginDiagonalX() + "," + getOriginY() + "],[" + getOriginDiagonalX() + ", " + getOriginDiagonalY() + "],[" + getOriginX() + ", " + getOriginDiagonalY() + "]]]]"; |
||||||
|
return content; |
||||||
|
} |
||||||
|
|
||||||
|
private JSONArray createDatas() { |
||||||
|
JSONArray datasJson = new JSONArray(); |
||||||
|
if (isDatasEmpty()) { |
||||||
|
return datasJson; |
||||||
|
} |
||||||
|
|
||||||
|
CustomGanttColumnFieldCollection columnFieldCollection = getFieldCollection(CustomGanttColumnFieldCollection.class); |
||||||
|
if (columnFieldCollection == null) { |
||||||
|
return datasJson; |
||||||
|
} |
||||||
|
|
||||||
|
List<Object> dataXValues = columnFieldCollection.getDataX().getValues(); |
||||||
|
List<Object> dataYValues = columnFieldCollection.getDataY().getValues(); |
||||||
|
|
||||||
|
double x, y; |
||||||
|
for (int i = 0, max = dataXValues.size() - 1; i <= max; i++) { |
||||||
|
x = Double.valueOf(String.valueOf(dataXValues.get(i))); |
||||||
|
y = Double.valueOf(String.valueOf(dataYValues.get(i))); |
||||||
|
datasJson.put(createDataValue(x, y)); |
||||||
|
} |
||||||
|
return datasJson; |
||||||
|
} |
||||||
|
|
||||||
|
private JSONArray createDataValue(double x, double y) { |
||||||
|
//double xValue = (4220315.5 - y) / 21000 * 4232;
|
||||||
|
//double yValue = (19513890.5 - x) / 6150 * 1240;
|
||||||
|
|
||||||
|
//xValue = (4220315.5 - 1736 / 10040 * 21000 - y) / (21000 * 5992 / 10040) * 5992;
|
||||||
|
//yValue = (19513890.5 - 120 / 2952 * 6150 - x) / (6150 * 2104 / 2952) * 2104;
|
||||||
|
|
||||||
|
//xValue = (4220315.5 - 1697 / 10040 * 21000 - y) / (21000 * 6075 / 10040) * 6075;
|
||||||
|
//yValue = (19513890.5 - 105 / 2952 * 6150 - x) / (6150 * 2153 / 2952) * 2153;
|
||||||
|
|
||||||
|
double xValue = (4220315.5 - y) / 21000 * 10040; |
||||||
|
double yValue = (19513890.5 - x) / 6150 * 2952; |
||||||
|
|
||||||
|
xValue = xValue - 1705; |
||||||
|
yValue = yValue - 129; |
||||||
|
xValue = toValue(xValue); |
||||||
|
yValue = toValue(yValue); |
||||||
|
JSONArray valueJson = new JSONArray(); |
||||||
|
valueJson.put(xValue); |
||||||
|
valueJson.put(yValue); |
||||||
|
return valueJson; |
||||||
|
} |
||||||
|
|
||||||
|
private double toValue(double value) { |
||||||
|
BigDecimal b = new BigDecimal(value); |
||||||
|
double f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); |
||||||
|
return f1; |
||||||
|
} |
||||||
|
|
||||||
|
private String getOwnerChartName(ChartWebPara chartWebPara) { |
||||||
|
if (chartWebPara == null) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
WebChartIDInfo chartIDInfo = chartWebPara.getChartIDInfo(); |
||||||
|
String ownerChartName = chartIDInfo.getName(); |
||||||
|
if (StringKit.isNotEmpty(ownerChartName)) { |
||||||
|
ownerChartName = ownerChartName.toUpperCase(); |
||||||
|
} |
||||||
|
return ownerChartName; |
||||||
|
} |
||||||
|
|
||||||
|
private String getBookPath(ChartWebPara chartWebPara) { |
||||||
|
if (chartWebPara == null) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
String sessionID = chartWebPara.getSessionID(); |
||||||
|
TemplateSessionIDInfo templateSessionIDInfo = (TemplateSessionIDInfo) SessionPoolManager.getSessionIDInfor(sessionID, TemplateSessionIDInfo.class); |
||||||
|
if (templateSessionIDInfo == null) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
String path = templateSessionIDInfo.getRelativePath(); |
||||||
|
return path; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private String trim(String value) { |
||||||
|
String tempValue = StringKit.trim(value); |
||||||
|
if (StringKit.isEmpty(tempValue)) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
return tempValue; |
||||||
|
} |
||||||
|
|
||||||
|
private List<Integer> toColorList(String content) { |
||||||
|
List<Integer> tempColors = new ArrayList<>(); |
||||||
|
if (StringKit.isEmpty(content)) { |
||||||
|
return tempColors; |
||||||
|
} |
||||||
|
content = content.trim(); |
||||||
|
if (StringKit.isEmpty(content)) { |
||||||
|
return tempColors; |
||||||
|
} |
||||||
|
String[] tempArray = content.split(","); |
||||||
|
if ((tempArray == null) || (tempArray.length <= 0)) { |
||||||
|
return tempColors; |
||||||
|
} |
||||||
|
String tempValue; |
||||||
|
int tempColorValue; |
||||||
|
for (int i = 0, max = tempArray.length - 1; i <= max; i++) { |
||||||
|
tempValue = tempArray[i]; |
||||||
|
tempColorValue = Integer.valueOf(tempValue); |
||||||
|
tempColors.add(tempColorValue); |
||||||
|
} |
||||||
|
|
||||||
|
return tempColors; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private int getObjectValue(List<Object> objs) { |
||||||
|
double tempValue = getObjectDoubleValue(objs); |
||||||
|
Double doubleValue = new Double(tempValue); |
||||||
|
int value = doubleValue.intValue(); |
||||||
|
return value; |
||||||
|
} |
||||||
|
|
||||||
|
private double getObjectDoubleValue(List<Object> objs) { |
||||||
|
double value = 0; |
||||||
|
if ((objs == null) || (objs.size() <= 0)) { |
||||||
|
return -1; |
||||||
|
} |
||||||
|
try { |
||||||
|
value = Double.valueOf(String.valueOf(objs.get(0))); |
||||||
|
} catch (Exception e) { |
||||||
|
value = -1; |
||||||
|
} |
||||||
|
|
||||||
|
return value; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private double getFinishRate(double monthFinishValue, double maxValue) { |
||||||
|
double f = monthFinishValue * 1.00 / maxValue; |
||||||
|
BigDecimal b = new BigDecimal(f); |
||||||
|
double f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); |
||||||
|
return f1; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private double toDouble(Object obj) { |
||||||
|
if (obj == null) { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
String tempStr = String.valueOf(obj); |
||||||
|
if (StringKit.isEmpty(tempStr)) { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
double value = Double.valueOf(tempStr); |
||||||
|
return value; |
||||||
|
} |
||||||
|
|
||||||
|
private JSONObject createSymbolJson(int index, List<Object> values) { |
||||||
|
JSONObject circleJson = new JSONObject(); |
||||||
|
circleJson.put("type", "circle"); |
||||||
|
circleJson.put("path", ""); |
||||||
|
if (isListEmpty(values) || (index >= values.size())) { |
||||||
|
return circleJson; |
||||||
|
} |
||||||
|
|
||||||
|
String path = GeneralUtils.objectToString(values.get(index)); |
||||||
|
if (StringKit.isEmpty(path)) { |
||||||
|
return circleJson; |
||||||
|
} |
||||||
|
JSONObject itemJson = new JSONObject(); |
||||||
|
itemJson.put("type", "image"); |
||||||
|
itemJson.put("path", path); |
||||||
|
return itemJson; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private boolean isListEmpty(List list) { |
||||||
|
if ((list == null) || (list.size() <= 0)) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private boolean isDatasEmpty() { |
||||||
|
if (isDataXsEmpty() || isDataYsEmpty()) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
private boolean isDataXsEmpty() { |
||||||
|
CustomGanttColumnFieldCollection columnFieldCollection = getFieldCollection(CustomGanttColumnFieldCollection.class); |
||||||
|
if (columnFieldCollection == null) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
ColumnField dataXColumnField = columnFieldCollection.getDataX(); |
||||||
|
if (dataXColumnField == null) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
List<Object> values = dataXColumnField.getValues(); |
||||||
|
if ((values == null) || (values.size() <= 0)) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
private boolean isDataYsEmpty() { |
||||||
|
CustomGanttColumnFieldCollection columnFieldCollection = getFieldCollection(CustomGanttColumnFieldCollection.class); |
||||||
|
if (columnFieldCollection == null) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
ColumnField dataXColumnField = columnFieldCollection.getDataY(); |
||||||
|
if (dataXColumnField == null) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
List<Object> values = dataXColumnField.getValues(); |
||||||
|
if ((values == null) || (values.size() <= 0)) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,60 @@ |
|||||||
|
package com.fr.plugin.third.party.jsdggac; |
||||||
|
|
||||||
|
import com.fanruan.api.report.chart.BaseChartType; |
||||||
|
import com.fanruan.api.report.chart.BaseChartWithData; |
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = "com.fr.plugin.third.party.jsdggac") |
||||||
|
public class CustomChartType extends BaseChartType { |
||||||
|
|
||||||
|
/** |
||||||
|
* 该种图表所有的图表对象实例,比如柱形图就有堆积柱形图,百分比堆积柱形图等等 |
||||||
|
* |
||||||
|
* @return 所有的图表对象实例 |
||||||
|
*/ |
||||||
|
@Focus(id = "com.fr.plugin.third.party.jsdggac", text = "plugin-jsd-ggac", source = Original.PLUGIN) |
||||||
|
public BaseChartWithData[] getChartTypes() { |
||||||
|
return new BaseChartWithData[]{ |
||||||
|
new CustomChartConfig() |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 图表在web端展现时需要的JS文件 |
||||||
|
* |
||||||
|
* @return JS文件数组 |
||||||
|
*/ |
||||||
|
public String[] getRequiredJS() { |
||||||
|
return new String[]{ |
||||||
|
"com/fr/plugin/third/party/jsdggac/web/echarts.min.js", |
||||||
|
"com/fr/plugin/third/party/jsdggac/web/echarts-gl.min.js", |
||||||
|
"com/fr/plugin/third/party/jsdggac/web/custom_map.js", |
||||||
|
"com/fr/plugin/third/party/jsdggac/web/customGanttPlusWrapper.js", |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 图表在web端展现时需要的CSS文件 |
||||||
|
* |
||||||
|
* @return CSS文件数组 |
||||||
|
*/ |
||||||
|
public String[] getRequiredCss() { |
||||||
|
return new String[]{ |
||||||
|
"com/fr/plugin/third/party/jsdggac/web/common.css" |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* JS对象名,该对象一般是一个函数,执行后会在给定的dom中绘制图表 |
||||||
|
* |
||||||
|
* @return JS对象名 |
||||||
|
*/ |
||||||
|
public String getWrapperName() { |
||||||
|
return "customChartJsdggacWrapper"; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,63 @@ |
|||||||
|
package com.fr.plugin.third.party.jsdggac; |
||||||
|
|
||||||
|
import com.fanruan.api.design.chart.*; |
||||||
|
import com.fr.design.gui.frpane.AttributeChangeListener; |
||||||
|
import com.fr.plugin.third.party.jsdggac.data.CustomGanttDataCellFieldsPane; |
||||||
|
import com.fr.plugin.third.party.jsdggac.data.CustomGanttDataSetFieldsPane; |
||||||
|
import com.fr.plugin.third.party.jsdggac.ui.CustomGanttTypePane; |
||||||
|
import com.fr.plugin.third.party.jsdggac.ui.CustomStylePane; |
||||||
|
|
||||||
|
public class CustomChartUI extends BaseChartTypeUI { |
||||||
|
public String CHART_NAME = "矿场热力图"; |
||||||
|
|
||||||
|
@Override |
||||||
|
public DefaultTypePane getPlotTypePane() { |
||||||
|
return new CustomGanttTypePane(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public BaseDataPane getChartDataPane(AttributeChangeListener listener) { |
||||||
|
return new BaseDataPane(listener) { |
||||||
|
@Override |
||||||
|
protected SingleDataPane createSingleDataPane() { |
||||||
|
return new SingleDataPane(new CustomGanttDataSetFieldsPane(), |
||||||
|
new CustomGanttDataCellFieldsPane() |
||||||
|
); |
||||||
|
} |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public BaseOtherPane[] getAttrPaneArray(AttributeChangeListener listener) { |
||||||
|
return new BaseOtherPane[]{ |
||||||
|
//new CustomGanttTitlePane(),
|
||||||
|
new CustomStylePane(), |
||||||
|
// new CustomGanttShowSettingsPane(),
|
||||||
|
// new VanChartStylePane(listener),
|
||||||
|
new DefaultOtherPane()}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getIconPath() { |
||||||
|
return "com/fr/plugin/third/party/jsdggac/images/chart_icon.png"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getName() { |
||||||
|
return CHART_NAME; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String[] getSubName() { |
||||||
|
return new String[]{ |
||||||
|
CHART_NAME |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String[] getDemoImagePath() { |
||||||
|
return new String[]{ |
||||||
|
"com/fr/plugin/third/party/jsdggac/images/chart_type_demo.png" |
||||||
|
}; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,198 @@ |
|||||||
|
package com.fr.plugin.third.party.jsdggac; |
||||||
|
|
||||||
|
import com.fanruan.api.util.StringKit; |
||||||
|
import com.fr.general.GeneralUtils; |
||||||
|
import com.fr.plugin.third.party.jsdggac.data.CustomGanttColumnFieldCollection; |
||||||
|
|
||||||
|
import java.awt.*; |
||||||
|
import java.math.BigDecimal; |
||||||
|
import java.text.SimpleDateFormat; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Collections; |
||||||
|
import java.util.Date; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class CustomGanttDataFactory { |
||||||
|
public static synchronized List<String> createProjectNames(CustomGanttColumnFieldCollection dataSource) { |
||||||
|
List<String> projectList = new ArrayList<>(); |
||||||
|
if (dataSource == null) { |
||||||
|
return projectList; |
||||||
|
} |
||||||
|
//List<Object> projectNames = dataSource.getProjectName().getValues();
|
||||||
|
List<Object> projectNames = null; |
||||||
|
int size = projectNames.size(); |
||||||
|
if (size <= 0) { |
||||||
|
return projectList; |
||||||
|
} |
||||||
|
String tempValue; |
||||||
|
Object tempObj; |
||||||
|
|
||||||
|
for (int i = 0, max = size - 1; i <= max; i++) { |
||||||
|
tempObj = projectNames.get(i); |
||||||
|
if (tempObj == null) { |
||||||
|
tempValue = ""; |
||||||
|
addNotRepeatingObj(tempValue, projectList); |
||||||
|
continue; |
||||||
|
} |
||||||
|
tempValue = GeneralUtils.objectToString(tempObj); |
||||||
|
addNotRepeatingObj(tempValue, projectList); |
||||||
|
} |
||||||
|
Collections.reverse(projectList); |
||||||
|
return projectList; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 针对echarts的bug处理,若系列名称有数字,有中文,会默认按数字处理,有中文会显示NaN,故在前面加中文处理 |
||||||
|
* |
||||||
|
* @param name |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
private static String createSeriesName(String name) { |
||||||
|
String tempName = name; |
||||||
|
if (StringKit.isEmpty(name)) { |
||||||
|
tempName = ""; |
||||||
|
} |
||||||
|
return "甘特图" + tempName; |
||||||
|
} |
||||||
|
|
||||||
|
private static synchronized String objectToString(Object obj) { |
||||||
|
String tempValue = GeneralUtils.objectToString(obj); |
||||||
|
return tempValue; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private static ThreadLocal<SimpleDateFormat> threadLocalFormat = new ThreadLocal<SimpleDateFormat>() { |
||||||
|
@Override |
||||||
|
protected SimpleDateFormat initialValue() { |
||||||
|
return new SimpleDateFormat("yyyy-MM-dd"); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
private static ThreadLocal<SimpleDateFormat> threadLocalFormat1 = new ThreadLocal<SimpleDateFormat>() { |
||||||
|
@Override |
||||||
|
protected SimpleDateFormat initialValue() { |
||||||
|
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 转为时间戳 |
||||||
|
* |
||||||
|
* @param obj |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
private static synchronized long objectToTimestamp(Object obj) { |
||||||
|
if (obj == null) { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
Date tempDate = null; |
||||||
|
if (obj instanceof Date) { |
||||||
|
tempDate = (Date) obj; |
||||||
|
return tempDate.getTime(); |
||||||
|
} |
||||||
|
|
||||||
|
String tempValue = GeneralUtils.objectToString(obj); |
||||||
|
if (StringKit.isEmpty(tempValue)) { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
int length = tempValue.length(); |
||||||
|
try { |
||||||
|
if (length == 10) { |
||||||
|
tempDate = threadLocalFormat.get().parse(tempValue); |
||||||
|
} else if (length == 19) { |
||||||
|
tempDate = threadLocalFormat1.get().parse(tempValue); |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
if (tempDate != null) { |
||||||
|
return tempDate.getTime(); |
||||||
|
} |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 转为0-1的四位小数 |
||||||
|
* |
||||||
|
* @param obj |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
private static synchronized double objectToRate(Object obj) { |
||||||
|
if (obj == null) { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
double tempValue = 0; |
||||||
|
if (obj instanceof Double) { |
||||||
|
tempValue = (Double) obj; |
||||||
|
} else { |
||||||
|
String tempContent = objectToString(obj); |
||||||
|
if (StringKit.isEmpty(tempContent)) { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
tempContent = tempContent.trim(); |
||||||
|
if (StringKit.isEmpty(tempContent)) { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
tempValue = Double.valueOf(tempContent); |
||||||
|
} |
||||||
|
|
||||||
|
if (tempValue <= 0) { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
if (tempValue >= 1) { |
||||||
|
return 1; |
||||||
|
} |
||||||
|
BigDecimal bigDecimal = new BigDecimal(String.valueOf(tempValue)); |
||||||
|
tempValue = bigDecimal.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue(); |
||||||
|
return tempValue; |
||||||
|
} |
||||||
|
|
||||||
|
private static synchronized String objectToRateShow(double value) { |
||||||
|
BigDecimal bigDecimal = new BigDecimal(String.valueOf(value)); |
||||||
|
BigDecimal bigDecimal1 = new BigDecimal("100"); |
||||||
|
String tempValue = bigDecimal.multiply(bigDecimal1).doubleValue() + "%"; |
||||||
|
return tempValue; |
||||||
|
} |
||||||
|
|
||||||
|
private static synchronized void addNotRepeatingObj(String value, List<String> values) { |
||||||
|
String tempValue = value; |
||||||
|
if (StringKit.isEmpty(tempValue)) { |
||||||
|
tempValue = ""; |
||||||
|
} |
||||||
|
if (values.contains(tempValue)) { |
||||||
|
return; |
||||||
|
} |
||||||
|
values.add(tempValue); |
||||||
|
} |
||||||
|
|
||||||
|
private static synchronized int getIndex(String value, List<String> values) { |
||||||
|
int index = values.indexOf(value); |
||||||
|
return index; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public static String rgbToHex(Color color) { |
||||||
|
if (color == null) { |
||||||
|
return "#000000"; |
||||||
|
} |
||||||
|
String value = "#" + String.format("%02X", color.getRed()) + String.format("%02X", color.getGreen()) + String.format("%02X", color.getBlue()); |
||||||
|
return value; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public static Color colorToGray(Color color) { |
||||||
|
if (color == null) { |
||||||
|
return new Color(0); |
||||||
|
} |
||||||
|
|
||||||
|
int gray = (int) ((color.getRed() * 30 + color.getGreen() * 59 + color.getBlue() * 11 + 50) * 0.01); |
||||||
|
return new Color(gray); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,39 @@ |
|||||||
|
package com.fr.plugin.third.party.jsdggac; |
||||||
|
|
||||||
|
|
||||||
|
import com.fanruan.api.design.ui.component.UIComboBox; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class UIComboBoxWithNone extends UIComboBox { |
||||||
|
protected String getDefaultLocaleString() { |
||||||
|
return Toolkit.i18nText("Fine-Design_Chart_Use_None"); |
||||||
|
} |
||||||
|
|
||||||
|
public UIComboBoxWithNone() { |
||||||
|
this.addDefaultItem(); |
||||||
|
} |
||||||
|
|
||||||
|
public void refreshBoxItems(List var1) { |
||||||
|
super.refreshBoxItems(var1); |
||||||
|
this.addDefaultItem(); |
||||||
|
} |
||||||
|
|
||||||
|
public void clearBoxItems() { |
||||||
|
super.clearBoxItems(); |
||||||
|
this.addDefaultItem(); |
||||||
|
} |
||||||
|
|
||||||
|
private void addDefaultItem() { |
||||||
|
this.addItem(this.getDefaultLocaleString()); |
||||||
|
} |
||||||
|
|
||||||
|
public void setSelectedItem(Object var1) { |
||||||
|
super.setSelectedItem(var1); |
||||||
|
if (this.getSelectedIndex() == -1) { |
||||||
|
super.setSelectedItem(this.getDefaultLocaleString()); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,197 @@ |
|||||||
|
package com.fr.plugin.third.party.jsdggac.color; |
||||||
|
|
||||||
|
|
||||||
|
import java.awt.*; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Arrays; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class ColorUtils { |
||||||
|
/** |
||||||
|
* 颜色变暗 |
||||||
|
* |
||||||
|
* @param color |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static Color toDark(Color color) { |
||||||
|
if (color == null) { |
||||||
|
return Color.black; |
||||||
|
} |
||||||
|
float[] hsb = rgb2hsb(color.getRed(), color.getGreen(), color.getBlue()); |
||||||
|
float h = hsb[0]; |
||||||
|
float s = hsb[1]; |
||||||
|
float b = hsb[2]; |
||||||
|
if (s >= 0.5) { |
||||||
|
s = (float) (s - 0.5); |
||||||
|
} else { |
||||||
|
s = 0; |
||||||
|
} |
||||||
|
int[] rgb = hsb2rgb(h, s, b); |
||||||
|
Color tempColor = new Color(rgb[0], rgb[2], rgb[2]); |
||||||
|
return tempColor; |
||||||
|
} |
||||||
|
|
||||||
|
public static float[] rgb2hsb(int rgbR, int rgbG, int rgbB) { |
||||||
|
assert 0 <= rgbR && rgbR <= 255; |
||||||
|
assert 0 <= rgbG && rgbG <= 255; |
||||||
|
assert 0 <= rgbB && rgbB <= 255; |
||||||
|
int[] rgb = new int[]{rgbR, rgbG, rgbB}; |
||||||
|
Arrays.sort(rgb); |
||||||
|
int max = rgb[2]; |
||||||
|
int min = rgb[0]; |
||||||
|
|
||||||
|
float hsbB = max / 255.0f; |
||||||
|
float hsbS = max == 0 ? 0 : (max - min) / (float) max; |
||||||
|
|
||||||
|
float hsbH = 0; |
||||||
|
if (max == rgbR && rgbG >= rgbB) { |
||||||
|
hsbH = (rgbG - rgbB) * 60f / (max - min) + 0; |
||||||
|
} else if (max == rgbR && rgbG < rgbB) { |
||||||
|
hsbH = (rgbG - rgbB) * 60f / (max - min) + 360; |
||||||
|
} else if (max == rgbG) { |
||||||
|
hsbH = (rgbB - rgbR) * 60f / (max - min) + 120; |
||||||
|
} else if (max == rgbB) { |
||||||
|
hsbH = (rgbR - rgbG) * 60f / (max - min) + 240; |
||||||
|
} |
||||||
|
|
||||||
|
return new float[]{hsbH, hsbS, hsbB}; |
||||||
|
} |
||||||
|
|
||||||
|
public static int[] hsb2rgb(float h, float s, float v) { |
||||||
|
assert Float.compare(h, 0.0f) >= 0 && Float.compare(h, 360.0f) <= 0; |
||||||
|
assert Float.compare(s, 0.0f) >= 0 && Float.compare(s, 1.0f) <= 0; |
||||||
|
assert Float.compare(v, 0.0f) >= 0 && Float.compare(v, 1.0f) <= 0; |
||||||
|
|
||||||
|
float r = 0, g = 0, b = 0; |
||||||
|
int i = (int) ((h / 60) % 6); |
||||||
|
float f = (h / 60) - i; |
||||||
|
float p = v * (1 - s); |
||||||
|
float q = v * (1 - f * s); |
||||||
|
float t = v * (1 - (1 - f) * s); |
||||||
|
switch (i) { |
||||||
|
case 0: |
||||||
|
r = v; |
||||||
|
g = t; |
||||||
|
b = p; |
||||||
|
break; |
||||||
|
case 1: |
||||||
|
r = q; |
||||||
|
g = v; |
||||||
|
b = p; |
||||||
|
break; |
||||||
|
case 2: |
||||||
|
r = p; |
||||||
|
g = v; |
||||||
|
b = t; |
||||||
|
break; |
||||||
|
case 3: |
||||||
|
r = p; |
||||||
|
g = q; |
||||||
|
b = v; |
||||||
|
break; |
||||||
|
case 4: |
||||||
|
r = t; |
||||||
|
g = p; |
||||||
|
b = v; |
||||||
|
break; |
||||||
|
case 5: |
||||||
|
r = v; |
||||||
|
g = p; |
||||||
|
b = q; |
||||||
|
break; |
||||||
|
default: |
||||||
|
break; |
||||||
|
} |
||||||
|
return new int[]{(int) (r * 255.0), (int) (g * 255.0), |
||||||
|
(int) (b * 255.0)}; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取渐变颜色 当前颜色到 红绿蓝 渐变 |
||||||
|
* |
||||||
|
* @param color |
||||||
|
* @param count |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static List<Color> getGradientColors(Color color, int count) { |
||||||
|
List<Color> colors = new ArrayList<>(); |
||||||
|
if (count <= 0) { |
||||||
|
return colors; |
||||||
|
} |
||||||
|
if (count <= 1) { |
||||||
|
count = 1; |
||||||
|
} |
||||||
|
int max = count - 1; |
||||||
|
if (color == null) { |
||||||
|
for (int i = 0; i <= max; i++) { |
||||||
|
colors.add(Color.black); |
||||||
|
} |
||||||
|
return colors; |
||||||
|
} |
||||||
|
if (count == 1) { |
||||||
|
colors.add(color); |
||||||
|
return colors; |
||||||
|
} |
||||||
|
|
||||||
|
Color endColor = new Color(220, 220, 220); |
||||||
|
endColor = Color.RED; |
||||||
|
|
||||||
|
int maxStep = Math.abs(Math.abs(color.getRGB()) - Math.abs(endColor.getRGB())); |
||||||
|
int tempStep = Math.abs(Math.abs(color.getRGB()) - Math.abs(Color.GREEN.getRGB())); |
||||||
|
if (tempStep >= maxStep) { |
||||||
|
maxStep = tempStep; |
||||||
|
endColor = Color.GREEN; |
||||||
|
} |
||||||
|
|
||||||
|
tempStep = Math.abs(Math.abs(color.getRGB()) - Math.abs(Color.BLUE.getRGB())); |
||||||
|
if (tempStep >= maxStep) { |
||||||
|
maxStep = tempStep; |
||||||
|
endColor = Color.BLUE; |
||||||
|
} |
||||||
|
endColor = new Color(220, 220, 220); |
||||||
|
double redStep = (endColor.getRed() - color.getRed()) / (count + 1); |
||||||
|
double greenStep = (endColor.getGreen() - color.getGreen()) / (count + 1); |
||||||
|
double blueStep = (endColor.getBlue() - color.getBlue()) / (count + 1); |
||||||
|
|
||||||
|
int redValue = color.getRed(); |
||||||
|
int greenValue = color.getGreen(); |
||||||
|
int blueValue = color.getBlue(); |
||||||
|
|
||||||
|
double redTempValue = color.getRed(); |
||||||
|
double greenTempValue = color.getGreen(); |
||||||
|
double blueTempValue = color.getBlue(); |
||||||
|
|
||||||
|
Color tempColor = null; |
||||||
|
for (int i = 0; i <= max; i++) { |
||||||
|
if (redValue >= 255) { |
||||||
|
redValue = 255; |
||||||
|
} |
||||||
|
if (greenValue >= 255) { |
||||||
|
greenValue = 255; |
||||||
|
} |
||||||
|
if (blueValue >= 255) { |
||||||
|
blueValue = 255; |
||||||
|
} |
||||||
|
tempColor = new Color(redValue, greenValue, blueValue); |
||||||
|
colors.add(tempColor); |
||||||
|
redTempValue = (redTempValue + redStep); |
||||||
|
greenTempValue = (greenTempValue + greenStep); |
||||||
|
blueTempValue = (blueTempValue + blueStep); |
||||||
|
redValue = (int) redTempValue; |
||||||
|
greenValue = (int) greenTempValue; |
||||||
|
blueValue = (int) blueTempValue; |
||||||
|
} |
||||||
|
return colors; |
||||||
|
} |
||||||
|
|
||||||
|
public static String rgbToHex(Color color) { |
||||||
|
if (color == null) { |
||||||
|
return "#000000"; |
||||||
|
} |
||||||
|
String value = "#" + String.format("%02X", color.getRed()) + String.format("%02X", color.getGreen()) + String.format("%02X", color.getBlue()); |
||||||
|
return value; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,37 @@ |
|||||||
|
package com.fr.plugin.third.party.jsdggac.data; |
||||||
|
|
||||||
|
import com.fanruan.api.report.chart.field.BaseColumnFieldCollection; |
||||||
|
import com.fr.chartx.data.field.ColumnField; |
||||||
|
|
||||||
|
|
||||||
|
public class CustomGanttColumnFieldCollection extends BaseColumnFieldCollection { |
||||||
|
|
||||||
|
/** |
||||||
|
* x轴数据 |
||||||
|
*/ |
||||||
|
private ColumnField dataX = new ColumnField(); |
||||||
|
|
||||||
|
/** |
||||||
|
* y轴数据 |
||||||
|
*/ |
||||||
|
private ColumnField dataY = new ColumnField(); |
||||||
|
|
||||||
|
|
||||||
|
public ColumnField getDataX() { |
||||||
|
return dataX; |
||||||
|
} |
||||||
|
|
||||||
|
public void setDataX(ColumnField dataX) { |
||||||
|
this.dataX = dataX; |
||||||
|
} |
||||||
|
|
||||||
|
public ColumnField getDataY() { |
||||||
|
return dataY; |
||||||
|
} |
||||||
|
|
||||||
|
public void setDataY(ColumnField dataY) { |
||||||
|
this.dataY = dataY; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,55 @@ |
|||||||
|
package com.fr.plugin.third.party.jsdggac.data; |
||||||
|
|
||||||
|
import com.fanruan.api.design.chart.field.BaseCellDataFieldsPane; |
||||||
|
import com.fanruan.api.design.ui.component.formula.UIFormulaTextField; |
||||||
|
|
||||||
|
import java.awt.*; |
||||||
|
|
||||||
|
public class CustomGanttDataCellFieldsPane extends BaseCellDataFieldsPane<CustomGanttColumnFieldCollection> { |
||||||
|
private UIFormulaTextField dataXPane; |
||||||
|
private UIFormulaTextField dataYPane; |
||||||
|
|
||||||
|
public void initComponents() { |
||||||
|
dataXPane = new UIFormulaTextField(); |
||||||
|
dataYPane = new UIFormulaTextField(); |
||||||
|
super.initComponents(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String[] fieldLabels() { |
||||||
|
return new String[]{ |
||||||
|
"X轴", |
||||||
|
"Y轴" |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected Component[] fieldComponents() { |
||||||
|
return new Component[]{ |
||||||
|
this.dataXPane, |
||||||
|
this.dataYPane, |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected UIFormulaTextField[] formulaPanes() { |
||||||
|
return new UIFormulaTextField[]{ |
||||||
|
this.dataXPane, |
||||||
|
this.dataYPane, |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(CustomGanttColumnFieldCollection dataConf) { |
||||||
|
populateField(dataXPane, dataConf.getDataX()); |
||||||
|
populateField(dataYPane, dataConf.getDataY()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public CustomGanttColumnFieldCollection updateBean() { |
||||||
|
CustomGanttColumnFieldCollection dataConf = new CustomGanttColumnFieldCollection(); |
||||||
|
updateField(dataXPane, dataConf.getDataX()); |
||||||
|
updateField(dataYPane, dataConf.getDataY()); |
||||||
|
return dataConf; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,57 @@ |
|||||||
|
package com.fr.plugin.third.party.jsdggac.data; |
||||||
|
|
||||||
|
import com.fanruan.api.design.chart.field.BaseDataSetFieldsPane; |
||||||
|
import com.fanruan.api.design.ui.component.UIComboBox; |
||||||
|
import com.fr.plugin.third.party.jsdggac.UIComboBoxWithNone; |
||||||
|
|
||||||
|
import java.awt.*; |
||||||
|
|
||||||
|
|
||||||
|
public class CustomGanttDataSetFieldsPane extends BaseDataSetFieldsPane<CustomGanttColumnFieldCollection> { |
||||||
|
private UIComboBoxWithNone dataXPane; |
||||||
|
private UIComboBoxWithNone dataYPane; |
||||||
|
|
||||||
|
public void initComponents() { |
||||||
|
dataXPane = new UIComboBoxWithNone(); |
||||||
|
dataYPane = new UIComboBoxWithNone(); |
||||||
|
super.initComponents(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String[] fieldLabels() { |
||||||
|
return new String[]{ |
||||||
|
"X轴", |
||||||
|
"Y轴" |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected Component[] fieldComponents() { |
||||||
|
return new Component[]{ |
||||||
|
this.dataXPane, |
||||||
|
this.dataYPane, |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected UIComboBox[] filedComboBoxes() { |
||||||
|
return new UIComboBox[]{ |
||||||
|
this.dataXPane, |
||||||
|
this.dataYPane, |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(CustomGanttColumnFieldCollection dataConf) { |
||||||
|
populateField(dataXPane, dataConf.getDataX()); |
||||||
|
populateField(dataYPane, dataConf.getDataY()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public CustomGanttColumnFieldCollection updateBean() { |
||||||
|
CustomGanttColumnFieldCollection dataConf = new CustomGanttColumnFieldCollection(); |
||||||
|
updateField(dataXPane, dataConf.getDataX()); |
||||||
|
updateField(dataYPane, dataConf.getDataY()); |
||||||
|
return dataConf; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,59 @@ |
|||||||
|
package com.fr.plugin.third.party.jsdggac.ui; |
||||||
|
|
||||||
|
import com.fr.chart.chartglyph.MapHotAreaColor; |
||||||
|
import com.fr.design.event.UIObserver; |
||||||
|
import com.fr.design.event.UIObserverListener; |
||||||
|
import com.fr.design.gui.frpane.AbstractAttrNoScrollPane; |
||||||
|
import com.fr.design.gui.frpane.AttributeChangeListener; |
||||||
|
import com.fr.van.chart.range.component.SectionIntervalConfigPaneWithOutNum; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
|
||||||
|
public class ColorSectionPane extends AbstractAttrNoScrollPane implements UIObserver { |
||||||
|
private SectionIntervalConfigPaneWithOutNum sectionIntervalConfigPaneWithOutNum; |
||||||
|
protected UIObserverListener uiObserverListener; |
||||||
|
|
||||||
|
public ColorSectionPane() { |
||||||
|
if (this.shouldResponseChangeListener()) { |
||||||
|
addAttributeChangeListener(new AttributeChangeListener() { |
||||||
|
@Override |
||||||
|
public void attributeChange() { |
||||||
|
if (ColorSectionPane.this.uiObserverListener != null) { |
||||||
|
ColorSectionPane.this.uiObserverListener.doChange(); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected JPanel createContentPane() { |
||||||
|
sectionIntervalConfigPaneWithOutNum = new SectionIntervalConfigPaneWithOutNum(this); |
||||||
|
return sectionIntervalConfigPaneWithOutNum; |
||||||
|
} |
||||||
|
|
||||||
|
public void updateBean(MapHotAreaColor mapHotAreaColor) { |
||||||
|
sectionIntervalConfigPaneWithOutNum.updateBean(mapHotAreaColor); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public void populateBean(MapHotAreaColor mapHotAreaColor) { |
||||||
|
sectionIntervalConfigPaneWithOutNum.populateBean(mapHotAreaColor); |
||||||
|
} |
||||||
|
|
||||||
|
public String title4PopupWindow() { |
||||||
|
return "区域颜色设置"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void registerChangeListener(UIObserverListener uiObserverListener) { |
||||||
|
this.uiObserverListener = uiObserverListener; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean shouldResponseChangeListener() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,251 @@ |
|||||||
|
package com.fr.plugin.third.party.jsdggac.ui; |
||||||
|
|
||||||
|
import com.fanruan.api.design.DesignKit; |
||||||
|
import com.fr.base.BaseUtils; |
||||||
|
import com.fr.design.dialog.BasicDialog; |
||||||
|
import com.fr.design.dialog.BasicPane; |
||||||
|
import com.fr.design.dialog.DialogActionAdapter; |
||||||
|
import com.fr.design.dialog.FineJOptionPane; |
||||||
|
import com.fr.design.gui.ibutton.UIButton; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import javax.swing.event.ListSelectionEvent; |
||||||
|
import javax.swing.event.ListSelectionListener; |
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import java.awt.event.ActionListener; |
||||||
|
import java.awt.event.MouseAdapter; |
||||||
|
import java.awt.event.MouseEvent; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
|
||||||
|
public class ColorSeriesConfPane extends BasicPane { |
||||||
|
private JList colorList; |
||||||
|
private UIButton addButton; |
||||||
|
private UIButton editButton; |
||||||
|
private UIButton removeButton; |
||||||
|
private UIButton moveUpButton; |
||||||
|
private UIButton moveDownButton; |
||||||
|
ActionListener addActionListener = new ActionListener() { |
||||||
|
public void actionPerformed(ActionEvent var1) { |
||||||
|
final ColorSettingPane var2 = new ColorSettingPane(); |
||||||
|
BasicDialog var3 = var2.showSmallWindow(SwingUtilities.getWindowAncestor(ColorSeriesConfPane.this), new DialogActionAdapter() { |
||||||
|
public void doOk() { |
||||||
|
Color var1 = var2.update(); |
||||||
|
if (var1 != null) { |
||||||
|
DefaultListModel var2x = (DefaultListModel) ColorSeriesConfPane.this.colorList.getModel(); |
||||||
|
var2x.addElement(var1); |
||||||
|
ColorSeriesConfPane.this.colorList.setSelectedIndex(var2x.size() - 1); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
}); |
||||||
|
var3.setTitle("增加颜色..."); |
||||||
|
var3.setVisible(true); |
||||||
|
} |
||||||
|
}; |
||||||
|
ActionListener editActionListener = new ActionListener() { |
||||||
|
public void actionPerformed(ActionEvent var1) { |
||||||
|
ColorSeriesConfPane.this.editPrinterList(); |
||||||
|
} |
||||||
|
}; |
||||||
|
ActionListener removeActionListener = new ActionListener() { |
||||||
|
public void actionPerformed(ActionEvent var1) { |
||||||
|
int var2 = ColorSeriesConfPane.this.colorList.getSelectedIndex(); |
||||||
|
if (var2 != -1) { |
||||||
|
int var3 = FineJOptionPane.showConfirmDialog(ColorSeriesConfPane.this, "你确实想删除选中的颜色吗?", DesignKit.i18nText("Fine-Design_Basic_Remove"), 2, 3); |
||||||
|
if (var3 == 0) { |
||||||
|
((DefaultListModel) ColorSeriesConfPane.this.colorList.getModel()).remove(var2); |
||||||
|
if (ColorSeriesConfPane.this.colorList.getModel().getSize() > 0) { |
||||||
|
if (var2 < ColorSeriesConfPane.this.colorList.getModel().getSize()) { |
||||||
|
ColorSeriesConfPane.this.colorList.setSelectedIndex(var2); |
||||||
|
} else { |
||||||
|
ColorSeriesConfPane.this.colorList.setSelectedIndex(ColorSeriesConfPane.this.colorList.getModel().getSize() - 1); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
ColorSeriesConfPane.this.checkButtonEnabled(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
ActionListener moveUpActionListener = new ActionListener() { |
||||||
|
public void actionPerformed(ActionEvent var1) { |
||||||
|
int var2 = ColorSeriesConfPane.this.colorList.getSelectedIndex(); |
||||||
|
if (var2 > 0) { |
||||||
|
DefaultListModel var3 = (DefaultListModel) ColorSeriesConfPane.this.colorList.getModel(); |
||||||
|
Object var4 = var3.get(var2 - 1); |
||||||
|
var3.set(var2 - 1, var3.get(var2)); |
||||||
|
var3.set(var2, var4); |
||||||
|
ColorSeriesConfPane.this.colorList.setSelectedIndex(var2 - 1); |
||||||
|
ColorSeriesConfPane.this.checkButtonEnabled(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
}; |
||||||
|
ActionListener moveDownActionListener = new ActionListener() { |
||||||
|
public void actionPerformed(ActionEvent var1) { |
||||||
|
int var2 = ColorSeriesConfPane.this.colorList.getSelectedIndex(); |
||||||
|
if (var2 != -1) { |
||||||
|
if (var2 < ColorSeriesConfPane.this.colorList.getModel().getSize() - 1) { |
||||||
|
DefaultListModel var3 = (DefaultListModel) ColorSeriesConfPane.this.colorList.getModel(); |
||||||
|
Object var4 = var3.get(var2 + 1); |
||||||
|
var3.set(var2 + 1, var3.get(var2)); |
||||||
|
var3.set(var2, var4); |
||||||
|
ColorSeriesConfPane.this.colorList.setSelectedIndex(var2 + 1); |
||||||
|
ColorSeriesConfPane.this.checkButtonEnabled(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
ListSelectionListener printerSelectionListener = new ListSelectionListener() { |
||||||
|
public void valueChanged(ListSelectionEvent var1) { |
||||||
|
ColorSeriesConfPane.this.checkButtonEnabled(); |
||||||
|
} |
||||||
|
}; |
||||||
|
MouseAdapter mouseClickedListener = new MouseAdapter() { |
||||||
|
public void mouseClicked(MouseEvent var1) { |
||||||
|
int var2 = var1.getClickCount(); |
||||||
|
if (var2 >= 2) { |
||||||
|
ColorSeriesConfPane.this.editPrinterList(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
public class ColorRenderer extends JLabel implements ListCellRenderer { |
||||||
|
@Override |
||||||
|
public Component getListCellRendererComponent(JList list, |
||||||
|
Object value, |
||||||
|
int index, |
||||||
|
boolean isSelected, |
||||||
|
boolean cellHasFocus) { |
||||||
|
if ((value != null) && (value instanceof Color)) { |
||||||
|
Color color = (Color) value; |
||||||
|
this.setOpaque(true); //此句是重点,设置背景颜色必须先将它设置为不透明的,因为默认是透明的。。。
|
||||||
|
this.setText(" "); |
||||||
|
this.setBackground(color); |
||||||
|
} |
||||||
|
return this; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public ColorSeriesConfPane() { |
||||||
|
this.initComponents(); |
||||||
|
} |
||||||
|
|
||||||
|
protected void initComponents() { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
this.setBorder(BorderFactory.createEmptyBorder(6, 2, 4, 2)); |
||||||
|
JToolBar var1 = new JToolBar(); |
||||||
|
this.add(var1, "North"); |
||||||
|
Dimension var2 = new Dimension(24, 24); |
||||||
|
this.addButton = new UIButton(BaseUtils.readIcon("/com/fr/base/images/cell/control/add.png")); |
||||||
|
this.addButton.addActionListener(this.addActionListener); |
||||||
|
this.addButton.setToolTipText(DesignKit.i18nText("Fine-Design_Basic_Add")); |
||||||
|
this.addButton.setPreferredSize(var2); |
||||||
|
this.editButton = new UIButton(BaseUtils.readIcon("/com/fr/design/images/control/edit.png")); |
||||||
|
this.editButton.addActionListener(this.editActionListener); |
||||||
|
this.editButton.setToolTipText(DesignKit.i18nText("Fine-Design_Report_Edit")); |
||||||
|
this.editButton.setPreferredSize(var2); |
||||||
|
this.removeButton = new UIButton(BaseUtils.readIcon("/com/fr/base/images/cell/control/remove.png")); |
||||||
|
this.removeButton.addActionListener(this.removeActionListener); |
||||||
|
this.removeButton.setToolTipText(DesignKit.i18nText("Fine-Design_Basic_Remove")); |
||||||
|
this.removeButton.setPreferredSize(var2); |
||||||
|
this.moveUpButton = new UIButton(BaseUtils.readIcon("/com/fr/design/images/control/up.png")); |
||||||
|
this.moveUpButton.addActionListener(this.moveUpActionListener); |
||||||
|
this.moveUpButton.setToolTipText(DesignKit.i18nText("Fine-Design_Basic_Utils_Move_Up")); |
||||||
|
this.moveUpButton.setPreferredSize(var2); |
||||||
|
this.moveDownButton = new UIButton(BaseUtils.readIcon("/com/fr/design/images/control/down.png")); |
||||||
|
this.moveDownButton.addActionListener(this.moveDownActionListener); |
||||||
|
this.moveDownButton.setToolTipText(DesignKit.i18nText("Fine-Design_Basic_Utils_Move_Down")); |
||||||
|
this.moveDownButton.setPreferredSize(var2); |
||||||
|
var1.add(this.addButton); |
||||||
|
var1.add(this.editButton); |
||||||
|
var1.add(this.removeButton); |
||||||
|
var1.add(this.moveUpButton); |
||||||
|
var1.add(this.moveDownButton); |
||||||
|
this.colorList = new JList(new DefaultListModel()); |
||||||
|
this.colorList.addListSelectionListener(this.printerSelectionListener); |
||||||
|
this.colorList.addMouseListener(this.mouseClickedListener); |
||||||
|
this.colorList.setCellRenderer(new ColorRenderer()); |
||||||
|
this.add(new JScrollPane(this.colorList), "Center"); |
||||||
|
this.checkButtonEnabled(); |
||||||
|
} |
||||||
|
|
||||||
|
protected String title4PopupWindow() { |
||||||
|
return "完成颜色设置"; |
||||||
|
} |
||||||
|
|
||||||
|
private void checkButtonEnabled() { |
||||||
|
this.editButton.setEnabled(false); |
||||||
|
this.removeButton.setEnabled(false); |
||||||
|
this.moveUpButton.setEnabled(false); |
||||||
|
this.moveDownButton.setEnabled(false); |
||||||
|
int var1 = this.colorList.getSelectedIndex(); |
||||||
|
if (var1 >= 0) { |
||||||
|
this.editButton.setEnabled(true); |
||||||
|
this.removeButton.setEnabled(true); |
||||||
|
if (var1 > 0) { |
||||||
|
this.moveUpButton.setEnabled(true); |
||||||
|
} |
||||||
|
|
||||||
|
if (var1 < this.colorList.getModel().getSize() - 1) { |
||||||
|
this.moveDownButton.setEnabled(true); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public void editPrinterList() { |
||||||
|
final int var1 = this.colorList.getSelectedIndex(); |
||||||
|
final ColorSettingPane var2 = new ColorSettingPane(); |
||||||
|
BasicDialog var3 = var2.showSmallWindow(SwingUtilities.getWindowAncestor(this), new DialogActionAdapter() { |
||||||
|
public void doOk() { |
||||||
|
Color var1x = var2.update(); |
||||||
|
if (var1x != null) { |
||||||
|
DefaultListModel var2x = (DefaultListModel) ColorSeriesConfPane.this.colorList.getModel(); |
||||||
|
var2x.remove(var1); |
||||||
|
var2x.add(var1, var1x); |
||||||
|
ColorSeriesConfPane.this.colorList.setSelectedIndex(var1); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
}); |
||||||
|
var2.populate((Color) this.colorList.getSelectedValue()); |
||||||
|
var3.setTitle( "编辑颜色..."); |
||||||
|
var3.setVisible(true); |
||||||
|
} |
||||||
|
|
||||||
|
public void populate(List<Integer> colors) { |
||||||
|
DefaultListModel var3 = (DefaultListModel) this.colorList.getModel(); |
||||||
|
var3.removeAllElements(); |
||||||
|
if ((colors == null) || (colors.size() <= 0)) { |
||||||
|
return; |
||||||
|
} |
||||||
|
int size = colors.size(); |
||||||
|
for (int i = 0, max = size - 1; i <= max; i++) { |
||||||
|
var3.addElement(new Color(colors.get(i))); |
||||||
|
} |
||||||
|
if (size >= 1) { |
||||||
|
this.colorList.setSelectedIndex(0); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public List update() { |
||||||
|
List<Integer> var2 = new ArrayList(); |
||||||
|
DefaultListModel var3 = (DefaultListModel) this.colorList.getModel(); |
||||||
|
Color color; |
||||||
|
for (int i = 0, max = var3.size() - 1; i <= max; i++) { |
||||||
|
color = (Color) var3.get(i); |
||||||
|
var2.add(color.getRGB()); |
||||||
|
} |
||||||
|
return var2; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,46 @@ |
|||||||
|
package com.fr.plugin.third.party.jsdggac.ui; |
||||||
|
|
||||||
|
import com.fanruan.api.design.ui.component.UILabel; |
||||||
|
import com.fr.design.dialog.BasicPane; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.style.color.NewColorSelectBox; |
||||||
|
|
||||||
|
import java.awt.*; |
||||||
|
|
||||||
|
public class ColorSettingPane extends BasicPane { |
||||||
|
//private ColorBackgroundQuickPane colorBackgroundQuickPane;
|
||||||
|
private NewColorSelectBox colorBackgroundQuickPane; |
||||||
|
|
||||||
|
public ColorSettingPane() { |
||||||
|
this.initComponents(); |
||||||
|
} |
||||||
|
|
||||||
|
protected void initComponents() { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
colorBackgroundQuickPane = new NewColorSelectBox(100); |
||||||
|
this.add(new UILabel("设置颜色"), BorderLayout.NORTH); |
||||||
|
this.add(colorBackgroundQuickPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
public void checkValid() throws Exception { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
protected boolean isShowHelpButton() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
protected String title4PopupWindow() { |
||||||
|
return "设置颜色"; |
||||||
|
} |
||||||
|
|
||||||
|
public void populate(Color var1) { |
||||||
|
//this.colorBackgroundQuickPane.populateColor(var1);
|
||||||
|
this.colorBackgroundQuickPane.setSelectObject(var1); |
||||||
|
} |
||||||
|
|
||||||
|
public Color update() { |
||||||
|
//return this.colorBackgroundQuickPane.updateColor();
|
||||||
|
return this.colorBackgroundQuickPane.getSelectObject(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,461 @@ |
|||||||
|
package com.fr.plugin.third.party.jsdggac.ui; |
||||||
|
|
||||||
|
|
||||||
|
import com.fanruan.api.design.DesignKit; |
||||||
|
import com.fr.base.BaseUtils; |
||||||
|
import com.fr.base.FRContext; |
||||||
|
import com.fr.base.Style; |
||||||
|
import com.fr.base.Utils; |
||||||
|
import com.fr.design.constants.LayoutConstants; |
||||||
|
import com.fr.design.constants.UIConstants; |
||||||
|
import com.fr.design.event.GlobalNameListener; |
||||||
|
import com.fr.design.event.GlobalNameObserver; |
||||||
|
import com.fr.design.gui.ibutton.UIColorButton; |
||||||
|
import com.fr.design.gui.ibutton.UIToggleButton; |
||||||
|
import com.fr.design.gui.icombobox.LineComboBox; |
||||||
|
import com.fr.design.gui.icombobox.UIComboBox; |
||||||
|
import com.fr.design.gui.style.AbstractBasicStylePane; |
||||||
|
import com.fr.design.layout.TableLayout; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.utils.gui.GUICoreUtils; |
||||||
|
import com.fr.general.ComparatorUtils; |
||||||
|
import com.fr.general.DefaultValues; |
||||||
|
import com.fr.general.FRFont; |
||||||
|
import com.fr.stable.Constants; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.MouseAdapter; |
||||||
|
import java.awt.event.MouseEvent; |
||||||
|
import java.util.Vector; |
||||||
|
|
||||||
|
/** |
||||||
|
* Pane to edit Font. |
||||||
|
*/ |
||||||
|
public class CustomFRFontPane extends AbstractBasicStylePane implements GlobalNameObserver { |
||||||
|
public static final Integer[] FONT_SIZES = { |
||||||
|
6, 8, 9, 10, 11, 12, 13, 14, 16, |
||||||
|
18, 20, 22, 24, 26, 28, 30, 32, 34, |
||||||
|
36, 38, 40, 48, 64, 72, 128 |
||||||
|
}; |
||||||
|
private static final int MAX_FONT_SIZE = 100; |
||||||
|
private static final Dimension BUTTON_SIZE = new Dimension(20, 18); |
||||||
|
private static final Dimension UNDER_LINE_SIZE = new Dimension(87, 20); |
||||||
|
private static final Dimension HIDE_SIZE = new Dimension(0, 0); |
||||||
|
private final String[] fontSizeStyles = {com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_FR_Font_Plain"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_FR_Font_Bold"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_FR_Font_Italic"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_FR_Font_Bolditalic")}; |
||||||
|
private JPanel buttonPane; |
||||||
|
private JPanel isSuperOrSubPane; |
||||||
|
private UIComboBox fontNameComboBox; |
||||||
|
private UIComboBox fontSizeStyleComboBox; |
||||||
|
protected UIComboBox fontSizeComboBox; |
||||||
|
private UIToggleButton bold; |
||||||
|
private UIToggleButton italic; |
||||||
|
private UIToggleButton underline; |
||||||
|
private GlobalNameListener globalNameListener = null; |
||||||
|
|
||||||
|
// underline
|
||||||
|
private LineComboBox underlineCombo; |
||||||
|
private UIColorButton colorSelectPane; |
||||||
|
// effects.
|
||||||
|
private UIToggleButton isStrikethroughCheckBox; |
||||||
|
private UIToggleButton isShadowCheckBox; |
||||||
|
private UIToggleButton superPane; |
||||||
|
private UIToggleButton subPane; |
||||||
|
private JPanel linePane; |
||||||
|
private int italic_bold; |
||||||
|
|
||||||
|
private String title = DesignKit.i18nText("Fine-Design_Report_Sytle_FRFont"); |
||||||
|
; |
||||||
|
|
||||||
|
/** |
||||||
|
* LeftPane和RightPane之间的间隙,也是fontSizeStyleComboBox与fontSizeComboBox之间的间隙,之前的默认值为VGAP_LARGE |
||||||
|
*/ |
||||||
|
private int hGapBetweenLeftPaneAndRightPane = LayoutConstants.VGAP_LARGE; |
||||||
|
|
||||||
|
|
||||||
|
public CustomFRFontPane(String text) { |
||||||
|
this.title = text; |
||||||
|
this.initComponents(); |
||||||
|
} |
||||||
|
|
||||||
|
public CustomFRFontPane() { |
||||||
|
this.initComponents(); |
||||||
|
} |
||||||
|
|
||||||
|
public CustomFRFontPane(int hGapBetweenLeftPaneAndRightPane) { |
||||||
|
this.hGapBetweenLeftPaneAndRightPane = hGapBetweenLeftPaneAndRightPane; |
||||||
|
this.initComponents(); |
||||||
|
} |
||||||
|
|
||||||
|
public static void main(String[] args) { |
||||||
|
JFrame jf = new JFrame("test"); |
||||||
|
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); |
||||||
|
JPanel content = (JPanel) jf.getContentPane(); |
||||||
|
content.setLayout(new BorderLayout()); |
||||||
|
content.add(new CustomFRFontPane(), BorderLayout.CENTER); |
||||||
|
GUICoreUtils.centerWindow(jf); |
||||||
|
jf.setSize(290, 400); |
||||||
|
jf.setVisible(true); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return this.title; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Use font to populate pane. |
||||||
|
*/ |
||||||
|
public void populateBean(FRFont frFont) { |
||||||
|
fontNameComboBox.setSelectedItem(frFont.getFamily()); |
||||||
|
fontSizeStyleComboBox.setSelectedIndex(frFont.getStyle()); |
||||||
|
fontSizeComboBox.setSelectedItem(Utils.round5(frFont.getSize2D())); |
||||||
|
bold.setSelected(frFont.isBold()); |
||||||
|
italic.setSelected(frFont.isItalic()); |
||||||
|
|
||||||
|
// foreground.
|
||||||
|
this.colorSelectPane.setColor(frFont.getForeground()); |
||||||
|
this.colorSelectPane.repaint(); |
||||||
|
// update frFont.
|
||||||
|
|
||||||
|
CardLayout cly = (CardLayout) linePane.getLayout(); |
||||||
|
int line = frFont.getUnderline(); |
||||||
|
if (line == Constants.LINE_NONE) { |
||||||
|
underline.setSelected(false); |
||||||
|
cly.show(linePane, "none"); |
||||||
|
linePane.setPreferredSize(HIDE_SIZE); |
||||||
|
} else { |
||||||
|
underline.setSelected(true); |
||||||
|
cly.show(linePane, "combobox"); |
||||||
|
linePane.setPreferredSize(UNDER_LINE_SIZE); |
||||||
|
this.underlineCombo.setSelectedLineStyle(line); |
||||||
|
} |
||||||
|
// effects
|
||||||
|
this.isStrikethroughCheckBox.setSelected(frFont.isStrikethrough()); |
||||||
|
this.isShadowCheckBox.setSelected(frFont.isShadow()); |
||||||
|
if (frFont.isSuperscript()) { |
||||||
|
this.superPane.setSelected(true); |
||||||
|
this.subPane.setSelected(false); |
||||||
|
} else if (frFont.isSubscript()) { |
||||||
|
this.superPane.setSelected(false); |
||||||
|
this.subPane.setSelected(true); |
||||||
|
} else { |
||||||
|
this.superPane.setSelected(false); |
||||||
|
this.subPane.setSelected(false); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public FRFont updateFRFont() { |
||||||
|
FRFont frFont = FRFont.getInstance(); |
||||||
|
|
||||||
|
frFont = frFont.applyName((String) fontNameComboBox.getSelectedItem()); |
||||||
|
frFont = frFont.applyStyle(fontSizeStyleComboBox.getSelectedIndex()); |
||||||
|
frFont = frFont.applySize(Float.parseFloat(fontSizeComboBox.getSelectedItem().toString())); |
||||||
|
frFont = frFont.applyForeground(this.colorSelectPane.getColor()); |
||||||
|
|
||||||
|
int line = underline.isSelected() ? this.underlineCombo.getSelectedLineStyle() : Constants.LINE_NONE; |
||||||
|
frFont = frFont.applyUnderline(line); |
||||||
|
|
||||||
|
frFont = frFont.applyUnderline(this.underlineCombo.getSelectedLineStyle()); |
||||||
|
|
||||||
|
frFont = frFont.applyStrikethrough(isStrikethroughCheckBox.isSelected()); |
||||||
|
frFont = frFont.applyShadow(isShadowCheckBox.isSelected()); |
||||||
|
frFont = updateOthers(frFont); |
||||||
|
|
||||||
|
return frFont; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Update pane to get new font. |
||||||
|
*/ |
||||||
|
public FRFont update(FRFont frFont) { |
||||||
|
|
||||||
|
if (ComparatorUtils.equals(globalNameListener.getGlobalName(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Name"))) { |
||||||
|
frFont = frFont.applyName((String) fontNameComboBox.getSelectedItem()); |
||||||
|
} |
||||||
|
if (ComparatorUtils.equals(globalNameListener.getGlobalName(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_FR_Font_Style"))) { |
||||||
|
frFont = frFont.applyStyle(fontSizeStyleComboBox.getSelectedIndex()); |
||||||
|
} |
||||||
|
if (ComparatorUtils.equals(globalNameListener.getGlobalName(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_FRFont_Size"))) { |
||||||
|
frFont = frFont.applySize(Float.parseFloat(fontSizeComboBox.getSelectedItem().toString())); |
||||||
|
} |
||||||
|
if (ComparatorUtils.equals(globalNameListener.getGlobalName(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_FR_Font_Foreground"))) { |
||||||
|
frFont = frFont.applyForeground(this.colorSelectPane.getColor()); |
||||||
|
} |
||||||
|
|
||||||
|
if (ComparatorUtils.equals(globalNameListener.getGlobalName(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_FR_Font_Underline"))) { |
||||||
|
|
||||||
|
int line = underline.isSelected() ? this.underlineCombo.getSelectedLineStyle() : Constants.LINE_NONE; |
||||||
|
frFont = frFont.applyUnderline(line); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
if (ComparatorUtils.equals(globalNameListener.getGlobalName(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_FRFont_Line_Style"))) { |
||||||
|
frFont = frFont.applyUnderline(this.underlineCombo.getSelectedLineStyle()); |
||||||
|
} |
||||||
|
|
||||||
|
if (ComparatorUtils.equals(globalNameListener.getGlobalName(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_FR_Font_Strikethrough"))) { |
||||||
|
frFont = frFont.applyStrikethrough(isStrikethroughCheckBox.isSelected()); |
||||||
|
} |
||||||
|
if (ComparatorUtils.equals(globalNameListener.getGlobalName(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_FR_Font_Shadow"))) { |
||||||
|
frFont = frFont.applyShadow(isShadowCheckBox.isSelected()); |
||||||
|
} |
||||||
|
|
||||||
|
frFont = updateOthers(frFont); |
||||||
|
|
||||||
|
return frFont; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private FRFont updateOthers(FRFont frFont) { |
||||||
|
frFont = updateSubSuperscript(frFont); |
||||||
|
return frFont; |
||||||
|
} |
||||||
|
|
||||||
|
private FRFont updateSubSuperscript(FRFont frFont) { |
||||||
|
boolean isSuper = frFont.isSuperscript(); |
||||||
|
boolean isSub = frFont.isSubscript(); |
||||||
|
if (ComparatorUtils.equals(globalNameListener.getGlobalName(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_FR_Font_Superscript"))) { |
||||||
|
//如果上标没有选中,点击则选中上标,并且下标一定是不选中状态
|
||||||
|
//如果上标选中,点击则取消选中上标,字体回复正常
|
||||||
|
if (superPane.isSelected() && !isSuper) { |
||||||
|
frFont = frFont.applySuperscript(true); |
||||||
|
frFont = frFont.applySubscript(false); |
||||||
|
this.subPane.setSelected(false); |
||||||
|
} else if (!superPane.isSelected() && isSuper) { |
||||||
|
frFont = frFont.applySuperscript(false); |
||||||
|
} |
||||||
|
} |
||||||
|
if (ComparatorUtils.equals(globalNameListener.getGlobalName(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_FR_Font_Subscript"))) { |
||||||
|
if (subPane.isSelected() && !isSub) { |
||||||
|
frFont = frFont.applySubscript(true); |
||||||
|
frFont = frFont.applySuperscript(false); |
||||||
|
this.superPane.setSelected(false); |
||||||
|
} else if (!subPane.isSelected() && isSub) { |
||||||
|
frFont = frFont.applySubscript(false); |
||||||
|
} |
||||||
|
} |
||||||
|
return frFont; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(Style style) { |
||||||
|
this.populateBean(style.getFRFont()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Style update(Style style) { |
||||||
|
// TODO Auto-generated method stub
|
||||||
|
FRFont frFont = style.getFRFont(); |
||||||
|
frFont = this.update(frFont); |
||||||
|
return style.deriveFRFont(frFont); |
||||||
|
} |
||||||
|
|
||||||
|
public static Vector<Integer> getFontSizes() { |
||||||
|
Vector<Integer> FONT_SIZES = new Vector<Integer>(); |
||||||
|
for (int i = 1; i < MAX_FONT_SIZE; i++) { |
||||||
|
FONT_SIZES.add(i); |
||||||
|
} |
||||||
|
return FONT_SIZES; |
||||||
|
} |
||||||
|
|
||||||
|
protected void initComponents() { |
||||||
|
fontSizeStyleComboBox = new UIComboBox(fontSizeStyles); |
||||||
|
fontNameComboBox = new UIComboBox(Utils.getAvailableFontFamilyNames4Report()); |
||||||
|
fontNameComboBox.setPreferredSize(new Dimension(144, 20)); |
||||||
|
fontSizeComboBox = new UIComboBox(getFontSizes()); |
||||||
|
fontSizeComboBox.setEditable(true); |
||||||
|
this.underlineCombo = new LineComboBox(UIConstants.BORDER_LINE_STYLE_ARRAY); |
||||||
|
colorSelectPane = new UIColorButton(); |
||||||
|
bold = new UIToggleButton(BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/bold.png")); |
||||||
|
italic = new UIToggleButton(BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/italic.png")); |
||||||
|
underline = new UIToggleButton(BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/underline.png")); |
||||||
|
bold.setPreferredSize(BUTTON_SIZE); |
||||||
|
italic.setPreferredSize(BUTTON_SIZE); |
||||||
|
underline.setPreferredSize(BUTTON_SIZE); |
||||||
|
isStrikethroughCheckBox = new UIToggleButton(BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/strikethrough.png")); |
||||||
|
isStrikethroughCheckBox.setPreferredSize(BUTTON_SIZE); |
||||||
|
isShadowCheckBox = new UIToggleButton(BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/shadow.png")); |
||||||
|
isShadowCheckBox.setPreferredSize(BUTTON_SIZE); |
||||||
|
superPane = new UIToggleButton(BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/sup.png")); |
||||||
|
superPane.setPreferredSize(BUTTON_SIZE); |
||||||
|
subPane = new UIToggleButton(BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/sub.png")); |
||||||
|
subPane.setPreferredSize(BUTTON_SIZE); |
||||||
|
Component[] SuperOrSubComponents = new Component[]{ |
||||||
|
superPane, subPane |
||||||
|
}; |
||||||
|
isSuperOrSubPane = new JPanel(new BorderLayout()); |
||||||
|
isSuperOrSubPane.add(GUICoreUtils.createFlowPane(SuperOrSubComponents, FlowLayout.LEFT, LayoutConstants.HGAP_SMALL)); |
||||||
|
Component[] components_font = new Component[]{ |
||||||
|
colorSelectPane, underline, isStrikethroughCheckBox, isShadowCheckBox |
||||||
|
}; |
||||||
|
buttonPane = new JPanel(new BorderLayout()); |
||||||
|
buttonPane.add(GUICoreUtils.createFlowPane(components_font, FlowLayout.LEFT, LayoutConstants.HGAP_SMALL)); |
||||||
|
linePane = new JPanel(new CardLayout()); |
||||||
|
initAllNames(); |
||||||
|
setToolTips(); |
||||||
|
this.setLayout(new BorderLayout()); |
||||||
|
this.add(createPane(), BorderLayout.CENTER); |
||||||
|
DefaultValues defaultValues = FRContext.getDefaultValues(); |
||||||
|
populateBean(defaultValues.getFRFont()); |
||||||
|
} |
||||||
|
|
||||||
|
private void initAllNames() { |
||||||
|
fontSizeStyleComboBox.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_FR_Font_Style")); |
||||||
|
fontNameComboBox.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Name")); |
||||||
|
fontSizeComboBox.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_FRFont_Size")); |
||||||
|
colorSelectPane.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_FR_Font_Foreground")); |
||||||
|
italic.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_FR_Font_Italic")); |
||||||
|
bold.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_FR_Font_Bold")); |
||||||
|
underline.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_FR_Font_Underline")); |
||||||
|
underlineCombo.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_FRFont_Line_Style")); |
||||||
|
isStrikethroughCheckBox.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_FR_Font_Strikethrough")); |
||||||
|
isShadowCheckBox.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_FR_Font_Shadow")); |
||||||
|
superPane.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_FR_Font_Superscript")); |
||||||
|
subPane.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_FR_Font_Subscript")); |
||||||
|
} |
||||||
|
|
||||||
|
private void setToolTips() { |
||||||
|
colorSelectPane.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_FR_Font_Foreground")); |
||||||
|
italic.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_FR_Font_Italic")); |
||||||
|
bold.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_FR_Font_Bold")); |
||||||
|
underline.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_FR_Font_Underline")); |
||||||
|
isStrikethroughCheckBox.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_FR_Font_Strikethrough")); |
||||||
|
isShadowCheckBox.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_FR_Font_Shadow")); |
||||||
|
superPane.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_FR_Font_Superscript")); |
||||||
|
subPane.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_FR_Font_Subscript")); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private JPanel createLinePane() { |
||||||
|
linePane.add(new JPanel(), "none"); |
||||||
|
JPanel gap = new JPanel(new GridLayout(0, 1)); |
||||||
|
gap.add(underlineCombo); |
||||||
|
linePane.add(gap, "combobox"); |
||||||
|
underline.addChangeListener(new ChangeListener() { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
CardLayout cly = (CardLayout) linePane.getLayout(); |
||||||
|
cly.show(linePane, underline.isSelected() ? "combobox" : "none"); |
||||||
|
if (underline.isSelected()) { |
||||||
|
linePane.setPreferredSize(UNDER_LINE_SIZE); |
||||||
|
} else { |
||||||
|
linePane.setPreferredSize(HIDE_SIZE); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
return linePane; |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createLeftPane() { |
||||||
|
double p = TableLayout.PREFERRED; |
||||||
|
double f = TableLayout.FILL; |
||||||
|
double[] columnSize = {p}; |
||||||
|
double[] rowSize = {p, p, p}; |
||||||
|
int[][] rowCount = {{1, 1}, {1, 1}, {1, 1}}; |
||||||
|
Component[][] components = new Component[][]{ |
||||||
|
new Component[]{fontSizeStyleComboBox}, |
||||||
|
new Component[]{buttonPane}, |
||||||
|
new Component[]{createLinePane()} |
||||||
|
}; |
||||||
|
return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM); |
||||||
|
} |
||||||
|
|
||||||
|
protected JPanel createRightPane() { |
||||||
|
double p = TableLayout.PREFERRED; |
||||||
|
double f = TableLayout.FILL; |
||||||
|
double[] columnSize = {f}; |
||||||
|
double[] rowSize = {p, p}; |
||||||
|
int[][] rowCount = {{1, 1}, {1, 1}}; |
||||||
|
Component[][] components = new Component[][]{ |
||||||
|
new Component[]{fontSizeComboBox}, |
||||||
|
new Component[]{isSuperOrSubPane} |
||||||
|
}; |
||||||
|
return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createPane() { |
||||||
|
JPanel createPane = new JPanel(new BorderLayout()); |
||||||
|
Component[] components_font = new Component[]{ |
||||||
|
fontNameComboBox, fontSizeComboBox, colorSelectPane |
||||||
|
}; |
||||||
|
createPane.add(GUICoreUtils.createFlowPane(components_font, FlowLayout.LEFT, LayoutConstants.HGAP_SMALL)); |
||||||
|
//createPane.add(fontNameComboBox, BorderLayout.NORTH);
|
||||||
|
//JPanel jPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{createLeftPane(), createRightPane()}}, TableLayoutHelper.FILL_LASTCOLUMN, hGapBetweenLeftPaneAndRightPane, LayoutConstants.VGAP_LARGE);
|
||||||
|
//jPanel.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0));
|
||||||
|
//createPane.add(jPanel, BorderLayout.CENTER);
|
||||||
|
return createPane; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @param listener 观察者监听事件 |
||||||
|
*/ |
||||||
|
public void registerNameListener(GlobalNameListener listener) { |
||||||
|
globalNameListener = listener; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public boolean shouldResponseNameListener() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
public void setGlobalName(String name) { |
||||||
|
} |
||||||
|
|
||||||
|
private class TwoButtonPane extends JPanel { |
||||||
|
public UIToggleButton leftButton; |
||||||
|
public UIToggleButton rightButton; |
||||||
|
|
||||||
|
public TwoButtonPane(UIToggleButton leftButton, UIToggleButton rightButton) { |
||||||
|
this.leftButton = leftButton; |
||||||
|
this.rightButton = rightButton; |
||||||
|
this.setLayout(new FlowLayout(FlowLayout.LEFT, 1, 0)); |
||||||
|
this.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1)); |
||||||
|
initButton(leftButton); |
||||||
|
initButton(rightButton); |
||||||
|
initListener(); |
||||||
|
} |
||||||
|
|
||||||
|
private void initListener() { |
||||||
|
leftButton.addMouseListener(new MouseAdapter() { |
||||||
|
public void mousePressed(MouseEvent e) { |
||||||
|
rightButton.setSelected(false); |
||||||
|
} |
||||||
|
}); |
||||||
|
rightButton.addMouseListener(new MouseAdapter() { |
||||||
|
public void mousePressed(MouseEvent e) { |
||||||
|
leftButton.setSelected(false); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
private void initButton(UIToggleButton button) { |
||||||
|
button.setRoundBorder(false); |
||||||
|
button.setBorderPainted(false); |
||||||
|
this.add(button); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
protected void paintBorder(Graphics g) { |
||||||
|
Graphics2D g2d = (Graphics2D) g; |
||||||
|
g2d.setColor(UIConstants.LINE_COLOR); |
||||||
|
int buttonX = getComponent(0).getX(); |
||||||
|
int buttonY = getComponent(0).getY(); |
||||||
|
int height = getComponent(0).getHeight(); |
||||||
|
int width = getComponent(0).getWidth(); |
||||||
|
g.drawLine(buttonX + width, 0, buttonX + width, height); |
||||||
|
width += getComponent(1).getWidth(); |
||||||
|
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); |
||||||
|
|
||||||
|
g2d.drawRoundRect(buttonX - 1, buttonY - 1, width + 2, getHeight() - 1, UIConstants.ARC, UIConstants.ARC); |
||||||
|
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,49 @@ |
|||||||
|
package com.fr.plugin.third.party.jsdggac.ui; |
||||||
|
|
||||||
|
import com.fanruan.api.design.chart.DefaultTypePane; |
||||||
|
import com.fr.plugin.third.party.jsdggac.CustomChartConfig; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
|
||||||
|
|
||||||
|
public class CustomGanttTypePane extends DefaultTypePane<CustomChartConfig> { |
||||||
|
//private UIButtonGroup buttonGroup = new UIButtonGroup(new String[]{DesignKit.i18nText("Fine-Plugin_Legend_Right"), DesignKit.i18nText("Fine-Plugin_Legend_Left")});
|
||||||
|
|
||||||
|
@Override |
||||||
|
protected String[] getTypeIconPath() { |
||||||
|
return new String[]{ |
||||||
|
"com/fr/plugin/third/party/jsdggac/images/chart_type.png" |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected int getSelectIndexInChart(CustomChartConfig chart) { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void setSelectIndexInChart(CustomChartConfig chart, int index) { |
||||||
|
//chart.setPieType(PieType.parseInt(index));
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected Component[][] getPaneComponents(JPanel typePane) { |
||||||
|
return new Component[][]{ |
||||||
|
new Component[]{typePane}, |
||||||
|
//new Component[]{buttonGroup}
|
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(CustomChartConfig ob) { |
||||||
|
super.populateBean(ob); |
||||||
|
// buttonGroup.setSelectedIndex(StringKit.equals("left", ob.getLegendPosition()) ? 0 : 1);
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void updateBean(CustomChartConfig ob) { |
||||||
|
super.updateBean(ob); |
||||||
|
// ob.setLegendPosition(buttonGroup.getSelectedIndex() == 0 ? "left" : "right");
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,72 @@ |
|||||||
|
package com.fr.plugin.third.party.jsdggac.ui; |
||||||
|
|
||||||
|
|
||||||
|
import com.fr.design.beans.FurtherBasicBeanPane; |
||||||
|
import com.fr.design.dialog.BasicPane; |
||||||
|
import com.fr.design.gui.ibutton.UITabGroup; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
|
||||||
|
public abstract class CustomMultiTabPane<T> extends FurtherBasicBeanPane<T> { |
||||||
|
private static final long serialVersionUID = 2298609199400393886L; |
||||||
|
protected UITabGroup tabPane; |
||||||
|
protected String[] NameArray; |
||||||
|
protected JPanel centerPane; |
||||||
|
protected CardLayout cardLayout = new CardLayout(); |
||||||
|
protected List<BasicPane> paneList; |
||||||
|
|
||||||
|
protected abstract List<BasicPane> initPaneList(); |
||||||
|
|
||||||
|
public abstract void populateBean(T var1); |
||||||
|
|
||||||
|
public abstract void updateBean(T var1); |
||||||
|
|
||||||
|
public int getSelectedIndex() { |
||||||
|
return this.tabPane.getSelectedIndex(); |
||||||
|
} |
||||||
|
|
||||||
|
public CustomMultiTabPane() { |
||||||
|
//this.relayoutWhenListChange();
|
||||||
|
} |
||||||
|
|
||||||
|
public void relayoutWhenListChange() { |
||||||
|
this.centerPane = new JPanel(this.cardLayout) { |
||||||
|
public Dimension getPreferredSize() { |
||||||
|
return getSelectedIndex() == -1 ? super.getPreferredSize() : paneList.get(getSelectedIndex()).getPreferredSize(); |
||||||
|
} |
||||||
|
}; |
||||||
|
paneList = this.initPaneList(); |
||||||
|
this.NameArray = new String[this.paneList.size()]; |
||||||
|
for(int var1 = 0; var1 < this.paneList.size(); ++var1) { |
||||||
|
BasicPane var2 = this.paneList.get(var1); |
||||||
|
this.NameArray[var1] = var2.getTitle(); |
||||||
|
this.centerPane.add(var2, this.NameArray[var1]); |
||||||
|
} |
||||||
|
|
||||||
|
this.tabPane = new UITabGroup(this.NameArray) { |
||||||
|
public void tabChanged(int var1) { |
||||||
|
dealWithTabChanged(var1); |
||||||
|
} |
||||||
|
}; |
||||||
|
this.tabPane.setSelectedIndex(0); |
||||||
|
this.tabPane.tabChanged(0); |
||||||
|
this.initLayout(); |
||||||
|
} |
||||||
|
|
||||||
|
protected void dealWithTabChanged(int var1) { |
||||||
|
this.cardLayout.show(this.centerPane, this.NameArray[var1]); |
||||||
|
this.tabChanged(); |
||||||
|
} |
||||||
|
|
||||||
|
protected void tabChanged() { |
||||||
|
} |
||||||
|
|
||||||
|
protected void initLayout() { |
||||||
|
this.setLayout(new BorderLayout(0, 4)); |
||||||
|
this.add(this.tabPane, "North"); |
||||||
|
this.add(this.centerPane, "Center"); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,47 @@ |
|||||||
|
package com.fr.plugin.third.party.jsdggac.ui; |
||||||
|
|
||||||
|
import com.fr.design.dialog.BasicPane; |
||||||
|
import com.fr.plugin.third.party.jsdggac.CustomChartConfig; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
//import com.fr.design.style.FRFontPane;
|
||||||
|
|
||||||
|
public class CustomStyleContentPane extends CustomMultiTabPane<CustomChartConfig> { |
||||||
|
private CylinderWidthConfPane cylinderWidthConfPane = new CylinderWidthConfPane(); |
||||||
|
|
||||||
|
@Override |
||||||
|
protected List<BasicPane> initPaneList() { |
||||||
|
List<BasicPane> tempPaneList = new ArrayList<>(); |
||||||
|
tempPaneList.add(cylinderWidthConfPane); |
||||||
|
return tempPaneList; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(CustomChartConfig config) { |
||||||
|
cylinderWidthConfPane.populate(config); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public CustomChartConfig updateBean() { |
||||||
|
CustomChartConfig config = new CustomChartConfig(); |
||||||
|
updateBean(config); |
||||||
|
return config; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void updateBean(CustomChartConfig config) { |
||||||
|
cylinderWidthConfPane.update(config); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean accept(Object o) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void reset() { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,33 @@ |
|||||||
|
package com.fr.plugin.third.party.jsdggac.ui; |
||||||
|
|
||||||
|
import com.fanruan.api.design.chart.BaseOtherPane; |
||||||
|
import com.fr.plugin.third.party.jsdggac.CustomChartConfig; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
|
||||||
|
public class CustomStylePane extends BaseOtherPane<CustomChartConfig> { |
||||||
|
private CustomStyleContentPane contentPane; |
||||||
|
@Override |
||||||
|
protected JPanel createContentPane() { |
||||||
|
contentPane = new CustomStyleContentPane(); |
||||||
|
contentPane.relayoutWhenListChange(); |
||||||
|
return contentPane; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void populate(CustomChartConfig config) { |
||||||
|
contentPane.populateBean(config); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void update(CustomChartConfig config) { |
||||||
|
contentPane.updateBean(config); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public String title4PopupWindow() { |
||||||
|
return "样式"; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,75 @@ |
|||||||
|
package com.fr.plugin.third.party.jsdggac.ui; |
||||||
|
|
||||||
|
import com.fanruan.api.design.ui.component.UILabel; |
||||||
|
import com.fanruan.api.design.ui.layout.TableLayoutKit; |
||||||
|
import com.fr.design.dialog.BasicPane; |
||||||
|
import com.fr.plugin.third.party.jsdggac.CustomChartConfig; |
||||||
|
import com.fr.plugin.third.party.jsdggac.ui.spinner.CustomUIBoundSpinner; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 柱形宽度配置 |
||||||
|
*/ |
||||||
|
public class CylinderWidthConfPane extends BasicPane { |
||||||
|
private CustomUIBoundSpinner originXBoundSpinner; |
||||||
|
private CustomUIBoundSpinner originYBoundSpinner; |
||||||
|
private CustomUIBoundSpinner originDiagonalXBoundSpinner; |
||||||
|
private CustomUIBoundSpinner originDiagonalYBoundSpinner; |
||||||
|
|
||||||
|
public CylinderWidthConfPane() { |
||||||
|
this.initComponents(); |
||||||
|
} |
||||||
|
|
||||||
|
protected void initComponents() { |
||||||
|
this.setLayout(new BorderLayout()); |
||||||
|
JPanel panel0 = new JPanel(); |
||||||
|
panel0.setLayout(new FlowLayout(0, 0, 0)); |
||||||
|
|
||||||
|
originXBoundSpinner = new CustomUIBoundSpinner(Integer.MIN_VALUE, Integer.MAX_VALUE, 1, 0); |
||||||
|
originYBoundSpinner = new CustomUIBoundSpinner(Integer.MIN_VALUE, Integer.MAX_VALUE, 1, 0); |
||||||
|
originDiagonalXBoundSpinner = new CustomUIBoundSpinner(Integer.MIN_VALUE, Integer.MAX_VALUE, 1, 0); |
||||||
|
originDiagonalYBoundSpinner = new CustomUIBoundSpinner(Integer.MIN_VALUE, Integer.MAX_VALUE, 1, 0); |
||||||
|
|
||||||
|
Component[][] components = new Component[][]{ |
||||||
|
{new UILabel("圆点大小:"), originXBoundSpinner}, |
||||||
|
//{new UILabel("原点坐标Y:"), originYBoundSpinner},
|
||||||
|
//{new UILabel("原点对角坐标X:"), originDiagonalXBoundSpinner},
|
||||||
|
// {new UILabel("原点对角坐标Y:"), originDiagonalYBoundSpinner},
|
||||||
|
}; |
||||||
|
double p = TableLayoutKit.PREFERRED; |
||||||
|
double[] rowSize = new double[]{p, p, p, p}; |
||||||
|
double[] columnSize = new double[]{p, 100}; |
||||||
|
JPanel settingsUI = TableLayoutKit.createTableLayoutPane(components, rowSize, columnSize); |
||||||
|
this.add(settingsUI, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
protected String title4PopupWindow() { |
||||||
|
return "地图设置"; |
||||||
|
} |
||||||
|
|
||||||
|
public void populate(CustomChartConfig conf) { |
||||||
|
originXBoundSpinner.setValue(conf.getOriginX()); |
||||||
|
originYBoundSpinner.setValue(conf.getOriginY()); |
||||||
|
originDiagonalXBoundSpinner.setValue(conf.getOriginDiagonalX()); |
||||||
|
originDiagonalYBoundSpinner.setValue(conf.getOriginDiagonalY()); |
||||||
|
} |
||||||
|
|
||||||
|
public void update(CustomChartConfig conf) { |
||||||
|
conf.setOriginX(originXBoundSpinner.getValue()); |
||||||
|
conf.setOriginY(originYBoundSpinner.getValue()); |
||||||
|
conf.setOriginDiagonalX(originDiagonalXBoundSpinner.getValue()); |
||||||
|
conf.setOriginDiagonalY(originDiagonalYBoundSpinner.getValue()); |
||||||
|
} |
||||||
|
|
||||||
|
private int getIntegerValue(double value) { |
||||||
|
int tempValue = (int) value; |
||||||
|
if (tempValue <= 0) { |
||||||
|
tempValue = 0; |
||||||
|
} |
||||||
|
return tempValue; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,51 @@ |
|||||||
|
package com.fr.plugin.third.party.jsdggac.ui; |
||||||
|
|
||||||
|
import com.fanruan.api.design.ui.component.UILabel; |
||||||
|
import com.fr.design.dialog.BasicPane; |
||||||
|
import com.fr.design.gui.ispinner.UISpinner; |
||||||
|
|
||||||
|
import java.awt.*; |
||||||
|
|
||||||
|
public class DisplayScaleConfPane extends BasicPane { |
||||||
|
|
||||||
|
private UISpinner scaleSpinner; |
||||||
|
|
||||||
|
|
||||||
|
public DisplayScaleConfPane() { |
||||||
|
this.initComponents(); |
||||||
|
} |
||||||
|
|
||||||
|
protected void initComponents() { |
||||||
|
this.setLayout(new FlowLayout(0, 0, 0)); |
||||||
|
scaleSpinner = new UISpinner(0, 100, 1, 100); |
||||||
|
this.add(new UILabel("比例:")); |
||||||
|
this.add(scaleSpinner); |
||||||
|
} |
||||||
|
|
||||||
|
public void populate(int value) { |
||||||
|
if (value <= 0) { |
||||||
|
value = 0; |
||||||
|
} |
||||||
|
if (value >= 100) { |
||||||
|
value = 100; |
||||||
|
} |
||||||
|
scaleSpinner.setValue(value, true); |
||||||
|
} |
||||||
|
|
||||||
|
public int update() { |
||||||
|
int value = (int) scaleSpinner.getValue(); |
||||||
|
if (value <= 0) { |
||||||
|
value = 0; |
||||||
|
} |
||||||
|
if (value >= 100) { |
||||||
|
value = 100; |
||||||
|
} |
||||||
|
return value; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return "显示比例"; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,45 @@ |
|||||||
|
package com.fr.plugin.third.party.jsdggac.ui.spinner; |
||||||
|
|
||||||
|
import java.awt.event.FocusAdapter; |
||||||
|
import java.awt.event.FocusEvent; |
||||||
|
import java.awt.event.KeyAdapter; |
||||||
|
import java.awt.event.KeyEvent; |
||||||
|
|
||||||
|
/** |
||||||
|
* 定制此组件,是为了修复若组件值和设置值相同时,不显示设置值问题 |
||||||
|
*/ |
||||||
|
public class CustomUIBoundSpinner extends CustomUISpinner { |
||||||
|
public CustomUIBoundSpinner(double minValue, double maxValue, double dierta) { |
||||||
|
super(minValue, maxValue, dierta); |
||||||
|
} |
||||||
|
|
||||||
|
public CustomUIBoundSpinner(double minValue, double maxValue, double dierta, double defaultValue) { |
||||||
|
super(minValue, maxValue, dierta, defaultValue); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void initTextFiledListeners() { |
||||||
|
this.getTextField().addFocusListener(new FocusAdapter() { |
||||||
|
@Override |
||||||
|
public void focusLost(FocusEvent e) { |
||||||
|
setTextFieldValue(getTextField().getValue()); |
||||||
|
setTextField(value); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
this.getTextField().addKeyListener(new KeyAdapter() { |
||||||
|
@Override |
||||||
|
public void keyPressed(KeyEvent e) { |
||||||
|
if (e.getKeyCode() == KeyEvent.VK_ENTER) { |
||||||
|
setTextFieldValue(getTextField().getValue()); |
||||||
|
setTextField(value); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void setTextField(double value) { |
||||||
|
this.getTextField().setValue(value); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,399 @@ |
|||||||
|
package com.fr.plugin.third.party.jsdggac.ui.spinner; |
||||||
|
|
||||||
|
import com.fr.design.constants.UIConstants; |
||||||
|
import com.fr.design.event.GlobalNameListener; |
||||||
|
import com.fr.design.event.GlobalNameObserver; |
||||||
|
import com.fr.design.event.UIObserver; |
||||||
|
import com.fr.design.event.UIObserverListener; |
||||||
|
import com.fr.design.gui.ibutton.UIButton; |
||||||
|
import com.fr.design.gui.ibutton.UIButtonUI; |
||||||
|
import com.fr.design.gui.itextfield.UINumberField; |
||||||
|
import com.fr.design.utils.gui.GUIPaintUtils; |
||||||
|
import com.fr.stable.CommonUtils; |
||||||
|
import com.fr.stable.Constants; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import javax.swing.event.DocumentEvent; |
||||||
|
import javax.swing.event.DocumentListener; |
||||||
|
import javax.swing.plaf.ButtonUI; |
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* 定制此组件,是为了修复若组件值和设置值相同时,不显示设置值问题 |
||||||
|
*/ |
||||||
|
public class CustomUISpinner extends JPanel implements UIObserver, GlobalNameObserver { |
||||||
|
protected double value; |
||||||
|
private static final int SIZE = 20; |
||||||
|
private static final int LEN = 13; |
||||||
|
private static final int WIDTH = 13; |
||||||
|
private static final int HEIGHT = 10; |
||||||
|
private static final int DEFAULT_NUMBERFIELD_COLUMNS = 2; |
||||||
|
private UINumberField textField; |
||||||
|
private UIButton preButton; |
||||||
|
private UIButton nextButton; |
||||||
|
private double minValue; |
||||||
|
private double maxValue; |
||||||
|
private double dierta; |
||||||
|
private String spinnerName = StringUtils.EMPTY; |
||||||
|
private UIObserverListener uiObserverListener; |
||||||
|
private GlobalNameListener globalNameListener = null; |
||||||
|
private boolean lessMinValue = false; |
||||||
|
/** |
||||||
|
* Spinner内的数字文本框长度 |
||||||
|
*/ |
||||||
|
private int numberFieldColumns; |
||||||
|
|
||||||
|
|
||||||
|
public CustomUISpinner(double minValue, double maxValue, double dierta) { |
||||||
|
init(minValue, maxValue, dierta); |
||||||
|
} |
||||||
|
|
||||||
|
public CustomUISpinner(double minValue, double maxValue, double dierta, double defaultValue) { |
||||||
|
init(minValue, maxValue, dierta); |
||||||
|
textField.setValue(defaultValue); |
||||||
|
} |
||||||
|
|
||||||
|
private void init(double minValue, double maxValue, double dierta) { |
||||||
|
this.minValue = minValue; |
||||||
|
this.maxValue = maxValue; |
||||||
|
this.dierta = dierta; |
||||||
|
initComponents(); |
||||||
|
iniListener(); |
||||||
|
} |
||||||
|
|
||||||
|
private void iniListener() { |
||||||
|
if (shouldResponseChangeListener()) { |
||||||
|
this.addChangeListener(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
if (uiObserverListener == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
uiObserverListener.doChange(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 给组件分别加上FocusListener |
||||||
|
* |
||||||
|
* @param focusListener 监听事件 |
||||||
|
*/ |
||||||
|
public void addUISpinnerFocusListenner(FocusListener focusListener) { |
||||||
|
this.addFocusListener(focusListener); |
||||||
|
this.textField.addFocusListener(focusListener); |
||||||
|
this.preButton.addFocusListener(focusListener); |
||||||
|
this.nextButton.addFocusListener(focusListener); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public double getValue() { |
||||||
|
return value; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setGlobalName(String name) { |
||||||
|
spinnerName = name; |
||||||
|
} |
||||||
|
|
||||||
|
public UINumberField getTextField() { |
||||||
|
return textField; |
||||||
|
} |
||||||
|
|
||||||
|
public UIButton getNextButton() { |
||||||
|
return nextButton; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isLessMinValue() { |
||||||
|
return lessMinValue; |
||||||
|
} |
||||||
|
|
||||||
|
public void resetLessMinValue() { |
||||||
|
lessMinValue = false; |
||||||
|
} |
||||||
|
|
||||||
|
public void setValue(double value) { |
||||||
|
setValue(value, true); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 赋值但不触发保存,只是展现,一般是populate的时候用 |
||||||
|
* |
||||||
|
* @param value |
||||||
|
*/ |
||||||
|
public void setValueWithoutEvent(double value) { |
||||||
|
setValue(value, false); |
||||||
|
} |
||||||
|
|
||||||
|
public void setValue(double value, boolean fireStateChange) { |
||||||
|
if (globalNameListener != null && shouldResponseNameListener()) { |
||||||
|
globalNameListener.setGlobalName(spinnerName); |
||||||
|
} |
||||||
|
lessMinValue = value < minValue; |
||||||
|
value = lessMinValue ? minValue : value; |
||||||
|
value = value > maxValue ? maxValue : value; |
||||||
|
//if (CommonUtils.equals(value, this.value)) {
|
||||||
|
//return;
|
||||||
|
//}
|
||||||
|
this.value = value; |
||||||
|
setTextField(value); |
||||||
|
if (fireStateChange) { |
||||||
|
fireStateChanged(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
protected void setTextField(double value) { |
||||||
|
textField.getDocument().removeDocumentListener(docListener); |
||||||
|
textField.setValue(value); |
||||||
|
textField.getDocument().addDocumentListener(docListener); |
||||||
|
} |
||||||
|
|
||||||
|
public void setTextFieldValue(double value) { |
||||||
|
if (globalNameListener != null && shouldResponseNameListener()) { |
||||||
|
globalNameListener.setGlobalName(spinnerName); |
||||||
|
} |
||||||
|
lessMinValue = value < minValue; |
||||||
|
value = lessMinValue ? minValue : value; |
||||||
|
value = value > maxValue ? maxValue : value; |
||||||
|
|
||||||
|
if (CommonUtils.equals(value, this.value)) { |
||||||
|
return; |
||||||
|
} |
||||||
|
this.value = value; |
||||||
|
fireStateChanged(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 设置Spinner内的数字输入框列数 |
||||||
|
* |
||||||
|
* @param numberFieldColumns 输入框列数 |
||||||
|
*/ |
||||||
|
public void setNumberFieldColumns(int numberFieldColumns) { |
||||||
|
textField.setColumns(numberFieldColumns); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setEnabled(boolean flag) { |
||||||
|
super.setEnabled(flag); |
||||||
|
this.textField.setEnabled(flag); |
||||||
|
this.preButton.setEnabled(flag); |
||||||
|
this.nextButton.setEnabled(flag); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Dimension getPreferredSize() { |
||||||
|
Dimension dim = super.getPreferredSize(); |
||||||
|
dim.height = SIZE; |
||||||
|
return dim; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 增加 a <code>ChangeListener</code> to the listener list. |
||||||
|
* |
||||||
|
* @param l 监听事件 |
||||||
|
*/ |
||||||
|
public void addChangeListener(ChangeListener l) { |
||||||
|
this.listenerList.add(ChangeListener.class, l); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 移除 a <code>ChangeListener</code> from the listener list. |
||||||
|
* |
||||||
|
* @param l 监听事件 |
||||||
|
*/ |
||||||
|
public void removeChangeListener(ChangeListener l) { |
||||||
|
this.listenerList.remove(ChangeListener.class, l); |
||||||
|
} |
||||||
|
|
||||||
|
// august: Process the listeners last to first
|
||||||
|
protected void fireStateChanged() { |
||||||
|
Object[] listeners = listenerList.getListenerList(); |
||||||
|
|
||||||
|
for (int i = listeners.length - 2; i >= 0; i -= 2) { |
||||||
|
if (listeners[i] == ChangeListener.class) { |
||||||
|
((ChangeListener) listeners[i + 1]).stateChanged(new ChangeEvent(this)); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private class ButtionUI extends UIButtonUI { |
||||||
|
private boolean isNormalPaint = true; |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void doExtraPainting(UIButton b, Graphics2D g2d, int w, int h, String selectedRoles) { |
||||||
|
if (isPressed(b) && b.isPressedPainted()) { |
||||||
|
isNormalPaint = false; |
||||||
|
Color pressColor = UIConstants.COMBOBOX_BTN_PRESS; |
||||||
|
GUIPaintUtils.fillPressed(g2d, 0, 0, w, h, b.isRoundBorder(), b.getRectDirection(), b.isDoneAuthorityEdited(selectedRoles), pressColor); |
||||||
|
} else if (isRollOver(b)) { |
||||||
|
isNormalPaint = false; |
||||||
|
Color hoverColor = UIConstants.COMBOBOX_BTN_ROLLOVER; |
||||||
|
GUIPaintUtils.fillRollOver(g2d, 0, 0, w, h, b.isRoundBorder(), b.getRectDirection(), b.isDoneAuthorityEdited(selectedRoles), b.isPressedPainted(), hoverColor); |
||||||
|
} else if (b.isNormalPainted()) { |
||||||
|
isNormalPaint = true; |
||||||
|
GUIPaintUtils.fillNormal(g2d, 0, 0, w, h, b.isRoundBorder(), b.getRectDirection(), b.isDoneAuthorityEdited(selectedRoles), b.isPressedPainted()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void paintModelIcon(ButtonModel model, Icon icon, Graphics g, JComponent c) { |
||||||
|
if (isNormalPaint) { |
||||||
|
g.setColor(UIConstants.COMBOBOX_BTN_NORMAL); |
||||||
|
g.fillRect(0, 0, c.getWidth(), c.getHeight()); |
||||||
|
} |
||||||
|
super.paintModelIcon(model, icon, g, c); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private void initComponents() { |
||||||
|
textField = initNumberField(); |
||||||
|
textField.setMaxValue(maxValue); |
||||||
|
textField.setMinValue(minValue); |
||||||
|
setValue(value); |
||||||
|
preButton = new UIButton(UIConstants.ARROW_UP_ICON) { |
||||||
|
@Override |
||||||
|
public boolean shouldResponseChangeListener() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public ButtonUI getUI() { |
||||||
|
return new ButtionUI(); |
||||||
|
} |
||||||
|
}; |
||||||
|
preButton.setRoundBorder(true, Constants.LEFT); |
||||||
|
nextButton = new UIButton(UIConstants.ARROW_DOWN_ICON) { |
||||||
|
@Override |
||||||
|
public boolean shouldResponseChangeListener() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public ButtonUI getUI() { |
||||||
|
return new ButtionUI(); |
||||||
|
} |
||||||
|
}; |
||||||
|
nextButton.setRoundBorder(true, Constants.LEFT); |
||||||
|
setLayout(new BorderLayout()); |
||||||
|
add(textField, BorderLayout.CENTER); |
||||||
|
JPanel arrowPane = new JPanel(); |
||||||
|
arrowPane.setPreferredSize(new Dimension(LEN, SIZE)); |
||||||
|
arrowPane.setLayout(new GridLayout(2, 1)); |
||||||
|
preButton.setBounds(0, 1, WIDTH, HEIGHT); |
||||||
|
nextButton.setBounds(0, HEIGHT, WIDTH, HEIGHT); |
||||||
|
arrowPane.add(preButton); |
||||||
|
arrowPane.add(nextButton); |
||||||
|
add(arrowPane, BorderLayout.EAST); |
||||||
|
componentInitListeners(); |
||||||
|
} |
||||||
|
|
||||||
|
private void componentInitListeners() { |
||||||
|
preButton.addActionListener(new ActionListener() { |
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
setValue(value + dierta); |
||||||
|
} |
||||||
|
}); |
||||||
|
nextButton.addActionListener(new ActionListener() { |
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
setValue(value - dierta); |
||||||
|
} |
||||||
|
}); |
||||||
|
addMouseWheelListener(new MouseWheelListener() { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void mouseWheelMoved(MouseWheelEvent e) { |
||||||
|
if (isEnabled() && e.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL) { |
||||||
|
setValue(value - e.getWheelRotation()); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
initTextFiledListeners(); |
||||||
|
} |
||||||
|
|
||||||
|
protected void initTextFiledListeners() { |
||||||
|
textField.getDocument().removeDocumentListener(docListener); |
||||||
|
textField.getDocument().addDocumentListener(docListener); |
||||||
|
textField.addFocusListener(new FocusAdapter() { |
||||||
|
@Override |
||||||
|
public void focusLost(FocusEvent e) { |
||||||
|
textField.getDocument().removeDocumentListener(docListener); |
||||||
|
textField.setValue(value); |
||||||
|
textField.getDocument().addDocumentListener(docListener); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
protected UINumberField initNumberField() { |
||||||
|
int columns = this.numberFieldColumns == 0 ? DEFAULT_NUMBERFIELD_COLUMNS : this.numberFieldColumns; |
||||||
|
return new UINumberField(columns) { |
||||||
|
@Override |
||||||
|
public boolean shouldResponseChangeListener() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
private DocumentListener docListener = new DocumentListener() { |
||||||
|
@Override |
||||||
|
public void removeUpdate(DocumentEvent e) { |
||||||
|
setTextFieldValue(textField.getValue()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void insertUpdate(DocumentEvent e) { |
||||||
|
setTextFieldValue(textField.getValue()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void changedUpdate(DocumentEvent e) { |
||||||
|
setTextFieldValue(textField.getValue()); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
/** |
||||||
|
* 给组件登记一个观察者监听事件 |
||||||
|
* |
||||||
|
* @param listener 观察者监听事件 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public void registerChangeListener(UIObserverListener listener) { |
||||||
|
uiObserverListener = listener; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 组件是否需要响应添加的观察者事件 |
||||||
|
* |
||||||
|
* @return 如果需要响应观察者事件则返回true,否则返回false |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public boolean shouldResponseChangeListener() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 给组件登记一个全局名字观察者监听事件 |
||||||
|
* |
||||||
|
* @param listener 观察者监听事件 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public void registerNameListener(GlobalNameListener listener) { |
||||||
|
globalNameListener = listener; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 组件是否需要响应添加的观察者事件 |
||||||
|
* |
||||||
|
* @return 如果需要响应观察者事件则返回true,否则返回false |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public boolean shouldResponseNameListener() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
} |
After Width: | Height: | Size: 193 KiB |
After Width: | Height: | Size: 140 KiB |
After Width: | Height: | Size: 334 B |
After Width: | Height: | Size: 504 B |
After Width: | Height: | Size: 7.3 KiB |
@ -0,0 +1,65 @@ |
|||||||
|
!(function () { |
||||||
|
Van.FRChartBridge.customChartJsdggacWrapper = Van.FRChartBridge.AbstractChart.extend({ |
||||||
|
_init: function (dom, option) { |
||||||
|
//debugger;
|
||||||
|
var globeChart = echarts.init(dom); |
||||||
|
this._setConfigJsdggac(globeChart,option,false); |
||||||
|
//globeChart.setOption(globalOption);
|
||||||
|
return globeChart; |
||||||
|
}, |
||||||
|
_refresh: function (chart, option) { |
||||||
|
this._setConfigJsdggac(chart,option,true); |
||||||
|
}, |
||||||
|
_setConfigJsdggac: function (earthChart, option, refreshOption) { |
||||||
|
if (!(option.dataStatus === true)) { |
||||||
|
return; |
||||||
|
} |
||||||
|
var mapConfig = option.mapConfig; |
||||||
|
var datas = option.datas; |
||||||
|
|
||||||
|
var globalOption = { |
||||||
|
backgroundColor: 'transparent', |
||||||
|
geo: { |
||||||
|
map: 'custom_map', |
||||||
|
//aspectScale: 1, // 宽高比
|
||||||
|
//layoutCenter: ['50%', '50%'], // 位置
|
||||||
|
//layoutSize: 100, // 大小
|
||||||
|
left: 0, |
||||||
|
top: 0, |
||||||
|
right: 0, |
||||||
|
bottom: 0, |
||||||
|
silent: false, |
||||||
|
roam: false, |
||||||
|
//zoom: 0.95, //当前视角的缩放比例
|
||||||
|
//aspectScale: 0.86,
|
||||||
|
itemStyle: { |
||||||
|
borderWidth: 0, |
||||||
|
}, |
||||||
|
}, |
||||||
|
|
||||||
|
series: [{ |
||||||
|
type: 'scatter', |
||||||
|
coordinateSystem: 'geo', |
||||||
|
symbolSize: mapConfig.originX, |
||||||
|
itemStyle: { |
||||||
|
color: 'red' |
||||||
|
}, |
||||||
|
data: datas, |
||||||
|
|
||||||
|
}] |
||||||
|
}; |
||||||
|
if (refreshOption && (refreshOption == true)) { |
||||||
|
earthChart.setOption(globalOption, true); |
||||||
|
return; |
||||||
|
} |
||||||
|
earthChart.setOption(globalOption); |
||||||
|
}, |
||||||
|
_resize: function (chart) { |
||||||
|
chart.resize(); |
||||||
|
}, |
||||||
|
|
||||||
|
_emptyData: function (options) { |
||||||
|
return options.series.data.length === 0; |
||||||
|
} |
||||||
|
}) |
||||||
|
})(); |
File diff suppressed because one or more lines are too long
@ -0,0 +1,7 @@ |
|||||||
|
var document = { |
||||||
|
createElement: function(element) { |
||||||
|
if (element == 'canvas') { |
||||||
|
return new Canvas(); |
||||||
|
} |
||||||
|
}, |
||||||
|
}; |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in new issue