而是一個文本編輯器「加粗按鈕」的,我實現了一個切換按鈕爲「空白字符畫家」。即一個切換按鈕,以將不可打印的字符顯示爲空格,製表符或返回。 以下內容可用於多頁文本編輯器。切換按鈕僅在先前選擇的部件/編輯器中激活,以顯示不可打印的字符。
在「處理程序工具項目」的工具欄在Application.e4xmi指定按鈕「類型」爲「查詢」,並給出任何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);
}
}
}
工作就像一個魅力,謝謝! – user2992188 2014-11-24 20:01:09