/*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.tools.visualvm.modules.appui.about;
import com.sun.tools.visualvm.core.ui.DesktopUtils;
import com.sun.tools.visualvm.uisupport.HTMLTextArea;
import com.sun.tools.visualvm.uisupport.SeparatorLine;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.HierarchyEvent;
import java.awt.event.HierarchyListener;
import java.net.URL;
import java.util.logging.Logger;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.event.ChangeListener;
import javax.swing.text.Caret;
import org.netbeans.lib.profiler.ui.components.ImagePanel;
/**
*
* @author Jiri Sedlacek
*/
public class AboutDialogPanel extends JPanel {
private final static Logger LOGGER = Logger.getLogger(AboutDialogPanel.class.getName());
// --- Internal API --------------------------------------------------------
AboutDialogPanel() {
initComponents();
final Runnable repainter = new Runnable() {
public void run() { AboutDialogPanel.this.repaint(); }
};
addHierarchyListener(new HierarchyListener() {
public void hierarchyChanged(HierarchyEvent e) {
if ((e.getChangeFlags() & HierarchyEvent.SHOWING_CHANGED) != 0 && isShowing()) {
SwingUtilities.invokeLater(repainter);
SwingUtilities.invokeLater(new Runnable() {
public void run() { SwingUtilities.invokeLater(repainter); }
});
}
}
});
}
void updateAppearance() {
String message = AboutDialog.getInstance().getMessage();
String htmlMessage = AboutDialog.getInstance().getHTMLMessage();
licenseArea.setVisible(message != null);
if (message != null) {
if (htmlMessage != null && DesktopUtils.isBrowseAvailable()) {
licenseArea.setText(htmlMessage);
} else {
licenseArea.setText(message);
}
}
}
// --- Private implementation ----------------------------------------------
private void initComponents() {
JPanel splashImageContainer = new ImagePanel(AboutDialog.getInstance().getAboutImage());
SeparatorLine separator = new SeparatorLine();
licenseArea = new HTMLTextArea() {
protected void showURL(URL url) {
if (DesktopUtils.isBrowseAvailable()) {
try {
DesktopUtils.browse(url.toURI());
} catch (Exception e) {
LOGGER.throwing(AboutDialogPanel.class.getName(), "initComponents", e); // NOI18N
}
}
}
};
licenseArea.setOpaque(true);
licenseArea.setForeground(Color.BLACK);
licenseArea.setBorder(BorderFactory.createEmptyBorder(10, 22, 10, 22));
licenseArea.setCaret(new NullCaret());
licenseArea.setShowPopup(false);
licenseArea.setFocusable(false);
splashImageContainer.setLayout(new BorderLayout());
if (UIManager.getLookAndFeel().getID().equals("Nimbus")) { // NOI18N
// Nimbus LaF doesn't respect setOpaque(false), this is a workaround.
licenseArea.setBackground(new Color(0, 0, 0, 0));
JPanel transparentPanel = new JPanel(new BorderLayout()) {
public void paint(Graphics g) {
g.setColor(getBackground());
g.fillRect(0, 0, getWidth(), getHeight());
paintChildren(g);
}
};
transparentPanel.setOpaque(true);
transparentPanel.setBackground(new Color(255, 255, 255, 100));
transparentPanel.add(licenseArea, BorderLayout.CENTER);
splashImageContainer.add(transparentPanel, BorderLayout.SOUTH);
} else {
licenseArea.setBackground(new Color(255, 255, 255, 100));
splashImageContainer.add(licenseArea, BorderLayout.SOUTH);
}
setLayout(new BorderLayout());
add(splashImageContainer, BorderLayout.CENTER);
add(separator, BorderLayout.SOUTH);
}
private HTMLTextArea licenseArea;
private static final class NullCaret implements Caret {
public void install(javax.swing.text.JTextComponent c) {}
public void deinstall(javax.swing.text.JTextComponent c) {}
public void paint(Graphics g) {}
public void addChangeListener(ChangeListener l) {}
public void removeChangeListener(ChangeListener l) {}
public boolean isVisible() { return false; }
public void setVisible(boolean v) {}
public boolean isSelectionVisible() { return false; }
public void setSelectionVisible(boolean v) {}
public void setMagicCaretPosition(Point p) {}
public Point getMagicCaretPosition() { return new Point(0, 0); }
public void setBlinkRate(int rate) {}
public int getBlinkRate() { return 0; }
public int getDot() { return 0; }
public int getMark() { return 0; }
public void setDot(int dot) {}
public void moveDot(int dot) {}
}
}