From 654b9a1b1798896f9ac1bfc99da6223249ffe294 Mon Sep 17 00:00:00 2001 From: "coral.chen@fanruan.com" Date: Mon, 22 May 2023 14:55:01 +0800 Subject: [PATCH 1/2] =?UTF-8?q?REPORT-93554=20=E6=8E=A7=E4=BB=B6=E4=B8=BB?= =?UTF-8?q?=E9=A2=98=E6=94=AF=E6=8C=81=E2=80=94=E2=80=94=E6=8A=A5=E8=A1=A8?= =?UTF-8?q?=E6=94=AF=E6=92=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...bstractMobileStyleDefinePaneProcessor.java | 23 +++++++ .../MobileStyleDefinePaneProcessor.java | 40 +++++++++++ .../mobile/ui/MobileStyleDefinePane.java | 11 ++- .../mainframe/mobile/ui/MobileStylePane.java | 69 +++++++++++++++++-- 4 files changed, 135 insertions(+), 8 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/mobile/processor/AbstractMobileStyleDefinePaneProcessor.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/mobile/processor/MobileStyleDefinePaneProcessor.java diff --git a/designer-base/src/main/java/com/fr/design/mainframe/mobile/processor/AbstractMobileStyleDefinePaneProcessor.java b/designer-base/src/main/java/com/fr/design/mainframe/mobile/processor/AbstractMobileStyleDefinePaneProcessor.java new file mode 100644 index 000000000..5beb748e4 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/mobile/processor/AbstractMobileStyleDefinePaneProcessor.java @@ -0,0 +1,23 @@ +package com.fr.design.mainframe.mobile.processor; + +import com.fr.stable.fun.mark.API; + +/** + * 移动端Form控件,样式模板,通用属性替换接口 + * + * @author Coral.Chen + * @since 11.0 + * Created on 2023/4/11 + */ +@API(level = MobileStyleDefinePaneProcessor.CURRENT_LEVEL) +public abstract class AbstractMobileStyleDefinePaneProcessor implements MobileStyleDefinePaneProcessor { + @Override + public int currentAPILevel() { + return CURRENT_LEVEL; + } + + @Override + public int layerIndex() { + return DEFAULT_LAYER_INDEX; + } +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/mainframe/mobile/processor/MobileStyleDefinePaneProcessor.java b/designer-base/src/main/java/com/fr/design/mainframe/mobile/processor/MobileStyleDefinePaneProcessor.java new file mode 100644 index 000000000..2d2d0a252 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/mobile/processor/MobileStyleDefinePaneProcessor.java @@ -0,0 +1,40 @@ +package com.fr.design.mainframe.mobile.processor; + +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane; +import com.fr.form.ui.Widget; +import com.fr.form.ui.mobile.MobileCommonExtraStyle; +import com.fr.form.ui.mobile.MobileStyle; +import com.fr.stable.fun.mark.Immutable; +import org.jetbrains.annotations.Nullable; + +/** + * 移动端Form控件,样式模板,通用属性替换接口 + * + * @author Coral.Chen + * @since 11.0 + * Created on 2023/4/11 + */ +public interface MobileStyleDefinePaneProcessor extends Immutable { + String XML_TAG = "MobileStyleDefinePaneProcessor"; + + int CURRENT_LEVEL = 1; + + /** + *

创建通用属性样式界面,可替换{@link com.fr.design.mainframe.mobile.ui.MobileStyleDefinePane} + *

每种样式的通用属性面板是一样的 + * + * @param widget 控件 + * @param customDefinePane 自定义面板 + * @param mobileStyle 移动端样式 + * @return + */ + @Nullable BasicBeanPane createBaseBeanPane(Widget widget, Class customDefinePane, Class mobileStyle); + + /** + * 替换通用属性面板,注册额外属性 + * + * @return 属性类 + */ + @Nullable Class classForCommonExtraStyle(Widget widget); +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/mainframe/mobile/ui/MobileStyleDefinePane.java b/designer-base/src/main/java/com/fr/design/mainframe/mobile/ui/MobileStyleDefinePane.java index 6c03df00d..268672fb3 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/mobile/ui/MobileStyleDefinePane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/mobile/ui/MobileStyleDefinePane.java @@ -53,22 +53,28 @@ public class MobileStyleDefinePane extends BasicBeanPane { private UISpinner borderRadius; private NewColorSelectBox iconColor; private MobileStyleFontConfigPane fontConfigPane; + private MobileStyle mobileStyle; MobileStyleDefinePane(Widget widget, Class customBeanPaneClass, Class mobileStyleClazz) { this.widget = widget; this.customBeanPane = Reflect.on(customBeanPaneClass).create(widget).get(); this.mobileStyleClazz = mobileStyleClazz; + initMobileStyle(widget); init(); } + private void initMobileStyle(Widget widget) { + mobileStyle = widget.getMobileStyle() != null ? widget.getMobileStyle() : Reflect.on(mobileStyleClazz).create().get(); + } + @Override public void populateBean(MobileStyle ob) { this.customBeanPane.populateBean(ob); customCombo.setSelectedIndex(ob.isCommonCustom() ? 1 : 0); - if(ob.getCommonBackground() != null) { - colorSelectBox.setSelectObject(((ColorBackground)ob.getCommonBackground()).getColor()); + if (ob.getCommonBackground() != null) { + colorSelectBox.setSelectObject(((ColorBackground) ob.getCommonBackground()).getColor()); } borderType.setSelectedLineStyle(ob.getCommonBorderType()); if (ob.getCommonBorderColor() != null) { @@ -85,7 +91,6 @@ public class MobileStyleDefinePane extends BasicBeanPane { @Override public MobileStyle updateBean() { - MobileStyle mobileStyle = Reflect.on(mobileStyleClazz).create().get(); this.widget.setMobileStyle(mobileStyle); this.customBeanPane.updateBean(); mobileStyle.setCommonCustom(customCombo.getSelectedIndex() == 1); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/mobile/ui/MobileStylePane.java b/designer-base/src/main/java/com/fr/design/mainframe/mobile/ui/MobileStylePane.java index 3573427ca..6fefd7b7e 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/mobile/ui/MobileStylePane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/mobile/ui/MobileStylePane.java @@ -5,17 +5,32 @@ import com.fr.design.beans.BasicBeanPane; import com.fr.design.dialog.BasicPane; import com.fr.design.fun.MobileWidgetStyleProvider; import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.mobile.processor.MobileStyleDefinePaneProcessor; +import com.fr.event.Event; +import com.fr.event.EventDispatcher; +import com.fr.event.Listener; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WScaleLayout; +import com.fr.form.ui.mobile.MobileCommonExtraStyle; import com.fr.form.ui.mobile.MobileStyle; +import com.fr.form.ui.mobile.StyleClassMap; import com.fr.form.ui.widget.CRBoundsWidget; import com.fr.log.FineLoggerFactory; +import com.fr.plugin.context.PluginContext; +import com.fr.plugin.observer.PluginEventType; import com.fr.stable.ArrayUtils; -import javax.swing.*; +import javax.swing.DefaultListCellRenderer; +import javax.swing.DefaultListModel; +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.ListCellRenderer; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.Component; +import java.awt.Dimension; import java.util.HashMap; import java.util.Map; @@ -28,9 +43,11 @@ public class MobileStylePane extends BasicPane { private JList styleList; private Map> map = new HashMap<>(); + private boolean checkFlag = true; + public MobileStylePane(Widget widget) { - if(widget instanceof WScaleLayout) { - this.widget = ((CRBoundsWidget)((WScaleLayout) widget).getBoundsWidget()).getWidget(); + if (widget instanceof WScaleLayout) { + this.widget = ((CRBoundsWidget) ((WScaleLayout) widget).getBoundsWidget()).getWidget(); } else { this.widget = widget; } @@ -63,13 +80,18 @@ public class MobileStylePane extends BasicPane { } private void init() { + initComponent(); + initPluginListener(); + } + + private void initComponent() { this.setLayout(FRGUIPaneFactory.createBorderLayout()); listModel = new DefaultListModel<>(); card = new CardLayout(); right = FRGUIPaneFactory.createCardLayout_S_Pane(); right.setLayout(card); MobileWidgetStyleProvider[] styleProviders = getMobileWidgetStyleProviders(); - for(MobileWidgetStyleProvider styleProvider: styleProviders) { + for (MobileWidgetStyleProvider styleProvider : styleProviders) { this.addProvider2View(styleProvider); } this.addWestList(); @@ -107,7 +129,15 @@ public class MobileStylePane extends BasicPane { listModel.addElement(displayName); try { + MobileStyleDefinePaneProcessor processor = ExtraDesignClassManager.getInstance().getSingle(MobileStyleDefinePaneProcessor.XML_TAG); BasicBeanPane mobileStyleBasicBeanPane = new MobileStyleDefinePane(widget, appearanceClazz, mobileStyleClazz); + if (checkFlag && processor != null && processor.createBaseBeanPane(widget, appearanceClazz, mobileStyleClazz) != null) { + mobileStyleBasicBeanPane = processor.createBaseBeanPane(widget, appearanceClazz, mobileStyleClazz); + Class extraStyle = processor.classForCommonExtraStyle(widget); + if (extraStyle != null) { + StyleClassMap.getCommonStyleMap().put(extraStyle.getName(), extraStyle.getName()); + } + } right.add(displayName, mobileStyleBasicBeanPane); map.put(displayName, mobileStyleBasicBeanPane); } catch (Exception e) { @@ -133,4 +163,33 @@ public class MobileStylePane extends BasicPane { styleProviders = ArrayUtils.insert(0, styleProviders, defaultMobileWidgetStyleProvider); return styleProviders; } + + private void initPluginListener() { + EventDispatcher.listen(PluginEventType.AfterRun, new Listener() { + @Override + public void on(Event event, PluginContext pluginContext) { + if (pluginContext.getRuntime().contain(MobileStyleDefinePaneProcessor.XML_TAG)) { + checkFlag = true; + refreshDockingView(); + } + } + }); + EventDispatcher.listen(PluginEventType.BeforeStop, new Listener() { + @Override + public void on(Event event, PluginContext pluginContext) { + if (pluginContext.getRuntime().contain(MobileStyleDefinePaneProcessor.XML_TAG)) { + checkFlag = false; + refreshDockingView(); + } + } + }); + } + + private void refreshDockingView() { + removeAll(); + initComponent(); + populate(widget.getMobileStyle()); + this.updateUI(); + this.repaint(); + } } \ No newline at end of file From 930e1df661143636c2bf9dda821b771422c47ba2 Mon Sep 17 00:00:00 2001 From: "coral.chen@fanruan.com" Date: Mon, 22 May 2023 22:54:30 +0800 Subject: [PATCH 2/2] =?UTF-8?q?REPORT-93554=20=E6=9B=B4=E6=96=B0Immutable?= =?UTF-8?q?=E7=B1=BB=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ocessor.java => AbstractMobileStyleDefinePaneCreator.java} | 4 ++-- ...nePaneProcessor.java => MobileStyleDefinePaneCreator.java} | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) rename designer-base/src/main/java/com/fr/design/mainframe/mobile/processor/{AbstractMobileStyleDefinePaneProcessor.java => AbstractMobileStyleDefinePaneCreator.java} (70%) rename designer-base/src/main/java/com/fr/design/mainframe/mobile/processor/{MobileStyleDefinePaneProcessor.java => MobileStyleDefinePaneCreator.java} (91%) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/mobile/processor/AbstractMobileStyleDefinePaneProcessor.java b/designer-base/src/main/java/com/fr/design/mainframe/mobile/processor/AbstractMobileStyleDefinePaneCreator.java similarity index 70% rename from designer-base/src/main/java/com/fr/design/mainframe/mobile/processor/AbstractMobileStyleDefinePaneProcessor.java rename to designer-base/src/main/java/com/fr/design/mainframe/mobile/processor/AbstractMobileStyleDefinePaneCreator.java index 5beb748e4..203a83f13 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/mobile/processor/AbstractMobileStyleDefinePaneProcessor.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/mobile/processor/AbstractMobileStyleDefinePaneCreator.java @@ -9,8 +9,8 @@ import com.fr.stable.fun.mark.API; * @since 11.0 * Created on 2023/4/11 */ -@API(level = MobileStyleDefinePaneProcessor.CURRENT_LEVEL) -public abstract class AbstractMobileStyleDefinePaneProcessor implements MobileStyleDefinePaneProcessor { +@API(level = MobileStyleDefinePaneCreator.CURRENT_LEVEL) +public abstract class AbstractMobileStyleDefinePaneCreator implements MobileStyleDefinePaneCreator { @Override public int currentAPILevel() { return CURRENT_LEVEL; diff --git a/designer-base/src/main/java/com/fr/design/mainframe/mobile/processor/MobileStyleDefinePaneProcessor.java b/designer-base/src/main/java/com/fr/design/mainframe/mobile/processor/MobileStyleDefinePaneCreator.java similarity index 91% rename from designer-base/src/main/java/com/fr/design/mainframe/mobile/processor/MobileStyleDefinePaneProcessor.java rename to designer-base/src/main/java/com/fr/design/mainframe/mobile/processor/MobileStyleDefinePaneCreator.java index 2d2d0a252..3b5e2cb86 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/mobile/processor/MobileStyleDefinePaneProcessor.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/mobile/processor/MobileStyleDefinePaneCreator.java @@ -15,8 +15,8 @@ import org.jetbrains.annotations.Nullable; * @since 11.0 * Created on 2023/4/11 */ -public interface MobileStyleDefinePaneProcessor extends Immutable { - String XML_TAG = "MobileStyleDefinePaneProcessor"; +public interface MobileStyleDefinePaneCreator extends Immutable { + String XML_TAG = "MobileStyleDefinePaneCreator"; int CURRENT_LEVEL = 1;