TransferPanel.java
| Index Score | ||
|---|---|---|
![]() |
![]() |
org.xnap.gui |
![]() |
![]() |
XNap 3 |
View: Reasons, Metrics, Source Code
These are the metrics that contribute to the Enerjy Score for this file, ranked by impact. So the metrics listed at the top influence the score to a greater extent that the metrics listed at the bottom.
/*
* XNap - A P2P framework and client.
*
* See the file AUTHORS for copyright information.
*
* 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.
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.xnap.gui;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.util.LinkedList;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import org.xnap.XNap;
import org.xnap.gui.action.MenuAction;
import org.xnap.gui.action.PanelAction;
import org.xnap.gui.menu.PeerMenu;
import org.xnap.gui.util.*;
import org.xnap.peer.Peer;
import org.xnap.transfer.DownloadManager;
import org.xnap.transfer.Transfer;
import org.xnap.transfer.UploadManager;
import org.xnap.util.Preferences;
public class TransferPanel extends JPanel
implements ActionProvider, PeerProvider, PropertyChangeListener
{
//--- Data field(s) ---
private static Preferences prefs = Preferences.getInstance();
private TransferManagerPanel jpDownloads;
private TransferManagerPanel jpUploads;
private JTabbedPane jtp = null;
private JSplitPane jsp = null;
private Action acClear = new ClearAction();
private Action acSettings;
private Action acPeerMenu
= new MenuAction(new PeerMenu(this), "users.png");
//--- Constructor(s) ---
public TransferPanel()
{
initialize();
}
//--- Method(s) ---
private void initialize()
{
setLayout(new BorderLayout());
// settings panel
JPanel jpSettings = new TransferSettingsPanel();
acSettings = new PanelAction(jpSettings, "view_text.png");
FocusSelectionListener fsl = new FocusSelectionListener();
// download panel
jpDownloads = new TransferManagerPanel
(DownloadManager.getInstance(), "download", false);
jpDownloads.getTreeTable().addFocusListener(fsl);
// download status panel
TransferStatusPanel spDownload = new TransferStatusPanel();
spDownload.setName(XNap.tr("Download"));
spDownload.setIcon(IconHelper.getIcon("down.png", 16, false));
jpDownloads.getTransferTableModel().setListener(spDownload);
StatusBar.getInstance().addComponent(spDownload);
// upload panel
jpUploads = new TransferManagerPanel
(UploadManager.getInstance(), "upload", false);
jpUploads.getTreeTable().addFocusListener(fsl);
// upload status panel
TransferStatusPanel spUpload = new TransferStatusPanel();
spUpload.setName(XNap.tr("Upload"));
spUpload.setIcon(IconHelper.getIcon("up.png", 16, false));
jpUploads.getTransferTableModel().setListener(spUpload);
StatusBar.getInstance().addComponent(spUpload);
// transfer panel
updateTransfersPanel();
prefs.addPropertyChangeListener("useTabbedTransferPane", this);
}
public Action[] getActions()
{
return new Action[] { acSettings, null, acPeerMenu, null, acClear };
}
public void propertyChange(PropertyChangeEvent e)
{
updateTransfersPanel();
}
public void savePrefs()
{
if (jsp != null) {
prefs.setTransferDividerLocation(jsp.getDividerLocation());
}
}
/**
* @see xnap.gui.PeerProvider#getPeers()
*/
public Peer[] getPeers() {
if (getSelectedPanel() != null) {
return ((PeerProvider)getSelectedPanel()).getPeers();
}
return null;
}
/**
* Return the active table.
*
* @return null, if nothing is selected
*/
private TransferManagerPanel getSelectedPanel()
{
if (jpDownloads.getTreeTable().getSelectedRowCount() > 0) {
return jpDownloads;
}
else if (jpUploads.getTreeTable().getSelectedRowCount() > 0) {
return jpUploads;
}
return null;
}
/**
* Toggles transfers panel.
*/
private void updateTransfersPanel()
{
if (prefs.getUseTabbedTransferPane()) {
// tabbed pane
jtp = new JTabbedPane();
jtp.addTab(XNap.tr("Downloads"),
IconHelper.getTabTitleIcon("down.png"), jpDownloads);
jtp.addTab(XNap.tr("Uploads"),
IconHelper.getTabTitleIcon("up.png"), jpUploads);
if (jsp != null) {
prefs.setTransferDividerLocation(jsp.getDividerLocation());
remove(jsp);
jsp = null;
}
add(jtp, BorderLayout.CENTER);
}
else {
// split pane
jsp = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
jsp.setOneTouchExpandable(true);
jsp.setResizeWeight(1);
jsp.setDividerLocation(prefs.getTransferDividerLocation());
jsp.setBorder(GUIHelper.createEmptyBorder());
JPanel jpTemp = new JPanel(new BorderLayout());
JLabel jlTemp = new JLabel(XNap.tr("Downloads"));
jlTemp.setIcon(IconHelper.getIcon("down.png",
prefs.getUseSmallTransferIcons()
? 16 : 22, false));
jlTemp.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
jpTemp.add(jlTemp, BorderLayout.NORTH);
jpTemp.add(jpDownloads, BorderLayout.CENTER);
jsp.add(jpTemp, JSplitPane.TOP);
jpTemp = new JPanel(new BorderLayout());
jlTemp = new JLabel(XNap.tr("Uploads"));
jlTemp.setIcon(IconHelper.getIcon("up.png",
prefs.getUseSmallTransferIcons()
? 16 : 22, false));
jlTemp.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
jpTemp.add(jlTemp, BorderLayout.NORTH);
jpTemp.add(jpUploads, BorderLayout.CENTER);
jsp.add(jpTemp, JSplitPane.BOTTOM);
if (jtp != null) {
remove(jtp);
jtp = null;
}
add(jsp, BorderLayout.CENTER);
}
}
/**
* Returns the File objects in provided by <code>p</code>. Helper method
* that is used by {@link TransferPanel}.
*/
public static File[] getFiles(TransferProvider p)
{
Transfer[] transfers = p.getTransfers();
if (transfers != null) {
LinkedList files = new LinkedList();
for (int i = 0; i < transfers.length; i++) {
File file = transfers[i].getFile();
if (file != null) {
files.add(file);
}
}
return (File[])files.toArray(new File[0]);
}
return null;
}
/**
* Returns the Peer objects provided by <code>p</code>. Helper method
* that is used by {@link TransferPanel}.
*/
public static Peer[] getPeers(TransferProvider p)
{
Transfer[] transfers = p.getTransfers();
if (transfers != null) {
LinkedList peers = new LinkedList();
for (int i = 0; i < transfers.length; i++) {
Peer peer = transfers[i].getPeer();
if (peer != null) {
peers.add(peer);
}
}
return (Peer[])peers.toArray(new Peer[0]);
}
return null;
}
//--- Inner Class(es) ---
/**
* Makes sure only one table has selected transfers at a time.
*/
private class FocusSelectionListener extends FocusAdapter
{
public void focusGained(FocusEvent e)
{
if (e.getSource() == jpDownloads.getTreeTable()) {
jpUploads.getTreeTable().getSelectionModel().clearSelection();
}
else if (e.getSource() == jpUploads.getTreeTable()) {
jpDownloads.getTreeTable().getSelectionModel().clearSelection();
}
}
}
/**
* Clears all finished transfers.
*/
private class ClearAction extends AbstractAction
{
public ClearAction()
{
putValue(Action.NAME, XNap.tr("Clear Finished"));
putValue(Action.SHORT_DESCRIPTION,
XNap.tr("Clears all finished transfers."));
putValue(IconHelper.XNAP_ICON, "edittrash.png");
}
public void actionPerformed(ActionEvent event)
{
TransferManagerPanel panel = getSelectedPanel();
if (panel == null) {
DownloadManager.getInstance().clearDone();
UploadManager.getInstance().clearDone();
}
else {
panel.getManager().clearDone();
}
}
}
}
The table below shows all metrics for TransferPanel.java.



