Browse Source

CORE-116 新控件结构+老的反射部分修改

research/10.0
richie 6 years ago
parent
commit
aedfbf6394
  1. 78
      designer-form/src/main/java/com/fr/design/designer/creator/XCreatorUtils.java
  2. 76
      designer-form/src/main/java/com/fr/design/widget/FormWidgetDefinePaneFactoryBase.java

78
designer-form/src/main/java/com/fr/design/designer/creator/XCreatorUtils.java

@ -3,25 +3,70 @@
*/ */
package com.fr.design.designer.creator; package com.fr.design.designer.creator;
import com.fr.base.FRContext;
import com.fr.design.ExtraDesignClassManager; import com.fr.design.ExtraDesignClassManager;
import com.fr.design.designer.creator.cardlayout.*; import com.fr.design.designer.creator.cardlayout.XCardAddButton;
import com.fr.design.designer.creator.cardlayout.XCardSwitchButton;
import com.fr.design.designer.creator.cardlayout.XWCardLayout;
import com.fr.design.designer.creator.cardlayout.XWCardMainBorderLayout;
import com.fr.design.designer.creator.cardlayout.XWCardTagLayout;
import com.fr.design.designer.creator.cardlayout.XWCardTitleLayout;
import com.fr.design.designer.creator.cardlayout.XWTabFitLayout;
import com.fr.design.fun.FormWidgetOptionProvider; import com.fr.design.fun.FormWidgetOptionProvider;
import com.fr.design.fun.ParameterWidgetOptionProvider; import com.fr.design.fun.ParameterWidgetOptionProvider;
import com.fr.design.module.DesignModuleFactory; import com.fr.design.module.DesignModuleFactory;
import com.fr.design.utils.gui.LayoutUtils; import com.fr.design.utils.gui.LayoutUtils;
import com.fr.form.parameter.FormSubmitButton; import com.fr.form.parameter.FormSubmitButton;
import com.fr.form.ui.Button; import com.fr.form.ui.Button;
import com.fr.form.ui.*; import com.fr.form.ui.CardAddButton;
import com.fr.form.ui.CardSwitchButton;
import com.fr.form.ui.CheckBox;
import com.fr.form.ui.CheckBoxGroup;
import com.fr.form.ui.ComboBox;
import com.fr.form.ui.ComboCheckBox;
import com.fr.form.ui.DataTable;
import com.fr.form.ui.DateEditor;
import com.fr.form.ui.EditorHolder;
import com.fr.form.ui.ElementCaseEditor;
import com.fr.form.ui.ErrorMarker;
import com.fr.form.ui.FileEditor;
import com.fr.form.ui.FreeButton;
import com.fr.form.ui.IframeEditor;
import com.fr.form.ui.Label; import com.fr.form.ui.Label;
import com.fr.form.ui.ListEditor;
import com.fr.form.ui.MultiFileEditor;
import com.fr.form.ui.NameWidget;
import com.fr.form.ui.NumberEditor;
import com.fr.form.ui.Password;
import com.fr.form.ui.Radio;
import com.fr.form.ui.RadioGroup;
import com.fr.form.ui.Table;
import com.fr.form.ui.TableTree;
import com.fr.form.ui.TextArea; import com.fr.form.ui.TextArea;
import com.fr.form.ui.container.*; import com.fr.form.ui.TextEditor;
import com.fr.form.ui.TreeComboBoxEditor;
import com.fr.form.ui.TreeEditor;
import com.fr.form.ui.Widget;
import com.fr.form.ui.container.WAbsoluteBodyLayout;
import com.fr.form.ui.container.WAbsoluteLayout;
import com.fr.form.ui.container.WBorderLayout;
import com.fr.form.ui.container.WCardLayout;
import com.fr.form.ui.container.WFitLayout;
import com.fr.form.ui.container.WGridLayout;
import com.fr.form.ui.container.WHorizontalBoxLayout;
import com.fr.form.ui.container.WHorizontalSplitLayout;
import com.fr.form.ui.container.WParameterLayout;
import com.fr.form.ui.container.WScaleLayout;
import com.fr.form.ui.container.WTitleLayout;
import com.fr.form.ui.container.WVerticalBoxLayout;
import com.fr.form.ui.container.WVerticalSplitLayout;
import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout;
import com.fr.form.ui.container.cardlayout.WCardTagLayout; import com.fr.form.ui.container.cardlayout.WCardTagLayout;
import com.fr.form.ui.container.cardlayout.WCardTitleLayout; import com.fr.form.ui.container.cardlayout.WCardTitleLayout;
import com.fr.form.ui.container.cardlayout.WTabFitLayout; import com.fr.form.ui.container.cardlayout.WTabFitLayout;
import com.fr.general.GeneralContext; import com.fr.general.GeneralContext;
import com.fr.general.IOUtils; import com.fr.general.IOUtils;
import com.fr.invoke.Reflect;
import com.fr.log.FineLoggerFactory;
import com.fr.plugin.context.PluginContext; import com.fr.plugin.context.PluginContext;
import com.fr.plugin.injectable.PluginModule; import com.fr.plugin.injectable.PluginModule;
import com.fr.plugin.manage.PluginFilter; import com.fr.plugin.manage.PluginFilter;
@ -31,7 +76,6 @@ import com.fr.stable.StringUtils;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
import java.lang.reflect.Constructor;
/** /**
* XCreator的相关处理 * XCreator的相关处理
@ -80,7 +124,6 @@ public class XCreatorUtils {
xLayoutMap.put(WAbsoluteLayout.class, XWAbsoluteLayout.class); xLayoutMap.put(WAbsoluteLayout.class, XWAbsoluteLayout.class);
xLayoutMap.put(WParameterLayout.class, XWParameterLayout.class); xLayoutMap.put(WParameterLayout.class, XWParameterLayout.class);
xLayoutMap.put(WAbsoluteBodyLayout.class, XWAbsoluteBodyLayout.class); xLayoutMap.put(WAbsoluteBodyLayout.class, XWAbsoluteBodyLayout.class);
xLayoutMap.put(WAbsoluteLayout.class, XWAbsoluteLayout.class);
xLayoutMap.put(WHorizontalBoxLayout.class, XWHorizontalBoxLayout.class); xLayoutMap.put(WHorizontalBoxLayout.class, XWHorizontalBoxLayout.class);
xLayoutMap.put(WBorderLayout.class, XWBorderLayout.class); xLayoutMap.put(WBorderLayout.class, XWBorderLayout.class);
xLayoutMap.put(WCardLayout.class, XWCardLayout.class); xLayoutMap.put(WCardLayout.class, XWCardLayout.class);
@ -112,7 +155,6 @@ public class XCreatorUtils {
objectMap.put(FileEditor.class, XFileUploader.class); objectMap.put(FileEditor.class, XFileUploader.class);
objectMap.put(Table.class, XTableEditor.class); objectMap.put(Table.class, XTableEditor.class);
objectMap.put(IframeEditor.class, XIframeEditor.class); objectMap.put(IframeEditor.class, XIframeEditor.class);
objectMap.put(FreeButton.class, XButton.class);
objectMap.put(FormSubmitButton.class, XButton.class); objectMap.put(FormSubmitButton.class, XButton.class);
objectMap.put(Button.class, XButton.class); objectMap.put(Button.class, XButton.class);
objectMap.put(Label.class, XLabel.class); objectMap.put(Label.class, XLabel.class);
@ -160,7 +202,8 @@ public class XCreatorUtils {
} }
/** /**
*创建creator * 创建creator
*
* @param widget 控件 * @param widget 控件
* @return 返回控件的creator * @return 返回控件的creator
*/ */
@ -170,6 +213,7 @@ public class XCreatorUtils {
/** /**
* 带初始大小的Widget转化为XCreator当然XCreator也需要把大小赋值上 * 带初始大小的Widget转化为XCreator当然XCreator也需要把大小赋值上
*
* @param widget 控件 * @param widget 控件
* @param d 大小 * @param d 大小
* @return 返回控件的xcreator * @return 返回控件的xcreator
@ -184,23 +228,18 @@ public class XCreatorUtils {
widgetClass = widget.getClass(); widgetClass = widget.getClass();
clazz = XCreatorUtils.searchXCreatorClass(widgetClass); clazz = XCreatorUtils.searchXCreatorClass(widgetClass);
if (clazz == null) { if (clazz == null) {
FRContext.getLogger().error(widget + "'s" + " xcreator doesn't exsit!"); FineLoggerFactory.getLogger().error(widget + "'s" + " xcreator doesn't exsit!");
clazz = NullCreator.class; clazz = NullCreator.class;
} }
} }
XCreator creator = null; XCreator creator = null;
Constructor[] constructors = clazz.getConstructors();
for (Constructor c : constructors) {
try { try {
creator = (XCreator) c.newInstance(widget, d); creator = Reflect.on(clazz).create(widget, d).get();
break;
} catch (Exception ignore) { } catch (Exception ignore) {
// richie:这里的错误可以忽略
// FRContext.getLogger().error(ignore.getMessage());
}
} }
if (creator == null) { if (creator == null) {
FRContext.getLogger().error("Error to create xcreator!"); FineLoggerFactory.getLogger().error("Error to create xcreator!");
creator = new NullCreator(widget, d); creator = new NullCreator(widget, d);
} }
creator.setXDescrption(widget);//设置描述信息 creator.setXDescrption(widget);//设置描述信息
@ -208,7 +247,8 @@ public class XCreatorUtils {
} }
/** /**
*刷新所有名字控件 * 刷新所有名字控件
*
* @param container 布局容器 * @param container 布局容器
*/ */
public static void refreshAllNameWidgets(XLayoutContainer container) { public static void refreshAllNameWidgets(XLayoutContainer container) {
@ -237,7 +277,7 @@ public class XCreatorUtils {
Container c = creator.getParent(); Container c = creator.getParent();
while (c != null) { while (c != null) {
XCreator crea = (XCreator) c; XCreator crea = (XCreator) c;
if(crea.acceptType(XWCardTitleLayout.class)){ if (crea.acceptType(XWCardTitleLayout.class)) {
return (XLayoutContainer) c.getParent(); return (XLayoutContainer) c.getParent();
} }
if (crea.isDedicateContainer()) { if (crea.isDedicateContainer()) {

76
designer-form/src/main/java/com/fr/design/widget/FormWidgetDefinePaneFactoryBase.java

@ -1,23 +1,75 @@
package com.fr.design.widget; package com.fr.design.widget;
import com.fr.base.FRContext;
import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.creator.XCreator;
import com.fr.design.gui.core.WidgetConstants; import com.fr.design.gui.core.WidgetConstants;
import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormDesigner;
import com.fr.design.widget.ui.designer.WidgetDefinePane;
import com.fr.design.parameter.RootDesignDefinePane; import com.fr.design.parameter.RootDesignDefinePane;
import com.fr.design.widget.ui.designer.*; import com.fr.design.widget.ui.designer.CheckBoxDefinePane;
import com.fr.design.widget.ui.designer.layout.*; import com.fr.design.widget.ui.designer.CheckBoxGroupDefinePane;
import com.fr.design.widget.ui.designer.ComboBoxDefinePane;
import com.fr.design.widget.ui.designer.ComboCheckBoxDefinePane;
import com.fr.design.widget.ui.designer.DateEditorDefinePane;
import com.fr.design.widget.ui.designer.FreeButtonDefinePane;
import com.fr.design.widget.ui.designer.IframeEditorDefinePane;
import com.fr.design.widget.ui.designer.LabelDefinePane;
import com.fr.design.widget.ui.designer.MultiFileEditorPane;
import com.fr.design.widget.ui.designer.NoneWidgetDefinePane;
import com.fr.design.widget.ui.designer.NumberEditorDefinePane;
import com.fr.design.widget.ui.designer.PasswordDefinePane;
import com.fr.design.widget.ui.designer.RadioDefinePane;
import com.fr.design.widget.ui.designer.RadioGroupDefinePane;
import com.fr.design.widget.ui.designer.TextAreaDefinePane;
import com.fr.design.widget.ui.designer.TextFieldEditorDefinePane;
import com.fr.design.widget.ui.designer.TreeComboBoxEditorDefinePane;
import com.fr.design.widget.ui.designer.TreeEditorDefinePane;
import com.fr.design.widget.ui.designer.UserEditorDefinePane;
import com.fr.design.widget.ui.designer.WidgetDefinePane;
import com.fr.design.widget.ui.designer.layout.BorderStyleWidgetDefinePane;
import com.fr.design.widget.ui.designer.layout.ElementEditorDefinePane;
import com.fr.design.widget.ui.designer.layout.FRAbsoluteBodyLayoutDefinePane;
import com.fr.design.widget.ui.designer.layout.FRAbsoluteLayoutDefinePane;
import com.fr.design.widget.ui.designer.layout.FRFitLayoutDefinePane;
import com.fr.design.widget.ui.designer.layout.WCardLayoutDefinePane;
import com.fr.design.widget.ui.designer.layout.WCardMainLayoutDefinePane;
import com.fr.design.widget.ui.designer.layout.WCardTagLayoutDefinePane;
import com.fr.design.widget.ui.designer.layout.WTabFitLayoutDefinePane;
import com.fr.form.parameter.FormSubmitButton; import com.fr.form.parameter.FormSubmitButton;
import com.fr.form.ui.*; import com.fr.form.ui.AbstractBorderStyleWidget;
import com.fr.form.ui.container.*; import com.fr.form.ui.Button;
import com.fr.form.ui.CheckBox;
import com.fr.form.ui.CheckBoxGroup;
import com.fr.form.ui.ComboBox;
import com.fr.form.ui.ComboCheckBox;
import com.fr.form.ui.DateEditor;
import com.fr.form.ui.ElementCaseEditor;
import com.fr.form.ui.FreeButton;
import com.fr.form.ui.IframeEditor;
import com.fr.form.ui.Label;
import com.fr.form.ui.MultiFileEditor;
import com.fr.form.ui.NameWidget;
import com.fr.form.ui.NoneWidget;
import com.fr.form.ui.NumberEditor;
import com.fr.form.ui.Password;
import com.fr.form.ui.Radio;
import com.fr.form.ui.RadioGroup;
import com.fr.form.ui.TextArea;
import com.fr.form.ui.TextEditor;
import com.fr.form.ui.TreeComboBoxEditor;
import com.fr.form.ui.TreeEditor;
import com.fr.form.ui.Widget;
import com.fr.form.ui.container.WAbsoluteBodyLayout;
import com.fr.form.ui.container.WAbsoluteLayout;
import com.fr.form.ui.container.WCardLayout;
import com.fr.form.ui.container.WFitLayout;
import com.fr.form.ui.container.WParameterLayout;
import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout;
import com.fr.form.ui.container.cardlayout.WCardTagLayout; import com.fr.form.ui.container.cardlayout.WCardTagLayout;
import com.fr.form.ui.container.cardlayout.WTabFitLayout; import com.fr.form.ui.container.cardlayout.WTabFitLayout;
import com.fr.invoke.Reflect;
import com.fr.log.FineLoggerFactory;
import com.fr.stable.bridge.BridgeMark; import com.fr.stable.bridge.BridgeMark;
import com.fr.stable.bridge.StableFactory; import com.fr.stable.bridge.StableFactory;
import java.lang.reflect.Constructor;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -45,7 +97,6 @@ public class FormWidgetDefinePaneFactoryBase {
defineMap.put(IframeEditor.class, new Appearance(IframeEditorDefinePane.class, WidgetConstants.IFRAME + "")); defineMap.put(IframeEditor.class, new Appearance(IframeEditorDefinePane.class, WidgetConstants.IFRAME + ""));
defineMap.put(TextEditor.class, new Appearance(TextFieldEditorDefinePane.class, WidgetConstants.TEXT + "")); defineMap.put(TextEditor.class, new Appearance(TextFieldEditorDefinePane.class, WidgetConstants.TEXT + ""));
defineMap.put(NameWidget.class, new Appearance(UserEditorDefinePane.class, "UserDefine")); defineMap.put(NameWidget.class, new Appearance(UserEditorDefinePane.class, "UserDefine"));
defineMap.put(ComboCheckBox.class, new Appearance(ComboCheckBoxDefinePane.class, WidgetConstants.COMBOCHECKBOX + ""));
defineMap.put(ComboBox.class, new Appearance(ComboBoxDefinePane.class, WidgetConstants.COMBOBOX + "")); defineMap.put(ComboBox.class, new Appearance(ComboBoxDefinePane.class, WidgetConstants.COMBOBOX + ""));
defineMap.put(RadioGroup.class, new Appearance(RadioGroupDefinePane.class, WidgetConstants.RADIOGROUP + "")); defineMap.put(RadioGroup.class, new Appearance(RadioGroupDefinePane.class, WidgetConstants.RADIOGROUP + ""));
defineMap.put(CheckBoxGroup.class, new Appearance(CheckBoxGroupDefinePane.class, WidgetConstants.CHECKBOXGROUP + "")); defineMap.put(CheckBoxGroup.class, new Appearance(CheckBoxGroupDefinePane.class, WidgetConstants.CHECKBOXGROUP + ""));
@ -78,23 +129,22 @@ public class FormWidgetDefinePaneFactoryBase {
} }
public static RN createWidgetDefinePane(XCreator creator, FormDesigner designer, Widget widget, Operator operator) { public static RN createWidgetDefinePane(XCreator creator, FormDesigner designer, Widget widget, Operator operator) {
if(isExtraXWidget(widget)){ if (isExtraXWidget(widget)) {
WidgetDefinePane widgetDefinePane = new WidgetDefinePane(creator, designer); WidgetDefinePane widgetDefinePane = new WidgetDefinePane(creator, designer);
return new RN(widgetDefinePane, widgetDefinePane.title4PopupWindow()); return new RN(widgetDefinePane, widgetDefinePane.title4PopupWindow());
} }
Appearance dn = defineMap.get(widget.getClass()); Appearance dn = defineMap.get(widget.getClass());
DataModify<Widget> definePane = null; DataModify<Widget> definePane = null;
try { try {
Constructor con = dn.getDefineClass().getConstructor(XCreator.class); definePane = Reflect.on(dn.getDefineClass()).create(creator).get();
definePane = (DataModify)con.newInstance(creator);
operator.did(definePane.dataUI(), dn.getDisplayName()); operator.did(definePane.dataUI(), dn.getDisplayName());
} catch (Exception e) { } catch (Exception e) {
FRContext.getLogger().error(e.getMessage(), e); FineLoggerFactory.getLogger().error(e.getMessage(), e);
} }
return new RN(definePane, dn.getDisplayName()); return new RN(definePane, dn.getDisplayName());
} }
public static boolean isExtraXWidget(Widget widget){ public static boolean isExtraXWidget(Widget widget) {
return defineMap.get(widget.getClass()) == null; return defineMap.get(widget.getClass()) == null;
} }

Loading…
Cancel
Save