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.

116 lines
4.5 KiB

package com.fr.plugin.event.manager;
import com.fr.base.BaseUtils;
import com.fr.base.parameter.ParameterUI;
import com.fr.design.actions.JWorkBookAction;
import com.fr.design.mainframe.JWorkBook;
import com.fr.design.menu.MenuKeySet;
import com.fr.form.event.Listener;
import com.fr.form.ui.Widget;
import com.fr.js.JavaScript;
import com.fr.js.JavaScriptImpl;
import com.fr.main.TemplateWorkBook;
import com.fr.main.parameter.ReportParameterAttr;
import com.fr.plugin.transform.ExecuteFunctionRecord;
import com.fr.plugin.transform.FunctionRecorder;
import com.fr.privilege.finegrain.CellPrivilegeControl;
import com.fr.privilege.finegrain.WorkSheetPrivilegeControl;
import com.fr.report.cell.AbstractWidgetCellElement;
import com.fr.report.cell.CellElement;
import com.fr.report.cell.TemplateCellElement;
import com.fr.report.cell.WidgetAttrElem;
import com.fr.report.cell.cellattr.highlight.DefaultHighlight;
import com.fr.report.cell.cellattr.highlight.WidgetHighlightAction;
import com.fr.report.elementcase.ElementCase;
import com.fr.report.elementcase.TemplateElementCase;
import com.fr.report.report.Report;
import com.fr.report.report.TemplateReport;
import javax.swing.KeyStroke;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import static com.fr.plugin.event.manager.KeySetUtils.EVENT_MANAGER;
/**
* @author Joe
* Created by Joe on 9/3/2020
*/
@FunctionRecorder
public class WorkbookEventManager extends JWorkBookAction {
private List<Widget> widgetList = new ArrayList<>();
public WorkbookEventManager(JWorkBook jwb) {
super(jwb);
this.setMenuKeySet(KeySetUtils.EVENT_MANAGER);
this.setName(getMenuKeySet().getMenuKeySetName() + "...");
this.setMnemonic(getMenuKeySet().getMnemonic());
this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_report/p.png"));
}
@Override
@ExecuteFunctionRecord
public void actionPerformed(ActionEvent e) {
JWorkBook jwb = getEditingComponent();
if (jwb == null) {
return;
}
final TemplateWorkBook wbTpl = jwb.getTarget();
ReportParameterAttr reportParameterAttr = wbTpl.getReportParameterAttr();
// 参数面板获取控件
ParameterUI parameterUI = reportParameterAttr.getParameterUI();
Widget[] widgets = parameterUI.getAllWidgets();
for (Widget widget : widgets) {
if (widget.getListenerSize() > 0) {
// 有事件的控件
widgetList.add(widget);
}
// 获取单元格控件
for (int i = 0; i < wbTpl.getReportCount(); i++) {
Report report = wbTpl.getReport(i);
if (report != null) {
Iterator it = report.iteratorOfElementCase();
while (it.hasNext()) {
ElementCase elementCase = (ElementCase) it.next();
Iterator cellIterator = elementCase.cellIterator();
while (cellIterator.hasNext()) {
CellElement cell = (CellElement) cellIterator.next();
//单元格内有控件
if (cell instanceof TemplateCellElement && ((TemplateCellElement) cell).getWidget() != null) {
Widget widget0 = ((TemplateCellElement) cell).getWidget();
if (widget0.getListenerSize() > 0) {
widgetList.add(widget0);
}
}
}
}
}
}
for (Widget widget1 : widgetList) {
for (int i = 0; i < widget1.getListenerSize(); i++) {
Listener listener = widget1.getListener(i);
JavaScript javaScript = listener.getAction();
System.out.println("控件名:" + widget1.getWidgetName());
System.out.println("事件名:" + listener.getEventName());
System.out.println("事件类型:" + javaScript.getClass().getName());
}
}
/* // 测试修改控件事件
if("test".equals(widget.getWidgetName())) {
Listener listener = new Listener();
listener.setEventName("afterinit");
JavaScriptImpl javaScript = new JavaScriptImpl();
javaScript.setContent("this is a test");
listener.setAction(javaScript);
widget.addListener(listener);
}*/
}
}
}