📄 serverlist.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.serverlist;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.Color;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.JMThread;import org.jmule.core.edonkey.ServerManager;import org.jmule.core.edonkey.ServerManagerException;import org.jmule.core.edonkey.impl.ED2KServerLink;import org.jmule.core.edonkey.impl.Server;import org.jmule.countrylocator.CountryLocator;import org.jmule.ui.FlagPack.FlagSize;import org.jmule.ui.localizer.Localizer;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.CountryFlagPainter;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.TableItemCountryFlag;import org.jmule.ui.utils.NumberFormatter;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 ServerList extends JMTable<Server> implements Refreshable { private ServerManager servers_manager; private Color server_down_color = new Color(getDisplay(),178,178,178); private Color server_connected_color = new Color(getDisplay(),124,152,225); private Color server_default_color = new Color(getDisplay(),0,0,0); private static final FlagSize default_flag_size = FlagSize.S25x15; private Menu no_servers_menu; private Menu no_selected_servers_menu; private Menu selected_server_menu; private Menu selected_multiple_servers_menu; private MenuItem selected_server_connect; private MenuItem selected_server_disconnect; private MenuItem no_selection_menu_disconnect; private MenuItem server_disconnect_multiselect,server_connect_multiselect; private MenuItem server_remove_all,server_remove_all_multiselect; private MenuItem add_to_static_list,remove_from_static_list; private MenuItem multisel_add_to_static_list,multisel_remove_from_static_list; private enum ServerListStatus { NO_SERVERS,NO_SERVERS_SELECTED_DISCONNECTED,NO_SERVERS_SELECTED_CONNECTED,SELECTED_DISCONNECTED_SERVER_NOT_CONNECTED, SELECTED_MULTIPLE_SERVERS_NOT_CONNECTED, SELECTED_CONNECTED_SERVER, SELECTED_MULTIPLE_SERVERS_WITH_ONE_CONNECTED,SELECTED_MULTIPLE_SERVERS_CONNECTED, SELECTED_DISCONNECTED_SERVER_CONNECTED } public ServerList(Composite composite, final ServerManager server_manager) { super(composite, SWT.NONE); SWTServerListWrapper.getInstance().setServerList(this); this.servers_manager = server_manager; int width; width = SWTPreferences.getInstance().getColumnWidth(SWTConstants.SERVER_LIST_NAME_COLUMN_ID); addColumn(SWT.LEFT, SWTConstants.SERVER_LIST_NAME_COLUMN_ID,Localizer._("mainwindow.serverlisttab.serverlist.column.name"), "",width); width = SWTPreferences.getInstance().getColumnWidth(SWTConstants.SERVER_LIST_CC_COLUMN_ID); addColumn(SWT.CENTER, SWTConstants.SERVER_LIST_CC_COLUMN_ID,Localizer._("mainwindow.serverlisttab.serverlist.column.country_code"), _._("mainwindow.serverlisttab.serverlist.column.country_code.desc"),width); if (CountryLocator.getInstance().isServiceDown()) disableColumn(SWTConstants.SERVER_LIST_CC_COLUMN_ID); width = SWTPreferences.getInstance().getColumnWidth(SWTConstants.SERVER_LIST_FLAG_COLUMN_ID); addColumn(SWT.LEFT, SWTConstants.SERVER_LIST_FLAG_COLUMN_ID,Localizer._("mainwindow.serverlisttab.serverlist.column.country"), "",width); if (CountryLocator.getInstance().isServiceDown()) disableColumn(SWTConstants.SERVER_LIST_FLAG_COLUMN_ID); width = SWTPreferences.getInstance().getColumnWidth(SWTConstants.SERVER_LIST_IP_COLUMN_ID); addColumn(SWT.LEFT, SWTConstants.SERVER_LIST_IP_COLUMN_ID, Localizer._("mainwindow.serverlisttab.serverlist.column.address"), "",width); width = SWTPreferences.getInstance().getColumnWidth(SWTConstants.SERVER_LIST_DESCRIPTION_COLUMN_ID); addColumn(SWT.LEFT, SWTConstants.SERVER_LIST_DESCRIPTION_COLUMN_ID,Localizer._("mainwindow.serverlisttab.serverlist.column.description"), "",width); width = SWTPreferences.getInstance().getColumnWidth(SWTConstants.SERVER_LIST_PING_COLUMN_ID); addColumn(SWT.RIGHT, SWTConstants.SERVER_LIST_PING_COLUMN_ID,Localizer._("mainwindow.serverlisttab.serverlist.column.ping"), "",width); width = SWTPreferences.getInstance().getColumnWidth(SWTConstants.SERVER_LIST_USERS_COLUMN_ID); addColumn(SWT.RIGHT, SWTConstants.SERVER_LIST_USERS_COLUMN_ID,Localizer._("mainwindow.serverlisttab.serverlist.column.users"), "",width); width = SWTPreferences.getInstance().getColumnWidth(SWTConstants.SERVER_LIST_MAX_USERS_COLUMN_ID); addColumn(SWT.RIGHT, SWTConstants.SERVER_LIST_MAX_USERS_COLUMN_ID,Localizer._("mainwindow.serverlisttab.serverlist.column.max_users"), _._("mainwindow.serverlisttab.serverlist.column.maxusers.desc"),width); width = SWTPreferences.getInstance().getColumnWidth(SWTConstants.SERVER_LIST_FILES_COLUMN_ID); addColumn(SWT.RIGHT, SWTConstants.SERVER_LIST_FILES_COLUMN_ID,Localizer._("mainwindow.serverlisttab.serverlist.column.files"), "",width); width = SWTPreferences.getInstance().getColumnWidth(SWTConstants.SERVER_LIST_SOFT_LIMIT_COLUMN_ID); addColumn(SWT.RIGHT, SWTConstants.SERVER_LIST_SOFT_LIMIT_COLUMN_ID,Localizer._("mainwindow.serverlisttab.serverlist.column.soft_limit"), _._("mainwindow.serverlisttab.serverlist.column.soft_limit.desc"),width); width = SWTPreferences.getInstance().getColumnWidth(SWTConstants.SERVER_LIST_HARD_LIMIT_COLUMN_ID); addColumn(SWT.RIGHT, SWTConstants.SERVER_LIST_HARD_LIMIT_COLUMN_ID,Localizer._("mainwindow.serverlisttab.serverlist.column.hard_limit"), _._("mainwindow.serverlisttab.serverlist.column.hard_limit.desc"),width); width = SWTPreferences.getInstance().getColumnWidth(SWTConstants.SERVER_LIST_VERSION_COLUMN_ID); addColumn(SWT.RIGHT, SWTConstants.SERVER_LIST_VERSION_COLUMN_ID,Localizer._("mainwindow.serverlisttab.serverlist.column.software"), "",width); width = SWTPreferences.getInstance().getColumnWidth(SWTConstants.SERVER_LIST_STATIC_COLUMN_ID); addColumn(SWT.LEFT, SWTConstants.SERVER_LIST_STATIC_COLUMN_ID,Localizer._("mainwindow.serverlisttab.serverlist.column.static"), "",width); updateColumnOrder(); updateColumnVisibility(); final SWTServerListWrapper wrapper = SWTServerListWrapper.getInstance(); // No servers no_servers_menu = new Menu(this); MenuItem no_servers_server_add = new MenuItem (no_servers_menu, SWT.PUSH); no_servers_server_add.setText (Localizer._("mainwindow.serverlisttab.serverlist.popupmenu.add_server")); no_servers_server_add.setImage(SWTImageRepository.getImage("server_add.png")); no_servers_server_add.addSelectionListener(new SelectionAdapter() { public void widgetSelected(final SelectionEvent e) { showServerAddWindow(); } }); new MenuItem (no_servers_menu, SWT.SEPARATOR); MenuItem no_server_paste_ed2k_links = new MenuItem (no_servers_menu, SWT.PUSH); no_server_paste_ed2k_links.setText (Localizer._("mainwindow.serverlisttab.serverlist.popupmenu.paste_ed2k_links")); no_server_paste_ed2k_links.setImage(SWTImageRepository.getImage("ed2k_link_paste.png")); no_server_paste_ed2k_links.addSelectionListener(new SelectionAdapter() { public void widgetSelected(final SelectionEvent e) { pasteED2KLinks(); } }); new MenuItem (no_servers_menu, SWT.SEPARATOR); MenuItem no_server_column_setup = new MenuItem (no_servers_menu, SWT.PUSH); no_server_column_setup.setText (Localizer._("mainwindow.serverlisttab.serverlist.popupmenu.column_setup")); no_server_column_setup.setImage(SWTImageRepository.getImage("columns_setup.png")); no_server_column_setup.addSelectionListener(new SelectionAdapter() { public void widgetSelected(final SelectionEvent e) { showColumnEditorWindow(); } }); no_selected_servers_menu = new Menu(this); MenuItem no_selection_menu_add = new MenuItem(no_selected_servers_menu,SWT.PUSH); no_selection_menu_add.setText(Localizer._("mainwindow.serverlisttab.serverlist.popupmenu.add_server")); no_selection_menu_add.setImage(SWTImageRepository.getImage("server_add.png")); no_selection_menu_add.addSelectionListener(new SelectionAdapter() { public void widgetSelected(final SelectionEvent e) { showServerAddWindow(); } }); new MenuItem(no_selected_servers_menu,SWT.SEPARATOR); no_selection_menu_disconnect = new MenuItem(no_selected_servers_menu,SWT.PUSH); no_selection_menu_disconnect.setText(Localizer._("mainwindow.serverlisttab.serverlist.popupmenu.disconnect_from")); no_selection_menu_disconnect.setImage(SWTImageRepository.getImage("server_disconnect.png")); no_selection_menu_disconnect.addSelectionListener(new SelectionAdapter() { public void widgetSelected(final SelectionEvent e) { wrapper.disconnect(); } }); new MenuItem(no_selected_servers_menu,SWT.SEPARATOR); MenuItem no_selection_menu_remove_all = new MenuItem(no_selected_servers_menu,SWT.PUSH); no_selection_menu_remove_all.setText(Localizer._("mainwindow.serverlisttab.serverlist.popupmenu.remove_all")); no_selection_menu_remove_all.setImage(SWTImageRepository.getImage("remove_all.png")); no_selection_menu_remove_all.addSelectionListener(new SelectionAdapter() { public void widgetSelected(final SelectionEvent e) { clearServerList(); } }); new MenuItem(no_selected_servers_menu,SWT.SEPARATOR); MenuItem no_selection_menu_paste_ed2k = new MenuItem(no_selected_servers_menu,SWT.PUSH); no_selection_menu_paste_ed2k.setText(Localizer._("mainwindow.serverlisttab.serverlist.popupmenu.paste_ed2k_links")); no_selection_menu_paste_ed2k.setImage(SWTImageRepository.getImage("ed2k_link_paste.png")); no_selection_menu_paste_ed2k.addSelectionListener(new SelectionAdapter() { public void widgetSelected(final SelectionEvent e) { pasteED2KLinks(); } }); new MenuItem(no_selected_servers_menu,SWT.SEPARATOR); MenuItem no_selection_menu_column_setup = new MenuItem(no_selected_servers_menu,SWT.PUSH); no_selection_menu_column_setup.setText(Localizer._("mainwindow.serverlisttab.serverlist.popupmenu.column_setup")); no_selection_menu_column_setup.setImage(SWTImageRepository.getImage("columns_setup.png")); no_selection_menu_column_setup.addSelectionListener(new SelectionAdapter() { public void widgetSelected(final SelectionEvent e) { showColumnEditorWindow(); } }); selected_server_menu = new Menu(this); selected_server_connect = new MenuItem (selected_server_menu, SWT.PUSH); selected_server_connect.setText (Localizer._("mainwindow.serverlisttab.serverlist.popupmenu.connect_to")); selected_server_connect.setImage(SWTImageRepository.getImage("server_connect.png")); selected_server_connect.addSelectionListener(new SelectionAdapter() { public void widgetSelected(final SelectionEvent e) { Server selected_server = (Server) getSelectedObject(); wrapper.connectTo(selected_server); }} ); selected_server_disconnect = new MenuItem (selected_server_menu, SWT.PUSH); selected_server_disconnect.setText (Localizer._("mainwindow.serverlisttab.serverlist.popupmenu.disconnect_from")); selected_server_disconnect.setImage(SWTImageRepository.getImage("server_disconnect.png")); selected_server_disconnect.addSelectionListener(new SelectionAdapter() { public void widgetSelected(final SelectionEvent e) { if (wrapper.isAutoconnecting()) wrapper.stopConnecting(); else wrapper.disconnect(); }} ); new MenuItem (selected_server_menu, SWT.SEPARATOR); MenuItem server_add = new MenuItem (selected_server_menu, SWT.PUSH); server_add.setText (Localizer._("mainwindow.serverlisttab.serverlist.popupmenu.add_server")); server_add.setImage(SWTImageRepository.getImage("server_add.png")); server_add.addSelectionListener(new SelectionAdapter() { public void widgetSelected(final SelectionEvent e) { showServerAddWindow(); } }); final MenuItem server_remove = new MenuItem (selected_server_menu, SWT.PUSH); server_remove.setText (Localizer._("mainwindow.serverlisttab.serverlist.popupmenu.remove_server")); server_remove.setImage(SWTImageRepository.getImage("server_delete.png")); server_remove.addSelectionListener(new SelectionAdapter() { public void widgetSelected(final SelectionEvent e) { removeSelectedServers(); } }); server_remove_all = new MenuItem (selected_server_menu, SWT.PUSH); server_remove_all.setText (Localizer._("mainwindow.serverlisttab.serverlist.popupmenu.remove_all")); server_remove_all.setImage(SWTImageRepository.getImage("remove_all.png")); server_remove_all.addSelectionListener(new SelectionAdapter() { public void widgetSelected(final SelectionEvent e) { clearServerList(); } }); new MenuItem (selected_server_menu, SWT.SEPARATOR); final MenuItem server_copy_ed2k_link = new MenuItem (selected_server_menu, SWT.PUSH);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -