2014-09-10 5 views
0

Я хочу сделать валидацию, когда кнопка закрытия импульса вкладки в приложении Eclipse RCP 4, и если какая-либо проверка не удалась, то предотвратите ее.Как работать с закрывающей вкладкой в ​​eclipse RCP 4

+0

Является ли это e4 RCP с использованием модели приложения или совместимости с RX 3.x? –

+0

Я использую модель приложения e4 – gustavofersan

+0

Вы просто хотите узнать о закрытии части или пытаетесь ли вы предотвратить закрытие? –

ответ

0

Если вы не хотите использовать part.setDirty(true) вместе с ISaveHandler, так как greg-449 montioned, вы можете прослушивать модельные события и исправлять их там. Что-то в направлении этого:

public class PreventCloseAddon { 
    @PostConstruct 
    public void init(final IEventBroker eventBroker, final EPartService partService) { 
     EventHandler tbrHandler = new EventHandler() { 
      @Override 
      public void handleEvent(Event event) { 
       if (!UIEvents.isSET(event)) 
        return; 
       Object element = event.getProperty(UIEvents.EventTags.ELEMENT); 
       if (element instanceof MPart) { 
        MPart part = (MPart) element; 
        if (!part.isToBeRendered()) { 
         // ... validate here ... 
         part.setToBeRendered(true); 
         partService.activate(part); 
        } 
       } 
      } 
     }; 
     eventBroker.subscribe(UIEvents.UIElement.TOPIC_TOBERENDERED, tbrHandler); 
    } 
} 

Вы должны знать, что часть вновь будет оказана с этим кодом.

+0

К сожалению, при вызове 'setToBeRendered' в этом случае не работает. –

+0

Я изменил свой код выше, чтобы сделать его «работающим», как и следовало ожидать, с помощью «EPartService» для активации части снова после установки «toBeRendered» в true. Вы можете щелкнуть по 'x' части, но она не будет закрыта. Это, конечно, не имеет практического смысла, но является хорошим примером того, что вы могли бы сделать. –