Browse Source
Merge in DESIGN/design from ~QINGHUI.LIU/design:feature/10.0 to feature/10.0 * commit '97517d0b073588207e3c7da4170a34c0ac86836a': 地图富文本面板适配 完善词云初始化富文本参数 词云富文本新增字段适配 散点图富文本新增字段适配 富文本编辑器增加字段名的类属性 调整富文本参数更新的位置 补充新增字段富文本中的交互 完善新增字段更新 获取数据集字段 完善界面 调整代码结构 处理新的富文本界面交互 开发富文本字段界面research/11.0
ju|剧浩宇
4 years ago
23 changed files with 1447 additions and 368 deletions
@ -1,191 +0,0 @@ |
|||||||
package com.fr.van.chart.designer.component; |
|
||||||
|
|
||||||
import com.fr.concurrent.NamedThreadFactory; |
|
||||||
import com.fr.design.DesignerEnvManager; |
|
||||||
import com.fr.design.ui.ModernUIPane; |
|
||||||
import com.fr.general.IOUtils; |
|
||||||
import com.fr.log.FineLoggerFactory; |
|
||||||
import com.fr.plugin.chart.base.AttrTooltipRichText; |
|
||||||
import com.fr.plugin.chart.type.TextAlign; |
|
||||||
import com.fr.stable.StringUtils; |
|
||||||
import com.teamdev.jxbrowser.chromium.Browser; |
|
||||||
import com.teamdev.jxbrowser.chromium.JSValue; |
|
||||||
import com.teamdev.jxbrowser.chromium.events.ScriptContextAdapter; |
|
||||||
import com.teamdev.jxbrowser.chromium.events.ScriptContextEvent; |
|
||||||
|
|
||||||
import java.util.Locale; |
|
||||||
import java.util.Map; |
|
||||||
import java.util.concurrent.ExecutorService; |
|
||||||
import java.util.concurrent.Executors; |
|
||||||
|
|
||||||
public class VanChartRichEditorPane { |
|
||||||
|
|
||||||
private static final String namespace = "Pool"; |
|
||||||
private static final String variable = "data"; |
|
||||||
private static final String richEditorPath = "/com/fr/design/editor/rich_editor.html"; |
|
||||||
private static final String expression = "dispatch()"; |
|
||||||
|
|
||||||
private static ModernUIPane<RichEditorModel> richEditorPane; |
|
||||||
private static Browser browser; |
|
||||||
|
|
||||||
public static void initRichEditorPane() { |
|
||||||
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor(new NamedThreadFactory("VanChartRichEditor")); |
|
||||||
|
|
||||||
try { |
|
||||||
singleThreadExecutor.submit(new Runnable() { |
|
||||||
@Override |
|
||||||
public void run() { |
|
||||||
try { |
|
||||||
richEditorPane = initPane(new RichEditorModel()); |
|
||||||
} catch (Exception e) { |
|
||||||
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
|
||||||
} |
|
||||||
} |
|
||||||
}); |
|
||||||
} finally { |
|
||||||
singleThreadExecutor.shutdown(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public static ModernUIPane<RichEditorModel> createRichEditorPane(AttrTooltipRichText richEditor) { |
|
||||||
RichEditorModel model = getRichEditorModel(richEditor); |
|
||||||
|
|
||||||
if (richEditorPane == null) { |
|
||||||
richEditorPane = initPane(model); |
|
||||||
} else if (browser != null) { |
|
||||||
updatePane(browser, model); |
|
||||||
} |
|
||||||
|
|
||||||
return richEditorPane; |
|
||||||
} |
|
||||||
|
|
||||||
public static ModernUIPane<RichEditorModel> initPane(RichEditorModel model) { |
|
||||||
return new ModernUIPane.Builder<RichEditorModel>() |
|
||||||
.prepare(new ScriptContextAdapter() { |
|
||||||
public void onScriptContextCreated(ScriptContextEvent event) { |
|
||||||
browser = event.getBrowser(); |
|
||||||
browser.getCacheStorage().clearCache(); |
|
||||||
|
|
||||||
browser.executeJavaScript(IOUtils.readResourceAsString("/com/fr/web/ui/fineui.min.js")); |
|
||||||
browser.executeJavaScript(IOUtils.readResourceAsString("/com/fr/design/editor/script/i18n.js")); |
|
||||||
browser.executeJavaScript(generateTransformI18nJS()); |
|
||||||
browser.executeJavaScript(IOUtils.readResourceAsString("/com/fr/web/ui/materials.min.js")); |
|
||||||
|
|
||||||
JSValue ns = browser.executeJavaScriptAndReturnValue("window." + namespace); |
|
||||||
ns.asObject().setProperty(variable, model); |
|
||||||
} |
|
||||||
}) |
|
||||||
.withEMB(richEditorPath) |
|
||||||
.namespace(namespace).build(); |
|
||||||
} |
|
||||||
|
|
||||||
public static void updatePane(Browser browser, RichEditorModel model) { |
|
||||||
JSValue ns = browser.executeJavaScriptAndReturnValue("window." + namespace); |
|
||||||
ns.asObject().setProperty(variable, model); |
|
||||||
browser.executeJavaScript("window." + namespace + "." + expression); |
|
||||||
} |
|
||||||
|
|
||||||
public static RichEditorModel getRichEditorModel(AttrTooltipRichText richText) { |
|
||||||
Map<String, String> paramsMap = richText.getParams(); |
|
||||||
StringBuilder paramsStr = new StringBuilder(StringUtils.EMPTY); |
|
||||||
|
|
||||||
if (paramsMap != null) { |
|
||||||
for (Map.Entry<String, String> entry : paramsMap.entrySet()) { |
|
||||||
paramsStr.append(entry.getKey()).append(":").append(entry.getValue()); |
|
||||||
paramsStr.append("-"); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
int len = paramsStr.length(); |
|
||||||
|
|
||||||
if (len > 0) { |
|
||||||
paramsStr.deleteCharAt(len - 1); |
|
||||||
} |
|
||||||
|
|
||||||
String content = richText.getContent(); |
|
||||||
String initParams = StringUtils.EMPTY; |
|
||||||
String align = StringUtils.EMPTY; |
|
||||||
|
|
||||||
if (content.contains("data-id") && !content.contains("class")) { |
|
||||||
initParams = richText.getInitParamsContent(); |
|
||||||
|
|
||||||
String left = TextAlign.LEFT.getAlign(); |
|
||||||
String center = TextAlign.CENTER.getAlign(); |
|
||||||
|
|
||||||
align = content.contains(left) ? left : center; |
|
||||||
} |
|
||||||
|
|
||||||
return new RichEditorModel(content, richText.isAuto(), paramsStr.toString(), initParams, align); |
|
||||||
} |
|
||||||
|
|
||||||
public static String generateTransformI18nJS() { |
|
||||||
String language = "zh_CN"; |
|
||||||
|
|
||||||
Locale locale = DesignerEnvManager.getEnvManager().getLanguage(); |
|
||||||
|
|
||||||
if (locale != null) { |
|
||||||
language = locale.toString(); |
|
||||||
} |
|
||||||
|
|
||||||
return "!(function () { window.transformI18n && window.transformI18n('" + language + "' || 'zh_CN'); }());"; |
|
||||||
} |
|
||||||
|
|
||||||
public static class RichEditorModel { |
|
||||||
private String content = StringUtils.EMPTY; |
|
||||||
private boolean auto = true; |
|
||||||
private String params = StringUtils.EMPTY; |
|
||||||
private String initParams = StringUtils.EMPTY; |
|
||||||
private String align = TextAlign.LEFT.getAlign(); |
|
||||||
|
|
||||||
public RichEditorModel() { |
|
||||||
} |
|
||||||
|
|
||||||
public RichEditorModel(String content, boolean auto, String params, String initParams, String align) { |
|
||||||
this.content = content; |
|
||||||
this.auto = auto; |
|
||||||
this.params = params; |
|
||||||
this.initParams = initParams; |
|
||||||
this.align = align; |
|
||||||
} |
|
||||||
|
|
||||||
public String getContent() { |
|
||||||
return content; |
|
||||||
} |
|
||||||
|
|
||||||
public void setContent(String content) { |
|
||||||
this.content = content; |
|
||||||
} |
|
||||||
|
|
||||||
public boolean isAuto() { |
|
||||||
return auto; |
|
||||||
} |
|
||||||
|
|
||||||
public void setAuto(boolean auto) { |
|
||||||
this.auto = auto; |
|
||||||
} |
|
||||||
|
|
||||||
public String getParams() { |
|
||||||
return params; |
|
||||||
} |
|
||||||
|
|
||||||
public void setParams(String params) { |
|
||||||
this.params = params; |
|
||||||
} |
|
||||||
|
|
||||||
public String getInitParams() { |
|
||||||
return initParams; |
|
||||||
} |
|
||||||
|
|
||||||
public void setInitParams(String initParams) { |
|
||||||
this.initParams = initParams; |
|
||||||
} |
|
||||||
|
|
||||||
public String getAlign() { |
|
||||||
return align; |
|
||||||
} |
|
||||||
|
|
||||||
public void setAlign(String align) { |
|
||||||
this.align = align; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -0,0 +1,79 @@ |
|||||||
|
package com.fr.van.chart.designer.component.richText; |
||||||
|
|
||||||
|
import com.fr.data.util.function.AbstractDataFunction; |
||||||
|
import com.fr.design.event.UIObserverListener; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.gui.style.FormatPane; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.layout.TableLayout; |
||||||
|
import com.fr.design.mainframe.chart.gui.data.CalculateComboBox; |
||||||
|
import com.fr.van.chart.designer.TableLayout4VanChartHelper; |
||||||
|
import com.fr.van.chart.designer.component.format.FormatPaneWithOutFont; |
||||||
|
|
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.SwingConstants; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.event.ActionListener; |
||||||
|
import java.text.Format; |
||||||
|
|
||||||
|
public class VanChartFieldAttrPane extends JPanel { |
||||||
|
|
||||||
|
private FormatPane fieldFormatPane; |
||||||
|
private CalculateComboBox fieldDataFunction; |
||||||
|
|
||||||
|
private JPanel fieldFunctionPane; |
||||||
|
|
||||||
|
public VanChartFieldAttrPane() { |
||||||
|
initComponents(); |
||||||
|
|
||||||
|
this.setLayout(new BorderLayout()); |
||||||
|
this.add(fieldFormatPane, BorderLayout.NORTH); |
||||||
|
this.add(fieldFunctionPane, BorderLayout.CENTER); |
||||||
|
this.setBorder(BorderFactory.createEmptyBorder(0, 30, 0, 0)); |
||||||
|
} |
||||||
|
|
||||||
|
private void initComponents() { |
||||||
|
double p = TableLayout.PREFERRED; |
||||||
|
double d = TableLayout4VanChartHelper.DESCRIPTION_AREA_WIDTH; |
||||||
|
double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH; |
||||||
|
|
||||||
|
fieldFormatPane = new FormatPaneWithOutFont() { |
||||||
|
protected JPanel createContentPane(Component[][] components) { |
||||||
|
return TableLayout4VanChartHelper.createGapTableLayoutPane(components, new double[]{p, p, p}, new double[]{d, e}); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
fieldDataFunction = new CalculateComboBox(); |
||||||
|
|
||||||
|
Component[][] components = new Component[][]{ |
||||||
|
new Component[]{null, null}, |
||||||
|
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Summary_Method"), SwingConstants.LEFT), fieldDataFunction} |
||||||
|
}; |
||||||
|
|
||||||
|
fieldFunctionPane = TableLayout4VanChartHelper.createGapTableLayoutPane(components, new double[]{p, p}, new double[]{d, e}); |
||||||
|
} |
||||||
|
|
||||||
|
public void registerFunctionListener(ActionListener listener) { |
||||||
|
fieldDataFunction.addActionListener(listener); |
||||||
|
} |
||||||
|
|
||||||
|
public void registerChangeListener(UIObserverListener listener) { |
||||||
|
fieldFormatPane.registerChangeListener(listener); |
||||||
|
} |
||||||
|
|
||||||
|
public void populate(Format format, AbstractDataFunction dataFunction, boolean showDataFunction) { |
||||||
|
fieldFormatPane.populateBean(format); |
||||||
|
fieldDataFunction.populateBean(dataFunction); |
||||||
|
fieldFunctionPane.setVisible(showDataFunction); |
||||||
|
} |
||||||
|
|
||||||
|
public Format updateFormat() { |
||||||
|
return fieldFormatPane.update(); |
||||||
|
} |
||||||
|
|
||||||
|
public AbstractDataFunction updateDataFunction() { |
||||||
|
return fieldDataFunction.updateBean(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,141 @@ |
|||||||
|
package com.fr.van.chart.designer.component.richText; |
||||||
|
|
||||||
|
import com.fr.base.BaseUtils; |
||||||
|
import com.fr.data.util.function.DataFunction; |
||||||
|
import com.fr.data.util.function.NoneFunction; |
||||||
|
import com.fr.design.gui.ibutton.UIButton; |
||||||
|
import com.fr.design.gui.ibutton.UIToggleButton; |
||||||
|
import com.fr.design.layout.TableLayout; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.plugin.chart.base.format.AttrTooltipFormat; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.van.chart.designer.TableLayout4VanChartHelper; |
||||||
|
|
||||||
|
import javax.swing.Icon; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.event.MouseAdapter; |
||||||
|
import java.awt.event.MouseEvent; |
||||||
|
import java.awt.event.MouseListener; |
||||||
|
import java.text.Format; |
||||||
|
|
||||||
|
public class VanChartFieldButton extends JPanel { |
||||||
|
|
||||||
|
private static final Icon ADD_ICON = BaseUtils.readIcon("/com/fr/base/images/cell/control/add.png"); |
||||||
|
|
||||||
|
private static final int W = 200; |
||||||
|
private static final int H = 28; |
||||||
|
|
||||||
|
private final String fieldName; |
||||||
|
private final String fieldId; |
||||||
|
|
||||||
|
private final AttrTooltipFormat tooltipFormat; |
||||||
|
private final boolean showDataFunction; |
||||||
|
|
||||||
|
private UIToggleButton fieldButton; |
||||||
|
private UIButton addButton; |
||||||
|
|
||||||
|
private DataFunction dataFunction = new NoneFunction(); |
||||||
|
|
||||||
|
public VanChartFieldButton(String fieldName, AttrTooltipFormat format, boolean showDataFunction, VanChartFieldListener listener) { |
||||||
|
this.fieldName = fieldName; |
||||||
|
this.tooltipFormat = format; |
||||||
|
this.showDataFunction = showDataFunction; |
||||||
|
|
||||||
|
this.fieldId = format == null ? StringUtils.EMPTY : format.getFormatJSONKey(); |
||||||
|
|
||||||
|
initComponents(fieldName, listener); |
||||||
|
|
||||||
|
this.setLayout(new BorderLayout()); |
||||||
|
this.add(getContentPane(), BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
public String getFieldName() { |
||||||
|
return fieldName; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isEnable() { |
||||||
|
return this.tooltipFormat.isEnable(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setEnable(boolean enable) { |
||||||
|
this.tooltipFormat.setEnable(enable); |
||||||
|
} |
||||||
|
|
||||||
|
public Format getFormat() { |
||||||
|
return tooltipFormat.getFormat(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setFormat(Format format) { |
||||||
|
this.tooltipFormat.setFormat(format); |
||||||
|
} |
||||||
|
|
||||||
|
public DataFunction getDataFunction() { |
||||||
|
return dataFunction; |
||||||
|
} |
||||||
|
|
||||||
|
public void setDataFunction(DataFunction dataFunction) { |
||||||
|
this.dataFunction = dataFunction; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isShowDataFunction() { |
||||||
|
return showDataFunction; |
||||||
|
} |
||||||
|
|
||||||
|
public String getFormatJs() { |
||||||
|
return this.tooltipFormat.getJs(); |
||||||
|
} |
||||||
|
|
||||||
|
private void initComponents(String fieldName, VanChartFieldListener listener) { |
||||||
|
fieldButton = new UIToggleButton(fieldName) { |
||||||
|
|
||||||
|
protected MouseListener getMouseListener() { |
||||||
|
|
||||||
|
return new MouseAdapter() { |
||||||
|
public void mousePressed(MouseEvent e) { |
||||||
|
setSelected(true); |
||||||
|
|
||||||
|
listener.refreshSelectedPane(fieldName); |
||||||
|
listener.setGlobalName(fieldName); |
||||||
|
listener.populateFieldFormatPane(); |
||||||
|
} |
||||||
|
}; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
addButton = new UIButton(ADD_ICON); |
||||||
|
|
||||||
|
addButton.addMouseListener(new MouseAdapter() { |
||||||
|
|
||||||
|
public void mousePressed(MouseEvent e) { |
||||||
|
super.mousePressed(e); |
||||||
|
|
||||||
|
listener.addSelectedField(fieldName, fieldId); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel getContentPane() { |
||||||
|
Component[][] components = new Component[][]{ |
||||||
|
new Component[]{fieldButton, addButton} |
||||||
|
}; |
||||||
|
|
||||||
|
double p = TableLayout.PREFERRED; |
||||||
|
double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH; |
||||||
|
double d = TableLayout4VanChartHelper.DESCRIPTION_AREA_WIDTH; |
||||||
|
|
||||||
|
double[] rowSize = {p}; |
||||||
|
double[] columnSize = {e, d}; |
||||||
|
|
||||||
|
JPanel content = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, 5, 0); |
||||||
|
content.setPreferredSize(new Dimension(W, H)); |
||||||
|
|
||||||
|
return content; |
||||||
|
} |
||||||
|
|
||||||
|
public void setSelectedState(boolean selected) { |
||||||
|
fieldButton.setSelected(selected); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,382 @@ |
|||||||
|
package com.fr.van.chart.designer.component.richText; |
||||||
|
|
||||||
|
import com.fr.data.util.function.AbstractDataFunction; |
||||||
|
import com.fr.data.util.function.DataFunction; |
||||||
|
import com.fr.design.event.UIObserverListener; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.ui.ModernUIPane; |
||||||
|
import com.fr.general.ComparatorUtils; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.chart.base.AttrTooltipContent; |
||||||
|
import com.fr.plugin.chart.base.TableFieldCollection; |
||||||
|
import com.fr.plugin.chart.base.TableFieldDefinition; |
||||||
|
import com.fr.plugin.chart.base.format.AttrTooltipCategoryFormat; |
||||||
|
import com.fr.plugin.chart.base.format.AttrTooltipFieldFormat; |
||||||
|
import com.fr.plugin.chart.base.format.AttrTooltipFormat; |
||||||
|
import com.fr.plugin.chart.base.format.AttrTooltipPercentFormat; |
||||||
|
import com.fr.plugin.chart.base.format.AttrTooltipSeriesFormat; |
||||||
|
import com.fr.plugin.chart.base.format.AttrTooltipValueFormat; |
||||||
|
import com.fr.van.chart.designer.TableLayout4VanChartHelper; |
||||||
|
|
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.GridLayout; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import java.awt.event.ActionListener; |
||||||
|
import java.text.Format; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
public class VanChartFieldListPane extends JPanel { |
||||||
|
|
||||||
|
private static final int FIELD_ADD_W = 400; |
||||||
|
private static final int FIELD_ADD_H = 28; |
||||||
|
|
||||||
|
private VanChartFieldButton categoryNameButton; |
||||||
|
private VanChartFieldButton seriesNameButton; |
||||||
|
private VanChartFieldButton valueButton; |
||||||
|
private VanChartFieldButton percentButton; |
||||||
|
|
||||||
|
private VanChartFieldAttrPane fieldAttrPane; |
||||||
|
private ModernUIPane<VanChartRichEditorModel> richEditorPane; |
||||||
|
private List<String> tableFieldNameList; |
||||||
|
private List<VanChartFieldButton> tableFieldButtonList = new ArrayList<>(); |
||||||
|
private TableFieldCollection tableFieldCollection = new TableFieldCollection(); |
||||||
|
|
||||||
|
private VanChartFieldListener fieldListener; |
||||||
|
|
||||||
|
public VanChartFieldListPane(VanChartFieldAttrPane fieldAttrPane, ModernUIPane<VanChartRichEditorModel> richEditorPane) { |
||||||
|
|
||||||
|
List<String> richEditorFieldNames = VanChartRichEditorPane.getFieldNames(); |
||||||
|
|
||||||
|
this.tableFieldNameList = richEditorFieldNames == null ? new ArrayList<>() : richEditorFieldNames; |
||||||
|
|
||||||
|
this.fieldAttrPane = fieldAttrPane; |
||||||
|
this.richEditorPane = richEditorPane; |
||||||
|
|
||||||
|
initFieldListListener(); |
||||||
|
initDefaultFieldButton(); |
||||||
|
|
||||||
|
registerAttrListener(); |
||||||
|
|
||||||
|
this.setLayout(new BorderLayout()); |
||||||
|
|
||||||
|
this.add(createDefaultFieldPane(), BorderLayout.CENTER); |
||||||
|
this.add(createTableFieldPane(), BorderLayout.SOUTH); |
||||||
|
} |
||||||
|
|
||||||
|
public VanChartFieldButton getCategoryNameButton() { |
||||||
|
return categoryNameButton; |
||||||
|
} |
||||||
|
|
||||||
|
public void setCategoryNameButton(VanChartFieldButton categoryNameButton) { |
||||||
|
this.categoryNameButton = categoryNameButton; |
||||||
|
} |
||||||
|
|
||||||
|
public VanChartFieldButton getSeriesNameButton() { |
||||||
|
return seriesNameButton; |
||||||
|
} |
||||||
|
|
||||||
|
public void setSeriesNameButton(VanChartFieldButton seriesNameButton) { |
||||||
|
this.seriesNameButton = seriesNameButton; |
||||||
|
} |
||||||
|
|
||||||
|
public VanChartFieldButton getValueButton() { |
||||||
|
return valueButton; |
||||||
|
} |
||||||
|
|
||||||
|
public void setValueButton(VanChartFieldButton valueButton) { |
||||||
|
this.valueButton = valueButton; |
||||||
|
} |
||||||
|
|
||||||
|
public VanChartFieldButton getPercentButton() { |
||||||
|
return percentButton; |
||||||
|
} |
||||||
|
|
||||||
|
public void setPercentButton(VanChartFieldButton percentButton) { |
||||||
|
this.percentButton = percentButton; |
||||||
|
} |
||||||
|
|
||||||
|
public VanChartFieldListener getFieldListener() { |
||||||
|
return fieldListener; |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createDefaultFieldPane() { |
||||||
|
JPanel fieldPane = new JPanel(); |
||||||
|
|
||||||
|
fieldPane.setLayout(new GridLayout(0, 1, 1, 0)); |
||||||
|
|
||||||
|
addDefaultFieldButton(fieldPane); |
||||||
|
|
||||||
|
fieldPane.setPreferredSize(new Dimension(FIELD_ADD_W, getDefaultFieldButtonList().size() * FIELD_ADD_H)); |
||||||
|
fieldPane.setBorder(BorderFactory.createEmptyBorder(10, 5, 0, 0)); |
||||||
|
|
||||||
|
return fieldPane; |
||||||
|
} |
||||||
|
|
||||||
|
protected void initDefaultFieldButton() { |
||||||
|
categoryNameButton = new VanChartFieldButton(Toolkit.i18nText("Fine-Design_Chart_Category_Use_Name"), |
||||||
|
new AttrTooltipCategoryFormat(), false, fieldListener); |
||||||
|
|
||||||
|
seriesNameButton = new VanChartFieldButton(Toolkit.i18nText("Fine-Design_Chart_Series_Name"), |
||||||
|
new AttrTooltipSeriesFormat(), false, fieldListener); |
||||||
|
|
||||||
|
valueButton = new VanChartFieldButton(Toolkit.i18nText("Fine-Design_Chart_Use_Value"), |
||||||
|
new AttrTooltipValueFormat(), false, fieldListener); |
||||||
|
|
||||||
|
percentButton = new VanChartFieldButton(Toolkit.i18nText("Fine-Design_Chart_Use_Percent"), |
||||||
|
new AttrTooltipPercentFormat(), false, fieldListener); |
||||||
|
} |
||||||
|
|
||||||
|
protected void addDefaultFieldButton(JPanel fieldPane) { |
||||||
|
fieldPane.add(categoryNameButton); |
||||||
|
fieldPane.add(seriesNameButton); |
||||||
|
fieldPane.add(valueButton); |
||||||
|
fieldPane.add(percentButton); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createTableFieldPane() { |
||||||
|
if (tableFieldNameList == null || tableFieldNameList.isEmpty()) { |
||||||
|
return new JPanel(); |
||||||
|
} |
||||||
|
|
||||||
|
JPanel tableField = new JPanel(); |
||||||
|
|
||||||
|
tableField.setLayout(new GridLayout(0, 1, 1, 0)); |
||||||
|
|
||||||
|
for (String name : tableFieldNameList) { |
||||||
|
VanChartFieldButton fieldButton = new VanChartFieldButton(name, new AttrTooltipFieldFormat(name), true, fieldListener); |
||||||
|
|
||||||
|
tableField.add(fieldButton); |
||||||
|
tableFieldButtonList.add(fieldButton); |
||||||
|
} |
||||||
|
|
||||||
|
tableField.setPreferredSize(new Dimension(FIELD_ADD_W, tableFieldNameList.size() * FIELD_ADD_H)); |
||||||
|
|
||||||
|
return TableLayout4VanChartHelper.createExpandablePaneWithTitleTopGap("数据集字段", tableField); |
||||||
|
} |
||||||
|
|
||||||
|
protected List<VanChartFieldButton> getDefaultFieldButtonList() { |
||||||
|
List<VanChartFieldButton> defaultFieldButtonList = new ArrayList<>(); |
||||||
|
|
||||||
|
defaultFieldButtonList.add(categoryNameButton); |
||||||
|
defaultFieldButtonList.add(seriesNameButton); |
||||||
|
defaultFieldButtonList.add(valueButton); |
||||||
|
defaultFieldButtonList.add(percentButton); |
||||||
|
|
||||||
|
return defaultFieldButtonList; |
||||||
|
} |
||||||
|
|
||||||
|
private void initFieldListListener() { |
||||||
|
|
||||||
|
fieldListener = new VanChartFieldListener() { |
||||||
|
|
||||||
|
private String fieldName; |
||||||
|
|
||||||
|
public void setGlobalName(String fieldName) { |
||||||
|
this.fieldName = fieldName; |
||||||
|
} |
||||||
|
|
||||||
|
public String getGlobalName() { |
||||||
|
return this.fieldName; |
||||||
|
} |
||||||
|
|
||||||
|
public VanChartFieldButton getSelectedField() { |
||||||
|
List<VanChartFieldButton> defaultFieldButtonList = getDefaultFieldButtonList(); |
||||||
|
|
||||||
|
for (VanChartFieldButton fieldButton : defaultFieldButtonList) { |
||||||
|
if (ComparatorUtils.equals(fieldButton.getFieldName(), this.fieldName)) { |
||||||
|
return fieldButton; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
for (VanChartFieldButton fieldButton : tableFieldButtonList) { |
||||||
|
if (ComparatorUtils.equals(fieldButton.getFieldName(), this.fieldName)) { |
||||||
|
return fieldButton; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
public void refreshSelectedPane(String fieldName) { |
||||||
|
if (ComparatorUtils.equals(fieldName, this.fieldName)) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
List<VanChartFieldButton> defaultFieldButtonList = getDefaultFieldButtonList(); |
||||||
|
|
||||||
|
for (VanChartFieldButton fieldButton : defaultFieldButtonList) { |
||||||
|
fieldButton.setSelectedState(ComparatorUtils.equals(fieldButton.getFieldName(), fieldName)); |
||||||
|
} |
||||||
|
|
||||||
|
for (VanChartFieldButton fieldButton : tableFieldButtonList) { |
||||||
|
fieldButton.setSelectedState(ComparatorUtils.equals(fieldButton.getFieldName(), fieldName)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void addSelectedField(String fieldName, String fieldId) { |
||||||
|
VanChartRichEditorModel model = richEditorPane.update(); |
||||||
|
model.setAddition(fieldName); |
||||||
|
VanChartRichEditorPane.richEditorAddField(model); |
||||||
|
|
||||||
|
if (tableFieldNameList.contains(fieldName)) { |
||||||
|
int index = tableFieldNameList.indexOf(fieldName); |
||||||
|
|
||||||
|
VanChartFieldButton fieldButton = tableFieldButtonList.get(index); |
||||||
|
Format fieldFormat = fieldButton.getFormat(); |
||||||
|
DataFunction dataFunction = fieldButton.getDataFunction(); |
||||||
|
|
||||||
|
tableFieldCollection.addFieldDefinition(fieldName, new TableFieldDefinition(fieldName, fieldFormat, dataFunction)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void populateFieldFormatPane() { |
||||||
|
VanChartFieldButton fieldButton = this.getSelectedField(); |
||||||
|
|
||||||
|
if (fieldButton == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
Format format = fieldButton.getFormat(); |
||||||
|
AbstractDataFunction dataFunction = (AbstractDataFunction) fieldButton.getDataFunction(); |
||||||
|
boolean showDataFunction = fieldButton.isShowDataFunction(); |
||||||
|
|
||||||
|
fieldAttrPane.populate(format, dataFunction, showDataFunction); |
||||||
|
} |
||||||
|
|
||||||
|
public void updateFieldFormatPane() { |
||||||
|
VanChartFieldButton fieldButton = this.getSelectedField(); |
||||||
|
|
||||||
|
if (fieldButton == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
fieldButton.setFormat(fieldAttrPane.updateFormat()); |
||||||
|
fieldButton.setDataFunction(fieldAttrPane.updateDataFunction()); |
||||||
|
|
||||||
|
if (tableFieldNameList.contains(fieldName)) { |
||||||
|
Format fieldFormat = fieldButton.getFormat(); |
||||||
|
DataFunction dataFunction = fieldButton.getDataFunction(); |
||||||
|
|
||||||
|
tableFieldCollection.addFieldDefinition(fieldName, new TableFieldDefinition(fieldName, fieldFormat, dataFunction)); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
private void registerAttrListener() { |
||||||
|
|
||||||
|
fieldAttrPane.registerFunctionListener(new ActionListener() { |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
fieldListener.updateFieldFormatPane(); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
fieldAttrPane.registerChangeListener(new UIObserverListener() { |
||||||
|
public void doChange() { |
||||||
|
fieldListener.updateFieldFormatPane(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
private void checkFieldListSelected() { |
||||||
|
List<VanChartFieldButton> defaultFieldButtonList = getDefaultFieldButtonList(); |
||||||
|
|
||||||
|
if (defaultFieldButtonList != null && defaultFieldButtonList.size() > 0) { |
||||||
|
String selected = defaultFieldButtonList.get(0).getFieldName(); |
||||||
|
|
||||||
|
fieldListener.refreshSelectedPane(selected); |
||||||
|
fieldListener.setGlobalName(selected); |
||||||
|
fieldListener.populateFieldFormatPane(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void populate(AttrTooltipContent tooltipContent) { |
||||||
|
populateDefaultField(tooltipContent); |
||||||
|
populateTableField(tooltipContent); |
||||||
|
|
||||||
|
// 初次打开富文本界面选中第一个
|
||||||
|
checkFieldListSelected(); |
||||||
|
} |
||||||
|
|
||||||
|
public void populateDefaultField(AttrTooltipContent tooltipContent) { |
||||||
|
populateButtonFormat(categoryNameButton, tooltipContent.getRichTextCategoryFormat()); |
||||||
|
populateButtonFormat(seriesNameButton, tooltipContent.getRichTextSeriesFormat()); |
||||||
|
populateButtonFormat(valueButton, tooltipContent.getRichTextValueFormat()); |
||||||
|
populateButtonFormat(percentButton, tooltipContent.getRichTextPercentFormat()); |
||||||
|
} |
||||||
|
|
||||||
|
public void populateButtonFormat(VanChartFieldButton button, AttrTooltipFormat format) { |
||||||
|
if (button == null || format == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
button.setEnable(format.isEnable()); |
||||||
|
button.setFormat(format.getFormat()); |
||||||
|
} |
||||||
|
|
||||||
|
public void populateTableField(AttrTooltipContent tooltipContent) { |
||||||
|
TableFieldCollection fieldCollection = tooltipContent.getFieldCollection(); |
||||||
|
|
||||||
|
if (fieldCollection == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
Map<String, TableFieldDefinition> fieldDefinitionGroup = fieldCollection.getFieldNameFormulaMap(); |
||||||
|
|
||||||
|
if (fieldDefinitionGroup == null || fieldDefinitionGroup.isEmpty()) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
this.tableFieldCollection = new TableFieldCollection(); |
||||||
|
|
||||||
|
for (int i = 0, len = tableFieldNameList.size(); i < len; i++) { |
||||||
|
String fieldName = tableFieldNameList.get(i); |
||||||
|
VanChartFieldButton fieldButton = tableFieldButtonList.get(i); |
||||||
|
TableFieldDefinition fieldDefinition = fieldDefinitionGroup.get(fieldName); |
||||||
|
|
||||||
|
if (fieldDefinitionGroup.containsKey(fieldName)) { |
||||||
|
Format fieldFormat = fieldDefinition.getFormat(); |
||||||
|
DataFunction dataFunction = fieldDefinition.getDataFunction(); |
||||||
|
|
||||||
|
fieldButton.setFormat(fieldFormat); |
||||||
|
fieldButton.setDataFunction(dataFunction); |
||||||
|
|
||||||
|
this.tableFieldCollection.addFieldDefinition(fieldName, new TableFieldDefinition(fieldName, fieldFormat, dataFunction)); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void update(AttrTooltipContent tooltipContent) { |
||||||
|
updateDefaultField(tooltipContent); |
||||||
|
updateTableField(tooltipContent); |
||||||
|
} |
||||||
|
|
||||||
|
public void updateDefaultField(AttrTooltipContent tooltipContent) { |
||||||
|
updateButtonFormat(categoryNameButton, tooltipContent.getRichTextCategoryFormat()); |
||||||
|
updateButtonFormat(seriesNameButton, tooltipContent.getRichTextSeriesFormat()); |
||||||
|
updateButtonFormat(valueButton, tooltipContent.getRichTextValueFormat()); |
||||||
|
updateButtonFormat(percentButton, tooltipContent.getRichTextPercentFormat()); |
||||||
|
} |
||||||
|
|
||||||
|
public void updateTableField(AttrTooltipContent tooltipContent) { |
||||||
|
try { |
||||||
|
tooltipContent.setFieldCollection(this.tableFieldCollection); |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void updateButtonFormat(VanChartFieldButton button, AttrTooltipFormat format) { |
||||||
|
if (button == null || format == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
format.setEnable(button.isEnable()); |
||||||
|
format.setFormat(button.getFormat()); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,17 @@ |
|||||||
|
package com.fr.van.chart.designer.component.richText; |
||||||
|
|
||||||
|
import com.fr.design.event.GlobalNameListener; |
||||||
|
|
||||||
|
public interface VanChartFieldListener extends GlobalNameListener { |
||||||
|
|
||||||
|
public VanChartFieldButton getSelectedField(); |
||||||
|
|
||||||
|
public void refreshSelectedPane(String fieldName); |
||||||
|
|
||||||
|
public void addSelectedField(String fieldName, String fieldId); |
||||||
|
|
||||||
|
public void populateFieldFormatPane(); |
||||||
|
|
||||||
|
public void updateFieldFormatPane(); |
||||||
|
|
||||||
|
} |
@ -0,0 +1,75 @@ |
|||||||
|
package com.fr.van.chart.designer.component.richText; |
||||||
|
|
||||||
|
import com.fr.plugin.chart.type.TextAlign; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
public class VanChartRichEditorModel { |
||||||
|
|
||||||
|
private String content = StringUtils.EMPTY; |
||||||
|
private boolean auto = true; |
||||||
|
private String params = StringUtils.EMPTY; |
||||||
|
private String initParams = StringUtils.EMPTY; |
||||||
|
private String align = TextAlign.LEFT.getAlign(); |
||||||
|
private String addition = StringUtils.EMPTY; |
||||||
|
|
||||||
|
public VanChartRichEditorModel() { |
||||||
|
} |
||||||
|
|
||||||
|
public VanChartRichEditorModel(String content, boolean auto, String params, String initParams, String align) { |
||||||
|
this.content = content; |
||||||
|
this.auto = auto; |
||||||
|
this.params = params; |
||||||
|
this.initParams = initParams; |
||||||
|
this.align = align; |
||||||
|
this.addition = StringUtils.EMPTY; |
||||||
|
} |
||||||
|
|
||||||
|
public String getContent() { |
||||||
|
return content; |
||||||
|
} |
||||||
|
|
||||||
|
public void setContent(String content) { |
||||||
|
this.content = content; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isAuto() { |
||||||
|
return auto; |
||||||
|
} |
||||||
|
|
||||||
|
public void setAuto(boolean auto) { |
||||||
|
this.auto = auto; |
||||||
|
} |
||||||
|
|
||||||
|
public String getParams() { |
||||||
|
return params; |
||||||
|
} |
||||||
|
|
||||||
|
public void setParams(String params) { |
||||||
|
this.params = params; |
||||||
|
} |
||||||
|
|
||||||
|
public String getInitParams() { |
||||||
|
return initParams; |
||||||
|
} |
||||||
|
|
||||||
|
public void setInitParams(String initParams) { |
||||||
|
this.initParams = initParams; |
||||||
|
} |
||||||
|
|
||||||
|
public String getAlign() { |
||||||
|
return align; |
||||||
|
} |
||||||
|
|
||||||
|
public void setAlign(String align) { |
||||||
|
this.align = align; |
||||||
|
} |
||||||
|
|
||||||
|
public String getAddition() { |
||||||
|
return addition; |
||||||
|
} |
||||||
|
|
||||||
|
public void setAddition(String addition) { |
||||||
|
this.addition = addition; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,195 @@ |
|||||||
|
package com.fr.van.chart.designer.component.richText; |
||||||
|
|
||||||
|
import com.fr.base.TableData; |
||||||
|
import com.fr.base.chart.chartdata.TopDefinitionProvider; |
||||||
|
import com.fr.chart.chartattr.Chart; |
||||||
|
import com.fr.chart.chartdata.MoreNameCDDefinition; |
||||||
|
import com.fr.chart.chartdata.OneValueCDDefinition; |
||||||
|
import com.fr.data.TableDataSource; |
||||||
|
import com.fr.data.impl.EmbeddedTableData; |
||||||
|
import com.fr.design.DesignModelAdapter; |
||||||
|
import com.fr.design.DesignerEnvManager; |
||||||
|
import com.fr.design.data.DesignTableDataManager; |
||||||
|
import com.fr.design.ui.ModernUIPane; |
||||||
|
import com.fr.general.ComparatorUtils; |
||||||
|
import com.fr.general.IOUtils; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.chart.base.AttrTooltipRichText; |
||||||
|
import com.fr.plugin.chart.type.TextAlign; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.teamdev.jxbrowser.chromium.Browser; |
||||||
|
import com.teamdev.jxbrowser.chromium.JSValue; |
||||||
|
import com.teamdev.jxbrowser.chromium.events.ScriptContextAdapter; |
||||||
|
import com.teamdev.jxbrowser.chromium.events.ScriptContextEvent; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
import java.util.Locale; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
public class VanChartRichEditorPane { |
||||||
|
|
||||||
|
private static final String NAME_SPACE = "Pool"; |
||||||
|
private static final String VARIABLE = "data"; |
||||||
|
|
||||||
|
private static final String RICH_EDITOR_HTML = "/com/fr/design/editor/rich_editor.html"; |
||||||
|
|
||||||
|
private static final String REFRESH = "refresh()"; |
||||||
|
private static final String ADD_FIELD = "addField()"; |
||||||
|
|
||||||
|
private static ModernUIPane<VanChartRichEditorModel> richEditorPane; |
||||||
|
private static Browser browser; |
||||||
|
private static List<String> fieldNames; |
||||||
|
|
||||||
|
public static List<String> getFieldNames() { |
||||||
|
return fieldNames; |
||||||
|
} |
||||||
|
|
||||||
|
public static void refreshFieldNames(Chart chart) { |
||||||
|
VanChartRichEditorPane.fieldNames = null; |
||||||
|
|
||||||
|
if (chart == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
TopDefinitionProvider definition = chart.getFilterDefinition(); |
||||||
|
|
||||||
|
if (definition == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
DesignModelAdapter adapter = DesignModelAdapter.getCurrentModelAdapter(); |
||||||
|
TableDataSource tableDataSource = adapter == null ? null : adapter.getBook(); |
||||||
|
|
||||||
|
TableData tableData = null; |
||||||
|
|
||||||
|
if (ComparatorUtils.equals(definition.getDataDefinitionType(), OneValueCDDefinition.DEFINITION_TYPE)) { |
||||||
|
OneValueCDDefinition oneValueCDDefinition = (OneValueCDDefinition) definition; |
||||||
|
tableData = oneValueCDDefinition.getTableData(); |
||||||
|
} |
||||||
|
|
||||||
|
if (ComparatorUtils.equals(definition.getDataDefinitionType(), MoreNameCDDefinition.DEFINITION_TYPE)) { |
||||||
|
MoreNameCDDefinition moreNameCDDefinition = (MoreNameCDDefinition) definition; |
||||||
|
tableData = moreNameCDDefinition.getTableData(); |
||||||
|
} |
||||||
|
|
||||||
|
if (tableData == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
EmbeddedTableData embeddedTableData = DesignTableDataManager.previewTableDataNotNeedInputParameters(tableDataSource, |
||||||
|
tableData, TableData.RESULT_NOT_NEED, false); |
||||||
|
|
||||||
|
List<String> fieldNames = DesignTableDataManager.getColumnNamesByTableData(embeddedTableData); |
||||||
|
VanChartRichEditorPane.fieldNames = fieldNames; |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static ModernUIPane<VanChartRichEditorModel> createRichEditorPane(AttrTooltipRichText richEditor) { |
||||||
|
VanChartRichEditorModel model = getRichEditorModel(richEditor); |
||||||
|
return createRichEditorPane(model); |
||||||
|
} |
||||||
|
|
||||||
|
public static ModernUIPane<VanChartRichEditorModel> createRichEditorPane(VanChartRichEditorModel model) { |
||||||
|
if (richEditorPane == null) { |
||||||
|
richEditorPane = initPane(model); |
||||||
|
} else { |
||||||
|
richEditorRefresh(model); |
||||||
|
} |
||||||
|
|
||||||
|
return richEditorPane; |
||||||
|
} |
||||||
|
|
||||||
|
public static void richEditorRefresh(VanChartRichEditorModel model) { |
||||||
|
if (richEditorPane != null && browser != null) { |
||||||
|
refresh(browser, model); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static void richEditorAddField(VanChartRichEditorModel model) { |
||||||
|
if (richEditorPane != null && browser != null) { |
||||||
|
addField(browser, model); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static ModernUIPane<VanChartRichEditorModel> initPane(VanChartRichEditorModel model) { |
||||||
|
return new ModernUIPane.Builder<VanChartRichEditorModel>() |
||||||
|
.prepare(new ScriptContextAdapter() { |
||||||
|
public void onScriptContextCreated(ScriptContextEvent event) { |
||||||
|
browser = event.getBrowser(); |
||||||
|
browser.getCacheStorage().clearCache(); |
||||||
|
|
||||||
|
browser.executeJavaScript(IOUtils.readResourceAsString("/com/fr/web/ui/fineui.min.js")); |
||||||
|
browser.executeJavaScript(IOUtils.readResourceAsString("/com/fr/design/editor/script/i18n.js")); |
||||||
|
browser.executeJavaScript(generateTransformI18nJS()); |
||||||
|
browser.executeJavaScript(IOUtils.readResourceAsString("/com/fr/web/ui/materials.min.js")); |
||||||
|
|
||||||
|
JSValue ns = browser.executeJavaScriptAndReturnValue("window." + NAME_SPACE); |
||||||
|
ns.asObject().setProperty(VARIABLE, model); |
||||||
|
} |
||||||
|
}) |
||||||
|
.withEMB(RICH_EDITOR_HTML) |
||||||
|
.namespace(NAME_SPACE).build(); |
||||||
|
} |
||||||
|
|
||||||
|
public static void refresh(Browser browser, VanChartRichEditorModel model) { |
||||||
|
stateChange(browser, model, REFRESH); |
||||||
|
} |
||||||
|
|
||||||
|
public static void addField(Browser browser, VanChartRichEditorModel model) { |
||||||
|
stateChange(browser, model, ADD_FIELD); |
||||||
|
} |
||||||
|
|
||||||
|
public static void stateChange(Browser browser, VanChartRichEditorModel model, String trigger) { |
||||||
|
JSValue ns = browser.executeJavaScriptAndReturnValue("window." + NAME_SPACE); |
||||||
|
ns.asObject().setProperty(VARIABLE, model); |
||||||
|
browser.executeJavaScript("window." + NAME_SPACE + "." + trigger); |
||||||
|
} |
||||||
|
|
||||||
|
public static VanChartRichEditorModel getRichEditorModel(AttrTooltipRichText richText) { |
||||||
|
Map<String, String> paramsMap = richText.getParams(); |
||||||
|
StringBuilder paramsStr = new StringBuilder(StringUtils.EMPTY); |
||||||
|
|
||||||
|
if (paramsMap != null) { |
||||||
|
for (Map.Entry<String, String> entry : paramsMap.entrySet()) { |
||||||
|
paramsStr.append(entry.getKey()).append(":").append(entry.getValue()); |
||||||
|
paramsStr.append("-"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
int len = paramsStr.length(); |
||||||
|
|
||||||
|
if (len > 0) { |
||||||
|
paramsStr.deleteCharAt(len - 1); |
||||||
|
} |
||||||
|
|
||||||
|
String content = richText.getContent(); |
||||||
|
String initParams = StringUtils.EMPTY; |
||||||
|
String align = StringUtils.EMPTY; |
||||||
|
|
||||||
|
if (content.contains("data-id") && !content.contains("class")) { |
||||||
|
initParams = richText.getInitParamsContent(); |
||||||
|
|
||||||
|
String left = TextAlign.LEFT.getAlign(); |
||||||
|
String center = TextAlign.CENTER.getAlign(); |
||||||
|
|
||||||
|
align = content.contains(left) ? left : center; |
||||||
|
} |
||||||
|
|
||||||
|
return new VanChartRichEditorModel(content, richText.isAuto(), paramsStr.toString(), initParams, align); |
||||||
|
} |
||||||
|
|
||||||
|
public static String generateTransformI18nJS() { |
||||||
|
String language = "zh_CN"; |
||||||
|
|
||||||
|
Locale locale = DesignerEnvManager.getEnvManager().getLanguage(); |
||||||
|
|
||||||
|
if (locale != null) { |
||||||
|
language = locale.toString(); |
||||||
|
} |
||||||
|
|
||||||
|
return "!(function () { window.transformI18n && window.transformI18n('" + language + "' || 'zh_CN'); }());"; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,95 @@ |
|||||||
|
package com.fr.van.chart.designer.component.richText; |
||||||
|
|
||||||
|
import com.fr.design.beans.BasicBeanPane; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.ui.ModernUIPane; |
||||||
|
import com.fr.plugin.chart.base.AttrTooltipContent; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.JScrollPane; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Dimension; |
||||||
|
|
||||||
|
// 标签提示中的富文本面板,包含字段设置和富文本编辑器
|
||||||
|
public class VanChartRichTextPane extends BasicBeanPane<AttrTooltipContent> { |
||||||
|
|
||||||
|
private static final int FIELD_PANE_W = 470; |
||||||
|
private static final int FIELD_PANE_H = 270; |
||||||
|
|
||||||
|
private static final int RICH_EDITOR_W = 940; |
||||||
|
private static final int RICH_EDITOR_H = 260; |
||||||
|
|
||||||
|
private VanChartFieldListPane fieldListPane; |
||||||
|
private VanChartFieldAttrPane fieldAttrPane; |
||||||
|
|
||||||
|
public VanChartRichTextPane(ModernUIPane<VanChartRichEditorModel> richEditor) { |
||||||
|
fieldAttrPane = new VanChartFieldAttrPane(); |
||||||
|
fieldListPane = createFieldListPane(fieldAttrPane, richEditor); |
||||||
|
|
||||||
|
this.setLayout(new BorderLayout()); |
||||||
|
this.add(createFieldContentPane(), BorderLayout.CENTER); |
||||||
|
this.add(createRichEditorPane(richEditor), BorderLayout.SOUTH); |
||||||
|
} |
||||||
|
|
||||||
|
public VanChartFieldListPane getFieldListPane() { |
||||||
|
return fieldListPane; |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createFieldContentPane() { |
||||||
|
JPanel fieldPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); |
||||||
|
|
||||||
|
// 新增字段目录
|
||||||
|
JPanel fieldListContent = new JPanel(); |
||||||
|
fieldListContent.setLayout(new BorderLayout()); |
||||||
|
fieldListContent.add(fieldListPane, BorderLayout.NORTH); |
||||||
|
|
||||||
|
JScrollPane fieldListScrollPane = new JScrollPane(fieldListContent); |
||||||
|
fieldListScrollPane.setPreferredSize(new Dimension(FIELD_PANE_W, FIELD_PANE_H)); |
||||||
|
fieldListScrollPane.setHorizontalScrollBar(null); |
||||||
|
fieldListScrollPane.setBorder(BorderFactory.createTitledBorder("添加字段")); |
||||||
|
|
||||||
|
// 字段格式和汇总
|
||||||
|
JScrollPane fieldAttrScrollPane = new JScrollPane(fieldAttrPane); |
||||||
|
fieldAttrScrollPane.setPreferredSize(new Dimension(FIELD_PANE_W, FIELD_PANE_H)); |
||||||
|
fieldAttrScrollPane.setBorder(BorderFactory.createTitledBorder("字段设置")); |
||||||
|
|
||||||
|
fieldPane.add(fieldListScrollPane); |
||||||
|
fieldPane.add(fieldAttrScrollPane); |
||||||
|
|
||||||
|
return fieldPane; |
||||||
|
} |
||||||
|
|
||||||
|
protected VanChartFieldListPane createFieldListPane(VanChartFieldAttrPane fieldAttrPane, ModernUIPane<VanChartRichEditorModel> richEditor) { |
||||||
|
return new VanChartFieldListPane(fieldAttrPane, richEditor); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createRichEditorPane(JPanel richEditor) { |
||||||
|
JPanel richEditorPane = new JPanel(); |
||||||
|
|
||||||
|
richEditorPane.setLayout(new BorderLayout()); |
||||||
|
richEditorPane.setPreferredSize(new Dimension(RICH_EDITOR_W, RICH_EDITOR_H)); |
||||||
|
richEditorPane.add(richEditor, BorderLayout.CENTER); |
||||||
|
|
||||||
|
return richEditorPane; |
||||||
|
} |
||||||
|
|
||||||
|
protected AttrTooltipContent getInitialTooltipContent() { |
||||||
|
return new AttrTooltipContent(); |
||||||
|
} |
||||||
|
|
||||||
|
public void populateBean(AttrTooltipContent tooltipContent) { |
||||||
|
fieldListPane.populate(tooltipContent); |
||||||
|
} |
||||||
|
|
||||||
|
public AttrTooltipContent updateBean() { |
||||||
|
AttrTooltipContent content = getInitialTooltipContent(); |
||||||
|
fieldListPane.update(content); |
||||||
|
return content; |
||||||
|
} |
||||||
|
|
||||||
|
protected String title4PopupWindow() { |
||||||
|
return StringUtils.EMPTY; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,41 @@ |
|||||||
|
package com.fr.van.chart.map.designer.style; |
||||||
|
|
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.ui.ModernUIPane; |
||||||
|
import com.fr.plugin.chart.base.format.AttrTooltipAreaNameFormat; |
||||||
|
import com.fr.plugin.chart.base.format.AttrTooltipPercentFormat; |
||||||
|
import com.fr.plugin.chart.base.format.AttrTooltipSeriesFormat; |
||||||
|
import com.fr.plugin.chart.base.format.AttrTooltipValueFormat; |
||||||
|
import com.fr.van.chart.designer.component.richText.VanChartFieldAttrPane; |
||||||
|
import com.fr.van.chart.designer.component.richText.VanChartFieldButton; |
||||||
|
import com.fr.van.chart.designer.component.richText.VanChartFieldListPane; |
||||||
|
import com.fr.van.chart.designer.component.richText.VanChartFieldListener; |
||||||
|
import com.fr.van.chart.designer.component.richText.VanChartRichEditorModel; |
||||||
|
|
||||||
|
public class VanChartMapRichTextFieldListPane extends VanChartFieldListPane { |
||||||
|
|
||||||
|
public VanChartMapRichTextFieldListPane(VanChartFieldAttrPane fieldAttrPane, ModernUIPane<VanChartRichEditorModel> richEditorPane) { |
||||||
|
super(fieldAttrPane, richEditorPane); |
||||||
|
} |
||||||
|
|
||||||
|
protected void initDefaultFieldButton() { |
||||||
|
VanChartFieldListener fieldListener = getFieldListener(); |
||||||
|
|
||||||
|
VanChartFieldButton categoryNameButton = new VanChartFieldButton(Toolkit.i18nText("Fine-Design_Chart_Area_Name"), |
||||||
|
new AttrTooltipAreaNameFormat(), false, fieldListener); |
||||||
|
|
||||||
|
VanChartFieldButton seriesNameButton = new VanChartFieldButton(Toolkit.i18nText("Fine-Design_Chart_Series_Name"), |
||||||
|
new AttrTooltipSeriesFormat(), false, fieldListener); |
||||||
|
|
||||||
|
VanChartFieldButton valueButton = new VanChartFieldButton(Toolkit.i18nText("Fine-Design_Chart_Use_Value"), |
||||||
|
new AttrTooltipValueFormat(), false, fieldListener); |
||||||
|
|
||||||
|
VanChartFieldButton percentButton = new VanChartFieldButton(Toolkit.i18nText("Fine-Design_Chart_Use_Percent"), |
||||||
|
new AttrTooltipPercentFormat(), false, fieldListener); |
||||||
|
|
||||||
|
setCategoryNameButton(categoryNameButton); |
||||||
|
setSeriesNameButton(seriesNameButton); |
||||||
|
setValueButton(valueButton); |
||||||
|
setPercentButton(percentButton); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,93 @@ |
|||||||
|
package com.fr.van.chart.scatter; |
||||||
|
|
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.ui.ModernUIPane; |
||||||
|
import com.fr.plugin.chart.base.AttrTooltipContent; |
||||||
|
import com.fr.plugin.chart.base.format.AttrTooltipSizeFormat; |
||||||
|
import com.fr.plugin.chart.base.format.AttrTooltipXFormat; |
||||||
|
import com.fr.plugin.chart.base.format.AttrTooltipYFormat; |
||||||
|
import com.fr.plugin.chart.scatter.attr.ScatterAttrTooltipContent; |
||||||
|
import com.fr.van.chart.designer.component.richText.VanChartFieldAttrPane; |
||||||
|
import com.fr.van.chart.designer.component.richText.VanChartFieldButton; |
||||||
|
import com.fr.van.chart.designer.component.richText.VanChartFieldListPane; |
||||||
|
import com.fr.van.chart.designer.component.richText.VanChartFieldListener; |
||||||
|
import com.fr.van.chart.designer.component.richText.VanChartRichEditorModel; |
||||||
|
|
||||||
|
import javax.swing.JPanel; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class VanChartScatterRichTextFieldListPane extends VanChartFieldListPane { |
||||||
|
|
||||||
|
private VanChartFieldButton richTextXFormatPane; |
||||||
|
private VanChartFieldButton richTextYFormatPane; |
||||||
|
private VanChartFieldButton richTextSizeFormatPane; |
||||||
|
|
||||||
|
public VanChartScatterRichTextFieldListPane(VanChartFieldAttrPane fieldAttrPane, ModernUIPane<VanChartRichEditorModel> richEditorPane) { |
||||||
|
super(fieldAttrPane, richEditorPane); |
||||||
|
} |
||||||
|
|
||||||
|
public VanChartFieldButton getRichTextXFormatPane() { |
||||||
|
return richTextXFormatPane; |
||||||
|
} |
||||||
|
|
||||||
|
public VanChartFieldButton getRichTextYFormatPane() { |
||||||
|
return richTextYFormatPane; |
||||||
|
} |
||||||
|
|
||||||
|
public VanChartFieldButton getRichTextSizeFormatPane() { |
||||||
|
return richTextSizeFormatPane; |
||||||
|
} |
||||||
|
|
||||||
|
protected void initDefaultFieldButton() { |
||||||
|
super.initDefaultFieldButton(); |
||||||
|
|
||||||
|
VanChartFieldListener listener = getFieldListener(); |
||||||
|
|
||||||
|
richTextXFormatPane = new VanChartFieldButton("x", new AttrTooltipXFormat(), false, listener); |
||||||
|
richTextYFormatPane = new VanChartFieldButton("y", new AttrTooltipYFormat(), false, listener); |
||||||
|
richTextSizeFormatPane = new VanChartFieldButton(Toolkit.i18nText("Fine-Design_Chart_Use_Value"), new AttrTooltipSizeFormat(), false, listener); |
||||||
|
} |
||||||
|
|
||||||
|
protected void addDefaultFieldButton(JPanel fieldPane) { |
||||||
|
fieldPane.add(getSeriesNameButton()); |
||||||
|
fieldPane.add(richTextXFormatPane); |
||||||
|
fieldPane.add(richTextYFormatPane); |
||||||
|
fieldPane.add(richTextSizeFormatPane); |
||||||
|
} |
||||||
|
|
||||||
|
protected List<VanChartFieldButton> getDefaultFieldButtonList() { |
||||||
|
List<VanChartFieldButton> fieldButtonList = new ArrayList<>(); |
||||||
|
|
||||||
|
fieldButtonList.add(getSeriesNameButton()); |
||||||
|
fieldButtonList.add(richTextXFormatPane); |
||||||
|
fieldButtonList.add(richTextYFormatPane); |
||||||
|
fieldButtonList.add(richTextSizeFormatPane); |
||||||
|
|
||||||
|
return fieldButtonList; |
||||||
|
} |
||||||
|
|
||||||
|
public void populateDefaultField(AttrTooltipContent tooltipContent) { |
||||||
|
super.populateDefaultField(tooltipContent); |
||||||
|
|
||||||
|
if (tooltipContent instanceof ScatterAttrTooltipContent) { |
||||||
|
ScatterAttrTooltipContent scatter = (ScatterAttrTooltipContent) tooltipContent; |
||||||
|
|
||||||
|
populateButtonFormat(richTextXFormatPane, scatter.getRichTextXFormat()); |
||||||
|
populateButtonFormat(richTextYFormatPane, scatter.getRichTextYFormat()); |
||||||
|
populateButtonFormat(richTextSizeFormatPane, scatter.getRichTextSizeFormat()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void updateDefaultField(AttrTooltipContent tooltipContent) { |
||||||
|
super.updateDefaultField(tooltipContent); |
||||||
|
|
||||||
|
if (tooltipContent instanceof ScatterAttrTooltipContent) { |
||||||
|
ScatterAttrTooltipContent scatter = (ScatterAttrTooltipContent) tooltipContent; |
||||||
|
|
||||||
|
updateButtonFormat(richTextXFormatPane, scatter.getRichTextXFormat()); |
||||||
|
updateButtonFormat(richTextYFormatPane, scatter.getRichTextYFormat()); |
||||||
|
updateButtonFormat(richTextSizeFormatPane, scatter.getRichTextSizeFormat()); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,41 @@ |
|||||||
|
package com.fr.van.chart.wordcloud.designer.style; |
||||||
|
|
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.ui.ModernUIPane; |
||||||
|
import com.fr.plugin.chart.base.format.AttrTooltipCategoryFormat; |
||||||
|
import com.fr.plugin.chart.base.format.AttrTooltipNameFormat; |
||||||
|
import com.fr.plugin.chart.base.format.AttrTooltipPercentFormat; |
||||||
|
import com.fr.plugin.chart.base.format.AttrTooltipValueFormat; |
||||||
|
import com.fr.van.chart.designer.component.richText.VanChartFieldAttrPane; |
||||||
|
import com.fr.van.chart.designer.component.richText.VanChartFieldButton; |
||||||
|
import com.fr.van.chart.designer.component.richText.VanChartFieldListPane; |
||||||
|
import com.fr.van.chart.designer.component.richText.VanChartFieldListener; |
||||||
|
import com.fr.van.chart.designer.component.richText.VanChartRichEditorModel; |
||||||
|
|
||||||
|
public class VanChartWordCloudRichTextFieldListPane extends VanChartFieldListPane { |
||||||
|
|
||||||
|
public VanChartWordCloudRichTextFieldListPane(VanChartFieldAttrPane fieldAttrPane, ModernUIPane<VanChartRichEditorModel> richEditorPane) { |
||||||
|
super(fieldAttrPane, richEditorPane); |
||||||
|
} |
||||||
|
|
||||||
|
protected void initDefaultFieldButton() { |
||||||
|
VanChartFieldListener fieldListener = getFieldListener(); |
||||||
|
|
||||||
|
VanChartFieldButton categoryNameButton = new VanChartFieldButton(Toolkit.i18nText("Fine-Design_Chart_MultiPie_Series_Name"), |
||||||
|
new AttrTooltipCategoryFormat(), false, fieldListener); |
||||||
|
|
||||||
|
VanChartFieldButton seriesNameButton = new VanChartFieldButton(Toolkit.i18nText("Fine-Design_Chart_Word_Name"), |
||||||
|
new AttrTooltipNameFormat(), false, fieldListener); |
||||||
|
|
||||||
|
VanChartFieldButton valueButton = new VanChartFieldButton(Toolkit.i18nText("Fine-Design_Chart_Word_Value"), |
||||||
|
new AttrTooltipValueFormat(), false, fieldListener); |
||||||
|
|
||||||
|
VanChartFieldButton percentButton = new VanChartFieldButton(Toolkit.i18nText("Fine-Design_Chart_Use_Percent"), |
||||||
|
new AttrTooltipPercentFormat(), false, fieldListener); |
||||||
|
|
||||||
|
setCategoryNameButton(categoryNameButton); |
||||||
|
setSeriesNameButton(seriesNameButton); |
||||||
|
setValueButton(valueButton); |
||||||
|
setPercentButton(percentButton); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue