/** * Deselects <code>RadioOptionModel</code> items in a group when a selection is made within that * group. Operates by recursively searching <code>MenuModel</code>s for <code>RadioOptionModel * </code>s with a specific group id. * * @param menuModel the <code>MenuModel</code> to search * @param groupId the id of the group to deselect * @param newSelectionId the id of the new selection in the group */ private void deselectGroup(MenuModel menuModel, Object groupId, Object newSelectionId) { int count = menuModel.getItemCount(); for (int i = 0; i < count; ++i) { ItemModel itemModel = menuModel.getItem(i); if (itemModel instanceof MenuModel) { deselectGroup((MenuModel) itemModel, groupId, newSelectionId); } else if (itemModel instanceof RadioOptionModel) { RadioOptionModel radioOptionModel = (RadioOptionModel) itemModel; if (radioOptionModel.getGroupId() != null && radioOptionModel.getGroupId().equals(groupId)) { getStateModel().setSelected(radioOptionModel.getId(), false); } } } }
/** * Programmatically performs a menu action. * * @param optionModel the <code>OptionModel</code> whose action is to be invoked */ public void doAction(OptionModel optionModel) { if (getStateModel() != null && !getStateModel().isEnabled(optionModel.getId())) { // Do nothing, item is disabled. return; } if (getStateModel() != null && optionModel instanceof ToggleOptionModel) { if (optionModel instanceof RadioOptionModel) { RadioOptionModel radioOptionModel = (RadioOptionModel) optionModel; deselectGroup(getModel(), radioOptionModel.getGroupId(), radioOptionModel.getId()); getStateModel().setSelected(radioOptionModel.getId(), true); } else { ToggleOptionModel toggleOptionModel = (ToggleOptionModel) optionModel; getStateModel() .setSelected( toggleOptionModel.getId(), !getStateModel().isSelected(toggleOptionModel.getId())); } firePropertyChange(STATE_MODEL_CHANGED_PROPERTY, null, null); } fireActionPerformed(optionModel); }