📄 logstab.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.logs;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.util.Calendar;import java.util.GregorianCalendar;import org.eclipse.swt.SWT;import org.eclipse.swt.custom.StyleRange;import org.eclipse.swt.custom.StyledText;import org.eclipse.swt.events.MenuDetectEvent;import org.eclipse.swt.events.MenuDetectListener;import org.eclipse.swt.events.SelectionAdapter;import org.eclipse.swt.events.SelectionEvent;import org.eclipse.swt.graphics.Color;import org.eclipse.swt.layout.FillLayout;import org.eclipse.swt.widgets.Composite;import org.eclipse.swt.widgets.FileDialog;import org.eclipse.swt.widgets.Menu;import org.eclipse.swt.widgets.MenuItem;import org.jmule.core.JMRunnable;import org.jmule.ui.localizer._;import org.jmule.ui.swt.Logger;import org.jmule.ui.swt.SWTImageRepository;import org.jmule.ui.swt.SWTThread;import org.jmule.ui.swt.Utils;import org.jmule.ui.swt.maintabs.AbstractTab;import org.jmule.ui.utils.TimeFormatter;/** * * @author binary256 * @version $$Revision: 1.3 $$ * Last changed by $$Author: binary256_ $$ on $$Date: 2008/10/16 18:20:02 $$ */public class LogsTab extends AbstractTab implements Logger { private StyledText log_content; private static final Color fine_event_color = SWTThread.getDisplay().getSystemColor(SWT.COLOR_BLACK); private static final Color warning_event_color = SWTThread.getDisplay().getSystemColor(SWT.COLOR_DARK_MAGENTA); private static final Color error_event_color = SWTThread.getDisplay().getSystemColor(SWT.COLOR_RED); private static final Color date_foreground = new Color(SWTThread.getDisplay(),0,0,168); private Menu popup_menu; public LogsTab(Composite shell) { super(shell); setLayout(new FillLayout()); log_content = new StyledText(this,SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.READ_ONLY); log_content.setEditable(false); log_content.setBackground(SWTThread.getDisplay().getSystemColor(SWT.COLOR_WHITE)); popup_menu = new Menu(log_content); final MenuItem copy_item = new MenuItem(popup_menu,SWT.PUSH); copy_item.setText(_._("mainwindow.logtab.popupmenu.copy")); copy_item.setImage(SWTImageRepository.getImage("copy.png")); copy_item.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { Utils.setClipBoardText(log_content.getSelectionText()); } }); final MenuItem save_item = new MenuItem(popup_menu,SWT.PUSH); save_item.setText(_._("mainwindow.logtab.popupmenu.save")); save_item.setImage(SWTImageRepository.getImage("save.png")); save_item.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { FileDialog dialog = new FileDialog (getShell(), SWT.SAVE); dialog.setFilterNames (new String [] {"All Files (*.*)"}); dialog.setFilterExtensions (new String [] {"*.*"}); dialog.open(); String filename = dialog.getFileName(); if (filename == null) return ; final String full_path = (dialog.getFilterPath() + File.separator + filename); final String content = log_content.getText(); new Thread( new JMRunnable() { public void JMRun() { try { FileWriter file_writer = new FileWriter(full_path); file_writer.write(content); file_writer.close(); } catch (IOException e) { } }}).start(); } }); final MenuItem select_all_item = new MenuItem(popup_menu,SWT.PUSH); select_all_item.setText(_._("mainwindow.logtab.popupmenu.select_all")); select_all_item.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { log_content.selectAll(); } }); new MenuItem(popup_menu,SWT.SEPARATOR); final MenuItem clear_item = new MenuItem(popup_menu,SWT.PUSH); clear_item.setText(_._("mainwindow.logtab.popupmenu.clear")); clear_item.setImage(SWTImageRepository.getImage("remove_all.png")); clear_item.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { log_content.setText(""); } }); log_content.setMenu(popup_menu); log_content.addMenuDetectListener(new MenuDetectListener() { public void menuDetected(MenuDetectEvent arg0) { copy_item.setEnabled(true); if (log_content.getSelectionCount()==0) copy_item.setEnabled(false); clear_item.setEnabled(true); select_all_item.setEnabled(true); save_item.setEnabled(true); if (log_content.getText().length()==0) { clear_item.setEnabled(false); select_all_item.setEnabled(false); save_item.setEnabled(false); } } }); } public void fine(String message) { log(System.currentTimeMillis(),fine_event_color,message); } public void warning(String message) { log(System.currentTimeMillis(),warning_event_color,message); } public void error(String message) { log(System.currentTimeMillis(),error_event_color,message); } private void log(final long time,final Color foreground, final String text) { // syncExec - we need sequentially logging if (log_content.isDisposed()) return; SWTThread.getDisplay().syncExec(new Runnable() { public void run() { Calendar calendar = new GregorianCalendar(); calendar.setTimeInMillis(time); int date_begin = log_content.getText().length(); String date = TimeFormatter.twoDigits(calendar.get(Calendar.DAY_OF_MONTH)) + "." + TimeFormatter.twoDigits(calendar.get(Calendar.MONTH)) + "." + TimeFormatter.twoDigits(calendar.get(Calendar.YEAR)); date += " "+TimeFormatter.twoDigits(calendar.get(Calendar.HOUR_OF_DAY)) + ":" + TimeFormatter.twoDigits(calendar.get(Calendar.MINUTE))+":"+TimeFormatter.twoDigits(calendar.get(Calendar.SECOND)); date = "[" + date + "]"; log_content.append(date); StyleRange date_style = new StyleRange(); date_style.start = date_begin; date_style.length = date.length(); date_style.foreground = date_foreground; log_content.setStyleRange(date_style); log_content.append(" "); int style_begin = log_content.getText().length(); log_content.append(text); log_content.append(System.getProperty("line.separator")); StyleRange style = new StyleRange(); style.start = style_begin; style.length = text.length(); style.foreground = foreground; log_content.setStyleRange(style); log_content.setSelection(log_content.getText().length()); } }); } public JMULE_TABS getTabType() { return JMULE_TABS.LOGS; } public void lostFocus() { } public void obtainFocus() { } public void disposeTab() { }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -