1 6 package com.nightlabs.rcp.composite.groupedcontent; 7 8 import java.util.Collection ; 9 10 import org.eclipse.jface.viewers.ISelectionChangedListener; 11 import org.eclipse.jface.viewers.SelectionChangedEvent; 12 import org.eclipse.jface.viewers.TableViewer; 13 import org.eclipse.swt.SWT; 14 import org.eclipse.swt.events.MouseEvent; 15 import org.eclipse.swt.events.MouseMoveListener; 16 import org.eclipse.swt.graphics.Color; 17 import org.eclipse.swt.graphics.Image; 18 import org.eclipse.swt.graphics.Point; 19 import org.eclipse.swt.widgets.Composite; 20 import org.eclipse.swt.widgets.Table; 21 import org.eclipse.swt.widgets.TableColumn; 22 import org.eclipse.swt.widgets.TableItem; 23 24 import com.nightlabs.rcp.table.AbstractTableComposite; 25 import com.nightlabs.rcp.table.TableContentProvider; 26 import com.nightlabs.rcp.table.TableLabelProvider; 27 28 32 public class GroupedContentSwitcherTable extends AbstractTableComposite { 33 34 private String groupTitle; 35 private TableColumn column; 36 37 private static final Color COLOR_HIGHLIGHT = new Color(null, 200, 200, 200); 39 private static final Color COLOR_SELECTED = new Color(null, 11, 5, 180); 40 private static final Color COLOR_BACKGROUND = new Color(null, 111, 111, 111); 41 42 private MouseMoveListener mouseMoveListener = new MouseMoveListener() { 43 public void mouseMove(MouseEvent event) { 44 TableItem item = getTableItem(event); 45 highLightItem(item); 46 } 47 protected TableItem getTableItem(MouseEvent event) 48 { 49 Point pt = new Point(event.x, event.y); 50 TableItem tableItem = getTable().getItem(pt); 51 return tableItem; 52 } 53 }; 54 55 private ISelectionChangedListener selectionListener = new ISelectionChangedListener() { 56 public void selectionChanged(SelectionChangedEvent event) { 57 int idx = getTable().getSelectionIndex(); 58 if (idx >= 0) 59 selectItem(getTable().getItem(idx)); 60 } 61 }; 62 63 private class ContentProvider extends TableContentProvider { 64 67 public Object [] getElements(Object inputElement) { 68 if (inputElement instanceof Collection ) 69 return ((Collection )inputElement).toArray(); 70 return super.getElements(inputElement); 71 } 72 } 73 74 private class LabelProvider extends TableLabelProvider { 75 public Image getColumnImage(Object element, int columnIndex) { 76 if (element instanceof GroupedContentProvider) 77 return ((GroupedContentProvider)element).getGroupIcon(); 78 return super.getColumnImage(element, columnIndex); 79 } 80 public String getColumnText(Object element, int columnIndex) { 81 if (element instanceof GroupedContentProvider) 82 return ((GroupedContentProvider)element).getGroupTitle(); 83 return super.getColumnText(element, columnIndex); 84 } 85 } 86 87 public GroupedContentSwitcherTable(Composite parent, int style) { 88 super(parent, style, true, SWT.BORDER | SWT.FULL_SELECTION | SWT.V_SCROLL); 89 getTable().setLinesVisible(false); 90 getTable().setHeaderVisible(false); 91 getTable().setBackground(COLOR_BACKGROUND); 92 getTable().addMouseMoveListener(mouseMoveListener); 93 getTableViewer().addSelectionChangedListener(selectionListener); 94 } 96 97 protected void createTableColumns(Table table) { 98 } 103 104 protected void setTableProvider(TableViewer tableViewer) { 105 tableViewer.setContentProvider(new ContentProvider()); 106 tableViewer.setLabelProvider(new LabelProvider()); 107 } 108 109 112 public String getGroupTitle() { 113 return groupTitle; 114 } 115 116 119 public void setGroupTitle(String groupTitle) { 120 this.groupTitle = groupTitle; 121 } 126 127 protected void selectItem(TableItem item) { 128 TableItem[] items = getTable().getItems(); 129 for (int i = 0; i < items.length; i++) { 130 items[i].setBackground(COLOR_BACKGROUND); 131 } 132 if (item != null) 133 item.setBackground(COLOR_SELECTED); 134 } 135 136 protected void highLightItem(TableItem item) { 137 TableItem[] items = getTable().getItems(); 138 for (int i = 0; i < items.length; i++) { 139 if (items[i].getBackground() != COLOR_SELECTED) 140 items[i].setBackground(COLOR_BACKGROUND); 141 } 142 if (item != null) 143 item.setBackground(COLOR_HIGHLIGHT); 144 } 145 } 146 | Popular Tags |