Browse Source
* commit 'ac1d886db71072a214cb3632590617c3619f871b': (21 commits) REPORT-2897 9.0设计器修改 单元格属性面板 REPORT-3163 合作开发9.0设计器=>超级链接=>优化保存设置的时机,可正常撤销、重做;修复bug;完成 REPORT-3348 数据列集选择组件布局修改,一些代码结构 REPORT-3163 合作开发9.0设计器=>超级链接=>编辑后触发保存 REPORT-3163 合作开发9.0设计器=>超级链接=>聚合报表部分 REPORT-3163 合作开发9.0设计器=>超级链接=>重构代码,处理表单报表块的超级链接面板 REPORT-3348 单元格元素数据列基本设置OK REPORT-3348 数据列基本设置添加过滤条件设置,多个文件换行符和todo REPORT-3348 单元格元素数据列基本设置动态加载 REPORT-3348,踩坑,数据列展现方案确定 REPORT-3163 合作开发9.0设计器=>调整外框架宽度 REPORT-3163 合作开发9.0设计器=>超级链接=》国际化 无JIRA任务,国际化加载问题 REPORT-2897 9.0设计器修改 单元格属性-样式=》自定义样式=》单元格、对齐 REPORT-3163 合作开发9.0设计器=>超级链接=》实时保存编辑状态 REPORT-3163 合作开发9.0设计器=>超级链接=》调整弹窗,确保子页面正常显示 REPORT-3163 合作开发9.0设计器=>新列表面板=》修复自定义列表项控制台报错的bug REPORT-3163 合作开发9.0设计器=>新列表面板=》动态调整弹出框位置 REPORT-3163 合作开发9.0设计器=>新列表面板=》修复二次弹窗的bug REPORT-3163 合作开发9.0设计器=>新列表面板=》让子类重写标签内容 ...master
superman
7 years ago
61 changed files with 3822 additions and 2552 deletions
@ -0,0 +1,38 @@
|
||||
package com.fr.design.dscolumn; |
||||
|
||||
import com.fr.design.mainframe.cell.CellEditorPane; |
||||
import com.fr.report.cell.TemplateCellElement; |
||||
|
||||
|
||||
/** |
||||
* 单元格元素 数据列 基本设置内容面板 |
||||
* |
||||
* @author yaoh.wu |
||||
* @version 2017年7月25日 |
||||
* @since 9.0 |
||||
*/ |
||||
public class DSColumnAdvancedEditorPane extends CellEditorPane { |
||||
|
||||
|
||||
@Override |
||||
public String getIconPath() { |
||||
return "Advanced"; |
||||
} |
||||
|
||||
@Override |
||||
public String title4PopupWindow() { |
||||
return "Advanced"; |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public void update() { |
||||
|
||||
} |
||||
|
||||
@Override |
||||
public void populate(TemplateCellElement cellElement) { |
||||
|
||||
} |
||||
|
||||
} |
@ -0,0 +1,84 @@
|
||||
package com.fr.design.dscolumn; |
||||
|
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.mainframe.cell.CellEditorPane; |
||||
import com.fr.report.cell.TemplateCellElement; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
|
||||
/** |
||||
* 单元格元素 数据列 高级设置内容面板 |
||||
* |
||||
* @author yaoh.wu |
||||
* @version 2017年7月25日 |
||||
* @since 9.0 |
||||
*/ |
||||
public class DSColumnBasicEditorPane extends CellEditorPane { |
||||
|
||||
//数据集和数据列
|
||||
private SelectedDataColumnPane dataPane; |
||||
//数据分组设置
|
||||
private ResultSetGroupDockingPane groupPane; |
||||
//当前编辑的单元格
|
||||
private TemplateCellElement cellElement; |
||||
//条件过滤按钮面板
|
||||
private JPanel conditionPane; |
||||
|
||||
public DSColumnBasicEditorPane(TemplateCellElement cellElement, SelectedDataColumnPane dataPane, ResultSetGroupDockingPane groupPane, JPanel conditionPane) { |
||||
this.setLayout(new BorderLayout()); |
||||
this.cellElement = cellElement; |
||||
this.dataPane = dataPane; |
||||
this.groupPane = groupPane; |
||||
this.conditionPane = conditionPane; |
||||
this.add(this.createContentPane(), BorderLayout.CENTER); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public String getIconPath() { |
||||
return "Basic"; |
||||
} |
||||
|
||||
@Override |
||||
public String title4PopupWindow() { |
||||
return "Basic"; |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public void update() { |
||||
dataPane.update(this.cellElement); |
||||
groupPane.update(); |
||||
} |
||||
|
||||
@Override |
||||
public void populate(TemplateCellElement cellElement) { |
||||
this.cellElement = cellElement; |
||||
dataPane.populate(null, cellElement); |
||||
groupPane.populate(cellElement); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 创建有内容的面板显示信息 |
||||
* |
||||
* @return content JPanel |
||||
*/ |
||||
private JPanel createContentPane() { |
||||
double p = TableLayout.PREFERRED; |
||||
double f = TableLayout.FILL; |
||||
double[] columnSize = {f}; |
||||
double[] rowSize = {p, p, p}; |
||||
Component[][] components = new Component[][]{ |
||||
//数据集列选择
|
||||
new Component[]{this.dataPane}, |
||||
//数据分组设置
|
||||
new Component[]{this.groupPane}, |
||||
//条件过滤
|
||||
new Component[]{this.conditionPane} |
||||
}; |
||||
return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); |
||||
} |
||||
} |
@ -1,247 +1,252 @@
|
||||
package com.fr.design.dscolumn; |
||||
|
||||
import com.fr.base.Parameter; |
||||
import com.fr.design.data.DesignTableDataManager; |
||||
import com.fr.data.SimpleDSColumn; |
||||
import com.fr.data.TableDataSource; |
||||
import com.fr.design.data.datapane.TableDataComboBox; |
||||
import com.fr.design.data.tabledata.wrapper.TableDataWrapper; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.gui.itableeditorpane.ParameterTableModel; |
||||
import com.fr.design.gui.itableeditorpane.UITableEditorPane; |
||||
import com.fr.design.gui.icombobox.LazyComboBox; |
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.mainframe.DesignerContext; |
||||
import com.fr.design.dialog.BasicDialog; |
||||
import com.fr.design.dialog.BasicPane; |
||||
import com.fr.design.dialog.DialogActionAdapter; |
||||
import com.fr.general.Inter; |
||||
import com.fr.general.data.TableDataColumn; |
||||
import com.fr.report.cell.CellElement; |
||||
import com.fr.report.cell.TemplateCellElement; |
||||
import com.fr.report.cell.cellattr.core.group.DSColumn; |
||||
import com.fr.stable.ParameterProvider; |
||||
import com.fr.stable.StringUtils; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
import java.awt.event.ActionEvent; |
||||
import java.awt.event.ActionListener; |
||||
import java.awt.event.ItemEvent; |
||||
import java.awt.event.ItemListener; |
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
import java.util.regex.Pattern; |
||||
|
||||
public class SelectedDataColumnPane extends BasicPane { |
||||
protected UITableEditorPane<ParameterProvider> editorPane; |
||||
protected Parameter[] ps; |
||||
|
||||
protected TableDataComboBox tableNameComboBox; |
||||
protected LazyComboBox columnNameComboBox; |
||||
private ItemListener itemListener; |
||||
|
||||
private UIButton paramButton; |
||||
|
||||
public SelectedDataColumnPane() { |
||||
this(true); |
||||
} |
||||
|
||||
public SelectedDataColumnPane(boolean showParameterButton) { |
||||
initComponent(showParameterButton); |
||||
} |
||||
|
||||
/** |
||||
* 初始化组件 |
||||
* |
||||
* @param showParameterButton 是否显示参数按钮 |
||||
* |
||||
*/ |
||||
public void initComponent(boolean showParameterButton) { |
||||
initTableNameComboBox(); |
||||
if (showParameterButton) { |
||||
initWithParameterButton(); |
||||
} |
||||
columnNameComboBox = new LazyComboBox() { |
||||
|
||||
@Override |
||||
public Object[] load() { |
||||
List<String> l = calculateColumnNameList(); |
||||
return l.toArray(new String[l.size()]); |
||||
} |
||||
|
||||
}; |
||||
columnNameComboBox.setEditable(true); |
||||
double p = TableLayout.PREFERRED; |
||||
UILabel label1 = new UILabel(Inter.getLocText("TableData") + ":"); |
||||
UILabel label2 = new UILabel(Inter.getLocText("DataColumn") + ":"); |
||||
if (showParameterButton) { |
||||
label1.setPreferredSize(new Dimension(200, 25)); |
||||
label2.setPreferredSize(new Dimension(200, 25)); |
||||
} |
||||
if (showParameterButton) { |
||||
Component[][] comps = {{label1, null, label2}, {tableNameComboBox, paramButton, columnNameComboBox}}; |
||||
this.add(TableLayoutHelper.createTableLayoutPane(comps, new double[]{p, p}, new double[]{p, p, p})); |
||||
} else { |
||||
double f = TableLayout.FILL; |
||||
double[] columnSize = {p, f}; |
||||
double[] rowSize = {p, p}; |
||||
Component[][] components = new Component[][]{ |
||||
new Component[]{label1, tableNameComboBox}, |
||||
new Component[]{label2, columnNameComboBox} |
||||
}; |
||||
JPanel jPanel = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); |
||||
this.setLayout(new BorderLayout()); |
||||
this.add(jPanel, BorderLayout.CENTER); |
||||
} |
||||
} |
||||
|
||||
protected void initTableNameComboBox() { |
||||
tableNameComboBox = new TableDataComboBox(DesignTableDataManager.getEditingTableDataSource()); |
||||
tableNameComboBox.addItemListener(new ItemListener() { |
||||
@Override |
||||
public void itemStateChanged(ItemEvent e) { |
||||
columnNameComboBox.setLoaded(false); |
||||
// columnNameComboBox.loadList();
|
||||
} |
||||
}); |
||||
tableNameComboBox.setPreferredSize(new Dimension(100, 20)); |
||||
} |
||||
|
||||
private void initWithParameterButton() { |
||||
editorPane = new UITableEditorPane<ParameterProvider>(new ParameterTableModel()); |
||||
paramButton = new UIButton(Inter.getLocText("TableData_Dynamic_Parameter_Setting")); |
||||
paramButton.addActionListener(new ActionListener() { |
||||
public void actionPerformed(ActionEvent e) { |
||||
BasicDialog paramDialog = editorPane.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { |
||||
@Override |
||||
public void doOk() { |
||||
List<ParameterProvider> parameterList = editorPane.update(); |
||||
ps = parameterList.toArray(new Parameter[parameterList.size()]); |
||||
} |
||||
}); |
||||
|
||||
editorPane.populate(ps == null ? new Parameter[0] : ps); |
||||
paramDialog.setVisible(true); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return "DSColumn"; |
||||
} |
||||
|
||||
public void populate(TableDataSource source, TemplateCellElement cellElement) { |
||||
if (cellElement == null) { |
||||
return; |
||||
} |
||||
|
||||
if (itemListener != null) { |
||||
removeListener(itemListener); |
||||
} |
||||
|
||||
Object value = cellElement.getValue(); |
||||
if (!(value instanceof DSColumn)) { |
||||
return; |
||||
} |
||||
|
||||
DSColumn dsColumn = (DSColumn) value; |
||||
String dsName = dsColumn.getDSName(); |
||||
tableNameComboBox.setSelectedTableDataByName(dsName); |
||||
columnNameComboBox.setSelectedItem(TableDataColumn.getColumnName(dsColumn.getColumn())); |
||||
ps = dsColumn.getParameters(); |
||||
|
||||
addListener(itemListener); |
||||
} |
||||
|
||||
public void update(CellElement cellElement) { |
||||
if (cellElement == null) { |
||||
return; |
||||
} |
||||
Object value = cellElement.getValue(); |
||||
if (this.tableNameComboBox.getSelectedItem() == null && this.columnNameComboBox.getSelectedItem() == null) { |
||||
return; |
||||
} |
||||
DSColumn dsColumn = null; |
||||
if (value == null || !(value instanceof DSColumn)) { |
||||
dsColumn = new DSColumn(); |
||||
cellElement.setValue(dsColumn); |
||||
} |
||||
dsColumn = (DSColumn) cellElement.getValue(); |
||||
|
||||
SimpleDSColumn simpleDSColumn = updateColumnPane(); |
||||
dsColumn.setDSName(simpleDSColumn.getDsName()); |
||||
dsColumn.setColumn(simpleDSColumn.getColumn()); |
||||
|
||||
dsColumn.setParameters((ps != null && ps.length > 0) ? ps : null); |
||||
} |
||||
|
||||
/** |
||||
* 更新面板 |
||||
* |
||||
* @return 更新后的值 |
||||
* |
||||
*/ |
||||
public SimpleDSColumn updateColumnPane() { |
||||
SimpleDSColumn dsColumn = new SimpleDSColumn(); |
||||
TableDataWrapper tableDataWrappe = this.tableNameComboBox.getSelectedItem(); |
||||
if (tableDataWrappe == null) { |
||||
return null; |
||||
} |
||||
dsColumn.setDsName(tableDataWrappe.getTableDataName()); |
||||
TableDataColumn column; |
||||
String columnExp = (String) this.columnNameComboBox.getSelectedItem(); |
||||
if (isColumnName(columnExp)) { |
||||
String number = columnExp.substring(1); |
||||
Pattern pattern = Pattern.compile("[^\\d]"); |
||||
if (pattern.matcher(number).find()) { |
||||
column = TableDataColumn.createColumn(columnExp); |
||||
} else { |
||||
int serialNumber = Integer.parseInt(columnExp.substring(1)); |
||||
column = TableDataColumn.createColumn(serialNumber); |
||||
} |
||||
} else { |
||||
column = TableDataColumn.createColumn(columnExp); |
||||
} |
||||
dsColumn.setColumn(column); |
||||
return dsColumn; |
||||
} |
||||
|
||||
private boolean isColumnName(String columnExp) { |
||||
return StringUtils.isNotBlank(columnExp) && (columnExp.length() > 0 && columnExp.charAt(0) == '#') && !columnExp.endsWith("#"); |
||||
|
||||
} |
||||
|
||||
/** |
||||
* 添加监听事件 |
||||
* |
||||
* @param i 监听事件 |
||||
* |
||||
*/ |
||||
public void addListener(ItemListener i) { |
||||
itemListener = i; |
||||
tableNameComboBox.addItemListener(i); |
||||
columnNameComboBox.addItemListener(i); |
||||
} |
||||
|
||||
/** |
||||
* 移除监听事件 |
||||
* |
||||
* @param i 监听事件 |
||||
* |
||||
*/ |
||||
public void removeListener(ItemListener i) { |
||||
tableNameComboBox.removeItemListener(i); |
||||
columnNameComboBox.removeItemListener(i); |
||||
} |
||||
|
||||
private List<String> calculateColumnNameList() { |
||||
if (this.tableNameComboBox.getSelectedItem() != null) { |
||||
return this.tableNameComboBox.getSelectedItem().calculateColumnNameList(); |
||||
} |
||||
return new ArrayList<String>(); |
||||
} |
||||
package com.fr.design.dscolumn; |
||||
|
||||
import com.fr.base.Parameter; |
||||
import com.fr.data.SimpleDSColumn; |
||||
import com.fr.data.TableDataSource; |
||||
import com.fr.design.data.DesignTableDataManager; |
||||
import com.fr.design.data.datapane.TableDataComboBox; |
||||
import com.fr.design.data.tabledata.wrapper.TableDataWrapper; |
||||
import com.fr.design.dialog.BasicDialog; |
||||
import com.fr.design.dialog.BasicPane; |
||||
import com.fr.design.dialog.DialogActionAdapter; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.design.gui.icombobox.LazyComboBox; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.gui.itableeditorpane.ParameterTableModel; |
||||
import com.fr.design.gui.itableeditorpane.UITableEditorPane; |
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.mainframe.DesignerContext; |
||||
import com.fr.general.Inter; |
||||
import com.fr.general.data.TableDataColumn; |
||||
import com.fr.report.cell.CellElement; |
||||
import com.fr.report.cell.TemplateCellElement; |
||||
import com.fr.report.cell.cellattr.core.group.DSColumn; |
||||
import com.fr.stable.ParameterProvider; |
||||
import com.fr.stable.StringUtils; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
import java.awt.event.ActionEvent; |
||||
import java.awt.event.ActionListener; |
||||
import java.awt.event.ItemEvent; |
||||
import java.awt.event.ItemListener; |
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
import java.util.regex.Pattern; |
||||
|
||||
/** |
||||
* 数据集列动态参数设置组件 |
||||
* |
||||
* @author yaoh.wu |
||||
* @version 2017年7月26日 |
||||
* 9.0设计器更新,修改动态参数注入按钮部分,使其显示动态参数按钮时能在右侧边栏正常显示 |
||||
* @since 8.0 |
||||
*/ |
||||
public class SelectedDataColumnPane extends BasicPane { |
||||
private UITableEditorPane<ParameterProvider> editorPane; |
||||
private Parameter[] ps; |
||||
|
||||
TableDataComboBox tableNameComboBox; |
||||
LazyComboBox columnNameComboBox; |
||||
private ItemListener itemListener; |
||||
|
||||
private UIButton paramButton; |
||||
|
||||
public SelectedDataColumnPane() { |
||||
this(true); |
||||
} |
||||
|
||||
SelectedDataColumnPane(boolean showParameterButton) { |
||||
initComponent(showParameterButton); |
||||
} |
||||
|
||||
/** |
||||
* 初始化组件 |
||||
* |
||||
* @param showParameterButton 是否显示参数按钮 |
||||
*/ |
||||
public void initComponent(boolean showParameterButton) { |
||||
initTableNameComboBox(); |
||||
if (showParameterButton) { |
||||
initWithParameterButton(); |
||||
} |
||||
columnNameComboBox = new LazyComboBox() { |
||||
@Override |
||||
public Object[] load() { |
||||
List<String> l = calculateColumnNameList(); |
||||
return l.toArray(new String[l.size()]); |
||||
} |
||||
}; |
||||
columnNameComboBox.setEditable(true); |
||||
double f = TableLayout.FILL; |
||||
double p = TableLayout.PREFERRED; |
||||
UILabel label1 = new UILabel(Inter.getLocText("TableData")); |
||||
UILabel label3 = new UILabel(Inter.getLocText("DataColumn")); |
||||
if (showParameterButton) { |
||||
//todo 国际化
|
||||
UILabel label2 = new UILabel("param"); |
||||
Component[][] components = { |
||||
{label1, tableNameComboBox}, |
||||
{label2, paramButton}, |
||||
{label3, columnNameComboBox} |
||||
}; |
||||
this.setLayout(new BorderLayout()); |
||||
this.add(TableLayoutHelper.createTableLayoutPane(components, new double[]{p, p, p}, new double[]{p, f})); |
||||
} else { |
||||
double[] columnSize = {p, f}; |
||||
double[] rowSize = {p, p}; |
||||
Component[][] components = new Component[][]{ |
||||
new Component[]{label1, tableNameComboBox}, |
||||
new Component[]{label3, columnNameComboBox} |
||||
}; |
||||
JPanel jPanel = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); |
||||
this.setLayout(new BorderLayout()); |
||||
this.add(jPanel, BorderLayout.CENTER); |
||||
} |
||||
} |
||||
|
||||
|
||||
public void populate(TableDataSource source, TemplateCellElement cellElement) { |
||||
if (cellElement == null) { |
||||
return; |
||||
} |
||||
if (itemListener != null) { |
||||
removeListener(itemListener); |
||||
} |
||||
Object value = cellElement.getValue(); |
||||
if (!(value instanceof DSColumn)) { |
||||
return; |
||||
} |
||||
DSColumn dsColumn = (DSColumn) value; |
||||
String dsName = dsColumn.getDSName(); |
||||
tableNameComboBox.setSelectedTableDataByName(dsName); |
||||
columnNameComboBox.setSelectedItem(TableDataColumn.getColumnName(dsColumn.getColumn())); |
||||
ps = dsColumn.getParameters(); |
||||
|
||||
addListener(itemListener); |
||||
} |
||||
|
||||
public void update(CellElement cellElement) { |
||||
if (cellElement == null) { |
||||
return; |
||||
} |
||||
Object value = cellElement.getValue(); |
||||
if (this.tableNameComboBox.getSelectedItem() == null && this.columnNameComboBox.getSelectedItem() == null) { |
||||
return; |
||||
} |
||||
DSColumn dsColumn = null; |
||||
if (value == null || !(value instanceof DSColumn)) { |
||||
dsColumn = new DSColumn(); |
||||
cellElement.setValue(dsColumn); |
||||
} |
||||
dsColumn = (DSColumn) cellElement.getValue(); |
||||
|
||||
SimpleDSColumn simpleDSColumn = updateColumnPane(); |
||||
dsColumn.setDSName(simpleDSColumn.getDsName()); |
||||
dsColumn.setColumn(simpleDSColumn.getColumn()); |
||||
|
||||
dsColumn.setParameters((ps != null && ps.length > 0) ? ps : null); |
||||
} |
||||
|
||||
/** |
||||
* 更新面板 |
||||
* |
||||
* @return 更新后的值 |
||||
*/ |
||||
public SimpleDSColumn updateColumnPane() { |
||||
SimpleDSColumn dsColumn = new SimpleDSColumn(); |
||||
TableDataWrapper tableDataWrappe = this.tableNameComboBox.getSelectedItem(); |
||||
if (tableDataWrappe == null) { |
||||
return null; |
||||
} |
||||
dsColumn.setDsName(tableDataWrappe.getTableDataName()); |
||||
TableDataColumn column; |
||||
String columnExp = (String) this.columnNameComboBox.getSelectedItem(); |
||||
if (isColumnName(columnExp)) { |
||||
String number = columnExp.substring(1); |
||||
Pattern pattern = Pattern.compile("[^\\d]"); |
||||
if (pattern.matcher(number).find()) { |
||||
column = TableDataColumn.createColumn(columnExp); |
||||
} else { |
||||
int serialNumber = Integer.parseInt(columnExp.substring(1)); |
||||
column = TableDataColumn.createColumn(serialNumber); |
||||
} |
||||
} else { |
||||
column = TableDataColumn.createColumn(columnExp); |
||||
} |
||||
dsColumn.setColumn(column); |
||||
return dsColumn; |
||||
} |
||||
|
||||
/** |
||||
* 添加监听事件 |
||||
* |
||||
* @param i 监听事件 |
||||
*/ |
||||
public void addListener(ItemListener i) { |
||||
itemListener = i; |
||||
tableNameComboBox.addItemListener(i); |
||||
columnNameComboBox.addItemListener(i); |
||||
} |
||||
|
||||
/** |
||||
* 移除监听事件 |
||||
* |
||||
* @param i 监听事件 |
||||
*/ |
||||
public void removeListener(ItemListener i) { |
||||
tableNameComboBox.removeItemListener(i); |
||||
columnNameComboBox.removeItemListener(i); |
||||
} |
||||
|
||||
|
||||
protected void initTableNameComboBox() { |
||||
tableNameComboBox = new TableDataComboBox(DesignTableDataManager.getEditingTableDataSource()); |
||||
tableNameComboBox.addItemListener(new ItemListener() { |
||||
@Override |
||||
public void itemStateChanged(ItemEvent e) { |
||||
columnNameComboBox.setLoaded(false); |
||||
} |
||||
}); |
||||
tableNameComboBox.setPreferredSize(new Dimension(100, 20)); |
||||
} |
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return "DSColumn"; |
||||
} |
||||
|
||||
|
||||
private void initWithParameterButton() { |
||||
editorPane = new UITableEditorPane<ParameterProvider>(new ParameterTableModel()); |
||||
paramButton = new UIButton(Inter.getLocText("TableData_Dynamic_Parameter_Setting")); |
||||
paramButton.addActionListener(new ActionListener() { |
||||
public void actionPerformed(ActionEvent e) { |
||||
BasicDialog paramDialog = editorPane.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { |
||||
@Override |
||||
public void doOk() { |
||||
List<ParameterProvider> parameterList = editorPane.update(); |
||||
ps = parameterList.toArray(new Parameter[parameterList.size()]); |
||||
} |
||||
}); |
||||
|
||||
editorPane.populate(ps == null ? new Parameter[0] : ps); |
||||
paramDialog.setVisible(true); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
|
||||
private boolean isColumnName(String columnExp) { |
||||
return StringUtils.isNotBlank(columnExp) && (columnExp.length() > 0 && columnExp.charAt(0) == '#') && !columnExp.endsWith("#"); |
||||
} |
||||
|
||||
|
||||
private List<String> calculateColumnNameList() { |
||||
if (this.tableNameComboBox.getSelectedItem() != null) { |
||||
return this.tableNameComboBox.getSelectedItem().calculateColumnNameList(); |
||||
} |
||||
return new ArrayList<String>(); |
||||
} |
||||
} |
@ -0,0 +1,94 @@
|
||||
package com.fr.design.mainframe; |
||||
|
||||
import com.fr.base.Style; |
||||
import com.fr.design.actions.utils.ReportActionUtils; |
||||
import com.fr.design.designer.TargetComponent; |
||||
import com.fr.design.file.HistoryTemplateListPane; |
||||
import com.fr.design.gui.frpane.HyperlinkGroupPane; |
||||
import com.fr.design.gui.frpane.HyperlinkGroupPaneActionProvider; |
||||
import com.fr.general.FRFont; |
||||
import com.fr.grid.selection.CellSelection; |
||||
import com.fr.grid.selection.FloatSelection; |
||||
import com.fr.grid.selection.Selection; |
||||
import com.fr.js.NameJavaScriptGroup; |
||||
import com.fr.report.cell.CellElement; |
||||
import com.fr.report.cell.FloatElement; |
||||
import com.fr.report.elementcase.TemplateElementCase; |
||||
import com.fr.stable.Constants; |
||||
|
||||
import java.awt.*; |
||||
|
||||
/** |
||||
* Created by plough on 2017/7/26. |
||||
*/ |
||||
public class HyperlinkGroupPaneActionImpl implements HyperlinkGroupPaneActionProvider { |
||||
private static HyperlinkGroupPaneActionProvider instance; |
||||
|
||||
private HyperlinkGroupPaneActionImpl() { |
||||
} |
||||
|
||||
public static HyperlinkGroupPaneActionProvider getInstance() { |
||||
if (instance == null) { |
||||
instance = new HyperlinkGroupPaneActionImpl(); |
||||
} |
||||
return instance; |
||||
} |
||||
|
||||
@Override |
||||
public void populate(HyperlinkGroupPane hyperlinkGroupPane, TargetComponent elementCasePane) { |
||||
ElementCasePane reportPane = (ElementCasePane)elementCasePane; |
||||
final TemplateElementCase report = reportPane.getEditingElementCase(); |
||||
NameJavaScriptGroup nameHyperlinks = getNameJSGroup(reportPane, report); |
||||
hyperlinkGroupPane.populate(nameHyperlinks); |
||||
} |
||||
|
||||
private NameJavaScriptGroup getNameJSGroup(ElementCasePane reportPane, final TemplateElementCase report) { |
||||
NameJavaScriptGroup nameHyperlinks = null; |
||||
final Selection sel = reportPane.getSelection(); |
||||
if (sel instanceof FloatSelection) { |
||||
FloatElement selectedFloatElement = report.getFloatElement(((FloatSelection)sel).getSelectedFloatName()); |
||||
nameHyperlinks = selectedFloatElement.getNameHyperlinkGroup(); |
||||
} else { |
||||
CellElement editCellElement = report.getCellElement(((CellSelection)sel).getColumn(), ((CellSelection)sel).getRow()); |
||||
if (editCellElement != null) { |
||||
nameHyperlinks = editCellElement.getNameHyperlinkGroup(); |
||||
} |
||||
} |
||||
return nameHyperlinks; |
||||
} |
||||
|
||||
@Override |
||||
public void saveSettings(HyperlinkGroupPane hyperlinkGroupPane) { |
||||
// plough: 需要判断设计器是否初始化完成,不能用 HistoryTemplateListPane.getInstance().getCurrentEditingTemplate()
|
||||
JTemplate jt = DesignerContext.getDesignerFrame().getSelectedJTemplate(); |
||||
if (jt == null) { |
||||
return; |
||||
} |
||||
ElementCasePane reportPane = (ElementCasePane)jt.getCurrentElementCasePane(); |
||||
final TemplateElementCase report = reportPane.getEditingElementCase(); |
||||
final Selection sel = reportPane.getSelection(); |
||||
final NameJavaScriptGroup updateNameHyperlinks = hyperlinkGroupPane.updateJSGroup(); |
||||
if (sel instanceof FloatSelection) { |
||||
FloatElement selectedFloatElement = report.getFloatElement(((FloatSelection)sel).getSelectedFloatName()); |
||||
selectedFloatElement.setNameHyperlinkGroup(updateNameHyperlinks); |
||||
} else { |
||||
ReportActionUtils.actionIterateWithCellSelection((CellSelection)sel, report, new ReportActionUtils.IterAction() { |
||||
public void dealWith(CellElement editCellElement) { |
||||
Style elementStyle = editCellElement.getStyle(); |
||||
FRFont frFont = elementStyle.getFRFont(); |
||||
if (updateNameHyperlinks.size() > 0) { |
||||
frFont = frFont.applyForeground(Color.blue); |
||||
frFont = frFont.applyUnderline(Constants.LINE_THIN); |
||||
} else { |
||||
frFont = frFont.applyForeground(Color.black); |
||||
frFont = frFont.applyUnderline(Constants.LINE_NONE); |
||||
} |
||||
editCellElement.setStyle(elementStyle.deriveFRFont(frFont)); |
||||
editCellElement.setNameHyperlinkGroup(updateNameHyperlinks); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().fireTargetModified(); |
||||
} |
||||
} |
@ -0,0 +1,30 @@
|
||||
package com.fr.design.mainframe.cell; |
||||
|
||||
import com.fr.design.dialog.BasicPane; |
||||
import com.fr.report.cell.TemplateCellElement; |
||||
|
||||
/** |
||||
* 右侧单元格元素面板抽象类 |
||||
* |
||||
* @author yaoh.wu |
||||
* @version 2017年7月25日 |
||||
* @since 9.0 |
||||
*/ |
||||
public abstract class CellEditorPane extends BasicPane { |
||||
|
||||
public abstract String getIconPath(); |
||||
|
||||
public abstract String title4PopupWindow(); |
||||
|
||||
/** |
||||
* 从面板拿数据保存 |
||||
*/ |
||||
public abstract void update(); |
||||
|
||||
/** |
||||
* 更新面板数据 |
||||
* |
||||
* @param cellElement 单元格 |
||||
*/ |
||||
public abstract void populate(TemplateCellElement cellElement); |
||||
} |
@ -1,57 +1,57 @@
|
||||
package com.fr.design.mainframe.cell; |
||||
|
||||
import java.awt.BorderLayout; |
||||
|
||||
import javax.swing.BorderFactory; |
||||
import javax.swing.JPanel; |
||||
|
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.general.Inter; |
||||
import com.fr.design.selection.QuickEditor; |
||||
|
||||
/** |
||||
* QuickEditorRegion |
||||
* |
||||
* @editor zhou |
||||
* @since 2012-3-23下午3:21:36 |
||||
*/ |
||||
|
||||
public class QuickEditorRegion extends JPanel { |
||||
|
||||
public static QuickEditorRegion getInstance() { |
||||
return singleton; |
||||
} |
||||
|
||||
public static JPanel getEmptyEditor() { |
||||
if(EMPTY == null) { |
||||
EMPTY = new JPanel(new BorderLayout()); |
||||
UILabel content = new UILabel(Inter.getLocText(new String[]{"DataFunction-None", "HJS-Message", "Form-Widget_Property_Table"})+"!"); |
||||
content.setBorder(BorderFactory.createEmptyBorder(0, 70, 0, 0)); |
||||
EMPTY.add(content, BorderLayout.CENTER); |
||||
} |
||||
return EMPTY; |
||||
} |
||||
|
||||
private static QuickEditorRegion singleton = new QuickEditorRegion(); |
||||
private static JPanel EMPTY; |
||||
|
||||
public QuickEditorRegion() { |
||||
this.setLayout(new BorderLayout()); |
||||
} |
||||
|
||||
/** |
||||
* 传值 |
||||
* |
||||
* @param ePane |
||||
*/ |
||||
public void populate(final QuickEditor quickEditor) { |
||||
this.removeAll(); |
||||
if(quickEditor.getComponentCount() == 0) { |
||||
this.add(getEmptyEditor(), BorderLayout.CENTER); |
||||
} else { |
||||
this.add(quickEditor, BorderLayout.CENTER); |
||||
} |
||||
validate(); |
||||
repaint(); |
||||
} |
||||
package com.fr.design.mainframe.cell; |
||||
|
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.selection.QuickEditor; |
||||
import com.fr.general.Inter; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
|
||||
/** |
||||
* QuickEditorRegion |
||||
* |
||||
* @author zhou, yaoh.wu |
||||
* @version 2017年7月25日 |
||||
* @since 8.0 |
||||
*/ |
||||
|
||||
public class QuickEditorRegion extends JPanel { |
||||
|
||||
|
||||
private static QuickEditorRegion singleton = new QuickEditorRegion(); |
||||
private static JPanel EMPTY; |
||||
|
||||
private QuickEditorRegion() { |
||||
this.setLayout(new BorderLayout()); |
||||
} |
||||
|
||||
public static QuickEditorRegion getInstance() { |
||||
return singleton; |
||||
} |
||||
|
||||
public static JPanel getEmptyEditor() { |
||||
if (EMPTY == null) { |
||||
EMPTY = new JPanel(new BorderLayout()); |
||||
UILabel content = new UILabel(Inter.getLocText(new String[]{"DataFunction-None", "HJS-Message", "Form-Widget_Property_Table"}) + "!"); |
||||
content.setBorder(BorderFactory.createEmptyBorder(0, 70, 0, 0)); |
||||
EMPTY.add(content, BorderLayout.CENTER); |
||||
} |
||||
return EMPTY; |
||||
} |
||||
|
||||
/** |
||||
* 更新面板显示数据 |
||||
* |
||||
* @param currentEditor 当前正在编辑的单元格编辑器或者默认的单元格编辑器 |
||||
*/ |
||||
public void populate(final QuickEditor currentEditor) { |
||||
this.removeAll(); |
||||
if (currentEditor.getComponentCount() == 0) { |
||||
this.add(getEmptyEditor(), BorderLayout.CENTER); |
||||
} else { |
||||
this.add(currentEditor, BorderLayout.CENTER); |
||||
} |
||||
validate(); |
||||
repaint(); |
||||
} |
||||
} |
@ -1,238 +1,231 @@
|
||||
package com.fr.design.present; |
||||
|
||||
import java.awt.*; |
||||
|
||||
import javax.swing.JComponent; |
||||
|
||||
import com.fr.design.constants.UIConstants; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import javax.swing.JPanel; |
||||
import javax.swing.SpinnerNumberModel; |
||||
import javax.swing.border.TitledBorder; |
||||
import javax.swing.event.ChangeEvent; |
||||
import javax.swing.event.ChangeListener; |
||||
import javax.swing.event.DocumentEvent; |
||||
import javax.swing.event.DocumentListener; |
||||
|
||||
import com.fr.design.beans.FurtherBasicBeanPane; |
||||
import com.fr.design.border.UIRoundedBorder; |
||||
import com.fr.design.constants.UIConstants; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.gui.ispinner.UIBasicSpinner; |
||||
import com.fr.design.gui.itextfield.UITextField; |
||||
import com.fr.design.layout.FRGUIPaneFactory; |
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.utils.gui.GUICoreUtils; |
||||
import com.fr.general.Inter; |
||||
import com.fr.report.cell.cellattr.CurrencyLineAttr; |
||||
import com.fr.report.cell.cellattr.CurrencyLinePresent; |
||||
import com.fr.report.cell.painter.barcode.BarcodeException; |
||||
import com.fr.report.core.CurrencyLineImpl; |
||||
import com.fr.design.utils.gui.GUICoreUtils; |
||||
import com.fr.design.gui.ispinner.UIBasicSpinner; |
||||
|
||||
import javax.swing.*; |
||||
import javax.swing.border.TitledBorder; |
||||
import javax.swing.event.ChangeEvent; |
||||
import javax.swing.event.ChangeListener; |
||||
import javax.swing.event.DocumentEvent; |
||||
import javax.swing.event.DocumentListener; |
||||
import java.awt.*; |
||||
|
||||
/** |
||||
* |
||||
* @author zhou |
||||
* @since 2012-6-4下午7:34:52 |
||||
*/ |
||||
public class CurrencyLinePane extends FurtherBasicBeanPane<CurrencyLinePresent> { |
||||
private static final int VS_NUM = 4; |
||||
private static final int VG_NUM = 6; |
||||
private UIBasicSpinner intPartSpinner; |
||||
private UIBasicSpinner deciPartSpinner; |
||||
private UITextField textField; |
||||
private CurrencyLinePreviewPane CurrencyLinePreviewPane; |
||||
private int intPart = 9; |
||||
private int deciPart = 3; |
||||
|
||||
private static final int POSITION = 8; |
||||
ChangeListener listener2 = new ChangeListener() { |
||||
|
||||
@Override |
||||
public void stateChanged(ChangeEvent e) { |
||||
CurrencyLinePreviewPane.setObject(textField.getText(), update()); |
||||
} |
||||
|
||||
}; |
||||
|
||||
DocumentListener listener = new DocumentListener() { |
||||
@Override |
||||
public void insertUpdate(DocumentEvent e) { |
||||
CurrencyLinePreviewPane.setObject(textField.getText(), update()); |
||||
} |
||||
|
||||
@Override |
||||
public void removeUpdate(DocumentEvent e) { |
||||
CurrencyLinePreviewPane.setObject(textField.getText(), update()); |
||||
} |
||||
|
||||
@Override |
||||
public void changedUpdate(DocumentEvent e) { |
||||
CurrencyLinePreviewPane.setObject(textField.getText(), update()); |
||||
} |
||||
}; |
||||
|
||||
public CurrencyLinePane() { |
||||
this.initComponents(); |
||||
} |
||||
|
||||
protected void initComponents() { |
||||
// 整数位选择
|
||||
intPartSpinner = new UIBasicSpinner(new SpinnerNumberModel(9, 1, 20, 1)); |
||||
intPartSpinner.setPreferredSize(new Dimension(45, 20)); |
||||
|
||||
// 小数位选择
|
||||
deciPartSpinner = new UIBasicSpinner(new SpinnerNumberModel(2, 1, 10, 1)); |
||||
deciPartSpinner.setPreferredSize(new Dimension(45, 20)); |
||||
// 预览区域
|
||||
textField = new UITextField(10); |
||||
|
||||
CurrencyLinePreviewPane = new CurrencyLinePreviewPane(); |
||||
CurrencyLinePreviewPane.setPreferredSize(new Dimension(0, 145)); |
||||
JPanel borderPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||
TitledBorder titledBorder = new TitledBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, 5), Inter.getLocText("StyleFormat-Sample"), 4, 2, this.getFont(), UIConstants.LINE_COLOR); |
||||
borderPane.setBorder(titledBorder); |
||||
borderPane.add(CurrencyLinePreviewPane, BorderLayout.CENTER); |
||||
|
||||
textField.requestFocus(); |
||||
|
||||
double vs = VS_NUM; |
||||
double vg = VG_NUM; |
||||
double p = TableLayout.PREFERRED; |
||||
double f = TableLayout.FILL; |
||||
double[] columnSize = { p, f }; |
||||
double[] rowSize = { p, p,p,p }; |
||||
private UIBasicSpinner intPartSpinner; |
||||
private UIBasicSpinner deciPartSpinner; |
||||
private UITextField textField; |
||||
private CurrencyLinePreviewPane CurrencyLinePreviewPane; |
||||
private int intPart = 9; |
||||
private int deciPart = 3; |
||||
|
||||
private static final int POSITION = 8; |
||||
ChangeListener listener2 = new ChangeListener() { |
||||
|
||||
@Override |
||||
public void stateChanged(ChangeEvent e) { |
||||
CurrencyLinePreviewPane.setObject(textField.getText(), update()); |
||||
} |
||||
|
||||
}; |
||||
|
||||
DocumentListener listener = new DocumentListener() { |
||||
@Override |
||||
public void insertUpdate(DocumentEvent e) { |
||||
CurrencyLinePreviewPane.setObject(textField.getText(), update()); |
||||
} |
||||
|
||||
@Override |
||||
public void removeUpdate(DocumentEvent e) { |
||||
CurrencyLinePreviewPane.setObject(textField.getText(), update()); |
||||
} |
||||
|
||||
@Override |
||||
public void changedUpdate(DocumentEvent e) { |
||||
CurrencyLinePreviewPane.setObject(textField.getText(), update()); |
||||
} |
||||
}; |
||||
|
||||
public CurrencyLinePane() { |
||||
this.initComponents(); |
||||
} |
||||
|
||||
protected void initComponents() { |
||||
// 整数位选择
|
||||
intPartSpinner = new UIBasicSpinner(new SpinnerNumberModel(9, 1, 20, 1)); |
||||
intPartSpinner.setPreferredSize(new Dimension(135, 20)); |
||||
|
||||
// 小数位选择
|
||||
deciPartSpinner = new UIBasicSpinner(new SpinnerNumberModel(2, 1, 10, 1)); |
||||
deciPartSpinner.setPreferredSize(new Dimension(135, 20)); |
||||
// 预览区域
|
||||
textField = new UITextField(10); |
||||
|
||||
CurrencyLinePreviewPane = new CurrencyLinePreviewPane(); |
||||
CurrencyLinePreviewPane.setPreferredSize(new Dimension(0, 145)); |
||||
JPanel borderPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||
TitledBorder titledBorder = new TitledBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, 5), Inter.getLocText("StyleFormat-Sample"), 4, 2, this.getFont(), UIConstants.LINE_COLOR); |
||||
borderPane.setBorder(titledBorder); |
||||
borderPane.add(CurrencyLinePreviewPane, BorderLayout.CENTER); |
||||
|
||||
textField.requestFocus(); |
||||
|
||||
double vs = VS_NUM; |
||||
double vg = VG_NUM; |
||||
double p = TableLayout.PREFERRED; |
||||
double f = TableLayout.FILL; |
||||
double[] columnSize = {p, f}; |
||||
double[] rowSize = {p, p, p, p}; |
||||
|
||||
|
||||
Component[][] components = new Component[][]{ |
||||
new Component[]{new UILabel(Inter.getLocText("Data") + ":", UILabel.RIGHT),textField}, |
||||
new Component[]{borderPane,null}, |
||||
new Component[]{new UILabel(Inter.getLocText("IntPart") + ":", UILabel.RIGHT), groupPane(intPartSpinner)}, |
||||
new Component[]{new UILabel(Inter.getLocText("DeciPart") + ":", UILabel.RIGHT), groupPane(deciPartSpinner)} |
||||
new Component[]{new UILabel(Inter.getLocText("Data"), UILabel.LEFT), textField}, |
||||
new Component[]{borderPane, null}, |
||||
new Component[]{new UILabel(Inter.getLocText("IntPart"), UILabel.LEFT), groupPane(intPartSpinner)}, |
||||
new Component[]{new UILabel(Inter.getLocText("DeciPart"), UILabel.LEFT), groupPane(deciPartSpinner)} |
||||
|
||||
} ; |
||||
}; |
||||
|
||||
JPanel linePane = TableLayoutHelper.createTableLayoutPane(components,rowSize,columnSize); |
||||
JPanel linePane = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); |
||||
this.setLayout(new BorderLayout()); |
||||
this.add(linePane,BorderLayout.CENTER); |
||||
this.add(linePane, BorderLayout.CENTER); |
||||
|
||||
|
||||
|
||||
|
||||
textField.getDocument().addDocumentListener(listener); |
||||
intPartSpinner.addChangeListener(listener2); |
||||
deciPartSpinner.addChangeListener(listener2); |
||||
textField.setText("123456.78"); |
||||
} |
||||
textField.getDocument().addDocumentListener(listener); |
||||
intPartSpinner.addChangeListener(listener2); |
||||
deciPartSpinner.addChangeListener(listener2); |
||||
textField.setText("123456.78"); |
||||
} |
||||
|
||||
@Override |
||||
@Override |
||||
/** |
||||
* 窗口名 |
||||
* @return 同上 |
||||
* @return 同上 |
||||
*/ |
||||
public String title4PopupWindow() { |
||||
return Inter.getLocText("Currency_Line"); |
||||
} |
||||
public String title4PopupWindow() { |
||||
return Inter.getLocText("Currency_Line"); |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* |
||||
*/ |
||||
public CurrencyLineAttr update() { |
||||
CurrencyLineAttr currencylineAttr = new CurrencyLineAttr(); |
||||
currencylineAttr.setintPart(((Integer)this.intPartSpinner.getValue()).intValue()); |
||||
currencylineAttr.setdeciPart(((Integer)this.deciPartSpinner.getValue()).intValue()); |
||||
return currencylineAttr; |
||||
} |
||||
public CurrencyLineAttr update() { |
||||
CurrencyLineAttr currencylineAttr = new CurrencyLineAttr(); |
||||
currencylineAttr.setintPart(((Integer) this.intPartSpinner.getValue()).intValue()); |
||||
currencylineAttr.setdeciPart(((Integer) this.deciPartSpinner.getValue()).intValue()); |
||||
return currencylineAttr; |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* |
||||
*/ |
||||
public void setintPart(int intpart) { |
||||
this.intPart = intpart; |
||||
} |
||||
public void setintPart(int intpart) { |
||||
this.intPart = intpart; |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* |
||||
*/ |
||||
public void setdeciPart(int decipart) { |
||||
this.deciPart = decipart; |
||||
} |
||||
public void setdeciPart(int decipart) { |
||||
this.deciPart = decipart; |
||||
} |
||||
|
||||
private class CurrencyLinePreviewPane extends JPanel { |
||||
private String text; |
||||
CurrencyLineAttr currencyLineAttr; |
||||
private class CurrencyLinePreviewPane extends JPanel { |
||||
private String text; |
||||
CurrencyLineAttr currencyLineAttr; |
||||
|
||||
public CurrencyLinePreviewPane() { |
||||
public CurrencyLinePreviewPane() { |
||||
// setBackground(Color.white);
|
||||
} |
||||
|
||||
public void setObject(String text, CurrencyLineAttr currencyLineAttr) { |
||||
this.text = text; |
||||
this.currencyLineAttr = currencyLineAttr; |
||||
GUICoreUtils.repaint(this); |
||||
} |
||||
|
||||
@Override |
||||
public void paintComponent(Graphics g) { |
||||
super.paintComponent(g); |
||||
if (text == null){ |
||||
return; |
||||
} |
||||
|
||||
public void setObject(String text, CurrencyLineAttr currencyLineAttr) { |
||||
this.text = text; |
||||
this.currencyLineAttr = currencyLineAttr; |
||||
GUICoreUtils.repaint(this); |
||||
} |
||||
|
||||
@Override |
||||
public void paintComponent(Graphics g) { |
||||
super.paintComponent(g); |
||||
if (text == null) { |
||||
return; |
||||
} |
||||
Dimension size = this.getSize(); |
||||
try { |
||||
CurrencyLineImpl currencyLineImpl = new CurrencyLineImpl(text, currencyLineAttr); |
||||
currencyLineImpl.draw((Graphics2D) g, (int) (size.getWidth()), (int) (size.getHeight())); |
||||
} catch (BarcodeException e) { |
||||
Color oldColor = g.getColor(); |
||||
g.setColor(Color.red); |
||||
g.drawString(e.getMessage(), (int) (size.getWidth() / POSITION), (int) (size.getHeight() / POSITION)); |
||||
g.setColor(oldColor); |
||||
} |
||||
Dimension size = this.getSize(); |
||||
try { |
||||
CurrencyLineImpl currencyLineImpl = new CurrencyLineImpl(text, currencyLineAttr); |
||||
currencyLineImpl.draw((Graphics2D)g, (int)(size.getWidth()), (int)(size.getHeight())); |
||||
} catch (BarcodeException e) { |
||||
Color oldColor = g.getColor(); |
||||
g.setColor(Color.red); |
||||
g.drawString(e.getMessage(), (int)(size.getWidth() / POSITION), (int)(size.getHeight() / POSITION)); |
||||
g.setColor(oldColor); |
||||
} |
||||
} |
||||
|
||||
} |
||||
|
||||
protected static JPanel groupPane(JComponent comp) { |
||||
JPanel jp = new JPanel(); |
||||
jp.setBorder(null); |
||||
jp.setLayout(new FlowLayout(FlowLayout.LEFT)); |
||||
jp.add(comp); |
||||
return jp; |
||||
} |
||||
|
||||
@Override |
||||
} |
||||
|
||||
} |
||||
|
||||
protected static JPanel groupPane(JComponent comp) { |
||||
JPanel jp = new JPanel(); |
||||
jp.setBorder(null); |
||||
jp.setLayout(new FlowLayout(FlowLayout.LEFT)); |
||||
jp.add(comp); |
||||
return jp; |
||||
} |
||||
|
||||
@Override |
||||
/** |
||||
* 是否为该类型 |
||||
* @param ob 对象 |
||||
* @return 同上 |
||||
* |
||||
* |
||||
*/ |
||||
public boolean accept(Object ob) { |
||||
return ob instanceof CurrencyLinePresent; |
||||
} |
||||
public boolean accept(Object ob) { |
||||
return ob instanceof CurrencyLinePresent; |
||||
} |
||||
|
||||
/** |
||||
* 重置 |
||||
* 重置 |
||||
*/ |
||||
public void reset() { |
||||
this.intPartSpinner.setValue(9); |
||||
this.deciPartSpinner.setValue(3); |
||||
} |
||||
|
||||
@Override |
||||
public void populateBean(CurrencyLinePresent ob) { |
||||
CurrencyLineAttr currencyLine = ob.getCurrencyLineAttr(); |
||||
if (currencyLine == null) { |
||||
currencyLine = new CurrencyLineAttr(); |
||||
} |
||||
this.intPartSpinner.setValue(new Integer(currencyLine.getintPart())); |
||||
this.deciPartSpinner.setValue(new Integer(currencyLine.getdeciPart())); |
||||
} |
||||
|
||||
@Override |
||||
public CurrencyLinePresent updateBean() { |
||||
CurrencyLineAttr currencylineAttr = new CurrencyLineAttr(); |
||||
currencylineAttr.setintPart(((Integer)this.intPartSpinner.getValue()).intValue()); |
||||
currencylineAttr.setdeciPart(((Integer)this.deciPartSpinner.getValue()).intValue()); |
||||
return new CurrencyLinePresent(currencylineAttr); |
||||
} |
||||
public void reset() { |
||||
this.intPartSpinner.setValue(9); |
||||
this.deciPartSpinner.setValue(3); |
||||
} |
||||
|
||||
@Override |
||||
public void populateBean(CurrencyLinePresent ob) { |
||||
CurrencyLineAttr currencyLine = ob.getCurrencyLineAttr(); |
||||
if (currencyLine == null) { |
||||
currencyLine = new CurrencyLineAttr(); |
||||
} |
||||
this.intPartSpinner.setValue(new Integer(currencyLine.getintPart())); |
||||
this.deciPartSpinner.setValue(new Integer(currencyLine.getdeciPart())); |
||||
} |
||||
|
||||
@Override |
||||
public CurrencyLinePresent updateBean() { |
||||
CurrencyLineAttr currencylineAttr = new CurrencyLineAttr(); |
||||
currencylineAttr.setintPart(((Integer) this.intPartSpinner.getValue()).intValue()); |
||||
currencylineAttr.setdeciPart(((Integer) this.deciPartSpinner.getValue()).intValue()); |
||||
return new CurrencyLinePresent(currencylineAttr); |
||||
} |
||||
|
||||
} |
@ -1,123 +1,129 @@
|
||||
package com.fr.quickeditor; |
||||
|
||||
import com.fr.base.BaseUtils; |
||||
import com.fr.design.actions.utils.DeprecatedActionManager; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.gui.itextfield.UITextField; |
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.mainframe.DesignerContext; |
||||
import com.fr.design.mainframe.ElementCasePane; |
||||
import com.fr.design.selection.QuickEditor; |
||||
import com.fr.design.utils.gui.GUICoreUtils; |
||||
import com.fr.general.Inter; |
||||
import com.fr.grid.selection.CellSelection; |
||||
import com.fr.report.cell.TemplateCellElement; |
||||
import com.fr.stable.ColumnRow; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
import java.awt.event.ActionEvent; |
||||
import java.awt.event.ActionListener; |
||||
import java.awt.event.MouseAdapter; |
||||
import java.awt.event.MouseEvent; |
||||
|
||||
/** |
||||
* |
||||
* @author zhou |
||||
* @since 2012-7-23下午5:16:53 |
||||
*/ |
||||
public abstract class CellQuickEditor extends QuickEditor<ElementCasePane> { |
||||
|
||||
protected UITextField columnRowTextField; |
||||
protected UIButton cellElementEditButton; |
||||
protected TemplateCellElement cellElement; |
||||
|
||||
public CellQuickEditor() { |
||||
double p = TableLayout.PREFERRED; |
||||
double f = TableLayout.FILL; |
||||
double[] columnSize = { p, f }; |
||||
double[] rowSize = { p,p,p}; |
||||
|
||||
Component[][] components = new Component[][]{ |
||||
new Component[]{new UILabel(" "+Inter.getLocText("Cell")),columnRowTextField = initColumnRowTextField()}, |
||||
new Component[]{new UILabel(Inter.getLocText("HF-Insert_Content")+" "),cellElementEditButton = initCellElementEditButton()}, |
||||
new Component[]{createCenterBody(),null} |
||||
}; |
||||
|
||||
JPanel panel = TableLayoutHelper.createTableLayoutPane(components,rowSize,columnSize); |
||||
this.setLayout(new BorderLayout()); |
||||
this.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); |
||||
this.add(panel,BorderLayout.CENTER); |
||||
|
||||
|
||||
|
||||
} |
||||
|
||||
protected UIButton initCellElementEditButton() { |
||||
final UIButton cellElementEditButton = new UIButton(BaseUtils.readIcon("/com/fr/design/images/buttonicon/add.png")); |
||||
cellElementEditButton.addMouseListener(new MouseAdapter() { |
||||
|
||||
@Override |
||||
public void mousePressed(MouseEvent evt) { |
||||
GUICoreUtils.showPopMenuWithParentWidth(DeprecatedActionManager.getCellMenu(tc).createJPopupMenu(), cellElementEditButton, 0, cellElementEditButton.getY() - 6); |
||||
} |
||||
}); |
||||
return cellElementEditButton; |
||||
} |
||||
|
||||
protected UITextField initColumnRowTextField() { |
||||
final UITextField columnRowTextField = new UITextField(4); |
||||
// barry:输入位置定位单元格
|
||||
columnRowTextField.addActionListener(new ActionListener() { |
||||
|
||||
@Override |
||||
public void actionPerformed(ActionEvent e) { |
||||
ColumnRow columnRowEdit = ColumnRow.valueOf(columnRowTextField.getText()); |
||||
|
||||
// barry:检查输入是否正确
|
||||
if (!ColumnRow.validate(columnRowEdit)) { |
||||
|
||||
Object[] options = { Inter.getLocText("OK") }; |
||||
JOptionPane.showOptionDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("Please_Input_Letters+Numbers(A1,AA1,A11....)"), Inter.getLocText("Warning"), |
||||
JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]); |
||||
|
||||
// 重新选中当前的selection,把columnRowTextField
|
||||
tc.setSelection(tc.getSelection()); |
||||
return; |
||||
} |
||||
|
||||
JScrollBar verticalBar = tc.getVerticalScrollBar(), horizontalBar = tc.getHorizontalScrollBar(); |
||||
int m = columnRowEdit.getColumn(), n = columnRowEdit.getRow(); |
||||
|
||||
verticalBar.setMaximum(n); |
||||
verticalBar.setValue(n < 21 ? verticalBar.getValue() : n - 20); |
||||
horizontalBar.setMaximum(m); |
||||
horizontalBar.setValue(m < 13 ? horizontalBar.getValue() : m - 12); |
||||
|
||||
tc.setSelection(new CellSelection(m, n, 1, 1)); |
||||
tc.requestFocus(); |
||||
} |
||||
}); |
||||
return columnRowTextField; |
||||
} |
||||
|
||||
public abstract JComponent createCenterBody(); |
||||
|
||||
@Override |
||||
protected void refresh() { |
||||
CellSelection cs = (CellSelection)tc.getSelection(); |
||||
ColumnRow columnRow = ColumnRow.valueOf(cs.getColumn(), cs.getRow()); |
||||
columnRowTextField.setText(columnRow.toString()); |
||||
cellElement = tc.getEditingElementCase().getTemplateCellElement(cs.getColumn(), cs.getRow()); |
||||
refreshDetails(); |
||||
} |
||||
|
||||
protected abstract void refreshDetails(); |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
package com.fr.quickeditor; |
||||
|
||||
import com.fr.base.BaseUtils; |
||||
import com.fr.design.actions.utils.DeprecatedActionManager; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.gui.itextfield.UITextField; |
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.mainframe.DesignerContext; |
||||
import com.fr.design.mainframe.ElementCasePane; |
||||
import com.fr.design.selection.QuickEditor; |
||||
import com.fr.design.utils.gui.GUICoreUtils; |
||||
import com.fr.general.Inter; |
||||
import com.fr.grid.selection.CellSelection; |
||||
import com.fr.report.cell.TemplateCellElement; |
||||
import com.fr.stable.ColumnRow; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
import java.awt.event.ActionEvent; |
||||
import java.awt.event.ActionListener; |
||||
import java.awt.event.MouseAdapter; |
||||
import java.awt.event.MouseEvent; |
||||
|
||||
/** |
||||
* @author zhou |
||||
* @since 2012-7-23下午5:16:53 |
||||
*/ |
||||
public abstract class CellQuickEditor extends QuickEditor<ElementCasePane> { |
||||
|
||||
protected UITextField columnRowTextField; |
||||
private UIButton cellElementEditButton; |
||||
protected TemplateCellElement cellElement; |
||||
|
||||
public CellQuickEditor() { |
||||
double p = TableLayout.PREFERRED; |
||||
double f = TableLayout.FILL; |
||||
double[] columnSize = {p, f}; |
||||
double[] rowSize = {p, p, p}; |
||||
Component[][] components = new Component[][]{ |
||||
new Component[]{new UILabel(" " + Inter.getLocText("Cell")), columnRowTextField = initColumnRowTextField()}, |
||||
new Component[]{new UILabel(Inter.getLocText("HF-Insert_Content") + " "), cellElementEditButton = initCellElementEditButton()}, |
||||
new Component[]{createCenterBody(), null} |
||||
}; |
||||
JPanel panel = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); |
||||
this.setLayout(new BorderLayout()); |
||||
this.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); |
||||
this.add(panel, BorderLayout.CENTER); |
||||
} |
||||
|
||||
/** |
||||
* 初始化添加按钮 |
||||
* TODO 9.0 换成下拉菜单后原来的快捷键不好处理,先跳过。 |
||||
* |
||||
* @return UIButton |
||||
*/ |
||||
private UIButton initCellElementEditButton() { |
||||
final UIButton cellElementEditButton = new UIButton(BaseUtils.readIcon("/com/fr/design/images/buttonicon/add.png")); |
||||
cellElementEditButton.addMouseListener(new MouseAdapter() { |
||||
|
||||
@Override |
||||
public void mousePressed(MouseEvent evt) { |
||||
GUICoreUtils.showPopMenuWithParentWidth(DeprecatedActionManager.getCellMenu(tc).createJPopupMenu(), cellElementEditButton, 0, cellElementEditButton.getY() - 6); |
||||
} |
||||
}); |
||||
return cellElementEditButton; |
||||
} |
||||
|
||||
/** |
||||
* 初始化单元格域,存储当前选择的单元格,例A3,B4等 |
||||
* |
||||
* @return 单元格信息文本域 |
||||
*/ |
||||
private UITextField initColumnRowTextField() { |
||||
final UITextField columnRowTextField = new UITextField(4); |
||||
|
||||
// barry:输入位置定位单元格
|
||||
columnRowTextField.addActionListener(new ActionListener() { |
||||
@Override |
||||
public void actionPerformed(ActionEvent e) { |
||||
ColumnRow columnRowEdit = ColumnRow.valueOf(columnRowTextField.getText()); |
||||
// barry:检查输入是否正确
|
||||
if (!ColumnRow.validate(columnRowEdit)) { |
||||
Object[] options = {Inter.getLocText("OK")}; |
||||
JOptionPane.showOptionDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("Please_Input_Letters+Numbers(A1,AA1,A11....)"), Inter.getLocText("Warning"), |
||||
JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]); |
||||
// 重新选中当前的selection,把columnRowTextField
|
||||
tc.setSelection(tc.getSelection()); |
||||
return; |
||||
} |
||||
JScrollBar verticalBar = tc.getVerticalScrollBar(), horizontalBar = tc.getHorizontalScrollBar(); |
||||
int m = columnRowEdit.getColumn(), n = columnRowEdit.getRow(); |
||||
verticalBar.setMaximum(n); |
||||
verticalBar.setValue(n < 21 ? verticalBar.getValue() : n - 20); |
||||
horizontalBar.setMaximum(m); |
||||
horizontalBar.setValue(m < 13 ? horizontalBar.getValue() : m - 12); |
||||
tc.setSelection(new CellSelection(m, n, 1, 1)); |
||||
tc.requestFocus(); |
||||
} |
||||
}); |
||||
return columnRowTextField; |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 初始化详细信息面板 |
||||
* |
||||
* @return JComponent 待显示的详细信息面板 |
||||
*/ |
||||
public abstract JComponent createCenterBody(); |
||||
|
||||
/** |
||||
* 刷新 |
||||
*/ |
||||
@Override |
||||
protected void refresh() { |
||||
CellSelection cs = (CellSelection) tc.getSelection(); |
||||
ColumnRow columnRow = ColumnRow.valueOf(cs.getColumn(), cs.getRow()); |
||||
columnRowTextField.setText(columnRow.toString()); |
||||
cellElement = tc.getEditingElementCase().getTemplateCellElement(cs.getColumn(), cs.getRow()); |
||||
refreshDetails(); |
||||
} |
||||
|
||||
/** |
||||
* 刷新详细信息 |
||||
*/ |
||||
protected abstract void refreshDetails(); |
||||
} |
@ -1,61 +1,63 @@
|
||||
package com.fr.quickeditor.cellquick; |
||||
|
||||
import java.awt.event.ActionEvent; |
||||
import java.awt.event.ActionListener; |
||||
|
||||
import javax.swing.BorderFactory; |
||||
import javax.swing.JComponent; |
||||
|
||||
import com.fr.base.BaseUtils; |
||||
import com.fr.design.cell.editor.BiasTextPainterCellEditor.BiasTextPainterPane; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.design.mainframe.DesignerContext; |
||||
import com.fr.design.dialog.DialogActionAdapter; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.general.Inter; |
||||
import com.fr.quickeditor.CellQuickEditor; |
||||
import com.fr.report.cell.painter.BiasTextPainter; |
||||
|
||||
public class CellBiasTextPainterEditor extends CellQuickEditor { |
||||
|
||||
@Override |
||||
public JComponent createCenterBody() { |
||||
UIButton editbutton = new UIButton(Inter.getLocText("Edit"), BaseUtils.readIcon("/com/fr/design/images/m_insert/bias.png")); |
||||
editbutton.addActionListener(new ActionListener() { |
||||
|
||||
@Override |
||||
public void actionPerformed(ActionEvent e) { |
||||
showEditingDialog(); |
||||
} |
||||
}); |
||||
editbutton.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 0)); |
||||
editbutton.setMargin(null); |
||||
editbutton.setOpaque(false); |
||||
return editbutton; |
||||
} |
||||
|
||||
private void showEditingDialog() { |
||||
final BiasTextPainter oldbiasTextPainter = (BiasTextPainter)cellElement.getValue(); |
||||
final BiasTextPainterPane biasTextPainterPane = new BiasTextPainterPane(); |
||||
biasTextPainterPane.populate(oldbiasTextPainter); |
||||
biasTextPainterPane.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { |
||||
|
||||
@Override |
||||
public void doOk() { |
||||
BiasTextPainter newbiasTextPainter = biasTextPainterPane.update(); |
||||
if (!ComparatorUtils.equals(oldbiasTextPainter, newbiasTextPainter)) { |
||||
cellElement.setValue(newbiasTextPainter); |
||||
fireTargetModified(); |
||||
} |
||||
} |
||||
|
||||
}).setVisible(true); |
||||
} |
||||
|
||||
@Override |
||||
protected void refreshDetails() { |
||||
// TODO Auto-generated method stub
|
||||
|
||||
} |
||||
|
||||
package com.fr.quickeditor.cellquick; |
||||
|
||||
import com.fr.base.BaseUtils; |
||||
import com.fr.design.cell.editor.BiasTextPainterCellEditor.BiasTextPainterPane; |
||||
import com.fr.design.dialog.DialogActionAdapter; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.design.mainframe.DesignerContext; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.general.Inter; |
||||
import com.fr.quickeditor.CellQuickEditor; |
||||
import com.fr.report.cell.painter.BiasTextPainter; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.event.ActionEvent; |
||||
import java.awt.event.ActionListener; |
||||
|
||||
/** |
||||
* 单元格元素斜线编辑器 |
||||
* TODO 9.0 大体没有改动 |
||||
*/ |
||||
public class CellBiasTextPainterEditor extends CellQuickEditor { |
||||
|
||||
@Override |
||||
public JComponent createCenterBody() { |
||||
UIButton editbutton = new UIButton(Inter.getLocText("Edit"), BaseUtils.readIcon("/com/fr/design/images/m_insert/bias.png")); |
||||
editbutton.addActionListener(new ActionListener() { |
||||
|
||||
@Override |
||||
public void actionPerformed(ActionEvent e) { |
||||
showEditingDialog(); |
||||
} |
||||
}); |
||||
editbutton.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 0)); |
||||
editbutton.setMargin(null); |
||||
editbutton.setOpaque(false); |
||||
return editbutton; |
||||
} |
||||
|
||||
private void showEditingDialog() { |
||||
final BiasTextPainter oldbiasTextPainter = (BiasTextPainter) cellElement.getValue(); |
||||
final BiasTextPainterPane biasTextPainterPane = new BiasTextPainterPane(); |
||||
biasTextPainterPane.populate(oldbiasTextPainter); |
||||
biasTextPainterPane.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { |
||||
|
||||
@Override |
||||
public void doOk() { |
||||
BiasTextPainter newbiasTextPainter = biasTextPainterPane.update(); |
||||
if (!ComparatorUtils.equals(oldbiasTextPainter, newbiasTextPainter)) { |
||||
cellElement.setValue(newbiasTextPainter); |
||||
fireTargetModified(); |
||||
} |
||||
} |
||||
|
||||
}).setVisible(true); |
||||
} |
||||
|
||||
@Override |
||||
protected void refreshDetails() { |
||||
// TODO Auto-generated method stub
|
||||
|
||||
} |
||||
|
||||
} |
@ -1,111 +1,201 @@
|
||||
package com.fr.quickeditor.cellquick; |
||||
|
||||
import com.fr.design.actions.columnrow.DSColumnAdvancedAction; |
||||
import com.fr.design.actions.columnrow.DSColumnBasicAction; |
||||
import com.fr.design.actions.columnrow.DSColumnConditionAction; |
||||
import com.fr.design.constants.LayoutConstants; |
||||
import com.fr.design.dscolumn.ResultSetGroupDockingPane; |
||||
import com.fr.design.dscolumn.SelectedDataColumnPane; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.quickeditor.CellQuickEditor; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
import java.awt.event.ItemEvent; |
||||
import java.awt.event.ItemListener; |
||||
|
||||
public class CellDSColumnEditor extends CellQuickEditor { |
||||
private JPanel dsColumnRegion; |
||||
private JPanel centerPane; |
||||
private SelectedDataColumnPane dataPane; |
||||
private ResultSetGroupDockingPane groupPane; |
||||
private ItemListener groupListener = new ItemListener() { |
||||
|
||||
@Override |
||||
public void itemStateChanged(ItemEvent e) { |
||||
if (e == null) { |
||||
//分组-高级-自定义点确定的时候传进来null的e,但是这时候应该触发保存
|
||||
groupPane.update(); |
||||
fireTargetModified(); |
||||
return; |
||||
} |
||||
if (e.getStateChange() == ItemEvent.DESELECTED) { |
||||
if (!isEditing) { |
||||
return; |
||||
} |
||||
groupPane.update(); |
||||
fireTargetModified(); |
||||
} |
||||
} |
||||
}; |
||||
|
||||
private ItemListener dataListener = new ItemListener() { |
||||
|
||||
@Override |
||||
public void itemStateChanged(ItemEvent e) { |
||||
if (e.getStateChange() == ItemEvent.SELECTED) { |
||||
if (!isEditing) { |
||||
return; |
||||
} |
||||
dataPane.update(cellElement); |
||||
fireTargetModified(); |
||||
} |
||||
} |
||||
}; |
||||
|
||||
private CellDSColumnEditor() { |
||||
super(); |
||||
} |
||||
|
||||
@Override |
||||
public JComponent createCenterBody() { |
||||
double p = TableLayout.PREFERRED; |
||||
double f = TableLayout.FILL; |
||||
double[] columnSize = {p, f}; |
||||
double[] rowSize = {p, p, p, p}; |
||||
Component[][] components = new Component[][]{}; |
||||
dsColumnRegion = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); |
||||
centerPane = new JPanel(new BorderLayout(0, 0)); |
||||
centerPane.add(dsColumnRegion, BorderLayout.CENTER); |
||||
return centerPane; |
||||
} |
||||
|
||||
// august:这里面的东西都全部重新动态生成,不然容易出错
|
||||
@Override |
||||
protected void refreshDetails() { |
||||
JPanel pane = new JPanel(new BorderLayout(LayoutConstants.HGAP_LARGE, 0)); |
||||
pane.add(new UIButton(new DSColumnConditionAction(tc)), BorderLayout.WEST); |
||||
pane.add(new UIButton(new DSColumnAdvancedAction(tc)), BorderLayout.CENTER); |
||||
double p = TableLayout.PREFERRED; |
||||
double f = TableLayout.FILL; |
||||
double[] columnSize = {p, f}; |
||||
double[] rowSize = {p, p, p, p}; |
||||
Component[][] components = new Component[][]{ |
||||
new Component[]{new UIButton(new DSColumnBasicAction(tc)), null}, |
||||
new Component[]{pane, null}, |
||||
new Component[]{dataPane = new SelectedDataColumnPane(false), null}, |
||||
new Component[]{groupPane = new ResultSetGroupDockingPane(tc), null} |
||||
}; |
||||
centerPane.removeAll(); |
||||
dsColumnRegion = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); |
||||
centerPane.add(dsColumnRegion, BorderLayout.CENTER); |
||||
dataPane.addListener(dataListener); |
||||
groupPane.addListener(groupListener); |
||||
dataPane.populate(null, cellElement); |
||||
groupPane.populate(cellElement); |
||||
this.validate(); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* for 关闭时候释放 |
||||
*/ |
||||
public void release () { |
||||
super.release(); |
||||
dsColumnRegion = null; |
||||
centerPane = null; |
||||
} |
||||
|
||||
package com.fr.quickeditor.cellquick; |
||||
|
||||
import com.fr.design.actions.columnrow.DSColumnConditionAction; |
||||
import com.fr.design.dscolumn.DSColumnAdvancedEditorPane; |
||||
import com.fr.design.dscolumn.DSColumnBasicEditorPane; |
||||
import com.fr.design.dscolumn.ResultSetGroupDockingPane; |
||||
import com.fr.design.dscolumn.SelectedDataColumnPane; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.design.gui.ibutton.UIHeadGroup; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.mainframe.cell.CellEditorPane; |
||||
import com.fr.design.utils.gui.GUICoreUtils; |
||||
import com.fr.quickeditor.CellQuickEditor; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
import java.awt.event.ItemEvent; |
||||
import java.awt.event.ItemListener; |
||||
import java.util.ArrayList; |
||||
|
||||
/** |
||||
* 单元格元素 数据列编辑器 |
||||
* |
||||
* @author yaoh.wu |
||||
* @version 2017年7月24日 |
||||
* @since 9.0 |
||||
*/ |
||||
public class CellDSColumnEditor extends CellQuickEditor { |
||||
|
||||
private JPanel dsColumnRegion; |
||||
private JPanel centerPane; |
||||
//数据集列选择组件
|
||||
private SelectedDataColumnPane dataPane; |
||||
//数据分组设置组件
|
||||
private ResultSetGroupDockingPane groupPane; |
||||
//过滤条件面板
|
||||
private JPanel conditionPane; |
||||
// 基本和高级设置
|
||||
private ArrayList<CellEditorPane> paneList; |
||||
// 基本和高级设置 卡片布局
|
||||
private CardLayout card; |
||||
// 基本和高级设置 容器面板
|
||||
private JPanel center; |
||||
// 卡片布局TAB切换按钮
|
||||
private UIHeadGroup tabsHeaderIconPane; |
||||
// 分组设置监听器
|
||||
private ItemListener groupListener = new ItemListener() { |
||||
@Override |
||||
public void itemStateChanged(ItemEvent e) { |
||||
if (e == null) { |
||||
//分组-高级-自定义点确定的时候传进来null的e,但是这时候应该触发保存
|
||||
groupPane.update(); |
||||
fireTargetModified(); |
||||
return; |
||||
} |
||||
if (e.getStateChange() == ItemEvent.DESELECTED) { |
||||
if (!isEditing) { |
||||
return; |
||||
} |
||||
groupPane.update(); |
||||
fireTargetModified(); |
||||
} |
||||
} |
||||
}; |
||||
//数据集列设置监听器
|
||||
private ItemListener dataListener = new ItemListener() { |
||||
@Override |
||||
public void itemStateChanged(ItemEvent e) { |
||||
if (e.getStateChange() == ItemEvent.SELECTED) { |
||||
if (!isEditing) { |
||||
return; |
||||
} |
||||
dataPane.update(cellElement); |
||||
fireTargetModified(); |
||||
} |
||||
} |
||||
}; |
||||
|
||||
private CellDSColumnEditor() { |
||||
super(); |
||||
} |
||||
|
||||
/** |
||||
* Test Main |
||||
* |
||||
* @param args 参数 |
||||
*/ |
||||
public static void main(String[] args) { |
||||
JFrame jf = new JFrame("test"); |
||||
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); |
||||
JPanel content = (JPanel) jf.getContentPane(); |
||||
content.setLayout(new BorderLayout()); |
||||
content.add(new CellDSColumnEditor(), BorderLayout.CENTER); |
||||
GUICoreUtils.centerWindow(jf); |
||||
jf.setSize(220, 400); |
||||
jf.setVisible(true); |
||||
} |
||||
|
||||
/** |
||||
* 创建面板占位 |
||||
* |
||||
* @return JComponent 详细信息面板 |
||||
*/ |
||||
@Override |
||||
public JComponent createCenterBody() { |
||||
this.createPanes(); |
||||
this.createSwitchTab(); |
||||
dsColumnRegion = new JPanel(new BorderLayout()); |
||||
dsColumnRegion.add(tabsHeaderIconPane, BorderLayout.NORTH); |
||||
dsColumnRegion.add(center, BorderLayout.CENTER); |
||||
centerPane = new JPanel(new BorderLayout()); |
||||
centerPane.add(dsColumnRegion, BorderLayout.CENTER); |
||||
return centerPane; |
||||
} |
||||
|
||||
/** |
||||
* 内容全部重新动态生成,不然容易出错 |
||||
* 刷新详细信息面板 |
||||
*/ |
||||
@Override |
||||
protected void refreshDetails() { |
||||
|
||||
this.createPanes(); |
||||
this.createSwitchTab(); |
||||
dsColumnRegion = new JPanel(new BorderLayout()); |
||||
dsColumnRegion.add(tabsHeaderIconPane, BorderLayout.NORTH); |
||||
dsColumnRegion.add(center, BorderLayout.CENTER); |
||||
//必须removeAll之后再添加;重新再实例化一个centerJPanel,因为对象变了会显示不出来
|
||||
centerPane.removeAll(); |
||||
centerPane.add(dsColumnRegion, BorderLayout.CENTER); |
||||
for (CellEditorPane cellEditorPane : paneList) { |
||||
cellEditorPane.populate(cellElement); |
||||
} |
||||
this.validate(); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 关闭时候释放 |
||||
*/ |
||||
public void release() { |
||||
super.release(); |
||||
dsColumnRegion = null; |
||||
centerPane = null; |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 初始化基本和高级设置切换tab |
||||
*/ |
||||
private void createSwitchTab() { |
||||
String[] iconArray = new String[paneList.size()]; |
||||
card = new CardLayout(); |
||||
center = new JPanel(card); |
||||
center.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0)); |
||||
for (int i = 0; i < paneList.size(); i++) { |
||||
CellEditorPane pane = paneList.get(i); |
||||
iconArray[i] = pane.getIconPath(); |
||||
center.add(pane, pane.title4PopupWindow()); |
||||
} |
||||
tabsHeaderIconPane = new UIHeadGroup(iconArray) { |
||||
@Override |
||||
public void tabChanged(int index) { |
||||
card.show(center, paneList.get(index).title4PopupWindow()); |
||||
paneList.get(index).populate(cellElement); |
||||
} |
||||
}; |
||||
tabsHeaderIconPane.setNeedLeftRightOutLine(false); |
||||
} |
||||
|
||||
/** |
||||
* 刷新数据列基本和高级设置面板 |
||||
*/ |
||||
private void createPanes() { |
||||
paneList = new ArrayList<>(); |
||||
|
||||
/*基本设置面板*/ |
||||
this.dataPane = new SelectedDataColumnPane(); |
||||
this.groupPane = new ResultSetGroupDockingPane(tc); |
||||
double p = TableLayout.PREFERRED, f = TableLayout.FILL; |
||||
double[] rowSize = {p}, columnSize = {p, f}; |
||||
UILabel uiLabel = new UILabel("filter"); |
||||
UIButton uiButton = new UIButton(); |
||||
if (tc != null) { |
||||
//第一次初始化时tc为空,引发NullPointerException
|
||||
uiButton = new UIButton(new DSColumnConditionAction(tc)); |
||||
} |
||||
Component[][] components = new Component[][]{ |
||||
new Component[]{uiLabel, uiButton} |
||||
}; |
||||
this.conditionPane = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); |
||||
dataPane.addListener(dataListener); |
||||
groupPane.addListener(groupListener); |
||||
paneList.add(new DSColumnBasicEditorPane(cellElement, dataPane, groupPane, conditionPane)); |
||||
|
||||
/*高级设置面板*/ |
||||
paneList.add(new DSColumnAdvancedEditorPane()); |
||||
} |
||||
} |
@ -1,75 +1,77 @@
|
||||
package com.fr.quickeditor.cellquick; |
||||
|
||||
import java.awt.event.ActionEvent; |
||||
import java.awt.event.ActionListener; |
||||
|
||||
import javax.swing.BorderFactory; |
||||
import javax.swing.JComponent; |
||||
|
||||
import com.fr.base.BaseUtils; |
||||
import com.fr.base.Style; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.design.mainframe.DesignerContext; |
||||
import com.fr.design.report.SelectImagePane; |
||||
import com.fr.design.dialog.DialogActionAdapter; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.general.Inter; |
||||
import com.fr.quickeditor.CellQuickEditor; |
||||
import com.fr.report.cell.cellattr.CellImage; |
||||
|
||||
public class CellImageQuickEditor extends CellQuickEditor { |
||||
private static CellImageQuickEditor THIS; |
||||
|
||||
public static final CellImageQuickEditor getInstance() { |
||||
if(THIS == null) { |
||||
THIS = new CellImageQuickEditor(); |
||||
} |
||||
return THIS; |
||||
} |
||||
|
||||
private CellImageQuickEditor() { |
||||
super(); |
||||
} |
||||
|
||||
@Override |
||||
public JComponent createCenterBody() { |
||||
UIButton editbutton = new UIButton(Inter.getLocText("Edit"), BaseUtils.readIcon("/com/fr/design/images/m_insert/image.png")); |
||||
editbutton.addActionListener(new ActionListener() { |
||||
|
||||
@Override |
||||
public void actionPerformed(ActionEvent e) { |
||||
showEditingDialog(); |
||||
} |
||||
}); |
||||
editbutton.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 0)); |
||||
editbutton.setMargin(null); |
||||
editbutton.setOpaque(false); |
||||
return editbutton; |
||||
} |
||||
|
||||
private void showEditingDialog() { |
||||
final SelectImagePane imageEditorPane = new SelectImagePane(); |
||||
imageEditorPane.populate(cellElement); |
||||
final Object oldValue = cellElement.getValue(); |
||||
final Style oldStyle = cellElement.getStyle(); |
||||
imageEditorPane.showWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { |
||||
|
||||
@Override |
||||
public void doOk() { |
||||
CellImage cellImage = imageEditorPane.update(); |
||||
if (!ComparatorUtils.equals(cellImage.getImage(), oldValue) || !ComparatorUtils.equals(cellImage.getStyle(), oldStyle)) { |
||||
cellElement.setValue(cellImage.getImage()); |
||||
cellElement.setStyle(cellImage.getStyle()); |
||||
fireTargetModified(); |
||||
} |
||||
} |
||||
|
||||
}).setVisible(true); |
||||
} |
||||
|
||||
@Override |
||||
protected void refreshDetails() { |
||||
|
||||
} |
||||
|
||||
package com.fr.quickeditor.cellquick; |
||||
|
||||
import com.fr.base.BaseUtils; |
||||
import com.fr.base.Style; |
||||
import com.fr.design.dialog.DialogActionAdapter; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.design.mainframe.DesignerContext; |
||||
import com.fr.design.report.SelectImagePane; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.general.Inter; |
||||
import com.fr.quickeditor.CellQuickEditor; |
||||
import com.fr.report.cell.cellattr.CellImage; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.event.ActionEvent; |
||||
import java.awt.event.ActionListener; |
||||
|
||||
/** |
||||
* 单元格元素图片编辑器 |
||||
* TODO 9.0大体上没有改动 |
||||
*/ |
||||
public class CellImageQuickEditor extends CellQuickEditor { |
||||
private static CellImageQuickEditor THIS; |
||||
|
||||
public static final CellImageQuickEditor getInstance() { |
||||
if (THIS == null) { |
||||
THIS = new CellImageQuickEditor(); |
||||
} |
||||
return THIS; |
||||
} |
||||
|
||||
private CellImageQuickEditor() { |
||||
super(); |
||||
} |
||||
|
||||
@Override |
||||
public JComponent createCenterBody() { |
||||
UIButton editbutton = new UIButton(Inter.getLocText("Edit"), BaseUtils.readIcon("/com/fr/design/images/m_insert/image.png")); |
||||
editbutton.addActionListener(new ActionListener() { |
||||
|
||||
@Override |
||||
public void actionPerformed(ActionEvent e) { |
||||
showEditingDialog(); |
||||
} |
||||
}); |
||||
editbutton.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 0)); |
||||
editbutton.setMargin(null); |
||||
editbutton.setOpaque(false); |
||||
return editbutton; |
||||
} |
||||
|
||||
private void showEditingDialog() { |
||||
final SelectImagePane imageEditorPane = new SelectImagePane(); |
||||
imageEditorPane.populate(cellElement); |
||||
final Object oldValue = cellElement.getValue(); |
||||
final Style oldStyle = cellElement.getStyle(); |
||||
imageEditorPane.showWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { |
||||
|
||||
@Override |
||||
public void doOk() { |
||||
CellImage cellImage = imageEditorPane.update(); |
||||
if (!ComparatorUtils.equals(cellImage.getImage(), oldValue) || !ComparatorUtils.equals(cellImage.getStyle(), oldStyle)) { |
||||
cellElement.setValue(cellImage.getImage()); |
||||
cellElement.setStyle(cellImage.getStyle()); |
||||
fireTargetModified(); |
||||
} |
||||
} |
||||
|
||||
}).setVisible(true); |
||||
} |
||||
|
||||
@Override |
||||
protected void refreshDetails() { |
||||
|
||||
} |
||||
|
||||
} |
@ -1,50 +1,50 @@
|
||||
package com.fr.quickeditor.cellquick; |
||||
|
||||
import javax.swing.BorderFactory; |
||||
import javax.swing.JComponent; |
||||
|
||||
import com.fr.design.actions.insert.cell.RichTextCellAction; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.general.Inter; |
||||
import com.fr.quickeditor.CellQuickEditor; |
||||
|
||||
public class CellRichTextEditor extends CellQuickEditor { |
||||
private UIButton subReportButton; |
||||
private static CellRichTextEditor THIS; |
||||
|
||||
public static final CellRichTextEditor getInstance() { |
||||
if(THIS == null) { |
||||
THIS = new CellRichTextEditor(); |
||||
} |
||||
return THIS; |
||||
} |
||||
|
||||
private CellRichTextEditor() { |
||||
super(); |
||||
} |
||||
|
||||
/** |
||||
* 创建界面上中间的部分 |
||||
* |
||||
* @return 界面元素 |
||||
* |
||||
* |
||||
* @date 2014-12-7-下午9:41:52 |
||||
* |
||||
*/ |
||||
public JComponent createCenterBody() { |
||||
subReportButton = new UIButton(); |
||||
subReportButton.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 0)); |
||||
subReportButton.setMargin(null); |
||||
subReportButton.setOpaque(false); |
||||
return subReportButton; |
||||
} |
||||
|
||||
@Override |
||||
protected void refreshDetails() { |
||||
RichTextCellAction subReportCellAction = new RichTextCellAction(tc); |
||||
subReportCellAction.setName(Inter.getLocText("FR-Designer_RichTextEditor")); |
||||
subReportButton.setAction(subReportCellAction); |
||||
} |
||||
|
||||
package com.fr.quickeditor.cellquick; |
||||
|
||||
import com.fr.design.actions.insert.cell.RichTextCellAction; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.general.Inter; |
||||
import com.fr.quickeditor.CellQuickEditor; |
||||
|
||||
import javax.swing.*; |
||||
|
||||
/** |
||||
* 单元格元素富文本编辑器 |
||||
* TODO 9.0 大体上没有改动 |
||||
*/ |
||||
public class CellRichTextEditor extends CellQuickEditor { |
||||
private UIButton subReportButton; |
||||
private static CellRichTextEditor THIS; |
||||
|
||||
public static final CellRichTextEditor getInstance() { |
||||
if (THIS == null) { |
||||
THIS = new CellRichTextEditor(); |
||||
} |
||||
return THIS; |
||||
} |
||||
|
||||
private CellRichTextEditor() { |
||||
super(); |
||||
} |
||||
|
||||
/** |
||||
* 创建界面上中间的部分 |
||||
* |
||||
* @return 界面元素 |
||||
* @date 2014-12-7-下午9:41:52 |
||||
*/ |
||||
public JComponent createCenterBody() { |
||||
subReportButton = new UIButton(); |
||||
subReportButton.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 0)); |
||||
subReportButton.setMargin(null); |
||||
subReportButton.setOpaque(false); |
||||
return subReportButton; |
||||
} |
||||
|
||||
@Override |
||||
protected void refreshDetails() { |
||||
RichTextCellAction subReportCellAction = new RichTextCellAction(tc); |
||||
subReportCellAction.setName(Inter.getLocText("FR-Designer_RichTextEditor")); |
||||
subReportButton.setAction(subReportCellAction); |
||||
} |
||||
|
||||
} |
@ -1,151 +1,155 @@
|
||||
package com.fr.quickeditor.cellquick; |
||||
|
||||
import java.awt.event.KeyAdapter; |
||||
import java.awt.event.KeyEvent; |
||||
|
||||
import javax.swing.JComponent; |
||||
import javax.swing.event.DocumentEvent; |
||||
import javax.swing.event.DocumentListener; |
||||
|
||||
import com.fr.base.Formula; |
||||
import com.fr.base.Style; |
||||
import com.fr.base.TextFormat; |
||||
import com.fr.design.gui.itextfield.UITextField; |
||||
import com.fr.grid.selection.CellSelection; |
||||
import com.fr.quickeditor.CellQuickEditor; |
||||
import com.fr.report.ReportHelper; |
||||
import com.fr.report.cell.DefaultTemplateCellElement; |
||||
import com.fr.stable.ColumnRow; |
||||
import com.fr.stable.StringUtils; |
||||
|
||||
public class CellStringQuickEditor extends CellQuickEditor { |
||||
|
||||
|
||||
private static CellStringQuickEditor THIS; |
||||
|
||||
private UITextField stringTextField; |
||||
|
||||
private boolean isEditing = false; |
||||
|
||||
public static final CellStringQuickEditor getInstance() { |
||||
if (THIS == null) { |
||||
THIS = new CellStringQuickEditor(); |
||||
} |
||||
return THIS; |
||||
} |
||||
|
||||
// august:如果是原来编辑的是公式,要保留公式里的这些属性,不然在公式和字符串转化时,就会丢失这些属性设置
|
||||
private boolean reserveInResult = false; |
||||
private boolean reserveOnWriteOrAnaly = true; |
||||
|
||||
private CellStringQuickEditor() { |
||||
super(); |
||||
} |
||||
|
||||
@Override |
||||
/** |
||||
* |
||||
*/ |
||||
public JComponent createCenterBody() { |
||||
stringTextField = new UITextField(); |
||||
stringTextField.addKeyListener(new KeyAdapter() { |
||||
|
||||
@Override |
||||
public void keyReleased(KeyEvent e) { |
||||
if (tc != null) { |
||||
tc.getGrid().dispatchEvent(e); |
||||
} |
||||
} |
||||
|
||||
}); |
||||
|
||||
return stringTextField; |
||||
} |
||||
|
||||
DocumentListener documentListener = new DocumentListener() { |
||||
|
||||
@Override |
||||
public void insertUpdate(DocumentEvent e) { |
||||
changeReportPaneCell(stringTextField.getText().trim()); |
||||
} |
||||
|
||||
@Override |
||||
public void removeUpdate(DocumentEvent e) { |
||||
changeReportPaneCell(stringTextField.getText().trim()); |
||||
} |
||||
|
||||
@Override |
||||
public void changedUpdate(DocumentEvent e) { |
||||
changeReportPaneCell(stringTextField.getText().trim()); |
||||
} |
||||
|
||||
}; |
||||
|
||||
protected void changeReportPaneCell(String tmpText) { |
||||
isEditing = true; |
||||
//refresh一下,如果单元格内有新添加的控件,此时并不知道
|
||||
CellSelection cs1 = (CellSelection) tc.getSelection(); |
||||
ColumnRow columnRow = ColumnRow.valueOf(cs1.getColumn(), cs1.getRow()); |
||||
columnRowTextField.setText(columnRow.toString()); |
||||
cellElement = tc.getEditingElementCase().getTemplateCellElement(cs1.getColumn(), cs1.getRow()); |
||||
|
||||
if (cellElement == null) { |
||||
CellSelection cs = (CellSelection) tc.getSelection(); |
||||
cellElement = new DefaultTemplateCellElement(cs.getColumn(), cs.getRow()); |
||||
tc.getEditingElementCase().addCellElement(cellElement, false); |
||||
} |
||||
if (tmpText != null && (tmpText.length() > 0 && tmpText.charAt(0) == '=')) { |
||||
Formula textFormula = new Formula(tmpText); |
||||
textFormula.setReserveInResult(reserveInResult); |
||||
textFormula.setReserveOnWriteOrAnaly(reserveOnWriteOrAnaly); |
||||
cellElement.setValue(textFormula); |
||||
} else { |
||||
Style style = cellElement.getStyle(); |
||||
if (cellElement != null && style != null && style.getFormat() != null && style.getFormat() == TextFormat.getInstance()) { |
||||
cellElement.setValue(tmpText); |
||||
} else { |
||||
cellElement.setValue(ReportHelper.convertGeneralStringAccordingToExcel(tmpText)); |
||||
} |
||||
} |
||||
fireTargetModified(); |
||||
stringTextField.requestFocus(); |
||||
isEditing = false; |
||||
} |
||||
|
||||
@Override |
||||
protected void refreshDetails() { |
||||
String str = null; |
||||
if (cellElement == null) { |
||||
str = StringUtils.EMPTY; |
||||
} else { |
||||
Object value = cellElement.getValue(); |
||||
if (value == null) { |
||||
str = StringUtils.EMPTY; |
||||
} else if (value instanceof Formula) { |
||||
Formula formula = (Formula) value; |
||||
str = formula.getContent(); |
||||
reserveInResult = formula.isReserveInResult(); |
||||
reserveOnWriteOrAnaly = formula.isReserveOnWriteOrAnaly(); |
||||
} else { |
||||
str = value.toString(); |
||||
} |
||||
} |
||||
showText(str); |
||||
stringTextField.setEditable(tc.isSelectedOneCell()); |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* @param str |
||||
*/ |
||||
public void showText(String str) { |
||||
// 本编辑框在输入过程中引发的后续事件如果还调用了本框的setText方法不能执行
|
||||
if (isEditing) { |
||||
return; |
||||
} |
||||
stringTextField.getDocument().removeDocumentListener(documentListener); |
||||
stringTextField.setText(str); |
||||
stringTextField.getDocument().addDocumentListener(documentListener); |
||||
} |
||||
|
||||
package com.fr.quickeditor.cellquick; |
||||
|
||||
import com.fr.base.Formula; |
||||
import com.fr.base.Style; |
||||
import com.fr.base.TextFormat; |
||||
import com.fr.design.gui.itextfield.UITextField; |
||||
import com.fr.grid.selection.CellSelection; |
||||
import com.fr.quickeditor.CellQuickEditor; |
||||
import com.fr.report.ReportHelper; |
||||
import com.fr.report.cell.DefaultTemplateCellElement; |
||||
import com.fr.stable.ColumnRow; |
||||
import com.fr.stable.StringUtils; |
||||
|
||||
import javax.swing.*; |
||||
import javax.swing.event.DocumentEvent; |
||||
import javax.swing.event.DocumentListener; |
||||
import java.awt.event.KeyAdapter; |
||||
import java.awt.event.KeyEvent; |
||||
|
||||
/** |
||||
* |
||||
*/ |
||||
public class CellStringQuickEditor extends CellQuickEditor { |
||||
//instance
|
||||
private static CellStringQuickEditor THIS; |
||||
//文本域
|
||||
//TODO 9.0 文本域要根据具体文本数量自适应大小,比较难搞,先跳过。
|
||||
private UITextField stringTextField; |
||||
//编辑状态
|
||||
private boolean isEditing = false; |
||||
|
||||
public static CellStringQuickEditor getInstance() { |
||||
if (THIS == null) { |
||||
THIS = new CellStringQuickEditor(); |
||||
} |
||||
return THIS; |
||||
} |
||||
|
||||
//august:如果是原来编辑的是公式,要保留公式里的这些属性,不然在公式和字符串转化时,就会丢失这些属性设置。
|
||||
private boolean reserveInResult = false; |
||||
private boolean reserveOnWriteOrAnaly = true; |
||||
|
||||
private DocumentListener documentListener = new DocumentListener() { |
||||
@Override |
||||
public void insertUpdate(DocumentEvent e) { |
||||
changeReportPaneCell(stringTextField.getText().trim()); |
||||
} |
||||
|
||||
@Override |
||||
public void removeUpdate(DocumentEvent e) { |
||||
changeReportPaneCell(stringTextField.getText().trim()); |
||||
} |
||||
|
||||
@Override |
||||
public void changedUpdate(DocumentEvent e) { |
||||
changeReportPaneCell(stringTextField.getText().trim()); |
||||
} |
||||
|
||||
}; |
||||
|
||||
private CellStringQuickEditor() { |
||||
super(); |
||||
} |
||||
|
||||
/** |
||||
* 详细信息面板 |
||||
* todo 文本框可自适应大小,公式编辑也是在这边,如果是公式那么要加一个公式编辑器的触发按钮 |
||||
*/ |
||||
@Override |
||||
public JComponent createCenterBody() { |
||||
stringTextField = new UITextField(); |
||||
stringTextField.addKeyListener(new KeyAdapter() { |
||||
@Override |
||||
public void keyReleased(KeyEvent e) { |
||||
if (tc != null) { |
||||
tc.getGrid().dispatchEvent(e); |
||||
} |
||||
} |
||||
}); |
||||
return stringTextField; |
||||
} |
||||
|
||||
|
||||
private void changeReportPaneCell(String tmpText) { |
||||
isEditing = true; |
||||
//refresh一下,如果单元格内有新添加的控件,此时并不知道
|
||||
CellSelection cs1 = (CellSelection) tc.getSelection(); |
||||
ColumnRow columnRow = ColumnRow.valueOf(cs1.getColumn(), cs1.getRow()); |
||||
columnRowTextField.setText(columnRow.toString()); |
||||
cellElement = tc.getEditingElementCase().getTemplateCellElement(cs1.getColumn(), cs1.getRow()); |
||||
|
||||
if (cellElement == null) { |
||||
CellSelection cs = (CellSelection) tc.getSelection(); |
||||
cellElement = new DefaultTemplateCellElement(cs.getColumn(), cs.getRow()); |
||||
tc.getEditingElementCase().addCellElement(cellElement, false); |
||||
} |
||||
if (tmpText != null && (tmpText.length() > 0 && tmpText.charAt(0) == '=')) { |
||||
Formula textFormula = new Formula(tmpText); |
||||
textFormula.setReserveInResult(reserveInResult); |
||||
textFormula.setReserveOnWriteOrAnaly(reserveOnWriteOrAnaly); |
||||
cellElement.setValue(textFormula); |
||||
} else { |
||||
Style style = cellElement.getStyle(); |
||||
if (style != null && style.getFormat() != null && style.getFormat() == TextFormat.getInstance()) { |
||||
cellElement.setValue(tmpText); |
||||
} else { |
||||
cellElement.setValue(ReportHelper.convertGeneralStringAccordingToExcel(tmpText)); |
||||
} |
||||
} |
||||
fireTargetModified(); |
||||
stringTextField.requestFocus(); |
||||
isEditing = false; |
||||
} |
||||
|
||||
/** |
||||
* 刷新详细内容 |
||||
*/ |
||||
@Override |
||||
protected void refreshDetails() { |
||||
String str; |
||||
if (cellElement == null) { |
||||
str = StringUtils.EMPTY; |
||||
} else { |
||||
Object value = cellElement.getValue(); |
||||
if (value == null) { |
||||
str = StringUtils.EMPTY; |
||||
} else if (value instanceof Formula) { |
||||
Formula formula = (Formula) value; |
||||
str = formula.getContent(); |
||||
reserveInResult = formula.isReserveInResult(); |
||||
reserveOnWriteOrAnaly = formula.isReserveOnWriteOrAnaly(); |
||||
} else { |
||||
str = value.toString(); |
||||
} |
||||
} |
||||
showText(str); |
||||
stringTextField.setEditable(tc.isSelectedOneCell()); |
||||
} |
||||
|
||||
/** |
||||
* 显示文本 |
||||
* |
||||
* @param str 文本 |
||||
*/ |
||||
public void showText(String str) { |
||||
// 正在编辑时不处理
|
||||
if (isEditing) { |
||||
return; |
||||
} |
||||
stringTextField.getDocument().removeDocumentListener(documentListener); |
||||
stringTextField.setText(str); |
||||
stringTextField.getDocument().addDocumentListener(documentListener); |
||||
} |
||||
|
||||
} |
@ -1,42 +1,45 @@
|
||||
package com.fr.quickeditor.cellquick; |
||||
|
||||
import javax.swing.BorderFactory; |
||||
import javax.swing.JComponent; |
||||
|
||||
import com.fr.design.actions.insert.cell.SubReportCellAction; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.general.Inter; |
||||
import com.fr.quickeditor.CellQuickEditor; |
||||
|
||||
public class CellSubReportEditor extends CellQuickEditor { |
||||
private UIButton subReportButton; |
||||
private static CellSubReportEditor THIS; |
||||
|
||||
public static final CellSubReportEditor getInstance() { |
||||
if(THIS == null) { |
||||
THIS = new CellSubReportEditor(); |
||||
} |
||||
return THIS; |
||||
} |
||||
|
||||
private CellSubReportEditor() { |
||||
super(); |
||||
} |
||||
|
||||
@Override |
||||
public JComponent createCenterBody() { |
||||
subReportButton = new UIButton(); |
||||
subReportButton.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 0)); |
||||
subReportButton.setMargin(null); |
||||
subReportButton.setOpaque(false); |
||||
return subReportButton; |
||||
} |
||||
|
||||
@Override |
||||
protected void refreshDetails() { |
||||
SubReportCellAction subReportCellAction = new SubReportCellAction(tc); |
||||
subReportCellAction.setName(Inter.getLocText(new String[]{"Edit", "Sub_Report"})); |
||||
subReportButton.setAction(subReportCellAction); |
||||
} |
||||
|
||||
package com.fr.quickeditor.cellquick; |
||||
|
||||
import com.fr.design.actions.insert.cell.SubReportCellAction; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.general.Inter; |
||||
import com.fr.quickeditor.CellQuickEditor; |
||||
|
||||
import javax.swing.*; |
||||
|
||||
/** |
||||
* 单元格元素子报表编辑器 |
||||
* TODO 9.0大体上没有改动 |
||||
*/ |
||||
public class CellSubReportEditor extends CellQuickEditor { |
||||
private UIButton subReportButton; |
||||
private static CellSubReportEditor THIS; |
||||
|
||||
public static final CellSubReportEditor getInstance() { |
||||
if (THIS == null) { |
||||
THIS = new CellSubReportEditor(); |
||||
} |
||||
return THIS; |
||||
} |
||||
|
||||
private CellSubReportEditor() { |
||||
super(); |
||||
} |
||||
|
||||
@Override |
||||
public JComponent createCenterBody() { |
||||
subReportButton = new UIButton(); |
||||
subReportButton.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 0)); |
||||
subReportButton.setMargin(null); |
||||
subReportButton.setOpaque(false); |
||||
return subReportButton; |
||||
} |
||||
|
||||
@Override |
||||
protected void refreshDetails() { |
||||
SubReportCellAction subReportCellAction = new SubReportCellAction(tc); |
||||
subReportCellAction.setName(Inter.getLocText(new String[]{"Edit", "Sub_Report"})); |
||||
subReportButton.setAction(subReportCellAction); |
||||
} |
||||
|
||||
} |
@ -1,69 +1,67 @@
|
||||
package com.fr.design.data.datapane; |
||||
|
||||
import java.awt.*; |
||||
|
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import javax.swing.JPanel; |
||||
|
||||
import com.fr.design.constants.LayoutConstants; |
||||
import com.fr.design.data.datapane.preview.PreviewLabel; |
||||
import com.fr.design.data.datapane.preview.PreviewLabel.Previewable; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.mainframe.DesignerBean; |
||||
import com.fr.design.mainframe.DesignerContext; |
||||
import com.fr.general.Inter; |
||||
import com.fr.design.utils.gui.GUICoreUtils; |
||||
import com.fr.general.Inter; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
|
||||
public class VerticalChoosePane extends ChoosePane implements DesignerBean{ |
||||
public class VerticalChoosePane extends ChoosePane implements DesignerBean { |
||||
|
||||
public VerticalChoosePane(Previewable previewable) { |
||||
this(previewable, -1); |
||||
} |
||||
public VerticalChoosePane(Previewable previewable) { |
||||
this(previewable, -1); |
||||
} |
||||
|
||||
public VerticalChoosePane(Previewable previewable, int labelSize) { |
||||
super(previewable, labelSize); |
||||
DesignerContext.setDesignerBean("databasename", this); |
||||
} |
||||
public VerticalChoosePane(Previewable previewable, int labelSize) { |
||||
super(previewable, labelSize); |
||||
DesignerContext.setDesignerBean("databasename", this); |
||||
} |
||||
|
||||
@Override |
||||
protected void initComponentsLayout(PreviewLabel previewLabel, int labelSize) { |
||||
double p = TableLayout.PREFERRED; |
||||
double f = TableLayout.FILL; |
||||
double[] columnSize = { p, f }; |
||||
double[] rowSize = { p, p, p }; |
||||
@Override |
||||
protected void initComponentsLayout(PreviewLabel previewLabel, int labelSize) { |
||||
double p = TableLayout.PREFERRED; |
||||
double f = TableLayout.FILL; |
||||
double[] columnSize = {p, f}; |
||||
double[] rowSize = {p, p, p}; |
||||
|
||||
JPanel rs = new JPanel(new BorderLayout(0, 0)); |
||||
rs.add(tableNameComboBox, BorderLayout.CENTER); |
||||
rs.add(GUICoreUtils.createFlowPane(new Component[]{new RefreshLabel(this), previewLabel}, FlowLayout.LEFT, LayoutConstants.HGAP_LARGE), BorderLayout.EAST); |
||||
|
||||
UILabel l1 = new UILabel(Inter.getLocText("Database") + ":", UILabel.RIGHT); |
||||
UILabel l2 = new UILabel(Inter.getLocText("Model") + ":", UILabel.RIGHT); |
||||
UILabel l3 = new UILabel(Inter.getLocText(new String[]{"Database", "Table"}) + ":", UILabel.RIGHT); |
||||
|
||||
UILabel l1 = new UILabel(Inter.getLocText("FR-Designer_Database"), UILabel.LEFT); |
||||
UILabel l2 = new UILabel(Inter.getLocText("FR-Designer_Model"), UILabel.LEFT); |
||||
UILabel l3 = new UILabel(Inter.getLocText(new String[]{"FR-Designer_Database", "FR-Designer_Table"}), UILabel.LEFT); |
||||
|
||||
if (labelSize > 0) { |
||||
Dimension pSize = new Dimension(labelSize, 20); |
||||
l1.setPreferredSize(pSize); |
||||
l2.setPreferredSize(pSize); |
||||
l3.setPreferredSize(pSize); |
||||
Dimension pSize = new Dimension(labelSize, 20); |
||||
l1.setPreferredSize(pSize); |
||||
l2.setPreferredSize(pSize); |
||||
l3.setPreferredSize(pSize); |
||||
} |
||||
|
||||
|
||||
Component[][] components = new Component[][]{ |
||||
new Component[]{l1, dsNameComboBox}, |
||||
new Component[]{l2, schemaBox}, |
||||
new Component[]{l3, rs} |
||||
}; |
||||
|
||||
JPanel content = TableLayoutHelper.createTableLayoutPane(components,rowSize,columnSize); |
||||
JPanel content = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); |
||||
this.setLayout(new BorderLayout()); |
||||
this.add(content,BorderLayout.CENTER); |
||||
} |
||||
|
||||
this.add(content, BorderLayout.CENTER); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public void refreshBeanElement() { |
||||
initDsNameComboBox(); |
||||
} |
||||
@Override |
||||
public void refreshBeanElement() { |
||||
initDsNameComboBox(); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,418 @@
|
||||
package com.fr.design.editor; |
||||
|
||||
import com.fr.base.Formula; |
||||
import com.fr.design.DesignerEnvManager; |
||||
import com.fr.design.dialog.BasicPane; |
||||
import com.fr.design.editor.editor.*; |
||||
import com.fr.design.event.GlobalNameListener; |
||||
import com.fr.design.event.GlobalNameObserver; |
||||
import com.fr.design.event.UIObserver; |
||||
import com.fr.design.event.UIObserverListener; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.design.gui.ibutton.UIButtonGroup; |
||||
import com.fr.design.gui.imenu.UIMenuItem; |
||||
import com.fr.design.layout.FRGUIPaneFactory; |
||||
import com.fr.design.mainframe.DesignerContext; |
||||
import com.fr.design.utils.gui.GUICoreUtils; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.general.Inter; |
||||
import com.fr.stable.StringUtils; |
||||
|
||||
import javax.swing.*; |
||||
import javax.swing.event.ChangeEvent; |
||||
import javax.swing.event.ChangeListener; |
||||
import java.awt.*; |
||||
import java.awt.event.ActionEvent; |
||||
import java.awt.event.ActionListener; |
||||
|
||||
/** |
||||
* Created by MoMeak on 2017/7/26. |
||||
*/ |
||||
|
||||
public class DoubleDeckValueEditorPane extends BasicPane implements UIObserver, GlobalNameObserver { |
||||
|
||||
private static final int CENTERPANE_WIDTH = 200; |
||||
private Editor[] cards; |
||||
|
||||
private Editor currentEditor; |
||||
|
||||
private UIButton arrowButton; |
||||
private JPopupMenu menu; |
||||
private JPanel centerPane; |
||||
private CardLayout cardLayout; |
||||
private Object value; |
||||
private UIButtonGroup upButton; |
||||
private GlobalNameListener globalNameListener = null; |
||||
private UIObserverListener uiObserverListener = null; |
||||
|
||||
public DoubleDeckValueEditorPane(Editor[] cards) { |
||||
this(cards, null, null); |
||||
} |
||||
|
||||
public DoubleDeckValueEditorPane(Editor[] cards, String popupName, String textEditorValue) { |
||||
initComponents(cards, popupName, textEditorValue, CENTERPANE_WIDTH); |
||||
} |
||||
|
||||
public DoubleDeckValueEditorPane(Editor[] cards, String popupName, String textEditorValue, int centerPaneWidth) { |
||||
initComponents(cards, popupName, textEditorValue, centerPaneWidth); |
||||
} |
||||
|
||||
public static void main(String[] args) { |
||||
JFrame jf = new JFrame("test"); |
||||
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); |
||||
JPanel content = (JPanel) jf.getContentPane(); |
||||
content.setLayout(new BorderLayout()); |
||||
content.add(new DoubleDeckValueEditorPane(new Editor[]{new ColumnNameEditor(), new ColumnIndexEditor(), new FormulaEditor(Inter.getLocText("FR-Designer_Parameter-Formula"))}), BorderLayout.NORTH); |
||||
GUICoreUtils.centerWindow(jf); |
||||
jf.setSize(290, 400); |
||||
jf.setVisible(true); |
||||
} |
||||
|
||||
|
||||
private void initComponents(final Editor[] cards, String popupName, String textEditorValue, int centerPaneWidth) { |
||||
this.setLayout(new BorderLayout(0, 4)); |
||||
this.cards = cards; |
||||
|
||||
final String[] nameArray = new String[cards.length]; |
||||
for (int i = 0; i < cards.length; i++) { |
||||
nameArray[i] = cards[i].getName(); |
||||
} |
||||
upButton = new UIButtonGroup(nameArray); |
||||
upButton.setAllToolTips(nameArray); |
||||
this.add(upButton, BorderLayout.NORTH); |
||||
|
||||
|
||||
centerPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||
|
||||
setCurrentEditor(0); |
||||
|
||||
centerPane.setPreferredSize(new Dimension(centerPaneWidth, centerPane.getPreferredSize().height)); |
||||
menu = createPopMenu(); |
||||
upButton.addChangeListener(new ChangeListener() { |
||||
@Override |
||||
public void stateChanged(ChangeEvent e) { |
||||
if (globalNameListener != null) { |
||||
globalNameListener.setGlobalName(Inter.getLocText("CellWrite-InsertRow_Policy")); |
||||
} |
||||
Object oldValue = currentEditor.getValue(); |
||||
setCurrentEditor(upButton.getSelectedIndex()); |
||||
currentEditor.selected(); |
||||
value = currentEditor.getValue(); |
||||
if (uiObserverListener != null) { |
||||
uiObserverListener.doChange(); |
||||
} |
||||
|
||||
DoubleDeckValueEditorPane.this.firePropertyChange("value", oldValue, value); |
||||
} |
||||
}); |
||||
this.add(centerPane, BorderLayout.CENTER); |
||||
|
||||
} |
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return Inter.getLocText("FR-Designer_Values-Editor"); |
||||
} |
||||
|
||||
public Editor getCurrentEditor() { |
||||
return currentEditor; |
||||
} |
||||
|
||||
public int getCurrentEditorIndex() { |
||||
for (int i = 0; i < cards.length; i++) { |
||||
if (cards[i].getClass() == currentEditor.getClass()) { |
||||
return i; |
||||
} |
||||
} |
||||
return 0; |
||||
} |
||||
|
||||
public void setCurrentEditor(int i) { |
||||
currentEditor = this.cards[i]; |
||||
centerPane.removeAll(); |
||||
centerPane.add(currentEditor); |
||||
centerPane.validate(); |
||||
centerPane.repaint(); |
||||
} |
||||
|
||||
public void setCurrentEditor(Class editorClass) { |
||||
for (int i = 0; i < cards.length; i++) { |
||||
if (cards[i].getClass() == editorClass) { |
||||
setCurrentEditor(i); |
||||
break; |
||||
} |
||||
} |
||||
} |
||||
|
||||
|
||||
private JPopupMenu createPopMenu() { |
||||
JPopupMenu scate = new JPopupMenu(); |
||||
|
||||
if (this.cards == null) { |
||||
return scate; |
||||
} |
||||
|
||||
for (int i = 0; i < this.cards.length; i++) { |
||||
UIMenuItem item = new UIMenuItem(cards[i].getName()); |
||||
final int j = i; |
||||
item.addActionListener(new ActionListener() { |
||||
public void actionPerformed(ActionEvent e) { |
||||
if (globalNameListener != null) { |
||||
globalNameListener.setGlobalName(Inter.getLocText("CellWrite-InsertRow_Policy")); |
||||
} |
||||
Object oldValue = currentEditor.getValue(); |
||||
setCurrentEditor(j); |
||||
currentEditor.selected(); |
||||
value = currentEditor.getValue(); |
||||
if (uiObserverListener != null) { |
||||
uiObserverListener.doChange(); |
||||
} |
||||
|
||||
DoubleDeckValueEditorPane.this.firePropertyChange("value", oldValue, value); |
||||
} |
||||
}); |
||||
scate.add(item); |
||||
if (i < cards.length - 1) { |
||||
scate.addSeparator(); |
||||
} |
||||
} |
||||
return scate; |
||||
} |
||||
|
||||
public void populate(Object object) { |
||||
for (int i = 0; i < cards.length; i++) { |
||||
if (cards[i].accept(object)) { |
||||
setCardValue(i, object); |
||||
|
||||
break; |
||||
} |
||||
} |
||||
} |
||||
|
||||
public void populate(Object object, String name) { |
||||
for (int i = 0; i < cards.length; i++) { |
||||
if (cards[i].accept(object) && ComparatorUtils.equals(cards[i].getName(), name)) { |
||||
setCardValue(i, object); |
||||
break; |
||||
} |
||||
} |
||||
} |
||||
|
||||
private void setCardValue(int i, Object object) { |
||||
setCurrentEditor(i); |
||||
cards[i].setValue(object); |
||||
// kunsnat: bug7861 所有的Editor值都要跟随改变, 因为populate的editor 从""
|
||||
// 一定是最后的Editor哦.
|
||||
for (int j = 0; j < cards.length; j++) { |
||||
if (i == j) { |
||||
upButton.setSelectedIndex(i); |
||||
continue; |
||||
} |
||||
this.cards[j].setValue(null); |
||||
} |
||||
} |
||||
|
||||
public Object update() { |
||||
String name = currentEditor.getName(); |
||||
Object columnIndex = currentEditor.getValue(); |
||||
//bug86542,这边为啥要new一个公式出来,只保留content,其他属性全不要了?
|
||||
// if (ComparatorUtils.equals(name, Inter.getLocText("Formula"))) {
|
||||
// columnIndex = new Formula(columnIndex == null ? "" : columnIndex.toString());
|
||||
// }
|
||||
|
||||
return columnIndex; |
||||
} |
||||
|
||||
public Object update(String makeAdiff) { |
||||
String name = currentEditor.getName(); |
||||
Object columnIndex = currentEditor.getValue(); |
||||
Object columnName = StringUtils.EMPTY; |
||||
|
||||
if (ComparatorUtils.equals(name, Inter.getLocText("FR-Designer_Formula"))) { |
||||
columnIndex = new Formula(columnIndex == null ? "" : columnIndex.toString()); |
||||
} |
||||
|
||||
if (currentEditor instanceof ColumnNameEditor) { |
||||
columnName = ((ColumnNameEditor) currentEditor).getColumnName(); |
||||
} |
||||
|
||||
return new Object[]{columnIndex, columnName}; |
||||
} |
||||
|
||||
public Object update(boolean isXMLA) { |
||||
String name = currentEditor.getName(); |
||||
Object columnIndex = currentEditor.getValue(); |
||||
Object columnName = StringUtils.EMPTY; |
||||
|
||||
if (ComparatorUtils.equals(name, Inter.getLocText("FR-Designer_Formula"))) { |
||||
columnIndex = new Formula(columnIndex == null ? "" : columnIndex.toString()); |
||||
} |
||||
|
||||
if (isXMLA) { |
||||
columnName = ((XMLANameEditor) currentEditor).getColumnName(); |
||||
} |
||||
|
||||
return new Object[]{columnIndex, columnName}; |
||||
} |
||||
|
||||
public void setEditors(Editor[] editors, Object obj) { |
||||
this.cards = editors; |
||||
this.populate(obj); |
||||
} |
||||
|
||||
/** |
||||
* 检查是否有效 |
||||
* |
||||
* @throws Exception 异常 |
||||
*/ |
||||
public void checkValid() throws Exception { |
||||
if (!(currentEditor instanceof TextEditor)) { |
||||
return; |
||||
} |
||||
|
||||
int i; |
||||
boolean containFormulaType = false; |
||||
for (i = 0; i < cards.length; i++) { |
||||
if (ComparatorUtils.equals(cards[i].getName(), Inter.getLocText("FR-Engine_Parameter-Formula"))) { |
||||
containFormulaType = true; |
||||
break; |
||||
} |
||||
} |
||||
if (!containFormulaType) { |
||||
return; |
||||
} |
||||
|
||||
final int j = i; |
||||
|
||||
if (!(currentEditor instanceof TextEditor)) { |
||||
return; |
||||
} |
||||
String string = (String) currentEditor.getValue(); |
||||
if (isFormula(string)) { |
||||
DesignerEnvManager designerEnvManager = DesignerEnvManager.getEnvManager(); |
||||
if (designerEnvManager.isSupportStringToFormula()) { |
||||
if (!designerEnvManager.isDefaultStringToFormula()) { |
||||
int returnValue = JOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("FR-Designer_Edit_String_To_Formula") |
||||
+ "?", Inter.getLocText("FR-Designer_Tooltips"), JOptionPane.YES_NO_OPTION); |
||||
if (returnValue == JOptionPane.OK_OPTION) { |
||||
|
||||
setCurrentEditor(j); |
||||
Formula formula = new Formula(string); |
||||
currentEditor.setValue(formula); |
||||
} |
||||
} else { |
||||
setCurrentEditor(j); |
||||
Formula formula = new Formula(string); |
||||
currentEditor.setValue(formula); |
||||
} |
||||
} |
||||
} |
||||
|
||||
} |
||||
|
||||
private boolean isFormula(String string) { |
||||
return StringUtils.isNotBlank(string) && (string.length() > 0 && string.charAt(0) == '='); |
||||
} |
||||
|
||||
@Override |
||||
public void setEnabled(boolean enabled) { |
||||
arrowButton.setEnabled(enabled); |
||||
for (Editor card : cards) { |
||||
card.setEnabled(enabled); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 重置组件 |
||||
*/ |
||||
public void resetComponets() { |
||||
for (Editor card : cards) { |
||||
card.reset(); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 清除组件数据 |
||||
*/ |
||||
public void clearComponentsData() { |
||||
for (Editor card : cards) { |
||||
card.clearData(); |
||||
} |
||||
} |
||||
|
||||
public Editor[] getCards() { |
||||
return this.cards; |
||||
} |
||||
|
||||
public JPopupMenu getMenu() { |
||||
return this.menu; |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 注册全局名字监听事件 |
||||
* |
||||
* @param listener 观察者监听事件 |
||||
*/ |
||||
public void registerNameListener(GlobalNameListener listener) { |
||||
globalNameListener = listener; |
||||
} |
||||
|
||||
/** |
||||
* 是否对名字listener监听器做出响应 |
||||
* |
||||
* @return 如果要做出响应,则返回true |
||||
*/ |
||||
public boolean shouldResponseNameListener() { |
||||
return false; |
||||
} |
||||
|
||||
public void setGlobalName(String name) { |
||||
for (Editor card : cards) { |
||||
setComponentGlobalName(card, name); |
||||
} |
||||
} |
||||
|
||||
private void setComponentGlobalName(Container card, String name) { |
||||
for (int i = 0, len = card.getComponentCount(); i < len; i++) { |
||||
Component component = card.getComponent(i); |
||||
if (component instanceof GlobalNameObserver) { |
||||
((GlobalNameObserver) component).setGlobalName(name); |
||||
} else { |
||||
setComponentGlobalName((Container) component, name); |
||||
} |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 给组件登记一个观察者监听事件 |
||||
* |
||||
* @param listener 观察者监听事件 |
||||
*/ |
||||
public void registerChangeListener(UIObserverListener listener) { |
||||
uiObserverListener = listener; |
||||
for (Editor card : cards) { |
||||
doLoop(card, listener); |
||||
} |
||||
} |
||||
|
||||
private void doLoop(Container card, UIObserverListener listener) { |
||||
for (int i = 0, len = card.getComponentCount(); i < len; i++) { |
||||
Component component = card.getComponent(i); |
||||
if (component instanceof UIObserver) { |
||||
((UIObserver) component).registerChangeListener(listener); |
||||
} else { |
||||
doLoop((Container) component, listener); |
||||
} |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 组件是否需要响应添加的观察者事件 |
||||
* |
||||
* @return 如果需要响应观察者事件则返回true,否则返回false |
||||
*/ |
||||
public boolean shouldResponseChangeListener() { |
||||
return true; |
||||
} |
||||
} |
@ -0,0 +1,11 @@
|
||||
package com.fr.design.gui.frpane; |
||||
|
||||
import com.fr.design.designer.TargetComponent; |
||||
|
||||
/** |
||||
* Created by plough on 2017/7/26. |
||||
*/ |
||||
public interface HyperlinkGroupPaneActionProvider { |
||||
void populate(HyperlinkGroupPane hyperlinkGroupPane, TargetComponent elementCasePane); |
||||
void saveSettings(HyperlinkGroupPane hyperlinkGroupPane); |
||||
} |
@ -1,107 +1,123 @@
|
||||
package com.fr.design.present.dict; |
||||
|
||||
import java.awt.*; |
||||
|
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import javax.swing.JPanel; |
||||
import javax.swing.event.DocumentListener; |
||||
|
||||
import com.fr.base.BaseUtils; |
||||
import com.fr.base.Formula; |
||||
import com.fr.data.impl.FormulaDictionary; |
||||
import com.fr.design.beans.FurtherBasicBeanPane; |
||||
import com.fr.design.editor.editor.FormulaEditor; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.editor.editor.FormulaEditor; |
||||
import com.fr.design.utils.gui.GUICoreUtils; |
||||
import com.fr.general.Inter; |
||||
import com.fr.stable.StringUtils; |
||||
|
||||
import javax.swing.*; |
||||
import javax.swing.event.DocumentListener; |
||||
import java.awt.*; |
||||
|
||||
public class FormulaDictPane extends FurtherBasicBeanPane<FormulaDictionary> { |
||||
private FormulaEditor keyFormulaEditor; |
||||
private FormulaEditor valueFormulaEditor; |
||||
|
||||
public FormulaDictPane() { |
||||
initComponents(); |
||||
} |
||||
private static final int EDITOR_COLUMN = 15; |
||||
private FormulaEditor keyFormulaEditor; |
||||
private FormulaEditor valueFormulaEditor; |
||||
|
||||
public FormulaDictPane() { |
||||
initComponents(); |
||||
} |
||||
|
||||
public static void main(String[] args) { |
||||
JFrame jf = new JFrame("test"); |
||||
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); |
||||
JPanel content = (JPanel) jf.getContentPane(); |
||||
content.setLayout(new BorderLayout()); |
||||
content.add(new FormulaDictPane(), BorderLayout.NORTH); |
||||
GUICoreUtils.centerWindow(jf); |
||||
jf.setSize(250, 400); |
||||
jf.setVisible(true); |
||||
} |
||||
|
||||
private void initComponents() { |
||||
keyFormulaEditor = new FormulaEditor(); |
||||
keyFormulaEditor.setColumns(EDITOR_COLUMN); |
||||
JPanel keyFormulaContainer = new JPanel(new FlowLayout(FlowLayout.RIGHT)); |
||||
keyFormulaEditor.setPreferredSize(new Dimension(148, 20)); |
||||
Icon icon = BaseUtils.readIcon("/com/fr/design/images/m_insert/formula.png"); |
||||
keyFormulaContainer.add(new JLabel(icon)); |
||||
keyFormulaContainer.add(keyFormulaEditor); |
||||
|
||||
valueFormulaEditor = new FormulaEditor(); |
||||
valueFormulaEditor.setColumns(EDITOR_COLUMN); |
||||
|
||||
double p = TableLayout.PREFERRED; |
||||
double f = TableLayout.FILL; |
||||
double[] columnSize = {p, f}; |
||||
double[] rowSize = {p, p, p, p, p, p}; |
||||
|
||||
UILabel tag = new UILabel(Inter.getLocText("Formula_Dictionary_Display_Examples_Html")); |
||||
JPanel t = new JPanel(new BorderLayout()); |
||||
t.add(tag, BorderLayout.NORTH); |
||||
|
||||
Formula vf = new Formula("$$$"); |
||||
valueFormulaEditor = new FormulaEditor("", vf); |
||||
|
||||
JPanel valueFormulaContainer = new JPanel(new FlowLayout(FlowLayout.RIGHT)); |
||||
valueFormulaEditor.setPreferredSize(new Dimension(148, 20)); |
||||
valueFormulaContainer.add(new JLabel(icon)); |
||||
valueFormulaContainer.add(valueFormulaEditor); |
||||
|
||||
private void initComponents() { |
||||
keyFormulaEditor = new FormulaEditor(); |
||||
keyFormulaEditor.setColumns(15); |
||||
valueFormulaEditor = new FormulaEditor(); |
||||
valueFormulaEditor.setColumns(15); |
||||
|
||||
double p = TableLayout.PREFERRED; |
||||
double f = TableLayout.FILL; |
||||
double[] columnSize = { f }; |
||||
double[] rowSize = { p,p,p,p,p }; |
||||
// ActionLabel tips = new ActionLabel("(对应实际值范围内的每个值)") {
|
||||
// @Override
|
||||
// public JToolTip createToolTip() {
|
||||
// MultiLineToolTip tip = new MultiLineToolTip();
|
||||
// tip.setComponent(this);
|
||||
// tip.setOpaque(false);
|
||||
// return tip;
|
||||
// }
|
||||
// };
|
||||
// tips.setToolTipText(Inter.getLocText("Formula_Dictionary_Display_Examples"));
|
||||
// JPanel cc = new JPanel(new BorderLayout());
|
||||
// cc.add(tips, BorderLayout.WEST);
|
||||
|
||||
UILabel tag = new UILabel(Inter.getLocText("Formula_Dictionary_Display_Examples_Html")); |
||||
JPanel t = new JPanel(new BorderLayout()); |
||||
t.add(tag, BorderLayout.WEST); |
||||
|
||||
Formula vf = new Formula("$$$"); |
||||
valueFormulaEditor = new FormulaEditor("",vf); |
||||
Component[][] components = new Component[][]{ |
||||
new Component[]{new UILabel(Inter.getLocText("Actual_Value") + ":")}, |
||||
new Component[]{keyFormulaEditor}, |
||||
new Component[]{new UILabel(Inter.getLocText("Display_Value") + ":")}, |
||||
new Component[]{valueFormulaEditor}, |
||||
new Component[]{t} |
||||
new Component[]{null, null}, |
||||
new Component[]{new UILabel(Inter.getLocText("FR-Designer_Actual_Value"), UILabel.LEFT), keyFormulaContainer}, |
||||
new Component[]{null, null}, |
||||
new Component[]{new UILabel(Inter.getLocText("FR-Designer_Display_Value"), UILabel.LEFT), valueFormulaContainer}, |
||||
new Component[]{null, null}, |
||||
new Component[]{t, null} |
||||
}; |
||||
JPanel panel = TableLayoutHelper.createTableLayoutPane(components,rowSize,columnSize); |
||||
JPanel panel = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); |
||||
this.setLayout(new BorderLayout()); |
||||
this.add(panel,BorderLayout.CENTER); |
||||
|
||||
} |
||||
|
||||
public void addChangeListener(DocumentListener l) { |
||||
keyFormulaEditor.addDocumentListener(l); |
||||
valueFormulaEditor.addDocumentListener(l); |
||||
} |
||||
|
||||
@Override |
||||
public String title4PopupWindow() { |
||||
return Inter.getLocText("Formula"); |
||||
} |
||||
|
||||
@Override |
||||
public void populateBean(FormulaDictionary dict) { |
||||
keyFormulaEditor.setValue(new Formula(dict.getProduceFormula() == null ? StringUtils.EMPTY : dict.getProduceFormula())); |
||||
valueFormulaEditor.setValue(new Formula(dict.getExcuteFormula() == null ? StringUtils.EMPTY : dict.getExcuteFormula())); |
||||
} |
||||
|
||||
@Override |
||||
public FormulaDictionary updateBean() { |
||||
FormulaDictionary dict = new FormulaDictionary(); |
||||
if (keyFormulaEditor.getValue() != null) { |
||||
dict.setProduceFormula(keyFormulaEditor.getValue().getContent()); |
||||
} |
||||
if (valueFormulaEditor.getValue() != null) { |
||||
dict.setExcuteFormula(valueFormulaEditor.getValue().getContent()); |
||||
} |
||||
|
||||
return dict; |
||||
} |
||||
|
||||
@Override |
||||
public boolean accept(Object ob) { |
||||
return ob instanceof FormulaDictionary; |
||||
} |
||||
|
||||
@Override |
||||
public void reset() { |
||||
keyFormulaEditor.reset(); |
||||
valueFormulaEditor.reset(); |
||||
} |
||||
this.add(panel, BorderLayout.CENTER); |
||||
|
||||
} |
||||
|
||||
public void addChangeListener(DocumentListener l) { |
||||
keyFormulaEditor.addDocumentListener(l); |
||||
valueFormulaEditor.addDocumentListener(l); |
||||
} |
||||
|
||||
@Override |
||||
public String title4PopupWindow() { |
||||
return Inter.getLocText("FR-Designer_Formula"); |
||||
} |
||||
|
||||
@Override |
||||
public void populateBean(FormulaDictionary dict) { |
||||
keyFormulaEditor.setValue(new Formula(dict.getProduceFormula() == null ? StringUtils.EMPTY : dict.getProduceFormula())); |
||||
valueFormulaEditor.setValue(new Formula(dict.getExcuteFormula() == null ? StringUtils.EMPTY : dict.getExcuteFormula())); |
||||
} |
||||
|
||||
@Override |
||||
public FormulaDictionary updateBean() { |
||||
FormulaDictionary dict = new FormulaDictionary(); |
||||
if (keyFormulaEditor.getValue() != null) { |
||||
dict.setProduceFormula(keyFormulaEditor.getValue().getContent()); |
||||
} |
||||
if (valueFormulaEditor.getValue() != null) { |
||||
dict.setExcuteFormula(valueFormulaEditor.getValue().getContent()); |
||||
} |
||||
|
||||
return dict; |
||||
} |
||||
|
||||
@Override |
||||
public boolean accept(Object ob) { |
||||
return ob instanceof FormulaDictionary; |
||||
} |
||||
|
||||
@Override |
||||
public void reset() { |
||||
keyFormulaEditor.reset(); |
||||
valueFormulaEditor.reset(); |
||||
} |
||||
} |
Loading…
Reference in new issue