📄 searchresulttable.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.swing.tables;import java.awt.Component;import java.awt.Toolkit;import java.awt.datatransfer.Clipboard;import java.awt.datatransfer.ClipboardOwner;import java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.Transferable;import java.awt.datatransfer.UnsupportedFlavorException;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.io.IOException;import java.util.Comparator;import java.util.LinkedList;import java.util.List;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JMenuItem;import javax.swing.JPopupMenu;import javax.swing.JTabbedPane;import javax.swing.JTable;import javax.swing.SwingConstants;import org.jdesktop.swingx.table.TableColumnExt;import org.jmule.core.JMuleCore;import org.jmule.core.JMuleCoreFactory;import org.jmule.core.downloadmanager.DownloadManager;import org.jmule.core.searchmanager.SearchManager;import org.jmule.core.searchmanager.SearchResult;import org.jmule.core.searchmanager.SearchResultItem;import org.jmule.core.searchmanager.SearchResultItemList;import org.jmule.core.sharingmanager.SharedFile;import org.jmule.core.sharingmanager.SharingManager;import org.jmule.ui.UIConstants;import org.jmule.ui.localizer._;import org.jmule.ui.swing.ImgRep;import org.jmule.ui.swing.SwingPreferences;import org.jmule.ui.swing.maintabs.search.SearchResultPanel;import org.jmule.ui.swing.models.SearchResultTableModel;import org.jmule.ui.utils.FileFormatter;import org.jmule.util.GeneralComparator;import org.jmule.util.Misc;/** * * Created on Sep 10, 2008 * @author javajox * @version $Revision: 1.2 $ * Last changed by $Author: javajox $ on $Date: 2008/10/19 18:01:34 $ */public class SearchResultTable extends JMTable { // =========================== Table cell renderers ============================================ class FileNameTableCellRenderer extends SearchResultTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); String fn = search_result.getFileName(); this.setHorizontalAlignment(SwingConstants.LEFT); this.setText(" " + fn); this.setToolTipText(fn); this.setIcon(new ImageIcon(UIConstants.getMimeURLByExtension(Misc.getFileExtension(fn)))); return this; } } class FileSizeTableCellRenderer extends SearchResultTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); this.setHorizontalAlignment(SwingConstants.RIGHT); this.setText(FileFormatter.formatFileSize(search_result.getFileSize()) + " "); return this; } } class AvailabilityTableCellRenderer extends SearchResultTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); this.setHorizontalAlignment(SwingConstants.CENTER); this.setText(search_result.getFileAviability()+""); return this; } } class CompleteSourcesTableCellRenderer extends SearchResultTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); this.setHorizontalAlignment(SwingConstants.CENTER); this.setText(search_result.getFileCompleteSrc()+""); return this; } } class TypeTableCellRenderer extends SearchResultTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); byte[] fileType = search_result.getMimeType(); this.setText(" " + FileFormatter.formatMimeType(fileType)); return this; } } class FileIDTableCellRenderer extends SearchResultTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { this.setHorizontalAlignment(SwingConstants.LEFT); super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); this.setText(search_result.getFileHash().getAsString()); return this; } } // ================================== end table cell renderers ====================================== private JMuleCore _core = JMuleCoreFactory.getSingleton(); private SearchManager _search_manager = _core.getSearchManager(); private DownloadManager _download_manager = _core.getDownloadManager(); private SharingManager _sharing_manager = _core.getSharingManager(); private SwingPreferences _pref = SwingPreferences.getSingleton(); private final Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); private JFrame parent; private SearchResult searchResult; private SearchResultItemList search_result_file_list; private JTabbedPane tabbedPanel; private SearchResultPanel search_result_pane; public SearchResultTable(JFrame parent, SearchResult searchResult, JTabbedPane tabbedPanel, SearchResultPanel search_result_pane) { this.parent = parent; this.searchResult = searchResult; this.tabbedPanel = tabbedPanel; this.search_result_pane = search_result_pane; search_result_file_list = this.searchResult.getSearchResultItemList(); init(); } private void init() { TableColumnExt file_name = new TableColumnExt(); file_name.setIdentifier(UIConstants.SEARCH_FILENAME_COLUMN_ID); file_name.setModelIndex(SearchResultTableModel.FILE_NAME); file_name.setVisible(_pref.isColumnVisible(UIConstants.SEARCH_FILENAME_COLUMN_ID)); file_name.setHeaderValue(_._("mainwindow.searchtab.column.filename")); file_name.setCellRenderer(new FileNameTableCellRenderer()); file_name.setComparator(new GeneralComparator("getFileName")); table_columns.add(file_name); TableColumnExt file_size = new TableColumnExt(); file_size.setIdentifier(UIConstants.SEARCH_FILESIZE_COLUMN_ID); file_size.setModelIndex(SearchResultTableModel.FILE_SIZE); file_size.setVisible(_pref.isColumnVisible(UIConstants.SEARCH_FILESIZE_COLUMN_ID)); file_size.setHeaderValue(_._("mainwindow.searchtab.column.filesize")); file_size.setCellRenderer(new FileSizeTableCellRenderer()); file_size.setComparator(new GeneralComparator("getFileSize")); table_columns.add(file_size); TableColumnExt availability = new TableColumnExt(); availability.setIdentifier(UIConstants.SEARCH_AVAILABILITY_COLUMN_ID); availability.setModelIndex(SearchResultTableModel.AVAILABILITY); availability.setVisible(_pref.isColumnVisible(UIConstants.SEARCH_AVAILABILITY_COLUMN_ID)); availability.setHeaderValue(_._("mainwindow.searchtab.column.availability")); availability.setCellRenderer(new AvailabilityTableCellRenderer()); availability.setComparator(new GeneralComparator("getFileAviability")); table_columns.add(availability); TableColumnExt complete_sources = new TableColumnExt(); complete_sources.setIdentifier(UIConstants.SEARCH_COMPLETESRC_COLUMN_ID); complete_sources.setModelIndex(SearchResultTableModel.COMPLETE_SOURCES); complete_sources.setVisible(_pref.isColumnVisible(UIConstants.SEARCH_COMPLETESRC_COLUMN_ID)); complete_sources.setHeaderValue(_._("mainwindow.searchtab.column.completesrcs")); complete_sources.setCellRenderer(new CompleteSourcesTableCellRenderer()); complete_sources.setComparator(new GeneralComparator("getFileCompleteSrc")); table_columns.add(complete_sources); TableColumnExt type = new TableColumnExt(); type.setIdentifier(UIConstants.SEARCH_FILE_TYPE_COLUMN_ID); type.setModelIndex(SearchResultTableModel.TYPE); type.setVisible(_pref.isColumnVisible(UIConstants.SEARCH_FILE_TYPE_COLUMN_ID)); type.setHeaderValue(_._("mainwindow.searchtab.column.filetype")); type.setCellRenderer(new TypeTableCellRenderer()); type.setComparator(new Comparator() { public int compare(Object o1, Object o2) { String file_type1 = FileFormatter.formatMimeType(((SearchResultItem)o1).getMimeType()); String file_type2 = FileFormatter.formatMimeType(((SearchResultItem)o2).getMimeType()); return Misc.compareAllObjects(file_type1, file_type2, "toString", true); } }); table_columns.add(type); TableColumnExt file_id = new TableColumnExt(); file_id.setIdentifier(UIConstants.SEARCH_FILE_ID_COLUMN_ID); file_id.setModelIndex(SearchResultTableModel.FILE_ID); file_id.setVisible(_pref.isColumnVisible(UIConstants.SEARCH_FILE_ID_COLUMN_ID)); file_id.setHeaderValue(_._("mainwindow.searchtab.column.fileid")); file_id.setCellRenderer(new FileIDTableCellRenderer()); file_id.setComparator(new GeneralComparator("getFileHash")); table_columns.add(file_id); SearchResultTableModel search_result_table_model = new SearchResultTableModel(searchResult); //SearchResultTableModel search_result_table_model; //SearchResultTableModel.setSearchResult(searchResult); //search_result_table_model = new SearchResultTableModel(searchResult); super.buildColumns(search_result_table_model); class PopupListener extends MouseAdapter { JMenuItem start_download, try_again, copy_ed2k_links, close, column_setup, properties; public PopupListener() { start_download = new JMenuItem("Download"); start_download.setIcon(ImgRep.getIcon("start_download.png")); start_download.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { List<SearchResultItem> new_files = getFilesByStatus(FileStatus.NEW); for(SearchResultItem result : new_files) { _download_manager.addDownload(result); _download_manager.startDownload(result.getFileHash()); } } }); try_again = new JMenuItem("Try again"); try_again.setIcon(ImgRep.getIcon("refresh.png")); try_again.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { System.out.println("Try again action performed"); } }); copy_ed2k_links = new JMenuItem("Copy ED2K link(s)"); copy_ed2k_links.setIcon(ImgRep.getIcon("ed2k_link.png")); copy_ed2k_links.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { clipboard.setContents(new Transferable() { public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { String ed2k_links = ""; SearchResultItem[] result_items = getSelectedFiles(); for(SearchResultItem result_item : result_items) { ed2k_links += result_item.getAsED2KLink().getAsString() + System.getProperty("line.separator"); } return ed2k_links; } public DataFlavor[] getTransferDataFlavors() { DataFlavor[] data_flavours = new DataFlavor[1]; data_flavours[0] = DataFlavor.stringFlavor; return data_flavours; } public boolean isDataFlavorSupported( DataFlavor flavor) { return flavor.isFlavorTextType(); } }, new ClipboardOwner() { public void lostOwnership(Clipboard clipboard, Transferable contents) { } }); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -