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.support; 017 018 import java.awt.Component; 019 import java.util.ArrayList; 020 import java.util.List; 021 022 import javax.swing.AbstractButton; 023 import javax.swing.JPanel; 024 025 import org.springframework.richclient.command.CommandGroupFactoryBean; 026 027 import com.jgoodies.forms.builder.ButtonBarBuilder; 028 import com.jgoodies.forms.layout.ColumnSpec; 029 import com.jgoodies.forms.layout.RowSpec; 030 import com.jgoodies.forms.layout.Size; 031 032 public class ButtonBarGroupContainerPopulator extends SimpleGroupContainerPopulator { 033 private ColumnSpec columnSpec; 034 035 private ButtonBarBuilder builder; 036 037 private List buttons = new ArrayList(); 038 039 public ButtonBarGroupContainerPopulator() { 040 super(new JPanel()); 041 builder = new ButtonBarBuilder((JPanel)getContainer()); 042 } 043 044 public void setMinimumButtonSize(Size minimumSize) { 045 this.columnSpec = new ColumnSpec(minimumSize); 046 } 047 048 public void setColumnSpec(final ColumnSpec columnSpec) 049 { 050 this.columnSpec = columnSpec; 051 } 052 053 public void setRowSpec(final RowSpec rowSpec) 054 { 055 if (rowSpec != null) 056 builder.getLayout().setRowSpec(1, rowSpec); 057 } 058 059 public JPanel getButtonBar() { 060 return builder.getPanel(); 061 } 062 063 public void add(Component c) { 064 buttons.add(c); 065 } 066 067 public void addSeparator() { 068 buttons.add(CommandGroupFactoryBean.SEPARATOR_MEMBER_CODE); 069 } 070 071 public void onPopulated() { 072 builder.addGlue(); 073 int length = buttons.size(); 074 for (int i = 0; i < length; i++) { 075 Object o = buttons.get(i); 076 if (o instanceof String && o == CommandGroupFactoryBean.SEPARATOR_MEMBER_CODE) { 077 builder.addUnrelatedGap(); 078 } 079 else if (o instanceof AbstractButton) { 080 AbstractButton button = (AbstractButton)o; 081 if (this.columnSpec != null) { 082 addCustomGridded(button); 083 } 084 else { 085 builder.addGridded(button); 086 } 087 if (i < buttons.size() - 1) { 088 builder.addRelatedGap(); 089 } 090 } 091 } 092 } 093 094 private void addCustomGridded(AbstractButton button) { 095 builder.getLayout().appendColumn(this.columnSpec); 096 builder.getLayout().addGroupedColumn(builder.getColumn()); 097 button.putClientProperty("jgoodies.isNarrow", Boolean.TRUE); 098 builder.add(button); 099 builder.nextColumn(); 100 } 101 102 }