/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.esa.snap.rcp.about;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.openide.util.ImageUtilities;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.border.EmptyBorder;
import java.awt.BorderLayout;
import java.awt.Image;
import java.util.Arrays;
import java.util.List;
/**
* The UI component displayed by the {@link AboutAction}. Processes {@code AboutBox} file objects generated from
* {@link AboutBox} annotations.
*
* @author Norman Fomferra
* @author Marco Peters
*/
class AboutPanel extends JPanel {
public AboutPanel() {
setLayout(new BorderLayout(8, 8));
setBorder(new EmptyBorder(8, 8, 8, 8));
FileObject configFile = FileUtil.getConfigFile("AboutBox");
if (configFile != null) {
JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.add("SNAP", new SnapAboutBox());
addAboutBoxPlugins(tabbedPane, configFile);
add(tabbedPane, BorderLayout.CENTER);
} else {
add(new SnapAboutBox(), BorderLayout.CENTER);
}
}
private void addAboutBoxPlugins(JTabbedPane tabbedPane, FileObject configFile) {
FileObject aboutBoxPanels[] = configFile.getChildren();
List<FileObject> orderedAboutBoxPanels = FileUtil.getOrder(Arrays.asList(aboutBoxPanels), true);
for (FileObject aboutBoxFileObject : orderedAboutBoxPanels) {
JComponent panel = FileUtil.getConfigObject(aboutBoxFileObject.getPath(), JComponent.class);
if (panel != null) {
String displayName = (String) aboutBoxFileObject.getAttribute("displayName");
if (displayName != null && !displayName.trim().isEmpty()) {
Icon icon = null;
String iconPath = (String) aboutBoxFileObject.getAttribute("iconPath");
if (iconPath != null && !iconPath.trim().isEmpty()) {
Image image = ImageUtilities.loadImage(iconPath, false);
if (image != null) {
icon = new ImageIcon(image);
}
}
tabbedPane.addTab(displayName, icon, panel);
}
}
}
}
}