[英]RCP 4 Toggle a button in the toolbar
我正在嘗試執行以下操作:
一個更具體的示例是文本編輯器程序。 假設工具欄上有一個“粗體”按鈕。 用戶按下“ Bold”按鈕,按鈕圖標現在看起來像已經被按下。此時,用戶在文本區域中鍵入的所有內容都將以粗體顯示。 然后,用戶再次按下“粗體”按鈕,該按鈕不再看起來像是在按下。此時,用戶在文本區域中鍵入的所有內容均使用常規字體。
我已經嘗試過搜索,但是找不到任何清楚地說明如何執行此操作的示例。 任何幫助,將不勝感激!
在Application.e4xmi的工具欄中添加“處理程序工具項”時,可以將“類型”指定為“檢查”,以獲取按下/未按下的行為。
在項目的處理程序中,您可以注入“ MToolItem”,以便可以測試選中狀態:
@Execute
public void execute(final MToolItem item)
{
if (item.isSelected())
... button pressed in
else
... button not pressed
}
我為文本編輯器實現了一個切換按鈕,而不是文本編輯器的“加粗按鈕”。 即一個切換按鈕,用於將不可打印的字符顯示為空格,制表符或返回。 以下內容可用於多頁文本編輯器。 切換按鈕僅在先前已選擇顯示不可打印字符的部件/編輯器上被激活。
在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);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.