forked from fanruan/design
Browse Source
Merge in DESIGN/design from ~HENRY.WANG/design:release/11.0 to release/11.0 * commit '05a116c13ff1a341de5f838d5b20181b560e6cf8': (48 commits) 无任务 解决冲突 REPORT-60528 修复之前在弹窗提示tablayout高度有问题的时候,判断处理逻辑不正确的问题 REPORT-61654 弹窗内容显示不全 REPORT-61610 fix:回退最开始关于 相同的图表类型,不会新建图表配置界面 的逻辑改动 REPORT-62179 数字控件的最大最小值校验需支持公式 REPORT-62016 BI插件匹配检测 REPORT-61410 数据集预览时可复制-表头复制问题 && REPORT-61409 数据集预览时可复制-赋值空值时显示成Null update 代码质量:每个实例各自监听插件事件 REPORT-61695 REPORT-61618 复用组件生成时带“-”,导致部分公式失效@Jaimme REPORT-61695 决策报表-自适应布局下组件右侧设置面板显示“组件大小”,绝对布局下显示的是“控件位置”“控件大小” REPORT-61610 fix:插件重新加载 图表配置界面报错 A.class can not cast to A.class CHART-21418 fix:第二次修改 区分弹框在上面还是下面 如果在上面 则是从displayComponent下面离开 隐藏弹框 REPORT-59744 聚合报表块手动修改位置以后,点击空白处位置偏移 REPORT-61306 设计器缩放时,显示通知的弹窗未跟随设计器内部界面,而是固定显示在右侧 REPORT-60887 MAC OS x电脑上 编辑按钮飘移 REPORT-61654 设计器-非中文设计器-字体缺失检测的弹窗内容显示不全 REPORT-61654 设计器-非中文设计器-字体缺失检测的弹窗内容显示不全 REPORT-59614 远程设计下无推送日志 ...bugfix/11.0
ju|剧浩宇
3 years ago
37 changed files with 554 additions and 89 deletions
@ -0,0 +1,91 @@ |
|||||||
|
package com.fr.van.chart.config; |
||||||
|
|
||||||
|
import com.fr.base.ChartPreStyleConfig; |
||||||
|
import com.fr.chart.base.ChartBaseUtils; |
||||||
|
import com.fr.chart.base.ChartConstants; |
||||||
|
import com.fr.general.Background; |
||||||
|
import com.fr.general.FRFont; |
||||||
|
import com.fr.general.GeneralUtils; |
||||||
|
import com.fr.stable.CodeUtils; |
||||||
|
import com.fr.stable.Constants; |
||||||
|
|
||||||
|
import java.awt.Color; |
||||||
|
import java.awt.Font; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author shine |
||||||
|
* @version 10.0 |
||||||
|
* Created by shine on 2021/6/25 |
||||||
|
*/ |
||||||
|
public class DefaultStyleConstants { |
||||||
|
static final FRFont TITLE = FRFont.getInstance(ChartBaseUtils.getLocalDefaultFont("Microsoft YaHei"), Font.BOLD, 14, new Color(241, 246, 255)); |
||||||
|
static final FRFont LEGEND = FRFont.getInstance(ChartBaseUtils.getLocalDefaultFont("Microsoft YaHei"), Font.PLAIN, 9, new Color(159, 173, 191)); |
||||||
|
|
||||||
|
static final FRFont AXIS_LABEL = FRFont.getInstance(ChartBaseUtils.getLocalDefaultFont("Microsoft YaHei"), Font.PLAIN, 9, new Color(159, 173, 191)); |
||||||
|
static final FRFont AXIS_TITLE = FRFont.getInstance(ChartBaseUtils.getLocalDefaultFont("Microsoft YaHei"), Font.PLAIN, 9, new Color(200, 211, 228)); |
||||||
|
static final Color AXIS_LINE = new Color(46, 75, 102); |
||||||
|
static final Color GRID_LINE = new Color(30, 55, 78); |
||||||
|
|
||||||
|
static final FRFont ALERT_FONT = FRFont.getInstance(ChartBaseUtils.getLocalDefaultFont("Microsoft YaHei"), Font.PLAIN, 9, new Color(255, 0, 0)); |
||||||
|
|
||||||
|
static final FRFont DATA_SHEET = FRFont.getInstance(ChartBaseUtils.getLocalDefaultFont("Microsoft YaHei"), Font.PLAIN, 9, new Color(159, 173, 191)); |
||||||
|
static final Color DATA_SHEET_BORDER = new Color(46, 75, 102); |
||||||
|
|
||||||
|
static final Color BORDER = Color.BLACK; |
||||||
|
static final int BORDER_WIDTH = Constants.LINE_NONE; |
||||||
|
static final int SPECIAL_BORDER_WIDTH = Constants.LINE_THIN; |
||||||
|
|
||||||
|
static final FRFont PIE_CATEGORY_LABEL = FRFont.getInstance(ChartBaseUtils.getLocalDefaultFont("Microsoft YaHei"), Font.PLAIN, 10, new Color(232, 232, 232)); |
||||||
|
|
||||||
|
static final Color GAUGE_PANE_BACK_COLOR = null; |
||||||
|
static final Color GAUGE_HINGE = null; |
||||||
|
static final Color GAUGE_PANE_BACK_COLOR_4_RING = new Color(72, 73, 79); |
||||||
|
static final Color GAUGE_SLOT_BACKGROUND_COLOR = new Color(72, 73, 79); |
||||||
|
private static final String FONT_NAME = ChartBaseUtils.getLocalDefaultFont("verdana"); |
||||||
|
static final FRFont THERMOMETER_LABEL_FONT = FRFont.getInstance(FONT_NAME, Font.BOLD, 9, new Color(232, 232, 232));//试管仪表盘标签的默认样式
|
||||||
|
static final FRFont THERMOMETER_AXIS_LABEL = FRFont.getInstance(FONT_NAME, Font.PLAIN, 8, new Color(159, 173, 191)); |
||||||
|
static final FRFont RING_VALUE_LABEL_FONT = FRFont.getInstance(FONT_NAME, Font.PLAIN, ChartConstants.AUTO_FONT_SIZE, new Color(232, 232, 232));//百分比圆环仪表盘值标签的默认样式
|
||||||
|
static final FRFont POINTER_VALUE_LABEL_FONT = FRFont.getInstance(FONT_NAME, Font.PLAIN, ChartConstants.AUTO_FONT_SIZE, new Color(232, 232, 232));//多指针仪表盘值标签的默认样式
|
||||||
|
static final FRFont POINTER_CATE_LABEL_FONT = FRFont.getInstance(FONT_NAME, Font.PLAIN, 10, new Color(232, 232, 232));//多指针仪表盘分类标签的默认样式
|
||||||
|
|
||||||
|
static final Color MAP_NULL_VALUE_COLOR = new Color(168, 168, 168); |
||||||
|
static final Color MAP_BORDER = Color.BLACK; |
||||||
|
static final Color MAP_LEGEND_BACK = Color.BLACK; |
||||||
|
static final Color MAP_TITLE_BACK = Color.BLACK; |
||||||
|
|
||||||
|
static final Color DRILL_MAP_DRILL_TOOLS_BACK = Color.BLACK; |
||||||
|
static final float DRILL_MAP_DRILL_TOOLS_BACK_OPACITY = 0.8f; |
||||||
|
|
||||||
|
//todo vancharts
|
||||||
|
private static final Color GANTT_OUT_LINE = GRID_LINE; |
||||||
|
private static final FRFont GANTT_LABEL = FRFont.getInstance(ChartBaseUtils.getLocalDefaultFont("Microsoft YaHei"), Font.PLAIN, 8, new Color(217, 217, 217)); |
||||||
|
private static final Color GANTT_BORDER_LINE = new Color(30, 36, 58); |
||||||
|
private static final Color GAUGE_TICK = new Color(39, 49, 71); |
||||||
|
|
||||||
|
static final Background BACK = null; |
||||||
|
|
||||||
|
static String COLORS = null; |
||||||
|
|
||||||
|
static { |
||||||
|
ChartPreStyleConfig config = ChartPreStyleConfig.getInstance(); |
||||||
|
try { |
||||||
|
DefaultStyleConstants.COLORS = CodeUtils.cjkDecode("\u7ecf\u5178\u9ad8\u4eae"); |
||||||
|
// 没有经典高亮, 用新特性
|
||||||
|
if (config.getPreStyle(DefaultStyleConstants.COLORS) == null) { |
||||||
|
DefaultStyleConstants.COLORS = CodeUtils.cjkDecode("\u65b0\u7279\u6027"); |
||||||
|
} |
||||||
|
// 没有新特性, 用第一个配色
|
||||||
|
if (config.getPreStyle(DefaultStyleConstants.COLORS) == null) { |
||||||
|
if (config.names().hasNext()) { |
||||||
|
|
||||||
|
String name = GeneralUtils.objectToString(config.names().next()); |
||||||
|
if (config.getPreStyle(name) != null) { |
||||||
|
DefaultStyleConstants.COLORS = name; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,186 @@ |
|||||||
|
package com.fr.van.chart.config; |
||||||
|
|
||||||
|
import com.fr.chart.base.AttrBorder; |
||||||
|
import com.fr.chart.base.AttrFillStyle; |
||||||
|
import com.fr.chart.base.ChartConstants; |
||||||
|
import com.fr.chart.chartattr.Plot; |
||||||
|
import com.fr.chart.chartglyph.ConditionAttr; |
||||||
|
import com.fr.chart.chartglyph.DataSheet; |
||||||
|
import com.fr.config.predefined.ColorFillStyle; |
||||||
|
import com.fr.design.mainframe.chart.mode.ChartEditContext; |
||||||
|
import com.fr.plugin.chart.PiePlot4VanChart; |
||||||
|
import com.fr.plugin.chart.attr.axis.VanChartAlertValue; |
||||||
|
import com.fr.plugin.chart.attr.axis.VanChartAxis; |
||||||
|
import com.fr.plugin.chart.attr.plot.VanChartPlot; |
||||||
|
import com.fr.plugin.chart.attr.plot.VanChartRectanglePlot; |
||||||
|
import com.fr.plugin.chart.base.AttrLabel; |
||||||
|
import com.fr.plugin.chart.base.AttrLabelDetail; |
||||||
|
import com.fr.plugin.chart.custom.type.CustomPlotType; |
||||||
|
import com.fr.plugin.chart.gauge.VanChartGaugePlot; |
||||||
|
import com.fr.plugin.chart.map.VanChartMapPlot; |
||||||
|
import com.fr.plugin.chart.type.GaugeStyle; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author shine |
||||||
|
* @version 10.0 |
||||||
|
* Created by shine on 2021/10/22 |
||||||
|
* vanchart的抽出来,因为主体代码 新增y轴 组合图新增图表都要用 |
||||||
|
*/ |
||||||
|
public class DefaultStyleHelper4Van { |
||||||
|
|
||||||
|
public static void dealVanPlot4Custom(VanChartPlot plot, CustomPlotType customPlotType) { |
||||||
|
if (!ChartEditContext.duchampMode()) { |
||||||
|
return; |
||||||
|
} |
||||||
|
dealVanPlotCommonAttr(plot); |
||||||
|
switch (customPlotType) { |
||||||
|
case PIE: |
||||||
|
case DIFFERENT_PIE: |
||||||
|
case SAME_PIE: |
||||||
|
dealPie(plot); |
||||||
|
break; |
||||||
|
case SLOT: |
||||||
|
case POINTER_360: |
||||||
|
case POINTER_180: |
||||||
|
case CUVETTE: |
||||||
|
case RING: |
||||||
|
dealGauge(plot); |
||||||
|
break; |
||||||
|
case COLUMN: |
||||||
|
case LINE: |
||||||
|
case AREA: |
||||||
|
case BUBBLE: |
||||||
|
case RADAR: |
||||||
|
case STACK_RADAR: |
||||||
|
case SCATTER: |
||||||
|
default: |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public static VanChartAxis dealAxisDefault(VanChartAxis axis) { |
||||||
|
if (!ChartEditContext.duchampMode()) { |
||||||
|
return axis; |
||||||
|
} |
||||||
|
axis.getTitle().getTextAttr().setFRFont(DefaultStyleConstants.AXIS_TITLE); |
||||||
|
axis.getTextAttr().setFRFont(DefaultStyleConstants.AXIS_LABEL); |
||||||
|
axis.setAxisColor(DefaultStyleConstants.AXIS_LINE); |
||||||
|
axis.setMainGridColor(DefaultStyleConstants.GRID_LINE); |
||||||
|
return axis; |
||||||
|
} |
||||||
|
|
||||||
|
public static void dealAxisAlert(VanChartAlertValue vanChartAlertValue) { |
||||||
|
if (!ChartEditContext.duchampMode()) { |
||||||
|
return; |
||||||
|
} |
||||||
|
vanChartAlertValue.setAlertFont(DefaultStyleConstants.ALERT_FONT); |
||||||
|
} |
||||||
|
|
||||||
|
static void dealVanPlotCommonAttr(Plot plot) { |
||||||
|
if (!ChartEditContext.duchampMode()) { |
||||||
|
return; |
||||||
|
} |
||||||
|
if (plot instanceof VanChartPlot) { |
||||||
|
VanChartPlot vanChartPlot = (VanChartPlot) plot; |
||||||
|
|
||||||
|
ColorFillStyle colorFillStyle = new ColorFillStyle(); |
||||||
|
colorFillStyle.setColorStyle(ChartConstants.COLOR_ACC); |
||||||
|
colorFillStyle.setFillStyleName(DefaultStyleConstants.COLORS); |
||||||
|
AttrFillStyle plotFillStyle = vanChartPlot.getPlotFillStyle(); |
||||||
|
if (plotFillStyle == null) { |
||||||
|
plotFillStyle = new AttrFillStyle(); |
||||||
|
vanChartPlot.setPlotFillStyle(plotFillStyle); |
||||||
|
} |
||||||
|
plotFillStyle.setColorFillStyle(colorFillStyle); |
||||||
|
|
||||||
|
if (vanChartPlot.getLegend() != null) { |
||||||
|
vanChartPlot.getLegend().setFRFont(DefaultStyleConstants.LEGEND); |
||||||
|
} |
||||||
|
|
||||||
|
if (vanChartPlot instanceof VanChartRectanglePlot) { |
||||||
|
VanChartRectanglePlot vanChartRectanglePlot = (VanChartRectanglePlot) vanChartPlot; |
||||||
|
|
||||||
|
for (VanChartAxis axis : vanChartRectanglePlot.getXAxisList()) { |
||||||
|
dealAxisDefault(axis); |
||||||
|
} |
||||||
|
for (VanChartAxis axis : vanChartRectanglePlot.getYAxisList()) { |
||||||
|
dealAxisDefault(axis); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
dealBorder(vanChartPlot); |
||||||
|
|
||||||
|
DataSheet dataSheet = vanChartPlot.getDataSheet(); |
||||||
|
dataSheet.getTextAttr().setFRFont(DefaultStyleConstants.DATA_SHEET); |
||||||
|
dataSheet.setBorderColor(DefaultStyleConstants.DATA_SHEET_BORDER); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private static void dealBorder(VanChartPlot vanChartPlot) { |
||||||
|
ConditionAttr defaultAttr = vanChartPlot.getConditionCollection().getDefaultAttr(); |
||||||
|
AttrBorder attrBorder = defaultAttr.getExisted(AttrBorder.class); |
||||||
|
if (attrBorder != null) { |
||||||
|
attrBorder.setBorderColor(DefaultStyleConstants.BORDER); |
||||||
|
attrBorder.setBorderStyle(defaultBorderWidth(vanChartPlot)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private static int defaultBorderWidth(VanChartPlot vanChartPlot) { |
||||||
|
//pie multipie treemap map drillmap heatmap
|
||||||
|
if (vanChartPlot instanceof PiePlot4VanChart |
||||||
|
|| vanChartPlot instanceof VanChartMapPlot) { |
||||||
|
return DefaultStyleConstants.SPECIAL_BORDER_WIDTH; |
||||||
|
} |
||||||
|
return DefaultStyleConstants.BORDER_WIDTH; |
||||||
|
} |
||||||
|
|
||||||
|
static void dealPie(Plot plot) { |
||||||
|
if (plot instanceof PiePlot4VanChart) { |
||||||
|
ConditionAttr defaultAttr = plot.getConditionCollection().getDefaultAttr(); |
||||||
|
AttrLabel attrLabel = defaultAttr.getExisted(AttrLabel.class); |
||||||
|
if (attrLabel == null) { |
||||||
|
attrLabel = ((PiePlot4VanChart) plot).getDefaultAttrLabel(); |
||||||
|
defaultAttr.addDataSeriesCondition(attrLabel); |
||||||
|
} |
||||||
|
attrLabel.getSecondLabelDetail().getTextAttr().setFRFont(DefaultStyleConstants.PIE_CATEGORY_LABEL); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
static void dealGauge(Plot param) { |
||||||
|
if (!(param instanceof VanChartGaugePlot)) { |
||||||
|
return; |
||||||
|
} |
||||||
|
VanChartGaugePlot plot = (VanChartGaugePlot) param; |
||||||
|
plot.getGaugeDetailStyle().setPaneBackgroundColor(plot.getGaugeStyle() == GaugeStyle.RING ? DefaultStyleConstants.GAUGE_PANE_BACK_COLOR_4_RING : DefaultStyleConstants.GAUGE_PANE_BACK_COLOR); |
||||||
|
plot.getGaugeDetailStyle().setSlotBackgroundColor(DefaultStyleConstants.GAUGE_SLOT_BACKGROUND_COLOR); |
||||||
|
plot.getGaugeDetailStyle().setHingeColor(DefaultStyleConstants.GAUGE_HINGE); |
||||||
|
|
||||||
|
ConditionAttr defaultAttr = plot.getConditionCollection().getDefaultAttr(); |
||||||
|
AttrLabel attrLabel = defaultAttr.getExisted(AttrLabel.class); |
||||||
|
if (attrLabel != null) { |
||||||
|
AttrLabelDetail detail = attrLabel.getAttrLabelDetail(); |
||||||
|
AttrLabelDetail valueDetail = attrLabel.getGaugeValueLabelDetail(); |
||||||
|
|
||||||
|
switch (plot.getGaugeStyle()) { |
||||||
|
case POINTER: |
||||||
|
case POINTER_SEMI: |
||||||
|
detail.getContent().getCategoryFormat().setEnable(false); |
||||||
|
detail.getTextAttr().setFRFont(DefaultStyleConstants.POINTER_CATE_LABEL_FONT); |
||||||
|
valueDetail.getTextAttr().setFRFont(DefaultStyleConstants.POINTER_VALUE_LABEL_FONT); |
||||||
|
break; |
||||||
|
case RING: |
||||||
|
case SLOT: |
||||||
|
valueDetail.getTextAttr().setFRFont(DefaultStyleConstants.RING_VALUE_LABEL_FONT); |
||||||
|
break; |
||||||
|
case THERMOMETER: |
||||||
|
detail.getTextAttr().setFRFont(DefaultStyleConstants.THERMOMETER_LABEL_FONT); |
||||||
|
valueDetail.getTextAttr().setFRFont(DefaultStyleConstants.THERMOMETER_LABEL_FONT); |
||||||
|
plot.getGaugeAxis().getTextAttr().setFRFont(DefaultStyleConstants.THERMOMETER_AXIS_LABEL); |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,47 @@ |
|||||||
|
package com.fr.design.designer.ui; |
||||||
|
|
||||||
|
import com.fr.design.designer.creator.XCreator; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Iterator; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 把弹窗统一管理起来 防止出现异常情况下游离的弹窗 |
||||||
|
* |
||||||
|
* @author hades |
||||||
|
* @version 10.0 |
||||||
|
* Created by hades on 2021/11/02 |
||||||
|
*/ |
||||||
|
public class PopupDialogContext { |
||||||
|
|
||||||
|
private static List<SelectedPopupDialog> dialogs = new ArrayList<>(); |
||||||
|
|
||||||
|
public static void add(SelectedPopupDialog selectedPopupDialog) { |
||||||
|
if (dialogs.contains(selectedPopupDialog)) { |
||||||
|
return; |
||||||
|
} |
||||||
|
dialogs.add(selectedPopupDialog); |
||||||
|
} |
||||||
|
|
||||||
|
public static void remove(SelectedPopupDialog selectedPopupDialog) { |
||||||
|
dialogs.remove(selectedPopupDialog); |
||||||
|
} |
||||||
|
|
||||||
|
public static void checkSelectedPop(XCreator creator) { |
||||||
|
Iterator<SelectedPopupDialog> iterator = dialogs.iterator(); |
||||||
|
List<SelectedPopupDialog> removedDialog = new ArrayList<>(); |
||||||
|
while (iterator.hasNext()) { |
||||||
|
SelectedPopupDialog dialog = iterator.next(); |
||||||
|
if (dialog.isVisible() && creator != dialog.getCreator()) { |
||||||
|
iterator.remove(); |
||||||
|
removedDialog.add(dialog); |
||||||
|
} |
||||||
|
} |
||||||
|
for (SelectedPopupDialog dialog : removedDialog) { |
||||||
|
dialog.setVisible(false); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue