merge-update from trunk
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / group / grantedauthority / CdmAuthorityComposite.java
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.nebula.widgets.compositetable.CompositeTable;
12 import org.eclipse.nebula.widgets.compositetable.IRowContentProvider;
13 import org.eclipse.swt.SWT;
14 import org.eclipse.swt.dnd.DND;
15 import org.eclipse.swt.dnd.DropTarget;
16 import org.eclipse.swt.dnd.Transfer;
17 import org.eclipse.swt.events.DisposeEvent;
18 import org.eclipse.swt.events.DisposeListener;
19 import org.eclipse.swt.layout.GridData;
20 import org.eclipse.swt.layout.GridLayout;
21 import org.eclipse.swt.widgets.Composite;
22 import org.eclipse.swt.widgets.Control;
23 import org.eclipse.swt.widgets.Display;
24 import org.eclipse.swt.widgets.Label;
25 import org.eclipse.ui.forms.widgets.FormToolkit;
26
27 import eu.etaxonomy.taxeditor.dnd.CdmAuthorityTableDropTargetListener;
28 import eu.etaxonomy.taxeditor.dnd.transfer.TaxonNodeTransfer;
29
30 /**
31 * Composite class which consists of a {@link CompositeTable} built specifically
32 * for creating / editing CDM Authority objects
33 *
34 * @author cmathew
35 * @created Mar 28, 2013
36 *
37 */
38
39 public class CdmAuthorityComposite extends Composite {
40
41 private final FormToolkit toolkit = new FormToolkit(Display.getCurrent());
42 private CompositeTable table;
43
44 private int numOfInitialCdmAuthorities;
45
46 private Label lblDragEntityInto;
47
48 private CdmAuthorityCompositeViewer viewer;
49
50
51 /**
52 * Creates the composite using the given parent, style and associated viewer.
53 *
54 * @param parent composite to use as parent of this composite
55 * @param style
56 * @param viewer viewer representing the model
57 */
58 public CdmAuthorityComposite(Composite parent, int style, final CdmAuthorityCompositeViewer viewer) {
59 super(parent, style);
60 addDisposeListener(new DisposeListener() {
61 public void widgetDisposed(DisposeEvent e) {
62 toolkit.dispose();
63 }
64 });
65
66 this.viewer = viewer;
67
68 numOfInitialCdmAuthorities = viewer.getCdmAuthorities().size();
69 setLayout(new GridLayout(1, false));
70 Transfer[] transfers = new Transfer[] { TaxonNodeTransfer.getInstance() };
71
72 toolkit.adapt(this);
73 toolkit.paintBordersFor(this);
74
75 lblDragEntityInto = new Label(this, SWT.NONE);
76 toolkit.adapt(lblDragEntityInto, true, true);
77 lblDragEntityInto.setText("Drag Entity into table to add ...");
78 table = new CompositeTable(this, SWT.BORDER);
79 GridData gd_table = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
80 gd_table.widthHint = 750;
81 gd_table.heightHint = 400;
82 table.setLayoutData(gd_table);
83 new CdmAuthorityTableHeader(table, SWT.NULL);
84 CdmAuthorityRow cdmAuthorityRow = new CdmAuthorityRow(table, SWT.NULL);
85
86 table.setRunTime(true);
87 table.setNumRowsInCollection(numOfInitialCdmAuthorities);
88 table.setLinesVisible(true);
89
90 DropTarget dropTarget = new DropTarget(table, DND.DROP_MOVE);
91 dropTarget.setTransfer(transfers);
92 dropTarget.addDropListener(new CdmAuthorityTableDropTargetListener(viewer));
93
94
95 table.addRowContentProvider(new IRowContentProvider() {
96 public void refresh(CompositeTable sender, int currentObjectOffset, Control rowControl) {
97 CdmAuthorityRow row = (CdmAuthorityRow) rowControl;
98 // add the newly created authority objects first and then the already existing ones.
99 // this ensures the newly 'dragged' in objects always remain at the top
100 if(currentObjectOffset < viewer.getNewCdmAuthorities().size()) {
101 row.setRowCdmAuthority(viewer,
102 viewer.getNewCdmAuthorities().get(currentObjectOffset),
103 true);
104 } else {
105 row.setRowCdmAuthority(viewer,
106 viewer.getCdmAuthorities().get(currentObjectOffset - viewer.getNewCdmAuthorities().size()),
107 false);
108 }
109 }
110 });
111 }
112
113 /**
114 * Refreshes the table with underlying data
115 */
116 public void refresh() {
117 numOfInitialCdmAuthorities = viewer.getNewCdmAuthorities().size() + viewer.getCdmAuthorities().size();
118 table.setNumRowsInCollection(numOfInitialCdmAuthorities);
119 table.refreshAllRows();
120 }
121 }