1 package org.columba.addressbook.gui.table; 19 20 import java.awt.event.MouseAdapter ; 21 import java.awt.event.MouseEvent ; 22 23 import javax.swing.JComponent ; 24 import javax.swing.JTable ; 25 import javax.swing.event.TreeSelectionEvent ; 26 import javax.swing.event.TreeSelectionListener ; 27 import javax.swing.table.JTableHeader ; 28 import javax.swing.table.TableColumnModel ; 29 30 import org.columba.addressbook.facade.IContactItem; 31 import org.columba.addressbook.folder.AbstractFolder; 32 import org.columba.addressbook.folder.AddressbookTreeNode; 33 import org.columba.addressbook.folder.FolderListener; 34 import org.columba.addressbook.folder.IContactStorage; 35 import org.columba.addressbook.folder.IFolderEvent; 36 import org.columba.addressbook.gui.focus.FocusManager; 37 import org.columba.addressbook.gui.focus.FocusOwner; 38 import org.columba.addressbook.gui.frame.AddressbookFrameMediator; 39 import org.columba.addressbook.gui.table.model.AddressbookTableModel; 40 import org.columba.addressbook.gui.table.model.FilterDecorator; 41 import org.columba.addressbook.gui.table.model.SortDecorator; 42 import org.columba.addressbook.model.IContactModelPartial; 43 import org.columba.core.gui.dialog.ErrorDialog; 44 import org.columba.core.logging.Logging; 45 46 49 public class TableController implements TreeSelectionListener , FolderListener, 50 FocusOwner { 51 52 private TableView view; 53 54 private AddressbookFrameMediator mediator; 55 56 private AddressbookTableModel addressbookModel; 57 58 private SortDecorator sortDecorator; 59 60 private FilterDecorator filterDecorator; 61 62 private AddressbookTreeNode selectedFolder; 63 64 67 public TableController(AddressbookFrameMediator mediator) { 68 super(); 69 70 this.mediator = mediator; 71 72 addressbookModel = new AddressbookTableModel(); 73 74 sortDecorator = new SortDecorator(addressbookModel); 75 76 filterDecorator = new FilterDecorator(sortDecorator); 77 78 view = new TableView(this, filterDecorator); 79 80 addMouseListenerToHeaderInTable(); 81 82 view.addMouseListener(new TableMouseListener(this)); 83 84 FocusManager.getInstance().registerComponent(this); 86 87 88 } 89 90 95 protected void addMouseListenerToHeaderInTable() { 96 final JTable tableView = getView(); 97 98 tableView.setColumnSelectionAllowed(false); 99 100 MouseAdapter listMouseListener = new MouseAdapter () { 101 public void mouseClicked(MouseEvent e) { 102 TableColumnModel columnModel = tableView.getColumnModel(); 103 int viewColumn = columnModel.getColumnIndexAtX(e.getX()); 104 int column = tableView.convertColumnIndexToModel(viewColumn); 105 106 if ((e.getClickCount() == 1) && (column != -1)) { 107 108 if (sortDecorator.getSelectedColumn() == column) 109 sortDecorator 110 .setSortOrder(!sortDecorator.isSortOrder()); 111 112 sortDecorator.sort(column); 113 114 } 115 } 116 }; 117 118 JTableHeader th = tableView.getTableHeader(); 119 th.addMouseListener(listMouseListener); 120 } 121 122 125 public AddressbookFrameMediator getMediator() { 126 return mediator; 127 } 128 129 132 public TableView getView() { 133 return view; 134 } 135 136 public void setSelectedFolder(IContactStorage store) { 137 filterDecorator.setContactItemMap(((AbstractFolder) store) 138 .getContactItemMap()); 139 } 140 141 144 public void valueChanged(TreeSelectionEvent e) { 145 AddressbookTreeNode node = (AddressbookTreeNode) e.getPath() 146 .getLastPathComponent(); 147 148 if (node == null) { 149 return; 150 } 151 152 if (node instanceof IContactStorage) { 153 try { 154 155 ((AbstractFolder) node).removeFolderListener(this); 156 157 selectedFolder = node; 158 ((AbstractFolder) node).addFolderListener(this); 159 160 filterDecorator 161 .setContactItemMap(((AbstractFolder) selectedFolder) 162 .getContactItemMap()); 163 } catch (Exception e1) { 164 if (Logging.DEBUG) 165 e1.printStackTrace(); 166 167 ErrorDialog.createDialog(e1.getMessage(), e1); 168 } 169 } else { 170 filterDecorator.setContactItemMap(null); 171 } 172 } 173 174 179 public String [] getUids() { 180 int[] rows = getView().getSelectedRows(); 181 String [] uids = new String [rows.length]; 182 183 IContactModelPartial item; 184 185 for (int i = 0; i < rows.length; i++) { 186 item = (IContactModelPartial) filterDecorator 187 .getContactItem(rows[i]); 188 uids[i] = item.getId(); 189 } 190 191 return uids; 192 } 193 194 197 public AddressbookTableModel getAddressbookModel() { 198 return addressbookModel; 199 } 200 201 public IContactItem getSelectedItem() { 202 int row = getView().getSelectedRow(); 203 if (row == -1) 204 return null; 205 206 IContactItem item = (IContactItem) sortDecorator.getContactItem(row); 208 209 return item; 210 } 211 212 213 214 217 public void itemAdded(IFolderEvent e) { 218 getAddressbookModel().update(); 219 220 } 221 222 225 public void itemChanged(IFolderEvent e) { 226 getAddressbookModel().update(); 227 228 } 229 230 233 public void itemRemoved(IFolderEvent e) { 234 getAddressbookModel().update(); 235 236 } 237 238 239 240 243 public void copy() { 244 245 } 246 247 250 public void cut() { 251 252 } 253 254 257 public void delete() { 258 259 } 260 261 264 public JComponent getComponent() { 265 return getView(); 266 } 267 268 271 public boolean isCopyActionEnabled() { 272 273 return false; 274 } 275 276 279 public boolean isCutActionEnabled() { 280 281 return false; 282 } 283 284 287 public boolean isDeleteActionEnabled() { 288 289 return false; 290 } 291 292 295 public boolean isPasteActionEnabled() { 296 297 return false; 298 } 299 300 303 public boolean isRedoActionEnabled() { 304 305 return false; 306 } 307 308 311 public boolean isSelectAllActionEnabled() { 312 if (getView().getRowCount() > 0) { 313 return true; 314 } 315 316 return false; 317 } 318 319 322 public boolean isUndoActionEnabled() { 323 324 return false; 325 } 326 327 330 public void paste() { 331 332 } 333 334 337 public void redo() { 338 339 } 340 341 344 public void selectAll() { 345 getView().selectAll(); 346 } 347 348 351 public void undo() { 352 353 } 354 355 358 public SortDecorator getSortDecorator() { 359 return sortDecorator; 360 } 361 362 365 public FilterDecorator getFilterDecorator() { 366 return filterDecorator; 367 } 368 369 370 } | Popular Tags |