forked from FR-Global/plugin-event-manager
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
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); |
|
}*/ |
|
} |
|
} |
|
}
|
|
|