KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > ui > internal > browser > WebBrowserView


1 /*******************************************************************************
2  * Copyright (c) 2005, 2006 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  * IBM Corporation - Initial API and implementation
10  *******************************************************************************/

11 package org.eclipse.ui.internal.browser;
12
13 import java.io.File JavaDoc;
14 import java.net.MalformedURLException JavaDoc;
15 import java.net.URL JavaDoc;
16
17 import org.eclipse.core.runtime.IAdaptable;
18 import org.eclipse.core.runtime.IPath;
19 import org.eclipse.jface.viewers.ISelection;
20 import org.eclipse.jface.viewers.IStructuredSelection;
21 import org.eclipse.swt.dnd.DND;
22 import org.eclipse.swt.dnd.DropTarget;
23 import org.eclipse.swt.dnd.FileTransfer;
24 import org.eclipse.swt.dnd.Transfer;
25 import org.eclipse.swt.widgets.Composite;
26 import org.eclipse.ui.IActionBars;
27 import org.eclipse.ui.ISelectionListener;
28 import org.eclipse.ui.IWorkbenchPart;
29 import org.eclipse.ui.PartInitException;
30 import org.eclipse.ui.PlatformUI;
31 import org.eclipse.ui.browser.IWorkbenchBrowserSupport;
32 import org.eclipse.ui.part.ISetSelectionTarget;
33 import org.eclipse.ui.part.ViewPart;
34
35 /**
36  * A Web browser viewer.
37  */

38 public class WebBrowserView extends ViewPart implements
39         IBrowserViewerContainer, ISetSelectionTarget {
40     public static final String JavaDoc WEB_BROWSER_VIEW_ID = "org.eclipse.ui.browser.view"; //$NON-NLS-1$
41

42     protected BrowserViewer viewer;
43
44     protected ISelectionListener listener;
45
46     public void createPartControl(Composite parent) {
47         int style = WebBrowserUtil.decodeStyle(getViewSite().getSecondaryId());
48         viewer = new BrowserViewer(parent, style);
49         viewer.setContainer(this);
50
51         /*
52          * PropertyChangeListener propertyChangeListener = new
53          * PropertyChangeListener() { public void
54          * propertyChange(PropertyChangeEvent event) { if
55          * (BrowserViewer.PROPERTY_TITLE.equals(event.getPropertyName())) {
56          * setPartName((String) event.getNewValue()); } } };
57          * viewer.addPropertyChangeListener(propertyChangeListener);
58          */

59         initDragAndDrop();
60     }
61
62     public void dispose() {
63         if (viewer!=null)
64             viewer.setContainer(null);
65         if (listener != null)
66             removeSelectionListener();
67     }
68
69     public void setURL(String JavaDoc url) {
70         if (viewer != null)
71             viewer.setURL(url);
72     }
73
74     public void setFocus() {
75         viewer.setFocus();
76     }
77
78     public boolean close() {
79         try {
80             getSite().getPage().hideView(this);
81             return true;
82         } catch (Exception JavaDoc e) {
83             return false;
84         }
85     }
86
87     public IActionBars getActionBars() {
88         return getViewSite().getActionBars();
89     }
90
91     public void openInExternalBrowser(String JavaDoc url) {
92         try {
93             URL JavaDoc theURL = new URL JavaDoc(url);
94             IWorkbenchBrowserSupport support = PlatformUI.getWorkbench()
95                     .getBrowserSupport();
96             support.getExternalBrowser().openURL(theURL);
97         } catch (MalformedURLException JavaDoc e) {
98             // TODO handle this
99
} catch (PartInitException e) {
100             // TODO handle this
101
}
102     }
103
104     public void addSelectionListener() {
105         if (listener != null)
106             return;
107
108         listener = new ISelectionListener() {
109             public void selectionChanged(IWorkbenchPart part,
110                     ISelection selection) {
111                 onSelectionChange(selection);
112             }
113         };
114         getSite().getWorkbenchWindow().getSelectionService()
115                 .addPostSelectionListener(listener);
116     }
117     
118     private void onSelectionChange(ISelection selection) {
119         if (!(selection instanceof IStructuredSelection))
120             return;
121         IStructuredSelection sel = (IStructuredSelection) selection;
122         Object JavaDoc obj = sel.getFirstElement();
123         if (obj instanceof IAdaptable) {
124             IAdaptable adapt = (IAdaptable) obj;
125             URL JavaDoc url = getURLFromAdaptable(adapt);
126             if (url!=null)
127                 setURL(url.toExternalForm());
128         }
129     }
130     
131     private URL JavaDoc getURLFromAdaptable(IAdaptable adapt) {
132         // test for path
133
IPath path = (IPath) adapt.getAdapter(IPath.class);
134         if (path != null) {
135             File JavaDoc file = path.toFile();
136             if (file.exists() && isWebFile(file.getName()))
137                 try {
138                     return file.toURL();
139                 } catch (MalformedURLException JavaDoc e) {
140                     return null;
141                 }
142         }
143         return (URL JavaDoc)adapt.getAdapter(URL JavaDoc.class);
144     }
145
146     public void removeSelectionListener() {
147         if (listener == null)
148             return;
149         getSite().getWorkbenchWindow().getSelectionService()
150                 .removePostSelectionListener(listener);
151         listener = null;
152     }
153
154     /**
155      * Return true if the filename has a "web" extension.
156      *
157      * @param name
158      * @return
159      */

160     protected boolean isWebFile(String JavaDoc name) {
161         return name.endsWith("html") || name.endsWith("htm") || name.endsWith("gif") || //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
162
name.endsWith("jpg"); //$NON-NLS-1$
163
}
164
165     /**
166      * Adds drag and drop support to the view.
167      */

168     protected void initDragAndDrop() {
169         Transfer[] transfers = new Transfer[] {
170         // LocalSelectionTransfer.getInstance(),
171
// ResourceTransfer.getInstance(),
172
FileTransfer.getInstance() };
173
174         DropTarget dropTarget = new DropTarget(viewer, DND.DROP_COPY
175                 | DND.DROP_DEFAULT);
176         dropTarget.setTransfer(transfers);
177         dropTarget.addDropListener(new WebBrowserViewDropAdapter(viewer));
178     }
179
180     public void selectReveal(ISelection selection) {
181         onSelectionChange(selection);
182     }
183 }
184
Popular Tags