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