Project

General

Profile

Download (4.73 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2007 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.taxeditor.ui.group.grantedauthority;
10

    
11
import org.eclipse.jface.util.LocalSelectionTransfer;
12
import org.eclipse.nebula.widgets.compositetable.CompositeTable;
13
import org.eclipse.nebula.widgets.compositetable.IRowContentProvider;
14
import org.eclipse.swt.SWT;
15
import org.eclipse.swt.dnd.DND;
16
import org.eclipse.swt.dnd.DropTarget;
17
import org.eclipse.swt.dnd.Transfer;
18
import org.eclipse.swt.events.DisposeEvent;
19
import org.eclipse.swt.events.DisposeListener;
20
import org.eclipse.swt.events.SelectionAdapter;
21
import org.eclipse.swt.events.SelectionEvent;
22
import org.eclipse.swt.layout.GridData;
23
import org.eclipse.swt.layout.GridLayout;
24
import org.eclipse.swt.widgets.Button;
25
import org.eclipse.swt.widgets.Composite;
26
import org.eclipse.swt.widgets.Control;
27
import org.eclipse.swt.widgets.Display;
28
import org.eclipse.swt.widgets.Label;
29
import org.eclipse.ui.forms.widgets.FormToolkit;
30

    
31
import eu.etaxonomy.taxeditor.dnd.CdmAuthorityTableDropTargetListener;
32
import eu.etaxonomy.taxeditor.editor.definedterm.TermTransfer;
33

    
34
/**
35
 * Composite class which consists of a {@link CompositeTable} built specifically
36
 * for creating / editing CDM Authority objects
37
 *
38
 * @author cmathew
39
 * @created Mar 28, 2013
40
 *
41
 */
42

    
43
public class CdmAuthorityComposite extends Composite {
44

    
45
	private final FormToolkit toolkit = new FormToolkit(Display.getCurrent());
46
	private CompositeTable table;
47

    
48
	private int numOfInitialCdmAuthorities;
49

    
50
	private CdmAuthorityCompositeViewer viewer;
51

    
52
	private CdmAuthorityTableHeader cdmAuthorityTableHeader;
53

    
54

    
55
	/**
56
	 * Creates the composite using the given parent, style and associated viewer.
57
	 *
58
	 * @param parent composite to use as parent of this composite
59
	 * @param style
60
	 * @param viewer viewer representing the model
61
	 */
62
	public CdmAuthorityComposite(Composite parent, int style, final CdmAuthorityCompositeViewer viewer) {
63
		super(parent, SWT.NONE);
64
		addDisposeListener(new DisposeListener() {
65
			@Override
66
            public void widgetDisposed(DisposeEvent e) {
67
				toolkit.dispose();
68
			}
69
		});
70

    
71
		this.viewer = viewer;
72

    
73
		numOfInitialCdmAuthorities = viewer.getCdmAuthorities().size();
74
		setLayout(new GridLayout(2, false));
75
		setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
76
	    Transfer[] transfers = new Transfer[] { LocalSelectionTransfer.getTransfer(), TermTransfer.getInstance() };
77

    
78
	    toolkit.adapt(this);
79
		toolkit.paintBordersFor(this);
80
		new Label(this, SWT.NONE);
81

    
82
		final Button cbShowUUIDheader = new Button(this, SWT.CHECK);
83
		cbShowUUIDheader.addSelectionListener(new SelectionAdapter() {
84
			@Override
85
			public void widgetSelected(SelectionEvent e) {
86
				boolean showUUIDHeader = ((Button)e.getSource()).getSelection();
87
				((CdmAuthorityTableHeader)table.getHeader()).setUuidHeaderVisible(showUUIDHeader);
88
				refresh();
89
			}
90
		});
91
		toolkit.adapt(cbShowUUIDheader, true, true);
92
		cbShowUUIDheader.setText("show uuid");
93
		table = new CompositeTable(this, SWT.NONE);
94
		table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
95
		cdmAuthorityTableHeader = new CdmAuthorityTableHeader(table, SWT.NULL);
96
		CdmAuthorityRow cdmAuthorityRow = new CdmAuthorityRow(table, SWT.NULL);
97

    
98
		table.setRunTime(true);
99
		table.setNumRowsInCollection(numOfInitialCdmAuthorities);
100
		table.setLinesVisible(true);
101

    
102
		DropTarget dropTarget = new DropTarget(table, DND.DROP_MOVE);
103
		dropTarget.setTransfer(transfers);
104
		dropTarget.addDropListener(new CdmAuthorityTableDropTargetListener(viewer));
105

    
106

    
107
		table.addRowContentProvider(new IRowContentProvider() {
108
			@Override
109
            public void refresh(CompositeTable sender, int currentObjectOffset, Control rowControl) {
110
				CdmAuthorityRow row = (CdmAuthorityRow) rowControl;
111
				// add the newly created authority objects first and then the already existing ones.
112
				// this ensures the newly 'dragged' in objects always remain at the top
113
				if(currentObjectOffset < viewer.getNewCdmAuthorities().size()) {
114
					row.setRowCdmAuthority(viewer,
115
							viewer.getNewCdmAuthorities().get(currentObjectOffset),
116
							true,
117
							cbShowUUIDheader.getSelection());
118
				} else {
119
					row.setRowCdmAuthority(viewer,
120
							viewer.getCdmAuthorities().get(currentObjectOffset - viewer.getNewCdmAuthorities().size()),
121
							false,
122
							cbShowUUIDheader.getSelection());
123
				}
124
			}
125
		});
126
	}
127

    
128
	/**
129
	 * Refreshes the table with underlying data
130
	 */
131
	public void refresh() {
132
		numOfInitialCdmAuthorities = viewer.getNewCdmAuthorities().size() + viewer.getCdmAuthorities().size();
133
	    table.setNumRowsInCollection(numOfInitialCdmAuthorities);
134
	    table.refreshAllRows();
135
	}
136
}
(2-2/5)