package jetbrains.mps.editor.contextActionsTool.pluginSolution.plugin; /*Generated by MPS */ import java.awt.Color; import java.util.Set; import jetbrains.mps.internal.collections.runtime.SetSequence; import java.util.HashSet; import javax.swing.JPanel; import org.jetbrains.annotations.Nullable; import javax.swing.JLabel; import java.awt.BorderLayout; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.GridLayout; import java.awt.Dimension; import java.awt.Container; import javax.swing.SwingUtilities; import javax.swing.BorderFactory; import javax.swing.JComponent; import javax.swing.border.Border; public class Folder { private static final Color TITLE_BACKGROUND_COLOR = new Color(200, 200, 200); private static final Color TITLE_BORDER_COLOR = new Color(170, 170, 170); private static Set<String> ourCollapsedStates = SetSequence.fromSet(new HashSet<String>()); private String myName; private JPanel myComponent; private JPanel myItemContainer; @Nullable private JLabel myTitleComponent; public Folder(String name, ViewType viewType) { this.myName = name; myComponent = new JPanel(new BorderLayout(0, 0)); if (name != null && name.length() > 0) { myTitleComponent = buildTitle(name); myTitleComponent.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent event) { setCollapsed(!(isCollapsed())); } }); myComponent.add(myTitleComponent, BorderLayout.NORTH); } myItemContainer = new JPanel(new GridLayout(0, 1, 0, 1)); if (viewType == ViewType.SYMBOLS) { myItemContainer.setLayout(new GridLayout(0, 4, 3, 1) { @Override public Dimension preferredLayoutSize(Container container) { updateColumnNumber(container); return super.preferredLayoutSize(container); } @Override public Dimension minimumLayoutSize(Container container) { updateColumnNumber(container); return super.minimumLayoutSize(container); } @Override public void layoutContainer(Container container) { updateColumnNumber(container); super.layoutContainer(container); } public void updateColumnNumber(Container container) { Container toolComponent = SwingUtilities.getAncestorOfClass(ToolComponent.class, myComponent); int maxWidth = toolComponent.getWidth(); setColumns(1); while (super.preferredLayoutSize(container).width <= maxWidth && getColumns() < 100) { setColumns(getColumns() + 1); } setColumns(Math.max(1, getColumns() - 1)); } }); } myItemContainer.setBorder(BorderFactory.createEmptyBorder(6, 3, 12, 3)); myComponent.add(myItemContainer, BorderLayout.WEST); myComponent.setOpaque(false); myItemContainer.setOpaque(false); setCollapsed(wasCollapsed()); } public void addItem(JComponent item) { myItemContainer.add(item); } public JComponent getComponent() { return myComponent; } public String getName() { return myName; } public boolean isCollapsed() { return !(myItemContainer.isVisible()); } public void setCollapsed(boolean collapsed) { myItemContainer.setVisible(!(collapsed)); check_hg2wcn_a1a02(myTitleComponent, collapsed); if (collapsed) { SetSequence.fromSet(Folder.ourCollapsedStates).addElement(getName()); } else { SetSequence.fromSet(Folder.ourCollapsedStates).removeElement(getName()); } } public boolean wasCollapsed() { return SetSequence.fromSet(Folder.ourCollapsedStates).contains(getName()); } public static JLabel buildTitle(String text) { JLabel label = new JLabel(text); Border border = BorderFactory.createMatteBorder(1, 0, 1, 0, TITLE_BORDER_COLOR); border = BorderFactory.createCompoundBorder(border, BorderFactory.createEmptyBorder(3, 6, 3, 6)); label.setBorder(border); label.setBackground(TITLE_BACKGROUND_COLOR); label.setOpaque(true); return label; } private static void check_hg2wcn_a1a02(JLabel checkedDotOperand, Boolean collapsed) { if (null != checkedDotOperand) { checkedDotOperand.setIcon(new ExpandCollapseIcon(collapsed)); } } }