blob: 3e9d31d5107d7102be5519d063e8f4ab65cea063 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.netbeans.modules.java.navigation;
import java.awt.BorderLayout;
import java.io.Serializable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.SwingUtilities;
import org.netbeans.api.java.source.ui.ElementJavadoc;
import org.openide.filesystems.FileObject;
import org.openide.util.ImageUtilities;
import org.openide.util.NbBundle;
import org.openide.windows.TopComponent;
import org.openide.windows.WindowManager;
import org.openide.util.Utilities;
/**
* Top component which displays something.
*
* @author Sandip V. Chitale (Sandip.Chitale@Sun.Com)
*/
public final class JavadocTopComponent extends TopComponent {
private static final Logger LOGGER = Logger.getLogger(JavadocTopComponent.class.getName());
private static JavadocTopComponent instance;
/** path to the icon used by the component and its open action */
public static final String ICON_PATH = "org/netbeans/modules/java/navigation/resources/javadoc_action.png";
private static final String PREFERRED_ID = "JavadocTopComponent";
private DocumentationScrollPane documentationPane;
private JavadocTopComponent() {
initComponents();
setName(NbBundle.getMessage(JavadocTopComponent.class, "CTL_JavadocTopComponent"));
setToolTipText(NbBundle.getMessage(JavadocTopComponent.class, "HINT_JavadocTopComponent"));
setIcon(ImageUtilities.loadImage(ICON_PATH, true));
documentationPane = new DocumentationScrollPane( false );
add( documentationPane, BorderLayout.CENTER );
}
public void setJavadoc(
final FileObject owner,
final ElementJavadoc doc){
LOGGER.log(Level.FINE, "Setting javadoc: {0}", doc); //NOI18N
documentationPane.setData(owner, doc );
}
public void clearContent(
final FileObject owner) {
documentationPane.clearContent(owner);
}
public static boolean shouldUpdate() {
if (!exists()) {
LOGGER.fine("shouldUpdate -> false (no instance)"); //NOI18N
return false;
}
else {
final boolean isShowing = instance.isShowing();
LOGGER.log(Level.FINE, "shouldUpdate -> {0}", isShowing); //NOI18N
return isShowing;
}
}
public static boolean exists() {
return instance != null;
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
setLayout(new java.awt.BorderLayout());
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
// End of variables declaration//GEN-END:variables
/**
* Gets default instance. Do not use directly: reserved for *.settings files only,
* i.e. deserialization routines; otherwise you could get a non-deserialized instance.
* To obtain the singleton instance, use {@link findInstance}.
*/
public static synchronized JavadocTopComponent getDefault() {
if (instance == null) {
instance = new JavadocTopComponent();
}
return instance;
}
/**
* Obtain the JavadocTopComponent instance. Never call {@link #getDefault} directly!
*/
public static synchronized JavadocTopComponent findInstance() {
TopComponent win = WindowManager.getDefault().findTopComponent(PREFERRED_ID);
if (win == null) {
LOGGER.log(Level.WARNING,
"Cannot find MyWindow component. It will not be located properly in the window system.");
return getDefault();
}
if (win instanceof JavadocTopComponent) {
return (JavadocTopComponent)win;
}
LOGGER.log(Level./* Shut up! Logged dozens of times in every session. */FINE,
"There seem to be multiple components with the '" + PREFERRED_ID +
"' ID. That is a potential source of errors and unexpected behavior.");
return getDefault();
}
public int getPersistenceType() {
return TopComponent.PERSISTENCE_ALWAYS;
}
@Override
protected void componentActivated() {
super.componentActivated();
// System.out.println("JDW Activated");
documentationPane.getViewport().getView().requestFocusInWindow();
}
@Override
public void componentOpened() {
// System.out.println("JDW Opened ");
documentationPane.getViewport().getView().requestFocusInWindow();
}
@Override
protected void componentShowing() {
super.componentShowing();
// System.out.println("JDW Showing");
CaretListeningFactory.runAgain();
}
public void componentClosed() {
}
/** replaces this in object stream */
public Object writeReplace() {
return new ResolvableHelper();
}
protected String preferredID() {
return PREFERRED_ID;
}
final static class ResolvableHelper implements Serializable {
private static final long serialVersionUID = 1L;
public Object readResolve() {
return JavadocTopComponent.getDefault();
}
}
}