我正在研究一个eclipse-plugin,它带有一个大纲视图的自己的编辑器 我已经用元素填充了大纲视图,现在我想对其中一些元素进行操作。如果用户(右键)单击它们,它应该显示一个行为类似于QuickFix-Popup的弹出窗口。
请帮我提供相关资源或教程的一些提示或链接。
提前谢谢!
编辑:
发布大纲视图代码
我在此之后实施了视图:http://wiki.eclipse.org/FAQ_How_do_I_create_an_Outline_view_for_my_own_language_editor%3F
这是.jav文件的大纲视图。我的.jav-Editor创建了OutlineView,它扩展了ContentOutlinePage
,如下所示:
public Object getAdapter(Class required) {
if (IContentOutlinePage.class.equals(required)) {
if (fOutlinePage == null) {
fOutlinePage= new JavOutline(this.sourceFile);
}
return fOutlinePage;
}
return super.getAdapter(required);
}
JavOutline-class的代码:
public class JavOutline extends ContentOutlinePage{
private SourceFile syntaxTree;
public JavOutline(SourceFile syntaxTree) {
this.syntaxTree = syntaxTree;
}
public void createControl(Composite parent) {
super.createControl(parent);
TreeViewer viewer = getTreeViewer();
viewer.setContentProvider(new SyntaxTreeContentProvider());
viewer.setLabelProvider(new SyntaxTreeLabelProvider());
viewer.addSelectionChangedListener(this);
if(this.syntaxTree!=null)viewer.setInput(this.syntaxTree);
}
public void update(SourceFile sourceFile) {
TreeViewer viewer= getTreeViewer();
if (viewer != null) {
Control control= viewer.getControl();
if (control != null && !control.isDisposed()) {
control.setRedraw(false);
viewer.setInput(sourceFile);
viewer.expandAll();
control.setRedraw(true);
}
}
}
}
class SyntaxTreeContentProvider implements ITreeContentProvider {
public SyntaxTreeContentProvider() {
}
@Override
public void dispose() {
// TODO Auto-generated method stub
}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
@Override
public Object[] getElements(Object inputElement) {
if(! (inputElement instanceof SourceFile))return null;
return ((SourceFile)inputElement).getChildren().toArray();
}
@Override
public Object[] getChildren(Object parentElement) {
if(! (parentElement instanceof SyntaxTreeNode))return null;
return ((SyntaxTreeNode)parentElement).getChildren().toArray();
}
@Override
public Object getParent(Object element) {
if(! (element instanceof SyntaxTreeNode))return null;
return ((SyntaxTreeNode)element).getParent();
}
@Override
public boolean hasChildren(Object element) {
return true;
}
}
class SyntaxTreeLabelProvider extends LabelProvider{
@Override
public String getText(Object element) {
if(! (element instanceof SyntaxTreeNode))return super.getText(element);
return ((SyntaxTreeNode)element).getDescription();
}
}
我只想在TreeViewer中的一个元素被(右键)单击时调用一个动作。
答案 0 :(得分:1)
您可以为上下文菜单设置菜单侦听器,如下所示:
final MenuManager menuMgr = new MenuManager();
menuMgr.setRemoveAllWhenShown(true);
menuMgr.addMenuListener(new FillContextMenu());
final Control tree = viewer.getControl();
final Menu menu = menuMgr.createContextMenu(tree);
tree.setMenu(menu);
private class FillContextMenu implements IMenuListener
{
@Override
public void menuAboutToShow(final IMenuManager manager)
{
// TODO add Actions or other items to the menu
}
}