1 package org.columba.core.gui.search; 2 3 import java.awt.BorderLayout ; 4 import java.awt.Color ; 5 import java.awt.Component ; 6 import java.awt.Graphics ; 7 import java.awt.Insets ; 8 9 import javax.swing.Action ; 10 import javax.swing.BorderFactory ; 11 import javax.swing.JLabel ; 12 import javax.swing.JPanel ; 13 import javax.swing.UIManager ; 14 import javax.swing.border.Border ; 15 import javax.swing.border.CompoundBorder ; 16 17 import org.columba.core.gui.frame.api.IComponentBox; 18 import org.jdesktop.swingx.JXCollapsiblePane; 19 import org.jdesktop.swingx.JXHyperlink; 20 21 public class ComponentBoxContainer extends JPanel { 22 23 private final static Color borderColor2 = UIManager.getColor("controlShadow"); 24 private final static Color borderColor1 = UIManager.getColor("controlHighlight"); 25 26 private JXHyperlink link; 27 28 private JXCollapsiblePane collapsible; 29 30 private IComponentBox compBox; 31 32 public ComponentBoxContainer(IComponentBox compBox) { 33 this.compBox = compBox; 34 35 collapsible = new JXCollapsiblePane(); 36 collapsible.add(compBox.getView()); 37 collapsible.setCollapsed(true); 38 39 Action toggleAction = collapsible.getActionMap().get( 40 JXCollapsiblePane.TOGGLE_ACTION); 41 toggleAction.putValue(JXCollapsiblePane.COLLAPSE_ICON, UIManager 43 .getIcon("Tree.expandedIcon")); 44 toggleAction.putValue(JXCollapsiblePane.EXPAND_ICON, UIManager 45 .getIcon("Tree.collapsedIcon")); 46 link = new JXHyperlink(toggleAction); 47 48 link.setText(compBox.getName()); 49 link.setToolTipText(compBox.getDescription()); 50 51 link.setOpaque(true); 52 link.setFocusPainted(false); 53 54 link.setUnclickedColor(UIManager.getColor("Label.foreground")); 55 link.setClickedColor(UIManager.getColor("Label.foreground")); 56 57 Border border1 = new CompoundBorder (new SeparatorBorder(), 58 BorderFactory.createEmptyBorder(2, 4, 2, 4)); 59 60 63 JLabel iconLabel = new JLabel (); 64 iconLabel.setIcon(compBox.getIcon()); 65 iconLabel.setBorder(BorderFactory.createEmptyBorder(1, 2, 1, 6)); 67 68 JPanel top = new JPanel (); 69 top.setBorder(border1); 70 top.setLayout(new BorderLayout ()); 71 73 top.add(iconLabel, BorderLayout.WEST); 74 top.add(link, BorderLayout.CENTER); 75 76 setLayout(new BorderLayout ()); 77 78 add(top, BorderLayout.NORTH); 79 add(collapsible, BorderLayout.CENTER); 80 } 81 82 86 class SeparatorBorder implements Border { 87 88 boolean isFirst(Component c) { 89 return c.getParent() == null || c.getParent().getComponent(0) == c; 90 } 91 92 public Insets getBorderInsets(Component c) { 93 if (c instanceof JXCollapsiblePane) { 96 if (((JXCollapsiblePane) c).isCollapsed()) { 97 return new Insets (0, 0, 0, 0); 98 } 99 } 100 return new Insets (isFirst(c) ? 4 : 1, 0, 1, 0); 101 } 102 103 public boolean isBorderOpaque() { 104 return true; 105 } 106 107 public void paintBorder(Component c, Graphics g, int x, int y, 108 int width, int height) { 109 g.setColor(borderColor1); 110 if (isFirst(c)) { 111 g.drawLine(x, y + 2, x + width, y + 2); 112 } 113 } 116 } 117 } 118 | Popular Tags |