|
|
|
@ -17,6 +17,8 @@ import com.fr.plugin.injectable.PluginModule;
|
|
|
|
|
import com.fr.plugin.manage.PluginFilter; |
|
|
|
|
import com.fr.plugin.observer.PluginEvent; |
|
|
|
|
import com.fr.plugin.observer.PluginEventListener; |
|
|
|
|
import com.fr.plugin.observer.PluginEventType; |
|
|
|
|
import com.fr.plugin.observer.PluginListenerRegistration; |
|
|
|
|
import com.fr.stable.os.support.OSBasedAction; |
|
|
|
|
import com.fr.stable.os.support.OSSupportCenter; |
|
|
|
|
|
|
|
|
@ -38,6 +40,17 @@ public class NorthRegionContainerPane extends JPanel {
|
|
|
|
|
|
|
|
|
|
private JMenuBar menuBar; |
|
|
|
|
|
|
|
|
|
private PluginFilter pluginFilter = new PluginFilter() { |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public boolean accept(PluginContext context) { |
|
|
|
|
|
|
|
|
|
return context.contain(PluginModule.ExtraDesign); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
private volatile boolean existDesignExtraPlugin; |
|
|
|
|
|
|
|
|
|
public static NorthRegionContainerPane getInstance() { |
|
|
|
|
if (THIS == null) { |
|
|
|
|
synchronized (NorthRegionContainerPane.class) { |
|
|
|
@ -66,34 +79,64 @@ public class NorthRegionContainerPane extends JPanel {
|
|
|
|
|
//hugh: private修改为protected方便oem的时候修改右上的组件构成
|
|
|
|
|
//顶部日志+登陆按钮
|
|
|
|
|
final JPanel northEastPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
|
|
|
|
initPluginListener(northEastPane, ad); |
|
|
|
|
refreshNorthEastPane(northEastPane, ad); |
|
|
|
|
return northEastPane; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void initPluginListener(JPanel northEastPane, ToolBarMenuDock ad) { |
|
|
|
|
//优先级为-1,保证最后全面刷新一次
|
|
|
|
|
GeneralContext.listenPluginRunningChanged(new PluginEventListener(-1) { |
|
|
|
|
PluginEventListener pluginOnRunOrStopListener = new PluginEventListener(-1) { |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void on(PluginEvent event) { |
|
|
|
|
|
|
|
|
|
refreshNorthEastPane(northEastPane, ad); |
|
|
|
|
SwingUtilities.invokeLater(new Runnable() { |
|
|
|
|
@Override |
|
|
|
|
public void run() { |
|
|
|
|
if (DesignerContext.getDesignerFrame() == null) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
DesignerContext.getDesignerFrame().refresh(); |
|
|
|
|
DesignerContext.getDesignerFrame().repaint(); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
refreshAll(northEastPane, ad); |
|
|
|
|
} |
|
|
|
|
}, new PluginFilter() { |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
// 在设计器启动时仅在最后一个插件启用时候进行刷新一次 如果插件启用过程中存在实现了设计器接口的插件
|
|
|
|
|
PluginEventListener afterAllPluginsActiveListener = new PluginEventListener() { |
|
|
|
|
@Override |
|
|
|
|
public void on(PluginEvent event) { |
|
|
|
|
//优先级为-1,保证最后全面刷新一次
|
|
|
|
|
GeneralContext.listenPluginRunningChanged(pluginOnRunOrStopListener, pluginFilter); |
|
|
|
|
// 在设计器启动时仅在最后一个插件启用时候进行刷新一次 如果插件启用过程中存在实现了设计器接口的插件
|
|
|
|
|
boolean needRefresh = DesignerContext.getDesignerFrame() != null && DesignerContext.getDesignerFrame().isVisible() && existDesignExtraPlugin; |
|
|
|
|
if (needRefresh) { |
|
|
|
|
refreshAll(northEastPane, ad); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
PluginEventListener beforeAllPluginStopListener = new PluginEventListener() { |
|
|
|
|
@Override |
|
|
|
|
public void on(PluginEvent event) { |
|
|
|
|
PluginListenerRegistration.getInstance().stopListen(pluginOnRunOrStopListener); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
PluginEventListener pluginEventListener = new PluginEventListener() { |
|
|
|
|
@Override |
|
|
|
|
public boolean accept(PluginContext context) { |
|
|
|
|
public void on(PluginEvent event) { |
|
|
|
|
existDesignExtraPlugin = true; |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
GeneralContext.listenPluginRunningChanged(pluginEventListener, pluginFilter); |
|
|
|
|
PluginListenerRegistration.getInstance().listen(PluginEventType.AfterAllActive, afterAllPluginsActiveListener); |
|
|
|
|
PluginListenerRegistration.getInstance().listen(PluginEventType.BeforeAllStop, beforeAllPluginStopListener); |
|
|
|
|
|
|
|
|
|
return context.contain(PluginModule.ExtraDesign); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void refreshAll(JPanel northEastPane, ToolBarMenuDock ad) { |
|
|
|
|
refreshNorthEastPane(northEastPane, ad); |
|
|
|
|
SwingUtilities.invokeLater(new Runnable() { |
|
|
|
|
@Override |
|
|
|
|
public void run() { |
|
|
|
|
if (DesignerContext.getDesignerFrame() == null) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
DesignerContext.getDesignerFrame().refresh(); |
|
|
|
|
DesignerContext.getDesignerFrame().repaint(); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
refreshNorthEastPane(northEastPane, ad); |
|
|
|
|
return northEastPane; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void refreshNorthEastPane(final JPanel northEastPane, final ToolBarMenuDock ad) { |
|
|
|
|