从代码更新Eclipse菜单无线电状态

时间:2015-05-23 03:41:44

标签: eclipse eclipse-plugin eclipse-rcp

在无线电状态菜单项的命令处理程序中,我提示用户是否要继续。如果他们选择否,我需要将所选菜单项重置为之前的值。

我正在使用HandlerUtil.updateRadioState(event.getCommand(), oldScope),但菜单会保留新值。

有什么建议吗?

命令处理程序

@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
    if (HandlerUtil.matchesRadioState(event))
        return null;

    String scope = event.getParameter(RadioState.PARAMETER_ID);

    if (MessageDialog.openConfirm(HandlerUtil.getActiveShell(event), "Confirm restart",
            "Switching source of Motors requires a restart.  Continue?")) {
        int connection = MotorDbPreferencesPage.DATABASE_ACCESS_LOCAL;
        if ("Cloud".compareToIgnoreCase(scope) == 0) {
            connection = MotorDbPreferencesPage.DATABASE_ACCESS_CLOUD;
        }
        Activator.getDefault().getPreferenceStore().setValue(MotorDbPreferencesPage.DATABASE_ACCESS, connection);
        PlatformUI.getWorkbench().restart();
    } else {
        String oldScope = "Local";
        // switch it back to the way it was before the user selected it
        if ("Local".compareToIgnoreCase(scope) == 0) {
            oldScope = "Cloud";
        }
        HandlerUtil.updateRadioState(event.getCommand(), oldScope);
    }

    return null;
}

plugin.xml中的命令定义

      <command
        id="com.client.eclipse.connection"
        name="Connection">
     <commandParameter
           id="org.eclipse.ui.commands.radioStateParameter"
           name="State"
           optional="false">
     </commandParameter>
     <state
           class="org.eclipse.ui.handlers.RadioState:Cloud"
           id="org.eclipse.ui.commands.radioState">
     </state>
  </command>

来自plugin.xml的菜单定义

            <menu
              label="Connection">
           <command
                 commandId="com.client.eclipse.connection"
                 label="Local"
                 style="radio">
              <parameter
                    name="org.eclipse.ui.commands.radioStateParameter"
                    value="Local">
              </parameter>
           </command>
           <command
                 commandId="com.client.eclipse.connection"
                 label="Cloud"
                 style="radio">
              <parameter
                    name="org.eclipse.ui.commands.radioStateParameter"
                    value="Cloud">
              </parameter>
           </command>
        </menu>

1 个答案:

答案 0 :(得分:0)

你有责任致电

HandlerUtil.updateRadioState(event.getCommand(), scope);

使GUI显示新状态。没有打电话,无线电状态就不会改变。

这意味着在用户正在中止的情况下,根本不要调用此方法。