繁体   English   中英

如何在自定义编辑器的大纲视图中添加控件(按钮)

[英]How to add a control(button) to the outline view of a custom editor

我正在开发一个eclipse插件,它将其自己的编辑器带有大纲视图。
我已经用元素填充了大纲视图,现在我想向其中一些元素注册操作。 如果用户(右击)它们,则应显示一个行为类似于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类的代码:

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中的一个元素时调用一个动作。

您可以像这样为上下文菜单设置菜单侦听器:

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
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM