Java RCP 4切换工具栏中的按钮
我正在努力做到以下几点:Java RCP 4切换工具栏中的按钮,java,rcp,e4,Java,Rcp,E4,我正在努力做到以下几点: 在工具栏中创建按钮(已作为“已处理的工具项”完成) 单击按钮,使按钮看起来像是按下了一样(我读了一些关于使用IAction.AS_复选框的内容,但我找不到任何关于如何执行此操作的清晰RCP 4示例)。当按下按钮时,可以执行某个动作(为了本例,我们称之为“动作a”) 再次单击按钮,使按钮看起来不再按下。当按钮不再按下时,可以执行不同的操作(“为了本例,我们称之为“操作B”) 一个更具体的例子是一个文本编辑器程序。假设工具栏上有一个“粗体”按钮。用户按下“粗体”按钮,按钮图
我已经尝试过四处搜索,但找不到任何能清楚显示如何操作的示例。如果有任何帮助,我将不胜感激!当您将“处理程序工具项”添加到应用程序的工具栏中。e4xmi您可以将“类型”指定为“检查”,以获得按下/未按下的行为 在项目的处理程序中,可以插入“MToolItem”,以便测试选中状态:
@Execute
公共作废执行(最终MToolItem)
{
if(item.isSelected())
…按下按钮
其他的
…按钮未按下
}
我实现了“空白字符画师”的切换按钮,而不是文本编辑器的“粗体按钮”。即,切换按钮将不可打印的字符显示为空格、制表符或返回。
以下内容可用于多页文本编辑器。切换按钮仅在先前选择用于显示不可打印字符的部件/编辑器处激活
在Application.e4xmi中工具栏的“Handler Tool Item”处,将按钮“Type”指定为“Check”,并给出任意ID=“zzzz.handledtoolitem.WhiteSpaceInter.button”
在处理程序类中,注入MtoolItem和EventBroker,以便broker将按钮的状态发送给应用程序的其余部分:
public class WhiteSpacePainterHandler {
boolean buttonStatus;
@Execute
public void execute(final MToolItem item, IEventBroker broker) {
if (item.isSelected()){
buttonStatus = true;
}
else{
buttonStatus = false;
}
broker.post("BUTTON_STATUS", buttonStatus);
}
}
在文本编辑器部分
public class SampleEditorPart {
private boolean buttonStatus = false;
public StyledText st = null;
public TextViewer tv = null;
@Inject MPart parte;
@Inject EModelService modelService;
@Inject MApplication app;
public WhitespaceCharacterPainter whitespaceCharacterPainter;
//More code here...
@PostConstruct
public void postConstruct(Composite parent){
//...
tv = new TextViewer(parent,SWT.MULTI | SWT.V_SCROLL );
st = tv.getTextWidget();
whitespaceCharacterPainter = new WhitespaceCharacterPainter(tv);
//...
}
@Inject
@Optional
public void updatePartByButton(@UIEventTopic("BUTTON_STATUS") boolean newButtonStatus) {
final MElementContainer<MUIElement>container = parte.getParent();
if (parte.equals((MPart)container.getSelectedElement())){
if(buttonStatus != newButtonStatus)
{
buttonStatus = newButtonStatus;
MToolItem item = (MToolItem) modelService.find("zzzz.handledtoolitem.boton",app);
item.setSelected(buttonStatus);
if(buttonStatus){
sv.addPainter(whitespaceCharacterPainter);
}
else{
sv.removePainter(whitespaceCharacterPainter);
}
}
}
@Inject
@Optional
public void updateButtonByPart(@Named(IServiceConstants.ACTIVE_PART) MPart activePart) {
if (parte.equals(activePart)) {
MToolItem item = (MToolItem) modelService.find("zzzz.handledtoolitem.boton",app);
item.setSelected(buttonStatus);
}
}
}
公共类SampleEditorPart{
私有布尔buttonStatus=false;
public StyledText st=null;
公共TextViewer tv=null;
@注射MPart-part;
@注入EModelService模型服务;
@注入MApplication应用程序;
公共空白字符画家空白字符画家;
//更多代码在这里。。。
@施工后
构造后的公共void(复合父级){
//...
tv=新文本查看器(父级,SWT.MULTI | SWT.V|u滚动);
st=tv.getTextWidget();
whitespaceCharacterPainter=新的whitespaceCharacterPainter(电视);
//...
}
@注入
@可选的
public void updatePartByButton(@UIEventTopic(“按钮状态”)布尔newButtonStatus){
final MElementContainercontainer=parte.getParent();
if(parte.equals((MPart)container.getSelectedElement()){
如果(按钮状态!=新按钮状态)
{
按钮状态=新按钮状态;
MToolItem=(MToolItem)modelService.find(“zzzz.handledtoolitem.boton”,app);
项。选择的设置(按钮状态);
如果(按钮状态){
sv.addPainter(空白字符画家);
}
否则{
sv.removePainter(空白字符画家);
}
}
}
@注入
@可选的
public void updateButtonByPart(@Named(IServiceConstants.ACTIVE_PART)MPart-activePart){
如果(部分等于(活动部分)){
MToolItem=(MToolItem)modelService.find(“zzzz.handledtoolitem.boton”,app);
项。选择的设置(按钮状态);
}
}
}