blob: 2468bde9cc512fd3791fba978a976b902a0a948d [file] [log] [blame]
/*
* Copyright 2000-2012 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.designer.palette;
import javax.swing.*;
import java.awt.*;
/**
* @author Alexander Lobas
*/
public class PaletteContainer extends JPanel implements Scrollable {
public PaletteContainer() {
super(new PaletteContainerLayout());
}
@Override
public Dimension getPreferredScrollableViewportSize() {
return getPreferredSize();
}
@Override
public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
return 20;
}
@Override
public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
return 100;
}
@Override
public boolean getScrollableTracksViewportWidth() {
return true;
}
@Override
public boolean getScrollableTracksViewportHeight() {
return false;
}
//////////////////////////////////////////////////////////////////////////////////////////
//
//
//
//////////////////////////////////////////////////////////////////////////////////////////
private static class PaletteContainerLayout implements LayoutManager {
@Override
public void layoutContainer(Container parent) {
int width = parent.getWidth();
int height = 0;
for (Component component : parent.getComponents()) {
if (component instanceof PaletteGroupComponent) {
PaletteGroupComponent groupComponent = (PaletteGroupComponent)component;
groupComponent.setLocation(0, height);
if (groupComponent.isVisible()) {
int groupHeight = groupComponent.getPreferredSize().height;
groupComponent.setSize(width, groupHeight);
height += groupHeight;
}
else {
groupComponent.setSize(0, 0);
}
if (groupComponent.isSelected() || !groupComponent.isVisible()) {
PaletteItemsComponent itemsComponent = groupComponent.getItemsComponent();
int itemsHeight = itemsComponent.getPreferredSize().height;
itemsComponent.setBounds(0, height, width, itemsHeight);
height += itemsHeight;
}
}
}
}
@Override
public Dimension preferredLayoutSize(Container parent) {
int width = parent.getWidth();
int height = 0;
for (Component component : parent.getComponents()) {
if (component instanceof PaletteGroupComponent) {
PaletteGroupComponent groupComponent = (PaletteGroupComponent)component;
height += groupComponent.getHeight();
if (groupComponent.isSelected()) {
height += groupComponent.getItemsComponent().getPreferredHeight(width);
}
}
}
return new Dimension(10, height);
}
@Override
public Dimension minimumLayoutSize(Container parent) {
return new Dimension();
}
@Override
public void addLayoutComponent(String name, Component comp) {
}
@Override
public void removeLayoutComponent(Component comp) {
}
}
}