2014-10-20 6 views
1

В настоящее время я работаю над приложением eclipse e4 RCP, и у меня есть часть, которая служит менеджером заданий, где пользователь может видеть все активные задания и их прогресс, как один в затмении. Проблема в том, что пользователь может открыть часть прогресса, дважды щелкнув на панели инструментов, и он также должен быть способен закрыть часть прогресса всякий раз, когда захочет, но вместо того, чтобы удалять часть, я хочу просто сделать ее невидимой. Я подумал, что сначала это не должно быть проблемой, потому что я могу установить, что часть не видна, но проблема в том, как поймать закрытие события и обработать его по моему пути. Есть ли какие-либо события, интерфейсы или прослушиватели, которые я могу реализовать, чтобы поймать событие закрытия и не допустить, чтобы часть была удалена?Завершить событие закрытия части (Eclipse e4 RCP)

+0

вы спрашиваете о применении e4 (с использованием Application.e4xmi) или в режиме RCP совместимости 3.x? –

+0

Да я с просьбой о приложении e4, используя Application.e4xmi .. – tom1991te

+0

'EPartService.addPartListener' расскажет вам о закрытии, но я не знаю anywa y, чтобы остановить закрытие. –

ответ

1

Вы можете реализовать CustomSaveHandler и заменить обработчик сохранения Eclipse по умолчанию на процессор. В этом SaveHandler вы можете контролировать, закрывается ли часть shoud или нет. Поэтому вы не можете закрыть его и сделать его невидимым.

ExampleCode:

public class ReplaceSaveHandlerProcessor { 
@Named("your.id.to.window") 
@Inject 
MWindow window; 

@Inject 
IEventBroker eventBroker; 

@Execute 
void installIntoContext() { 
    eventBroker.subscribe(UIEvents.Context.TOPIC_CONTEXT, new EventHandler() { 

     @Override 
     public void handleEvent(final Event event) { 
      if (UIEvents.isSET(event)) { 
       if (window.equals(event.getProperty("ChangedElement")) && (window.getContext() != null)) { 

        window.getContext().runAndTrack(new RunAndTrack() { 

         private final ISaveHandler saveHandler = new CustomSaveHandler(); 

         @Override 
         public boolean changed(final IEclipseContext context) { 
          Object getSaveHandlerValue = context.get(ISaveHandler.class); 


          if (!saveHandler.equals(getSaveHandlerValue)) { // prevents endless loop 
           ContextInjectionFactory.inject(saveHandler, window.getContext()); 
           context.set(ISaveHandler.class, saveHandler); 
          } 


          return true; // ture keeps tracking and the saveHandler as the only opportunity 
         } 

        }); 
       } 
      } 
     } 

    }); 
} 
} 

Вы должны определить Удлинитель для ExtentionPoint org.eclipse.e4.workbench.model С Вашим ReplaceSaveHandlerProcessor. (Вы должны объявить идентификатор окна, как «элемент» в этом расширении (Добавлено Скриншот:. enter image description here)

CustomSaveHandler должны реализовать интерфейс ISaveHandler В своих методах певец можно сказать, если часть действительно должно быть закрыта

..
public class CustomSaveHandler implements ISaveHandler { 

@Override 
public boolean save(MPart dirtyPart, boolean confirm) { 
    // TODO Auto-generated method stub 
    return false; 
} 

@Override 
public boolean saveParts(Collection<MPart> dirtyParts, boolean confirm) { 
    // TODO Auto-generated method stub 
    return false; 
} 

@Override 
public Save promptToSave(MPart dirtyPart) { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public Save[] promptToSave(Collection<MPart> dirtyParts) { 
    // TODO Auto-generated method stub 
    return null; 
} 

}

Смежные вопросы