Browse Source

REPORT-3348,踩坑,数据列展现方案确定

master
yaoh.wu 7 years ago
parent
commit
50804bd563
  1. 38
      designer/src/com/fr/design/dscolumn/DSColumnAdvancedEditorPane.java
  2. 71
      designer/src/com/fr/design/dscolumn/DSColumnBasicEditorPane.java
  3. 30
      designer/src/com/fr/design/mainframe/cell/CellEditorPane.java
  4. 90
      designer/src/com/fr/design/mainframe/cell/QuickEditorRegion.java
  5. 250
      designer/src/com/fr/quickeditor/CellQuickEditor.java
  6. 94
      designer/src/com/fr/quickeditor/cellquick/CellBiasTextPainterEditor.java
  7. 291
      designer/src/com/fr/quickeditor/cellquick/CellDSColumnEditor.java
  8. 106
      designer/src/com/fr/quickeditor/cellquick/CellImageQuickEditor.java
  9. 80
      designer/src/com/fr/quickeditor/cellquick/CellRichTextEditor.java
  10. 98
      designer/src/com/fr/quickeditor/cellquick/CellStringQuickEditor.java
  11. 67
      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) {
}
}

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

@ -0,0 +1,71 @@
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;
public DSColumnBasicEditorPane(TemplateCellElement cellElement, SelectedDataColumnPane dataPane, ResultSetGroupDockingPane groupPane) {
this.cellElement = cellElement;
this.dataPane = dataPane;
this.groupPane = groupPane;
this.add(this.createContentPane(), BorderLayout.CENTER);
}
private JPanel createContentPane() {
double p = TableLayout.PREFERRED;
double f = TableLayout.FILL;
double[] columnSize = {p, f};
double[] rowSize = {p, p};
Component[][] components = new Component[][]{
//数据集列选择
new Component[]{this.dataPane, null},
//数据分组设置
new Component[]{this.groupPane, null}
};
return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize);
}
@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);
}
}

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

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

@ -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;
import com.fr.general.Inter;
import javax.swing.*;
import java.awt.*;
/**
* QuickEditorRegion
*
* @editor zhou
* @since 2012-3-23下午3:21:36
*
* @author zhou, yaoh.wu
* @version 2017年7月25日
* @since 8.0
*/
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();
}
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();
}
}

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

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

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

@ -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.dialog.DialogActionAdapter;
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;
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
}
@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
}
}

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

@ -1,111 +1,182 @@
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.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.UIHeadGroup;
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 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.initPaneList();
this.initSwitchTab();
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;
}
/**
* TODO 内容全部重新动态生成不然容易出错
* 刷新详细信息面板
*/
@Override
protected void refreshDetails() {
for (CellEditorPane cellEditorPane : paneList) {
cellEditorPane.populate(cellElement);
}
this.validate();
}
/**
* 关闭时候释放
*/
public void release() {
super.release();
dsColumnRegion = null;
centerPane = null;
}
/**
* 初始化数据列基本和高级设置面板
*/
private void initPaneList() {
paneList = new ArrayList<>();
paneList.add(this.initBasicPane());
paneList.add(this.initAdvancedPane());
/*
todo 预留插件的接口
doSomething()
*/
}
/**
* 初始化基本和高级设置切换tab
*/
private void initSwitchTab() {
String[] iconArray = new String[paneList.size()];
card = new CardLayout();
center = new JPanel(card);
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 DSColumnBasicEditorPane initBasicPane() {
this.dataPane = new SelectedDataColumnPane(false);
this.groupPane = new ResultSetGroupDockingPane(tc);
dataPane.addListener(dataListener);
groupPane.addListener(groupListener);
return new DSColumnBasicEditorPane(cellElement, dataPane, groupPane);
}
private DSColumnAdvancedEditorPane initAdvancedPane() {
return new DSColumnAdvancedEditorPane();
}
}

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

@ -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.dialog.DialogActionAdapter;
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;
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 static CellImageQuickEditor THIS;
public static final CellImageQuickEditor getInstance() {
if (THIS == null) {
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"));
editbutton.addActionListener(new ActionListener() {
@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;
}
@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() {
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();
}
}
@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);
}
}).setVisible(true);
}
@Override
protected void refreshDetails() {
@Override
protected void refreshDetails() {
}
}
}

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

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

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

@ -1,12 +1,5 @@
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;
@ -18,71 +11,78 @@ import com.fr.report.cell.DefaultTemplateCellElement;
import com.fr.stable.ColumnRow;
import com.fr.stable.StringUtils;
public class CellStringQuickEditor extends CellQuickEditor {
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;
private boolean isEditing = false;
public static final CellStringQuickEditor getInstance() {
public static CellStringQuickEditor getInstance() {
if (THIS == null) {
THIS = new CellStringQuickEditor();
}
return THIS;
}
// august:如果是原来编辑的是公式,要保留公式里的这些属性,不然在公式和字符串转化时,就会丢失这些属性设置
//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();
}
@Override
/**
*
* 详细信息面板
* 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;
}
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;
private void changeReportPaneCell(String tmpText) {
isEditing = true;
//refresh一下,如果单元格内有新添加的控件,此时并不知道
CellSelection cs1 = (CellSelection) tc.getSelection();
ColumnRow columnRow = ColumnRow.valueOf(cs1.getColumn(), cs1.getRow());
@ -101,7 +101,7 @@ public class CellStringQuickEditor extends CellQuickEditor {
cellElement.setValue(textFormula);
} else {
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);
} else {
cellElement.setValue(ReportHelper.convertGeneralStringAccordingToExcel(tmpText));
@ -109,12 +109,15 @@ public class CellStringQuickEditor extends CellQuickEditor {
}
fireTargetModified();
stringTextField.requestFocus();
isEditing = false;
isEditing = false;
}
/**
* 刷新详细内容
*/
@Override
protected void refreshDetails() {
String str = null;
String str;
if (cellElement == null) {
str = StringUtils.EMPTY;
} else {
@ -135,14 +138,15 @@ public class CellStringQuickEditor extends CellQuickEditor {
}
/**
* 显示文本
*
* @param str
* @param str 文本
*/
public void showText(String str) {
// 本编辑框在输入过程中引发的后续事件如果还调用了本框的setText方法不能执行
if (isEditing) {
return;
}
// 正在编辑时不处理
if (isEditing) {
return;
}
stringTextField.getDocument().removeDocumentListener(documentListener);
stringTextField.setText(str);
stringTextField.getDocument().addDocumentListener(documentListener);

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

@ -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;
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);
}
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);
}
}
Loading…
Cancel
Save