OSDN Git Service

308955e417781d1894bdab1a9f6dd5139ee7923d
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / ui / swing / BirthmarkSelectionListPane.java
1 package jp.sourceforge.stigmata.ui.swing;
2
3 /*
4  * $Id$
5  */
6
7 import java.awt.BorderLayout;
8 import java.awt.Component;
9 import java.awt.event.ActionEvent;
10 import java.awt.event.ActionListener;
11 import java.awt.event.MouseAdapter;
12 import java.awt.event.MouseEvent;
13 import java.util.Iterator;
14
15 import javax.swing.Box;
16 import javax.swing.DefaultListModel;
17 import javax.swing.JButton;
18 import javax.swing.JCheckBox;
19 import javax.swing.JList;
20 import javax.swing.JScrollPane;
21 import javax.swing.ListCellRenderer;
22 import javax.swing.UIManager;
23 import javax.swing.border.Border;
24 import javax.swing.border.EmptyBorder;
25
26 import jp.sourceforge.stigmata.spi.BirthmarkSpi;
27
28 /**
29  *
30  * @author Haruaki TAMADA
31  */
32 public class BirthmarkSelectionListPane extends BirthmarkSelectablePane{
33     private static final long serialVersionUID = 3209854654743223453L;
34
35     private DefaultListModel model;
36     private JList list;
37
38     public BirthmarkSelectionListPane(StigmataFrame stigmata){
39         super(stigmata);
40
41         initLayouts();
42     }
43
44     @Override
45     public void serviceRemoved(BirthmarkSpi service){
46         BirthmarkSelection elem = getSelection(service.getType());
47         model.removeElement(elem);
48         
49         super.serviceRemoved(service);
50     }
51
52     private void initLayouts(){
53         setLayout(new BorderLayout());
54         list = new JList(model = new DefaultListModel());
55         JScrollPane scroll = new JScrollPane(list);
56         add(scroll, BorderLayout.CENTER);
57         list.setCellRenderer(new Renderer());
58         list.setVisibleRowCount(5);
59         JButton checkAll = GUIUtility.createButton(getMessages(), "checkall");
60         JButton uncheckAll = GUIUtility.createButton(getMessages(), "uncheckall");
61
62         Box box = Box.createHorizontalBox();
63         box.add(Box.createHorizontalGlue());
64         box.add(checkAll);
65         box.add(Box.createHorizontalGlue());        
66         box.add(uncheckAll);
67         box.add(Box.createHorizontalGlue());
68         add(box, BorderLayout.SOUTH);
69
70         ActionListener listener = new ActionListener(){
71             @Override
72             public void actionPerformed(ActionEvent e){
73                 boolean flag = e.getActionCommand().equals("checkall");
74                 for(Iterator<BirthmarkSelection> i = birthmarkSelections(); i.hasNext(); ){
75                     BirthmarkSelection le = i.next();
76                     le.setSelected(flag);
77                     fireEvent();
78                 }
79                 updateUI();
80             }
81         };
82         checkAll.addActionListener(listener);
83         uncheckAll.addActionListener(listener);
84         list.addMouseListener(new MouseAdapter(){
85             @Override
86             public void mouseClicked(MouseEvent e){
87                 int index = list.locationToIndex(e.getPoint());
88                 list.setSelectedIndex(index);
89                 BirthmarkSelection elem = (BirthmarkSelection)model.getElementAt(index);
90                 elem.setSelected(!elem.isSelected());
91                 updateUI();
92             }
93         });
94     }
95
96     /**
97      * update layouts and update selected birthmarks list.
98      */
99     @Override
100     protected void updateLayouts(){
101         model.removeAllElements();
102
103         for(Iterator<BirthmarkSelection> i = birthmarkSelections(); i.hasNext(); ){
104             BirthmarkSelection elem = i.next();
105             if(elem.isVisible(isExperimentalMode())){
106                 model.addElement(elem);
107             }
108
109             select(elem.getType(), elem.isVisible(isExperimentalMode()) && elem.isSelected());
110         }
111         updateUI();
112     }
113
114     public static class Renderer extends JCheckBox implements ListCellRenderer{
115         private static final long serialVersionUID = -324432943654654L;
116         private static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);
117
118         public Renderer(){
119             setOpaque(true);
120         }
121
122         @Override
123         public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean forcus){
124             BirthmarkSelection elem = (BirthmarkSelection)value;
125             setText(elem.getService().getDisplayType());
126             setToolTipText(elem.getService().getDescription());
127             setSelected(elem.isSelected());
128
129             if(isSelected){
130                 setBackground(list.getSelectionBackground());
131                 setForeground(list.getSelectionForeground());
132             }
133             else{
134                 setBackground(list.getBackground());
135                 setForeground(list.getForeground());
136             }
137
138             Border border = null;
139             if(forcus) {
140                 if (isSelected) {
141                     border = UIManager.getBorder("List.focusSelectedCellHighlightBorder");
142                 }
143                 if (border == null) {
144                     border = UIManager.getBorder("List.focusCellHighlightBorder");
145                 }
146             } else {
147                 border = noFocusBorder;
148             }
149             setBorder(border);
150
151             return this;
152         }
153     };
154 }