From db2195a5f74e16ea9c83678fcb6acef85d0f7275 Mon Sep 17 00:00:00 2001 From: kerry Date: Mon, 31 May 2021 11:20:21 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-53007=20=E7=BB=84=E4=BB=B6=E5=A4=8D?= =?UTF-8?q?=E7=94=A8-=E5=90=88=E5=85=A5=E4=B8=BB=E7=89=88=E6=9C=AC-?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E5=85=81=E8=AE=B8=E9=87=8D=E5=91=BD=E5=90=8D?= =?UTF-8?q?=EF=BC=8C=E9=9C=80=E8=A6=81=E6=94=AF=E6=8C=81=E4=B8=80=E4=B8=8B?= =?UTF-8?q?cpt=E5=8D=95=E5=85=83=E6=A0=BC=E7=9A=84=E6=8E=A7=E4=BB=B6?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6@kerry?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controlpane/UIListGroupControlPane.java | 485 ++++++++++++++++++ .../gui/controlpane/EventPropertyPane.java | 449 +--------------- .../com/fr/design/widget/WidgetEventPane.java | 85 ++- 3 files changed, 552 insertions(+), 467 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/gui/controlpane/UIListGroupControlPane.java diff --git a/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListGroupControlPane.java b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListGroupControlPane.java new file mode 100644 index 000000000..6e0313ec7 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListGroupControlPane.java @@ -0,0 +1,485 @@ +package com.fr.design.gui.controlpane; + +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.constants.UIConstants; +import com.fr.design.gui.icontainer.UIScrollPane; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.ilist.JNameEdList; +import com.fr.design.gui.ilist.ListModelElement; +import com.fr.design.gui.ilist.ModNameActionListener; +import com.fr.design.gui.ilist.UINameEdList; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.widget.EventCreator; +import com.fr.form.event.Listener; +import com.fr.form.ui.Widget; +import com.fr.general.NameObject; +import com.fr.report.web.util.ReportEngineEventMapping; +import com.fr.stable.ArrayUtils; +import com.fr.stable.Nameable; +import com.fr.stable.StringUtils; + +import javax.swing.BorderFactory; +import javax.swing.DefaultListModel; +import javax.swing.JPanel; +import javax.swing.ListSelectionModel; +import javax.swing.event.ListDataEvent; +import javax.swing.event.ListDataListener; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +/** + * Created by kerry on 5/31/21 + */ +public abstract class UIListGroupControlPane extends UIControlPane implements ListControlPaneProvider { + private boolean isPopulating = false; + private UINameEdList selectNameEdList; + + private Map nameEdListMap = new HashMap<>(); + + private CommonShortCutHandlers commonHandlers; + + private ListControlPaneHelper helper; + + private JPanel contentPane; + + public JPanel getContentPane() { + return contentPane; + } + + private ListControlPaneHelper getHelper() { + if (helper == null) { + helper = ListControlPaneHelper.newInstance(this); + } + return helper; + } + + private CommonShortCutHandlers getCommonHandlers() { + if (commonHandlers == null) { + commonHandlers = CommonShortCutHandlers.newInstance(this); + } + return commonHandlers; + } + + public boolean isPopulating() { + return isPopulating; + } + + @Override + protected void initLeftPane(JPanel leftPane) { + leftPane.add(new UIScrollPane(contentPane = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 0)), BorderLayout.CENTER); + } + + + protected void refreshPane(Widget widget, NameableCreator[] creators) { + refreshContentPane(widget.supportedEvents()); + refreshNameableCreator(creators); + populateNameObjects(widget); + } + + + private void refreshContentPane(String[] supportedEvents) { + for (String event : supportedEvents) { + if (nameEdListMap.containsKey(event)) { + continue; + } + UINameEdList list = createJNameList(event); + ListWrapperPane wrapperPane = new ListWrapperPane(switchLang(event), list); + if (this.selectNameEdList == null) { + this.selectNameEdList = wrapperPane.getNameEdList(); + } + contentPane.add(wrapperPane); + nameEdListMap.put(event, wrapperPane); + } + } + + protected void populateNameObjects(Widget widget) { + ArrayList nameObjectList = new ArrayList<>(); + for (int i = 0, size = widget.getListenerSize(); i < size; i++) { + Listener listener = widget.getListener(i); + if (!listener.isDefault()) { + nameObjectList.add(i, new NameObject(switchLang(listener.getEventName()) + (i + 1), listener)); + } + } + populate(getHelper().processCatalog(nameObjectList)); + checkButtonEnabled(); + this.repaint(); + } + + private void populate(Map> map) { + isPopulating = true; // 加一个标识位,避免切换单元格时,触发 saveSettings + Iterator>> iterator = map.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry> entry = iterator.next(); + List valueList = entry.getValue(); + ListWrapperPane eventListWrapperPane = nameEdListMap.get(entry.getKey()); + populateChildNameList(eventListWrapperPane.getNameEdList(), valueList.toArray(new NameObject[valueList.size()])); + } + this.checkButtonEnabled(); + refreshEventListWrapperPane(); + isPopulating = false; + } + + private void refreshEventListWrapperPane() { + Iterator> iterator = nameEdListMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + ListWrapperPane eventListWrapperPane = entry.getValue(); + UINameEdList nameEdList = eventListWrapperPane.getNameEdList(); + int listSize = nameEdList.getModel().getSize(); + if (this.selectNameEdList.getModel().getSize() == 0 && listSize > 0) { + this.selectNameEdList = nameEdList; + } + eventListWrapperPane.setVisible(listSize > 0); + } + if (this.selectNameEdList != null) { + this.selectNameEdList.setSelectedIndex(0); + } + this.repaint(); + } + + + private void populateChildNameList(UINameEdList nameableList, Nameable[] nameableArray) { + nameableList.getCellEditor().stopCellEditing(); + DefaultListModel listModel = (DefaultListModel) nameableList.getModel(); + listModel.removeAllElements(); + if (ArrayUtils.isEmpty(nameableArray)) { + isPopulating = false; + return; + } + + listModel.setSize(nameableArray.length); + for (int i = 0; i < nameableArray.length; i++) { + listModel.set(i, new ListModelElement(nameableArray[i])); + } + + } + + + private UINameEdList createJNameList(String text) { + UINameEdList nameEdList = new UINameEdList(new DefaultListModel()) { + @Override + protected void doAfterLostFocus() { + ((JControlUpdatePane) controlUpdatePane).update(); + } + + @Override + protected void doAfterStopEditing() { + saveSettings(); + } + }; + + nameEdList.setCellRenderer(new UINameableListCellRenderer(true, this.creators)); + nameEdList.setName(text); + nameEdList.setSelectionBackground(UIConstants.ATTRIBUTE_PRESS); + nameEdList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); + nameEdList.addMouseListener(new MouseAdapter() { + @Override + public void mouseReleased(MouseEvent e) { + selectNameEdList = nameEdList; + updateUINameListSelect(); + } + }); + nameEdList.addMouseListener(getHelper().getListMouseListener(nameEdList, this)); + nameEdList.addModNameActionListener(new ModNameActionListener() { + @Override + public void nameModed(int index, String oldName, String newName) { + saveSettings(); + } + }); + nameEdList.addListSelectionListener(new ListSelectionListener() { + public void valueChanged(ListSelectionEvent evt) { + // richie:避免多次update和populate大大降低效率 + if (!evt.getValueIsAdjusting()) { + // shoc 切换的时候加检验 + if (hasInvalid(false)) { + return; + } + ((JControlUpdatePane) UIListGroupControlPane.this.controlUpdatePane).update(); + ((JControlUpdatePane) UIListGroupControlPane.this.controlUpdatePane).populate(); + UIListGroupControlPane.this.checkButtonEnabled(); + } + } + }); + nameEdList.getModel().addListDataListener(new ListDataListener() { + @Override + public void intervalAdded(ListDataEvent e) { + saveSettings(); + } + + @Override + public void intervalRemoved(ListDataEvent e) { + saveSettings(); + } + + @Override + public void contentsChanged(ListDataEvent e) { + saveSettings(); + } + }); + return nameEdList; + } + + private void updateUINameListSelect() { + Iterator> iterator = nameEdListMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + UINameEdList nameEdList = entry.getValue().getNameEdList(); + if (nameEdList != selectNameEdList) { + nameEdList.clearSelection(); + } + } + } + + @Override + public void checkButtonEnabled() { + getHelper().checkButtonEnabled(); + } + + + + private String switchLang(String eventName) { + // 在 properties 文件中找到相应的 key 值 + String localeKey = ReportEngineEventMapping.getLocaleName(eventName); + return com.fr.design.i18n.Toolkit.i18nText(localeKey); + } + + + + /** + * 生成不重复的名字 + * + * @param prefix 名字前缀 + * @return 名字 + */ + @Override + public String createUnrepeatedName(String prefix) { + return getCommonHandlers().createUnrepeatedName(prefix); + } + + private void updateSelectedNameList(NameableCreator creator) { + String eventName = ((EventCreator) creator).getEventName(); + ListWrapperPane wrapperPane = nameEdListMap.get(eventName); + wrapperPane.setVisible(true); + setSelectNameEdList(wrapperPane.getNameEdList()); + } + + private void setSelectNameEdList(UINameEdList nameEdList) { + if (this.selectNameEdList != null) { + this.selectNameEdList.clearSelection(); + } + this.selectNameEdList = nameEdList; + } + + @Override + public void onAddItem(NameableCreator creator) { + updateSelectedNameList(creator); + getCommonHandlers().onAddItem(creator); + } + + @Override + public void onRemoveItem() { + getCommonHandlers().onRemoveItem(); + refreshEventListWrapperPane(); + } + + @Override + public void onCopyItem() { + getCommonHandlers().onCopyItem(); + } + + @Override + public void onMoveUpItem() { + getCommonHandlers().onMoveUpItem(); + } + + @Override + public void onMoveDownItem() { + getCommonHandlers().onMoveDownItem(); + } + + @Override + public void onSortItem(boolean isAtoZ) { + Iterator> iterator = nameEdListMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + UINameEdList nameEdList = entry.getValue().getNameEdList(); + getCommonHandlers().onSortItem(isAtoZ, nameEdList); + } + + } + + @Override + public boolean isItemSelected() { + return getModel().getSize() > 0 && getSelectedIndex() != -1; + } + + + @Override + protected JPanel createControlUpdatePane() { + return JControlUpdatePane.newInstance(this); + } + + + @Override + public Nameable[] update() { + java.util.List res = new java.util.ArrayList(); + getControlUpdatePane().update(); + Iterator> iterator = nameEdListMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + UINameEdList nameEdList = entry.getValue().getNameEdList(); + DefaultListModel listModel = (DefaultListModel) nameEdList.getModel(); + for (int i = 0, len = listModel.getSize(); i < len; i++) { + res.add(((ListModelElement) listModel.getElementAt(i)).wrapper); + } + } + return res.toArray(new Nameable[0]); + } + + + @Override + public abstract NameableCreator[] createNameableCreators(); + + @Override + public abstract void saveSettings(); + + + public BasicBeanPane createPaneByCreators(NameableCreator creator) { + try { + return creator.getUpdatePane().newInstance(); + } catch (InstantiationException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + } + + public BasicBeanPane createPaneByCreators(NameableCreator creator, String string) { + Constructor constructor = null; + try { + constructor = creator.getUpdatePane().getDeclaredConstructor(new Class[]{String.class}); + constructor.setAccessible(true); + return (BasicBeanPane) constructor.newInstance(string); + } catch (NoSuchMethodException e) { + throw new RuntimeException(e); + } catch (InstantiationException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } catch (InvocationTargetException e) { + throw new RuntimeException(e); + } + } + + @Override + public DefaultListModel getModel() { + if (this.selectNameEdList == null) { + return new DefaultListModel(); + } + return (DefaultListModel) this.selectNameEdList.getModel(); + } + + /** + * 检查是否符合规范 + * + * @throws Exception + */ + @Override + public void checkValid() throws Exception { + ((JControlUpdatePane) this.controlUpdatePane).checkValid(); + } + + @Override + public boolean hasInvalid(boolean isAdd) { + return getHelper().hasInvalid(isAdd); + } + + public void addNameable(Nameable nameable, int index) { + getHelper().addNameable(nameable, index); + popupEditDialog(); + } + + + /** + * 设置选中项 + * + * @param index 选中项的序列号 + */ + public void setSelectedIndex(int index) { + if (this.selectNameEdList != null) { + this.selectNameEdList.setSelectedIndex(index); + + } + } + + @Override + public int getSelectedIndex() { + if (this.selectNameEdList == null) { + return -1; + } + return this.selectNameEdList.getSelectedIndex(); + } + + + @Override + public ListModelElement getSelectedValue() { + if (this.selectNameEdList == null) { + return null; + } + return (ListModelElement) this.selectNameEdList.getSelectedValue(); + } + + @Override + public JControlUpdatePane getControlUpdatePane() { + return (JControlUpdatePane) controlUpdatePane; + } + + @Override + public JNameEdList getNameableList() { + return this.selectNameEdList; + } + + private void popupEditDialog() { + getHelper().popupEditDialog(null, this.selectNameEdList, this); + } + + protected String getWrapperLabelText(){ + return StringUtils.EMPTY; + } + + + private class ListWrapperPane extends JPanel { + private UINameEdList nameEdList; + + public ListWrapperPane(String labelText, UINameEdList nameEdList) { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + UILabel label = new UILabel(labelText + getWrapperLabelText()); + label.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 0)); + label.setBackground(Color.decode("#FFFFFF")); + label.setPreferredSize(new Dimension(224, 26)); + this.nameEdList = nameEdList; + this.add(label, BorderLayout.NORTH); + this.add(this.nameEdList, BorderLayout.CENTER); + } + + public UINameEdList getNameEdList() { + return this.nameEdList; + } + + } + + +} diff --git a/designer-form/src/main/java/com/fr/design/gui/controlpane/EventPropertyPane.java b/designer-form/src/main/java/com/fr/design/gui/controlpane/EventPropertyPane.java index 25cefe3af..72ff96982 100644 --- a/designer-form/src/main/java/com/fr/design/gui/controlpane/EventPropertyPane.java +++ b/designer-form/src/main/java/com/fr/design/gui/controlpane/EventPropertyPane.java @@ -1,93 +1,30 @@ package com.fr.design.gui.controlpane; - -import com.fr.design.beans.BasicBeanPane; -import com.fr.design.constants.UIConstants; import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.properties.EventPropertyTable; -import com.fr.design.gui.icontainer.UIScrollPane; -import com.fr.design.gui.ilable.UILabel; -import com.fr.design.gui.ilist.JNameEdList; -import com.fr.design.gui.ilist.ListModelElement; -import com.fr.design.gui.ilist.ModNameActionListener; -import com.fr.design.gui.ilist.UINameEdList; import com.fr.design.i18n.Toolkit; -import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.FormDesigner; import com.fr.design.widget.EventCreator; import com.fr.form.event.Listener; import com.fr.form.ui.Widget; import com.fr.general.NameObject; -import com.fr.report.web.util.ReportEngineEventMapping; -import com.fr.stable.ArrayUtils; import com.fr.stable.Nameable; -import javax.swing.BorderFactory; -import javax.swing.DefaultListModel; -import javax.swing.JPanel; -import javax.swing.ListSelectionModel; -import javax.swing.event.ListDataEvent; -import javax.swing.event.ListDataListener; -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.FlowLayout; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; /** * Created by kerry on 5/17/21 */ -public class EventPropertyPane extends UIControlPane implements ListControlPaneProvider { +public class EventPropertyPane extends UIListGroupControlPane { private XCreator creator; - private boolean isPopulating = false; - private UINameEdList selectNameEdList; - - private Map nameEdListMap = new HashMap<>(); - - private CommonShortCutHandlers commonHandlers; - - private ListControlPaneHelper helper; - - private JPanel contentPane; private FormDesigner designer; - private ListControlPaneHelper getHelper() { - if (helper == null) { - helper = ListControlPaneHelper.newInstance(this); - } - return helper; - } - - private CommonShortCutHandlers getCommonHandlers() { - if (commonHandlers == null) { - commonHandlers = CommonShortCutHandlers.newInstance(this); - } - return commonHandlers; - } - - public EventPropertyPane(FormDesigner designer) { super(); this.designer = designer; } - @Override - protected void initLeftPane(JPanel leftPane) { - leftPane.add(new UIScrollPane(contentPane = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 0)), BorderLayout.CENTER); - } - /** * 刷新 */ @@ -98,184 +35,19 @@ public class EventPropertyPane extends UIControlPane implements ListControlPaneP .getSelection().getSelectedCreator(); } else { this.creator = null; - contentPane.removeAll(); + this.getContentPane().removeAll(); checkButtonEnabled(); return; } Widget widget = creator.toData(); - - refreshContentPane(widget.supportedEvents()); - refreshNameableCreator(EventCreator.createEventCreator(widget.supportedEvents(), EventPropertyTable.WidgetEventListenerUpdatePane.class)); - populateNameObjects(); + refreshPane(widget, EventCreator.createEventCreator(widget.supportedEvents(), EventPropertyTable.WidgetEventListenerUpdatePane.class)); } - private void refreshContentPane(String[] supportedEvents) { - for (String event : supportedEvents) { - if (nameEdListMap.containsKey(event)) { - continue; - } - UINameEdList list = createJNameList(event); - EventListWrapperPane wrapperPane = new EventListWrapperPane(switchLang(event), list); - if (this.selectNameEdList == null) { - this.selectNameEdList = wrapperPane.getNameEdList(); - } - contentPane.add(wrapperPane); - nameEdListMap.put(event, wrapperPane); - } - } public void populateNameObjects() { Widget widget = creator.toData(); - - ArrayList nameObjectList = new ArrayList<>(); - for (int i = 0, size = widget.getListenerSize(); i < size; i++) { - Listener listener = widget.getListener(i); - if (!listener.isDefault()) { - nameObjectList.add(i, new NameObject(switchLang(listener.getEventName()) + (i + 1), listener)); - } - } - populate(getHelper().processCatalog(nameObjectList)); - checkButtonEnabled(); - this.repaint(); - } - - public void populate(Map> map) { - isPopulating = true; // 加一个标识位,避免切换单元格时,触发 saveSettings - Iterator>> iterator = map.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry> entry = iterator.next(); - List valueList = entry.getValue(); - EventListWrapperPane eventListWrapperPane = nameEdListMap.get(entry.getKey()); - populateChildNameList(eventListWrapperPane.getNameEdList(), valueList.toArray(new NameObject[valueList.size()])); - } - this.checkButtonEnabled(); - refreshEventListWrapperPane(); - isPopulating = false; - } - - private void refreshEventListWrapperPane() { - Iterator> iterator = nameEdListMap.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry entry = iterator.next(); - EventListWrapperPane eventListWrapperPane = entry.getValue(); - UINameEdList nameEdList = eventListWrapperPane.getNameEdList(); - int listSize = nameEdList.getModel().getSize(); - if (this.selectNameEdList.getModel().getSize() == 0 && listSize > 0) { - this.selectNameEdList = nameEdList; - } - eventListWrapperPane.setVisible(listSize > 0); - } - if (this.selectNameEdList != null) { - this.selectNameEdList.setSelectedIndex(0); - } - this.repaint(); - } - - - private void populateChildNameList(UINameEdList nameableList, Nameable[] nameableArray) { - nameableList.getCellEditor().stopCellEditing(); - DefaultListModel listModel = (DefaultListModel) nameableList.getModel(); - listModel.removeAllElements(); - if (ArrayUtils.isEmpty(nameableArray)) { - isPopulating = false; - return; - } - - listModel.setSize(nameableArray.length); - for (int i = 0; i < nameableArray.length; i++) { - listModel.set(i, new ListModelElement(nameableArray[i])); - } - - } - - - protected UINameEdList createJNameList(String text) { - UINameEdList nameEdList = new UINameEdList(new DefaultListModel()) { - @Override - protected void doAfterLostFocus() { - ((JControlUpdatePane) controlUpdatePane).update(); - } - - @Override - protected void doAfterStopEditing() { - saveSettings(); - } - }; - - nameEdList.setCellRenderer(new UINameableListCellRenderer(true, this.creators)); - nameEdList.setName(text); - nameEdList.setSelectionBackground(UIConstants.ATTRIBUTE_PRESS); - nameEdList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); - nameEdList.addMouseListener(new MouseAdapter() { - @Override - public void mouseReleased(MouseEvent e) { - selectNameEdList = nameEdList; - updateUINameListSelect(); - } - }); - nameEdList.addMouseListener(getHelper().getListMouseListener(nameEdList, this)); - nameEdList.addModNameActionListener(new ModNameActionListener() { - @Override - public void nameModed(int index, String oldName, String newName) { - saveSettings(); - } - }); - nameEdList.addListSelectionListener(new ListSelectionListener() { - public void valueChanged(ListSelectionEvent evt) { - // richie:避免多次update和populate大大降低效率 - if (!evt.getValueIsAdjusting()) { - // shoc 切换的时候加检验 - if (hasInvalid(false)) { - return; - } - ((JControlUpdatePane) EventPropertyPane.this.controlUpdatePane).update(); - ((JControlUpdatePane) EventPropertyPane.this.controlUpdatePane).populate(); - EventPropertyPane.this.checkButtonEnabled(); - } - } - }); - nameEdList.getModel().addListDataListener(new ListDataListener() { - @Override - public void intervalAdded(ListDataEvent e) { - saveSettings(); - } - - @Override - public void intervalRemoved(ListDataEvent e) { - saveSettings(); - } - - @Override - public void contentsChanged(ListDataEvent e) { - saveSettings(); - } - }); - return nameEdList; - } - - private void updateUINameListSelect() { - Iterator> iterator = nameEdListMap.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry entry = iterator.next(); - UINameEdList nameEdList = entry.getValue().getNameEdList(); - if (nameEdList != selectNameEdList) { - nameEdList.clearSelection(); - } - } - } - - @Override - public void checkButtonEnabled() { - getHelper().checkButtonEnabled(); - } - - - - private String switchLang(String eventName) { - // 在 properties 文件中找到相应的 key 值 - String localeKey = ReportEngineEventMapping.getLocaleName(eventName); - return com.fr.design.i18n.Toolkit.i18nText(localeKey); + populateNameObjects(widget); } /** @@ -296,98 +68,6 @@ public class EventPropertyPane extends UIControlPane implements ListControlPaneP } - /** - * 生成不重复的名字 - * - * @param prefix 名字前缀 - * @return 名字 - */ - @Override - public String createUnrepeatedName(String prefix) { - return getCommonHandlers().createUnrepeatedName(prefix); - } - - private void updateSelectedNameList(NameableCreator creator) { - String eventName = ((EventCreator) creator).getEventName(); - EventListWrapperPane wrapperPane = nameEdListMap.get(eventName); - wrapperPane.setVisible(true); - setSelectNameEdList(wrapperPane.getNameEdList()); - } - - private void setSelectNameEdList(UINameEdList nameEdList) { - if (this.selectNameEdList != null) { - this.selectNameEdList.clearSelection(); - } - this.selectNameEdList = nameEdList; - } - - @Override - public void onAddItem(NameableCreator creator) { - updateSelectedNameList(creator); - getCommonHandlers().onAddItem(creator); - } - - @Override - public void onRemoveItem() { - getCommonHandlers().onRemoveItem(); - refreshEventListWrapperPane(); - } - - @Override - public void onCopyItem() { - getCommonHandlers().onCopyItem(); - } - - @Override - public void onMoveUpItem() { - getCommonHandlers().onMoveUpItem(); - } - - @Override - public void onMoveDownItem() { - getCommonHandlers().onMoveDownItem(); - } - - @Override - public void onSortItem(boolean isAtoZ) { - Iterator> iterator = nameEdListMap.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry entry = iterator.next(); - UINameEdList nameEdList = entry.getValue().getNameEdList(); - getCommonHandlers().onSortItem(isAtoZ, nameEdList); - } - - } - - @Override - public boolean isItemSelected() { - return getModel().getSize() > 0 && getSelectedIndex() != -1; - } - - - @Override - protected JPanel createControlUpdatePane() { - return JControlUpdatePane.newInstance(this); - } - - - @Override - public Nameable[] update() { - java.util.List res = new java.util.ArrayList(); - getControlUpdatePane().update(); - Iterator> iterator = nameEdListMap.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry entry = iterator.next(); - UINameEdList nameEdList = entry.getValue().getNameEdList(); - DefaultListModel listModel = (DefaultListModel) nameEdList.getModel(); - for (int i = 0, len = listModel.getSize(); i < len; i++) { - res.add(((ListModelElement) listModel.getElementAt(i)).wrapper); - } - } - return res.toArray(new Nameable[0]); - } - - @Override public NameableCreator[] createNameableCreators() { return new NameableCreator[]{ @@ -397,7 +77,7 @@ public class EventPropertyPane extends UIControlPane implements ListControlPaneP @Override public void saveSettings() { - if (isPopulating) { + if (isPopulating()) { return; } updateWidgetListener(creator); @@ -413,123 +93,8 @@ public class EventPropertyPane extends UIControlPane implements ListControlPaneP return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Add_Event"); } - public BasicBeanPane createPaneByCreators(NameableCreator creator) { - try { - return creator.getUpdatePane().newInstance(); - } catch (InstantiationException e) { - throw new RuntimeException(e); - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } - } - - public BasicBeanPane createPaneByCreators(NameableCreator creator, String string) { - Constructor constructor = null; - try { - constructor = creator.getUpdatePane().getDeclaredConstructor(new Class[]{String.class}); - constructor.setAccessible(true); - return (BasicBeanPane) constructor.newInstance(string); - } catch (NoSuchMethodException e) { - throw new RuntimeException(e); - } catch (InstantiationException e) { - throw new RuntimeException(e); - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } catch (InvocationTargetException e) { - throw new RuntimeException(e); - } - } - - @Override - public DefaultListModel getModel() { - if (this.selectNameEdList == null) { - return new DefaultListModel(); - } - return (DefaultListModel) this.selectNameEdList.getModel(); - } - - /** - * 检查是否符合规范 - * - * @throws Exception - */ - @Override - public void checkValid() throws Exception { - ((JControlUpdatePane) this.controlUpdatePane).checkValid(); - } - - @Override - public boolean hasInvalid(boolean isAdd) { - return getHelper().hasInvalid(isAdd); - } - - public void addNameable(Nameable nameable, int index) { - getHelper().addNameable(nameable, index); - popupEditDialog(); + protected String getWrapperLabelText(){ + return Toolkit.i18nText("Fine-Design_Report_Event"); } - - /** - * 设置选中项 - * - * @param index 选中项的序列号 - */ - public void setSelectedIndex(int index) { - if (this.selectNameEdList != null) { - this.selectNameEdList.setSelectedIndex(index); - - } - } - - @Override - public int getSelectedIndex() { - if (this.selectNameEdList == null) { - return -1; - } - return this.selectNameEdList.getSelectedIndex(); - } - - - @Override - public ListModelElement getSelectedValue() { - if (this.selectNameEdList == null) { - return null; - } - return (ListModelElement) this.selectNameEdList.getSelectedValue(); - } - - @Override - public JControlUpdatePane getControlUpdatePane() { - return (JControlUpdatePane) controlUpdatePane; - } - - @Override - public JNameEdList getNameableList() { - return this.selectNameEdList; - } - - private void popupEditDialog() { - getHelper().popupEditDialog(null, this.selectNameEdList, this); - } - - - private class EventListWrapperPane extends JPanel { - private UINameEdList nameEdList; - - public EventListWrapperPane(String labelText, UINameEdList nameEdList) { - this.setLayout(FRGUIPaneFactory.createBorderLayout()); - UILabel label = new UILabel(labelText + Toolkit.i18nText("Fine-Design_Report_Event")); - label.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 0)); - label.setBackground(Color.decode("#FFFFFF")); - label.setPreferredSize(new Dimension(226, 26)); - this.nameEdList = nameEdList; - this.add(label, BorderLayout.NORTH); - this.add(this.nameEdList, BorderLayout.CENTER); - } - - public UINameEdList getNameEdList() { - return this.nameEdList; - } - - } } diff --git a/designer-realize/src/main/java/com/fr/design/widget/WidgetEventPane.java b/designer-realize/src/main/java/com/fr/design/widget/WidgetEventPane.java index 79673c11d..936001d70 100644 --- a/designer-realize/src/main/java/com/fr/design/widget/WidgetEventPane.java +++ b/designer-realize/src/main/java/com/fr/design/widget/WidgetEventPane.java @@ -1,10 +1,10 @@ package com.fr.design.widget; -import java.util.ArrayList; -import java.util.List; - -import com.fr.design.gui.controlpane.ObjectUIControlPane; +import java.lang.reflect.Constructor; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.gui.controlpane.UIListGroupControlPane; +import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.CellWidgetPropertyPane; import com.fr.design.write.submit.DBManipulationPane; import com.fr.design.write.submit.SmartInsertDBManipulationInWidgetEventPane; @@ -20,18 +20,20 @@ import com.fr.grid.selection.Selection; import com.fr.general.NameObject; import com.fr.grid.selection.CellSelection; +import com.fr.stable.AssistUtils; import com.fr.stable.Nameable; import javax.swing.*; -public class WidgetEventPane extends ObjectUIControlPane { +public class WidgetEventPane extends UIListGroupControlPane { private static final Selection NO_SELECTION = new CellSelection(-1, -1, -1, -1); private Selection selection = NO_SELECTION; + private ElementCasePane object; + public WidgetEventPane(ElementCasePane pane) { - super(pane); - this.setNameListEditable(false); + this.object = pane; if(pane != null){ selection = pane.getSelection(); } @@ -62,7 +64,7 @@ public class WidgetEventPane extends ObjectUIControlPane { protected String title4PopupWindow() { return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Event"); } - + public static class WidgetEventListenerUpdatePane extends ListenerUpdatePane { private ElementCasePane epane; // 反射会用到 @@ -91,8 +93,8 @@ public class WidgetEventPane extends ObjectUIControlPane { protected DBManipulationPane createDBManipulationPane() { if(epane == null && DesignerContext.getDesignerFrame().getSelectedJTemplate() != null) { return autoCreateDBManipulationInWidgetEventPane(); - } - + } + return new SmartInsertDBManipulationInWidgetEventPane(epane); } @@ -100,7 +102,7 @@ public class WidgetEventPane extends ObjectUIControlPane { protected String title4PopupWindow() { return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Set_Callback_Function"); } - + @Override protected boolean isForm() { return false; @@ -116,26 +118,14 @@ public class WidgetEventPane extends ObjectUIControlPane { protected boolean supportCellAction() { return false; } - + } public void populate(Widget widget) { if (widget == null) { return; } - - this.refreshNameableCreator(EventCreator.createEventCreator(widget.supportedEvents(), WidgetEventListenerUpdatePane.class)); - - List list = new ArrayList(); - Listener listener; - for (int i = 0, size = widget.getListenerSize(); i < size; i++) { - listener = widget.getListener(i); - if (!listener.isDefault()) //name+(i+1)需要确保名字不重复 - { - list.add(new NameObject(EventCreator.switchLang(listener.getEventName()) + (i + 1), listener)); - } - } - this.populate(list.toArray(new NameObject[list.size()])); + refreshPane(widget, EventCreator.createEventCreator(widget.supportedEvents(), WidgetEventListenerUpdatePane.class)); } /** @@ -150,4 +140,49 @@ public class WidgetEventPane extends ObjectUIControlPane { } return res_array; } + + @Override + public BasicBeanPane createPaneByCreators(NameableCreator creator) { + try { + if (object == null) { + return super.createPaneByCreators(creator); + } else if (object.getClass().isArray()) { + return creator.getUpdatePane().getConstructor(object.getClass()).newInstance(object); + } else { + Constructor constructor = getConstructor(creator.getUpdatePane(), object.getClass()); + return constructor == null ? super.createPaneByCreators(creator) : constructor.newInstance(object); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * 传进BasicBeanPane的构造函数的参数,可能是 + * + * @param clazz + * @param cls + * @return + */ + private Constructor getConstructor(Class clazz, Class cls) { + Constructor constructor = null; + try { + constructor = clazz.getConstructor(cls); + } catch (SecurityException e) { + } catch (NoSuchMethodException e) { + } + if (constructor != null) { + return constructor; + } else { + if (AssistUtils.equals(cls.getName(),Object.class.getName())) { + return null; + } + return getConstructor(clazz, cls.getSuperclass()); + } + } + + protected String getWrapperLabelText(){ + return Toolkit.i18nText("Fine-Design_Report_Event"); + } + }