| 1 19 20 package edu.umd.cs.findbugs.gui2; 21 22 import java.awt.BorderLayout ; 23 import java.awt.event.ActionEvent ; 24 import java.awt.event.ActionListener ; 25 import java.util.ArrayList ; 26 27 import javax.swing.JButton ; 28 import javax.swing.JCheckBox ; 29 import javax.swing.JLabel ; 30 import javax.swing.JPanel ; 31 import javax.swing.JScrollPane ; 32 import javax.swing.event.ChangeEvent ; 33 import javax.swing.event.ChangeListener ; 34 import javax.swing.event.TableColumnModelEvent ; 35 import javax.swing.event.TableColumnModelListener ; 36 import javax.swing.table.JTableHeader ; 37 38 49 public class SorterDialog extends FBDialog { 50 51 private JLabel previewLabel=new JLabel ("Preview:"); 52 private JTableHeader preview; 53 private ArrayList <JCheckBox > checkBoxSortList = new ArrayList <JCheckBox >(); 54 private CheckBoxList chBList; 55 JButton sortApply; 56 private static SorterDialog instance; 57 58 public static SorterDialog getInstance() 59 { 60 if (instance==null) 61 instance=new SorterDialog(); 62 return instance; 63 } 64 65 @Override  66 public void setVisible(boolean visible) 67 { 68 super.setVisible(visible); 69 70 if (visible) 71 ((SorterTableColumnModel)(preview.getColumnModel())).createFrom(MainFrame.getInstance().getSorter()); 72 } 73 74 private SorterDialog() 75 { 76 setTitle("Sort By..."); 77 add(createSorterPane()); 78 pack(); 79 setLocationByPlatform(true); 80 setResizable(false); 81 preview.setColumnModel(new SorterTableColumnModel(MainFrame.getInstance().getSorter().getOrder())); 82 } 83 89 private JPanel createSorterPane() { 90 JPanel sorter = new JPanel (); 91 JPanel insidePanel = new JPanel (); 92 insidePanel.setLayout(new BorderLayout ()); 93 sorter.setLayout(new BorderLayout ()); 94 preview=new JTableHeader (); 95 preview.setColumnModel(new SorterTableColumnModel(Sortables.values())); 96 97 Sortables[] sortList = Sortables.values(); 98 99 for(Sortables s : Sortables.values()){ 100 if (s == Sortables.DIVIDER) 101 checkBoxSortList.add(new JCheckBox (edu.umd.cs.findbugs.L10N.getLocalString("sort.divider", "[divider]"))); 102 else 103 checkBoxSortList.add(new JCheckBox (s.toString())); 104 } 105 106 setSorterCheckBoxes(); 107 108 for(int i = 0; i < sortList.length; i++){ 109 checkBoxSortList.get(i).addChangeListener(new CheckBoxChangedListener(i)); 110 } 111 112 chBList = new CheckBoxList(checkBoxSortList.toArray( 113 new JCheckBox [checkBoxSortList.size()])); 114 115 insidePanel.add(chBList, BorderLayout.NORTH); 116 117 119 120 JPanel bottomPanel=new JPanel (); 121 bottomPanel.setLayout(new BorderLayout ()); 122 bottomPanel.add(preview, BorderLayout.CENTER); 124 125 insidePanel.add(bottomPanel,BorderLayout.SOUTH); 126 127 128 sortApply=new JButton (edu.umd.cs.findbugs.L10N.getLocalString("dlg.apply_btn", "Apply")); 129 sortApply.addActionListener(new ActionListener (){ 130 public void actionPerformed(ActionEvent e) 131 { 132 MainFrame.getInstance().getSorter().createFrom((SorterTableColumnModel)preview.getColumnModel()); 133 ((BugTreeModel)MainFrame.getInstance().getTree().getModel()).checkSorter(); 134 instance.setVisible(false); } 136 }); 137 bottomPanel.add(sortApply,BorderLayout.SOUTH); 138 sorter.add(new JScrollPane (insidePanel), BorderLayout.CENTER); 139 140 return sorter; 141 } 142 143 private class CheckBoxChangedListener implements ChangeListener { 144 145 int indexOfCheckBox; 146 147 public CheckBoxChangedListener(int index){ 148 indexOfCheckBox = index; 149 } 150 151 public void stateChanged(ChangeEvent e) { 152 ((SorterTableColumnModel)preview.getColumnModel()).setIndexChanged(indexOfCheckBox); 153 } 154 } 155 156 162 private void setSorterCheckBoxes() { 163 boolean[] chBoxSorterBooleans = MainFrame.getInstance().getSorter().getVisibleColumns(); 164 if(chBoxSorterBooleans.length != checkBoxSortList.size()) 165 return; 166 167 for(int i = 0; i < checkBoxSortList.size(); i++){ 168 checkBoxSortList.get(i).setSelected(chBoxSorterBooleans[i]); 169 } 170 } 171 172 void freeze() 173 { 174 sortApply.setEnabled(false); 175 } 176 177 void thaw() 178 { 179 sortApply.setEnabled(true); 180 } 181 } 182 | Popular Tags |