⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sharedtab.java

📁 JMule是一个基于Java开发
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* *  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.shared;import java.io.File;import java.text.DecimalFormat;import java.util.Iterator;import java.util.LinkedList;import java.util.concurrent.CopyOnWriteArrayList;import org.apache.commons.io.FileUtils;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.layout.FillLayout;import org.eclipse.swt.layout.FormLayout;import org.eclipse.swt.layout.GridData;import org.eclipse.swt.layout.GridLayout;import org.eclipse.swt.program.Program;import org.eclipse.swt.widgets.Button;import org.eclipse.swt.widgets.Composite;import org.eclipse.swt.widgets.DirectoryDialog;import org.eclipse.swt.widgets.Group;import org.eclipse.swt.widgets.List;import org.eclipse.swt.widgets.Menu;import org.eclipse.swt.widgets.MenuItem;import org.jmule.core.JMIterable;import org.jmule.core.JMRunnable;import org.jmule.core.JMThread;import org.jmule.core.JMuleCore;import org.jmule.core.configmanager.ConfigurationAdapter;import org.jmule.core.configmanager.ConfigurationListener;import org.jmule.core.configmanager.ConfigurationManager;import org.jmule.core.sharingmanager.CompletedFile;import org.jmule.core.sharingmanager.PartialFile;import org.jmule.core.sharingmanager.SharedFile;import org.jmule.core.sharingmanager.SharingManager;import org.jmule.ui.JMuleUIManager;import org.jmule.ui.localizer._;import org.jmule.ui.swt.GUIUpdater;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.SashControl;import org.jmule.ui.swt.maintabs.AbstractTab;import org.jmule.ui.swt.skin.SWTSkin;import org.jmule.ui.swt.tables.JMTable;import org.jmule.ui.utils.FileFormatter;import org.jmule.util.Misc;/** * @author binary256 * @version $$Revision: 1.7 $$ * Last changed by $$Author: binary256_ $$ on $$Date: 2008/10/16 18:20:01 $$ */public class SharedTab extends AbstractTab {	private int no_remove_id_start = 0;	private int no_remove_id_end = 2;		private JMTable<SharedFile> shared_files_table;		private JMuleCore _core;	private SharingManager sharing_manager;	private ConfigurationManager config_manager;		private List shared_dir_list;		private Button remove_button;	private Button clear_button;		private Menu no_items_menu;	private Menu select_menu;	private MenuItem properties_menu_item;	private MenuItem open_selected_menu_item;	private MenuItem copy_ed2k_link_menu_item;	private MenuItem remove_from_disk_menu_item;		private String last_selection = "";		private Refreshable refreshable;		private Group shared_files_group;	private Group dir_list_content;		private ConfigurationListener config_listener;		public SharedTab(Composite shell,JMuleCore core) {		super(shell);				_core = core;		sharing_manager = _core.getSharingManager();		config_manager = _core.getConfigurationManager();;		SWTSkin skin = null;		try {		    skin = (SWTSkin)JMuleUIManager.getJMuleUI().getSkin();		}catch(Throwable t) {}				setLayout(new FormLayout());				Composite dir_list = new Composite(this,SWT.NONE);		Composite shared_files = new Composite(this,SWT.NONE);				SashControl.createHorizontalSash(50, 50, this, dir_list, shared_files);				GridLayout layout;				dir_list.setLayout(new FillLayout());		dir_list_content = new Group(dir_list,SWT.NONE);		java.util.List<File> dir = _core.getConfigurationManager().getSharedFolders();		if (dir != null)			dir_list_content.setText(_._("mainwindow.sharedtab.group.shared_dirs")+"("+dir.size()+")");		else			dir_list_content.setText(_._("mainwindow.sharedtab.group.shared_dirs")+"(0)");				config_listener = new ConfigurationAdapter() {			public void sharedDirectoriesChanged(java.util.List<File> sharedDirs) {				dir_list_content.setText(_._("mainwindow.sharedtab.group.shared_dirs")+"("+sharedDirs.size()+")");			}		};				layout = new GridLayout(1,false);		layout.marginWidth  = 2;		layout.marginHeight = 2;		dir_list_content.setLayout(layout);				Composite control_block = new Composite(dir_list_content,SWT.NONE);		layout = new GridLayout(4,false);		layout.marginHeight = 0;		layout.marginWidth  = 0;		control_block.setLayout(layout);		GridData data = new GridData();		data.widthHint = 400;		control_block.setLayoutData(data);				Button add_button = new Button(control_block,SWT.NONE);		add_button.setFont(skin.getButtonFont());		add_button.setImage(SWTImageRepository.getImage("add.png"));		add_button.setText(_._("mainwindow.sharedtab.button.add"));		add_button.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));		add_button.setAlignment(SWT.LEFT);		add_button.addSelectionListener(new SelectionAdapter() {			public void widgetSelected(SelectionEvent event) {				DirectoryDialog dir_dialog = new DirectoryDialog (getShell(),SWT.MULTI | SWT.OPEN);				String directory = dir_dialog.open();				if (directory == null) return ;				java.util.List<File> shared_dirs = config_manager.getSharedFolders();				java.util.List<File> newDirs = new LinkedList<File>();				if (shared_dirs == null)					shared_dirs = new CopyOnWriteArrayList<File>();				else					shared_dirs = new CopyOnWriteArrayList<File>(shared_dirs);								java.util.List<File> already_exist_list = org.jmule.core.utils.FileUtils.extractNewFolders(new File[]{new File(directory)},shared_dirs,newDirs);									 				if (already_exist_list.size()!=0) {					AlreadyExistDirsWindow window = new AlreadyExistDirsWindow(already_exist_list);					window.getCoreComponents();					window.initUIComponents();				} 				shared_dirs.addAll(newDirs);				config_manager.setSharedFolders(shared_dirs);		} });						remove_button = new Button(control_block,SWT.NONE);		remove_button.setFont(skin.getButtonFont());		remove_button.setText(_._("mainwindow.sharedtab.button.remove"));		remove_button.setImage(SWTImageRepository.getImage("remove.png"));		remove_button.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));		remove_button.setAlignment(SWT.LEFT);		remove_button.setEnabled(false);		remove_button.addSelectionListener(new SelectionAdapter() {			public void widgetSelected(SelectionEvent event) {				removeSelectedDir();		} });				clear_button = new Button(control_block,SWT.NONE);		clear_button.setFont(skin.getButtonFont());		clear_button.setText(_._("mainwindow.sharedtab.button.clear"));		clear_button.setImage(SWTImageRepository.getImage("remove_all.png"));		clear_button.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));		clear_button.setAlignment(SWT.LEFT);		clear_button.addSelectionListener(new SelectionAdapter() {			public void widgetSelected(SelectionEvent event) {				clearDirList();		} });				Button reload_button = new Button(control_block,SWT.NONE);		reload_button.setFont(skin.getButtonFont());		reload_button.setText(_._("mainwindow.sharedtab.button.reload"));		reload_button.setImage(SWTImageRepository.getImage("refresh.png"));		reload_button.addSelectionListener(new SelectionAdapter() {			public void widgetSelected(SelectionEvent event) {				sharing_manager.loadCompletedFiles();			}		});				shared_dir_list = new List (dir_list_content, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL | SWT.H_SCROLL);		shared_dir_list.setLayoutData(new GridData(GridData.FILL_BOTH));						shared_dir_list.addSelectionListener(new SelectionAdapter() {			public void widgetSelected(SelectionEvent event) {				String selected_dir = shared_dir_list.getSelection()[0];				if (selected_dir.equals(last_selection)) return ;				last_selection = selected_dir;				updateFileList(selected_dir);								int selection_id = shared_dir_list.getSelectionIndex();				if ((selection_id>=no_remove_id_start)&&(selection_id<=no_remove_id_end)) {					remove_button.setEnabled(false);					return;				}				remove_button.setEnabled(true);			}		});		shared_files.setLayout(new FillLayout());		shared_files_group = new Group(shared_files,SWT.NONE);		shared_files_group.setText(_._("mainwindow.sharedtab.group.shared_files"));		shared_files_group.setLayout(new FillLayout());		shared_files_table = new JMTable<SharedFile>(shared_files_group, SWT.NONE){			protected int compareObjects(SharedFile object1, SharedFile object2,					int columnID, boolean order) {				if (columnID == SWTConstants.SHARED_LIST_FILE_NAME_COLUMN_ID) {					return Misc.compareAllObjects(object1, object2, "getSharingName", order);				}								if (columnID == SWTConstants.SHARED_LIST_FILE_SIZE_COLUMN_ID) {					return Misc.compareAllObjects(object1, object2, "length", order);				}								if (columnID == SWTConstants.SHARED_LIST_FILE_TYPE_COLUMN_ID) {					String type1 = FileFormatter.formatMimeType(object1.getMimeType());					String type2 = FileFormatter.formatMimeType(object2.getMimeType());					int result = type1.compareTo(type2);					if (order)						return result;					else						return Misc.reverse(result);				}								if (columnID == SWTConstants.SHARED_LIST_COMPLETED_COLUMN_ID) {					double value1 = 100;					double value2 = 100;					if (object1 instanceof PartialFile)						value1 = ((PartialFile)object1).getPercentCompleted();					if (object2 instanceof PartialFile)						value2 = ((PartialFile)object2).getPercentCompleted();					int result = 0;					if (value1>value2)						result = 1;					if (value2>value1)						result = -1;					if (order) 						return result;					else						return Misc.reverse(result);				}								if (columnID == SWTConstants.SHARED_LIST_FILE_ID_COLUMN_ID) {					String hash1 = object1.getFileHash().getAsString();					String hash2 = object2.getFileHash().getAsString();					int result = hash1.compareTo(hash2);					if (order) 						return result;					else						return Misc.reverse(result);									}								return 0;			}			protected Menu getPopUpMenu() {				if (getSelectionCount()<1)					return no_items_menu;				properties_menu_item.setEnabled(true);				copy_ed2k_link_menu_item.setEnabled(true);				remove_from_disk_menu_item.setEnabled(true);				if (getSelectedObject().getHashSet() == null) {					properties_menu_item.setEnabled(false);					copy_ed2k_link_menu_item.setEnabled(false);					remove_from_disk_menu_item.setEnabled(false);				}				if (getSelectionCount()>1)					properties_menu_item.setEnabled(false);				open_selected_menu_item.setEnabled(false);				if (selectedRunnableFiles())					open_selected_menu_item.setEnabled(true);				return select_menu;			}			int HASHED 		= 0x01;			int UNHASHED 	= 0x02;			int HASHING		= 0x03;						public void updateRow(SharedFile object) {				int status = HASHED;								java.util.List<CompletedFile> file_list = sharing_manager.getUnhashedFiles();				if (file_list != null) {					for(CompletedFile unhashed_file : file_list) {						if (unhashed_file.getFile().equals(object.getFile())) {							status = UNHASHED;							break;						}					}				}								SharedFile hashing_file = sharing_manager.getCurrentHashingFile();				if (hashing_file != null)					if (object.getFile().equals(hashing_file.getFile()))						status = HASHING;												Image icon = SWTImageRepository.getIconByExtension(object.getSharingName());				setRowImage(object, SWTConstants.SHARED_LIST_FILE_NAME_COLUMN_ID, icon);								String text = object.getSharingName();								setRowText(object,  SWTConstants.SHARED_LIST_FILE_NAME_COLUMN_ID, text);				long file_size = object.getFile().length();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -