📄 sharedtab.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.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 + -