1 6 package com.nightlabs.rcp.composite.groupedcontent; 7 8 import java.util.ArrayList ; 9 import java.util.HashMap ; 10 import java.util.List ; 11 import java.util.Map ; 12 13 import org.eclipse.jface.viewers.ISelectionChangedListener; 14 import org.eclipse.jface.viewers.IStructuredSelection; 15 import org.eclipse.jface.viewers.SelectionChangedEvent; 16 import org.eclipse.swt.SWT; 17 import org.eclipse.swt.custom.StackLayout; 18 import org.eclipse.swt.layout.GridData; 19 import org.eclipse.swt.widgets.Composite; 20 21 import com.nightlabs.rcp.composite.OrdinaryWrapperComposite; 22 import com.nightlabs.rcp.composite.TightWrapperComposite; 23 24 28 public class GroupedContentComposite extends OrdinaryWrapperComposite { 29 30 private TightWrapperComposite tableWrapper; 31 private GroupedContentSwitcherTable switcherTable; 32 33 private Composite contentWrapper; 34 private StackLayout contentStackLayout; 35 36 private List groupedContentProvider = new ArrayList (); 37 private Map providerComposites = new HashMap (); 38 39 40 private ISelectionChangedListener switcherListener = new ISelectionChangedListener() { 41 public void selectionChanged(SelectionChangedEvent event) { 42 IStructuredSelection selection = (IStructuredSelection)switcherTable.getTableViewer().getSelection(); 43 if (selection.size() != 1) 44 return; 45 GroupedContentProvider contentProvider = (GroupedContentProvider)selection.getFirstElement(); 46 selectContentProvider(contentProvider); 47 } 48 }; 49 50 51 52 53 58 public GroupedContentComposite(Composite parent, int style, boolean setLayoutData) { 59 super(parent, style, setLayoutData); 60 getGridLayout().numColumns = 2; 61 62 tableWrapper = new TightWrapperComposite(this, SWT.NONE, false); 63 GridData tableGD = new GridData(GridData.FILL_BOTH); 64 tableGD.grabExcessHorizontalSpace = false; 65 tableGD.widthHint = 150; 66 tableWrapper.setLayoutData(tableGD); 67 68 switcherTable = new GroupedContentSwitcherTable(tableWrapper, SWT.NONE); 69 switcherTable.getTableViewer().addSelectionChangedListener(switcherListener); 70 71 contentWrapper = new Composite(this, SWT.NONE); 72 contentWrapper.setLayoutData(new GridData(GridData.FILL_BOTH)); 73 contentStackLayout = new StackLayout(); 74 contentWrapper.setLayout(contentStackLayout); 75 } 76 77 78 public void addGroupedContentProvider(GroupedContentProvider groupedContentProvider) { 79 this.groupedContentProvider.add(groupedContentProvider); 80 switcherTable.setInput(this.groupedContentProvider); 81 layout(true, true); 82 } 83 84 public void addGroupedContentProvider(GroupedContentProvider groupedContentProvider, int index) { 85 this.groupedContentProvider.add(index, groupedContentProvider); 86 switcherTable.setInput(this.groupedContentProvider); 87 if (switcherTable.getTable().getItemCount() == 1) { 88 switcherTable.getTable().select(0); 89 selectContentProvider(groupedContentProvider); 90 } 91 layout(true, true); 92 } 93 94 protected void selectContentProvider(GroupedContentProvider contentProvider) { 95 Composite providerComp = (Composite)providerComposites.get(contentProvider); 96 if (providerComp == null) { 97 providerComp = contentProvider.createGroupContent(contentWrapper); 98 providerComposites.put(contentProvider, providerComp); 99 } 100 contentStackLayout.topControl = providerComp; 101 contentWrapper.layout(); 102 } 103 104 public void setGroupTitle(String title) { 105 switcherTable.setGroupTitle(title); 106 } 107 } 108 | Popular Tags |