/* * Copyright 2000-2009 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.intellij.uiDesigner.radComponents; import com.intellij.uiDesigner.core.GridConstraints; import com.intellij.uiDesigner.core.GridLayoutManager; import com.intellij.uiDesigner.propertyInspector.Property; import com.intellij.uiDesigner.propertyInspector.properties.HSizePolicyProperty; import com.intellij.uiDesigner.propertyInspector.properties.VSizePolicyProperty; import com.intellij.util.containers.ContainerUtil; import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.List; /** * @author yole */ public class GridLayoutColumnProperties implements CustomPropertiesPanel { private JPanel myRootPanel; private JCheckBox myWantGrowCheckBox; private JLabel myTitleLabel; private RadContainer myContainer; private boolean myRow; private int mySelectedIndex; private final List<ChangeListener> myListeners = ContainerUtil.createLockFreeCopyOnWriteList(); public GridLayoutColumnProperties() { myWantGrowCheckBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { for(RadComponent c: myContainer.getComponents()) { if (c.getConstraints().getCell(myRow) == mySelectedIndex) { Property<RadComponent, Integer> property = myRow ? VSizePolicyProperty.getInstance(c.getProject()) : HSizePolicyProperty.getInstance(c.getProject()); if (myWantGrowCheckBox.isSelected()) { property.setValueEx(c, property.getValue(c).intValue() | GridConstraints.SIZEPOLICY_WANT_GROW); break; } else { if ((property.getValue(c).intValue() & GridConstraints.SIZEPOLICY_WANT_GROW) != 0) { property.setValueEx(c, property.getValue(c).intValue() & ~GridConstraints.SIZEPOLICY_WANT_GROW); break; } } } } for(ChangeListener listener: myListeners) { listener.stateChanged(new ChangeEvent(this)); } } }); } public JComponent getComponent() { return myRootPanel; } public void showProperties(RadContainer container, boolean isRow, int[] selectedIndices) { myContainer = container; myRow = isRow; if (selectedIndices.length != 1) { myTitleLabel.setText(selectedIndices.length + (isRow ? " rows selected" : " columns selected")); myWantGrowCheckBox.setEnabled(false); } else { mySelectedIndex = selectedIndices [0]; myTitleLabel.setText((isRow ? "Row " : "Column ") + selectedIndices [0]); myWantGrowCheckBox.setEnabled(true); GridLayoutManager layout = (GridLayoutManager) container.getLayout(); int sizePolicy = layout.getCellSizePolicy(isRow, selectedIndices [0]); myWantGrowCheckBox.setSelected((sizePolicy & GridConstraints.SIZEPOLICY_WANT_GROW) != 0); } } public void addChangeListener(ChangeListener listener) { myListeners.add(listener); } public void removeChangeListener(ChangeListener listener) { myListeners.remove(listener); } }