Project

General

Profile

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

    
11
package eu.etaxonomy.taxeditor.editor.key.polytomous;
12

    
13
import java.util.List;
14

    
15
import org.eclipse.core.runtime.IProgressMonitor;
16
import org.eclipse.jface.viewers.StructuredSelection;
17
import org.eclipse.jface.viewers.TableViewer;
18
import org.eclipse.jface.viewers.TableViewerColumn;
19
import org.eclipse.swt.SWT;
20
import org.eclipse.swt.events.MouseAdapter;
21
import org.eclipse.swt.events.MouseEvent;
22
import org.eclipse.swt.graphics.Point;
23
import org.eclipse.swt.graphics.Rectangle;
24
import org.eclipse.swt.layout.FillLayout;
25
import org.eclipse.swt.widgets.Composite;
26
import org.eclipse.swt.widgets.Table;
27
import org.eclipse.swt.widgets.TableItem;
28
import org.eclipse.ui.IEditorInput;
29
import org.eclipse.ui.IEditorSite;
30
import org.eclipse.ui.PartInitException;
31
import org.eclipse.ui.part.EditorPart;
32

    
33
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
34
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
35
import eu.etaxonomy.cdm.model.description.PolytomousKey;
36
import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
37
import eu.etaxonomy.cdm.model.taxon.Taxon;
38
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
39
import eu.etaxonomy.taxeditor.editor.EditorUtil;
40
import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
41

    
42
/**
43
 * @author n.hoffmann
44
 * @created Mar 31, 2011
45
 * @version 1.0
46
 */
47
public class PolytomousKeyListEditor extends EditorPart implements
48
		IConversationEnabled, IDirtyMarkableSelectionProvider {
49

    
50
	private class LinkListener extends MouseAdapter {
51
		/*
52
		 * (non-Javadoc)
53
		 * 
54
		 * @see
55
		 * org.eclipse.swt.events.MouseAdapter#mouseUp(org.eclipse.swt.events
56
		 * .MouseEvent)
57
		 */
58
		@Override
59
		public void mouseUp(MouseEvent event) {
60

    
61
			Table table = (Table) event.widget;
62
			// Determine where the mouse was clicked
63
			Point pt = new Point(event.x, event.y);
64

    
65
			final TableItem item = table.getItem(pt);
66
			if (item != null) {
67
				// Determine which column was selected
68
				int column = -1;
69
				for (int i = 0, n = table.getColumnCount(); i < n; i++) {
70
					Rectangle rect = item.getBounds(i);
71
					if (rect.contains(pt)) {
72
						// This is the selected column
73
						column = i;
74
						break;
75
					}
76
				}
77
				if (column == 3) {
78
					PolytomousKeyNode node = (PolytomousKeyNode) item.getData();
79
					Object linkData = getItemLinkData(node);
80
					if (linkData instanceof PolytomousKeyNode) {
81
						viewer.setSelection(new StructuredSelection(linkData),
82
								true);
83
					} else if (linkData instanceof Taxon) {
84
						try {
85
							EditorUtil.openTaxonBase(((Taxon) linkData)
86
									.getUuid());
87
						} catch (PartInitException e) {
88
							EditorUtil.error(getClass(), e);
89
						}
90
					}
91
				}
92
			}
93
		}
94

    
95
		/**
96
		 * @return
97
		 */
98
		private Object getItemLinkData(PolytomousKeyNode node) {
99
			return node.getChildren().isEmpty() ? node.getTaxon() : node
100
					.getChildAt(0);
101
		}
102
	}
103

    
104
	public static final String ID = "eu.etaxonomy.taxeditor.editor.key.polytomous.list";
105

    
106
	private TableViewer viewer;
107

    
108
	/*
109
	 * (non-Javadoc)
110
	 * 
111
	 * @see
112
	 * eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update
113
	 * (eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
114
	 */
115
	@Override
116
	public void update(CdmDataChangeMap arg0) {
117

    
118
	}
119

    
120
	/*
121
	 * (non-Javadoc)
122
	 * 
123
	 * @see
124
	 * eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder
125
	 * ()
126
	 */
127
	@Override
128
	public ConversationHolder getConversationHolder() {
129
		return ((PolytomousKeyEditorInput) getEditorInput())
130
				.getConversationHolder();
131
	}
132

    
133
	/*
134
	 * (non-Javadoc)
135
	 * 
136
	 * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.
137
	 * IProgressMonitor)
138
	 */
139
	@Override
140
	public void doSave(IProgressMonitor monitor) {
141

    
142
	}
143

    
144
	/*
145
	 * (non-Javadoc)
146
	 * 
147
	 * @see org.eclipse.ui.part.EditorPart#doSaveAs()
148
	 */
149
	@Override
150
	public void doSaveAs() {
151
	}
152

    
153
	/*
154
	 * (non-Javadoc)
155
	 * 
156
	 * @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite,
157
	 * org.eclipse.ui.IEditorInput)
158
	 */
159
	@Override
160
	public void init(IEditorSite site, IEditorInput input)
161
			throws PartInitException {
162
		setSite(site);
163
		setInput(input);
164
	}
165

    
166
	/*
167
	 * (non-Javadoc)
168
	 * 
169
	 * @see org.eclipse.ui.part.EditorPart#isDirty()
170
	 */
171
	@Override
172
	public boolean isDirty() {
173
		// TODO Auto-generated method stub
174
		return false;
175
	}
176

    
177
	/*
178
	 * (non-Javadoc)
179
	 * 
180
	 * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
181
	 */
182
	@Override
183
	public boolean isSaveAsAllowed() {
184
		return false;
185
	}
186

    
187
	/*
188
	 * (non-Javadoc)
189
	 * 
190
	 * @see
191
	 * org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets
192
	 * .Composite)
193
	 */
194
	@Override
195
	public void createPartControl(Composite parent) {
196

    
197
		FillLayout fillLayout = new FillLayout();
198
		fillLayout.marginWidth = 0;
199
		fillLayout.marginHeight = 0;
200
		fillLayout.type = SWT.VERTICAL;
201
		parent.setLayout(fillLayout);
202

    
203
		viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
204
				| SWT.V_SCROLL | SWT.FULL_SELECTION);
205
		getSite().setSelectionProvider(viewer);
206

    
207
		createColumns(viewer);
208
		viewer.getControl().addMouseListener(new LinkListener());
209
		viewer.setContentProvider(new PolytomousKeyListContentProvider());
210
		viewer.setLabelProvider(new PolytomousKeyListLabelProvider());
211

    
212
		// viewer.getControl().setLayoutData(CdmFormFactory.FILL());
213

    
214
		PolytomousKey key = ((PolytomousKeyEditorInput) getEditorInput())
215
				.getKey();
216

    
217
		viewer.setInput(key);
218
	}
219

    
220
	// This will create the columns for the table
221
	private void createColumns(TableViewer viewer) {
222
		Table table = viewer.getTable();
223
		String[] titles = { "Node Number", "Question", "Statement", "Link" };
224
		int[] bounds = { 50, 200, 200, 100 };
225

    
226
		for (int i = 0; i < titles.length; i++) {
227
			TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
228
			column.getColumn().setText(titles[i]);
229
			column.getColumn().setWidth(bounds[i]);
230
			column.getColumn().setResizable(true);
231
			column.getColumn().setMoveable(true);
232
		}
233
		table.setHeaderVisible(true);
234
		table.setLinesVisible(false);
235

    
236
	}
237

    
238
	/*
239
	 * (non-Javadoc)
240
	 * 
241
	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
242
	 */
243
	@Override
244
	public void setFocus() {
245
		setPartName("Test");
246
	}
247

    
248
	/*
249
	 * (non-Javadoc)
250
	 * 
251
	 * @see
252
	 * eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#changed(
253
	 * java.lang.Object)
254
	 */
255
	@Override
256
	public void changed(Object element) {
257
		viewer.update(element, null);
258

    
259
		if (element instanceof PolytomousKeyNode) {
260
			List<PolytomousKeyNode> children = ((PolytomousKeyNode) element)
261
					.getParent().getChildren();
262
			for (PolytomousKeyNode child : children) {
263
				viewer.update(child, null);
264
			}
265
		}
266

    
267
	}
268

    
269
}
(6-6/8)