commit a7d30f84d8e7ab89d95be1d13a63a1de4fe7d9b4 Author: Joe.Jiang Date: Fri Nov 13 18:00:18 2020 +0800 first diff --git a/plugin.xml b/plugin.xml new file mode 100644 index 0000000..e1b200b --- /dev/null +++ b/plugin.xml @@ -0,0 +1,18 @@ + + + com.fr.plugin.event.manager + + yes + 1.0 + 10.0 + 2020-02-28 + finereport-joe + + + com.fr.plugin.event.manager + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..beb1f5f --- /dev/null +++ b/pom.xml @@ -0,0 +1,18 @@ + + + + starter + com.fr.plugin + 10.0 + ../../pom.xml + + 4.0.0 + + plugin-event-manager + + + ${project.basedir}/../../webroot/WEB-INF/plugins/plugin-com.fr.plugin.event.manager-1.0/classes + + \ No newline at end of file diff --git a/src/main/java/com/fr/plugin/event/manager/EventManager.java b/src/main/java/com/fr/plugin/event/manager/EventManager.java new file mode 100644 index 0000000..c343e4d --- /dev/null +++ b/src/main/java/com/fr/plugin/event/manager/EventManager.java @@ -0,0 +1,47 @@ +package com.fr.plugin.event.manager; + +import com.fr.design.fun.MenuHandler; +import com.fr.design.fun.impl.AbstractMenuHandler; +import com.fr.design.mainframe.JForm; +import com.fr.design.mainframe.JWorkBook; +import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; +import com.fr.design.menu.ShortCut; + +/** + * @author Joe + * @version 10.0 + * Created by Joe on 9/3/2020 + */ +public class EventManager extends AbstractMenuHandler { + @Override + public int insertPosition(int i) { + return -1; + } + + @Override + public boolean insertSeparatorBefore() { + return true; + } + + @Override + public boolean insertSeparatorAfter() { + return false; + } + + @Override + public String category() { + return MenuHandler.TEMPLATE; + } + + @Override + public ShortCut shortcut(ToolBarMenuDockPlus plus) { + if (plus instanceof JWorkBook) { + return new WorkbookEventManager((JWorkBook) plus); + } else if (plus instanceof JForm) { + return new FormEventManager((JForm) plus); + } +// ParameterDefinitePane pane = new ParameterDefinitePane(); +// pane.getParaDesigner().getParaTarget().getAllWidgets() + return null; + } +} diff --git a/src/main/java/com/fr/plugin/event/manager/FormEventManager.java b/src/main/java/com/fr/plugin/event/manager/FormEventManager.java new file mode 100644 index 0000000..7139cbe --- /dev/null +++ b/src/main/java/com/fr/plugin/event/manager/FormEventManager.java @@ -0,0 +1,51 @@ +package com.fr.plugin.event.manager; + +import com.fr.base.BaseUtils; +import com.fr.design.actions.JTemplateAction; +import com.fr.design.mainframe.JForm; +import com.fr.form.main.Form; +import com.fr.form.ui.FormWidgetHelper; +import com.fr.form.ui.Widget; +import com.fr.form.ui.container.WLayout; + +import java.awt.event.ActionEvent; +import java.util.Map; + +/** + * @author Joe + * Created by Joe on 9/3/2020 + */ +public class FormEventManager extends JTemplateAction { + + public FormEventManager(JForm jForm) { + super(jForm); + 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 + public void actionPerformed(ActionEvent e) { + final JForm jwb = getEditingComponent(); + if (jwb == null) { + return; + } + final Form wbTpl = jwb.getTarget(); + // 获取最底层的表单容器 + WLayout container = wbTpl.getContainer(); + + // 获取参数面板容器 + WLayout parameterContainer = wbTpl.getParaContainer(); + if (parameterContainer != null) { + System.out.println("表单参数面板控件数:" + parameterContainer.getWidgetCount()); + System.out.println("根据Index获取控件:" + parameterContainer.getWidget(0)); + System.out.println("根据名称获取控件:" + parameterContainer.getWidget("textEditor0")); + } + + // 获取表单中指定名字的控件 + Widget report = wbTpl.getWidgetByName("report0"); + // 获取表单中指定名字的控件(不对WTitleLayout和WScaleLayout进一步处理) + Widget chart = wbTpl.getWidgetWithBound("chart0"); + } +} diff --git a/src/main/java/com/fr/plugin/event/manager/KeySetUtils.java b/src/main/java/com/fr/plugin/event/manager/KeySetUtils.java new file mode 100644 index 0000000..8cbd58c --- /dev/null +++ b/src/main/java/com/fr/plugin/event/manager/KeySetUtils.java @@ -0,0 +1,28 @@ +package com.fr.plugin.event.manager; + +import com.fr.design.menu.MenuKeySet; + +import javax.swing.KeyStroke; + +/** + * @author Joe + * Created by Joe on 9/3/2020 + */ +public class KeySetUtils { + public static final MenuKeySet EVENT_MANAGER = new MenuKeySet() { + @Override + public char getMnemonic() { + return 'E'; + } + + @Override + public String getMenuName() { + return "事件管理器"; + } + + @Override + public KeyStroke getKeyStroke() { + return null; + } + }; +} diff --git a/src/main/java/com/fr/plugin/event/manager/TemplateWorkBookDecorator.java b/src/main/java/com/fr/plugin/event/manager/TemplateWorkBookDecorator.java new file mode 100644 index 0000000..7f7a298 --- /dev/null +++ b/src/main/java/com/fr/plugin/event/manager/TemplateWorkBookDecorator.java @@ -0,0 +1,274 @@ +package com.fr.plugin.event.manager; + +import com.fr.base.Parameter; +import com.fr.base.TableData; +import com.fr.form.ui.Widget; +import com.fr.io.attr.ReportExportAttr; +import com.fr.main.TemplateWorkBook; +import com.fr.main.parameter.ReportParameterAttr; +import com.fr.main.workbook.ResultWorkBook; +import com.fr.report.fit.ReportFitAttr; +import com.fr.report.mobile.ElementCaseMobileAttr; +import com.fr.report.report.ECReport; +import com.fr.report.report.Report; +import com.fr.report.report.TemplateReport; +import com.fr.report.stable.fun.Actor; +import com.fr.report.worksheet.WorkSheet; +import com.fr.stable.fun.IOFileAttrMark; +import com.fr.stable.xml.XMLPrintWriter; +import com.fr.stable.xml.XMLableReader; +import com.fr.web.attr.ReportWebAttr; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +/** + * 装饰器模式 + * @author Joe + * Created by Joe on 9/24/2020 + */ +public class TemplateWorkBookDecorator implements TemplateWorkBook { + protected TemplateWorkBook decoratedTemplateWorkBook; + + private List widgetList; + + public TemplateWorkBookDecorator(TemplateWorkBook templateWorkBook) { + decoratedTemplateWorkBook = templateWorkBook; + widgetList = new ArrayList<>(); + } + + @Override + public void addReport(TemplateReport templateReport) { + decoratedTemplateWorkBook.addReport(templateReport); + } + + @Override + public void addReport(String s, TemplateReport templateReport) { + decoratedTemplateWorkBook.addReport(s, templateReport); + } + + @Override + public void setReport(int i, TemplateReport templateReport) { + decoratedTemplateWorkBook.setReport(i, templateReport); + } + + @Override + public void setReport(int i, String s, TemplateReport templateReport) { + decoratedTemplateWorkBook.setReport(i, s, templateReport); + } + + @Override + public TemplateReport getTemplateReport(int i) { + return decoratedTemplateWorkBook.getTemplateReport(i); + } + + @Override + public WorkSheet getTemplateElementCaseReport(int i) { + return decoratedTemplateWorkBook.getTemplateElementCaseReport(i); + } + + @Override + public int getReportIndex(TemplateReport templateReport) { + return decoratedTemplateWorkBook.getReportIndex(templateReport); + } + + @Override + public void apply4Parameters(Map map) { + decoratedTemplateWorkBook.apply4Parameters(map); + } + + @Override + public ResultWorkBook execute(Map map, Actor actor) { + return decoratedTemplateWorkBook.execute(map, actor); + } + + @Override + public ResultWorkBook execute(Map map, Actor actor, int i) { + return decoratedTemplateWorkBook.execute(map, actor, i); + } + + @Override + public ReportParameterAttr getReportParameterAttr() { + return decoratedTemplateWorkBook.getReportParameterAttr(); + } + + @Override + public void setReportParameterAttr(ReportParameterAttr reportParameterAttr) { + decoratedTemplateWorkBook.setReportParameterAttr(reportParameterAttr); + } + + @Override + public Parameter[] getParameters() { + return decoratedTemplateWorkBook.getParameters(); + } + + @Override + public String getReportName(int i) { + return decoratedTemplateWorkBook.getReportName(i); + } + + @Override + public void setReportName(int i, String s) { + decoratedTemplateWorkBook.setReportName(i, s); + } + + @Override + public void removeReport(String s) { + decoratedTemplateWorkBook.removeReport(s); + } + + @Override + public void removeReport(int i) { + decoratedTemplateWorkBook.removeReport(i); + } + + @Override + public void removeReports() { + decoratedTemplateWorkBook.removeReports(); + } + + @Override + public Report getReport(int i) { + return decoratedTemplateWorkBook.getReport(i); + } + + @Override + public boolean isElementCaseBook() { + return decoratedTemplateWorkBook.isElementCaseBook(); + } + + @Override + public boolean isElementCaseBook(int i) { + return decoratedTemplateWorkBook.isElementCaseBook(i); + } + + @Override + public ECReport getElementCaseReport(int i) { + return decoratedTemplateWorkBook.getElementCaseReport(i); + } + + @Override + public int getReportCount() { + return decoratedTemplateWorkBook.getReportCount(); + } + + @Override + public ReportWebAttr getReportWebAttr() { + return decoratedTemplateWorkBook.getReportWebAttr(); + } + + @Override + public void setReportWebAttr(ReportWebAttr reportWebAttr) { + decoratedTemplateWorkBook.setReportWebAttr(reportWebAttr); + } + + @Override + public ReportExportAttr getReportExportAttr() { + return decoratedTemplateWorkBook.getReportExportAttr(); + } + + @Override + public void setReportExportAttr(ReportExportAttr reportExportAttr) { + decoratedTemplateWorkBook.setReportExportAttr(reportExportAttr); + } + + @Override + public ElementCaseMobileAttr getReportMobileAttr() { + return decoratedTemplateWorkBook.getReportMobileAttr(); + } + + @Override + public void setReportMobileAttr(ElementCaseMobileAttr elementCaseMobileAttr) { + decoratedTemplateWorkBook.setReportMobileAttr(elementCaseMobileAttr); + } + + @Override + public void addAttrMark(IOFileAttrMark ioFileAttrMark) { + decoratedTemplateWorkBook.addAttrMark(ioFileAttrMark); + } + + @Override + public T getAttrMark(String s) { + return decoratedTemplateWorkBook.getAttrMark(s); + } + + @Override + public Iterator getAllMarkName() { + return decoratedTemplateWorkBook.getAllMarkName(); + } + + @Override + public Iterator getTableDataNameIterator() { + return decoratedTemplateWorkBook.getTableDataNameIterator(); + } + + @Override + public TableData getTableData(String s) { + return decoratedTemplateWorkBook.getTableData(s); + } + + @Override + public void putTableData(String s, TableData tableData) { + decoratedTemplateWorkBook.putTableData(s, tableData); + } + + @Override + public boolean renameTableData(String s, String s1) { + return decoratedTemplateWorkBook.renameTableData(s, s1); + } + + @Override + public void removeTableData(String s) { + decoratedTemplateWorkBook.removeTableData(s); + } + + @Override + public void clearAllTableData() { + decoratedTemplateWorkBook.clearAllTableData(); + } + + @Override + public ReportFitAttr getReportFitAttr() { + return decoratedTemplateWorkBook.getReportFitAttr(); + } + + @Override + public void setReportFitAttr(ReportFitAttr reportFitAttr) { + decoratedTemplateWorkBook.setReportFitAttr(reportFitAttr); + } + + @Override + public void readXML(XMLableReader xmLableReader) { + decoratedTemplateWorkBook.readXML(xmLableReader); + } + + @Override + public void writeXML(XMLPrintWriter xmlPrintWriter) { + decoratedTemplateWorkBook.writeXML(xmlPrintWriter); + } + + @Override + public String[] getJSImport() { + return decoratedTemplateWorkBook.getJSImport(); + } + + @Override + public String[] getCSSImport() { + return decoratedTemplateWorkBook.getCSSImport(); + } + + @Override + public Object clone() throws CloneNotSupportedException { + return decoratedTemplateWorkBook.clone(); + } + + public List getWidgetList() { + return widgetList; + } + + public void addWidget(Widget widget) { + this.widgetList.add(widget); + } +} diff --git a/src/main/java/com/fr/plugin/event/manager/WorkbookEventManager.java b/src/main/java/com/fr/plugin/event/manager/WorkbookEventManager.java new file mode 100644 index 0000000..0e07b8b --- /dev/null +++ b/src/main/java/com/fr/plugin/event/manager/WorkbookEventManager.java @@ -0,0 +1,116 @@ +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); + }*/ + } + } +}