我正在尝试执行以下操作:
更具体的例子是文本编辑器程序。假设工具栏上有一个“粗体”按钮。用户按下“加粗”按钮,按钮图标现在看起来已被按下。此时,用户键入文本区域的所有内容都将以粗体显示。然后用户再次按下“加粗”按钮,按钮看起来不再像是按下了。此时,用户键入文本区域的所有内容都是常规字体。
我试过四处寻找,但找不到任何清楚显示如何操作的例子。任何帮助将不胜感激!
答案 0 :(得分:4)
当您将“处理程序工具项”添加到Application.e4xmi中的工具栏时,您可以将“类型”指定为“检查”以获得按下/未按下的行为。
在项目的处理程序中,您可以注入“MToolItem”,以便您可以测试已检查的状态:
@Execute
public void execute(final MToolItem item)
{
if (item.isSelected())
... button pressed in
else
... button not pressed
}
答案 1 :(得分:1)
而不是' Bold Button'对于文本编辑器,我实现了“白色空间角色画家”的切换按钮。即一个切换按钮,用于将不可打印的字符显示为空格,制表符或返回。 以下内容可用于多页文本编辑器。切换按钮仅在之前选择的部件/编辑器中激活,以显示不可打印的字符。
At'处理程序工具项目'到Application.e4xmi中的工具栏指定按钮' Type'作为'检查'并且,给任何ID =“zzzz.handledtoolitem.whitespacespainter.button” 在处理程序类中注入MtoolItem和EventBroker,因此代理将按钮的状态发送到应用程序的其余部分:
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);
}
}
}