001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package org.netbeans.modules.webclient;
043:
044: import java.awt.*;
045: import java.awt.event.*;
046: import java.beans.PropertyChangeListener;
047: import java.beans.PropertyChangeEvent; // import javax.swing.*;
048:
049: import org.openide.windows.TopComponent;
050:
051: import org.mozilla.webclient.*;
052:
053: import org.openide.util.NbBundle;
054: import org.openide.util.RequestProcessor;
055:
056: /**
057: * Adds some functionality to Mozilla browser.
058: *
059: * @author Radim.Kubacki@sun.com
060: */
061: class WebclientBrowserComponent extends Frame {
062:
063: private static final int DEFAULT_WIDTH = 400;
064: private static final int DEFAULT_HEIGHT = 350;
065:
066: private static final boolean debug = true;
067:
068: private WebclientBrowserImpl browserImpl;
069: /** java.awt.Canvas for drawing of pages. */
070: private BrowserControlCanvas browser;
071: /** toolbar button */
072: private Button bPrev;
073: /** toolbar button */
074: private Button bNext;
075: /** toolbar button */
076: private Button bHome;
077: /** toolbar button */
078: private Button bReload;
079: /** toolbar button */
080: private Button bStop;
081:
082: private TextField tfLocation;
083:
084: private BrowserListener bListener;
085:
086: /** Creates new MozillaBrowserComponent */
087: public WebclientBrowserComponent(WebclientBrowserImpl browserImpl) {
088: super ();
089: if (debug)
090: System.out.println("Creating MozillaBrowserComponent"); // NOI18N
091: setLayout(new BorderLayout());
092: this .browserImpl = browserImpl;
093:
094: try {
095: browser = (BrowserControlCanvas) browserImpl
096: .getBrowserControl().queryInterface(
097: BrowserControl.BROWSER_CONTROL_CANVAS_NAME);
098: add(browser, "Center"); // NOI18N
099: browser.setVisible(true);
100:
101: bListener = new BrowserListener();
102: addWindowListener(bListener);
103:
104: initToolbar();
105: setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
106: } catch (ClassNotFoundException ex) {
107: ex.printStackTrace();
108: } catch (NullPointerException ex) {
109: ex.printStackTrace();
110: }
111: }
112:
113: private void initToolbar() {
114: Panel toolbar = new Panel();
115: toolbar.add(bPrev = new Button(NbBundle.getMessage(
116: WebclientBrowserComponent.class, "LBL_Prev")));
117: toolbar.add(bNext = new Button(NbBundle.getMessage(
118: WebclientBrowserComponent.class, "LBL_Next")));
119: toolbar.add(bStop = new Button(NbBundle.getMessage(
120: WebclientBrowserComponent.class, "LBL_Stop")));
121: toolbar.add(bReload = new Button(NbBundle.getMessage(
122: WebclientBrowserComponent.class, "LBL_Reload")));
123: toolbar.add(bHome = new Button(NbBundle.getMessage(
124: WebclientBrowserComponent.class, "LBL_Home")));
125: toolbar.add(tfLocation = new TextField(30));
126: add(toolbar, "North"); // NOI18N
127: bPrev.addActionListener(bListener);
128: bNext.addActionListener(bListener);
129: bStop.addActionListener(bListener);
130: bReload.addActionListener(bListener);
131: bHome.addActionListener(bListener);
132: tfLocation.addActionListener(bListener);
133: browserImpl.addPropertyChangeListener(bListener);
134: refreshToolbar();
135: }
136:
137: /** Updates toolbar buttons and location */
138: void refreshToolbar() {
139: bPrev.setEnabled(browserImpl.isBackward());
140: bNext.setEnabled(browserImpl.isForward());
141: java.net.URL url = browserImpl.getURL();
142: if (url != null) {
143: if (debug)
144: System.out.println("setText to " + url); // NOI18N
145: tfLocation.setText(url.toString());
146: }
147: }
148:
149: /**
150: * Initialize rest of Webclient interfaces.
151: */
152: public void addNotify() {
153: super .addNotify();
154: browserImpl.initialize();
155: }
156:
157: /**
158: * Returns preferred size.
159: */
160: public java.awt.Dimension getPreferredSize() {
161: java.awt.Dimension super Pref = super .getPreferredSize();
162: return new java.awt.Dimension(Math.max(DEFAULT_WIDTH,
163: super Pref.width), Math.max(DEFAULT_HEIGHT,
164: super Pref.height));
165: }
166:
167: /**
168: * browser implementation does most of work
169: */
170: private void delete() {
171: browser.setVisible(false);
172: browser = null;
173: }
174:
175: private class BrowserListener implements ActionListener,
176: WindowListener, PropertyChangeListener, Runnable {
177: public void actionPerformed(ActionEvent e) {
178: if (e.getSource() == bPrev) {
179: browserImpl.backward();
180: } else if (e.getSource() == bNext) {
181: browserImpl.forward();
182: } else if (e.getSource() == bHome) {
183: try {
184: java.net.URL homePage = new java.net.URL(
185: org.openide.awt.HtmlBrowser.getHomePage());
186: browserImpl.setURL(homePage);
187: } catch (java.net.MalformedURLException ex) {
188: browserImpl.setStatusMessage(NbBundle.getMessage(
189: WebclientBrowserComponent.class,
190: "MSG_Cannot_get_home_page"));
191: }
192: } else if (e.getSource() == bStop) {
193: browserImpl.stopLoading();
194: } else if (e.getSource() == bReload) {
195: browserImpl.reloadDocument();
196: } else if (e.getSource() == tfLocation) {
197: try {
198: browserImpl.setURL(new java.net.URL(tfLocation
199: .getText()));
200: } catch (java.net.MalformedURLException ex) {
201: tfLocation.setText("");
202: }
203: }
204: }
205:
206: public void propertyChange(PropertyChangeEvent evt) {
207: String property = evt.getPropertyName();
208: if (property == null) {
209: RequestProcessor.postRequest(this );
210: return;
211: }
212:
213: if (property.equals(browserImpl.PROP_URL)
214: || property.equals(browserImpl.PROP_TITLE)
215: || property.equals(browserImpl.PROP_BACKWARD)
216: || property.equals(browserImpl.PROP_FORWARD))
217: RequestProcessor.postRequest(this );
218: }
219:
220: private void close() {
221: // System.out.println("destroying the BrowserControl");
222: // WebclientBrowserComponent.this.delete ();
223: // should close the BrowserControlCanvas
224: browserImpl.destroy();
225: }
226:
227: public void windowClosing(WindowEvent e) {
228: setVisible(false);
229: }
230:
231: public void windowClosed(WindowEvent e) {
232: }
233:
234: public void windowActivated(
235: java.awt.event.WindowEvent windowEvent) {
236: }
237:
238: public void windowDeactivated(
239: java.awt.event.WindowEvent windowEvent) {
240: }
241:
242: public void windowDeiconified(
243: java.awt.event.WindowEvent windowEvent) {
244: }
245:
246: public void windowIconified(
247: java.awt.event.WindowEvent windowEvent) {
248: }
249:
250: public void windowOpened(java.awt.event.WindowEvent windowEvent) {
251: }
252:
253: public void run() {
254: refreshToolbar();
255: }
256:
257: }
258: }
|