Eclipse插件-每次打开时都将鼠标侦听器添加到编辑器

时间:2018-08-08 00:31:17

标签: eclipse eclipse-plugin mouseevent eclipse-cdt

我正在开发Eclipse插件,我需要将点击位置存储在X和Y轴坐标中。

到目前为止,我是通过使用 org.eclipse.ui.IStartup 接口并在实现它的类中使用此接口来实现的:

@Override
public void earlyStartup() {
    IWorkbench wb = PlatformUI.getWorkbench();
    wb.addWindowListener(generateWindowListener());
}

在给定的方法中,我这样做:

private IWindowListener generateWindowListener() 
{
    return new IWindowListener() {

        private MouseListener clickMouseListener = new ClickMouseListener();

        @Override
        public void windowOpened(IWorkbenchWindow window) {
            //Nothing
        }

        @Override
        public void windowDeactivated(IWorkbenchWindow window) {
            System.out.println("deactivaed");
            IWorkbenchPage activePage = window.getActivePage();
            activePage.getActiveEditor().getAdapter(org.eclipse.swt.widgets.Control.class).addMouseListener(clickMouseListener);
        }

        @Override
        public void windowClosed(IWorkbenchWindow window) {
            //Nothing
        }

        @Override
        public void windowActivated(IWorkbenchWindow window) {
            System.out.println("activated");
            IWorkbenchPage activePage = window.getActivePage();
            activePage.getActiveEditor().getAdapter(org.eclipse.swt.widgets.Control.class).addMouseListener(clickMouseListener);
        }
    };
}

因此,我基本上是在一般工作台上注册一个侦听器,目的是在新打开的编辑器上注册一个新的MouseListener(将坐标保存在其中)。

但是,这仅在最小化/最大化整个月食窗口时才有效,因为此侦听器已绑定到主窗口。如果打开了新的编辑器,则什么也不会发生(因为它可能应该可以工作)。

我想每次打开/激活/单击新编辑器时都注册新的MouseListener,因此我可以在打开新编辑器时立即将其注册到编辑器中。如何订阅/收听与编辑器有关的任何事件(主要是激活/打开新编辑器),以便随后可以将MouseListener订阅到编辑器并获得鼠标单击的当前X轴和Y轴?

谢谢您的任何建议。

1 个答案:

答案 0 :(得分:2)

使用IPartListener在工作台窗口中监听零件事件:

IPartService partService = window.getPartService();

partService.addPartListener(listener);

这将告诉您所有打开,关闭,激活...的编辑器(和视图)。

在早期启动方法中,工作台窗口尚不可用。使用Display.asyncExec将代码的运行延迟到UI初始化完成为止:

Display.getDefault().asyncExec(new Runnable() {
   @Override
   public void run() {
     IPartService service = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService();

     ......
   }
 });