mytorrentsview.java
来自「Azureus is a powerful, full-featured, cr」· Java 代码 · 共 1,672 行 · 第 1/4 页
JAVA
1,672 行
/*
* Created on 30 juin 2003
*
* Copyright (C) 2004 Aelitis SARL, All rights Reserved
*
* 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; either version 2 of the License.
*
* 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 ( see the LICENSE file ).
*
* 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
*
* AELITIS, SARL au capital de 30,000 euros,
* 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France.
*/
package org.gudy.azureus2.ui.swt.views;
import java.util.*;
import java.io.File;
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowData;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.*;
import com.aelitis.azureus.core.*;
import org.gudy.azureus2.core3.category.Category;
import org.gudy.azureus2.core3.category.CategoryListener;
import org.gudy.azureus2.core3.category.CategoryManager;
import org.gudy.azureus2.core3.category.CategoryManagerListener;
import org.gudy.azureus2.core3.config.COConfigurationManager;
import org.gudy.azureus2.core3.config.ParameterListener;
import org.gudy.azureus2.core3.download.DownloadManager;
import org.gudy.azureus2.core3.download.DownloadManagerListener;
import org.gudy.azureus2.core3.global.GlobalManager;
import org.gudy.azureus2.core3.global.GlobalManagerDownloadRemovalVetoException;
import org.gudy.azureus2.core3.global.GlobalManagerListener;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.torrent.TOTorrent;
import org.gudy.azureus2.core3.tracker.client.TRTrackerClient;
import org.gudy.azureus2.core3.util.*;
import org.gudy.azureus2.plugins.ui.tables.TableManager;
import org.gudy.azureus2.ui.swt.views.table.TableColumnCore;
import org.gudy.azureus2.ui.swt.views.table.TableRowCore;
import org.gudy.azureus2.ui.swt.views.utils.ManagerUtils;
import org.gudy.azureus2.ui.swt.*;
import org.gudy.azureus2.ui.swt.exporttorrent.wizard.ExportTorrentWizard;
import org.gudy.azureus2.ui.swt.help.HealthHelpWindow;
import org.gudy.azureus2.ui.swt.mainwindow.MainWindow;
import org.gudy.azureus2.ui.swt.mainwindow.TorrentOpener;
import org.gudy.azureus2.ui.swt.maketorrent.MultiTrackerEditor;
import org.gudy.azureus2.ui.swt.maketorrent.TrackerEditorListener;
/** Displays a list of torrents in a table view.
*
* @author Olivier
* @author TuxPaper
* 2004/Apr/18: Use TableRowImpl instead of PeerRow
* 2004/Apr/20: Remove need for tableItemToObject
* 2004/Apr/21: extends TableView instead of IAbstractView
*/
public class MyTorrentsView
extends TableView
implements GlobalManagerListener,
ParameterListener,
DownloadManagerListener,
CategoryManagerListener,
CategoryListener
{
private AzureusCore azureus_core;
private GlobalManager globalManager;
private boolean isSeedingView;
private Composite cTablePanel;
private Font fontButton = null;
private Composite cCategories;
private Menu menuCategory;
private MenuItem menuItemChangeDir = null;
private Map downloadBars;
private AEMonitor downloadBars_mon = new AEMonitor( "MyTorrentsView:DL" );
private Category currentCategory;
private boolean skipDMAdding = true;
// table item index, where the drag has started
private int drag_drop_line_start = -1;
private boolean confirmDataDelete = COConfigurationManager.getBooleanParameter("Confirm Data Delete", true);
public
MyTorrentsView(
AzureusCore _azureus_core,
boolean isSeedingView,
TableColumnCore[] basicItems)
{
super((isSeedingView) ? TableManager.TABLE_MYTORRENTS_COMPLETE
: TableManager.TABLE_MYTORRENTS_INCOMPLETE,
"MyTorrentsView", basicItems, "#",
SWT.MULTI | SWT.FULL_SELECTION | SWT.BORDER);
ptIconSize = new Point(16, 16);
azureus_core = _azureus_core;
this.globalManager = azureus_core.getGlobalManager();
this.isSeedingView = isSeedingView;
downloadBars = MainWindow.getWindow().getDownloadBars();
currentCategory = CategoryManager.getCategory(Category.TYPE_ALL);
}
/* (non-Javadoc)
* @see org.gudy.azureus2.ui.swt.IView#initialize(org.eclipse.swt.widgets.Composite)
*/
public void initialize(Composite composite0) {
if(cTablePanel != null) {
return;
}
super.initialize(composite0);
createTabs();
createDragDrop();
COConfigurationManager.addParameterListener("Confirm Data Delete", this);
activateCategory(currentCategory);
CategoryManager.addCategoryManagerListener(this);
// globalManager.addListener sends downloadManagerAdded()'s when you addListener
// we don't need them..
skipDMAdding = true;
globalManager.addListener(this);
skipDMAdding = false;
}
public void tableStructureChanged() {
super.tableStructureChanged();
createDragDrop();
activateCategory(currentCategory);
}
public Composite createMainPanel(Composite composite) {
GridData gridData;
Composite panel = new Composite(composite, SWT.NULL);
GridLayout layout = new GridLayout();
layout.numColumns = 2;
layout.horizontalSpacing = 0;
layout.verticalSpacing = 0;
layout.marginHeight = 0;
layout.marginWidth = 0;
panel.setLayout(layout);
panel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
cTablePanel = new Composite(panel, SWT.NULL);
gridData = new GridData(GridData.FILL_BOTH);
gridData.horizontalSpan = 2;
cTablePanel.setLayoutData(gridData);
layout = new GridLayout(1, false);
layout.marginHeight = 0;
layout.marginWidth = 0;
layout.verticalSpacing = 0;
layout.horizontalSpacing = 0;
cTablePanel.setLayout(layout);
return panel;
}
private void createTabs() {
GridData gridData;
Category[] categories = CategoryManager.getCategories();
Arrays.sort(categories);
if (categories.length > 0) {
if (cCategories == null) {
cCategories = new Composite(getComposite(), SWT.NULL);
gridData = new GridData(GridData.HORIZONTAL_ALIGN_END);
cCategories.setLayoutData(gridData);
RowLayout rowLayout = new RowLayout();
rowLayout.marginTop = 0;
rowLayout.marginBottom = 0;
rowLayout.marginLeft = 0;
rowLayout.marginRight = 0;
rowLayout.spacing = 0;
rowLayout.wrap = true;
cCategories.setLayout(rowLayout);
Label l = new Label(getComposite(), SWT.WRAP);
gridData = new GridData();
gridData.horizontalIndent = 3;
l.setLayoutData(gridData);
Messages.setLanguageText(l, sTableID + "View.header");
cCategories.moveAbove(null);
l.moveAbove(null);
} else {
Control[] controls = cCategories.getChildren();
for (int i = 0; i < controls.length; i++) {
controls[i].dispose();
}
}
int iFontPixelsHeight = 11;
int iFontPointHeight = (iFontPixelsHeight * 72) / cCategories.getDisplay().getDPI().y;
for (int i = 0; i < categories.length; i++) {
final Button catButton = new Button(cCategories, SWT.TOGGLE);
if (i == 0 && fontButton == null) {
Font f = catButton.getFont();
FontData fd = f.getFontData()[0];
fd.setHeight(iFontPointHeight);
fontButton = new Font(cCategories.getDisplay(), fd);
}
catButton.setText("|");
catButton.setFont(fontButton);
catButton.pack(true);
if (catButton.computeSize(100,SWT.DEFAULT).y > 0) {
RowData rd = new RowData();
rd.height = catButton.computeSize(100,SWT.DEFAULT).y - 3 + catButton.getBorderWidth() * 2;
// Point pt = catButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
// rd.height = pt.y;
catButton.setLayoutData(rd);
}
String name = categories[i].getName();
if (categories[i].getType() == Category.TYPE_USER)
catButton.setText(name);
else
Messages.setLanguageText(catButton, name);
catButton.setData("Category", categories[i]);
if (categories[i] == currentCategory) {
catButton.setSelection(true);
}
catButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
Button curButton = (Button)e.widget;
boolean isEnabled = curButton.getSelection();
Control[] controls = cCategories.getChildren();
if (!isEnabled)
curButton = (Button)controls[0];
for (int i = 0; i < controls.length; i++) {
Button b = (Button)controls[i];
if (b != curButton && b.getSelection())
b.setSelection(false);
else if (b == curButton && !b.getSelection())
b.setSelection(true);
}
activateCategory( (Category)curButton.getData("Category") );
}
});
DropTarget tabDropTarget = new DropTarget(catButton, DND.DROP_DEFAULT | DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK);
Transfer[] types = new Transfer[] { TextTransfer.getInstance()};
tabDropTarget.setTransfer(types);
tabDropTarget.addDropListener(new DropTargetAdapter() {
public void dragOver(DropTargetEvent e) {
if(drag_drop_line_start >= 0)
e.detail = DND.DROP_MOVE;
else
e.detail = DND.DROP_NONE;
}
public void drop(DropTargetEvent e) {
e.detail = DND.DROP_NONE;
if(drag_drop_line_start >= 0) {
drag_drop_line_start = -1;
assignSelectedToCategory((Category)catButton.getData("Category"));
}
}
});
if (categories[i].getType() == Category.TYPE_USER) {
Menu menu = new Menu(getComposite().getShell(), SWT.POP_UP);
final MenuItem itemDelete = new MenuItem(menu, SWT.PUSH);
Messages.setLanguageText(itemDelete, "MyTorrentsView.menu.category.delete");
menu.setDefaultItem(itemDelete);
itemDelete.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
Category catToDelete = (Category)catButton.getData("Category");
if (catToDelete != null) {
java.util.List managers = catToDelete.getDownloadManagers();
// move to array,since setcategory removed it from the category,
// which would mess up our loop
DownloadManager dms[] = (DownloadManager [])managers.toArray(new DownloadManager[managers.size()]);
for (int i = 0; i < dms.length; i++) {
dms[i].getDownloadState().setCategory(null);
}
if (currentCategory == catToDelete)
activateCategory(CategoryManager.getCategory(Category.TYPE_ALL));
CategoryManager.removeCategory(catToDelete);
}
}
});
catButton.setMenu(menu);
}
}
cCategories.layout();
getComposite().layout();
}
}
public Table createTable() {
bSkipFirstColumn = true;
Table table = new Table(cTablePanel, SWT.MULTI | SWT.FULL_SELECTION | SWT.BORDER);
table.setLayoutData(new GridData(GridData.FILL_BOTH));
table.addKeyListener(createKeyListener());
table.addSelectionListener(new SelectionAdapter() {
public void widgetDefaultSelected(SelectionEvent e) {
DownloadManager dm = (DownloadManager)getFirstSelectedDataSource();
if (dm != null)
MainWindow.getWindow().openManagerView(dm);
}
});
cTablePanel.layout();
return table;
}
public void fillMenu(final Menu menu) {
final MenuItem itemDetails = new MenuItem(menu, SWT.PUSH);
Messages.setLanguageText(itemDetails, "MyTorrentsView.menu.showdetails"); //$NON-NLS-1$
menu.setDefaultItem(itemDetails);
itemDetails.setImage(ImageRepository.getImage("details"));
final MenuItem itemBar = new MenuItem(menu, SWT.CHECK);
Messages.setLanguageText(itemBar, "MyTorrentsView.menu.showdownloadbar"); //$NON-NLS-1$
itemBar.setImage(ImageRepository.getImage("downloadBar"));
new MenuItem(menu, SWT.SEPARATOR);
final MenuItem itemOpen = new MenuItem(menu, SWT.PUSH);
Messages.setLanguageText(itemOpen, "MyTorrentsView.menu.open"); //$NON-NLS-1$
itemOpen.setImage(ImageRepository.getImage("run"));
final MenuItem itemExport = new MenuItem(menu, SWT.PUSH);
Messages.setLanguageText(itemExport, "MyTorrentsView.menu.export"); //$NON-NLS-1$
itemExport.setImage(ImageRepository.getImage("export"));
final MenuItem itemHost = new MenuItem(menu, SWT.PUSH);
Messages.setLanguageText(itemHost, "MyTorrentsView.menu.host"); //$NON-NLS-1$
itemHost.setImage(ImageRepository.getImage("host"));
final MenuItem itemPublish = new MenuItem(menu, SWT.PUSH);
Messages.setLanguageText(itemPublish, "MyTorrentsView.menu.publish"); //$NON-NLS-1$
itemPublish.setImage(ImageRepository.getImage("publish"));
new MenuItem(menu, SWT.SEPARATOR);
final MenuItem itemMove = new MenuItem(menu, SWT.CASCADE);
Messages.setLanguageText(itemMove, "MyTorrentsView.menu.move"); //$NON-NLS-1$
itemMove.setImage(ImageRepository.getImage("move"));
final Menu menuMove = new Menu(getComposite().getShell(), SWT.DROP_DOWN);
itemMove.setMenu(menuMove);
final MenuItem itemMoveTop = new MenuItem(menuMove, SWT.PUSH);
Messages.setLanguageText(itemMoveTop, "MyTorrentsView.menu.moveTop"); //$NON-NLS-1$
itemMoveTop.setImage(ImageRepository.getImage("top"));
final MenuItem itemMoveUp = new MenuItem(menuMove, SWT.PUSH);
Messages.setLanguageText(itemMoveUp, "MyTorrentsView.menu.moveUp"); //$NON-NLS-1$
itemMoveUp.setImage(ImageRepository.getImage("up"));
final MenuItem itemMoveDown = new MenuItem(menuMove, SWT.PUSH);
Messages.setLanguageText(itemMoveDown, "MyTorrentsView.menu.moveDown"); //$NON-NLS-1$
itemMoveDown.setImage(ImageRepository.getImage("down"));
final MenuItem itemMoveEnd = new MenuItem(menuMove, SWT.PUSH);
Messages.setLanguageText(itemMoveEnd, "MyTorrentsView.menu.moveEnd"); //$NON-NLS-1$
itemMoveEnd.setImage(ImageRepository.getImage("bottom"));
final MenuItem itemSpeed = new MenuItem(menu, SWT.CASCADE);
Messages.setLanguageText(itemSpeed, "MyTorrentsView.menu.setSpeed"); //$NON-NLS-1$
itemSpeed.setImage(ImageRepository.getImage("speed"));
final Menu menuSpeed = new Menu(getComposite().getShell(), SWT.DROP_DOWN);
itemSpeed.setMenu(menuSpeed);
final MenuItem itemCurrentSpeed = new MenuItem(menuSpeed,SWT.PUSH);
itemCurrentSpeed.setEnabled(false);
new MenuItem(menuSpeed,SWT.SEPARATOR);
final MenuItem itemsSpeed[] = new MenuItem[12];
Listener itemsSpeedListener = new Listener() {
public void handleEvent(Event e) {
if(e.widget != null && e.widget instanceof MenuItem) {
MenuItem item = (MenuItem) e.widget;
int speed = item.getData("maxul") == null ? 0 : ((Integer)item.getData("maxul")).intValue();
setSelectedTorrentsSpeed(speed);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?