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
.Menu
;
20 import org
.eclipse
.ui
.IEditorInput
;
21 import org
.eclipse
.ui
.IEditorSite
;
22 import org
.eclipse
.ui
.IWorkbenchActionConstants
;
23 import org
.eclipse
.ui
.PartInitException
;
24 import org
.eclipse
.ui
.part
.EditorPart
;
25 import org
.eclipse
.zest
.core
.viewers
.AbstractZoomableViewer
;
26 import org
.eclipse
.zest
.core
.viewers
.GraphViewer
;
27 import org
.eclipse
.zest
.core
.viewers
.IZoomableWorkbenchPart
;
28 import org
.eclipse
.zest
.core
.viewers
.ZoomContributionViewItem
;
29 import org
.eclipse
.zest
.core
.widgets
.ZestStyles
;
30 import org
.eclipse
.zest
.layouts
.LayoutAlgorithm
;
31 import org
.eclipse
.zest
.layouts
.LayoutStyles
;
32 import org
.eclipse
.zest
.layouts
.algorithms
.TreeLayoutAlgorithm
;
34 import eu
.etaxonomy
.cdm
.api
.conversation
.IConversationEnabled
;
35 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
36 import eu
.etaxonomy
.cdm
.model
.description
.IIdentificationKey
;
37 import eu
.etaxonomy
.cdm
.model
.description
.PolytomousKeyNode
;
38 import eu
.etaxonomy
.cdm
.persistence
.hibernate
.CdmDataChangeMap
;
39 import eu
.etaxonomy
.taxeditor
.model
.IDirtyMarkableSelectionProvider
;
40 import eu
.etaxonomy
.taxeditor
.operation
.IPostOperationEnabled
;
41 import eu
.etaxonomy
.taxeditor
.ui
.element
.CdmFormFactory
;
47 public abstract class AbstractGraphKeyEditor
<T
extends IIdentificationKey
>
48 extends EditorPart
implements IConversationEnabled
,
49 IZoomableWorkbenchPart
, IPostOperationEnabled
,
50 IDirtyMarkableSelectionProvider
{
52 private CdmFormFactory formFactory
;
53 private Composite container
;
54 protected GraphViewer viewer
;
56 private LayoutAlgorithm layoutAlgoritm
;
57 private ZoomContributionViewItem zoomContributionViewItem
;
59 private boolean dirty
= false;
60 private IToolBarManager toolBarManager
;
65 * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.
69 public void doSave(IProgressMonitor monitor
) {
70 getConversationHolder().commit(true);
78 * @see org.eclipse.ui.part.EditorPart#doSaveAs()
81 public void doSaveAs() {
88 * @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite,
89 * org.eclipse.ui.IEditorInput)
92 public void init(IEditorSite site
, IEditorInput input
)
93 throws PartInitException
{
96 formFactory
= new CdmFormFactory(site
.getShell().getDisplay());
102 * @see org.eclipse.ui.part.EditorPart#isDirty()
105 public boolean isDirty() {
112 * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
115 public boolean isSaveAsAllowed() {
123 * org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets
127 public void createPartControl(Composite parent
) {
128 container
= formFactory
.createComposite(parent
);
130 container
.setLayout(new FillLayout());
131 viewer
= new GraphViewer(container
, SWT
.NONE
);
132 getSite().setSelectionProvider(viewer
);
134 viewer
.setContentProvider(getContentProvider());
135 viewer
.setLabelProvider(getLabelProvider());
137 viewer
.setConnectionStyle(ZestStyles
.CONNECTIONS_DIRECTED
);
139 viewer
.setLayoutAlgorithm(getLayoutAlgoritm(), false);
145 viewer
.setInput(getKey());
147 container
.addControlListener(new ControlListener() {
150 public void controlResized(ControlEvent e
) {
155 public void controlMoved(ControlEvent e
) {
156 // TODO Auto-generated method stub
162 private void createToolbar() {
163 getToolBarManager().add(getZoomContributionViewItem());
166 private void createMenu() {
167 // Add context menu to tree
168 MenuManager menuMgr
= new MenuManager();
169 menuMgr
.add(new GroupMarker(IWorkbenchActionConstants
.MB_ADDITIONS
));
171 // MenuManager zoomMenu = new MenuManager("Zoom");
172 // zoomMenu.add(getZoomContributionViewItem());
174 ZoomContributionViewItem zoomItem
= getZoomContributionViewItem();
175 menuMgr
.add(zoomItem
);
176 getSite().registerContextMenu(menuMgr
, viewer
);
178 Control control
= viewer
.getGraphControl();
179 Menu menu
= menuMgr
.createContextMenu(control
);
181 control
.setMenu(menu
);
185 protected abstract IBaseLabelProvider
getLabelProvider();
187 protected abstract IContentProvider
getContentProvider();
190 * Return the key that this editor
194 public abstract T
getKey();
197 public void setFocus() {
198 viewer
.getControl().setFocus();
201 public void refresh() {
203 // graphViewer.applyLayout();
207 public void update(CdmDataChangeMap changeEvents
) {
212 public AbstractZoomableViewer
getZoomableViewer() {
216 private LayoutAlgorithm
getLayoutAlgoritm() {
217 if (layoutAlgoritm
== null) {
218 // layoutAlgoritm = new CompositeLayoutAlgorithm(
219 // LayoutStyles.NO_LAYOUT_NODE_RESIZING,
220 // new LayoutAlgorithm[] {
221 // new TreeLayoutAlgorithm(
222 // LayoutStyles.NO_LAYOUT_NODE_RESIZING),
223 // new HorizontalShift(
224 // LayoutStyles.NO_LAYOUT_NODE_RESIZING) });
226 layoutAlgoritm
= new TreeLayoutAlgorithm(
227 LayoutStyles
.NO_LAYOUT_NODE_RESIZING
);
228 layoutAlgoritm
.setEntityAspectRatio(0.5);
230 return layoutAlgoritm
;
233 private ZoomContributionViewItem
getZoomContributionViewItem() {
234 if (zoomContributionViewItem
== null) {
235 zoomContributionViewItem
= new ZoomContributionViewItem(this);
237 return new ZoomContributionViewItem(this);
241 public boolean postOperation(CdmBase objectAffectedByOperation
) {
245 if (objectAffectedByOperation
instanceof PolytomousKeyNode
) {
246 viewer
.setSelection(new StructuredSelection(
247 objectAffectedByOperation
), true);
253 private IToolBarManager
getToolBarManager() {
254 if (toolBarManager
== null) {
255 toolBarManager
= getEditorSite().getActionBars()
256 .getToolBarManager();
258 return toolBarManager
;
261 public void applyLayout() {
262 viewer
.applyLayout();
266 public boolean onComplete() {
270 public void setDirty(boolean dirty
) {
272 firePropertyChange(PROP_DIRTY
);
279 * eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#changed(
283 public void changed(Object element
) {
285 viewer
.update(element
, null);