Browse Source

提交开源任务材料

10.0
LAPTOP-SB56SG4Q\86185 3 years ago
parent
commit
b7e5da0a44
  1. BIN
      JSD-8199-需求确认书V2.docx
  2. 5
      README.md
  3. BIN
      lib/finekit-10.0.jar
  4. 19
      plugin.xml
  5. 1154
      src/main/java/com/fr/plugin/third/party/jsdibjj/CustomGanttChart.java
  6. 51
      src/main/java/com/fr/plugin/third/party/jsdibjj/CustomGanttData.java
  7. 510
      src/main/java/com/fr/plugin/third/party/jsdibjj/CustomGanttDataFactory.java
  8. 56
      src/main/java/com/fr/plugin/third/party/jsdibjj/CustomGanttType.java
  9. 60
      src/main/java/com/fr/plugin/third/party/jsdibjj/CustomGanttUI.java
  10. 20
      src/main/java/com/fr/plugin/third/party/jsdibjj/PieType.java
  11. 39
      src/main/java/com/fr/plugin/third/party/jsdibjj/UIComboBoxWithNone.java
  12. 220
      src/main/java/com/fr/plugin/third/party/jsdibjj/color/ColorUtils.java
  13. 135
      src/main/java/com/fr/plugin/third/party/jsdibjj/data/CustomGanttColumnFieldCollection.java
  14. 96
      src/main/java/com/fr/plugin/third/party/jsdibjj/data/CustomGanttDataCellFieldsPane.java
  15. 99
      src/main/java/com/fr/plugin/third/party/jsdibjj/data/CustomGanttDataSetFieldsPane.java
  16. 52
      src/main/java/com/fr/plugin/third/party/jsdibjj/sort/DataSort.java
  17. 81
      src/main/java/com/fr/plugin/third/party/jsdibjj/ui/ColorAnimationConfPane.java
  18. 80
      src/main/java/com/fr/plugin/third/party/jsdibjj/ui/ColorDateLineConfPane.java
  19. 81
      src/main/java/com/fr/plugin/third/party/jsdibjj/ui/ColorEmphasisConfPane.java
  20. 45
      src/main/java/com/fr/plugin/third/party/jsdibjj/ui/ColorGapConfPane.java
  21. 298
      src/main/java/com/fr/plugin/third/party/jsdibjj/ui/ColorSeriesConfPane.java
  22. 47
      src/main/java/com/fr/plugin/third/party/jsdibjj/ui/ColorSettingPane.java
  23. 118
      src/main/java/com/fr/plugin/third/party/jsdibjj/ui/CustomGanttShowSettingsPane.java
  24. 162
      src/main/java/com/fr/plugin/third/party/jsdibjj/ui/CustomGanttTitlePane.java
  25. 49
      src/main/java/com/fr/plugin/third/party/jsdibjj/ui/CustomGanttTypePane.java
  26. 72
      src/main/java/com/fr/plugin/third/party/jsdibjj/ui/DisplayScaleConfPane.java
  27. 116
      src/main/java/com/fr/plugin/third/party/jsdibjj/ui/YFontConfPane.java
  28. BIN
      src/main/resources/com/fr/plugin/third/party/jsdibjj/images/chart_icon.png
  29. BIN
      src/main/resources/com/fr/plugin/third/party/jsdibjj/images/chart_type.png
  30. BIN
      src/main/resources/com/fr/plugin/third/party/jsdibjj/images/chart_type_demo.png
  31. BIN
      src/main/resources/com/fr/plugin/third/party/jsdibjj/images/gantt_type.png
  32. 42
      src/main/resources/com/fr/plugin/third/party/jsdibjj/web/customGanttPlus.css
  33. 876
      src/main/resources/com/fr/plugin/third/party/jsdibjj/web/customGanttPlusWrapper.js
  34. 7
      src/main/resources/com/fr/plugin/third/party/jsdibjj/web/echarts-adapter.js
  35. 22
      src/main/resources/com/fr/plugin/third/party/jsdibjj/web/echarts.min.js
  36. BIN
      定制甘特图插件使用手册.pdf

BIN
JSD-8199-需求确认书V2.docx

Binary file not shown.

5
README.md

@ -1,3 +1,6 @@
# open-JSD-8199
JSD-8199 甘特图扩展
JSD-8199 甘特图扩展\
免责说明:该源码为第三方爱好者提供,不保证源码和方案的可靠性,也不提供任何形式的源码教学指导和协助!\
仅作为开发者学习参考使用!禁止用于任何商业用途!\
为保护开发者隐私,开发者信息已隐去!若原开发者希望公开自己的信息,可联系hugh处理。

BIN
lib/finekit-10.0.jar

Binary file not shown.

19
plugin.xml

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<plugin>
<id>com.fr.plugin.third.party.jsd8199</id>
<name><![CDATA[甘特图定制]]></name>
<active>yes</active>
<version>0.5</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.jsdibjj.CustomGanttType" chartID="CUSTOM_GANTT_CHART_JSD8199"/>
</extra-chart>
<extra-chart-designer>
<ChartTypeUIProvider class="com.fr.plugin.third.party.jsdibjj.CustomGanttUI" chartID="CUSTOM_GANTT_CHART_JSD8199"/>
</extra-chart-designer>
<function-recorder class="com.fr.plugin.third.party.jsdibjj.CustomGanttType"/>
</plugin>

1154
src/main/java/com/fr/plugin/third/party/jsdibjj/CustomGanttChart.java

File diff suppressed because it is too large Load Diff

51
src/main/java/com/fr/plugin/third/party/jsdibjj/CustomGanttData.java

@ -0,0 +1,51 @@
package com.fr.plugin.third.party.jsdibjj;
import java.io.Serializable;
public class CustomGanttData implements Serializable, Cloneable {
public static String SHOW_TYPE_SERIES = "SERIES";
public static String SHOW_TYPE_FILL = "FILL";
public static String SHOW_TYPE_BACKGROUND = "BACKGROUND";
public static String SHOW_TYPE_IMAGE = "IMAGE";
public int index = 0;
public long beginDate = 0;
public long endDate = 0;
public String beginDateShow = "";
public String endDateShow = "";
public long milestoneDate = 0;
public double schedule = 0;
public String scheduleShow = "";
public String showName = "";
public String category = "";
public String originalName = "";
public String seriesValue = "";
public String milestoneInfo ="";
/**
* 已完成颜色
*/
public int completedColor = 0;
public String completedColorHex = "";
/**
* 未完成颜色
*/
public int incompleteColor = 0;
public String incompleteColorHex = "";
public long prevEndDate = 0;
public boolean visible = true;
public String showType = SHOW_TYPE_SERIES;
public int days = 0;
/*脱节的中间值,主要为脱节闪烁用的*/
public long middleValue = 0;
@Override
public String toString() {
return this.showName + ":" + this.beginDateShow + "-" + this.endDateShow;
}
}

510
src/main/java/com/fr/plugin/third/party/jsdibjj/CustomGanttDataFactory.java

@ -0,0 +1,510 @@
package com.fr.plugin.third.party.jsdibjj;
import com.fanruan.api.log.LogKit;
import com.fanruan.api.util.StringKit;
import com.fr.general.GeneralUtils;
import com.fr.json.JSON;
import com.fr.json.JSONArray;
import com.fr.json.JSONFactory;
import com.fr.json.JSONObject;
import com.fr.plugin.third.party.jsdibjj.data.CustomGanttColumnFieldCollection;
import java.awt.*;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
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();
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;
}
public static synchronized JSONArray createJsonData(CustomGanttColumnFieldCollection dataSource, CustomGanttChart ganttChartConf) {
List<CustomGanttData> datas = createData(dataSource);
return createJsonData(dataSource, datas, ganttChartConf);
}
public static synchronized JSONArray createFlashingData(List<CustomGanttData> datas) {
JSONArray jsonContent = JSONFactory.createJSON(JSON.ARRAY);
if ((datas == null) || (datas.size() <= 0)) {
return jsonContent;
}
JSONArray jsonArray;
CustomGanttData ganttData;
for (int i = 0, max = datas.size() - 1; i <= max; i++) {
ganttData = datas.get(i);
if (!StringKit.equals(ganttData.showType, CustomGanttData.SHOW_TYPE_FILL)) {
continue;
}
jsonArray = JSONFactory.createJSON(JSON.ARRAY);
jsonArray.put(ganttData.index);
jsonArray.put(ganttData.middleValue);
JSONObject valueJson = JSONFactory.createJSON(JSON.OBJECT);
valueJson.put("value", jsonArray);
jsonContent.put(valueJson);
}
return jsonContent;
}
public static synchronized JSONArray createJsonData(CustomGanttColumnFieldCollection dataSource, List<CustomGanttData> datas, CustomGanttChart ganttChartConf) {
JSONArray jsonContent = JSONFactory.createJSON(JSON.ARRAY);
if ((datas == null) || (datas.size() <= 0)) {
return jsonContent;
}
JSONObject jsonObject;
JSONArray jsonArray;
CustomGanttData ganttData;
JSONObject emphasisJson = JSONFactory.createJSON(JSON.OBJECT);
if (ganttChartConf.isEmphasisOption()) {
JSONObject itemStyleJson = JSONFactory.createJSON(JSON.OBJECT);
itemStyleJson.put("borderColor", rgbToHex(new Color(ganttChartConf.getEmphasisBorderColor())));
itemStyleJson.put("borderWidth", ganttChartConf.getEmphasisBorderWidth());
itemStyleJson.put("borderType", "solid");
//itemStyleJson.put("borderWidth",2);
emphasisJson.put("itemStyle", itemStyleJson);
}
/*
JSONObject itemStyleJson = JSONFactory.createJSON(JSON.OBJECT).put("normal", JSONFactory.createJSON(JSON.OBJECT).put("color", "#7b9ce1"));
JSONObject emphasisJson = JSONFactory.createJSON(JSON.OBJECT);
emphasisJson.put("borderColor", "red");
emphasisJson.put("borderWidth", 20);
emphasisJson.put("borderType", "solid");
itemStyleJson.put("","")*/
for (int i = 0, max = datas.size() - 1; i <= max; i++) {
ganttData = datas.get(i);
jsonObject = JSONFactory.createJSON(JSON.OBJECT);
jsonObject.put("category", ganttData.category);
jsonObject.put("name", ganttData.showName);
jsonObject.put("originalName", ganttData.originalName);
jsonObject.put("showType", ganttData.showType);
jsonObject.put("days", ganttData.days);
jsonObject.put("beginDateShow", ganttData.beginDateShow);
jsonObject.put("endDateShow", ganttData.endDateShow);
jsonObject.put("middleValue", ganttData.middleValue);
jsonObject.put("seriesValue", ganttData.seriesValue);
jsonArray = JSONFactory.createJSON(JSON.ARRAY);
jsonArray.put(ganttData.index);
jsonArray.put(ganttData.beginDate);
jsonArray.put(ganttData.endDate);
jsonArray.put(ganttData.showName);
jsonArray.put(ganttData.milestoneDate);
jsonArray.put(ganttData.schedule);
jsonArray.put(ganttData.completedColorHex);
jsonArray.put(ganttData.incompleteColorHex);
jsonArray.put(ganttData.scheduleShow);
jsonArray.put(ganttData.showType);
jsonArray.put(ganttData.middleValue);
jsonArray.put(ganttData.seriesValue);
jsonObject.put("value", jsonArray);
jsonObject.put("itemStyle", JSONFactory.createJSON(JSON.OBJECT).put("normal", JSONFactory.createJSON(JSON.OBJECT).put("color", "#7b9ce1")));
jsonObject.put("emphasis", emphasisJson);
jsonContent.put(jsonObject);
}
return jsonContent;
}
public static synchronized long createMinTimestamp(CustomGanttColumnFieldCollection dataSource) {
List<Object> beginDates = dataSource.getBeginDate().getValues();
int size = beginDates.size();
if (size <= 0) {
return 0;
}
Calendar cal = Calendar.getInstance();
cal.set(2999, 1, 1);
long minTimestamp = cal.getTimeInMillis();
;
long tempTimestamp = 0;
int count = 0;
for (int i = 0, max = size - 1; i <= max; i++) {
tempTimestamp = objectToTimestamp(beginDates.get(i));
if (minTimestamp > tempTimestamp) {
minTimestamp = tempTimestamp;
count++;
}
}
if (count <= 0) {
return 0;
}
return minTimestamp;
}
public static synchronized long createMaxTimestamp(CustomGanttColumnFieldCollection dataSource) {
List<Object> endDates = dataSource.getEndDate().getValues();
int size = endDates.size();
if (size <= 0) {
return 0;
}
Calendar cal = Calendar.getInstance();
cal.set(1000, 1, 1);
long maxTimestamp = cal.getTimeInMillis();
long tempTimestamp = 0;
int count = 0;
for (int i = 0, max = size - 1; i <= max; i++) {
tempTimestamp = objectToTimestamp(endDates.get(i));
if (maxTimestamp < tempTimestamp) {
maxTimestamp = tempTimestamp;
count++;
}
}
if (count <= 0) {
return 0;
}
return maxTimestamp;
}
public static synchronized List<CustomGanttData> createData(CustomGanttColumnFieldCollection dataSource) {
List<CustomGanttData> datas = new ArrayList<>();
List<String> projectList = createProjectNames(dataSource);
if (projectList.size() <= 0) {
return datas;
}
List<Object> projectNames = dataSource.getProjectName().getValues();
List<Object> seriesNames = dataSource.getSeriesName().getValues();
List<Object> seriesValues = dataSource.getSeriesValue().getValues();
List<Object> beginDates = dataSource.getBeginDate().getValues();
List<Object> endDates = dataSource.getEndDate().getValues();
List<Object> schedules = dataSource.getSchedule().getValues();
int size = projectNames.size();
if (size <= 0) {
return datas;
}
String projectName, seriesName;
CustomGanttData ganttData;
for (int i = 0, max = size - 1; i <= max; i++) {
projectName = objectToString(projectNames.get(i));
seriesName = objectToString(seriesNames.get(i));
ganttData = new CustomGanttData();
ganttData.category = projectName;
ganttData.index = getIndex(projectName, projectList);
ganttData.showName = createSeriesName(seriesName);
ganttData.originalName = seriesName;
ganttData.schedule = objectToRate(schedules.get(i));
ganttData.scheduleShow = objectToRateShow(ganttData.schedule);
ganttData.beginDate = objectToTimestamp(beginDates.get(i));
ganttData.endDate = objectToTimestamp(endDates.get(i));
ganttData.beginDateShow = String.valueOf(beginDates.get(i));
ganttData.endDateShow = String.valueOf(endDates.get(i));
ganttData.seriesValue = String.valueOf(seriesValues.get(i));
if ((ganttData.beginDate <= 0) || (ganttData.endDate <= 0)) {
LogKit.error("甘特图定制,解析开始时间或结束时间出错");
return new ArrayList<CustomGanttData>();
}
datas.add(ganttData);
}
return datas;
}
public static synchronized List<CustomGanttData> createMilestoneDatas(CustomGanttColumnFieldCollection dataSource) {
List<CustomGanttData> datas = new ArrayList<>();
List<String> projectList = createProjectNames(dataSource);
if (projectList.size() <= 0) {
return datas;
}
List<Object> projectNames = dataSource.getProjectName().getValues();
List<Object> seriesNames = dataSource.getSeriesName().getValues();
List<Object> seriesValues = dataSource.getSeriesValue().getValues();
List<Object> beginDates = dataSource.getBeginDate().getValues();
List<Object> endDates = dataSource.getEndDate().getValues();
List<Object> schedules = dataSource.getSchedule().getValues();
List<Object> milestoneDates = dataSource.getMilestoneDate().getValues();
List<Object> milestoneIcons = dataSource.getMilestoneIcon().getValues();
List<Object> milestoneInfos = dataSource.getMilestoneInfo().getValues();
int size = projectNames.size();
if (size <= 0) {
return datas;
}
if (milestoneDates.size() <= 0) {
return datas;
}
if (milestoneIcons.size() <= 0) {
return datas;
}
String projectName, seriesName;
CustomGanttData ganttData;
String path;
for (int i = 0, max = size - 1; i <= max; i++) {
projectName = objectToString(projectNames.get(i));
seriesName = objectToString(seriesNames.get(i));
ganttData = new CustomGanttData();
ganttData.category = projectName;
ganttData.index = getIndex(projectName, projectList);
ganttData.showName = createSeriesName(seriesName);
ganttData.originalName = seriesName;
ganttData.schedule = 0;
ganttData.scheduleShow = getIconPath(i, milestoneInfos);
ganttData.beginDate = objectToTimestamp(milestoneDates.get(i));
ganttData.endDate = objectToTimestamp(milestoneDates.get(i));
ganttData.beginDateShow = String.valueOf(milestoneDates.get(i));;
ganttData.endDateShow = "";
path = getIconPath(i, milestoneIcons);
if (StringKit.isEmpty(path)) {
continue;
}
ganttData.seriesValue = path;
if ((ganttData.beginDate <= 0) || (ganttData.endDate <= 0)) {
continue;
}
ganttData.showType = CustomGanttData.SHOW_TYPE_IMAGE;
datas.add(ganttData);
}
return datas;
}
public static synchronized JSONArray createMilestoneData(CustomGanttColumnFieldCollection dataSource) {
JSONArray dataArray = new JSONArray();
List<String> projectList = createProjectNames(dataSource);
if (projectList.size() <= 0) {
return dataArray;
}
List<Object> projectNames = dataSource.getProjectName().getValues();
List<Object> milestoneDates = dataSource.getMilestoneDate().getValues();
List<Object> milestoneIcons = dataSource.getMilestoneIcon().getValues();
int size = projectNames.size();
if (size <= 0) {
return dataArray;
}
if (milestoneDates.size() <= 0) {
return dataArray;
}
String projectName;
int x;
long y;
String type = "";
String path = "";
JSONObject milestoneJson;
for (int i = 0, max = size - 1; i <= max; i++) {
projectName = objectToString(projectNames.get(i));
x = getIndex(projectName, projectList);
y = objectToTimestamp(milestoneDates.get(i));
if (y <= 0) {
continue;
}
type = "diamond";
path = getIconPath(i, milestoneIcons);
if (StringKit.isNotEmpty(path)) {
type = "image";
}
milestoneJson = new JSONObject();
milestoneJson.put("x", x);
milestoneJson.put("y", y);
milestoneJson.put("type", type);
milestoneJson.put("path", path);
dataArray.add(milestoneJson);
}
return dataArray;
}
private static String getIconPath(int index, List<Object> icons) {
if (index < 0) {
return "";
}
if ((icons == null) || (icons.size() <= 0) || (index >= icons.size())) {
return "";
}
String path = String.valueOf(icons.get(index));
path = StringKit.trim(path);
if (StringKit.isEmpty(path)) {
return "";
}
return path;
}
/**
* 针对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");
}
};
public static synchronized String timestampToDate(long value) {
Date date = new Date(value);
return threadLocalFormat.get().format(date);
}
/**
* 转为时间戳
*
* @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);
}
}

56
src/main/java/com/fr/plugin/third/party/jsdibjj/CustomGanttType.java

@ -0,0 +1,56 @@
package com.fr.plugin.third.party.jsdibjj;
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;
@EnableMetrics
public class CustomGanttType extends BaseChartType {
/**
* 该种图表所有的图表对象实例比如柱形图就有堆积柱形图百分比堆积柱形图等等
*
* @return 所有的图表对象实例
*/
@Focus(id = "com.fr.plugin.third.party.jsd8199", text = "plugin-jsd-8199", source = Original.PLUGIN)
public BaseChartWithData[] getChartTypes() {
return new BaseChartWithData[]{
new CustomGanttChart()
};
}
/**
* 图表在web端展现时需要的JS文件
*
* @return JS文件数组
*/
public String[] getRequiredJS() {
return new String[]{
"com/fr/plugin/third/party/jsdibjj/web/echarts.min.js",
"com/fr/plugin/third/party/jsdibjj/web/customGanttPlusWrapper.js"
};
}
/**
* 图表在web端展现时需要的CSS文件
*
* @return CSS文件数组
*/
public String[] getRequiredCss() {
return new String[]{
"com/fr/plugin/third/party/jsdibjj/web/customGanttPlus.css"
};
}
/**
* JS对象名该对象一般是一个函数执行后会在给定的dom中绘制图表
*
* @return JS对象名
*/
public String getWrapperName() {
return "customGanttPlusWrapper";
}
}

60
src/main/java/com/fr/plugin/third/party/jsdibjj/CustomGanttUI.java

@ -0,0 +1,60 @@
package com.fr.plugin.third.party.jsdibjj;
import com.fanruan.api.design.chart.*;
import com.fr.design.gui.frpane.AttributeChangeListener;
import com.fr.plugin.third.party.jsdibjj.data.CustomGanttDataCellFieldsPane;
import com.fr.plugin.third.party.jsdibjj.data.CustomGanttDataSetFieldsPane;
import com.fr.plugin.third.party.jsdibjj.ui.CustomGanttShowSettingsPane;
import com.fr.plugin.third.party.jsdibjj.ui.CustomGanttTitlePane;
import com.fr.plugin.third.party.jsdibjj.ui.CustomGanttTypePane;
public class CustomGanttUI 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 CustomGanttShowSettingsPane(), new DefaultOtherPane()};
}
@Override
public String getIconPath() {
return "com/fr/plugin/third/party/jsdibjj/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/jsdibjj/images/chart_type_demo.png"
};
}
}

20
src/main/java/com/fr/plugin/third/party/jsdibjj/PieType.java

@ -0,0 +1,20 @@
package com.fr.plugin.third.party.jsdibjj;
/**
* @author fr.open
* @version 10.0
* Created by fr.open on 2019-09-05
*/
public enum PieType {
PIE,
RING;
public static PieType parseInt(int index) {
for (PieType type : PieType.values()) {
if (type.ordinal() == index) {
return type;
}
}
return PIE;
}
}

39
src/main/java/com/fr/plugin/third/party/jsdibjj/UIComboBoxWithNone.java

@ -0,0 +1,39 @@
package com.fr.plugin.third.party.jsdibjj;
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());
}
}
}

220
src/main/java/com/fr/plugin/third/party/jsdibjj/color/ColorUtils.java

@ -0,0 +1,220 @@
package com.fr.plugin.third.party.jsdibjj.color;
import java.awt.Color;
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;
}
/**
* 获取循环颜色
*
* @param confColors
* @param count
* @return
*/
public static List<Color> getCycleColors(List<Color> confColors, int count) {
List<Color> colors = new ArrayList<>();
if (count <= 0) {
return colors;
}
if (count <= 1) {
count = 1;
}
int max = count - 1;
if ((confColors == null) || (confColors.size() <= 0)) {
for (int i = 0; i <= max; i++) {
colors.add(Color.black);
}
return colors;
}
int size = confColors.size();
int index = 0;
for (int i = 0; i <= max; i++) {
index = i % size;
colors.add(confColors.get(index));
}
return colors;
}
}

135
src/main/java/com/fr/plugin/third/party/jsdibjj/data/CustomGanttColumnFieldCollection.java

@ -0,0 +1,135 @@
package com.fr.plugin.third.party.jsdibjj.data;
import com.fanruan.api.report.chart.field.BaseColumnFieldCollection;
import com.fr.chartx.data.annotations.KeyField;
import com.fr.chartx.data.field.ColumnField;
public class CustomGanttColumnFieldCollection extends BaseColumnFieldCollection {
/**
* 项目名称
*/
//@KeyField
private ColumnField projectName = new ColumnField();
/**
* 系列值
*/
// @KeyField
private ColumnField seriesValue = new ColumnField();
/**
* 系列名称
*/
//@KeyField
private ColumnField seriesName = new ColumnField();
/**
* 开始时间
*/
private ColumnField beginDate = new ColumnField();
/**
* 结束时间
*/
private ColumnField endDate = new ColumnField();
/**
* 里程碑时间
*/
private ColumnField milestoneDate = new ColumnField();
/**
* 里程碑图片
*/
private ColumnField milestoneIcon = new ColumnField();
/**
* 里程碑信息
*/
private ColumnField milestoneInfo = new ColumnField();
/**
* 进度
*/
private ColumnField schedule = new ColumnField();
public ColumnField getProjectName() {
return projectName;
}
public void setProjectName(ColumnField projectName) {
this.projectName = projectName;
}
public ColumnField getSeriesValue() {
return seriesValue;
}
public void setSeriesValue(ColumnField seriesValue) {
this.seriesValue = seriesValue;
}
public ColumnField getSeriesName() {
return seriesName;
}
public void setSeriesName(ColumnField seriesName) {
this.seriesName = seriesName;
}
public ColumnField getBeginDate() {
return beginDate;
}
public void setBeginDate(ColumnField beginDate) {
this.beginDate = beginDate;
}
public ColumnField getEndDate() {
return endDate;
}
public void setEndDate(ColumnField endDate) {
this.endDate = endDate;
}
public ColumnField getMilestoneDate() {
return milestoneDate;
}
public void setMilestoneDate(ColumnField milestoneDate) {
this.milestoneDate = milestoneDate;
}
public ColumnField getSchedule() {
return schedule;
}
public void setSchedule(ColumnField schedule) {
this.schedule = schedule;
}
public ColumnField getMilestoneIcon() {
return milestoneIcon;
}
public void setMilestoneIcon(ColumnField milestoneIcon) {
this.milestoneIcon = milestoneIcon;
}
public ColumnField getMilestoneInfo() {
return milestoneInfo;
}
public void setMilestoneInfo(ColumnField milestoneInfo) {
this.milestoneInfo = milestoneInfo;
}
}

96
src/main/java/com/fr/plugin/third/party/jsdibjj/data/CustomGanttDataCellFieldsPane.java

@ -0,0 +1,96 @@
package com.fr.plugin.third.party.jsdibjj.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 projectNamePane;
private UIFormulaTextField seriesNamePane;
private UIFormulaTextField seriesValuePane;
private UIFormulaTextField beginDatePane;
private UIFormulaTextField endDatePane;
private UIFormulaTextField milestoneDatePane;
private UIFormulaTextField milestoneIconPane;
private UIFormulaTextField milestoneInfoPane;
private UIFormulaTextField schedulePane;
public void initComponents() {
projectNamePane = new UIFormulaTextField();
seriesNamePane = new UIFormulaTextField();
seriesValuePane = new UIFormulaTextField();
beginDatePane = new UIFormulaTextField();
endDatePane = new UIFormulaTextField();
milestoneDatePane = new UIFormulaTextField();
milestoneIconPane = new UIFormulaTextField();
milestoneInfoPane = new UIFormulaTextField();
schedulePane = new UIFormulaTextField();
super.initComponents();
}
@Override
protected String[] fieldLabels() {
return new String[]{
"项目名称", "系列名称", "系列值", "开始时间", "结束时间", "里程碑时间", "里程碑图标", "里程碑信息", "进度"
};
}
@Override
protected Component[] fieldComponents() {
return new Component[]{
projectNamePane,
seriesNamePane,
seriesValuePane,
beginDatePane,
endDatePane,
milestoneDatePane,
milestoneIconPane,
milestoneInfoPane,
schedulePane
};
}
@Override
protected UIFormulaTextField[] formulaPanes() {
return new UIFormulaTextField[]{
projectNamePane,
seriesNamePane,
seriesValuePane,
beginDatePane,
endDatePane,
milestoneDatePane,
milestoneIconPane,
milestoneInfoPane,
schedulePane
};
}
@Override
public void populateBean(CustomGanttColumnFieldCollection dataConf) {
populateField(projectNamePane, dataConf.getProjectName());
populateField(seriesNamePane, dataConf.getSeriesName());
populateField(seriesValuePane, dataConf.getSeriesValue());
populateField(beginDatePane, dataConf.getBeginDate());
populateField(endDatePane, dataConf.getEndDate());
populateField(milestoneDatePane, dataConf.getMilestoneDate());
populateField(milestoneIconPane, dataConf.getMilestoneIcon());
populateField(milestoneInfoPane, dataConf.getMilestoneInfo());
populateField(schedulePane, dataConf.getSchedule());
}
@Override
public CustomGanttColumnFieldCollection updateBean() {
CustomGanttColumnFieldCollection dataConf = new CustomGanttColumnFieldCollection();
updateField(projectNamePane, dataConf.getProjectName());
updateField(seriesNamePane, dataConf.getSeriesName());
updateField(seriesValuePane, dataConf.getSeriesValue());
updateField(beginDatePane, dataConf.getBeginDate());
updateField(endDatePane, dataConf.getEndDate());
updateField(milestoneDatePane, dataConf.getMilestoneDate());
updateField(milestoneIconPane, dataConf.getMilestoneIcon());
updateField(milestoneInfoPane, dataConf.getMilestoneInfo());
updateField(schedulePane, dataConf.getSchedule());
return dataConf;
}
}

99
src/main/java/com/fr/plugin/third/party/jsdibjj/data/CustomGanttDataSetFieldsPane.java

@ -0,0 +1,99 @@
package com.fr.plugin.third.party.jsdibjj.data;
import com.fanruan.api.design.chart.field.BaseDataSetFieldsPane;
import com.fanruan.api.design.ui.component.UIComboBox;
import com.fr.plugin.third.party.jsdibjj.UIComboBoxWithNone;
import com.fr.plugin.third.party.jsdibjj.data.CustomGanttColumnFieldCollection;
import java.awt.*;
public class CustomGanttDataSetFieldsPane extends BaseDataSetFieldsPane<CustomGanttColumnFieldCollection> {
private UIComboBoxWithNone projectNamePane;
private UIComboBoxWithNone seriesNamePane;
private UIComboBoxWithNone seriesValuePane;
private UIComboBoxWithNone beginDatePane;
private UIComboBoxWithNone endDatePane;
private UIComboBoxWithNone milestoneDatePane;
private UIComboBoxWithNone milestoneIconPane;
private UIComboBoxWithNone milestoneInfoPane;
private UIComboBoxWithNone schedulePane;
public void initComponents() {
projectNamePane = new UIComboBoxWithNone();
seriesNamePane = new UIComboBoxWithNone();
seriesValuePane = new UIComboBoxWithNone();
beginDatePane = new UIComboBoxWithNone();
endDatePane = new UIComboBoxWithNone();
milestoneDatePane = new UIComboBoxWithNone();
milestoneIconPane = new UIComboBoxWithNone();
milestoneInfoPane = new UIComboBoxWithNone();
schedulePane = new UIComboBoxWithNone();
super.initComponents();
}
@Override
protected String[] fieldLabels() {
return new String[]{
"项目名称", "系列名称", "系列值", "开始时间", "结束时间", "里程碑时间", "里程碑图标", "里程碑信息", "进度"
};
}
@Override
protected Component[] fieldComponents() {
return new Component[]{
projectNamePane,
seriesNamePane,
seriesValuePane,
beginDatePane,
endDatePane,
milestoneDatePane,
milestoneIconPane,
milestoneInfoPane,
schedulePane
};
}
@Override
protected UIComboBox[] filedComboBoxes() {
return new UIComboBox[]{
projectNamePane,
seriesNamePane,
seriesValuePane,
beginDatePane,
endDatePane,
milestoneDatePane,
milestoneIconPane,
milestoneInfoPane,
schedulePane
};
}
@Override
public void populateBean(CustomGanttColumnFieldCollection dataConf) {
populateField(projectNamePane, dataConf.getProjectName());
populateField(seriesNamePane, dataConf.getSeriesName());
populateField(seriesValuePane, dataConf.getSeriesValue());
populateField(beginDatePane, dataConf.getBeginDate());
populateField(endDatePane, dataConf.getEndDate());
populateField(milestoneDatePane, dataConf.getMilestoneDate());
populateField(milestoneIconPane, dataConf.getMilestoneIcon());
populateField(milestoneInfoPane, dataConf.getMilestoneInfo());
populateField(schedulePane, dataConf.getSchedule());
}
@Override
public CustomGanttColumnFieldCollection updateBean() {
CustomGanttColumnFieldCollection dataConf = new CustomGanttColumnFieldCollection();
updateField(projectNamePane, dataConf.getProjectName());
updateField(seriesNamePane, dataConf.getSeriesName());
updateField(seriesValuePane, dataConf.getSeriesValue());
updateField(beginDatePane, dataConf.getBeginDate());
updateField(endDatePane, dataConf.getEndDate());
updateField(milestoneDatePane, dataConf.getMilestoneDate());
updateField(milestoneIconPane, dataConf.getMilestoneIcon());
updateField(milestoneInfoPane, dataConf.getMilestoneInfo());
updateField(schedulePane, dataConf.getSchedule());
return dataConf;
}
}

52
src/main/java/com/fr/plugin/third/party/jsdibjj/sort/DataSort.java

@ -0,0 +1,52 @@
package com.fr.plugin.third.party.jsdibjj.sort;
public class DataSort {
/**
* 原序号
*/
private int index = 0;
/**
* 脱节天数
*/
private int disconnectDays = 0;
/**
* 新序号
*/
private int newIndex = 0;
private String projectName;
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public int getDisconnectDays() {
return disconnectDays;
}
public void setDisconnectDays(int days) {
this.disconnectDays = days;
}
public int getNewIndex() {
return newIndex;
}
public void setNewIndex(int newIndex) {
this.newIndex = newIndex;
}
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
}

81
src/main/java/com/fr/plugin/third/party/jsdibjj/ui/ColorAnimationConfPane.java

@ -0,0 +1,81 @@
package com.fr.plugin.third.party.jsdibjj.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.design.gui.icheckbox.UICheckBox;
import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.gui.itextfield.UINumberField;
import com.fr.plugin.third.party.jsdibjj.CustomGanttChart;
import javax.swing.*;
import java.awt.*;
/**
* 动画
*/
public class ColorAnimationConfPane extends BasicPane {
private static String[] SYMBOL_TYPES = {"rect", "circle", "roundRect", "triangle", "diamond", "pin", "arrow"};
private static String[] SYMBOL_TYPE_NAMES = {"矩形", "圆形", "圆角矩形", "三角形", "菱形", "弹头", "箭头"};
private UICheckBox enableCheckBox;
private UIComboBox symbolTypesComboBox;
private UINumberField widthNumberField;
public ColorAnimationConfPane() {
this.initComponents();
}
protected void initComponents() {
this.setLayout(new BorderLayout());
enableCheckBox = new UICheckBox("启用");
symbolTypesComboBox = new UIComboBox(SYMBOL_TYPE_NAMES);
symbolTypesComboBox.setSelectedIndex(0);
widthNumberField = new UINumberField(5);
widthNumberField.setInteger(true);
widthNumberField.setValue(2);
Component[][] components = new Component[][]{
{enableCheckBox, null},
{new UILabel("形状:"), symbolTypesComboBox},
{new UILabel("宽度:"), widthNumberField}
};
double p = TableLayoutKit.PREFERRED;
double[] rowSize = new double[]{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 "color";
}
public void populate(CustomGanttChart conf) {
enableCheckBox.setSelected(conf.isAnimationOption());
widthNumberField.setValue(conf.getSymbolWidth());
int index = getSymbolTypeIndex(conf.getSymbolType());
symbolTypesComboBox.setSelectedIndex(index);
}
public CustomGanttChart update() {
CustomGanttChart conf = new CustomGanttChart();
conf.setAnimationOption(enableCheckBox.isSelected());
conf.setSymbolType(SYMBOL_TYPES[symbolTypesComboBox.getSelectedIndex()]);
conf.setSymbolWidth((int) widthNumberField.getValue());
return conf;
}
private int getSymbolTypeIndex(String type) {
for (int i = 0, max = SYMBOL_TYPES.length - 1; i <= max; i++) {
if (SYMBOL_TYPES[i].equalsIgnoreCase(type)) {
return i;
}
}
return 0;
}
}

80
src/main/java/com/fr/plugin/third/party/jsdibjj/ui/ColorDateLineConfPane.java

@ -0,0 +1,80 @@
package com.fr.plugin.third.party.jsdibjj.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.design.gui.icheckbox.UICheckBox;
import com.fr.design.gui.itextfield.UINumberField;
import com.fr.design.style.color.ColorSelectBox;
import com.fr.plugin.third.party.jsdibjj.CustomGanttChart;
import javax.swing.*;
import java.awt.*;
/**
* 时间线配置
*/
public class ColorDateLineConfPane extends BasicPane {
private UICheckBox enableCheckBox;
private ColorSelectBox colorSelectBox;
private UINumberField widthNumberField;
public ColorDateLineConfPane() {
this.initComponents();
}
protected void initComponents() {
this.setLayout(new BorderLayout());
JPanel panel0 = new JPanel();
panel0.setLayout(new FlowLayout(0, 0, 0));
enableCheckBox = new UICheckBox("启用");
colorSelectBox = new ColorSelectBox(100);
panel0.add(enableCheckBox);
panel0.add(colorSelectBox);
//JPanel panel1= new JPanel();
//panel1.setLayout( new FlowLayout(0, 0, 0));
widthNumberField = new UINumberField(5);
widthNumberField.setInteger(true);
//panel1.add(new JLabel("宽度"));
//panel1.add(widthNumberField);
//Box vBox = Box.createVerticalBox();
//vBox.add(panel0);
//vBox.add(panel1);
Component[][] components = new Component[][]{
{enableCheckBox, null},
{new UILabel("颜色:"), colorSelectBox},
{new UILabel("宽度:"), widthNumberField}
};
double p = TableLayoutKit.PREFERRED;
double[] rowSize = new double[]{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 "color";
}
public void populate(CustomGanttChart conf) {
enableCheckBox.setSelected(conf.isCurrentTimeLineOption());
colorSelectBox.setSelectObject(new Color(conf.getCurrentTimeLineColor()));
widthNumberField.setValue(conf.getCurrentTimeLineWidth());
}
public CustomGanttChart update() {
CustomGanttChart conf = new CustomGanttChart();
conf.setCurrentTimeLineOption(enableCheckBox.isSelected());
conf.setCurrentTimeLineColor(colorSelectBox.getSelectObject().getRGB());
conf.setCurrentTimeLineWidth((int) widthNumberField.getValue());
return conf;
}
}

81
src/main/java/com/fr/plugin/third/party/jsdibjj/ui/ColorEmphasisConfPane.java

@ -0,0 +1,81 @@
package com.fr.plugin.third.party.jsdibjj.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.design.gui.icheckbox.UICheckBox;
import com.fr.design.gui.itextfield.UINumberField;
import com.fr.design.style.color.ColorSelectBox;
import com.fr.plugin.third.party.jsdibjj.CustomGanttChart;
import javax.swing.*;
import java.awt.*;
/**
* 时间线配置
*/
public class ColorEmphasisConfPane extends BasicPane {
private UICheckBox enableCheckBox;
private ColorSelectBox colorSelectBox;
private UINumberField widthNumberField;
public ColorEmphasisConfPane() {
this.initComponents();
}
protected void initComponents() {
this.setLayout(new BorderLayout());
JPanel panel0 = new JPanel();
panel0.setLayout(new FlowLayout(0, 0, 0));
enableCheckBox = new UICheckBox("启用");
colorSelectBox = new ColorSelectBox(100);
panel0.add(enableCheckBox);
panel0.add(colorSelectBox);
//JPanel panel1= new JPanel();
//panel1.setLayout( new FlowLayout(0, 0, 0));
widthNumberField = new UINumberField(5);
widthNumberField.setInteger(true);
//panel1.add(new JLabel("宽度"));
//panel1.add(widthNumberField);
//Box vBox = Box.createVerticalBox();
//vBox.add(panel0);
//vBox.add(panel1);
Component[][] components = new Component[][]{
{enableCheckBox, null},
{new UILabel("颜色:"), colorSelectBox},
{new UILabel("宽度:"), widthNumberField}
};
double p = TableLayoutKit.PREFERRED;
double[] rowSize = new double[]{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 "color";
}
public void populate(CustomGanttChart conf) {
enableCheckBox.setSelected(conf.isEmphasisOption());
colorSelectBox.setSelectObject(new Color(conf.getEmphasisBorderColor()));
widthNumberField.setValue(conf.getEmphasisBorderWidth());
}
public CustomGanttChart update() {
CustomGanttChart conf = new CustomGanttChart();
conf.setEmphasisOption(enableCheckBox.isSelected());
conf.setEmphasisBorderColor(colorSelectBox.getSelectObject().getRGB());
conf.setEmphasisBorderWidth((int) widthNumberField.getValue());
return conf;
}
}

45
src/main/java/com/fr/plugin/third/party/jsdibjj/ui/ColorGapConfPane.java

@ -0,0 +1,45 @@
package com.fr.plugin.third.party.jsdibjj.ui;
import com.fr.design.dialog.BasicPane;
import com.fr.design.gui.icheckbox.UICheckBox;
import com.fr.design.style.color.ColorSelectBox;
import com.fr.plugin.third.party.jsdibjj.CustomGanttChart;
import java.awt.*;
//import com.fr.van.chart.designer.component.border.VanChartBorderPane;
public class ColorGapConfPane extends BasicPane {
private UICheckBox enableCheckBox;
private ColorSelectBox colorSelectBox;
public ColorGapConfPane() {
this.initComponents();
}
protected void initComponents() {
this.setLayout(new FlowLayout(0, 0, 0));
enableCheckBox = new UICheckBox("启用");
colorSelectBox = new ColorSelectBox(100);
this.add(enableCheckBox);
this.add(colorSelectBox);
}
protected String title4PopupWindow() {
return "color";
}
public void populate(CustomGanttChart conf) {
enableCheckBox.setSelected(conf.isFillGapOption());
colorSelectBox.setSelectObject(new Color(conf.getFillGapColor()));
}
public CustomGanttChart update() {
CustomGanttChart conf = new CustomGanttChart();
conf.setFillGapOption(enableCheckBox.isSelected());
conf.setFillGapColor(colorSelectBox.getSelectObject().getRGB());
return conf;
}
}

298
src/main/java/com/fr/plugin/third/party/jsdibjj/ui/ColorSeriesConfPane.java

@ -0,0 +1,298 @@
package com.fr.plugin.third.party.jsdibjj.ui;
import com.fr.base.BaseUtils;
import com.fr.design.constants.LayoutConstants;
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.gui.icheckbox.UICheckBox;
import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.style.color.ColorSelectBox;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.plugin.third.party.jsdibjj.CustomGanttChart;
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 UICheckBox enableCheckBox;
private UICheckBox dataSortCheckBox;
private ColorSelectBox oddColorSelectBox;
private ColorSelectBox evenColorSelectBox;
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);
int index = var2x.size() - 1;
ColorSeriesConfPane.this.colorList.setSelectedIndex(index);
}
}
});
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, "你确实想删除选中的颜色吗?", Toolkit.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, BorderLayout.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(Toolkit.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(Toolkit.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(Toolkit.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(Toolkit.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(Toolkit.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");
enableCheckBox = new UICheckBox("按项目循环颜色");
this.add(enableCheckBox, BorderLayout.SOUTH);
//dataSortCheckBox = new UICheckBox("脱节天数排序");
dataSortCheckBox = new UICheckBox("奇偶背景颜色");
oddColorSelectBox = new ColorSelectBox(40);
evenColorSelectBox = new ColorSelectBox(40);
Component[] components_font = new Component[]{
dataSortCheckBox, oddColorSelectBox, evenColorSelectBox
};
//this.add(GUICoreUtils.createFlowPane(components_font, FlowLayout.LEFT, LayoutConstants.HGAP_SMALL), BorderLayout.SOUTH);
this.checkButtonEnabled();
}
protected String title4PopupWindow() {
return "printer";
}
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();
if (var1 < 0) {
var2x.addElement(var1x);
int index = var2x.size() - 1;
ColorSeriesConfPane.this.colorList.setSelectedIndex(index);
return;
}
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(CustomGanttChart ob) {
populate(ob.getColors());
enableCheckBox.setSelected(ob.isProjectCycleColor());
dataSortCheckBox.setSelected(ob.isDataSort());
oddColorSelectBox.setSelectObject(new Color(ob.getOddBackgroundColor()));
evenColorSelectBox.setSelectObject(new Color(ob.getEvenBackgroundColor()));
}
private 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 void update(CustomGanttChart ob) {
ob.setColors(update());
ob.setProjectCycleColor(enableCheckBox.isSelected());
ob.setDataSort(dataSortCheckBox.isSelected());
ob.setOddBackgroundColor(oddColorSelectBox.getSelectObject().getRGB());
ob.setEvenBackgroundColor(evenColorSelectBox.getSelectObject().getRGB());
}
private 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;
}
}

47
src/main/java/com/fr/plugin/third/party/jsdibjj/ui/ColorSettingPane.java

@ -0,0 +1,47 @@
package com.fr.plugin.third.party.jsdibjj.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.mainframe.backgroundpane.ColorBackgroundQuickPane;
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();
}
}

118
src/main/java/com/fr/plugin/third/party/jsdibjj/ui/CustomGanttShowSettingsPane.java

@ -0,0 +1,118 @@
package com.fr.plugin.third.party.jsdibjj.ui;
import com.fanruan.api.design.chart.BaseOtherPane;
import com.fanruan.api.design.ui.component.UITitledBorder;
import com.fr.plugin.third.party.jsdibjj.CustomGanttChart;
import com.fr.van.chart.designer.component.VanChartFillStylePane;
import com.fr.van.chart.designer.style.series.VanChartAbstractPlotSeriesPane;
import com.fr.design.style.color.ColorAdjustPane;
import javax.swing.*;
import java.awt.*;
public class CustomGanttShowSettingsPane extends BaseOtherPane<CustomGanttChart> {
private DisplayScaleConfPane displayScaleConfPane;
private ColorGapConfPane colorGapConfPane;
private ColorDateLineConfPane colorDateLineConfPane;
private ColorSeriesConfPane colorListPane;
private ColorAnimationConfPane colorAnimationConfPane;
private ColorEmphasisConfPane colorEmphasisConfPane;
private YFontConfPane yFontConfPane;
@Override
public void populate(CustomGanttChart ob) {
colorGapConfPane.populate(ob);
colorListPane.populate(ob);
colorDateLineConfPane.populate(ob);
displayScaleConfPane.populate(ob);
colorAnimationConfPane.populate(ob);
colorEmphasisConfPane.populate(ob);
yFontConfPane.populate(ob);
}
@Override
public void update(CustomGanttChart ob) {
CustomGanttChart conf = colorGapConfPane.update();
ob.setFillGapOption(conf.isFillGapOption());
ob.setFillGapColor(conf.getFillGapColor());
colorListPane.update(ob);
//ob.setColors(colorListPane.update());
CustomGanttChart conf1 = colorDateLineConfPane.update();
ob.setCurrentTimeLineOption(conf1.isCurrentTimeLineOption());
ob.setCurrentTimeLineColor(conf1.getCurrentTimeLineColor());
ob.setCurrentTimeLineWidth(conf1.getCurrentTimeLineWidth());
//ob.setDisplayScale(displayScaleConfPane.update());
displayScaleConfPane.update(ob);
CustomGanttChart conf2 = colorAnimationConfPane.update();
ob.setAnimationOption(conf2.isAnimationOption());
ob.setSymbolType(conf2.getSymbolType());
ob.setSymbolWidth(conf2.getSymbolWidth());
CustomGanttChart conf3 = colorEmphasisConfPane.update();
ob.setEmphasisOption(conf3.isEmphasisOption());
ob.setEmphasisBorderColor(conf3.getEmphasisBorderColor());
ob.setEmphasisBorderWidth(conf3.getEmphasisBorderWidth());
CustomGanttChart conf4 = yFontConfPane.update();
ob.setyAxisAxisLabelColor(conf4.getyAxisAxisLabelColor());
ob.setyAxisAxisLabelFontStyle(conf4.getyAxisAxisLabelFontStyle());
ob.setyAxisAxisLabelFontWeight(conf4.getyAxisAxisLabelFontWeight());
ob.setyAxisAxisLabelFontFamily(conf4.getyAxisAxisLabelFontFamily());
ob.setyAxisAxisLabelFontSize(conf4.getyAxisAxisLabelFontSize());
}
@Override
protected JPanel createContentPane() {
JPanel panel = new JPanel(new BorderLayout(0, 6));
displayScaleConfPane = new DisplayScaleConfPane();
displayScaleConfPane.setBorder(UITitledBorder.createBorderWithTitle("显示比例"));
colorGapConfPane = new ColorGapConfPane();
colorGapConfPane.setBorder(UITitledBorder.createBorderWithTitle("填充空白颜色设置"));
colorDateLineConfPane = new ColorDateLineConfPane();
colorDateLineConfPane.setBorder(UITitledBorder.createBorderWithTitle("日期线设置"));
colorAnimationConfPane = new ColorAnimationConfPane();
colorAnimationConfPane.setBorder(UITitledBorder.createBorderWithTitle("动画设置"));
colorEmphasisConfPane = new ColorEmphasisConfPane();
colorEmphasisConfPane.setBorder(UITitledBorder.createBorderWithTitle("选中设置"));
yFontConfPane = new YFontConfPane();
yFontConfPane.setBorder(UITitledBorder.createBorderWithTitle("Y轴字体设置"));
colorListPane = new ColorSeriesConfPane();
colorListPane.setBorder(UITitledBorder.createBorderWithTitle("系列渐变颜色设置"));
JPanel gapPanel = new JPanel();
gapPanel.setBorder(UITitledBorder.createBorderWithTitle(""));
JPanel settingsUI1 = new JPanel(new BorderLayout());
settingsUI1.add(displayScaleConfPane, BorderLayout.NORTH);
//settingsUI1.add(colorGapConfPane, BorderLayout.CENTER);
JPanel settingsUI2 = new JPanel(new BorderLayout());
//settingsUI2.add(colorAnimationConfPane, BorderLayout.NORTH);
settingsUI2.add(colorEmphasisConfPane, BorderLayout.CENTER);
settingsUI2.add(yFontConfPane, BorderLayout.SOUTH);
JPanel settingsUI = new JPanel(new BorderLayout());
settingsUI.add(settingsUI1, BorderLayout.NORTH);
settingsUI.add(colorDateLineConfPane, BorderLayout.CENTER);
settingsUI.add(settingsUI2, BorderLayout.SOUTH);
panel.add(settingsUI, BorderLayout.NORTH);
//panel.add(colorListPane, BorderLayout.CENTER);
return panel;
}
@Override
public String title4PopupWindow() {
return "显示";
}
}

162
src/main/java/com/fr/plugin/third/party/jsdibjj/ui/CustomGanttTitlePane.java

@ -0,0 +1,162 @@
package com.fr.plugin.third.party.jsdibjj.ui;
import com.fanruan.api.design.chart.BaseOtherPane;
import com.fanruan.api.design.ui.component.UICheckBox;
import com.fanruan.api.design.ui.component.UILabel;
import com.fanruan.api.design.ui.component.UITitledBorder;
import com.fanruan.api.design.ui.component.formula.UIFormulaTextField;
import com.fanruan.api.design.ui.layout.TableLayoutKit;
import com.fr.base.Utils;
import com.fr.design.gui.ibutton.UIColorButton;
import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.plugin.third.party.jsdibjj.CustomGanttChart;
import javax.swing.*;
import java.awt.*;
import java.util.Vector;
public class CustomGanttTitlePane extends BaseOtherPane<CustomGanttChart> {
private UIFormulaTextField titleFormulaTextField;
private UIColorButton colorSelectPane;
private UICheckBox fontStyleCheckBox;
private UICheckBox fontWeightCheckBox;
private UIComboBox fontNameComboBox;
private UIComboBox fontSizeComboBox;
private UIComboBox leftComboBox;
private UIComboBox fontNameSeriesNameComboBox;
private UIComboBox fontSizeSeriesNameComboBox;
private UIColorButton colorSelectSeriesNamePane;
@Override
public void populate(CustomGanttChart ob) {
titleFormulaTextField.populateBean(ob.getTitleFormula().toString());
colorSelectPane.setColor(new Color(ob.getTitleTextStyleColor()));
colorSelectPane.repaint();
if ("normal".equalsIgnoreCase(ob.getTitleTextStyleFontStyle())) {
fontStyleCheckBox.setSelected(false);
} else {
fontStyleCheckBox.setSelected(true);
}
if ("normal".equalsIgnoreCase(ob.getTitleTextStyleFontWeight())) {
fontWeightCheckBox.setSelected(false);
} else {
fontWeightCheckBox.setSelected(true);
}
fontNameComboBox.setSelectedItem(ob.getTitleTextStyleFontFamily());
fontSizeComboBox.setSelectedItem(ob.getTitleTextStyleFontSize());
if ("left".equalsIgnoreCase(ob.getTitleLeft())) {
leftComboBox.setSelectedIndex(0);
} else if ("center".equalsIgnoreCase(ob.getTitleLeft())) {
leftComboBox.setSelectedIndex(1);
} else if ("right".equalsIgnoreCase(ob.getTitleLeft())) {
leftComboBox.setSelectedIndex(2);
} else {
leftComboBox.setSelectedIndex(1);
}
fontNameSeriesNameComboBox.setSelectedItem(ob.getSeriesNameTextStyleFontFamily());
fontSizeSeriesNameComboBox.setSelectedItem(ob.getSeriesNameTextStyleFontSize());
colorSelectSeriesNamePane.setColor(new Color(ob.getSeriesNameTextStyleColor()));
colorSelectSeriesNamePane.repaint();
}
@Override
public void update(CustomGanttChart ob) {
ob.getTitleFormula().setContent(titleFormulaTextField.updateBean());
ob.setTitleTextStyleColor(colorSelectPane.getColor().getRGB());
if (fontStyleCheckBox.isSelected()) {
ob.setTitleTextStyleFontStyle("italic");
} else {
ob.setTitleTextStyleFontStyle("normal");
}
if (fontWeightCheckBox.isSelected()) {
ob.setTitleTextStyleFontWeight("bold");
} else {
ob.setTitleTextStyleFontWeight("normal");
}
ob.setTitleTextStyleFontFamily(String.valueOf(fontNameComboBox.getSelectedItem()));
ob.setTitleTextStyleFontSize((Integer) fontSizeComboBox.getSelectedItem());
String leftValue = "center";
String[] leftValues = {"left", "center", "right"};
int index = leftComboBox.getSelectedIndex();
if (index < 0) {
index = 1;
}
leftValue = leftValues[index];
ob.setTitleLeft(leftValue);
ob.setSeriesNameTextStyleFontFamily(String.valueOf(fontNameSeriesNameComboBox.getSelectedItem()));
ob.setSeriesNameTextStyleFontSize((Integer) fontSizeSeriesNameComboBox.getSelectedItem());
ob.setSeriesNameTextStyleColor(colorSelectSeriesNamePane.getColor().getRGB());
}
@Override
protected JPanel createContentPane() {
JPanel panel = new JPanel(new BorderLayout(0, 6));
titleFormulaTextField = new UIFormulaTextField();
colorSelectPane = new UIColorButton();
fontStyleCheckBox = new UICheckBox();
fontWeightCheckBox = new UICheckBox();
this.fontNameComboBox = new UIComboBox(Utils.getAvailableFontFamilyNames4Report());
this.fontNameComboBox.setPreferredSize(new Dimension(144, 20));
this.fontSizeComboBox = new UIComboBox(getFontSizes());
this.fontSizeComboBox.setEditable(true);
leftComboBox = new UIComboBox(new String[]{"居左", "居中", "居右"});
Component[][] components = new Component[][]{
{new UILabel(" 内容:"), titleFormulaTextField},
{new UILabel(" 颜色:"), colorSelectPane},
{new UILabel(" 斜体:"), fontStyleCheckBox},
{new UILabel(" 加粗:"), fontWeightCheckBox},
{new UILabel(" 字体:"), fontNameComboBox},
{new UILabel(" 字体大小:"), fontSizeComboBox},
{new UILabel(" 显示位置:"), leftComboBox}
};
double p = TableLayoutKit.PREFERRED;
double[] rowSize = new double[]{p, p, p, p, p, p, p};
double[] columnSize = new double[]{p, 120};
JPanel settingsUI = TableLayoutKit.createTableLayoutPane(components, rowSize, columnSize);
settingsUI.setBorder(UITitledBorder.createBorderWithTitle("标题"));
this.fontNameSeriesNameComboBox = new UIComboBox(Utils.getAvailableFontFamilyNames4Report());
this.fontNameSeriesNameComboBox.setPreferredSize(new Dimension(144, 20));
this.fontSizeSeriesNameComboBox = new UIComboBox(getFontSizes());
this.fontSizeSeriesNameComboBox.setEditable(true);
this.colorSelectSeriesNamePane = new UIColorButton();
Component[][] components1 = new Component[][]{
//{new UILabel(" 字体:"), fontNameSeriesNameComboBox},
{new UILabel(" 字体大小:"), fontSizeSeriesNameComboBox},
//{new UILabel(" 颜色:"), colorSelectSeriesNamePane},
};
rowSize = new double[]{p, };
JPanel settingsUI1 = TableLayoutKit.createTableLayoutPane(components1, rowSize, columnSize);
settingsUI1.setBorder(UITitledBorder.createBorderWithTitle("系列名称"));
panel.add(settingsUI, BorderLayout.NORTH);
panel.add(settingsUI1, BorderLayout.CENTER);
return panel;
}
@Override
public String title4PopupWindow() {
return "字体";
}
public static Vector<Integer> getFontSizes() {
Vector var0 = new Vector();
for (int var1 = 1; var1 < 100; ++var1) {
var0.add(var1);
}
return var0;
}
}

49
src/main/java/com/fr/plugin/third/party/jsdibjj/ui/CustomGanttTypePane.java

@ -0,0 +1,49 @@
package com.fr.plugin.third.party.jsdibjj.ui;
import com.fanruan.api.design.chart.DefaultTypePane;
import com.fr.plugin.third.party.jsdibjj.CustomGanttChart;
import javax.swing.*;
import java.awt.*;
public class CustomGanttTypePane extends DefaultTypePane<CustomGanttChart> {
//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/jsdibjj/images/chart_type.png"
};
}
@Override
protected int getSelectIndexInChart(CustomGanttChart chart) {
return 0;
}
@Override
protected void setSelectIndexInChart(CustomGanttChart 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(CustomGanttChart ob) {
super.populateBean(ob);
// buttonGroup.setSelectedIndex(StringKit.equals("left", ob.getLegendPosition()) ? 0 : 1);
}
@Override
public void updateBean(CustomGanttChart ob) {
super.updateBean(ob);
// ob.setLegendPosition(buttonGroup.getSelectedIndex() == 0 ? "left" : "right");
}
}

72
src/main/java/com/fr/plugin/third/party/jsdibjj/ui/DisplayScaleConfPane.java

@ -0,0 +1,72 @@
package com.fr.plugin.third.party.jsdibjj.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.design.gui.ispinner.UISpinner;
import com.fr.plugin.third.party.jsdibjj.CustomGanttChart;
import javax.swing.*;
import java.awt.*;
public class DisplayScaleConfPane extends BasicPane {
private UISpinner scaleSpinner;
private UISpinner scaleXSpinner;
public DisplayScaleConfPane() {
this.initComponents();
}
protected void initComponents() {
this.setLayout(new BorderLayout());
scaleSpinner = new UISpinner(0, 100, 1, 100);
scaleXSpinner = new UISpinner(0, 100, 1, 100);
//this.add(new UILabel("Y轴比例:"));
//this.add(scaleSpinner);
Component[][] components = new Component[][]{
{new UILabel("竖轴比例:"), scaleSpinner},
{new UILabel("横轴比例:"), scaleXSpinner}
};
double p = TableLayoutKit.PREFERRED;
double[] rowSize = new double[]{p, p};
double[] columnSize = new double[]{p, 100};
JPanel settingsUI = TableLayoutKit.createTableLayoutPane(components, rowSize, columnSize);
this.add(settingsUI, BorderLayout.CENTER);
}
public void populate(CustomGanttChart ob) {
int yValue = ob.getDisplayScale();
yValue = getValue(yValue);
int xValue = ob.getDisplayXScale();
xValue = getValue(xValue);
scaleSpinner.setValue(yValue, true);
scaleXSpinner.setValue(xValue, true);
}
private int getValue(int value) {
if (value <= 0) {
value = 0;
}
if (value >= 100) {
value = 100;
}
return value;
}
public void update(CustomGanttChart ob) {
int yValue = (int) scaleSpinner.getValue();
yValue = getValue(yValue);
int xValue = (int) scaleXSpinner.getValue();
xValue = getValue(xValue);
ob.setDisplayScale(yValue);
ob.setDisplayXScale(xValue);
}
@Override
protected String title4PopupWindow() {
return "显示比例";
}
}

116
src/main/java/com/fr/plugin/third/party/jsdibjj/ui/YFontConfPane.java

@ -0,0 +1,116 @@
package com.fr.plugin.third.party.jsdibjj.ui;
import com.fanruan.api.design.ui.component.UILabel;
import com.fanruan.api.design.ui.layout.TableLayoutKit;
import com.fr.base.Utils;
import com.fr.design.dialog.BasicPane;
import com.fr.design.gui.ibutton.UIColorButton;
import com.fr.design.gui.icheckbox.UICheckBox;
import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.plugin.third.party.jsdibjj.CustomGanttChart;
import javax.swing.*;
import java.awt.*;
import java.util.Vector;
/**
* 动画
*/
public class YFontConfPane extends BasicPane {
private static String[] SYMBOL_TYPES = {"rect", "circle", "roundRect", "triangle", "diamond", "pin", "arrow"};
private static String[] SYMBOL_TYPE_NAMES = {"矩形", "圆形", "圆角矩形", "三角形", "菱形", "弹头", "箭头"};
private UIColorButton colorSelectPane;
private UICheckBox fontStyleCheckBox;
private UICheckBox fontWeightCheckBox;
private UIComboBox fontNameComboBox;
private UIComboBox fontSizeComboBox;
public YFontConfPane() {
this.initComponents();
}
protected void initComponents() {
this.setLayout(new BorderLayout());
colorSelectPane = new UIColorButton();
fontStyleCheckBox = new UICheckBox();
fontWeightCheckBox = new UICheckBox();
this.fontNameComboBox = new UIComboBox(Utils.getAvailableFontFamilyNames4Report());
this.fontNameComboBox.setPreferredSize(new Dimension(144, 20));
this.fontSizeComboBox = new UIComboBox(getFontSizes());
this.fontSizeComboBox.setEditable(true);
Component[][] components = new Component[][]{
{new UILabel(" 颜色:"), colorSelectPane},
{new UILabel(" 斜体:"), fontStyleCheckBox},
{new UILabel(" 加粗:"), fontWeightCheckBox},
{new UILabel(" 字体:"), fontNameComboBox},
{new UILabel(" 字体大小:"), fontSizeComboBox}
};
double p = TableLayoutKit.PREFERRED;
double[] rowSize = new double[]{p, p, p, p, p};
double[] columnSize = new double[]{p, 120};
JPanel settingsUI = TableLayoutKit.createTableLayoutPane(components, rowSize, columnSize);
this.add(settingsUI, BorderLayout.CENTER);
}
protected String title4PopupWindow() {
return "color";
}
public void populate(CustomGanttChart ob) {
colorSelectPane.setColor(new Color(ob.getyAxisAxisLabelColor()));
colorSelectPane.repaint();
if ("normal".equalsIgnoreCase(ob.getyAxisAxisLabelFontStyle())) {
fontStyleCheckBox.setSelected(false);
} else {
fontStyleCheckBox.setSelected(true);
}
if ("normal".equalsIgnoreCase(ob.getyAxisAxisLabelFontWeight())) {
fontWeightCheckBox.setSelected(false);
} else {
fontWeightCheckBox.setSelected(true);
}
fontNameComboBox.setSelectedItem(ob.getyAxisAxisLabelFontFamily());
fontSizeComboBox.setSelectedItem(ob.getyAxisAxisLabelFontSize());
}
public CustomGanttChart update() {
CustomGanttChart ob = new CustomGanttChart();
ob.setyAxisAxisLabelColor(colorSelectPane.getColor().getRGB());
if (fontStyleCheckBox.isSelected()) {
ob.setyAxisAxisLabelFontStyle("italic");
} else {
ob.setyAxisAxisLabelFontStyle("normal");
}
if (fontWeightCheckBox.isSelected()) {
ob.setyAxisAxisLabelFontWeight("bold");
} else {
ob.setyAxisAxisLabelFontWeight("normal");
}
ob.setyAxisAxisLabelFontFamily((String) fontNameComboBox.getSelectedItem());
ob.setyAxisAxisLabelFontSize((Integer) fontSizeComboBox.getSelectedItem());
return ob;
}
private int getSymbolTypeIndex(String type) {
for (int i = 0, max = SYMBOL_TYPES.length - 1; i <= max; i++) {
if (SYMBOL_TYPES[i].equalsIgnoreCase(type)) {
return i;
}
}
return 0;
}
public static Vector<Integer> getFontSizes() {
Vector var0 = new Vector();
for (int var1 = 1; var1 < 100; ++var1) {
var0.add(var1);
}
return var0;
}
}

BIN
src/main/resources/com/fr/plugin/third/party/jsdibjj/images/chart_icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 292 B

BIN
src/main/resources/com/fr/plugin/third/party/jsdibjj/images/chart_type.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 555 B

BIN
src/main/resources/com/fr/plugin/third/party/jsdibjj/images/chart_type_demo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

BIN
src/main/resources/com/fr/plugin/third/party/jsdibjj/images/gantt_type.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

42
src/main/resources/com/fr/plugin/third/party/jsdibjj/web/customGanttPlus.css

@ -0,0 +1,42 @@
.echarts-custom-gantt-progress-bar-div {
position: absolute;
background-color: #1a1a1a;
border-radius: 5px;
box-shadow: 0 1px 5px #d8cfcf inset, 0 1px 0 #444;
z-index: 9999;
}
.echarts-custom-gantt-progress-bar-div span {
/*background-color: #34c2e3;*/
background-image: -webkit-gradient(linear, 0 0, 100% 100%, color-stop(.25, rgba(255, 255, 255, .2)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255, 255, 255, .2)), color-stop(.75, rgba(255, 255, 255, .2)), color-stop(.75, transparent), to(transparent));
background-image: linear-gradient(135deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-webkit-animation: animate-stripes 2s linear infinite;
-moz-animation: animate-stripes 2s linear infinite;
animation: animate-stripes 2s linear infinite;
background-size: 20px 20px;
height: 100%;
display: inline-block;
}
@-webkit-keyframes animate-stripes {
0% {
background-position: 0 0;
}
100% {
background-position: 60px 0;
}
}
@-moz-keyframes animate-stripes {
0% {
background-position: 0 0;
}
100% {
background-position: 60px 0;
}
}

876
src/main/resources/com/fr/plugin/third/party/jsdibjj/web/customGanttPlusWrapper.js

@ -0,0 +1,876 @@
!(function () {
Van.FRChartBridge.customGanttPlusWrapper = Van.FRChartBridge.AbstractChart.extend({
_init: function (dom, option) {
debugger;
if (!(option.dataStatus === true)) {
return;
}
var textFontSize = option.seriesNameFont.seriesNameTextStyleFontSize;
var graphDatasConf = option.graphDatasConf;
var graphDatas = [];
for (var i = 0, max = graphDatasConf.length - 1; i <= max; i++) {
var conf = graphDatasConf[i];
var symbolValue = 'circle';
var iconPath = "";
if (conf.type == 'image') {
iconPath = FR.fineServletURL + '/resources?path=' + conf.path;
symbolValue = 'image://' + iconPath;
}
var graphData = {};
graphData.value = [conf.x, conf.y];
graphData.symbol = symbolValue;
//graphData.symbolSize = 20;
graphData.itemStyle = {color: 'red'};
graphDatas.push(graphData);
}
var fineServletURLResourcesValue = FR.fineServletURL + '/resources?path=';
/*
* 颜色取反色
* */
function reverseColor(OldColorValue) {
var OldColorValue = "0x" + OldColorValue.replace(/#/g, "");
var str = "000000" + (0xFFFFFF - OldColorValue).toString(16);
return "#" + str.substring(str.length - 6, str.length);
}
function isStringEmpty(value) {
if ((value == undefined) || (value == null) || (value.length <= 0)) {
return true;
}
return false;
}
function subStringByLength(str, index, length) {
if (isStringEmpty(str)) {
return "";
}
return str.substr(index, length);
}
function getRealValue(value) {
//针对echarts的bug处理,若系列名称有数字,有中文,会默认按数字处理,有中文会显示NaN,故在前面加"甘特图"处理
if ((value == undefined) || (value == null)) {
return "";
}
if (typeof (value) != 'string') {
return value;
}
if (value.length <= 3) {
return value;
}
if (value.substr(0, 3) != "甘特图") {
return value;
}
var tempValue = value.substring(3);
return tempValue;
}
var tempRate = 0.1;
var rectHeight = 0;
var linesEnable = option.ganttData.animationOption;
var projectCycleColorOption = option.projectCycleColor;
var flashingDataMap = new Map();
function renderItem(params, api) {
//debugger;
var categoryIndex = api.value(0);
var start = api.coord([api.value(1), categoryIndex]);
var end = api.coord([api.value(2), categoryIndex]);
var width = end[0] - start[0];
var height = api.size([0, 1])[1] * 0.6;
rectHeight = height;
var rectShape = echarts.graphic.clipRectByRect({
x: start[0],
y: start[1] - height / 2,
width: width,
height: height
}, {
x: params.coordSys.x,
y: params.coordSys.y,
width: params.coordSys.width,
height: params.coordSys.height
});
var schedule = api.value(5);
var rectShape1 = echarts.graphic.clipRectByRect({
x: start[0] + width * schedule,
//x: start[0],
y: start[1] - height / 2,
//width: width * schedule,
width: width * (1 - schedule),
height: height
}, {
x: params.coordSys.x,
y: params.coordSys.y,
width: params.coordSys.width,
height: params.coordSys.height
});
var rectShape2 = echarts.graphic.clipRectByRect({
//x: start[0] + width * schedule,
x: start[0],
y: start[1] - height / 2,
width: width * schedule,
//width: width * (1 - schedule),
height: height
}, {
x: params.coordSys.x,
y: params.coordSys.y,
width: params.coordSys.width,
height: params.coordSys.height
});
var textValue = api.value(3);
textValue = getRealValue(textValue);
var completedColorHex = api.value(6);
//var incompleteColorHex = api.value(7);
var incompleteColorHex = completedColorHex + "33";
//completedColorHex="rgb(255,0,0)";
//incompleteColorHex="rgb(255,0,0)";
incompleteColorHex = completedColorHex;
var showType = api.value(9);
if (showType == "IMAGE") {
debugger;
var rectShapeFill = echarts.graphic.clipRectByRect({
x: start[0],
y: start[1] - height / 2,
width: width,
height: height
}, {
x: params.coordSys.x,
y: params.coordSys.y,
width: params.coordSys.width,
height: params.coordSys.height
});
var imagePath = fineServletURLResourcesValue + api.value(11);
return {
type: 'image',
//x: start[0],
//y: start[1] - height / 2,
style: {
image: imagePath,
width: 40,
height: height
},
position: [start[0], start[1] - height / 2]
};
}
if (projectCycleColorOption == true) {
//debugger;
var rectShapeFill = echarts.graphic.clipRectByRect({
x: start[0],
y: start[1] - height / 2,
width: width,
height: height
}, {
x: params.coordSys.x,
y: params.coordSys.y,
width: params.coordSys.width,
height: params.coordSys.height
});
var textColor = reverseColor(completedColorHex);
/*return rectShape && {
type: 'rect',
ignore: !rectShapeFill,
shape: rectShapeFill,
style: api.style({
fill: completedColorHex,
stroke: completedColorHex,
text: textValue,
//textFill: '#000000',
fontSize: textFontSize,
textFill: textColor,
borderColor: textColor,
lineWidth: 1
})
};*/
return {
type: 'group',
children: [
{
type: 'rect',
ignore: !rectShapeFill,
shape: rectShapeFill,
style: api.style({
fill: completedColorHex,
stroke: completedColorHex,
text: textValue,
//textFill: '#000000',
fontSize: textFontSize,
textFill: textColor,
borderColor: textColor,
lineWidth: 1
})
},
{
type: 'rect',
ignore: !rectShape1,
shape: rectShape1,
//style: api.style({fill: '#ef2000'})
style: api.style({
fill: 'rgba(255, 255, 255, 0.5)',
stroke: 'rgba(255, 255, 255, 0.5)',
borderColor: 'transparent',
lineWidth: 0
})
},
{
type: 'rect',
ignore: !rectShapeFill,
shape: rectShapeFill,
style: api.style({
fill: 'transparent',
stroke: 'transparent',
text: textValue,
fontSize: textFontSize,
textFill: textColor,
borderColor: 'transparent',
lineWidth: 0
})
}
]
};
}
if (showType == "BACKGROUND") {
var rectShapeFill = echarts.graphic.clipRectByRect({
x: start[0],
y: start[1] - height / 2,
width: width,
height: height
}, {
x: params.coordSys.x,
y: params.coordSys.y,
width: params.coordSys.width,
height: params.coordSys.height
});
return rectShape && {
type: 'rect',
ignore: !rectShapeFill,
shape: rectShapeFill,
style: api.style({
fill: completedColorHex,
stroke: completedColorHex,
lineWidth: 1
})
};
}
if (showType == "FILL") {
//debugger;
var flashingId = api.value(0) + "f" + api.value(10);
var size = [width, height];
flashingDataMap.set(flashingId, size);
var rectShapeFill = echarts.graphic.clipRectByRect({
x: start[0],
y: start[1] - height / 2,
width: width,
height: height
}, {
x: params.coordSys.x,
y: params.coordSys.y,
width: params.coordSys.width,
height: params.coordSys.height
});
return rectShape && {
type: 'rect',
ignore: !rectShapeFill,
shape: rectShapeFill,
style: api.style({
fill: completedColorHex,
stroke: completedColorHex,
lineWidth: 1
})
};
}
var linesEnable_1 = true;
if (linesEnable_1 == true) {
return {
type: 'group',
children: [
{
type: 'rect',
ignore: !rectShape1,
shape: rectShape1,
//style: api.style({fill: '#ef2000'})
style: api.style({
fill: incompleteColorHex,
//fill: "#eae1e1",
stroke: incompleteColorHex,
lineWidth: 1
})
},
{
type: 'rect',
ignore: !rectShape2,
shape: rectShape2,
//style: api.style({fill: '#ef2000'})
style: api.style({
//fill: incompleteColorHex,
fill: "transparent",
stroke: incompleteColorHex,
lineWidth: 1
})
},
{
type: 'rect',
ignore: !rectShape,
shape: rectShape,
style: api.style({
fill: 'transparent',
stroke: 'transparent',
text: textValue,
fontSize: textFontSize,
textFill: '#000000'
}),
styleEmphasis: api.styleEmphasis()
}]
};
}
return {
type: 'group',
children: [
{
type: 'rect',
ignore: !rectShape,
shape: rectShape,
//style: api.style({fill: '#ddb30b'})
style: api.style({
fill: completedColorHex,
stroke: incompleteColorHex,
lineWidth: 1
})
},
{
type: 'rect',
ignore: !rectShape2,
shape: rectShape2,
//style: api.style({fill: '#ef2000'})
style: api.style({
fill: incompleteColorHex,
//fill: "#eae1e1",
stroke: incompleteColorHex,
lineWidth: 1
})
},
{
type: 'rect',
ignore: !rectShape,
shape: rectShape,
style: api.style({
fill: 'transparent',
stroke: 'transparent',
text: textValue,
fontSize: textFontSize,
textFill: '#000000'
}),
styleEmphasis: api.styleEmphasis()
}]
};
};
//var currentTimestamp = (new Date()).getTime();
var dateLineWidth = option.ganttData.dateLine.width;
if (dateLineWidth <= 0) {
dateLineWidth = 2;
}
var dateLineWidthConf = {};
if (option.ganttData.dateLine.enable) {
dateLineWidthConf = {
tooltip: {show: false},
symbol: "none",
data: [
{
silent: true,
lineStyle: {
type: "solid",
color: option.ganttData.dateLine.color,
width: dateLineWidth
},
label: {
position: 'start',
formatter: "当前时间\n" + option.ganttData.dateLine.currentDateShow
},
xAxis: option.ganttData.dateLine.currentDate
}
]
};
}
function getDateValueFormatter(value, index) {
var tempDate = new Date(value);
var tempYear = tempDate.getFullYear();
var tempMonth = tempDate.getMonth() + 1;
if (tempMonth <= 9) {
tempMonth = '0'.concat(tempMonth);
}
var tempDay = tempDate.getDate();
if (tempDay <= 9) {
tempDay = '0'.concat(tempDay);
}
var content = tempYear + "-" + tempMonth + "-" + tempDay;
return content;
}
var ganttOption = {
tooltip: {
formatter: function (params) {
if (isStringEmpty(params.showType) && isStringEmpty(params.data.showType)) {
return "";
}
if (params.data.showType == "BACKGROUND") {
return "";
}
if (params.data.showType == "FILL") {
return "接替脱节" + params.data.days + "天";
}
var seriesName = params.name;
seriesName = getRealValue(seriesName);
var schedule = params.value[8];
return seriesName + ': 进度' + schedule + "<br/>" + subStringByLength(params.data.beginDateShow, 0, 10) + "至" + subStringByLength(params.data.endDateShow, 0, 10);
}
},
title: {
//text: option.ganttTitle,
//left: 'center'
text: option.ganttTitle.titleText,
left: option.ganttTitle.titleLeft,
//textAlign: 'center'
textStyle: {
color: option.ganttTitle.titleTextStyleColor,
fontStyle: option.ganttTitle.titleTextStyleFontStyle,
fontWeight: option.ganttTitle.titleTextStyleFontWeight,
fontFamily: option.ganttTitle.titleTextStyleFontFamily,
fontSize: option.ganttTitle.titleTextStyleFontSize
}
},
dataZoom: [
{
type: 'slider',
filterMode: 'weakFilter',
showDataShadow: false,
bottom: 0,
height: 10,
borderColor: 'transparent',
backgroundColor: '#e2e2e2',
// backgroundColor: '#ff0000',
handleIcon: 'M10.7,11.9H9.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z', // jshint ignore:line
handleSize: 20,
handleStyle: {
shadowBlur: 6,
shadowOffsetX: 1,
shadowOffsetY: 2,
shadowColor: '#aaa'
},
labelFormatter: ''
}, {
type: 'inside',
filterMode: 'weakFilter'
}, {
type: 'slider',
yAxisIndex: 0,
zoomLock: true,
width: 10,
right: 10,
top: 0,
bottom: 20,
//start: 20,
start: option.ganttData.displayScale,
end: 100,
handleSize: 0,
showDetail: false,
}, {
type: 'inside',
id: 'insideY',
yAxisIndex: 0,
// start: 20,
start: option.ganttData.displayScale,
end: 100,
zoomOnMouseWheel: false,
moveOnMouseMove: true,
moveOnMouseWheel: true
}],
grid: {
//height: 300
top: 5,
containLabel: true
},
xAxis: {
min: option.ganttData.minDate,
max: option.ganttData.maxDate,
scale: true,
type: 'time',
position: 'top',
splitLine: {
lineStyle: {
color: ['#E9EDFF']
}
},
axisLine: {
show: false
},
axisTick: {
lineStyle: {
color: '#929ABA'
}
},
axisLabel: {
color: '#929ABA',
inside: false,
align: 'center',
formatter: getDateValueFormatter
}
},
yAxis: {
data: option.ganttData.categories,
axisLabel: {
color: option.yAxisAxisLabelFont.yAxisAxisLabelColor,
fontStyle: option.yAxisAxisLabelFont.yAxisAxisLabelFontStyle,
fontWeight: option.yAxisAxisLabelFont.yAxisAxisLabelFontWeight,
fontFamily: option.yAxisAxisLabelFont.yAxisAxisLabelFontFamily,
fontSize: option.yAxisAxisLabelFont.yAxisAxisLabelFontSize
}
},
series: [
{
type: 'custom',
zlevel: 5,
markLine: dateLineWidthConf
},
/*{
type: 'lines',
polyline: true,
coordinateSystem: 'cartesian2d',
lineStyle: {
type: 'dashed',
width: 0,
//color: '#175064',
curveness: 0.3
},
effect: {
show: true,
trailLength: 0.1,
symbol: 'rect',
//color: 'orange',
symbolSize: 2,
period: 2
},
data: option.ganttData.linesData,
zlevel: 10
},*/
{
type: 'custom',
renderItem: renderItem,
itemStyle: {
opacity: 0.8
},
encode: {
x: [1, 2],
y: 0
},
data: option.ganttData.seriesData,
zlevel: 20
// markLine: dateLineWidthConf
}
]
};
var chart = echarts.init(dom);
//绑定点击触发超链函数
chart.on('click', this.getLinkFun());
chart.setOption(ganttOption, true);
//var tempOption = chart.getOption();
//var symbolSizeValue = chart._api.size([0, 1])[1] * 0.6;
//var symbolSizeValue = chart._api.getHeight();
// rectHeight = rectHeight*0.5;
var periodValue = 2;
if (linesEnable == true) {
periodValue = 2;
} else {
periodValue = 0;
}
var ganttOption1 = {
tooltip: {
formatter: function (params) {
if (isStringEmpty(params.showType) && isStringEmpty(params.data.showType)) {
return "";
}
var seriesName = params.name;
seriesName = getRealValue(seriesName);
var schedule = params.value[8];
if (params.data.showType == "BACKGROUND") {
return "";
}
if (params.data.showType == "FILL") {
return "";
}
if (params.data.showType == "IMAGE") {
return schedule + "<br/>时间:" + subStringByLength(params.data.beginDateShow, 0, 10)
}
return seriesName + "<br/>" + '进度' + schedule + "<br/>" + subStringByLength(params.data.beginDateShow, 0, 10) + "至" + subStringByLength(params.data.endDateShow, 0, 10);
}
},
title: {
text: option.ganttTitle.titleText,
left: option.ganttTitle.titleLeft,
//textAlign: 'center'
textStyle: {
color: option.ganttTitle.titleTextStyleColor,
fontStyle: option.ganttTitle.titleTextStyleFontStyle,
fontWeight: option.ganttTitle.titleTextStyleFontWeight,
fontFamily: option.ganttTitle.titleTextStyleFontFamily,
fontSize: option.ganttTitle.titleTextStyleFontSize
}
},
dataZoom: [
{
type: 'slider',
filterMode: 'weakFilter',
showDataShadow: false,
bottom: 0,
height: 10,
borderColor: 'transparent',
backgroundColor: '#e2e2e2',
// backgroundColor: '#ff0000',
handleIcon: 'M10.7,11.9H9.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z', // jshint ignore:line
handleSize: 20,
handleStyle: {
shadowBlur: 6,
shadowOffsetX: 1,
shadowOffsetY: 2,
shadowColor: '#aaa'
},
labelFormatter: '',
//start: 0,
//end: option.ganttData.displayXScale
start: option.ganttData.displayXScale,
end: 100
}, {
type: 'inside',
filterMode: 'weakFilter'
}, {
type: 'slider',
yAxisIndex: 0,
zoomLock: true,
width: 10,
right: 10,
top: 70,
bottom: 20,
//start: 20,
start: option.ganttData.displayScale,
end: 100,
handleSize: 0,
showDetail: false,
}, {
type: 'inside',
id: 'insideY',
yAxisIndex: 0,
// start: 20,
start: option.ganttData.displayScale,
end: 100,
zoomOnMouseWheel: false,
moveOnMouseMove: true,
moveOnMouseWheel: true
}],
grid: {
//height: 300
top: 5,
left: 5,
right: 30,
//bottom:5,
containLabel: true
},
xAxis: {
min: option.ganttData.minDate,
max: option.ganttData.maxDate,
scale: true,
type: 'time',
position: 'top',
splitLine: {
lineStyle: {
color: ['#E9EDFF']
}
},
axisLine: {
show: false
},
axisTick: {
lineStyle: {
color: '#929ABA'
}
},
axisLabel: {
color: '#929ABA',
inside: false,
align: 'center',
formatter: getDateValueFormatter
}
},
yAxis: {
data: option.ganttData.categories,
axisLabel: {
//backgroundColor:'red',
//height:2,
color: option.yAxisAxisLabelFont.yAxisAxisLabelColor,
fontStyle: option.yAxisAxisLabelFont.yAxisAxisLabelFontStyle,
fontWeight: option.yAxisAxisLabelFont.yAxisAxisLabelFontWeight,
fontFamily: option.yAxisAxisLabelFont.yAxisAxisLabelFontFamily,
fontSize: option.yAxisAxisLabelFont.yAxisAxisLabelFontSize,
formatter: function (value, index) {
//debugger;
var index = value.lastIndexOf("\n");
if (index <= 0) {
return value;
}
var name = value.substring(0, index);
var name1 = value.substring(index + 1);
name1 = name1 || '';
if (name1.length <= 0) {
return name;
}
if (option.fillGap.enable && (option.fillGap.enable == true)) {
return name + "\n" + "{suspendStyle|" + name1 + "}";
}
return name;
},
rich: {
suspendStyle: {
color: option.fillGap.color
}
}
}
},
series: [
{
type: 'custom',
zlevel: 0,
markLine: dateLineWidthConf
},
{
type: 'lines',
polyline: true,
coordinateSystem: 'cartesian2d',
lineStyle: {
type: 'dashed',
//width: rectHeight,
width: 0,
//color: '#175064',
opacity: 0.3,
curveness: 0.3
},
effect: {
show: true,
trailLength: 0.1,
//symbol: 'diamond',
//color: 'orange',
//symbolSize: [rectHeight,10],
symbol: option.ganttData.symbolType,
symbolSize: [rectHeight, option.ganttData.symbolWidth],
period: periodValue
//period: 0
//constantSpeed: 20
},
data: option.ganttData.linesData,
zlevel: 10
},
{
type: 'custom',
renderItem: renderItem,
itemStyle: {
opacity: 0.8
},
encode: {
x: [1, 2],
y: 0
},
data: option.ganttData.seriesData,
zlevel: 20
// markLine: dateLineWidthConf
}, {
type: 'graph',
layout: 'none',
coordinateSystem: 'cartesian2d',
symbolSize: 50,
label: {
show: false
},
lineStyle: {
width: 0,
opacity: 1
},
data: graphDatas,
zlevel: 30
}
]
};
if (linesEnable) {
// chart.setOption(ganttOption1, true);
}
chart.setOption(ganttOption1, true);
chart.on('mouseover', function (params) {
//console.log(params);
});
chart.on('click', function (params) {
console.log(params);
});
return chart;
},
_refresh: function (chart, option) {
chart.setOption(option);
},
_resize: function (chart) {
chart.resize();
},
_emptyData: function (options) {
return options.series.data.length === 0;
}
})
})();

7
src/main/resources/com/fr/plugin/third/party/jsdibjj/web/echarts-adapter.js

@ -0,0 +1,7 @@
var document = {
createElement: function(element) {
if (element == 'canvas') {
return new Canvas();
}
},
};

22
src/main/resources/com/fr/plugin/third/party/jsdibjj/web/echarts.min.js vendored

File diff suppressed because one or more lines are too long

BIN
定制甘特图插件使用手册.pdf

Binary file not shown.
Loading…
Cancel
Save