001 /* 002 * Copyright 2002-2004 the original author or authors. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 005 * use this file except in compliance with the License. You may obtain a copy of 006 * the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 013 * License for the specific language governing permissions and limitations under 014 * the License. 015 */ 016 package org.springframework.richclient.command; 017 018 import java.util.ArrayList; 019 import java.util.Iterator; 020 import java.util.List; 021 022 public class ExclusiveCommandGroupSelectionController { 023 private List commands = new ArrayList(); 024 025 private boolean allowsEmptySelection; 026 027 public boolean getAllowsEmptySelection() { 028 return allowsEmptySelection; 029 } 030 031 public void setAllowsEmptySelection(boolean allowsEmptySelection) { 032 this.allowsEmptySelection = allowsEmptySelection; 033 } 034 035 public void add(ToggleCommand command) { 036 if (!commands.contains(command)) { 037 commands.add(command); 038 command.setExclusiveController(this); 039 } 040 } 041 042 public void remove(ToggleCommand command) { 043 if (commands.remove(command)) { 044 command.setExclusiveController(null); 045 } 046 } 047 048 public void handleSelectionRequest(ToggleCommand delegatingCommand, boolean requestingSelection) { 049 if (requestingSelection) { 050 ToggleCommand currentSelectedCommand = null; 051 for (Iterator iterator = commands.iterator(); iterator.hasNext();) { 052 ToggleCommand command = (ToggleCommand)iterator.next(); 053 if (command.isSelected()) { 054 currentSelectedCommand = command; 055 break; 056 } 057 } 058 if (currentSelectedCommand == null) { 059 delegatingCommand.requestSetSelection(true); 060 } 061 else { 062 currentSelectedCommand.requestSetSelection(false); 063 delegatingCommand.requestSetSelection(!currentSelectedCommand.isSelected()); 064 if (!delegatingCommand.isSelected() && currentSelectedCommand != null) { 065 currentSelectedCommand.requestSetSelection(true); 066 } 067 } 068 } 069 else { 070 // its a deselection 071 if (allowsEmptySelection) { 072 delegatingCommand.requestSetSelection(false); 073 } 074 } 075 } 076 077 }