net.pms.newgui.AboutTab.java Source code

Java tutorial

Introduction

Here is the source code for net.pms.newgui.AboutTab.java

Source

/*
 * PS3 Media Server, for streaming any medias to your PS3.
 * Copyright (C) 2008  A.Brochard
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; version 2
 * of the License only.
 *
 * This program 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 for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 */
package net.pms.newgui;

import com.jgoodies.forms.builder.PanelBuilder;
import com.jgoodies.forms.factories.Borders;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import net.pms.Messages;
import net.pms.PMS;
import net.pms.util.PropertiesUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.IOException;

public class AboutTab {
    private static final Logger logger = LoggerFactory.getLogger(AboutTab.class);

    private ImagePanel imagePanel;
    private JLabel jl;
    private JProgressBar jpb;

    public JProgressBar getJpb() {
        return jpb;
    }

    public JLabel getJl() {
        return jl;
    }

    public ImagePanel getImagePanel() {
        return imagePanel;
    }

    public JComponent build() {
        FormLayout layout = new FormLayout("0:grow, pref, 0:grow",
                "pref, 3dlu, pref, 3dlu, pref, 12dlu, pref, 3dlu, pref, 3dlu, pref, 3dlu, pref, 3dlu, p, 3dlu, p");

        PanelBuilder builder = new PanelBuilder(layout);
        builder.border(Borders.DLU9);
        builder.opaque(true);
        CellConstraints cc = new CellConstraints();

        String projectName = PropertiesUtil.getProjectProperties().get("project.name");

        final LinkMouseListener pms3Link = new LinkMouseListener(projectName + " " + PMS.getVersion(),
                "http://www.ps3mediaserver.org/");
        JLabel lPms3Link = builder.addLabel(pms3Link.getLabel(), cc.xy(2, 1, "center, fill"));
        lPms3Link.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        lPms3Link.addMouseListener(pms3Link);

        // Create a build name from the available git properties
        String commitId = PropertiesUtil.getProjectProperties().get("git.commit.id");
        String commitTime = PropertiesUtil.getProjectProperties().get("git.commit.time");
        String shortCommitId = commitId.substring(0, 9);
        String commitUrl = "https://github.com/ps3mediaserver/ps3mediaserver/commit/" + commitId;
        String buildLabel = Messages.getString("LinksTab.6") + " " + shortCommitId + " (" + commitTime + ")";

        final LinkMouseListener commitLink = new LinkMouseListener(buildLabel, commitUrl);
        JLabel lCommitLink = builder.addLabel(commitLink.getLabel(), cc.xy(2, 3, "center, fill"));
        lCommitLink.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        lCommitLink.addMouseListener(commitLink);

        imagePanel = buildImagePanel();
        builder.add(imagePanel, cc.xy(2, 5, "center, fill"));

        builder.addLabel(Messages.getString("LinksTab.5"), cc.xy(2, 7, "center, fill"));

        final LinkMouseListener ffmpegLink = new LinkMouseListener("FFmpeg", "http://ffmpeg.mplayerhq.hu");
        JLabel lFfmpegLink = builder.addLabel(ffmpegLink.getLabel(), cc.xy(2, 9, "center, fill"));
        lFfmpegLink.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        lFfmpegLink.addMouseListener(ffmpegLink);

        final LinkMouseListener mplayerLink = new LinkMouseListener("MPlayer", "http://www.mplayerhq.hu");
        JLabel lMplayerLink = builder.addLabel(mplayerLink.getLabel(), cc.xy(2, 11, "center, fill"));
        lMplayerLink.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        lMplayerLink.addMouseListener(mplayerLink);

        final LinkMouseListener vlcLink = new LinkMouseListener("VLC media player", "http://www.videolan.org/vlc/");
        JLabel lVlcLink = builder.addLabel(vlcLink.getLabel(), cc.xy(2, 13, "center, fill"));
        lVlcLink.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        lVlcLink.addMouseListener(vlcLink);

        final LinkMouseListener mediaInfoLink = new LinkMouseListener("MediaInfo",
                "http://mediainfo.sourceforge.net/en");
        JLabel lMediaInfoLink = builder.addLabel(mediaInfoLink.getLabel(), cc.xy(2, 15, "center, fill"));
        lMediaInfoLink.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        lMediaInfoLink.addMouseListener(mediaInfoLink);

        JScrollPane scrollPane = new JScrollPane(builder.getPanel());
        scrollPane.setBorder(BorderFactory.createEmptyBorder());
        return scrollPane;
    }

    private static class LinkMouseListener implements MouseListener {
        private final String name;
        private final String link;

        public LinkMouseListener(String n, String l) {
            name = n;
            link = l;
        }

        public String getLabel() {
            final StringBuilder sb = new StringBuilder();
            sb.append("<html>");
            sb.append("<a href=\"");
            sb.append(link);
            sb.append("\">");
            sb.append(name);
            sb.append("</a>");
            sb.append("</html>");
            return sb.toString();
        }

        @Override
        public void mouseClicked(MouseEvent e) {
            try {
                PMS.get().getRegistry().browseURI(link);
            } catch (Exception e1) {
                logger.debug("Caught exception", e1);
            }
        }

        @Override
        public void mouseEntered(MouseEvent e) {
        }

        @Override
        public void mouseExited(MouseEvent e) {
        }

        @Override
        public void mousePressed(MouseEvent e) {
        }

        @Override
        public void mouseReleased(MouseEvent e) {
        }
    }

    public ImagePanel buildImagePanel() {
        BufferedImage bi = null;
        try {
            bi = ImageIO.read(LooksFrame.class.getResourceAsStream("/resources/images/logo.png"));
        } catch (IOException e) {
            logger.debug("Caught exception", e);
        }
        return new ImagePanel(bi);
    }
}