[英]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.