【问题标题】:In Eclipse statusbar is there a way to include a new statusfield (say the file's line delimiters )?在 Eclipse 状态栏中有没有办法包含一个新的状态字段(比如文件的行分隔符)?
【发布时间】:2016-05-28 18:02:52
【问题描述】:

我正在编写一个带有自定义文本编辑器的 Eclipse 插件。 iam 使用的状态栏 contibutor 是默认设置。显示的这些字段是

我相信他们是因为org.eclipse.ui.part.EditorActionBarContributor中的以下内容

/**
 * The status fields to be set to the editor
 * @since 3.0
 */
private final static StatusFieldDef[] STATUS_FIELD_DEFS= {
    new StatusFieldDef(ITextEditorActionConstants.STATUS_CATEGORY_FIND_FIELD, null, false, EditorMessages.Editor_FindIncremental_reverse_name.length() + 15),
    new StatusFieldDef(ITextEditorActionConstants.STATUS_CATEGORY_ELEMENT_STATE, null, true, StatusLineContributionItem.DEFAULT_WIDTH_IN_CHARS + 1),
    new StatusFieldDef(ITextEditorActionConstants.STATUS_CATEGORY_INPUT_MODE, ITextEditorActionDefinitionIds.TOGGLE_OVERWRITE, true, StatusLineContributionItem.DEFAULT_WIDTH_IN_CHARS),
    new StatusFieldDef(ITextEditorActionConstants.STATUS_CATEGORY_INPUT_POSITION, ITextEditorActionConstants.GOTO_LINE, true, StatusLineContributionItem.DEFAULT_WIDTH_IN_CHARS)
};

我的问题是如何为 linedelimiter 类型添加新的状态字段

【问题讨论】:

    标签: java eclipse plugins statusbar


    【解决方案1】:

    您应该定义自己的编辑器操作栏贡献者,该贡献者扩展 BasicTextEditorActionContributor 以获取标准状态字段。

    覆盖 contributeToStatusLine 并为您的额外项目添加新的状态行贡献项目:

    @Override
    public void contributeToStatusLine(IStatusLineManager statusLineManager) {
      super.contributeToStatusLine(statusLineManager);
    
      statusLineManager.add(item);
    }
    

    其中item 是一个StatusLineContributionItem,您应该在操作栏贡献者构造器中创建它:

    item = new StatusLineContributionItem("id", true, width in characters);
    

    setActiveEditor 方法中,您应该为项目设置操作并告诉编辑器状态字段:

    @Override
    public void setActiveEditor(IEditorPart part) {
    
      // TODO check this is your editor
    
      item.setActionHandler(... get action handler from editor...);
    
      ITextEditorExtension extension = (ITextEditorExtension)part;
      extension.setStatusField(item, "id");
    }
    

    在扩展 TextEditor 的主编辑器代码中,您可以调用

    IStatusField statusField = getStatusField("id");
    
    statusField.setText("text");
    statusField.setImage(image);
    

    【讨论】:

    • 成功了!!,非常感谢。但是,只有当我在文件被更改时调用方法来更新它时,该字段才会被更新。而不是在编辑获得焦点的时候......我正在尝试。但任何帮助表示赞赏。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 2023-02-14
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    相关资源
    最近更新 更多