4 package eu
.etaxonomy
.taxeditor
.editor
.descriptiontree
;
6 import org
.apache
.log4j
.Logger
;
7 import org
.eclipse
.jface
.action
.Action
;
8 import org
.eclipse
.jface
.action
.MenuManager
;
9 import org
.eclipse
.jface
.action
.ToolBarManager
;
10 import org
.eclipse
.jface
.viewers
.ISelection
;
11 import org
.eclipse
.jface
.viewers
.ISelectionChangedListener
;
12 import org
.eclipse
.jface
.viewers
.SelectionChangedEvent
;
13 import org
.eclipse
.jface
.viewers
.TreePath
;
14 import org
.eclipse
.jface
.viewers
.TreeSelection
;
15 import org
.eclipse
.jface
.viewers
.TreeViewer
;
16 import org
.eclipse
.jface
.viewers
.Viewer
;
17 import org
.eclipse
.jface
.viewers
.ViewerComparator
;
18 import org
.eclipse
.swt
.SWT
;
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
.Menu
;
24 import org
.eclipse
.swt
.widgets
.Tree
;
25 import org
.eclipse
.ui
.IEditorPart
;
26 import org
.eclipse
.ui
.PlatformUI
;
27 import org
.eclipse
.ui
.forms
.DetailsPart
;
28 import org
.eclipse
.ui
.forms
.IDetailsPage
;
29 import org
.eclipse
.ui
.forms
.IDetailsPageProvider
;
30 import org
.eclipse
.ui
.forms
.IManagedForm
;
31 import org
.eclipse
.ui
.forms
.MasterDetailsBlock
;
32 import org
.eclipse
.ui
.forms
.SectionPart
;
33 import org
.eclipse
.ui
.forms
.editor
.FormPage
;
34 import org
.eclipse
.ui
.forms
.widgets
.FormToolkit
;
35 import org
.eclipse
.ui
.forms
.widgets
.Section
;
37 import eu
.etaxonomy
.cdm
.model
.description
.CommonTaxonName
;
38 import eu
.etaxonomy
.cdm
.model
.description
.DescriptionElementBase
;
39 import eu
.etaxonomy
.cdm
.model
.description
.Distribution
;
40 import eu
.etaxonomy
.cdm
.model
.description
.Feature
;
41 import eu
.etaxonomy
.cdm
.model
.description
.TaxonDescription
;
42 import eu
.etaxonomy
.cdm
.model
.description
.TaxonInteraction
;
43 import eu
.etaxonomy
.cdm
.model
.description
.TextData
;
44 import eu
.etaxonomy
.cdm
.model
.media
.ImageFile
;
45 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
46 import eu
.etaxonomy
.taxeditor
.editor
.TaxonEditorInput
;
47 import eu
.etaxonomy
.taxeditor
.editor
.descriptiontree
.detailpage
.CommonNameDetailsPage
;
48 import eu
.etaxonomy
.taxeditor
.editor
.descriptiontree
.detailpage
.DistributionDetailsPage
;
49 import eu
.etaxonomy
.taxeditor
.editor
.descriptiontree
.detailpage
.DistributionMapDetailsPage
;
50 import eu
.etaxonomy
.taxeditor
.editor
.descriptiontree
.detailpage
.ImageDetailsPage
;
51 import eu
.etaxonomy
.taxeditor
.editor
.descriptiontree
.detailpage
.LabelDetailsPage
;
52 import eu
.etaxonomy
.taxeditor
.editor
.descriptiontree
.detailpage
.TaxonInteractionDetailsPage
;
53 import eu
.etaxonomy
.taxeditor
.editor
.descriptiontree
.detailpage
.TextDataDetailsPage
;
54 import eu
.etaxonomy
.taxeditor
.model
.ImagesHelper
;
60 public class DescriptionMasterDetailsBlock
extends MasterDetailsBlock
{
61 private static final Logger logger
= Logger
62 .getLogger(DescriptionMasterDetailsBlock
.class);
64 private FormPage page
;
66 private TreeViewer descriptionViewer
;
68 private IDescriptiveInformationProvider descriptiveInformationProvider
= new DescriptiveInformationProvider();
70 public DescriptionMasterDetailsBlock(FormPage page
) {
75 * @see org.eclipse.ui.forms.MasterDetailsBlock#createMasterPart(org.eclipse.ui.forms.IManagedForm, org.eclipse.swt.widgets.Composite)
77 protected void createMasterPart(final IManagedForm managedForm
,
79 FormToolkit toolkit
= managedForm
.getToolkit();
80 Section section
= toolkit
.createSection(parent
, Section
.TITLE_BAR
);
82 section
.setText("Description Tree");
83 section
.marginWidth
= 10;
84 section
.marginHeight
= 5;
85 Composite client
= toolkit
.createComposite(section
, SWT
.WRAP
);
86 GridLayout layout
= new GridLayout();
87 layout
.marginWidth
= 2;
88 layout
.marginHeight
= 2;
89 client
.setLayout(layout
);
92 section
.setTextClient(createMasterSectionToolbar(section
));
94 Tree tree
= toolkit
.createTree(client
, SWT
.NULL
);
95 GridData gd
= new GridData(GridData
.FILL_BOTH
);
98 tree
.setLayoutData(gd
);
99 toolkit
.paintBordersFor(client
);
100 section
.setClient(client
);
101 final SectionPart spart
= new SectionPart(section
);
102 managedForm
.addPart(spart
);
104 descriptionViewer
= new TreeViewer(tree
);
105 descriptionViewer
.addSelectionChangedListener(new ISelectionChangedListener() {
106 private ISelection lastSelection
;
108 public void selectionChanged(SelectionChangedEvent event
) {
109 if (lastSelection
!= null) {
110 // Update label of last selection
112 TreePath
[] paths
= ((TreeSelection
) lastSelection
).getPaths();
113 if (paths
.length
> 0) {
114 item
= ((TreeSelection
) lastSelection
).getPaths()[0].getLastSegment();
115 descriptionViewer
.update(item
, null);
118 managedForm
.fireSelectionChanged(spart
, event
.getSelection());
119 lastSelection
= event
.getSelection();
123 descriptionViewer
.setAutoExpandLevel(2); // Show descriptions and features
124 descriptionViewer
.setContentProvider(new DescriptionContentProvider(descriptiveInformationProvider
));
125 descriptionViewer
.setLabelProvider(new DescriptionLabelProvider());
126 descriptionViewer
.setInput(page
.getEditor().getEditorInput());
127 descriptionViewer
.setComparator(new ViewerComparator() {
129 * @see org.eclipse.jface.viewers.ViewerComparator#compare(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
132 public int compare(Viewer viewer
, Object e1
, Object e2
) {
133 if (e1
instanceof ImageFile
&& e2
instanceof ImageFile
) {
136 return super.compare(viewer
, e1
, e2
);
140 // Set tree as page's selection provider
141 page
.getSite().setSelectionProvider(descriptionViewer
);
143 // Add context menu to tree
144 MenuManager menuMgr
= new MenuManager();
145 page
.getSite().registerContextMenu(page
.getId(), menuMgr
, descriptionViewer
);
146 Menu menu
= menuMgr
.createContextMenu(descriptionViewer
.getControl());
147 descriptionViewer
.getControl().setMenu(menu
);
153 private Control
createMasterSectionToolbar(Section section
) {
154 ToolBarManager toolBarManager
= new ToolBarManager(SWT
.FLAT
);
155 // IMenuService menuService = (IMenuService) EditorUtil.getService(IMenuService.class);
156 // menuService.populateContributionManager(toolBarManager, "toolbar:de.md.contributions.sectionToolbar");
158 Action displayAllDescriptions
= new Action("displayAll", Action
.AS_PUSH_BUTTON
){
160 * @see org.eclipse.jface.action.Action#run()
164 descriptionViewer
.expandAll();
167 displayAllDescriptions
.setToolTipText("Show all descriptive data");
168 toolBarManager
.add(displayAllDescriptions
);
170 Action collapseAllDescriptions
= new Action("collapseAll", Action
.AS_PUSH_BUTTON
){
172 * @see org.eclipse.jface.action.Action#run()
176 descriptionViewer
.collapseAll();
179 collapseAllDescriptions
.setToolTipText("Collapse all");
180 toolBarManager
.add(collapseAllDescriptions
);
182 return toolBarManager
.createControl(section
);
187 * @see org.eclipse.ui.forms.MasterDetailsBlock#registerPages(org.eclipse.ui.forms.DetailsPart)
189 protected void registerPages(DetailsPart detailsPart
) {
190 detailsPart
.registerPage(ImageFile
.class, new ImageDetailsPage());
191 detailsPart
.setPageProvider(new PageProvider());
195 * @param objectAffectedByOperation
197 public synchronized void refreshTree(Object revealObject
) {
198 descriptionViewer
.refresh(true);
200 Object
[] segments
= null;
201 if (revealObject
instanceof DescriptionElementBase
) {
202 DescriptionElementBase element
= (DescriptionElementBase
) revealObject
;
203 TaxonDescriptionFeature tdf
= descriptiveInformationProvider
.getDescriptionFeature(element
);
205 segments
= new Object
[3];
206 segments
[0] = element
.getInDescription();
208 segments
[2] = element
;
210 if (revealObject
instanceof ImageFile
) {
211 ImageFile image
= (ImageFile
) revealObject
;
212 DescriptionElementBase element
= ImagesHelper
.findImageElement(image
, getTaxon());
214 segments
= new Object
[3];
215 segments
[0] = element
.getInDescription();
216 segments
[1] = element
;
219 if (revealObject
instanceof TaxonDescription
) {
220 TaxonDescription description
= (TaxonDescription
) revealObject
;
221 segments
= new Object
[] {(TaxonDescription
) revealObject
};
223 if (segments
!= null) {
224 TreePath treePath
= new TreePath(segments
);
225 descriptionViewer
.setSelection(new TreeSelection(treePath
), true);
232 private Taxon
getTaxon() {
233 IEditorPart editor
= PlatformUI
.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
234 if (editor
!= null && editor
.getEditorInput() instanceof TaxonEditorInput
) {
235 return ((TaxonEditorInput
) editor
.getEditorInput()).getTaxon();
241 * @author p.ciardelli
243 class PageProvider
implements IDetailsPageProvider
{
245 private final static String IMAGE_GALLERY_ELEMENT
= "isImageGalleryElement";
246 private final static String IMAGE_GALLERY_DESCRIPTION
= "isImageGalleryDescription";
249 * @see org.eclipse.ui.forms.IDetailsPageProvider#getPage(java.lang.Object)
251 public IDetailsPage
getPage(Object key
) {
254 if (IMAGE_GALLERY_DESCRIPTION
.equals(key
)) {
255 return new LabelDetailsPage("Image Gallery Details", "Edit image gallery's label:");
257 if (TaxonDescription
.class.equals(key
)) {
258 return new LabelDetailsPage("Description Details", "Edit description's label:");
262 if (Feature
.DISTRIBUTION().equals(key
)) {
263 return new DistributionMapDetailsPage();
266 // Description elements
267 if (IMAGE_GALLERY_ELEMENT
.equals(key
)) {
268 return new LabelDetailsPage("Image List Details", "Edit ordered image list's label:");
270 if (CommonTaxonName
.class.equals(key
)) {
271 return new CommonNameDetailsPage();
273 if (Distribution
.class.equals(key
)) {
274 return new DistributionDetailsPage();
276 if(TaxonInteraction
.class.equals(key
)){
277 return new TaxonInteractionDetailsPage();
279 if (TextData
.class.equals(key
)) {
280 return new TextDataDetailsPage();
286 * @see org.eclipse.ui.forms.IDetailsPageProvider#getPageKey(java.lang.Object)
288 public Object
getPageKey(Object object
) {
291 if (object
instanceof TaxonDescription
) {
292 if (((TaxonDescription
) object
).isImageGallery()) {
293 return IMAGE_GALLERY_DESCRIPTION
;
298 if (object
instanceof TaxonDescriptionFeature
) {
299 return ((TaxonDescriptionFeature
) object
).getFeature();
302 // Description elements
303 if (object
instanceof DescriptionElementBase
) {
304 TaxonDescription description
= (TaxonDescription
) ((DescriptionElementBase
) object
).getInDescription();
305 if (description
!= null && description
.isImageGallery()) {
306 return IMAGE_GALLERY_ELEMENT
;
309 return object
.getClass();
314 * @see org.eclipse.ui.forms.MasterDetailsBlock#createToolBarActions(org.eclipse.ui.forms.IManagedForm)
317 protected void createToolBarActions(IManagedForm managedForm
) {
318 // TODO Auto-generated method stub