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

📄 searchresulttab.java

📁 JMule是一个基于Java开发
💻 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.search;import java.util.List;import org.eclipse.swt.SWT;import org.eclipse.swt.custom.CTabFolder;import org.eclipse.swt.custom.CTabItem;import org.eclipse.swt.events.DisposeEvent;import org.eclipse.swt.events.DisposeListener;import org.eclipse.swt.events.SelectionAdapter;import org.eclipse.swt.events.SelectionEvent;import org.eclipse.swt.graphics.Color;import org.eclipse.swt.graphics.Image;import org.eclipse.swt.layout.FillLayout;import org.eclipse.swt.widgets.Composite;import org.eclipse.swt.widgets.Menu;import org.eclipse.swt.widgets.MenuItem;import org.jmule.core.JMuleCore;import org.jmule.core.downloadmanager.DownloadManager;import org.jmule.core.edonkey.impl.FileHash;import org.jmule.core.searchmanager.SearchRequest;import org.jmule.core.searchmanager.SearchResult;import org.jmule.core.searchmanager.SearchResultItem;import org.jmule.core.sharingmanager.SharingManager;import org.jmule.ui.localizer._;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.tables.JMTable;import org.jmule.ui.utils.FileFormatter;import org.jmule.util.Misc;/** * Created on Aug 15, 2008 * @author binary256 * @version $Revision: 1.7 $ * Last changed by $Author: binary256_ $ on $Date: 2008/10/16 18:20:01 $ */public class SearchResultTab {	private boolean hasResults = false;		private CTabItem search_tab;		private SearchRequest request;	private JMTable<SearchResultItem> search_results;		private Menu no_items_menu, pop_up_menu;	private MenuItem download_item;	private MenuItem properties_item;	private JMuleCore _core;		private SearchResult search_result;		private Color color_red = SWTThread.getDisplay().getSystemColor(SWT.COLOR_RED);	//private Color color_green = new Color(SWTThread.getDisplay(),0,139,0);	//private Color color_black = new Color(SWTThread.getDisplay(),0,0,0);		public SearchResultTab(CTabFolder parent,SearchRequest searchRequest,JMuleCore core) {		search_tab = new CTabItem(parent,SWT.CLOSE);		_core = core;		request = searchRequest;		search_tab.setText(getTabTitle(request.getSearchQuery().getQuery()));		search_tab.setToolTipText(request.getSearchQuery().getQuery());		search_tab.setImage(SWTImageRepository.getImage("search_loading.png"));				Composite content = new Composite(parent,SWT.NONE);				search_tab.setControl(content);		content.setLayout(new FillLayout());				search_results = new JMTable<SearchResultItem>(content, SWT.NONE) {			protected int compareObjects(SearchResultItem object1,					SearchResultItem object2, int columnID, boolean order) {								if (columnID == SWTPreferences.SEARCH_FILENAME_COLUMN_ID) {					return Misc.compareAllObjects(object1, object2, "getFileName", order);				}								if (columnID == SWTPreferences.SEARCH_FILESIZE_COLUMN_ID)					return Misc.compareAllObjects(object1, object2, "getFileSize", order);								if (columnID == SWTPreferences.SEARCH_AVAILABILITY_COLUMN_ID)					return Misc.compareAllObjects(object1, object2, "getFileAviability", order);								if (columnID == SWTPreferences.SEARCH_COMPLETESRC_COLUMN_ID)					return Misc.compareAllObjects(object1, object2, "getFileCompleteSrc", order);								if (columnID == SWTPreferences.SEARCH_FILE_TYPE_COLUMN_ID) {					String type1 = new String(object1.getMimeType());					String type2 = new String(object2.getMimeType());										int result = type1.compareTo(type2);										if (order) return result;										return Misc.reverse(result);				}												if (columnID == SWTPreferences.SEARCH_FILE_ID_COLUMN_ID) {					String id1 = object1.getFileHash().getAsString();					String id2 = object2.getFileHash().getAsString();					int result = id1.compareTo(id2);					if (order) return result;					return Misc.reverse(result);				}								return 0;			}			final static int NO_FILE 		= 0x01;			final static int DOWNLOAD_FILE  = 0x02;			final static int SHARED_FILE 	= 0x03;						protected Menu getPopUpMenu() {				if (getItemCount()==0) return no_items_menu;				int download_status = NO_FILE;								SharingManager  sharing_manager  = _core.getSharingManager();				DownloadManager download_manager = _core.getDownloadManager();								for(SearchResultItem item : getSelectedObjects()) {					if (download_manager.hasDownload(item.getFileHash())) {						if (!download_manager.getDownload(item.getFileHash()).isStarted()) {							download_status = DOWNLOAD_FILE;						} else  							download_status = SHARED_FILE;						break;					}					if (sharing_manager.hasFile(item.getFileHash()))						download_status = SHARED_FILE;				}								switch(download_status) {					case NO_FILE : {						download_item.setEnabled(true);						break;					}										case SHARED_FILE : {						download_item.setEnabled(false);						break;					}									case DOWNLOAD_FILE : {						download_item.setEnabled(true);						break;					}				}				if (getSelectionCount()>1)					properties_item.setEnabled(false);				else					properties_item.setEnabled(true);								return pop_up_menu;			}			public void updateRow(SearchResultItem object) {								FileHash fileHash = object.getFileHash();				if (_core.getDownloadManager().hasDownload(fileHash)) {					setForegroundColor(object, color_red);				}				/*else					if (_core.getSharingManager().hasFile(fileHash))						setForegroundColor(object, color_green);*/								setRowText(object, SWTConstants.SEARCH_FILENAME_COLUMN_ID, object.getFileName());				Image file_icon = SWTImageRepository.getIconByExtension(object.getFileName());				setRowImage(object, SWTPreferences.SEARCH_FILENAME_COLUMN_ID, file_icon);								setRowText(object, SWTPreferences.SEARCH_FILESIZE_COLUMN_ID, FileFormatter.formatFileSize(object.getFileSize()));				setRowText(object, SWTPreferences.SEARCH_AVAILABILITY_COLUMN_ID, object.getFileAviability()+"");				setRowText(object, SWTPreferences.SEARCH_COMPLETESRC_COLUMN_ID, object.getFileCompleteSrc()+"");				byte[] fileType = object.getMimeType();								setRowText(object, SWTPreferences.SEARCH_FILE_TYPE_COLUMN_ID, FileFormatter.formatMimeType(fileType));				setRowText(object, SWTPreferences.SEARCH_FILE_ID_COLUMN_ID, object.getFileHash().getAsString());							}					};		int width;				width = SWTPreferences.getInstance().getColumnWidth(SWTConstants.SEARCH_FILENAME_COLUMN_ID); 		search_results.addColumn(SWT.LEFT,  SWTConstants.SEARCH_FILENAME_COLUMN_ID, _._("mainwindow.searchtab.column.filename"), "", width);				width = SWTPreferences.getInstance().getColumnWidth(SWTConstants.SEARCH_FILESIZE_COLUMN_ID);		search_results.addColumn(SWT.RIGHT, SWTConstants.SEARCH_FILESIZE_COLUMN_ID, _._("mainwindow.searchtab.column.filesize"), "", width);				width = SWTPreferences.getInstance().getColumnWidth(SWTConstants.SEARCH_AVAILABILITY_COLUMN_ID);		search_results.addColumn(SWT.RIGHT,  SWTConstants.SEARCH_AVAILABILITY_COLUMN_ID, _._("mainwindow.searchtab.column.availability"), "" , width);				width = SWTPreferences.getInstance().getColumnWidth(SWTConstants.SEARCH_COMPLETESRC_COLUMN_ID);		search_results.addColumn(SWT.RIGHT,  SWTConstants.SEARCH_COMPLETESRC_COLUMN_ID, _._("mainwindow.searchtab.column.completesrcs"), "", width);				width = SWTPreferences.getInstance().getColumnWidth(SWTConstants.SEARCH_FILE_TYPE_COLUMN_ID);		search_results.addColumn(SWT.LEFT,  SWTConstants.SEARCH_FILE_TYPE_COLUMN_ID, _._("mainwindow.searchtab.column.filetype"), "", width);				width = SWTPreferences.getInstance().getColumnWidth(SWTConstants.SEARCH_FILE_ID_COLUMN_ID);		search_results.addColumn(SWT.LEFT,  SWTConstants.SEARCH_FILE_ID_COLUMN_ID, _._("mainwindow.searchtab.column.fileid"), "", width);				search_results.updateColumnSettings();				no_items_menu = new Menu(search_results);				MenuItem no_items_close_tab = new MenuItem(no_items_menu,SWT.PUSH);		no_items_close_tab.setText(_._("mainwindow.searchtab.popupmenu.close"));		no_items_close_tab.setImage(SWTImageRepository.getImage("cancel.png"));		no_items_close_tab.addSelectionListener(new SelectionAdapter() {			public void widgetSelected(SelectionEvent arg0) {				search_tab.dispose();			}					});				MenuItem no_items_column_setup_item = new MenuItem(no_items_menu,SWT.PUSH);		no_items_column_setup_item.setText(_._("mainwindow.searchtab.popupmenu.column_setup"));		no_items_column_setup_item.setImage(SWTImageRepository.getImage("columns_setup.png"));		no_items_column_setup_item.addSelectionListener(new SelectionAdapter() {			public void widgetSelected(SelectionEvent arg0) {				search_results.showColumnEditorWindow();			}					});				pop_up_menu = new Menu(search_results);				download_item = new MenuItem(pop_up_menu,SWT.PUSH);		download_item.setText(_._("mainwindow.searchtab.popupmenu.download"));		download_item.setImage(SWTImageRepository.getImage("start_download.png"));		download_item.addSelectionListener(new SelectionAdapter() {			public void widgetSelected(SelectionEvent arg0) {				start_download();			}		});						MenuItem try_again = new MenuItem(pop_up_menu,SWT.PUSH);		try_again.setText(_._("mainwindow.searchtab.popupmenu.try_again"));		try_again.setImage(SWTImageRepository.getImage("refresh.png"));		try_again.addSelectionListener(new SelectionAdapter() {			public void widgetSelected(SelectionEvent arg0) {				retry();			}		});						MenuItem copy_ed2k_item = new MenuItem(pop_up_menu,SWT.PUSH);		copy_ed2k_item.setText(_._("mainwindow.searchtab.popupmenu.copy_ed2k_link"));		copy_ed2k_item.setImage(SWTImageRepository.getImage("ed2k_link.png"));		copy_ed2k_item.addSelectionListener(new SelectionAdapter() {			public void widgetSelected(SelectionEvent arg0) {				copyED2KLinks();			}		});						MenuItem close_item = new MenuItem(pop_up_menu,SWT.PUSH);		close_item.setText(_._("mainwindow.searchtab.popupmenu.close"));		close_item.setImage(SWTImageRepository.getImage("cancel.png"));		close_item.addSelectionListener(new SelectionAdapter() {			public void widgetSelected(SelectionEvent arg0) {				search_tab.dispose();			}					});				MenuItem column_setup_item = new MenuItem(pop_up_menu,SWT.PUSH);		column_setup_item.setText(_._("mainwindow.searchtab.popupmenu.column_setup"));		column_setup_item.setImage(SWTImageRepository.getImage("columns_setup.png"));		column_setup_item.addSelectionListener(new SelectionAdapter() {			public void widgetSelected(SelectionEvent arg0) {				search_results.showColumnEditorWindow();			}					});				new MenuItem(pop_up_menu,SWT.SEPARATOR);				properties_item = new MenuItem(pop_up_menu,SWT.PUSH);		properties_item.setText(_._("mainwindow.searchtab.popupmenu.properties"));		properties_item.setImage(SWTImageRepository.getImage("info.png"));		properties_item.addSelectionListener(new SelectionAdapter() {			public void widgetSelected(SelectionEvent arg0) {				SearchPropertiesWindow window = new SearchPropertiesWindow(search_results.getSelectedObject());				window.getCoreComponents();				window.initUIComponents();			}					});				search_tab.addDisposeListener(new DisposeListener() {			public void widgetDisposed(DisposeEvent arg0) {				_core.getSearchManager().removeSearch(request);				if (search_result!=null)					_core.getSearchManager().removeResult(search_result);			}					});	}		public SearchRequest getSerchRequest() {		return request;	}		public CTabItem getSearchTab() {		return search_tab;	}		public void addSearchResult(SearchResult searchResult) {		hasResults = true;		search_result = searchResult;		for(SearchResultItem item : searchResult.getSearchResultItemList()) {			search_results.addRow(item);		}		String query = searchResult.getSearchRequest().getSearchQuery().getQuery();		String title = getTabTitle(query)+" ("+searchResult.getSearchResultItemList().size()+")";		search_tab.setText(title);		search_tab.setImage(null);			}	private void start_download() {		List<SearchResultItem> list = search_results.getSelectedObjects();		DownloadManager download_manager = _core.getDownloadManager();		for(SearchResultItem item : list) {			if (download_manager.hasDownload(item.getFileHash())) {				if (!download_manager.getDownload(item.getFileHash()).isStarted())					download_manager.getDownload(item.getFileHash()).startDownload();				continue;			}			download_manager.addDownload(item);			download_manager.getDownload(item.getFileHash()).startDownload();			search_results.updateRow(item);		}	}		private void retry() {		hasResults = false;		_core.getSearchManager().removeSearch(request);		search_results.clear();		_core.getSearchManager().search(request);		search_tab.setText(getTabTitle(request.getSearchQuery().getQuery()));		search_tab.setImage(SWTImageRepository.getImage("search_loading.png"));	}		private void copyED2KLinks() {		List<SearchResultItem> list = search_results.getSelectedObjects();		String str = "";		String separator = System.getProperty("line.separator");		for(SearchResultItem item : list)			str+=item.getAsED2KLink().getAsString() + separator;		Utils.setClipBoardText(str);	}		private String getTabTitle(String query) {		String result = query;				if (result.length()>10)			result = result.substring(0, 10)+"...";				return result;	}	public boolean hasResults() {		return hasResults;	}	}

⌨️ 快捷键说明

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