在 Eclipse 状态栏中有没有办法包含一个新的状态字段(比如文件的行定界符)?
In Eclipse statusbar is there a way to include a new statusfield (say the file's line delimiters )?
我正在使用自定义文本编辑器编写一个 eclipse 插件。我使用的状态栏贡献者是默认的。显示的这些字段是
我相信他们是因为 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 类型添加一个新的状态字段
您应该定义自己的编辑器操作栏贡献者,它扩展 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);
我正在使用自定义文本编辑器编写一个 eclipse 插件。我使用的状态栏贡献者是默认的。显示的这些字段是
我相信他们是因为 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 类型添加一个新的状态字段
您应该定义自己的编辑器操作栏贡献者,它扩展 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);