Eclipse 插件 - 每次打开编辑器时添加鼠标监听器
Eclipse plugin - add mouse listener to an editor everytime its opened
我正在开发一个 Eclipse 插件,我需要在 X 和 Y 轴坐标中存储点击位置。
到目前为止,我是通过使用 org.eclipse.ui.IStartup 接口并在 class 中使用它来实现它的:
@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);
}
};
}
所以我基本上向一般 workbench 注册了一个侦听器,目的是在新打开的编辑器上注册一个新的 MouseListener - 我在其中保存坐标。
但是,这仅在整个 eclipse window 为 minimized/maximized 时才有效,因为此侦听器绑定到主 window。如果打开一个新的编辑器,什么也不会发生(因为它可能应该工作)。
我想在每次 opened/activated/clicked 打开新编辑器时注册新的 MouseListener - 这样我就可以在打开新编辑器时立即将它们注册到编辑器。我如何才能 subscribe/listen 处理与编辑器(主要是 activated/open 新编辑器)相关的任何事件,以便我可以为编辑器订阅 MouseListener 并获取鼠标点击的当前 X 轴和 Y 轴?
感谢任何建议。
使用 IPartListener
来监听 workbench 中的部分事件 window:
IPartService partService = window.getPartService();
partService.addPartListener(listener);
这将告诉您所有正在打开、关闭、激活的编辑器(和视图),....
在早期启动方法中,workbench window 尚不可用。使用 Display.asyncExec
延迟 运行 您的代码,直到 UI 初始化完成:
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
IPartService service = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService();
......
}
});
我正在开发一个 Eclipse 插件,我需要在 X 和 Y 轴坐标中存储点击位置。
到目前为止,我是通过使用 org.eclipse.ui.IStartup 接口并在 class 中使用它来实现它的:
@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);
}
};
}
所以我基本上向一般 workbench 注册了一个侦听器,目的是在新打开的编辑器上注册一个新的 MouseListener - 我在其中保存坐标。
但是,这仅在整个 eclipse window 为 minimized/maximized 时才有效,因为此侦听器绑定到主 window。如果打开一个新的编辑器,什么也不会发生(因为它可能应该工作)。
我想在每次 opened/activated/clicked 打开新编辑器时注册新的 MouseListener - 这样我就可以在打开新编辑器时立即将它们注册到编辑器。我如何才能 subscribe/listen 处理与编辑器(主要是 activated/open 新编辑器)相关的任何事件,以便我可以为编辑器订阅 MouseListener 并获取鼠标点击的当前 X 轴和 Y 轴?
感谢任何建议。
使用 IPartListener
来监听 workbench 中的部分事件 window:
IPartService partService = window.getPartService();
partService.addPartListener(listener);
这将告诉您所有正在打开、关闭、激活的编辑器(和视图),....
在早期启动方法中,workbench window 尚不可用。使用 Display.asyncExec
延迟 运行 您的代码,直到 UI 初始化完成:
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
IPartService service = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService();
......
}
});