4 package eu
.etaxonomy
.taxeditor
.editor
.key
;
6 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
7 import org
.eclipse
.jface
.action
.GroupMarker
;
8 import org
.eclipse
.jface
.action
.IToolBarManager
;
9 import org
.eclipse
.jface
.action
.MenuManager
;
10 import org
.eclipse
.jface
.viewers
.IBaseLabelProvider
;
11 import org
.eclipse
.jface
.viewers
.IContentProvider
;
12 import org
.eclipse
.jface
.viewers
.StructuredSelection
;
13 import org
.eclipse
.swt
.SWT
;
14 import org
.eclipse
.swt
.events
.ControlEvent
;
15 import org
.eclipse
.swt
.events
.ControlListener
;
16 import org
.eclipse
.swt
.layout
.FillLayout
;
17 import org
.eclipse
.swt
.widgets
.Composite
;
18 import org
.eclipse
.swt
.widgets
.Control
;
19 import org
.eclipse
.swt
.widgets
.Display
;
20 import org
.eclipse
.swt
.widgets
.Menu
;
21 import org
.eclipse
.ui
.IEditorInput
;
22 import org
.eclipse
.ui
.IEditorSite
;
23 import org
.eclipse
.ui
.IWorkbenchActionConstants
;
24 import org
.eclipse
.ui
.PartInitException
;
25 import org
.eclipse
.ui
.part
.EditorPart
;
26 import org
.eclipse
.zest
.core
.viewers
.AbstractZoomableViewer
;
27 import org
.eclipse
.zest
.core
.viewers
.GraphViewer
;
28 import org
.eclipse
.zest
.core
.viewers
.IZoomableWorkbenchPart
;
29 import org
.eclipse
.zest
.core
.viewers
.ZoomContributionViewItem
;
30 import org
.eclipse
.zest
.core
.widgets
.ZestStyles
;
31 import org
.eclipse
.zest
.layouts
.LayoutAlgorithm
;
32 import org
.eclipse
.zest
.layouts
.LayoutStyles
;
33 import org
.eclipse
.zest
.layouts
.algorithms
.TreeLayoutAlgorithm
;
35 import eu
.etaxonomy
.cdm
.api
.conversation
.IConversationEnabled
;
36 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
37 import eu
.etaxonomy
.cdm
.model
.description
.IIdentificationKey
;
38 import eu
.etaxonomy
.cdm
.model
.description
.PolytomousKeyNode
;
39 import eu
.etaxonomy
.cdm
.persistence
.hibernate
.CdmDataChangeMap
;
40 import eu
.etaxonomy
.taxeditor
.model
.IDirtyMarkableSelectionProvider
;
41 import eu
.etaxonomy
.taxeditor
.operation
.IPostOperationEnabled
;
42 import eu
.etaxonomy
.taxeditor
.ui
.forms
.CdmFormFactory
;
48 public abstract class AbstractKeyEditor
<T
extends IIdentificationKey
> extends EditorPart
implements
50 IZoomableWorkbenchPart
,
51 IPostOperationEnabled
,
52 IDirtyMarkableSelectionProvider
{
54 private CdmFormFactory formFactory
;
55 private Composite container
;
56 private GraphViewer graphViewer
;
58 private LayoutAlgorithm layoutAlgoritm
;
59 private ZoomContributionViewItem zoomContributionViewItem
;
61 private boolean dirty
= false;
62 private IToolBarManager toolBarManager
;
65 public AbstractKeyEditor(){
66 formFactory
= new CdmFormFactory(Display
.getDefault());
70 * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
73 public void doSave(IProgressMonitor monitor
) {
74 getConversationHolder().commit(true);
80 * @see org.eclipse.ui.part.EditorPart#doSaveAs()
83 public void doSaveAs() {
88 * @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)
91 public void init(IEditorSite site
, IEditorInput input
)
92 throws PartInitException
{
98 * @see org.eclipse.ui.part.EditorPart#isDirty()
101 public boolean isDirty() {
106 * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
109 public boolean isSaveAsAllowed() {
114 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
117 public void createPartControl(Composite parent
) {
118 container
= formFactory
.createComposite(parent
);
120 container
.setLayout(new FillLayout());
121 graphViewer
= new GraphViewer(container
, SWT
.NONE
);
122 getSite().setSelectionProvider(graphViewer
);
124 graphViewer
.setContentProvider(getContentProvider());
125 graphViewer
.setLabelProvider(getLabelProvider());
127 graphViewer
.setConnectionStyle(ZestStyles
.CONNECTIONS_DIRECTED
);
129 graphViewer
.setLayoutAlgorithm(getLayoutAlgoritm(), false);
135 graphViewer
.setInput(getKey());
137 container
.addControlListener(new ControlListener() {
140 public void controlResized(ControlEvent e
) {
145 public void controlMoved(ControlEvent e
) {
146 // TODO Auto-generated method stub
152 private void createToolbar() {
153 getToolBarManager().add(getZoomContributionViewItem());
156 private void createMenu(){
157 // Add context menu to tree
158 MenuManager menuMgr
= new MenuManager();
159 menuMgr
.add(new GroupMarker(IWorkbenchActionConstants
.MB_ADDITIONS
));
161 // MenuManager zoomMenu = new MenuManager("Zoom");
162 // zoomMenu.add(getZoomContributionViewItem());
164 ZoomContributionViewItem zoomItem
= getZoomContributionViewItem();
165 menuMgr
.add(zoomItem
);
166 getSite().registerContextMenu(menuMgr
, graphViewer
);
168 Control control
= graphViewer
.getGraphControl();
169 Menu menu
= menuMgr
.createContextMenu(control
);
171 control
.setMenu(menu
);
175 protected abstract IBaseLabelProvider
getLabelProvider();
177 protected abstract IContentProvider
getContentProvider();
180 * Return the key that this editor
184 public abstract T
getKey();
187 public void setFocus() {
188 graphViewer
.getControl().setFocus();
191 public void refresh(){
192 graphViewer
.refresh();
193 graphViewer
.applyLayout();
197 public void update(CdmDataChangeMap changeEvents
) {
202 public AbstractZoomableViewer
getZoomableViewer() {
206 private LayoutAlgorithm
getLayoutAlgoritm() {
207 if (layoutAlgoritm
== null){
208 layoutAlgoritm
= new TreeLayoutAlgorithm(LayoutStyles
.NO_LAYOUT_NODE_RESIZING
);
209 layoutAlgoritm
.setEntityAspectRatio(2.5);
211 return layoutAlgoritm
;
214 private ZoomContributionViewItem
getZoomContributionViewItem() {
215 if(zoomContributionViewItem
== null){
216 zoomContributionViewItem
= new ZoomContributionViewItem(this);
218 return new ZoomContributionViewItem(this);
222 public boolean postOperation(CdmBase objectAffectedByOperation
) {
226 if(objectAffectedByOperation
instanceof PolytomousKeyNode
){
227 graphViewer
.setSelection(new StructuredSelection(objectAffectedByOperation
), true);
233 private IToolBarManager
getToolBarManager(){
234 if(toolBarManager
== null){
235 toolBarManager
= getEditorSite().getActionBars().getToolBarManager();
237 return toolBarManager
;
240 public void applyLayout(){
241 graphViewer
.applyLayout();
245 public boolean onComplete() {
249 public void setDirty(boolean dirty
) {
251 firePropertyChange(PROP_DIRTY
);
255 * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#changed(java.lang.Object)
258 public void changed(Object element
) {
260 graphViewer
.update(element
, null);