1 21 22 package org.armedbear.j; 23 24 import java.awt.Color ; 25 import java.awt.Component ; 26 import javax.swing.JLabel ; 27 import javax.swing.JList ; 28 import javax.swing.ListCellRenderer ; 29 import javax.swing.UIManager ; 30 import javax.swing.border.Border ; 31 import javax.swing.border.CompoundBorder ; 32 import javax.swing.border.EmptyBorder ; 33 34 public abstract class SidebarList extends JList implements NavigationComponent 35 { 36 protected Sidebar sidebar; 37 38 public SidebarList(Sidebar sidebar) 39 { 40 this.sidebar = sidebar; 41 setCellRenderer(new SidebarListCellRenderer(sidebar)); 42 setToolTipText(""); 43 int h = Editor.preferences().getIntegerProperty(Property.JLIST_FIXED_CELL_HEIGHT); 44 if (h > 0) 45 setFixedCellHeight(h); 46 setFocusTraversalKeysEnabled(false); 47 } 48 49 public void refresh() 50 { 51 } 52 53 public void updatePosition() 54 { 55 } 56 57 protected void centerIndex(int index) 58 { 59 int first = getFirstVisibleIndex(); 60 int last = getLastVisibleIndex(); 61 if (first == -1 || last == -1) { 62 ensureIndexIsVisible(index); 63 return; 64 } 65 if (first == 0 && last == getModel().getSize()-1) 66 return; 67 if (index > first + 2 && index < last-2) 68 return; 69 int span = last - first; 70 first = index - span / 2; 71 if (first < 0) 72 first = 0; 73 ensureIndexIsVisible(first); 74 if (getFirstVisibleIndex() == first) 75 return; 76 last = first + span; 77 if (last > getModel().getSize()-1) 78 last = getModel().getSize()-1; 79 ensureIndexIsVisible(last); 80 } 81 82 private static final class SidebarListCellRenderer extends JLabel 83 implements ListCellRenderer 84 { 85 private Sidebar sidebar; 86 87 private static Border noFocusBorder; 88 89 private static Color noFocusSelectionBackground = new Color (208, 208, 208); 90 91 public SidebarListCellRenderer(Sidebar sidebar) 92 { 93 super(); 94 this.sidebar = sidebar; 95 noFocusBorder = new EmptyBorder (1, 1, 1, 1); 96 setOpaque(true); 97 } 98 99 public Component getListCellRendererComponent( 100 JList list, 101 Object value, 102 int index, 103 boolean isSelected, 104 boolean cellHasFocus) 105 { 106 Frame frame = sidebar.getFrame(); 107 if (isSelected) { 108 if (frame.isActive() && frame.getFocusedComponent() == list) 109 setBackground(list.getSelectionBackground()); 110 else 111 setBackground(noFocusSelectionBackground); 112 setForeground(list.getSelectionForeground()); 113 } else { 114 setBackground(list.getBackground()); 115 setForeground(list.getForeground()); 116 } 117 Border innerBorder = null; 118 if (value instanceof Buffer) { 119 setText(value.toString()); 120 Buffer buffer = (Buffer) value; 121 setIcon(buffer.getIcon()); 122 if (buffer.isSecondary()) 123 innerBorder = new EmptyBorder (0, 10, 0, 0); 124 } else if (value instanceof LocalTag) { 125 LocalTag tag = (LocalTag) value; 126 setText(tag.getSidebarText()); 127 setIcon(tag.getIcon()); 128 } 129 setEnabled(list.isEnabled()); 130 setFont(list.getFont()); 131 final Border outerBorder; 132 if (cellHasFocus) 133 outerBorder = UIManager.getBorder("List.focusCellHighlightBorder"); 134 else 135 outerBorder = noFocusBorder; 136 setBorder(new CompoundBorder (outerBorder, innerBorder)); 137 return this; 138 } 139 140 public void paintComponent(java.awt.Graphics g) 141 { 142 Display.setRenderingHints(g); 143 super.paintComponent(g); 144 } 145 } 146 } 147 | Popular Tags |