Browse Source

Merge remote-tracking branch 'origin/9.0' into 9.0

master
MoMeak 7 years ago
parent
commit
9c31a59e11
  1. 38
      designer/src/com/fr/design/dscolumn/DSColumnAdvancedEditorPane.java
  2. 84
      designer/src/com/fr/design/dscolumn/DSColumnBasicEditorPane.java
  3. 497
      designer/src/com/fr/design/dscolumn/SelectedDataColumnPane.java
  4. 30
      designer/src/com/fr/design/mainframe/cell/CellEditorPane.java
  5. 112
      designer/src/com/fr/design/mainframe/cell/QuickEditorRegion.java
  6. 250
      designer/src/com/fr/quickeditor/CellQuickEditor.java
  7. 122
      designer/src/com/fr/quickeditor/cellquick/CellBiasTextPainterEditor.java
  8. 310
      designer/src/com/fr/quickeditor/cellquick/CellDSColumnEditor.java
  9. 150
      designer/src/com/fr/quickeditor/cellquick/CellImageQuickEditor.java
  10. 98
      designer/src/com/fr/quickeditor/cellquick/CellRichTextEditor.java
  11. 304
      designer/src/com/fr/quickeditor/cellquick/CellStringQuickEditor.java
  12. 85
      designer/src/com/fr/quickeditor/cellquick/CellSubReportEditor.java

38
designer/src/com/fr/design/dscolumn/DSColumnAdvancedEditorPane.java

@ -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) {
}
}

84
designer/src/com/fr/design/dscolumn/DSColumnBasicEditorPane.java

@ -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);
}
}

497
designer/src/com/fr/design/dscolumn/SelectedDataColumnPane.java

@ -1,247 +1,252 @@
package com.fr.design.dscolumn; package com.fr.design.dscolumn;
import com.fr.base.Parameter; import com.fr.base.Parameter;
import com.fr.design.data.DesignTableDataManager; import com.fr.data.SimpleDSColumn;
import com.fr.data.SimpleDSColumn; import com.fr.data.TableDataSource;
import com.fr.data.TableDataSource; import com.fr.design.data.DesignTableDataManager;
import com.fr.design.data.datapane.TableDataComboBox; import com.fr.design.data.datapane.TableDataComboBox;
import com.fr.design.data.tabledata.wrapper.TableDataWrapper; import com.fr.design.data.tabledata.wrapper.TableDataWrapper;
import com.fr.design.gui.ibutton.UIButton; import com.fr.design.dialog.BasicDialog;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.dialog.BasicPane;
import com.fr.design.gui.itableeditorpane.ParameterTableModel; import com.fr.design.dialog.DialogActionAdapter;
import com.fr.design.gui.itableeditorpane.UITableEditorPane; import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.icombobox.LazyComboBox; import com.fr.design.gui.icombobox.LazyComboBox;
import com.fr.design.layout.TableLayout; import com.fr.design.gui.ilable.UILabel;
import com.fr.design.layout.TableLayoutHelper; import com.fr.design.gui.itableeditorpane.ParameterTableModel;
import com.fr.design.mainframe.DesignerContext; import com.fr.design.gui.itableeditorpane.UITableEditorPane;
import com.fr.design.dialog.BasicDialog; import com.fr.design.layout.TableLayout;
import com.fr.design.dialog.BasicPane; import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.mainframe.DesignerContext;
import com.fr.general.Inter; import com.fr.general.Inter;
import com.fr.general.data.TableDataColumn; import com.fr.general.data.TableDataColumn;
import com.fr.report.cell.CellElement; import com.fr.report.cell.CellElement;
import com.fr.report.cell.TemplateCellElement; import com.fr.report.cell.TemplateCellElement;
import com.fr.report.cell.cellattr.core.group.DSColumn; import com.fr.report.cell.cellattr.core.group.DSColumn;
import com.fr.stable.ParameterProvider; import com.fr.stable.ParameterProvider;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.awt.event.ItemEvent; import java.awt.event.ItemEvent;
import java.awt.event.ItemListener; import java.awt.event.ItemListener;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.regex.Pattern; import java.util.regex.Pattern;
public class SelectedDataColumnPane extends BasicPane { /**
protected UITableEditorPane<ParameterProvider> editorPane; * 数据集列动态参数设置组件
protected Parameter[] ps; *
* @author yaoh.wu
protected TableDataComboBox tableNameComboBox; * @version 2017年7月26日
protected LazyComboBox columnNameComboBox; * 9.0设计器更新修改动态参数注入按钮部分,使其显示动态参数按钮时能在右侧边栏正常显示
private ItemListener itemListener; * @since 8.0
*/
private UIButton paramButton; public class SelectedDataColumnPane extends BasicPane {
private UITableEditorPane<ParameterProvider> editorPane;
public SelectedDataColumnPane() { private Parameter[] ps;
this(true);
} TableDataComboBox tableNameComboBox;
LazyComboBox columnNameComboBox;
public SelectedDataColumnPane(boolean showParameterButton) { private ItemListener itemListener;
initComponent(showParameterButton);
} private UIButton paramButton;
/** public SelectedDataColumnPane() {
* 初始化组件 this(true);
* }
* @param showParameterButton 是否显示参数按钮
* SelectedDataColumnPane(boolean showParameterButton) {
*/ initComponent(showParameterButton);
public void initComponent(boolean showParameterButton) { }
initTableNameComboBox();
if (showParameterButton) { /**
initWithParameterButton(); * 初始化组件
} *
columnNameComboBox = new LazyComboBox() { * @param showParameterButton 是否显示参数按钮
*/
@Override public void initComponent(boolean showParameterButton) {
public Object[] load() { initTableNameComboBox();
List<String> l = calculateColumnNameList(); if (showParameterButton) {
return l.toArray(new String[l.size()]); initWithParameterButton();
} }
columnNameComboBox = new LazyComboBox() {
}; @Override
columnNameComboBox.setEditable(true); public Object[] load() {
double p = TableLayout.PREFERRED; List<String> l = calculateColumnNameList();
UILabel label1 = new UILabel(Inter.getLocText("TableData") + ":"); return l.toArray(new String[l.size()]);
UILabel label2 = new UILabel(Inter.getLocText("DataColumn") + ":"); }
if (showParameterButton) { };
label1.setPreferredSize(new Dimension(200, 25)); columnNameComboBox.setEditable(true);
label2.setPreferredSize(new Dimension(200, 25)); double f = TableLayout.FILL;
} double p = TableLayout.PREFERRED;
if (showParameterButton) { UILabel label1 = new UILabel(Inter.getLocText("TableData"));
Component[][] comps = {{label1, null, label2}, {tableNameComboBox, paramButton, columnNameComboBox}}; UILabel label3 = new UILabel(Inter.getLocText("DataColumn"));
this.add(TableLayoutHelper.createTableLayoutPane(comps, new double[]{p, p}, new double[]{p, p, p})); if (showParameterButton) {
} else { //todo 国际化
double f = TableLayout.FILL; UILabel label2 = new UILabel("param");
double[] columnSize = {p, f}; Component[][] components = {
double[] rowSize = {p, p}; {label1, tableNameComboBox},
Component[][] components = new Component[][]{ {label2, paramButton},
new Component[]{label1, tableNameComboBox}, {label3, columnNameComboBox}
new Component[]{label2, columnNameComboBox} };
}; this.setLayout(new BorderLayout());
JPanel jPanel = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); this.add(TableLayoutHelper.createTableLayoutPane(components, new double[]{p, p, p}, new double[]{p, f}));
this.setLayout(new BorderLayout()); } else {
this.add(jPanel, BorderLayout.CENTER); double[] columnSize = {p, f};
} double[] rowSize = {p, p};
} Component[][] components = new Component[][]{
new Component[]{label1, tableNameComboBox},
protected void initTableNameComboBox() { new Component[]{label3, columnNameComboBox}
tableNameComboBox = new TableDataComboBox(DesignTableDataManager.getEditingTableDataSource()); };
tableNameComboBox.addItemListener(new ItemListener() { JPanel jPanel = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize);
@Override this.setLayout(new BorderLayout());
public void itemStateChanged(ItemEvent e) { this.add(jPanel, BorderLayout.CENTER);
columnNameComboBox.setLoaded(false); }
// columnNameComboBox.loadList(); }
}
});
tableNameComboBox.setPreferredSize(new Dimension(100, 20)); public void populate(TableDataSource source, TemplateCellElement cellElement) {
} if (cellElement == null) {
return;
private void initWithParameterButton() { }
editorPane = new UITableEditorPane<ParameterProvider>(new ParameterTableModel()); if (itemListener != null) {
paramButton = new UIButton(Inter.getLocText("TableData_Dynamic_Parameter_Setting")); removeListener(itemListener);
paramButton.addActionListener(new ActionListener() { }
public void actionPerformed(ActionEvent e) { Object value = cellElement.getValue();
BasicDialog paramDialog = editorPane.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { if (!(value instanceof DSColumn)) {
@Override return;
public void doOk() { }
List<ParameterProvider> parameterList = editorPane.update(); DSColumn dsColumn = (DSColumn) value;
ps = parameterList.toArray(new Parameter[parameterList.size()]); String dsName = dsColumn.getDSName();
} tableNameComboBox.setSelectedTableDataByName(dsName);
}); columnNameComboBox.setSelectedItem(TableDataColumn.getColumnName(dsColumn.getColumn()));
ps = dsColumn.getParameters();
editorPane.populate(ps == null ? new Parameter[0] : ps);
paramDialog.setVisible(true); addListener(itemListener);
} }
});
} public void update(CellElement cellElement) {
if (cellElement == null) {
@Override return;
protected String title4PopupWindow() { }
return "DSColumn"; Object value = cellElement.getValue();
} if (this.tableNameComboBox.getSelectedItem() == null && this.columnNameComboBox.getSelectedItem() == null) {
return;
public void populate(TableDataSource source, TemplateCellElement cellElement) { }
if (cellElement == null) { DSColumn dsColumn = null;
return; if (value == null || !(value instanceof DSColumn)) {
} dsColumn = new DSColumn();
cellElement.setValue(dsColumn);
if (itemListener != null) { }
removeListener(itemListener); dsColumn = (DSColumn) cellElement.getValue();
}
SimpleDSColumn simpleDSColumn = updateColumnPane();
Object value = cellElement.getValue(); dsColumn.setDSName(simpleDSColumn.getDsName());
if (!(value instanceof DSColumn)) { dsColumn.setColumn(simpleDSColumn.getColumn());
return;
} dsColumn.setParameters((ps != null && ps.length > 0) ? ps : null);
}
DSColumn dsColumn = (DSColumn) value;
String dsName = dsColumn.getDSName(); /**
tableNameComboBox.setSelectedTableDataByName(dsName); * 更新面板
columnNameComboBox.setSelectedItem(TableDataColumn.getColumnName(dsColumn.getColumn())); *
ps = dsColumn.getParameters(); * @return 更新后的值
*/
addListener(itemListener); public SimpleDSColumn updateColumnPane() {
} SimpleDSColumn dsColumn = new SimpleDSColumn();
TableDataWrapper tableDataWrappe = this.tableNameComboBox.getSelectedItem();
public void update(CellElement cellElement) { if (tableDataWrappe == null) {
if (cellElement == null) { return null;
return; }
} dsColumn.setDsName(tableDataWrappe.getTableDataName());
Object value = cellElement.getValue(); TableDataColumn column;
if (this.tableNameComboBox.getSelectedItem() == null && this.columnNameComboBox.getSelectedItem() == null) { String columnExp = (String) this.columnNameComboBox.getSelectedItem();
return; if (isColumnName(columnExp)) {
} String number = columnExp.substring(1);
DSColumn dsColumn = null; Pattern pattern = Pattern.compile("[^\\d]");
if (value == null || !(value instanceof DSColumn)) { if (pattern.matcher(number).find()) {
dsColumn = new DSColumn(); column = TableDataColumn.createColumn(columnExp);
cellElement.setValue(dsColumn); } else {
} int serialNumber = Integer.parseInt(columnExp.substring(1));
dsColumn = (DSColumn) cellElement.getValue(); column = TableDataColumn.createColumn(serialNumber);
}
SimpleDSColumn simpleDSColumn = updateColumnPane(); } else {
dsColumn.setDSName(simpleDSColumn.getDsName()); column = TableDataColumn.createColumn(columnExp);
dsColumn.setColumn(simpleDSColumn.getColumn()); }
dsColumn.setColumn(column);
dsColumn.setParameters((ps != null && ps.length > 0) ? ps : null); return dsColumn;
} }
/** /**
* 更新面板 * 添加监听事件
* *
* @return 更新后的值 * @param i 监听事件
* */
*/ public void addListener(ItemListener i) {
public SimpleDSColumn updateColumnPane() { itemListener = i;
SimpleDSColumn dsColumn = new SimpleDSColumn(); tableNameComboBox.addItemListener(i);
TableDataWrapper tableDataWrappe = this.tableNameComboBox.getSelectedItem(); columnNameComboBox.addItemListener(i);
if (tableDataWrappe == null) { }
return null;
} /**
dsColumn.setDsName(tableDataWrappe.getTableDataName()); * 移除监听事件
TableDataColumn column; *
String columnExp = (String) this.columnNameComboBox.getSelectedItem(); * @param i 监听事件
if (isColumnName(columnExp)) { */
String number = columnExp.substring(1); public void removeListener(ItemListener i) {
Pattern pattern = Pattern.compile("[^\\d]"); tableNameComboBox.removeItemListener(i);
if (pattern.matcher(number).find()) { columnNameComboBox.removeItemListener(i);
column = TableDataColumn.createColumn(columnExp); }
} else {
int serialNumber = Integer.parseInt(columnExp.substring(1));
column = TableDataColumn.createColumn(serialNumber); protected void initTableNameComboBox() {
} tableNameComboBox = new TableDataComboBox(DesignTableDataManager.getEditingTableDataSource());
} else { tableNameComboBox.addItemListener(new ItemListener() {
column = TableDataColumn.createColumn(columnExp); @Override
} public void itemStateChanged(ItemEvent e) {
dsColumn.setColumn(column); columnNameComboBox.setLoaded(false);
return dsColumn; }
} });
tableNameComboBox.setPreferredSize(new Dimension(100, 20));
private boolean isColumnName(String columnExp) { }
return StringUtils.isNotBlank(columnExp) && (columnExp.length() > 0 && columnExp.charAt(0) == '#') && !columnExp.endsWith("#");
@Override
} protected String title4PopupWindow() {
return "DSColumn";
/** }
* 添加监听事件
*
* @param i 监听事件 private void initWithParameterButton() {
* editorPane = new UITableEditorPane<ParameterProvider>(new ParameterTableModel());
*/ paramButton = new UIButton(Inter.getLocText("TableData_Dynamic_Parameter_Setting"));
public void addListener(ItemListener i) { paramButton.addActionListener(new ActionListener() {
itemListener = i; public void actionPerformed(ActionEvent e) {
tableNameComboBox.addItemListener(i); BasicDialog paramDialog = editorPane.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() {
columnNameComboBox.addItemListener(i); @Override
} public void doOk() {
List<ParameterProvider> parameterList = editorPane.update();
/** ps = parameterList.toArray(new Parameter[parameterList.size()]);
* 移除监听事件 }
* });
* @param i 监听事件
* editorPane.populate(ps == null ? new Parameter[0] : ps);
*/ paramDialog.setVisible(true);
public void removeListener(ItemListener i) { }
tableNameComboBox.removeItemListener(i); });
columnNameComboBox.removeItemListener(i); }
}
private List<String> calculateColumnNameList() { private boolean isColumnName(String columnExp) {
if (this.tableNameComboBox.getSelectedItem() != null) { return StringUtils.isNotBlank(columnExp) && (columnExp.length() > 0 && columnExp.charAt(0) == '#') && !columnExp.endsWith("#");
return this.tableNameComboBox.getSelectedItem().calculateColumnNameList(); }
}
return new ArrayList<String>();
} private List<String> calculateColumnNameList() {
if (this.tableNameComboBox.getSelectedItem() != null) {
return this.tableNameComboBox.getSelectedItem().calculateColumnNameList();
}
return new ArrayList<String>();
}
} }

30
designer/src/com/fr/design/mainframe/cell/CellEditorPane.java

@ -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);
}

112
designer/src/com/fr/design/mainframe/cell/QuickEditorRegion.java

@ -1,57 +1,57 @@
package com.fr.design.mainframe.cell; package com.fr.design.mainframe.cell;
import java.awt.BorderLayout; import com.fr.design.gui.ilable.UILabel;
import com.fr.design.selection.QuickEditor;
import javax.swing.BorderFactory; import com.fr.general.Inter;
import javax.swing.JPanel;
import javax.swing.*;
import com.fr.design.gui.ilable.UILabel; import java.awt.*;
import com.fr.general.Inter;
import com.fr.design.selection.QuickEditor; /**
* QuickEditorRegion
/** *
* QuickEditorRegion * @author zhou, yaoh.wu
* * @version 2017年7月25日
* @editor zhou * @since 8.0
* @since 2012-3-23下午3:21:36 */
*/
public class QuickEditorRegion extends JPanel {
public class QuickEditorRegion extends JPanel {
public static QuickEditorRegion getInstance() { private static QuickEditorRegion singleton = new QuickEditorRegion();
return singleton; private static JPanel EMPTY;
}
private QuickEditorRegion() {
public static JPanel getEmptyEditor() { this.setLayout(new BorderLayout());
if(EMPTY == null) { }
EMPTY = new JPanel(new BorderLayout());
UILabel content = new UILabel(Inter.getLocText(new String[]{"DataFunction-None", "HJS-Message", "Form-Widget_Property_Table"})+"!"); public static QuickEditorRegion getInstance() {
content.setBorder(BorderFactory.createEmptyBorder(0, 70, 0, 0)); return singleton;
EMPTY.add(content, BorderLayout.CENTER); }
}
return EMPTY; public static JPanel getEmptyEditor() {
} if (EMPTY == null) {
EMPTY = new JPanel(new BorderLayout());
private static QuickEditorRegion singleton = new QuickEditorRegion(); UILabel content = new UILabel(Inter.getLocText(new String[]{"DataFunction-None", "HJS-Message", "Form-Widget_Property_Table"}) + "!");
private static JPanel EMPTY; content.setBorder(BorderFactory.createEmptyBorder(0, 70, 0, 0));
EMPTY.add(content, BorderLayout.CENTER);
public QuickEditorRegion() { }
this.setLayout(new BorderLayout()); return EMPTY;
} }
/** /**
* 传值 * 更新面板显示数据
* *
* @param ePane * @param currentEditor 当前正在编辑的单元格编辑器或者默认的单元格编辑器
*/ */
public void populate(final QuickEditor quickEditor) { public void populate(final QuickEditor currentEditor) {
this.removeAll(); this.removeAll();
if(quickEditor.getComponentCount() == 0) { if (currentEditor.getComponentCount() == 0) {
this.add(getEmptyEditor(), BorderLayout.CENTER); this.add(getEmptyEditor(), BorderLayout.CENTER);
} else { } else {
this.add(quickEditor, BorderLayout.CENTER); this.add(currentEditor, BorderLayout.CENTER);
} }
validate(); validate();
repaint(); repaint();
} }
} }

250
designer/src/com/fr/quickeditor/CellQuickEditor.java

@ -1,123 +1,129 @@
package com.fr.quickeditor; package com.fr.quickeditor;
import com.fr.base.BaseUtils; import com.fr.base.BaseUtils;
import com.fr.design.actions.utils.DeprecatedActionManager; import com.fr.design.actions.utils.DeprecatedActionManager;
import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.itextfield.UITextField; import com.fr.design.gui.itextfield.UITextField;
import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper; import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.ElementCasePane; import com.fr.design.mainframe.ElementCasePane;
import com.fr.design.selection.QuickEditor; import com.fr.design.selection.QuickEditor;
import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.general.Inter; import com.fr.general.Inter;
import com.fr.grid.selection.CellSelection; import com.fr.grid.selection.CellSelection;
import com.fr.report.cell.TemplateCellElement; import com.fr.report.cell.TemplateCellElement;
import com.fr.stable.ColumnRow; import com.fr.stable.ColumnRow;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
/** /**
* * @author zhou
* @author zhou * @since 2012-7-23下午5:16:53
* @since 2012-7-23下午5:16:53 */
*/ public abstract class CellQuickEditor extends QuickEditor<ElementCasePane> {
public abstract class CellQuickEditor extends QuickEditor<ElementCasePane> {
protected UITextField columnRowTextField;
protected UITextField columnRowTextField; private UIButton cellElementEditButton;
protected UIButton cellElementEditButton; protected TemplateCellElement cellElement;
protected TemplateCellElement cellElement;
public CellQuickEditor() {
public CellQuickEditor() { double p = TableLayout.PREFERRED;
double p = TableLayout.PREFERRED; double f = TableLayout.FILL;
double f = TableLayout.FILL; double[] columnSize = {p, f};
double[] columnSize = { p, f }; double[] rowSize = {p, p, p};
double[] rowSize = { p,p,p}; Component[][] components = new Component[][]{
new Component[]{new UILabel(" " + Inter.getLocText("Cell")), columnRowTextField = initColumnRowTextField()},
Component[][] components = new Component[][]{ new Component[]{new UILabel(Inter.getLocText("HF-Insert_Content") + " "), cellElementEditButton = initCellElementEditButton()},
new Component[]{new UILabel(" "+Inter.getLocText("Cell")),columnRowTextField = initColumnRowTextField()}, new Component[]{createCenterBody(), null}
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));
JPanel panel = TableLayoutHelper.createTableLayoutPane(components,rowSize,columnSize); this.add(panel, BorderLayout.CENTER);
this.setLayout(new BorderLayout()); }
this.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
this.add(panel,BorderLayout.CENTER); /**
* 初始化添加按钮
* TODO 9.0 换成下拉菜单后原来的快捷键不好处理先跳过
*
} * @return UIButton
*/
protected UIButton initCellElementEditButton() { private UIButton initCellElementEditButton() {
final UIButton cellElementEditButton = new UIButton(BaseUtils.readIcon("/com/fr/design/images/buttonicon/add.png")); final UIButton cellElementEditButton = new UIButton(BaseUtils.readIcon("/com/fr/design/images/buttonicon/add.png"));
cellElementEditButton.addMouseListener(new MouseAdapter() { cellElementEditButton.addMouseListener(new MouseAdapter() {
@Override @Override
public void mousePressed(MouseEvent evt) { public void mousePressed(MouseEvent evt) {
GUICoreUtils.showPopMenuWithParentWidth(DeprecatedActionManager.getCellMenu(tc).createJPopupMenu(), cellElementEditButton, 0, cellElementEditButton.getY() - 6); GUICoreUtils.showPopMenuWithParentWidth(DeprecatedActionManager.getCellMenu(tc).createJPopupMenu(), cellElementEditButton, 0, cellElementEditButton.getY() - 6);
} }
}); });
return cellElementEditButton; return cellElementEditButton;
} }
protected UITextField initColumnRowTextField() { /**
final UITextField columnRowTextField = new UITextField(4); * 初始化单元格域存储当前选择的单元格例A3,B4等
// barry:输入位置定位单元格 *
columnRowTextField.addActionListener(new ActionListener() { * @return 单元格信息文本域
*/
@Override private UITextField initColumnRowTextField() {
public void actionPerformed(ActionEvent e) { final UITextField columnRowTextField = new UITextField(4);
ColumnRow columnRowEdit = ColumnRow.valueOf(columnRowTextField.getText());
// barry:输入位置定位单元格
// barry:检查输入是否正确 columnRowTextField.addActionListener(new ActionListener() {
if (!ColumnRow.validate(columnRowEdit)) { @Override
public void actionPerformed(ActionEvent e) {
Object[] options = { Inter.getLocText("OK") }; ColumnRow columnRowEdit = ColumnRow.valueOf(columnRowTextField.getText());
JOptionPane.showOptionDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("Please_Input_Letters+Numbers(A1,AA1,A11....)"), Inter.getLocText("Warning"), // barry:检查输入是否正确
JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]); if (!ColumnRow.validate(columnRowEdit)) {
Object[] options = {Inter.getLocText("OK")};
// 重新选中当前的selection,把columnRowTextField JOptionPane.showOptionDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("Please_Input_Letters+Numbers(A1,AA1,A11....)"), Inter.getLocText("Warning"),
tc.setSelection(tc.getSelection()); JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]);
return; // 重新选中当前的selection,把columnRowTextField
} tc.setSelection(tc.getSelection());
return;
JScrollBar verticalBar = tc.getVerticalScrollBar(), horizontalBar = tc.getHorizontalScrollBar(); }
int m = columnRowEdit.getColumn(), n = columnRowEdit.getRow(); JScrollBar verticalBar = tc.getVerticalScrollBar(), horizontalBar = tc.getHorizontalScrollBar();
int m = columnRowEdit.getColumn(), n = columnRowEdit.getRow();
verticalBar.setMaximum(n); verticalBar.setMaximum(n);
verticalBar.setValue(n < 21 ? verticalBar.getValue() : n - 20); verticalBar.setValue(n < 21 ? verticalBar.getValue() : n - 20);
horizontalBar.setMaximum(m); horizontalBar.setMaximum(m);
horizontalBar.setValue(m < 13 ? horizontalBar.getValue() : m - 12); horizontalBar.setValue(m < 13 ? horizontalBar.getValue() : m - 12);
tc.setSelection(new CellSelection(m, n, 1, 1));
tc.setSelection(new CellSelection(m, n, 1, 1)); tc.requestFocus();
tc.requestFocus(); }
} });
}); return columnRowTextField;
return columnRowTextField; }
}
public abstract JComponent createCenterBody(); /**
* 初始化详细信息面板
@Override *
protected void refresh() { * @return JComponent 待显示的详细信息面板
CellSelection cs = (CellSelection)tc.getSelection(); */
ColumnRow columnRow = ColumnRow.valueOf(cs.getColumn(), cs.getRow()); public abstract JComponent createCenterBody();
columnRowTextField.setText(columnRow.toString());
cellElement = tc.getEditingElementCase().getTemplateCellElement(cs.getColumn(), cs.getRow()); /**
refreshDetails(); * 刷新
} */
@Override
protected abstract void refreshDetails(); 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();
} }

122
designer/src/com/fr/quickeditor/cellquick/CellBiasTextPainterEditor.java

@ -1,61 +1,63 @@
package com.fr.quickeditor.cellquick; package com.fr.quickeditor.cellquick;
import java.awt.event.ActionEvent; import com.fr.base.BaseUtils;
import java.awt.event.ActionListener; import com.fr.design.cell.editor.BiasTextPainterCellEditor.BiasTextPainterPane;
import com.fr.design.dialog.DialogActionAdapter;
import javax.swing.BorderFactory; import com.fr.design.gui.ibutton.UIButton;
import javax.swing.JComponent; import com.fr.design.mainframe.DesignerContext;
import com.fr.general.ComparatorUtils;
import com.fr.base.BaseUtils; import com.fr.general.Inter;
import com.fr.design.cell.editor.BiasTextPainterCellEditor.BiasTextPainterPane; import com.fr.quickeditor.CellQuickEditor;
import com.fr.design.gui.ibutton.UIButton; import com.fr.report.cell.painter.BiasTextPainter;
import com.fr.design.mainframe.DesignerContext;
import com.fr.design.dialog.DialogActionAdapter; import javax.swing.*;
import com.fr.general.ComparatorUtils; import java.awt.event.ActionEvent;
import com.fr.general.Inter; import java.awt.event.ActionListener;
import com.fr.quickeditor.CellQuickEditor;
import com.fr.report.cell.painter.BiasTextPainter; /**
* 单元格元素斜线编辑器
public class CellBiasTextPainterEditor extends CellQuickEditor { * TODO 9.0 大体没有改动
*/
@Override public class CellBiasTextPainterEditor extends CellQuickEditor {
public JComponent createCenterBody() {
UIButton editbutton = new UIButton(Inter.getLocText("Edit"), BaseUtils.readIcon("/com/fr/design/images/m_insert/bias.png")); @Override
editbutton.addActionListener(new ActionListener() { public JComponent createCenterBody() {
UIButton editbutton = new UIButton(Inter.getLocText("Edit"), BaseUtils.readIcon("/com/fr/design/images/m_insert/bias.png"));
@Override editbutton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
showEditingDialog(); @Override
} public void actionPerformed(ActionEvent e) {
}); showEditingDialog();
editbutton.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 0)); }
editbutton.setMargin(null); });
editbutton.setOpaque(false); editbutton.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 0));
return editbutton; editbutton.setMargin(null);
} editbutton.setOpaque(false);
return editbutton;
private void showEditingDialog() { }
final BiasTextPainter oldbiasTextPainter = (BiasTextPainter)cellElement.getValue();
final BiasTextPainterPane biasTextPainterPane = new BiasTextPainterPane(); private void showEditingDialog() {
biasTextPainterPane.populate(oldbiasTextPainter); final BiasTextPainter oldbiasTextPainter = (BiasTextPainter) cellElement.getValue();
biasTextPainterPane.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { final BiasTextPainterPane biasTextPainterPane = new BiasTextPainterPane();
biasTextPainterPane.populate(oldbiasTextPainter);
@Override biasTextPainterPane.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() {
public void doOk() {
BiasTextPainter newbiasTextPainter = biasTextPainterPane.update(); @Override
if (!ComparatorUtils.equals(oldbiasTextPainter, newbiasTextPainter)) { public void doOk() {
cellElement.setValue(newbiasTextPainter); BiasTextPainter newbiasTextPainter = biasTextPainterPane.update();
fireTargetModified(); if (!ComparatorUtils.equals(oldbiasTextPainter, newbiasTextPainter)) {
} cellElement.setValue(newbiasTextPainter);
} fireTargetModified();
}
}).setVisible(true); }
}
}).setVisible(true);
@Override }
protected void refreshDetails() {
// TODO Auto-generated method stub @Override
protected void refreshDetails() {
} // TODO Auto-generated method stub
}
} }

310
designer/src/com/fr/quickeditor/cellquick/CellDSColumnEditor.java

@ -1,111 +1,201 @@
package com.fr.quickeditor.cellquick; package com.fr.quickeditor.cellquick;
import com.fr.design.actions.columnrow.DSColumnAdvancedAction; import com.fr.design.actions.columnrow.DSColumnConditionAction;
import com.fr.design.actions.columnrow.DSColumnBasicAction; import com.fr.design.dscolumn.DSColumnAdvancedEditorPane;
import com.fr.design.actions.columnrow.DSColumnConditionAction; import com.fr.design.dscolumn.DSColumnBasicEditorPane;
import com.fr.design.constants.LayoutConstants; import com.fr.design.dscolumn.ResultSetGroupDockingPane;
import com.fr.design.dscolumn.ResultSetGroupDockingPane; import com.fr.design.dscolumn.SelectedDataColumnPane;
import com.fr.design.dscolumn.SelectedDataColumnPane; import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.UIHeadGroup;
import com.fr.design.layout.TableLayout; import com.fr.design.gui.ilable.UILabel;
import com.fr.design.layout.TableLayoutHelper; import com.fr.design.layout.TableLayout;
import com.fr.quickeditor.CellQuickEditor; import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.mainframe.cell.CellEditorPane;
import javax.swing.*; import com.fr.design.utils.gui.GUICoreUtils;
import java.awt.*; import com.fr.quickeditor.CellQuickEditor;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener; import javax.swing.*;
import java.awt.*;
public class CellDSColumnEditor extends CellQuickEditor { import java.awt.event.ItemEvent;
private JPanel dsColumnRegion; import java.awt.event.ItemListener;
private JPanel centerPane; import java.util.ArrayList;
private SelectedDataColumnPane dataPane;
private ResultSetGroupDockingPane groupPane; /**
private ItemListener groupListener = new ItemListener() { * 单元格元素 数据列编辑器
*
@Override * @author yaoh.wu
public void itemStateChanged(ItemEvent e) { * @version 2017年7月24日
if (e == null) { * @since 9.0
//分组-高级-自定义点确定的时候传进来null的e,但是这时候应该触发保存 */
groupPane.update(); public class CellDSColumnEditor extends CellQuickEditor {
fireTargetModified();
return; private JPanel dsColumnRegion;
} private JPanel centerPane;
if (e.getStateChange() == ItemEvent.DESELECTED) { //数据集列选择组件
if (!isEditing) { private SelectedDataColumnPane dataPane;
return; //数据分组设置组件
} private ResultSetGroupDockingPane groupPane;
groupPane.update(); //过滤条件面板
fireTargetModified(); private JPanel conditionPane;
} // 基本和高级设置
} private ArrayList<CellEditorPane> paneList;
}; // 基本和高级设置 卡片布局
private CardLayout card;
private ItemListener dataListener = new ItemListener() { // 基本和高级设置 容器面板
private JPanel center;
@Override // 卡片布局TAB切换按钮
public void itemStateChanged(ItemEvent e) { private UIHeadGroup tabsHeaderIconPane;
if (e.getStateChange() == ItemEvent.SELECTED) { // 分组设置监听器
if (!isEditing) { private ItemListener groupListener = new ItemListener() {
return; @Override
} public void itemStateChanged(ItemEvent e) {
dataPane.update(cellElement); if (e == null) {
fireTargetModified(); //分组-高级-自定义点确定的时候传进来null的e,但是这时候应该触发保存
} groupPane.update();
} fireTargetModified();
}; return;
}
private CellDSColumnEditor() { if (e.getStateChange() == ItemEvent.DESELECTED) {
super(); if (!isEditing) {
} return;
}
@Override groupPane.update();
public JComponent createCenterBody() { fireTargetModified();
double p = TableLayout.PREFERRED; }
double f = TableLayout.FILL; }
double[] columnSize = {p, f}; };
double[] rowSize = {p, p, p, p}; //数据集列设置监听器
Component[][] components = new Component[][]{}; private ItemListener dataListener = new ItemListener() {
dsColumnRegion = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); @Override
centerPane = new JPanel(new BorderLayout(0, 0)); public void itemStateChanged(ItemEvent e) {
centerPane.add(dsColumnRegion, BorderLayout.CENTER); if (e.getStateChange() == ItemEvent.SELECTED) {
return centerPane; if (!isEditing) {
} return;
}
// august:这里面的东西都全部重新动态生成,不然容易出错 dataPane.update(cellElement);
@Override fireTargetModified();
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; private CellDSColumnEditor() {
double f = TableLayout.FILL; super();
double[] columnSize = {p, f}; }
double[] rowSize = {p, p, p, p};
Component[][] components = new Component[][]{ /**
new Component[]{new UIButton(new DSColumnBasicAction(tc)), null}, * Test Main
new Component[]{pane, null}, *
new Component[]{dataPane = new SelectedDataColumnPane(false), null}, * @param args 参数
new Component[]{groupPane = new ResultSetGroupDockingPane(tc), null} */
}; public static void main(String[] args) {
centerPane.removeAll(); JFrame jf = new JFrame("test");
dsColumnRegion = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
centerPane.add(dsColumnRegion, BorderLayout.CENTER); JPanel content = (JPanel) jf.getContentPane();
dataPane.addListener(dataListener); content.setLayout(new BorderLayout());
groupPane.addListener(groupListener); content.add(new CellDSColumnEditor(), BorderLayout.CENTER);
dataPane.populate(null, cellElement); GUICoreUtils.centerWindow(jf);
groupPane.populate(cellElement); jf.setSize(220, 400);
this.validate(); jf.setVisible(true);
} }
/**
/** * 创建面板占位
* for 关闭时候释放 *
*/ * @return JComponent 详细信息面板
public void release () { */
super.release(); @Override
dsColumnRegion = null; public JComponent createCenterBody() {
centerPane = null; 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());
}
} }

150
designer/src/com/fr/quickeditor/cellquick/CellImageQuickEditor.java

@ -1,75 +1,77 @@
package com.fr.quickeditor.cellquick; package com.fr.quickeditor.cellquick;
import java.awt.event.ActionEvent; import com.fr.base.BaseUtils;
import java.awt.event.ActionListener; import com.fr.base.Style;
import com.fr.design.dialog.DialogActionAdapter;
import javax.swing.BorderFactory; import com.fr.design.gui.ibutton.UIButton;
import javax.swing.JComponent; import com.fr.design.mainframe.DesignerContext;
import com.fr.design.report.SelectImagePane;
import com.fr.base.BaseUtils; import com.fr.general.ComparatorUtils;
import com.fr.base.Style; import com.fr.general.Inter;
import com.fr.design.gui.ibutton.UIButton; import com.fr.quickeditor.CellQuickEditor;
import com.fr.design.mainframe.DesignerContext; import com.fr.report.cell.cellattr.CellImage;
import com.fr.design.report.SelectImagePane;
import com.fr.design.dialog.DialogActionAdapter; import javax.swing.*;
import com.fr.general.ComparatorUtils; import java.awt.event.ActionEvent;
import com.fr.general.Inter; import java.awt.event.ActionListener;
import com.fr.quickeditor.CellQuickEditor;
import com.fr.report.cell.cellattr.CellImage; /**
* 单元格元素图片编辑器
public class CellImageQuickEditor extends CellQuickEditor { * TODO 9.0大体上没有改动
private static CellImageQuickEditor THIS; */
public class CellImageQuickEditor extends CellQuickEditor {
public static final CellImageQuickEditor getInstance() { private static CellImageQuickEditor THIS;
if(THIS == null) {
THIS = new CellImageQuickEditor(); public static final CellImageQuickEditor getInstance() {
} if (THIS == null) {
return THIS; THIS = new CellImageQuickEditor();
} }
return THIS;
private CellImageQuickEditor() { }
super();
} private CellImageQuickEditor() {
super();
@Override }
public JComponent createCenterBody() {
UIButton editbutton = new UIButton(Inter.getLocText("Edit"), BaseUtils.readIcon("/com/fr/design/images/m_insert/image.png")); @Override
editbutton.addActionListener(new ActionListener() { public JComponent createCenterBody() {
UIButton editbutton = new UIButton(Inter.getLocText("Edit"), BaseUtils.readIcon("/com/fr/design/images/m_insert/image.png"));
@Override editbutton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
showEditingDialog(); @Override
} public void actionPerformed(ActionEvent e) {
}); showEditingDialog();
editbutton.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 0)); }
editbutton.setMargin(null); });
editbutton.setOpaque(false); editbutton.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 0));
return editbutton; editbutton.setMargin(null);
} editbutton.setOpaque(false);
return editbutton;
private void showEditingDialog() { }
final SelectImagePane imageEditorPane = new SelectImagePane();
imageEditorPane.populate(cellElement); private void showEditingDialog() {
final Object oldValue = cellElement.getValue(); final SelectImagePane imageEditorPane = new SelectImagePane();
final Style oldStyle = cellElement.getStyle(); imageEditorPane.populate(cellElement);
imageEditorPane.showWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { final Object oldValue = cellElement.getValue();
final Style oldStyle = cellElement.getStyle();
@Override imageEditorPane.showWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() {
public void doOk() {
CellImage cellImage = imageEditorPane.update(); @Override
if (!ComparatorUtils.equals(cellImage.getImage(), oldValue) || !ComparatorUtils.equals(cellImage.getStyle(), oldStyle)) { public void doOk() {
cellElement.setValue(cellImage.getImage()); CellImage cellImage = imageEditorPane.update();
cellElement.setStyle(cellImage.getStyle()); if (!ComparatorUtils.equals(cellImage.getImage(), oldValue) || !ComparatorUtils.equals(cellImage.getStyle(), oldStyle)) {
fireTargetModified(); cellElement.setValue(cellImage.getImage());
} cellElement.setStyle(cellImage.getStyle());
} fireTargetModified();
}
}).setVisible(true); }
}
}).setVisible(true);
@Override }
protected void refreshDetails() {
@Override
} protected void refreshDetails() {
}
} }

98
designer/src/com/fr/quickeditor/cellquick/CellRichTextEditor.java

@ -1,50 +1,50 @@
package com.fr.quickeditor.cellquick; package com.fr.quickeditor.cellquick;
import javax.swing.BorderFactory; import com.fr.design.actions.insert.cell.RichTextCellAction;
import javax.swing.JComponent; import com.fr.design.gui.ibutton.UIButton;
import com.fr.general.Inter;
import com.fr.design.actions.insert.cell.RichTextCellAction; import com.fr.quickeditor.CellQuickEditor;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.general.Inter; import javax.swing.*;
import com.fr.quickeditor.CellQuickEditor;
/**
public class CellRichTextEditor extends CellQuickEditor { * 单元格元素富文本编辑器
private UIButton subReportButton; * TODO 9.0 大体上没有改动
private static CellRichTextEditor THIS; */
public class CellRichTextEditor extends CellQuickEditor {
public static final CellRichTextEditor getInstance() { private UIButton subReportButton;
if(THIS == null) { private static CellRichTextEditor THIS;
THIS = new CellRichTextEditor();
} public static final CellRichTextEditor getInstance() {
return THIS; if (THIS == null) {
} THIS = new CellRichTextEditor();
}
private CellRichTextEditor() { return THIS;
super(); }
}
private CellRichTextEditor() {
/** super();
* 创建界面上中间的部分 }
*
* @return 界面元素 /**
* * 创建界面上中间的部分
* *
* @date 2014-12-7-下午9:41:52 * @return 界面元素
* * @date 2014-12-7-下午9:41:52
*/ */
public JComponent createCenterBody() { public JComponent createCenterBody() {
subReportButton = new UIButton(); subReportButton = new UIButton();
subReportButton.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 0)); subReportButton.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 0));
subReportButton.setMargin(null); subReportButton.setMargin(null);
subReportButton.setOpaque(false); subReportButton.setOpaque(false);
return subReportButton; return subReportButton;
} }
@Override @Override
protected void refreshDetails() { protected void refreshDetails() {
RichTextCellAction subReportCellAction = new RichTextCellAction(tc); RichTextCellAction subReportCellAction = new RichTextCellAction(tc);
subReportCellAction.setName(Inter.getLocText("FR-Designer_RichTextEditor")); subReportCellAction.setName(Inter.getLocText("FR-Designer_RichTextEditor"));
subReportButton.setAction(subReportCellAction); subReportButton.setAction(subReportCellAction);
} }
} }

304
designer/src/com/fr/quickeditor/cellquick/CellStringQuickEditor.java

@ -1,151 +1,155 @@
package com.fr.quickeditor.cellquick; package com.fr.quickeditor.cellquick;
import java.awt.event.KeyAdapter; import com.fr.base.Formula;
import java.awt.event.KeyEvent; import com.fr.base.Style;
import com.fr.base.TextFormat;
import javax.swing.JComponent; import com.fr.design.gui.itextfield.UITextField;
import javax.swing.event.DocumentEvent; import com.fr.grid.selection.CellSelection;
import javax.swing.event.DocumentListener; import com.fr.quickeditor.CellQuickEditor;
import com.fr.report.ReportHelper;
import com.fr.base.Formula; import com.fr.report.cell.DefaultTemplateCellElement;
import com.fr.base.Style; import com.fr.stable.ColumnRow;
import com.fr.base.TextFormat; import com.fr.stable.StringUtils;
import com.fr.design.gui.itextfield.UITextField;
import com.fr.grid.selection.CellSelection; import javax.swing.*;
import com.fr.quickeditor.CellQuickEditor; import javax.swing.event.DocumentEvent;
import com.fr.report.ReportHelper; import javax.swing.event.DocumentListener;
import com.fr.report.cell.DefaultTemplateCellElement; import java.awt.event.KeyAdapter;
import com.fr.stable.ColumnRow; import java.awt.event.KeyEvent;
import com.fr.stable.StringUtils;
/**
public class CellStringQuickEditor extends CellQuickEditor { *
*/
public class CellStringQuickEditor extends CellQuickEditor {
private static CellStringQuickEditor THIS; //instance
private static CellStringQuickEditor THIS;
private UITextField stringTextField; //文本域
//TODO 9.0 文本域要根据具体文本数量自适应大小,比较难搞,先跳过。
private boolean isEditing = false; private UITextField stringTextField;
//编辑状态
public static final CellStringQuickEditor getInstance() { private boolean isEditing = false;
if (THIS == null) {
THIS = new CellStringQuickEditor(); public static CellStringQuickEditor getInstance() {
} if (THIS == null) {
return THIS; THIS = new CellStringQuickEditor();
} }
return THIS;
// august:如果是原来编辑的是公式,要保留公式里的这些属性,不然在公式和字符串转化时,就会丢失这些属性设置 }
private boolean reserveInResult = false;
private boolean reserveOnWriteOrAnaly = true; //august:如果是原来编辑的是公式,要保留公式里的这些属性,不然在公式和字符串转化时,就会丢失这些属性设置。
private boolean reserveInResult = false;
private CellStringQuickEditor() { private boolean reserveOnWriteOrAnaly = true;
super();
} private DocumentListener documentListener = new DocumentListener() {
@Override
@Override public void insertUpdate(DocumentEvent e) {
/** changeReportPaneCell(stringTextField.getText().trim());
* }
*/
public JComponent createCenterBody() { @Override
stringTextField = new UITextField(); public void removeUpdate(DocumentEvent e) {
stringTextField.addKeyListener(new KeyAdapter() { changeReportPaneCell(stringTextField.getText().trim());
}
@Override
public void keyReleased(KeyEvent e) { @Override
if (tc != null) { public void changedUpdate(DocumentEvent e) {
tc.getGrid().dispatchEvent(e); changeReportPaneCell(stringTextField.getText().trim());
} }
}
};
});
private CellStringQuickEditor() {
return stringTextField; super();
} }
DocumentListener documentListener = new DocumentListener() { /**
* 详细信息面板
@Override * todo 文本框可自适应大小公式编辑也是在这边如果是公式那么要加一个公式编辑器的触发按钮
public void insertUpdate(DocumentEvent e) { */
changeReportPaneCell(stringTextField.getText().trim()); @Override
} public JComponent createCenterBody() {
stringTextField = new UITextField();
@Override stringTextField.addKeyListener(new KeyAdapter() {
public void removeUpdate(DocumentEvent e) { @Override
changeReportPaneCell(stringTextField.getText().trim()); public void keyReleased(KeyEvent e) {
} if (tc != null) {
tc.getGrid().dispatchEvent(e);
@Override }
public void changedUpdate(DocumentEvent e) { }
changeReportPaneCell(stringTextField.getText().trim()); });
} return stringTextField;
}
};
protected void changeReportPaneCell(String tmpText) { private void changeReportPaneCell(String tmpText) {
isEditing = true; isEditing = true;
//refresh一下,如果单元格内有新添加的控件,此时并不知道 //refresh一下,如果单元格内有新添加的控件,此时并不知道
CellSelection cs1 = (CellSelection) tc.getSelection(); CellSelection cs1 = (CellSelection) tc.getSelection();
ColumnRow columnRow = ColumnRow.valueOf(cs1.getColumn(), cs1.getRow()); ColumnRow columnRow = ColumnRow.valueOf(cs1.getColumn(), cs1.getRow());
columnRowTextField.setText(columnRow.toString()); columnRowTextField.setText(columnRow.toString());
cellElement = tc.getEditingElementCase().getTemplateCellElement(cs1.getColumn(), cs1.getRow()); cellElement = tc.getEditingElementCase().getTemplateCellElement(cs1.getColumn(), cs1.getRow());
if (cellElement == null) { if (cellElement == null) {
CellSelection cs = (CellSelection) tc.getSelection(); CellSelection cs = (CellSelection) tc.getSelection();
cellElement = new DefaultTemplateCellElement(cs.getColumn(), cs.getRow()); cellElement = new DefaultTemplateCellElement(cs.getColumn(), cs.getRow());
tc.getEditingElementCase().addCellElement(cellElement, false); tc.getEditingElementCase().addCellElement(cellElement, false);
} }
if (tmpText != null && (tmpText.length() > 0 && tmpText.charAt(0) == '=')) { if (tmpText != null && (tmpText.length() > 0 && tmpText.charAt(0) == '=')) {
Formula textFormula = new Formula(tmpText); Formula textFormula = new Formula(tmpText);
textFormula.setReserveInResult(reserveInResult); textFormula.setReserveInResult(reserveInResult);
textFormula.setReserveOnWriteOrAnaly(reserveOnWriteOrAnaly); textFormula.setReserveOnWriteOrAnaly(reserveOnWriteOrAnaly);
cellElement.setValue(textFormula); cellElement.setValue(textFormula);
} else { } else {
Style style = cellElement.getStyle(); Style style = cellElement.getStyle();
if (cellElement != null && style != null && style.getFormat() != null && style.getFormat() == TextFormat.getInstance()) { if (style != null && style.getFormat() != null && style.getFormat() == TextFormat.getInstance()) {
cellElement.setValue(tmpText); cellElement.setValue(tmpText);
} else { } else {
cellElement.setValue(ReportHelper.convertGeneralStringAccordingToExcel(tmpText)); cellElement.setValue(ReportHelper.convertGeneralStringAccordingToExcel(tmpText));
} }
} }
fireTargetModified(); fireTargetModified();
stringTextField.requestFocus(); stringTextField.requestFocus();
isEditing = false; isEditing = false;
} }
@Override /**
protected void refreshDetails() { * 刷新详细内容
String str = null; */
if (cellElement == null) { @Override
str = StringUtils.EMPTY; protected void refreshDetails() {
} else { String str;
Object value = cellElement.getValue(); if (cellElement == null) {
if (value == null) { str = StringUtils.EMPTY;
str = StringUtils.EMPTY; } else {
} else if (value instanceof Formula) { Object value = cellElement.getValue();
Formula formula = (Formula) value; if (value == null) {
str = formula.getContent(); str = StringUtils.EMPTY;
reserveInResult = formula.isReserveInResult(); } else if (value instanceof Formula) {
reserveOnWriteOrAnaly = formula.isReserveOnWriteOrAnaly(); Formula formula = (Formula) value;
} else { str = formula.getContent();
str = value.toString(); reserveInResult = formula.isReserveInResult();
} reserveOnWriteOrAnaly = formula.isReserveOnWriteOrAnaly();
} } else {
showText(str); str = value.toString();
stringTextField.setEditable(tc.isSelectedOneCell()); }
} }
showText(str);
/** stringTextField.setEditable(tc.isSelectedOneCell());
* }
* @param str
*/ /**
public void showText(String str) { * 显示文本
// 本编辑框在输入过程中引发的后续事件如果还调用了本框的setText方法不能执行 *
if (isEditing) { * @param str 文本
return; */
} public void showText(String str) {
stringTextField.getDocument().removeDocumentListener(documentListener); // 正在编辑时不处理
stringTextField.setText(str); if (isEditing) {
stringTextField.getDocument().addDocumentListener(documentListener); return;
} }
stringTextField.getDocument().removeDocumentListener(documentListener);
stringTextField.setText(str);
stringTextField.getDocument().addDocumentListener(documentListener);
}
} }

85
designer/src/com/fr/quickeditor/cellquick/CellSubReportEditor.java

@ -1,42 +1,45 @@
package com.fr.quickeditor.cellquick; package com.fr.quickeditor.cellquick;
import javax.swing.BorderFactory; import com.fr.design.actions.insert.cell.SubReportCellAction;
import javax.swing.JComponent; import com.fr.design.gui.ibutton.UIButton;
import com.fr.general.Inter;
import com.fr.design.actions.insert.cell.SubReportCellAction; import com.fr.quickeditor.CellQuickEditor;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.general.Inter; import javax.swing.*;
import com.fr.quickeditor.CellQuickEditor;
/**
public class CellSubReportEditor extends CellQuickEditor { * 单元格元素子报表编辑器
private UIButton subReportButton; * TODO 9.0大体上没有改动
private static CellSubReportEditor THIS; */
public class CellSubReportEditor extends CellQuickEditor {
public static final CellSubReportEditor getInstance() { private UIButton subReportButton;
if(THIS == null) { private static CellSubReportEditor THIS;
THIS = new CellSubReportEditor();
} public static final CellSubReportEditor getInstance() {
return THIS; if (THIS == null) {
} THIS = new CellSubReportEditor();
}
private CellSubReportEditor() { return THIS;
super(); }
}
private CellSubReportEditor() {
@Override super();
public JComponent createCenterBody() { }
subReportButton = new UIButton();
subReportButton.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 0)); @Override
subReportButton.setMargin(null); public JComponent createCenterBody() {
subReportButton.setOpaque(false); subReportButton = new UIButton();
return subReportButton; subReportButton.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 0));
} subReportButton.setMargin(null);
subReportButton.setOpaque(false);
@Override return subReportButton;
protected void refreshDetails() { }
SubReportCellAction subReportCellAction = new SubReportCellAction(tc);
subReportCellAction.setName(Inter.getLocText(new String[]{"Edit", "Sub_Report"})); @Override
subReportButton.setAction(subReportCellAction); protected void refreshDetails() {
} SubReportCellAction subReportCellAction = new SubReportCellAction(tc);
subReportCellAction.setName(Inter.getLocText(new String[]{"Edit", "Sub_Report"}));
subReportButton.setAction(subReportCellAction);
}
} }
Loading…
Cancel
Save