Я использовал org.eclipse.ui.PerspectiveAdapter для отслеживания перспектив.
Каждый раз, когда открывается перспектива, проверяйте что-то и
принять меры, чтобы открыть или закрыть определенные виды.
Я регистрирую PerspectiveAdapter в Активаторе. начало (контекст BundleContext)
метод вызова события.
Мой код активации breif выглядит следующим образом.
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
.......
ll = new fomomentumplugin.perspectives.LicenseListener();
IWorkbench wbench = PlatformUI.getWorkbench();
IWorkbenchWindow window = wbench.getActiveWorkbenchWindow() ;
window.addPerspectiveListener(ll);
...........
}
and
public class LicenseListener extends PerspectiveAdapter {
public void perspectiveOpened(IWorkbenchPage page, IPerspectiveDescriptor perspective) {
String componentName = "FOMomentum";
if(perspective.getId().equals("org.softools.FOMomentumPLugin.FO")){
if(Activator.checkLicense == null || !Activator.checkLicense.isValidLicense(componentName)){
System.out.println("org.softools.FOMomentumPLugin.FO perspective Activated with no license found message !");
//page.resetPerspective();
hideViews(page);
}
else showViews(page);
}
}
public void perspectiveActivated(IWorkbenchPage page, IPerspectiveDescriptor perspective) {
String componentName = "FOMomentum";
if(perspective.getId().equals("org.softools.FOMomentumPLugin.FO")){
if(Activator.checkLicense == null || !Activator.checkLicense.isValidLicense(componentName)){
System.out.println("org.softools.FOMomentumPLugin.FO perspective Activated with no license found message !");
//page.resetPerspective();
hideViews(page);
}
else showViews(page);
}
}
private void hideViews(IWorkbenchPage page){
IViewPart momentum = page.findView("fomomentumplugin.views.FOMomentumView") ;
if(momentum != null){
((fomomentumplugin.views.FOMomentumView)momentum).removeCalendarCombo();
page.hideView(momentum);
}
IViewPart momentumDetail = page.findView("fomomentumplugin.views.FOMomentumDetailView") ;
page.hideView(momentumDetail);
IViewPart movingAverageview = page.findView("FOCallCandlebarView") ;
page.hideView(movingAverageview);
IViewPart priceVolumeView = page.findView("FOMomentumPLugin.FOPutCandlebarView") ;
page.hideView(priceVolumeView);
}
private void showViews(IWorkbenchPage page){
try {
page.showView("fomomentumplugin.views.FOMomentumView");
page.showView("fomomentumplugin.views.FOMomentumDetailView");
page.showView("FOCallCandlebarView");
page.showView("FOMomentumPLugin.FOPutCandlebarView");
} catch (PartInitException e) {
e.printStackTrace();
}
}
}
Я надеюсь, что это поможет.