簡體   English   中英

RCP 4切換工具欄中的按鈕

[英]RCP 4 Toggle a button in the toolbar

我正在嘗試執行以下操作:

  1. 在工具欄中創建一個按鈕(已作為“處理的工具項”完成)
  2. 單擊該按鈕,使該按鈕看起來像被按下一樣(我讀了一些有關使用IAction.AS_CHECK_BOX的內容,但是我找不到關於此操作的清晰的RCP 4示例)。 當按下按鈕時,可以執行某些動作(在本示例中,我們將其稱為“動作A”)
  3. 再次單擊按鈕,使按鈕看起來不再被按下。當不再按下按鈕時,可以執行其他操作(“在本示例中,我們將其稱為“操作B”)

一個更具體的示例是文本編輯器程序。 假設工具欄上有一個“粗體”按鈕。 用戶按下“ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM