📄 filesview.java
字号:
/*
* Created on 17 juil. 2003
*
* Copyright (C) 2004, 2005, 2006 Aelitis SAS, 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, SAS au capital de 46,603.30 euros,
* 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France.
*/
package org.gudy.azureus2.ui.swt.views;
import java.io.File;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.program.Program;
import org.eclipse.swt.widgets.*;
import org.gudy.azureus2.core3.config.COConfigurationManager;
import org.gudy.azureus2.core3.disk.DiskManagerFileInfo;
import org.gudy.azureus2.core3.download.DownloadManager;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.plugins.ui.tables.TableManager;
import org.gudy.azureus2.ui.swt.MessageBoxWindow;
import org.gudy.azureus2.ui.swt.Messages;
import org.gudy.azureus2.ui.swt.Utils;
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.tableitems.files.*;
import org.gudy.azureus2.ui.swt.views.utils.ManagerUtils;
/**
* @author Olivier
* @author TuxPaper
* 2004/Apr/23: extends TableView instead of IAbstractView
*/
public class FilesView
extends TableView
{
boolean refreshing = false;
private static final TableColumnCore[] basicItems = {
new NameItem(),
new PathItem(),
new SizeItem(),
new DoneItem(),
new PercentItem(),
new FirstPieceItem(),
new PieceCountItem(),
new RemainingPiecesItem(),
new ProgressGraphItem(),
new ModeItem(),
new PriorityItem(),
new StorageTypeItem()
};
private DownloadManager manager = null;
public static boolean show_full_path = COConfigurationManager.getBooleanParameter( "FilesView.show.full.path", false );
private MenuItem path_item;
/**
* Initialize
*/
public FilesView() {
super(TableManager.TABLE_TORRENT_FILES, "FilesView", basicItems,
"firstpiece", SWT.MULTI | SWT.FULL_SELECTION | SWT.VIRTUAL);
setRowDefaultIconSize(new Point(16, 16));
bEnableTabViews = true;
}
public void dataSourceChanged(Object newDataSource) {
if (newDataSource == null)
manager = null;
else if (newDataSource instanceof Object[])
manager = (DownloadManager)((Object[])newDataSource)[0];
else
manager = (DownloadManager)newDataSource;
removeAllTableRows();
}
public void runDefaultAction() {
DiskManagerFileInfo fileInfo = (DiskManagerFileInfo) getFirstSelectedDataSource();
if (fileInfo != null
&& fileInfo.getAccessMode() == DiskManagerFileInfo.READ)
Program.launch(fileInfo.getFile(true).toString());
}
public void fillMenu(final Menu menu) {
Object[] infos = getSelectedDataSources();
boolean hasSelection = (infos.length > 0);
final MenuItem itemOpen = new MenuItem(menu, SWT.PUSH);
Messages.setLanguageText(itemOpen, "FilesView.menu.open");
Utils.setMenuItemImage(itemOpen, "run");
// Invoke open on enter, double click
menu.setDefaultItem(itemOpen);
// Explore (Copied from MyTorrentsView)
final MenuItem itemExplore = new MenuItem(menu, SWT.PUSH);
Messages.setLanguageText(itemExplore, "MyTorrentsView.menu.explore");
itemExplore.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
Object[] dataSources = getSelectedDataSources();
for (int i = dataSources.length - 1; i >= 0; i--) {
DiskManagerFileInfo info = (DiskManagerFileInfo)dataSources[i];
if (info != null)
ManagerUtils.open(info.getFile(true));
}
}
});
itemExplore.setEnabled(hasSelection);
final MenuItem itemRename = new MenuItem(menu, SWT.PUSH);
Messages.setLanguageText(itemRename, "FilesView.menu.rename");
final MenuItem itemPriority = new MenuItem(menu, SWT.CASCADE);
Messages.setLanguageText(itemPriority, "FilesView.menu.setpriority"); //$NON-NLS-1$
final Menu menuPriority = new Menu(getComposite().getShell(), SWT.DROP_DOWN);
itemPriority.setMenu(menuPriority);
final MenuItem itemHigh = new MenuItem(menuPriority, SWT.CASCADE);
itemHigh.setData("Priority", new Integer(0));
Messages.setLanguageText(itemHigh, "FilesView.menu.setpriority.high"); //$NON-NLS-1$
final MenuItem itemLow = new MenuItem(menuPriority, SWT.CASCADE);
itemLow.setData("Priority", new Integer(1));
Messages.setLanguageText(itemLow, "FilesView.menu.setpriority.normal"); //$NON-NLS-1$
final MenuItem itemSkipped = new MenuItem(menuPriority, SWT.CASCADE);
itemSkipped.setData("Priority", new Integer(2));
Messages.setLanguageText(itemSkipped, "FilesView.menu.setpriority.skipped"); //$NON-NLS-1$
final MenuItem itemDelete = new MenuItem(menuPriority, SWT.CASCADE);
itemDelete.setData("Priority", new Integer(3));
Messages.setLanguageText(itemDelete, "wizard.multitracker.delete"); // lazy but we're near release
new MenuItem(menu, SWT.SEPARATOR);
super.fillMenu(menu);
if (!hasSelection) {
itemOpen.setEnabled(false);
itemPriority.setEnabled(false);
itemRename.setEnabled(false);
return;
}
boolean open = true;
boolean all_compact = true;
for (int i = 0; i < infos.length; i++) {
DiskManagerFileInfo file_info = (DiskManagerFileInfo) infos[i];
if (file_info.getAccessMode() != DiskManagerFileInfo.READ) {
open = false;
}
if (file_info.getStorageType() != DiskManagerFileInfo.ST_COMPACT) {
all_compact = false;
}
}
// we can only open files if they are read-only
itemOpen.setEnabled(open);
// can't rename files for non-persistent downloads (e.g. shares) as these
// are managed "externally"
itemRename.setEnabled(manager.isPersistent());
// no point in changing priority of completed downloads
itemPriority.setEnabled(!manager.isDownloadComplete());
itemDelete.setEnabled(!(manager.isDownloadComplete() || all_compact));
itemOpen.addListener(SWT.Selection, new SelectedTableRowsListener() {
public void run(TableRowCore row) {
DiskManagerFileInfo fileInfo = (DiskManagerFileInfo)row.getDataSource(true);
if (fileInfo.getAccessMode() == DiskManagerFileInfo.READ)
Program.launch(fileInfo.getFile(true).toString());
}
});
itemRename.addListener(
SWT.Selection,
new Listener()
{
public void
handleEvent(Event event)
{
rename( getSelectedRows());
}
});
Listener priorityListener = new Listener() {
public void handleEvent(Event event) {
changePriority(((Integer) event.widget.getData("Priority")).intValue(),
getSelectedRows());
}
};
itemHigh.addListener(SWT.Selection, priorityListener);
itemLow.addListener(SWT.Selection, priorityListener);
itemSkipped.addListener(SWT.Selection, priorityListener);
itemDelete.addListener(SWT.Selection, priorityListener);
}
protected void
rename(
TableRowCore[] rows )
{
if ( manager == null ){
return;
}
boolean paused = false;
try{
for (int i=0;i<rows.length;i++){
TableRowCore row = rows[i];
DiskManagerFileInfo fileInfo = (DiskManagerFileInfo)row.getDataSource(true);
FileDialog fDialog = new FileDialog(getComposite().getShell(), SWT.SYSTEM_MODAL | SWT.SAVE);
File existing_file = fileInfo.getFile(true);
fDialog.setFilterPath(existing_file.getParent());
fDialog.setFileName( existing_file.getName());
fDialog.setText( MessageText.getString("FilesView.rename.choose.path"));
String res = fDialog.open();
if ( res != null ){
if ( !paused ){
paused = manager.pause();
}
File target = new File( res );
boolean ok = false;
if ( target.exists()){
if ( target.equals( existing_file )){
// nothing to do
}else if ( !existing_file.exists()){
ok = true;
}else{
if ( MessageBoxWindow.open(
"FilesView.messagebox.rename.id",
SWT.OK | SWT.CANCEL,
SWT.OK,
getComposite().getDisplay(),
MessageBoxWindow.ICON_WARNING,
MessageText.getString( "FilesView.rename.confirm.delete.title" ),
MessageText.getString( "FilesView.rename.confirm.delete.text", new String[]{ existing_file.toString()})) == SWT.OK ){
ok = true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -