📄 downloadlist.java
字号:
/* * JMule - Java file sharing client * Copyright (C) 2007-2008 JMule team ( jmule@jmule.org / http://jmule.org ) * * Any parts of this program derived from other projects, or contributed * by third-party developers are copyrighted by their respective authors. * * 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, or (at your option) any later version. * * 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 org.jmule.ui.swt.maintabs.transfers;import java.text.DecimalFormat;import java.util.List;import org.eclipse.swt.SWT;import org.eclipse.swt.events.SelectionAdapter;import org.eclipse.swt.events.SelectionEvent;import org.eclipse.swt.graphics.Image;import org.eclipse.swt.widgets.Composite;import org.eclipse.swt.widgets.Menu;import org.eclipse.swt.widgets.MenuItem;import org.jmule.core.JMRunnable;import org.jmule.core.JMuleCore;import org.jmule.core.downloadmanager.DownloadManager;import org.jmule.core.downloadmanager.DownloadManagerListener;import org.jmule.core.downloadmanager.DownloadSession;import org.jmule.core.edonkey.impl.ED2KFileLink;import org.jmule.core.edonkey.impl.FileHash;import org.jmule.core.uploadmanager.UploadManager;import org.jmule.core.uploadmanager.UploadSession;import org.jmule.ui.localizer._;import org.jmule.ui.swt.Refreshable;import org.jmule.ui.swt.SWTConstants;import org.jmule.ui.swt.SWTImageRepository;import org.jmule.ui.swt.SWTPreferences;import org.jmule.ui.swt.SWTThread;import org.jmule.ui.swt.Utils;import org.jmule.ui.swt.common.GapListPainter;import org.jmule.ui.swt.mainwindow.MainWindow;import org.jmule.ui.swt.tables.BufferedTableRow;import org.jmule.ui.swt.tables.JMTable;import org.jmule.ui.swt.tables.TableItemGapList;import org.jmule.ui.utils.FileFormatter;import org.jmule.ui.utils.SpeedFormatter;import org.jmule.ui.utils.TimeFormatter;import org.jmule.util.Misc;/** * Created on Aug 02 2008 * @author binary256 * @version $$Revision: 1.7 $$ * Last changed by $$Author: binary256_ $$ on $$Date: 2008/10/16 18:20:02 $$ */public class DownloadList extends JMTable<DownloadSession> implements Refreshable,DownloadManagerListener { private JMuleCore _core; private DownloadManager download_manager; private UploadManager upload_manager; private Menu no_downloads_menu; private Menu single_download_selected; private Menu multiple_downloads_selected; private MenuItem set_download_status; private MenuItem multiple_start_download; private MenuItem multiple_stop_download; private enum DownloadListStatus { NO_DOWNLOADS, NO_DOWNLOADS_SELECTED, STOPPED_DOWNLOAD_SELECTED, STARTED_DOWNLOAD_SELECTED, MULTIPLE_STARTED_DOWNLOADS_SELECTED, MULTIPLE_STOPPED_DOWNLOADS_SELECTED, MULTIPLE_MISC_DOWNLOADS_SELECTED }; public DownloadList(Composite composite, JMuleCore core) { super(composite, SWT.NONE); _core = core; download_manager = core.getDownloadManager(); upload_manager = core.getUploadManager(); int width; width = swt_preferences.getColumnWidth(SWTConstants.DOWNLOAD_LIST_FILE_NAME_COLUMN_ID); addColumn(SWT.LEFT, SWTConstants.DOWNLOAD_LIST_FILE_NAME_COLUMN_ID, _._("mainwindow.transferstab.downloads.column.filename"),"", width); width = swt_preferences.getColumnWidth(SWTConstants.DOWNLOAD_LIST_SIZE_COLUMN_ID); addColumn(SWT.RIGHT, SWTConstants.DOWNLOAD_LIST_SIZE_COLUMN_ID, _._("mainwindow.transferstab.downloads.column.size"),"", width); width = swt_preferences.getColumnWidth(SWTConstants.DOWNLOAD_LIST_TRANSFERRED_COLUMN_ID); addColumn(SWT.RIGHT, SWTConstants.DOWNLOAD_LIST_TRANSFERRED_COLUMN_ID, _._("mainwindow.transferstab.downloads.column.transferred"),"", width); width = swt_preferences.getColumnWidth(SWTConstants.DOWNLOAD_LIST_DOWNLOAD_SPEED_COLUMN_ID); addColumn(SWT.RIGHT, SWTConstants.DOWNLOAD_LIST_DOWNLOAD_SPEED_COLUMN_ID, _._("mainwindow.transferstab.downloads.column.download_speed"), "", width); width = SWTPreferences.getInstance().getColumnWidth(SWTConstants.DOWNLOAD_LIST_UPLOAD_SPEED_COLUMN_ID); addColumn(SWT.RIGHT, SWTConstants.DOWNLOAD_LIST_UPLOAD_SPEED_COLUMN_ID, _._("mainwindow.transferstab.downloads.column.upload_speed"),"", width); width = swt_preferences.getColumnWidth(SWTConstants.DOWNLOAD_LIST_PROGRESS_COLUMN_ID); addColumn(SWT.LEFT, SWTConstants.DOWNLOAD_LIST_PROGRESS_COLUMN_ID, _._("mainwindow.transferstab.downloads.column.progress"),"", width); width = swt_preferences.getColumnWidth(SWTConstants.DOWNLOAD_LIST_COMPLETED_COLUMN_ID); addColumn(SWT.RIGHT, SWTConstants.DOWNLOAD_LIST_COMPLETED_COLUMN_ID, _._("mainwindow.transferstab.downloads.column.completed"),"", width); width = swt_preferences.getColumnWidth(SWTConstants.DOWNLOAD_LIST_SOURCES_COLUMN_ID); addColumn(SWT.RIGHT, SWTConstants.DOWNLOAD_LIST_SOURCES_COLUMN_ID, _._("mainwindow.transferstab.downloads.column.sources"),"", width); width = swt_preferences.getColumnWidth(SWTConstants.DOWNLOAD_LIST_REMAINING_COLUMN_ID); addColumn(SWT.RIGHT, SWTConstants.DOWNLOAD_LIST_REMAINING_COLUMN_ID, _._("mainwindow.transferstab.downloads.column.eta"), _._("mainwindow.transferstab.downloads.column.eta.desc"), width); width = swt_preferences.getColumnWidth(SWTConstants.DOWNLOAD_LIST_STATUS_COLUMN_ID); addColumn(SWT.LEFT, SWTConstants.DOWNLOAD_LIST_STATUS_COLUMN_ID, _._("mainwindow.transferstab.downloads.column.status"),"", width); width = swt_preferences.getColumnWidth(SWTConstants.DOWNLOAD_LIST_COMPLETE_SOURCES_COLUMN_ID); addColumn(SWT.RIGHT, SWTConstants.DOWNLOAD_LIST_COMPLETE_SOURCES_COLUMN_ID, _._("mainwindow.transferstab.downloads.column.completed_src"), "", width); width = swt_preferences.getColumnWidth(SWTConstants.DOWNLOAD_LIST_PARTIAL_SOURCES_COLUMN_ID); addColumn(SWT.RIGHT, SWTConstants.DOWNLOAD_LIST_PARTIAL_SOURCES_COLUMN_ID, _._("mainwindow.transferstab.downloads.column.partial_src"), "", width); updateColumnOrder(); updateColumnVisibility(); no_downloads_menu = new Menu(this); MenuItem paste_ed2k_file_links = new MenuItem(no_downloads_menu,SWT.PUSH); paste_ed2k_file_links.setText(_._("mainwindow.transferstab.downloads.popupmenu.paste_ed2k_links")); paste_ed2k_file_links.setImage(SWTImageRepository.getImage("ed2k_link_paste.png")); paste_ed2k_file_links.addSelectionListener(new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { pasteED2KLink(); }}); new MenuItem(no_downloads_menu,SWT.SEPARATOR); MenuItem column_setup = new MenuItem(no_downloads_menu,SWT.PUSH); column_setup.setText(_._("mainwindow.transferstab.downloads.popupmenu.column_setup")); column_setup.setImage(SWTImageRepository.getImage("columns_setup.png")); column_setup.addSelectionListener(new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { showColumnEditorWindow(); } }); single_download_selected = new Menu(this); set_download_status = new MenuItem(single_download_selected,SWT.PUSH); set_download_status.setText(_._("mainwindow.transferstab.downloads.popupmenu.start_download")); set_download_status.setImage(SWTImageRepository.getImage("start_download.png")); set_download_status.addSelectionListener(new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { if (getSelectedObject().isStarted()) stopSelectedDownloads(); else startSelectedDownloads(); }}); MenuItem single_cancel_download = new MenuItem(single_download_selected,SWT.PUSH); single_cancel_download.setText(_._("mainwindow.transferstab.downloads.popupmenu.cancel_download")); single_cancel_download.setImage(SWTImageRepository.getImage("cancel.png")); single_cancel_download.addSelectionListener(new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { cancelSelectedDownloads(); }}); new MenuItem(single_download_selected,SWT.SEPARATOR); MenuItem copy_ed2k_link = new MenuItem(single_download_selected,SWT.PUSH); copy_ed2k_link.setText(_._("mainwindow.transferstab.downloads.popupmenu.copy_ed2k_link")); copy_ed2k_link.setImage(SWTImageRepository.getImage("ed2k_link.png")); copy_ed2k_link.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { copyED2KLink(); } }); MenuItem paste_ed2k_link = new MenuItem(single_download_selected,SWT.PUSH); paste_ed2k_link.setText(_._("mainwindow.transferstab.downloads.popupmenu.paste_ed2k_link")); paste_ed2k_link.setImage(SWTImageRepository.getImage("ed2k_link_paste.png")); paste_ed2k_link.addSelectionListener(new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { pasteED2KLink(); }}); new MenuItem(single_download_selected,SWT.SEPARATOR); column_setup = new MenuItem(single_download_selected,SWT.PUSH); column_setup.setText(_._("mainwindow.transferstab.downloads.popupmenu.column_setup")); column_setup.setImage(SWTImageRepository.getImage("columns_setup.png")); column_setup.addSelectionListener(new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { showColumnEditorWindow(); }}); new MenuItem(single_download_selected,SWT.SEPARATOR); MenuItem download_details = new MenuItem(single_download_selected,SWT.PUSH); download_details.setText(_._("mainwindow.transferstab.downloads.popupmenu.details")); download_details.setImage(SWTImageRepository.getImage("info.png")); download_details.addSelectionListener(new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { try { DownloadInfoWindow download_info_window = new DownloadInfoWindow(getSelectedObject()); download_info_window.getCoreComponents(); download_info_window.initUIComponents(); }catch(Throwable es) { es.printStackTrace(); } }}); multiple_downloads_selected = new Menu(this); multiple_start_download = new MenuItem(multiple_downloads_selected,SWT.PUSH); multiple_start_download.setText(_._("mainwindow.transferstab.downloads.popupmenu.start_downloads")); multiple_start_download.setImage(SWTImageRepository.getImage("start_download.png")); multiple_start_download.addSelectionListener(new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { startSelectedDownloads(); }}); multiple_stop_download = new MenuItem(multiple_downloads_selected,SWT.PUSH); multiple_stop_download.setText(_._("mainwindow.transferstab.downloads.popupmenu.stop_downloads")); multiple_stop_download.setImage(SWTImageRepository.getImage("stop_download.png")); multiple_stop_download.addSelectionListener(new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { stopSelectedDownloads(); }}); MenuItem multiple_cancel_download = new MenuItem(multiple_downloads_selected,SWT.PUSH); multiple_cancel_download.setText(_._("mainwindow.transferstab.downloads.popupmenu.cancel_downloads")); multiple_cancel_download.setImage(SWTImageRepository.getImage("cancel.png")); multiple_cancel_download.addSelectionListener(new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { cancelSelectedDownloads(); }}); new MenuItem(multiple_downloads_selected,SWT.SEPARATOR); MenuItem multiple_copy_ed2k_links = new MenuItem(multiple_downloads_selected, SWT.PUSH); multiple_copy_ed2k_links.setText(_._("mainwindow.transferstab.downloads.popupmenu.copy_ed2k_links")); multiple_copy_ed2k_links.setImage(SWTImageRepository.getImage("ed2k_link_paste.png")); multiple_copy_ed2k_links.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { copyED2KLink(); } }); new MenuItem(multiple_downloads_selected,SWT.SEPARATOR); column_setup = new MenuItem(multiple_downloads_selected,SWT.PUSH); column_setup.setText(_._("mainwindow.transferstab.downloads.popupmenu.column_setup")); column_setup.setImage(SWTImageRepository.getImage("columns_setup.png")); column_setup.addSelectionListener(new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { showColumnEditorWindow(); }}); for(DownloadSession session : download_manager.getDownloads() ) { addDownlaodSession(session); } download_manager.addDownloadManagerListener(this); } private DownloadListStatus getSelectionStatus() { if ((getSelectionCount()==0)&&(getItems().length>0)) return DownloadListStatus.NO_DOWNLOADS_SELECTED; if ((getSelectionCount()==1)&&(getSelectedObject().isStarted())) return DownloadListStatus.STARTED_DOWNLOAD_SELECTED; if ((getSelectionCount()==1)&&(!getSelectedObject().isStarted())) return DownloadListStatus.STOPPED_DOWNLOAD_SELECTED; if (getSelectionCount()>1) { boolean contain_started = false;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -