1 21 22 package org.armedbear.j; 23 24 import java.awt.Dimension ; 25 import java.awt.Point ; 26 import java.awt.event.InputEvent ; 27 import java.awt.event.MouseEvent ; 28 import java.awt.event.MouseListener ; 29 import javax.swing.JScrollPane ; 30 import javax.swing.JTable ; 31 import javax.swing.ListSelectionModel ; 32 import javax.swing.table.JTableHeader ; 33 import javax.swing.table.TableColumn ; 34 import javax.swing.table.TableColumnModel ; 35 36 public final class RecentFilesDialog extends AbstractDialog implements MouseListener 37 { 38 private final JTable table; 39 private final RecentFilesTableModel model; 40 private final Editor editor; 41 42 public RecentFilesDialog(Editor editor) 43 { 44 super(editor, "Recent Files", true); 45 this.editor = editor; 46 model = new RecentFilesTableModel(); 47 table = new JTable (model); 48 table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 49 table.addRowSelectionInterval(0, 0); 50 int width = editor.getSize().width - 50; 51 int height = table.getPreferredScrollableViewportSize().height; 52 table.setPreferredScrollableViewportSize(new Dimension (width, height)); 53 JScrollPane scrollPane = new JScrollPane (table); 54 mainPanel.add(scrollPane); 55 addVerticalStrut(); 56 addOKCancel(); 57 table.addKeyListener(this); 58 table.addMouseListener(this); 59 JTableHeader th = table.getTableHeader(); 60 th.addMouseListener(this); 61 TableColumnModel columnModel = th.getColumnModel(); 62 int count = columnModel.getColumnCount(); 63 for (int i = 0; i < count; i++) { 64 String key = getColumnWidthKey(i); 65 int columnWidth = Editor.getSessionProperties().getIntegerProperty(key, 0); 66 if (columnWidth == 0) 67 break; 68 TableColumn column = columnModel.getColumn(i); 69 column.setPreferredWidth(columnWidth); 70 } 71 pack(); 72 table.requestFocus(); 73 } 74 75 protected void ok() 76 { 77 openSelectedFile(); 78 } 79 80 private void openSelectedFile() 81 { 82 int row = table.getSelectedRow(); 83 if (row >= 0) 84 openFileAtRow(row); 85 } 86 87 private void openFileAtPoint(Point point) 88 { 89 int row = table.rowAtPoint(point); 90 if (row >= 0) 91 openFileAtRow(row); 92 } 93 94 private void openFileAtRow(int row) 95 { 96 dispose(); 97 editor.repaintNow(); 98 RecentFilesEntry entry = model.getEntryAtRow(row); 99 File parent = File.getInstance(entry.location); 100 File file = File.getInstance(parent, entry.name); 101 Buffer buf = editor.getBuffer(file); 102 if (buf == null) 103 editor.status("File not found"); 104 else if (buf != editor.getBuffer()) { 105 editor.makeNext(buf); 106 editor.activate(buf); 107 if (buf instanceof RemoteBuffer) 108 ((RemoteBuffer) buf).setInitialDotPos(entry.lineNumber, entry.offs); 109 else { 110 Line line = buf.getLine(entry.lineNumber); 111 if (line != null) { 112 int offs = entry.offs; 113 if (offs > line.length()) 114 offs = line.length(); 115 editor.moveDotTo(line, offs); 116 } else 117 editor.moveDotTo(buf.getFirstLine(), 0); 118 editor.updateDisplay(); 119 } 120 } 121 } 122 123 public void dispose() 124 { 125 JTableHeader th = table.getTableHeader(); 126 TableColumnModel columnModel = th.getColumnModel(); 127 int count = columnModel.getColumnCount(); 128 for (int i = 0; i < count; i++) { 129 TableColumn column = columnModel.getColumn(i); 130 String key = getColumnWidthKey(i); 131 Editor.getSessionProperties().setIntegerProperty(key, column.getWidth()); 132 } 133 super.dispose(); 134 } 135 136 private String getColumnWidthKey(int i) 137 { 138 return "RecentFilesDialog.columnWidth." + i; 139 } 140 141 public void mouseClicked(MouseEvent e) 142 { 143 if (e.getClickCount() == 2) 144 openSelectedFile(); 145 else if (e.getModifiers() == InputEvent.BUTTON2_MASK) 146 openFileAtPoint(e.getPoint()); 147 else if (e.getComponent() == table.getTableHeader()) { 148 TableColumnModel columnModel = table.getColumnModel(); 149 int viewColumn = columnModel.getColumnIndexAtX(e.getX()); 150 int column = table.convertColumnIndexToModel(viewColumn); 151 if (e.getClickCount() == 1 && column >= 0) { 152 int row = table.getSelectedRow(); 153 RecentFilesEntry entry = null; 154 if (row >= 0) 155 entry = model.getEntryAtRow(row); 156 model.sortByColumn(column); 157 if (entry != null) { 158 row = model.getRowForEntry(entry); 159 if (row >= 0) 160 table.addRowSelectionInterval(row, row); 161 } 162 } 163 } 164 } 165 166 public void mousePressed(MouseEvent e) {} 167 public void mouseReleased(MouseEvent e) {} 168 public void mouseEntered(MouseEvent e) {} 169 public void mouseExited(MouseEvent e) {} 170 171 public static void recentFiles() 172 { 173 final Editor editor = Editor.currentEditor(); 174 RecentFilesDialog d = new RecentFilesDialog(editor); 175 editor.centerDialog(d); 176 d.show(); 177 } 178 } 179 | Popular Tags |