@ -17,6 +17,7 @@ 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.stable.os.support.OSBasedAction ;
import com.fr.stable.os.support.OSSupportCenter ;
@ -38,6 +39,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 +78,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 ) {
GeneralContext . stopListenPlugin ( pluginOnRunOrStopListener ) ;
}
} ;
PluginEventListener pluginEventListener = new PluginEventListener ( ) {
@Override
public boolean accept ( PluginContext context ) {
public void on ( PluginEvent event ) {
existDesignExtraPlugin = true ;
}
} ;
GeneralContext . listenPluginRunningChanged ( pluginEventListener , pluginFilter ) ;
GeneralContext . listenPlugin ( PluginEventType . AfterAllActive , afterAllPluginsActiveListener ) ;
GeneralContext . listenPlugin ( 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 ) {