2012-05-07 2 views
2

Я пытаюсь создать собственное представление проблемы.
Я нашел следующее tutorial и все работает нормально.Пользовательский маркер с собственными взаимодействиями

Но есть ли возможность добавить собственный DoubleClickListener или что-то в этом роде?
Я хочу реагировать на действия пользователя, которые выполняются в списке.

Спасибо за любые советы.

ответ

0

Я нашел решение, не лучший, но приемлемый способ.
Я использую SelectionService в моем ViewPart и зарегистрировать новый SelectionListener.

Мое решение принимает только выбор в представлении проблемы, возможно, есть лучший способ отличать события.

site.getWorkbenchWindow().getSelectionService().addSelectionListener(new ISelectionListener() { 
    @Override 
    public void selectionChanged(IWorkbenchPart part, ISelection selection) { 
     IStructuredSelection s = (IStructuredSelection) selection; 

     if (s.getFirstElement() instanceof MarkerItem) { 
      MarkerItem marker = (MarkerItem) s.getFirstElement(); 
      if (marker != null && marker.getMarker() != null) { 
       IMarker iMarker = marker.getMarker(); 

       // More Code here ... 
      } 
     } 
    } 
}); 
0

Вот что я хотел бы сделать:

переопределив public void createPartControl(final Composite parent) вы будете иметь родительский композит. Вызывая parent.getChildren(), вы можете перебирать доступные элементы управления. ExtendedMarkersView «Default» - это MarkersTreeViewer, который является treeViewer, поэтому элемент управления будет деревом. У вас есть дерево, вы можете добавить любой слушатель вы хотите, вот фрагмент кода:

@Override 
public void createPartControl(final Composite parent) { 
    super.createPartControl(parent); 

    for (final Control control : parent.getChildren()) { 
     if (!(control instanceof Tree)) { 
      continue; 
     } 

     tree = (Tree) control; 

     final Listener[] listeners = tree.getListeners(SWT.DefaultSelection); 
     if (listeners != null) { 
      for (final Listener listener : listeners) { 
       tree.removeListener(SWT.DefaultSelection, listener); 
      } 
     } 
     tree.addMouseListener(new MouseAdapter() { 

      @Override 
      public void mouseDoubleClick(final MouseEvent e) { 
       if (e.widget instanceof Tree) { 
        final Tree tree = (Tree) e.widget; 

        // do whatever you want 
       } 
      } 

     }); 
    } 
} 
+0

Спасибо за ваш ответ. Но я не могу использовать его в моем случае, потому что мой класс расширяет MarkerSupportView и перезаписывает метод createPartControl не допускается. – CSchulz

+0

Я делаю то же самое, расширяя MarkerSupportView, который расширяет ExtendedMarkersView, проблема, о которой я знаю, заключается в том, что она находится во внутреннем пакете, однако это лучшее, что я мог бы придумать, если бы у кого-то была блестящая идея, чем я бы сделал то же самое это единственный способ, который я нашел до сих пор, чтобы решить это требование. –

+0

Я нашел работу с помощью SelectionService, см. Мой ответ. :) Это не лучший способ ... – CSchulz