blob: 66b5751aaad047dfeed0071db45fde875bd719af [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.autoupdate.ui;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.JViewport;
import javax.swing.border.Border;
import javax.swing.border.CompoundBorder;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkEvent.EventType;
import javax.swing.event.HyperlinkListener;
import javax.swing.text.StyledEditorKit;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.StyleSheet;
import org.openide.util.NbBundle;
import org.openide.util.RequestProcessor;
/**
*
* @author Jiri Rechtacek, Radek Matous
*/
public class DetailsPanel extends JTextPane {
private JScrollPane scrollPane;
private HeaderPanel header;
private JLabel title;
private JButton button;
private JButton button2;
private JPanel rightCornerHeader;
private HyperlinkListener hyperlinkListener;
private static final RequestProcessor RP = new RequestProcessor(DetailsPanel.class);
public DetailsPanel() {
initComponents2();
HTMLEditorKit htmlkit = new HTMLEditorKitEx();
// override the Swing default CSS to make the HTMLEditorKit use the
// same font as the rest of the UI.
// XXX the style sheet is shared by all HTMLEditorKits. We must
// detect if it has been tweaked by ourselves or someone else
// (code completion javadoc popup for example) and avoid doing the
// same thing again
StyleSheet css = htmlkit.getStyleSheet();
if (css.getStyleSheets() == null) {
StyleSheet css2 = new StyleSheet();
Font f = new JList().getFont();
int size = f.getSize();
css2.addRule(new StringBuffer("body { font-size: ").append(size) // NOI18N
.append("; font-family: ").append(f.getName()).append("; }").toString()); // NOI18N
css2.addStyleSheet(css);
htmlkit.setStyleSheet(css2);
}
setEditorKit(htmlkit);
addHyperlinkListener(new HyperlinkListener() {
@Override
public void hyperlinkUpdate(HyperlinkEvent hlevt) {
if (EventType.ACTIVATED == hlevt.getEventType()) {
if (hlevt.getURL () != null) {
Utilities.showURL(hlevt.getURL());
}
}
}
});
setEditable(false);
setPreferredSize(new Dimension(300, 80));
RP.post(new Runnable() {
@Override
public void run() {
getAccessibleContext ().setAccessibleName (
NbBundle.getMessage (DetailsPanel.class, "ACN_DetailsPanel")); // NOI18N
}
});
putClientProperty( JTextPane.HONOR_DISPLAY_PROPERTIES, Boolean.TRUE );
}
@Override
public void addNotify() {
super.addNotify();
getScrollPane();
}
@Override
public void removeNotify () {
setEditorKit (new StyledEditorKit ());
if (hyperlinkListener != null) {
removeHyperlinkListener (hyperlinkListener);
}
scrollPane = null;
super.removeNotify ();
}
JScrollPane getScrollPane() {
if (scrollPane == null) {
Container p = getParent();
if (p instanceof JViewport) {
Container gp = p.getParent();
if (gp instanceof JScrollPane) {
scrollPane = (JScrollPane)gp;
}
}
}
return scrollPane;
}
public void setTitle(String value) {
getScrollPane().setColumnHeaderView(value != null ? header : null);
getScrollPane().setCorner(JScrollPane.UPPER_RIGHT_CORNER, value != null ? rightCornerHeader : null);
if (value != null) {
title.setText("<html><h3>"+value+"</h3></html>"); // NOI18N
}
}
public void setActionListener(Action action) {
button.setVisible(action != null);
button.setEnabled(action != null);
if (action != null) {
button.setAction(action);
button.getAccessibleContext ().setAccessibleDescription (
NbBundle.getMessage (DetailsPanel.class, "ACN_DetailsPanel_Button", button.getName ())); // NOI18N
}
}
public void setActionListener2(Action action) {
button2.setVisible(action != null);
button2.setEnabled(action != null);
if (action != null) {
button2.setAction(action);
button2.getAccessibleContext ().setAccessibleDescription (
NbBundle.getMessage (DetailsPanel.class, "ACN_DetailsPanel_Button", button2.getName ())); // NOI18N
}
}
@Override
public void setEnabled(boolean enabled) {
super.setEnabled(enabled);
title.setEnabled(enabled);
button.setEnabled(enabled);
}
javax.swing.JEditorPane getDetails() {
return this;
}
@Override
public void setText(String t) {
super.setText(t);
validate();
}
HeaderPanel getHeader() {
return header;
}
private void initComponents2() {
header = new HeaderPanel();
title = header.getTitle();
button = header.getButton();
button2 = header.getButton2();
Border outsideBorder = BorderFactory.createMatteBorder(0, 0, 1, 0, Color.gray);
Border insideBorder = BorderFactory.createEmptyBorder(3, 3, 3, 3);
CompoundBorder compoundBorder = BorderFactory.createCompoundBorder(outsideBorder, insideBorder);
header.setBorder(compoundBorder);
button.setVisible(false);
button2.setVisible(false);
rightCornerHeader = new JPanel();
rightCornerHeader.setBorder(compoundBorder);
Color headerBgColor = UnitTable.getDarkerColor(getBackground());
header.setBackground(headerBgColor);
if (button != null) {
button.setOpaque(false);
}
if (button2 != null) {
button2.setOpaque(false);
}
rightCornerHeader.setBackground(headerBgColor);
setBorder(BorderFactory.createEmptyBorder(3, 3, 0, 0));
}
}