帆软报表设计器源代码。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

238 lines
6.7 KiB

package com.fr.design.javascript;
import com.fr.base.Parameter;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.itableeditorpane.UITableEditAction;
import com.fr.design.gui.itableeditorpane.UITableModelAdapter;
import com.fr.design.gui.ilist.CheckBoxList;
import com.fr.design.mainframe.DesignerContext;
import com.fr.design.dialog.BasicPane;
import com.fr.design.dialog.DialogActionAdapter;
import com.fr.design.editor.ValueEditorPane;
import com.fr.design.editor.ValueEditorPaneFactory;
import com.fr.design.editor.editor.Editor;
import com.fr.general.ComparatorUtils;
import com.fr.stable.ParameterProvider;
import com.fr.stable.project.ProjectConstants;
import javax.swing.*;
import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellEditor;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;
public class ProcessParameterTableModel extends UITableModelAdapter<ParameterProvider> {
private static final long serialVersionUID = 1L;
public ProcessParameterTableModel() {
super(new String[] { com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Parameter"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Value") });
this.setColumnClass(new Class[] { JLabel.class, ParameterValueEditor.class });
this.setDefaultEditor(ParameterValueEditor.class, new ParameterValueEditor());
this.setDefaultRenderer(ParameterValueEditor.class, new ParameterValueRenderer());
}
/**
* 单元格是否可编辑
* @row 单元格的行号
* @col 单元格的列号
* @return 是否可编辑
*/
public boolean isCellEditable(int row, int col) {
if (col == 0) {
return false;
}
return true;
}
protected Editor[] getCorrespondEditors() {
return ValueEditorPaneFactory.basicEditors();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
ParameterProvider para = this.getList().get(rowIndex);
switch (columnIndex) {
case 0:
return para.getName();
case 1:
return para.getValue();
}
return null;
}
@Override
/**
* 可以做的操作(新增参数和删除参数)
* @return 可以进行的操作(数组)
*/
public UITableEditAction[] createAction() {
return new UITableEditAction[] { new AddParameterAction(), new DeleteAction()};
}
private class ProcessParaPane extends BasicPane {
private CheckBoxList list;
public ProcessParaPane() {
this.initComponents();
}
private void initComponents() {
this.setLayout(new BorderLayout());
list = new CheckBoxList(ProcessTransitionAdapter.getParaNamesWithShared(getEditFilePath()));
this.add(new JScrollPane(list), BorderLayout.CENTER);
}
public void populator(List<String> list) {
this.list.setItems(list.size() < 1 ? new String[0] : list.toArray(new String[list.size()]));
}
public String[] update() {
Object[] os = this.list.getSelectedValues();
String[] ss = new String[os.length];
for (int i = 0, len = os.length; i < len; i++) {
ss[i] = (String)os[i];
}
return ss;
}
@Override
protected String title4PopupWindow() {
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Parameter");
}
private String getEditFilePath() {
//wei : 在文件夹下的模板读取不到流程参数
String path = DesignerContext.getDesignerFrame().getSelectedJTemplate().getEditingFILE().getPath();
if(path.startsWith(ProjectConstants.REPORTLETS_NAME)) {
path = path.substring(ProjectConstants.REPORTLETS_NAME.length() + 1);
}
return path;
}
}
/**
* 刷新参数
* @param names
*/
public void refreshParas(String[] names) {
List<ParameterProvider> nl = new ArrayList<ParameterProvider>();
for (int i = 0, len = names == null ? 0 :names.length; i < len; i++) {
nl.add(this.getParaByName(names[i]));
}
this.setList(nl);
}
private ParameterProvider getParaByName(String name) {
List<ParameterProvider> list = this.getList();
for (int i = 0, len= list.size(); i < len; i++) {
if (ComparatorUtils.equals(list.get(i).getName(), name)) {
return list.get(i);
}
}
return new Parameter(name);
}
protected class AddParameterAction extends AddTableRowAction {
private ProcessParaPane pp;
public AddParameterAction() {
super();
}
@Override
public void actionPerformed(ActionEvent e) {
super.actionPerformed(e);
if (pp == null) {
pp = new ProcessParaPane();
}
List<ParameterProvider> list = getList();
List<String> sist = new ArrayList<String>();
for (int i = 0, len = list.size(); i < len; i++) {
sist.add(list.get(i).getName());
}
pp.populator(sist);
pp.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() {
@Override
public void doOk() {
refreshParas(pp.update());
fireTableDataChanged();
}
}).setVisible(true);
}
}
private class ParameterValueEditor extends AbstractCellEditor implements TableCellEditor {
/**
*
*/
private static final long serialVersionUID = 1L;
private ValueEditorPane editor = ValueEditorPaneFactory.createValueEditorPane(ProcessParameterTableModel.this
.getCorrespondEditors(), null, null);
public ParameterValueEditor() {
this.addCellEditorListener(new CellEditorListener() {
@Override
public void editingCanceled(ChangeEvent e) {
}
@Override
public void editingStopped(ChangeEvent e) {
if (table.getSelectedRow() == -1) {
return;
}
ParameterProvider para = getList().get(table.getSelectedRow());
para.setValue(getCellEditorValue());
fireTableDataChanged();
}
});
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
editor.populate(value == null ? "" : value);
return editor;
}
@Override
public Object getCellEditorValue() {
return editor.update();
}
}
private class ParameterValueRenderer extends DefaultTableCellRenderer {
/**
*
*/
private static final long serialVersionUID = 1L;
private ValueEditorPane editor = ValueEditorPaneFactory.createValueEditorPane(ProcessParameterTableModel.this
.getCorrespondEditors(), null, null);
private UILabel disableLable;
public ParameterValueRenderer() {
disableLable = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Set_Paramete_Name"));
disableLable.setHorizontalAlignment(SwingConstants.CENTER);
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (table.isCellEditable(row, column)) {
if (value == null) {
editor.populate("");
} else {
editor.populate(value);
}
return editor;
} else {
return disableLable;
}
}
}
}