|
|
|
@ -11,6 +11,7 @@ import com.fr.design.gui.ibutton.UIButtonUI;
|
|
|
|
|
import com.fr.design.gui.icontainer.UIEastResizableContainer; |
|
|
|
|
import com.fr.design.gui.ilable.UILabel; |
|
|
|
|
import com.fr.design.layout.VerticalFlowLayout; |
|
|
|
|
import com.fr.design.ui.util.UIUtil; |
|
|
|
|
import com.fr.design.utils.gui.GUICoreUtils; |
|
|
|
|
import com.fr.design.utils.gui.GUIPaintUtils; |
|
|
|
|
import com.fr.general.FRFont; |
|
|
|
@ -130,13 +131,13 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
|
|
|
|
|
defaultAuthorityPane = getDefaultPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Not_Support_Authority_Edit")); |
|
|
|
|
switchMode(PropertyMode.REPORT); |
|
|
|
|
setContainerWidth(CONTAINER_WIDTH); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
initPluginPane(); |
|
|
|
|
listenPlugin(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void listenPlugin() { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PluginFilter filter = new PluginFilter() { |
|
|
|
|
@Override |
|
|
|
|
public boolean accept(PluginContext context) { |
|
|
|
@ -150,12 +151,18 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
|
|
|
|
|
public void on(PluginEvent event) { |
|
|
|
|
PluginContext context = event.getContext(); |
|
|
|
|
PluginRuntime runtime = context.getRuntime(); |
|
|
|
|
Set<PropertyItemPaneProvider> providers = runtime.get(PropertyItemPaneProvider.XML_TAG); |
|
|
|
|
for (PropertyItemPaneProvider provider : providers) { |
|
|
|
|
addPropertyItem(provider); |
|
|
|
|
} |
|
|
|
|
updateAllPropertyPane(); |
|
|
|
|
} |
|
|
|
|
final Set<PropertyItemPaneProvider> providers = runtime.get(PropertyItemPaneProvider.XML_TAG); |
|
|
|
|
// UI相关的逻辑 用UI线程执行 不走FinePluginController线程 走FinePluginController线程有几率出问题
|
|
|
|
|
// 容易导致FinePluginController持有Swing内部的java.awt.Component$AWTTreeLock 这个锁不能被UI线程之外的线程持有 否则容易造成UI线程被Blocked住
|
|
|
|
|
UIUtil.invokeLaterIfNeeded(new Runnable() { |
|
|
|
|
@Override |
|
|
|
|
public void run() { |
|
|
|
|
for (PropertyItemPaneProvider provider : providers) { |
|
|
|
|
addPropertyItem(provider); |
|
|
|
|
} |
|
|
|
|
updateAllPropertyPane(); |
|
|
|
|
} |
|
|
|
|
}); } |
|
|
|
|
}, filter); |
|
|
|
|
PluginListenerRegistration.getInstance().listen( |
|
|
|
|
PluginEventType.BeforeStop, |
|
|
|
@ -164,18 +171,22 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
|
|
|
|
|
public void on(PluginEvent event) { |
|
|
|
|
PluginContext context = event.getContext(); |
|
|
|
|
PluginRuntime runtime = context.getRuntime(); |
|
|
|
|
Set<PropertyItemPaneProvider> providers = runtime.get(PropertyItemPaneProvider.XML_TAG); |
|
|
|
|
for (PropertyItemPaneProvider provider : providers) { |
|
|
|
|
removePropertyItem(provider); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
updateAllPropertyPane(); |
|
|
|
|
final Set<PropertyItemPaneProvider> providers = runtime.get(PropertyItemPaneProvider.XML_TAG); |
|
|
|
|
UIUtil.invokeLaterIfNeeded(new Runnable() { |
|
|
|
|
@Override |
|
|
|
|
public void run() { |
|
|
|
|
for (PropertyItemPaneProvider provider : providers) { |
|
|
|
|
removePropertyItem(provider); |
|
|
|
|
} |
|
|
|
|
updateAllPropertyPane(); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
}, filter); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void removePropertyItem(PropertyItemPaneProvider provider) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
propertyItemMap.remove(provider.key()); |
|
|
|
|
String replaceKey = provider.replaceKey(); |
|
|
|
|
if (replaceKey == null) { |
|
|
|
@ -186,18 +197,18 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
|
|
|
|
|
replaceItem.setReplace(false); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void initPluginPane() { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ExtraDesignClassManager classManager = PluginModule.getAgent(PluginModule.ExtraDesign); |
|
|
|
|
Set<PropertyItemPaneProvider> providers = classManager.getArray(PropertyItemPaneProvider.XML_TAG); |
|
|
|
|
for (PropertyItemPaneProvider provider : providers) { |
|
|
|
|
addPropertyItem(provider); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void addPropertyItem(PropertyItemPaneProvider provider) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String key = provider.key(); |
|
|
|
|
PropertyItemBean itemBean = provider.getItem(); |
|
|
|
|
PropertyItem propertyItem = new PropertyItem(itemBean.getName(), |
|
|
|
@ -212,7 +223,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
|
|
|
|
|
button.addActionListener(buttonListener); |
|
|
|
|
} |
|
|
|
|
propertyItemMap.put(key, propertyItem); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String replaceKey = provider.replaceKey(); |
|
|
|
|
if (replaceKey == null) { |
|
|
|
|
return; |
|
|
|
@ -221,11 +232,11 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
|
|
|
|
|
if (replaceItem != null) { |
|
|
|
|
replaceItem.setReplace(true); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void initPropertyItemList() { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
propertyItemMap = new LinkedHashMap<>(); // 有序map
|
|
|
|
|
// 单元格元素
|
|
|
|
|
PropertyItem cellElement = new PropertyItem(KEY_CELL_ELEMENT, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Cell_Element"), |
|
|
|
@ -240,7 +251,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
|
|
|
|
|
"floatelement", new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_PARA, PropertyMode.REPORT_FLOAT, PropertyMode.POLY, PropertyMode.POLY_CHART}, |
|
|
|
|
new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_FLOAT, PropertyMode.POLY_REPORT}); |
|
|
|
|
// 控件设置
|
|
|
|
|
PropertyItem widgetSettings = new PropertyItem(KEY_WIDGET_SETTINGS, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Widget_Settings"), |
|
|
|
|
PropertyItem widgetSettings = new PropertyItem(KEY_WIDGET_SETTINGS, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Component_Settings"), |
|
|
|
|
"widgetsettings", new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_PARA, PropertyMode.REPORT_FLOAT, PropertyMode.FORM, PropertyMode.POLY}, |
|
|
|
|
new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_PARA, PropertyMode.FORM, PropertyMode.POLY_REPORT, PropertyMode.POLY_CHART}); |
|
|
|
|
// 条件属性
|
|
|
|
@ -474,24 +485,30 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
|
|
|
|
|
public void replaceAuthorityEditionPane(JComponent pane) { |
|
|
|
|
propertyItemMap.get(KEY_AUTHORITY_EDITION).replaceContentPane(pane); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public JComponent getAuthorityEditionPane() { |
|
|
|
|
return propertyItemMap.get(KEY_AUTHORITY_EDITION).getContentPane(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void replaceConfiguredRolesPane(JComponent pane) { |
|
|
|
|
propertyItemMap.get(KEY_CONFIGURED_ROLES).replaceContentPane(pane); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void replaceKeyPane(String key, JComponent pane) { |
|
|
|
|
public void replaceKeyPane(final String key, final JComponent pane) { |
|
|
|
|
|
|
|
|
|
propertyItemMap.get(key).replaceContentPane(pane); |
|
|
|
|
//需要放到 ui 线程中处理
|
|
|
|
|
UIUtil.invokeLaterIfNeeded(new Runnable() { |
|
|
|
|
@Override |
|
|
|
|
public void run() { |
|
|
|
|
propertyItemMap.get(key).replaceContentPane(pane); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public JComponent getConfiguredRolesPane() { |
|
|
|
|
return propertyItemMap.get(KEY_CONFIGURED_ROLES).getContentPane(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void addParameterPane(JComponent paraPane) { |
|
|
|
|
propertyItemMap.get(KEY_WIDGET_SETTINGS).replaceHeaderPane(paraPane); |
|
|
|
|
} |
|
|
|
@ -653,8 +670,8 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
|
|
|
|
|
private String iconSuffix = ICON_SUFFIX_NORMAL; // normal, diabled, selected, 三者之一
|
|
|
|
|
private final Color selectedBtnBackground = new Color(0xF5F5F7); |
|
|
|
|
private Color originBtnBackground; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public PropertyItem(String name, String title, String btnIconName, PropertyMode[] visibleModes, PropertyMode[] enableModes) { |
|
|
|
|
this(name, title, btnIconName, ICON_BASE_DIR, visibleModes, enableModes); |
|
|
|
|
} |
|
|
|
@ -705,12 +722,12 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
|
|
|
|
|
public void setVisible(boolean isVisible) { |
|
|
|
|
this.isVisible = isVisible; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void setReplace(boolean replace) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this.replace = replace; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public boolean isEnabled() { |
|
|
|
|
return isEnabled; |
|
|
|
|
} |
|
|
|
@ -720,16 +737,16 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
|
|
|
|
|
this.isEnabled = isEnabled; |
|
|
|
|
button.setEnabled(isEnabled); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void setIconBaseDir(String iconBaseDir) { |
|
|
|
|
this.iconBaseDir = iconBaseDir; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private String getIconBaseDir() { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return StringUtils.isEmpty(iconBaseDir) ? ICON_BASE_DIR : iconBaseDir; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void initPropertyPanel() { |
|
|
|
|
propertyPanel = new JPanel(); |
|
|
|
|
propertyPanel.setBackground(Color.pink); |
|
|
|
@ -810,7 +827,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private String getBtnIconUrl() { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return getIconBaseDir() + btnIconName + iconSuffix; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|