📄 statusbar.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.mainwindow;import java.util.ArrayList;import java.util.List;import org.eclipse.swt.SWT;import org.eclipse.swt.events.MenuDetectEvent;import org.eclipse.swt.events.MenuDetectListener;import org.eclipse.swt.graphics.Image;import org.eclipse.swt.layout.GridData;import org.eclipse.swt.layout.GridLayout;import org.eclipse.swt.widgets.Composite;import org.eclipse.swt.widgets.Label;import org.jmule.core.JMConstants;import org.jmule.core.JMuleCore;import org.jmule.core.configmanager.ConfigurationAdapter;import org.jmule.core.configmanager.ConfigurationManager;import org.jmule.core.edonkey.impl.ClientID;import org.jmule.core.edonkey.impl.Server;import org.jmule.core.peermanager.PeerManager;import org.jmule.ui.JMuleUIManager;import org.jmule.ui.localizer.Localizer;import org.jmule.ui.localizer._;import org.jmule.ui.swt.GUIUpdater;import org.jmule.ui.swt.Refreshable;import org.jmule.ui.swt.SWTImageRepository;import org.jmule.ui.swt.SWTPreferences;import org.jmule.ui.swt.SWTThread;import org.jmule.ui.swt.common.SpeedScaleShell;import org.jmule.ui.swt.maintabs.serverlist.SWTServerListWrapper;import org.jmule.ui.swt.skin.SWTSkin;import org.jmule.ui.utils.SpeedFormatter;import org.jmule.util.Convert;/** * * @author binary * @version $Revision: 1.4 $ * Last changed by $Author: binary256_ $ on $Date: 2008/10/16 18:20:01 $ */public class StatusBar extends Composite { private GridData grid_data; private Label img_label,connection_status_label,client_id_label,downimg_label,downspeed_label,upimg_label,upspeed_label; private JMuleCore _core; private ConfigurationManager config_manager ; private PeerManager peer_manager ; public StatusBar(Composite parent,JMuleCore core) { super(parent, SWT.NONE); _core = core; config_manager = _core.getConfigurationManager(); peer_manager = _core.getPeerManager(); SWTServerListWrapper.getInstance().setStatusBar(this); SWTSkin skin = null; try { skin = (SWTSkin)JMuleUIManager.getJMuleUI().getSkin(); }catch(Throwable t) {} grid_data = new GridData(GridData.FILL_HORIZONTAL); grid_data.heightHint = 16; setLayoutData(grid_data); GridLayout layout = new GridLayout(8,false); layout.marginWidth = 0; layout.verticalSpacing = 0; layout.marginHeight = 0; setLayout(layout); img_label = new Label(this,SWT.NONE); Image img = SWTImageRepository.getImage("toolbar_disconnected.png"); img_label.setImage(img); connection_status_label = new Label(this,SWT.NONE); connection_status_label.setFont(skin.getLabelFont()); connection_status_label.setText(Localizer._("mainwindow.statusbar.label.disconnected")); GridData data = new GridData(); data.heightHint = 16; new Label(this,SWT.SEPARATOR | SWT.VERTICAL).setLayoutData(data); client_id_label = new Label(this,SWT.NONE); client_id_label.setFont(skin.getLabelFont()); client_id_label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING)); downimg_label = new Label(this,SWT.NONE); downimg_label.setImage(SWTImageRepository.getImage("down.gif")); downimg_label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); downspeed_label = new Label(this,SWT.NONE); downspeed_label.setFont(skin.getLabelFont()); downspeed_label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); downspeed_label.setText(""); upimg_label = new Label(this,SWT.NONE); upimg_label.setImage(SWTImageRepository.getImage("up.gif")); upimg_label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); upspeed_label = new Label(this,SWT.NONE); upspeed_label.setFont(skin.getLabelFont()); upspeed_label.setText(""); upspeed_label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); setStatusDisconnected(); downimg_label.addMenuDetectListener(new MenuDetectListener() { public void menuDetected(MenuDetectEvent arg0) { showDownSpeedLimitScaleWindow(); } }); downspeed_label.addMenuDetectListener(new MenuDetectListener() { public void menuDetected(MenuDetectEvent arg0) { showDownSpeedLimitScaleWindow(); } }); upimg_label.addMenuDetectListener(new MenuDetectListener() { public void menuDetected(MenuDetectEvent arg0) { showUpSpeedLimitScaleWindow(); } }); upspeed_label.addMenuDetectListener(new MenuDetectListener() { public void menuDetected(MenuDetectEvent arg0) { showUpSpeedLimitScaleWindow(); } }); config_manager.addConfigurationListener(new ConfigurationAdapter() { public void uploadLimitChanged(long uploadLimit) { String up_limit = ""; if (uploadLimit!=0) up_limit = "["+(SpeedFormatter.formatByteCountToKiBEtcPerSec(config_manager.getUploadLimit(),true))+"]"; String up_speed = SpeedFormatter.formatSpeed(peer_manager.getUploadSpeed()); upspeed_label.setText(up_limit + up_speed); layout(); } public void downloadLimitChanged(long downloadLimit) { String down_limit = ""; if (downloadLimit!=0) down_limit = "["+(SpeedFormatter.formatByteCountToKiBEtcPerSec(config_manager.getDownloadLimit(),true))+"]"; String down_speed = SpeedFormatter.formatSpeed(peer_manager.getDownloadSpeed()); downspeed_label.setText(down_limit + down_speed); layout(); } }); GUIUpdater.getInstance().addRefreshable(new Refreshable() { public void refresh() { if (isDisposed()) return ; String down_limit = ""; if (config_manager.getDownloadLimit()!=0) down_limit = "["+(SpeedFormatter.formatByteCountToKiBEtcPerSec(config_manager.getDownloadLimit(),true))+"]"; String up_limit = ""; if (config_manager.getUploadLimit()!=0) up_limit = "["+(SpeedFormatter.formatByteCountToKiBEtcPerSec(config_manager.getUploadLimit(),true))+"]"; String down_speed = SpeedFormatter.formatSpeed(peer_manager.getDownloadSpeed()); String up_speed = SpeedFormatter.formatSpeed(peer_manager.getUploadSpeed()); downspeed_label.setText(down_limit + down_speed); upspeed_label.setText(up_limit + up_speed); layout(); } }); } public void setStatusDisconnected() { connection_status_label.setText(Localizer._("mainwindow.statusbar.label.disconnected")); Image img = SWTImageRepository.getImage("toolbar_disconnected.png"); img_label.setImage(img); client_id_label.setForeground(SWTThread.getDisplay().getSystemColor(SWT.COLOR_BLACK)); client_id_label.setText(""); client_id_label.setToolTipText(""); layout(); } public void setStatusConnecting() { connection_status_label.setText(Localizer._("mainwindow.statusbar.label.connecting")); Image img = SWTImageRepository.getImage("toolbar_disconnected.png"); img_label.setImage(img); client_id_label.setForeground(SWTThread.getDisplay().getSystemColor(SWT.COLOR_BLACK)); client_id_label.setText(""); layout(); } public void setStatusConnected(Server server) { ClientID client_id = server.getClientID(); connection_status_label.setText(Localizer._("mainwindow.statusbar.label.connected")); connection_status_label.setToolTipText(server.getAddress() + ":" + server.getPort()); client_id_label.setText(client_id.isHighID() ? Localizer._("mainwindow.statusbar.label.high_id") :Localizer._("mainwindow.statusbar.label.low_id")); if (!client_id.isHighID()) client_id_label.setForeground(SWTThread.getDisplay().getSystemColor(SWT.COLOR_RED)); else client_id_label.setForeground(SWTThread.getDisplay().getSystemColor(SWT.COLOR_BLACK)); long id = Convert.intToLong(client_id.hashCode()); client_id_label.setToolTipText(id+""); Image img = SWTImageRepository.getImage("toolbar_connected.png"); img_label.setImage(img); layout(); } public void toogleVisibility() { setVisible(!getVisible()); SWTPreferences.getInstance().setStatusBarVisible(getVisible()); grid_data.exclude = !grid_data.exclude; setLayoutData(grid_data); layout(); } protected void checkSubclass() { } private void showDownSpeedLimitScaleWindow() { SpeedScaleShell speedScaleWidget = new SpeedScaleShell(_._("mainwindow.statusbar.speed_scale.download") + " :"); long down_limit = config_manager.getDownloadLimit() / 1024; speedScaleWidget.setMaxValue(down_limit+500); speedScaleWidget.setMaxTextValue(down_limit+500); speedScaleWidget.addOption(_._("mainwindow.statusbar.speed_scale.no_limit"), 0); List<Long> sets = getDefaultSpeedValues(down_limit); for(Long v : sets) { speedScaleWidget.addOption(SpeedFormatter.formatByteCountToKiBEtcPerSec(v * 1024,true), v); } boolean result = speedScaleWidget.open(down_limit, JMConstants.isWindows); if (result) { long value = speedScaleWidget.getValue(); value*=1024; config_manager.setDownloadLimit(value); } } private void showUpSpeedLimitScaleWindow() { SpeedScaleShell speedScaleWidget = new SpeedScaleShell(_._("mainwindow.statusbar.speed_scale.upload") + " :"); long up_limit = config_manager.getUploadLimit() / 1024; speedScaleWidget.setMaxValue(up_limit+500); speedScaleWidget.setMaxTextValue(up_limit+500); speedScaleWidget.addOption(_._("mainwindow.statusbar.speed_scale.no_limit"), 0); List<Long> sets = getDefaultSpeedValues(up_limit); for(Long v : sets) { speedScaleWidget.addOption(SpeedFormatter.formatByteCountToKiBEtcPerSec(v * 1024,true), v); } boolean result = speedScaleWidget.open(up_limit, JMConstants.isWindows); if (result) { long value = speedScaleWidget.getValue(); value*=1024; config_manager.setUploadLimit(value); } } private List<Long> getDefaultSpeedValues(long speed) { List<Long> speeds = new ArrayList<Long>(); if (speed<=128) { speeds.add(5L); speeds.add(10L); speeds.add(16L); speeds.add(32L); speeds.add(64L); speeds.add(128L); } else if ((speed>128)&&(speed<=512)) { speeds.add(64L); speeds.add(128L); speeds.add(256L); speeds.add(512L); } else { speeds.add(speed - 10); speeds.add(speed - 20); speeds.add(speed + 10); speeds.add(speed + 20); } return speeds; } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -