Author: rgardler Date: Wed Jul 6 17:13:51 2005 New Revision: 209549 URL: http://svn.apache.org/viewcvs?rev=209549&view=rev Log: Add initial support for context menus and drag and drop (thanks to Anil Ramnanan, FOR-565). Added basic javadocs.
Added: forrest/trunk/tools/eclipse/plugins/org.apache.forrest/src/org/apache/forrest/eclipse/views/SiteDropListener.java (with props) Modified: forrest/trunk/tools/eclipse/plugins/org.apache.forrest/plugin.xml forrest/trunk/tools/eclipse/plugins/org.apache.forrest/src/org/apache/forrest/eclipse/views/SiteXMLView.java Modified: forrest/trunk/tools/eclipse/plugins/org.apache.forrest/plugin.xml URL: http://svn.apache.org/viewcvs/forrest/trunk/tools/eclipse/plugins/org.apache.forrest/plugin.xml?rev=209549&r1=209548&r2=209549&view=diff ============================================================================== --- forrest/trunk/tools/eclipse/plugins/org.apache.forrest/plugin.xml (original) +++ forrest/trunk/tools/eclipse/plugins/org.apache.forrest/plugin.xml Wed Jul 6 17:13:51 2005 @@ -135,4 +135,14 @@ id="SiteXML" name="SiteXML"/> </extension> + + <extension + id="treeDrop" + name="Site XML Drop" + point="org.eclipse.ui.dropActions"> + <action + class="org.apache.forrest.eclipse.views.SiteXMLView" + id="SiteXMLDrop"> + </action> + </extension> </plugin> Added: forrest/trunk/tools/eclipse/plugins/org.apache.forrest/src/org/apache/forrest/eclipse/views/SiteDropListener.java URL: http://svn.apache.org/viewcvs/forrest/trunk/tools/eclipse/plugins/org.apache.forrest/src/org/apache/forrest/eclipse/views/SiteDropListener.java?rev=209549&view=auto ============================================================================== --- forrest/trunk/tools/eclipse/plugins/org.apache.forrest/src/org/apache/forrest/eclipse/views/SiteDropListener.java (added) +++ forrest/trunk/tools/eclipse/plugins/org.apache.forrest/src/org/apache/forrest/eclipse/views/SiteDropListener.java Wed Jul 6 17:13:51 2005 @@ -0,0 +1,100 @@ +/* + * Copyright 1999-2005 The Apache Software Foundation or its licensors, + * as applicable. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.forrest.eclipse.views; + +import java.io.File; + +import org.apache.forrest.eclipse.actions.Utilities; +import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.swt.dnd.DropTargetEvent; +import org.eclipse.swt.dnd.DropTargetListener; +import org.eclipse.swt.widgets.Display; +import org.w3c.dom.Document; + +/** + * Handles dropping of files onto the siteXMLView. + * + */ +public class SiteDropListener implements DropTargetListener { + + + TreeViewer treeViewer; + + Document document; + + String projectName; + + final Display display = Display.getDefault(); + + public SiteDropListener(String projectName, Document document, TreeViewer treeViewer) { + // TODO Auto-generated constructor stub + this.treeViewer = treeViewer; + this.document = document; + this.projectName = projectName; + } + + public void dragEnter(DropTargetEvent event) { + // TODO Auto-generated method stub + + } + + public void dragLeave(DropTargetEvent event) { + // TODO Auto-generated method stub + + } + + public void dragOperationChanged(DropTargetEvent event) { + // TODO Auto-generated method stub + + } + + public void dragOver(DropTargetEvent event) { + // TODO Auto-generated method stub + + } + + /** + * Handle files that are dropped into the site tree. + */ + public void drop(DropTargetEvent event) { + if (event.data instanceof String[]) { + String[] files = (String[]) event.data; + File strFilename; + String filePath = null; + String localItemPath; + String itemPath; + for (int i = 0; i < files.length; i++) { + strFilename = new File(files[i]); + filePath = strFilename.getPath(); + localItemPath = filePath.substring(filePath + .indexOf("xdocs") + + "xdocs".length() + 1); + itemPath = filePath.substring(Utilities + .getPathToXDocs().length() + 2); + //TODO: Code to add element from drag and drop goes here + + + } + } + } + + public void dropAccept(DropTargetEvent event) { + // TODO Auto-generated method stub + + } + +} Propchange: forrest/trunk/tools/eclipse/plugins/org.apache.forrest/src/org/apache/forrest/eclipse/views/SiteDropListener.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: forrest/trunk/tools/eclipse/plugins/org.apache.forrest/src/org/apache/forrest/eclipse/views/SiteXMLView.java URL: http://svn.apache.org/viewcvs/forrest/trunk/tools/eclipse/plugins/org.apache.forrest/src/org/apache/forrest/eclipse/views/SiteXMLView.java?rev=209549&r1=209548&r2=209549&view=diff ============================================================================== --- forrest/trunk/tools/eclipse/plugins/org.apache.forrest/src/org/apache/forrest/eclipse/views/SiteXMLView.java (original) +++ forrest/trunk/tools/eclipse/plugins/org.apache.forrest/src/org/apache/forrest/eclipse/views/SiteXMLView.java Wed Jul 6 17:13:51 2005 @@ -1,5 +1,5 @@ /* - * Copyright 1999-2004 The Apache Software Foundation or its licensors, + * Copyright 1999-2005 The Apache Software Foundation or its licensors, * as applicable. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -27,54 +27,72 @@ import org.apache.forrest.eclipse.actions.Utilities; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; +import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.MenuManager; +import org.eclipse.jface.action.Separator; +import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; + import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerSorter; + import org.eclipse.swt.SWT; +import org.eclipse.swt.dnd.DND; + +import org.eclipse.swt.dnd.FileTransfer; +import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Text; +import org.eclipse.swt.widgets.Menu; + import org.eclipse.ui.ISelectionListener; +import org.eclipse.ui.ISharedImages; +import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.PlatformUI; + import org.eclipse.ui.part.ViewPart; import org.w3c.dom.Attr; import org.w3c.dom.Document; -import org.w3c.dom.NamedNodeMap; + import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; + + /** - * This sample class demonstrates how to plug-in a new workbench view. The view - * shows data obtained from the model. The sample creates a dummy model on the - * fly, but a real implementation would connect to the model available either in - * this or another plug-in (e.g. the workspace). The view is connected to the - * model using a content provider. - * <p> - * The view uses a label provider to define how model objects should be - * presented in the view. Each view can present the same model objects using - * different labels and icons, if needed. Alternatively, a single label provider - * can be shared between views in order to ensure that objects of the same type - * are presented in the same way everywhere. - * <p> + * A tree view for site.xml files. The view handles drag and + * drop from the navigator and supports a number of context + * menus for editing. */ - public class SiteXMLView extends ViewPart implements IMenuListener, ISelectionListener { - private TreeViewer viewer; - - private IProject activeProject; + private TreeViewer treeViewer; private DocumentBuilder parser; private Document document; + + private String projectName; + + private IStructuredSelection treeSelection; + + private Action AddElement; + + private Action RemoveElement; + + protected IProject activeProject; + + protected Composite parent; + + /* * The content provider class is responsible for providing objects to the @@ -84,9 +102,7 @@ * example). */ - class NameSorter extends ViewerSorter { - } - + /** * The constructor. */ @@ -98,15 +114,14 @@ * it. */ public void createPartControl(Composite parent) { - viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); - getSite().setSelectionProvider(viewer); - viewer.setContentProvider(new ITreeContentProvider() { + treeViewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); + getSite().setSelectionProvider(treeViewer); + int operations = DND.DROP_COPY | DND.DROP_MOVE; + Transfer[] types = new Transfer[] { FileTransfer.getInstance()}; + treeViewer.addDropSupport(operations, types, new SiteDropListener(projectName ,document, treeViewer)); + treeViewer.setContentProvider(new ITreeContentProvider() { public Object[] getChildren(Object element) { ArrayList ch = new ArrayList(); - NamedNodeMap atrs = ((Node) element).getAttributes(); - if (atrs != null) - for (int i = 0; i < atrs.getLength(); i++) - ch.add(atrs.item(i)); NodeList nl = ((Node) element).getChildNodes(); for (int i = 0; i < nl.getLength(); i++) if (nl.item(i).getNodeType() == Node.ELEMENT_NODE) @@ -134,10 +149,10 @@ } }); - viewer.setLabelProvider(new LabelProvider() { + treeViewer.setLabelProvider(new LabelProvider() { public String getText(Object element) { if (element instanceof Attr) - return "@" + ((Attr) element).getNodeName(); + return "@" + ((Attr) element).getNodeName() + " " +((Attr) element).getNodeValue(); else return ((Node) element).getNodeName(); } @@ -160,22 +175,25 @@ e.printStackTrace(); } getViewSite().getPage().addSelectionListener(this); - viewer.addSelectionChangedListener(new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent event) { - Text text = null; - // if the selection is empty clear the label - if (event.getSelection().isEmpty()) { - text.setText(""); - return; - } - if (event.getSelection() instanceof IStructuredSelection) { + + + treeViewer.addSelectionChangedListener(new ISelectionChangedListener() { + + public void selectionChanged(SelectionChangedEvent event) { + if (event.getSelection() instanceof IStructuredSelection) { IStructuredSelection selection = (IStructuredSelection) event .getSelection(); - + treeSelection = selection; + + } } }); - // viewer.setInput(document); + + //System.out.println(document.toString()); + treeViewer.setInput(document); + makeActions(); + hookContextMenu(); } public void setFocus() { @@ -188,12 +206,14 @@ } + public void selectionChanged(IWorkbenchPart part, ISelection selection) { if (selection instanceof IStructuredSelection) { Object first = ((IStructuredSelection) selection).getFirstElement(); IResource resource = (IResource) first; if (resource instanceof IProject) { activeProject = (IProject) resource; + String projectName = activeProject.getProject().getName(); String path = (activeProject.getProject().getLocation() .toString() + java.io.File.separator @@ -208,12 +228,67 @@ // TODO Auto-generated catch block e.printStackTrace(); } - viewer.setInput(document); - + treeViewer.setInput(document); + } } } + private void hookContextMenu() { + MenuManager menuMgr = new MenuManager("#PopupMenu"); + menuMgr.setRemoveAllWhenShown(true); + menuMgr.addMenuListener(new IMenuListener() { + public void menuAboutToShow(IMenuManager manager) { + SiteXMLView.this.fillContextMenu(manager); + } + }); + Menu menu = menuMgr.createContextMenu(treeViewer.getControl()); + treeViewer.getControl().setMenu(menu); + getSite().registerContextMenu(menuMgr, treeViewer); + } + + + + private void fillContextMenu(IMenuManager manager) { + manager.add(AddElement); + manager.add(RemoveElement); + // Other plug-ins can contribute there actions here + manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); + } + + private void makeActions() { + AddElement = new Action() { + public void run() { + if (treeSelection != null) { + //TODO: Code to add Element goes here + } + } + }; + AddElement.setText("Add Element"); + AddElement.setToolTipText("Add Element tooltip"); + AddElement.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages(). + getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK)); + + RemoveElement = new Action() { + public void run() { + if (treeSelection != null) { + //TODO: Code to remove Element does here. + } + } + }; + RemoveElement.setText("DeleteElement"); + RemoveElement.setToolTipText("Delete Element"); + RemoveElement.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages(). + getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK)); + } + + private void showMessage(String message) { + MessageDialog.openInformation( + treeViewer.getControl().getShell(), + "Sample View", + message); + } + }