⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 statusbar.java

📁 用java 编写的源码开放的文本编辑器。有很多有用的特性
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * StatusBar.java - The status bar displayed at the bottom of views * :tabSize=8:indentSize=8:noTabs=false: * :folding=explicit:collapseFolds=1: * * Copyright (C) 2001, 2002 Slava Pestov * Portions copyright (C) 2001 mike dillon * * 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 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. */package org.gjt.sp.jedit.gui;//{{{ Importsimport javax.swing.border.*;import javax.swing.text.Segment;import javax.swing.*;import java.awt.event.*;import java.awt.font.*;import java.awt.geom.*;import java.awt.*;import org.gjt.sp.jedit.io.*;import org.gjt.sp.jedit.textarea.*;import org.gjt.sp.jedit.*;import org.gjt.sp.util.*;//}}}/** * The status bar used to display various information to the user.<p> * * Currently, it is used for the following: * <ul> * <li>Displaying caret position information * <li>Displaying {@link InputHandler#readNextChar(String,String)} prompts * <li>Displaying {@link #setMessage(String)} messages * <li>Displaying I/O progress * <li>Displaying various editor settings * <li>Displaying memory status * </ul> * * @version $Id: StatusBar.java,v 1.51 2003/02/08 18:53:02 spestov Exp $ * @author Slava Pestov * @since jEdit 3.2pre2 */public class StatusBar extends JPanel implements WorkThreadProgressListener{	//{{{ StatusBar constructor	public StatusBar(View view)	{		super(new BorderLayout());		setBorder(new CompoundBorder(new EmptyBorder(4,0,0,			(OperatingSystem.isMacOS() ? 18 : 0)),			UIManager.getBorder("TextField.border")));		this.view = view;		panel = new JPanel(new BorderLayout());		box = new Box(BoxLayout.X_AXIS);		panel.add(BorderLayout.EAST,box);		add(BorderLayout.CENTER,panel);		MouseHandler mouseHandler = new MouseHandler();		caretStatus = new ToolTipLabel();		caretStatus.setToolTipText(jEdit.getProperty("view.status.caret-tooltip"));		caretStatus.addMouseListener(mouseHandler);		message = new JLabel(" ");		setMessageComponent(message);		mode = new ToolTipLabel();		mode.setToolTipText(jEdit.getProperty("view.status.mode-tooltip"));		mode.addMouseListener(mouseHandler);		wrap = new ToolTipLabel();		wrap.setHorizontalAlignment(SwingConstants.CENTER);		wrap.setToolTipText(jEdit.getProperty("view.status.wrap-tooltip"));		wrap.addMouseListener(mouseHandler);		multiSelect = new ToolTipLabel();		multiSelect.setHorizontalAlignment(SwingConstants.CENTER);		multiSelect.setToolTipText(jEdit.getProperty("view.status.multi-tooltip"));		multiSelect.addMouseListener(mouseHandler);		overwrite = new ToolTipLabel();		overwrite.setHorizontalAlignment(SwingConstants.CENTER);		overwrite.setToolTipText(jEdit.getProperty("view.status.overwrite-tooltip"));		overwrite.addMouseListener(mouseHandler);		lineSep = new ToolTipLabel();		lineSep.setHorizontalAlignment(SwingConstants.CENTER);		lineSep.setToolTipText(jEdit.getProperty("view.status.linesep-tooltip"));		lineSep.addMouseListener(mouseHandler);		memory = new MemoryStatus();		memory.addMouseListener(mouseHandler);	} //}}}	//{{{ propertiesChanged() method	public void propertiesChanged()	{		showCaretStatus = jEdit.getBooleanProperty("view.status.show-caret-status");		showEditMode = jEdit.getBooleanProperty("view.status.show-edit-mode");		showFoldMode = jEdit.getBooleanProperty("view.status.show-fold-mode");		showEncoding = jEdit.getBooleanProperty("view.status.show-encoding");		showWrap = jEdit.getBooleanProperty("view.status.show-wrap");		showMultiSelect = jEdit.getBooleanProperty("view.status.show-multi-select");		showOverwrite = jEdit.getBooleanProperty("view.status.show-overwrite");		showLineSeperator = jEdit.getBooleanProperty("view.status.show-line-seperator");		showMemory = jEdit.getBooleanProperty("view.status.show-memory");		TextAreaPainter painter = view.getTextArea().getPainter();		panel.setBackground(painter.getBackground());		panel.setForeground(painter.getForeground());		caretStatus.setBackground(painter.getBackground());		caretStatus.setForeground(painter.getForeground());		message.setBackground(painter.getBackground());		message.setForeground(painter.getForeground());		mode.setBackground(painter.getBackground());		mode.setForeground(painter.getForeground());		wrap.setBackground(painter.getBackground());		wrap.setForeground(painter.getForeground());		multiSelect.setBackground(painter.getBackground());		multiSelect.setForeground(painter.getForeground());		overwrite.setBackground(painter.getBackground());		overwrite.setForeground(painter.getForeground());		lineSep.setBackground(painter.getBackground());		lineSep.setForeground(painter.getForeground());		memory.setBackground(painter.getBackground());		memory.setForeground(painter.getForeground());		Font font = UIManager.getFont("Label.font");		FontMetrics fm = getFontMetrics(font);		Dimension dim = null;		if (showCaretStatus)		{			panel.add(BorderLayout.WEST,caretStatus);			caretStatus.setFont(font);			dim = new Dimension(fm.stringWidth(caretTestStr),				fm.getHeight());                        caretStatus.setPreferredSize(dim);		}		else			panel.remove(caretStatus);		box.removeAll();		if (showEncoding || showEditMode || showFoldMode)			box.add(mode);		if (showWrap)		{			dim = new Dimension(Math.max(				Math.max(fm.charWidth('-'),fm.charWidth('H')),				fm.charWidth('S')) + 1,fm.getHeight());			wrap.setPreferredSize(dim);			wrap.setMaximumSize(dim);			box.add(wrap);		}		if (showMultiSelect)		{			dim = new Dimension(				Math.max(fm.charWidth('-'),fm.charWidth('M')) + 1,				fm.getHeight());			multiSelect.setPreferredSize(dim);			multiSelect.setMaximumSize(dim);			box.add(multiSelect);		}		if (showOverwrite)		{			dim = new Dimension(				Math.max(fm.charWidth('-'),fm.charWidth('O')) + 1,				fm.getHeight());			overwrite.setPreferredSize(dim);			overwrite.setMaximumSize(dim);			box.add(overwrite);		}		if (showLineSeperator)		{			dim = new Dimension(Math.max(				Math.max(fm.charWidth('U'),				fm.charWidth('W')),				fm.charWidth('M')) + 1,				fm.getHeight());			lineSep.setPreferredSize(dim);			lineSep.setMaximumSize(dim);			box.add(lineSep);		}		if (showMemory)		{			box.add(memory);			// UI hack because BoxLayout does not give all			// components the same height			memory.setFont(font);			FontRenderContext frc = new FontRenderContext(null,false,false);			Rectangle2D bounds = font.getStringBounds(memoryTestStr,frc);			dim = new Dimension((int)bounds.getWidth(),				(int)bounds.getHeight());			memory.setPreferredSize(dim);			memory.setMaximumSize(dim);			memory.lm = font.getLineMetrics(memoryTestStr,frc);			memory.progressForeground = jEdit.getColorProperty(				"view.status.memory.foreground");			memory.progressBackground = jEdit.getColorProperty(				"view.status.memory.background");		}		updateBufferStatus();		updateMiscStatus();	} //}}}	//{{{ addNotify() method	public void addNotify()	{		super.addNotify();		VFSManager.getIOThreadPool().addProgressListener(this);	} //}}}	//{{{ removeNotify() method	public void removeNotify()	{		super.removeNotify();		VFSManager.getIOThreadPool().removeProgressListener(this);	} //}}}	//{{{ WorkThreadListener implementation	//{{{ statusUpdate() method	public void statusUpdate(final WorkThreadPool threadPool, int threadIndex)	{		SwingUtilities.invokeLater(new Runnable()		{			public void run()			{				// don't obscure existing message				if(message != null && !"".equals(message.getText().trim())					&& !currentMessageIsIO)					return;				int requestCount = threadPool.getRequestCount();				if(requestCount == 0)				{					setMessageAndClear(jEdit.getProperty(						"view.status.io.done"));					currentMessageIsIO = true;				}				else if(requestCount == 1)				{					setMessage(jEdit.getProperty(						"view.status.io-1"));					currentMessageIsIO = true;				}				else				{					Object[] args = { new Integer(requestCount) };					setMessage(jEdit.getProperty(						"view.status.io",args));					currentMessageIsIO = true;				}			}		});	} //}}}	//{{{ progressUpdate() method	public void progressUpdate(WorkThreadPool threadPool, int threadIndex)	{	} //}}}	//}}}	//{{{ setMessageAndClear() method	/**	 * Show a message for a short period of time.	 * @param message The message	 * @since jEdit 3.2pre5	 */	public void setMessageAndClear(String message)	{		setMessage(message);		tempTimer = new Timer(0,new ActionListener()		{			public void actionPerformed(ActionEvent evt)			{				// so if view is closed in the meantime...				if(isShowing())					setMessage(null);			}		});		tempTimer.setInitialDelay(10000);		tempTimer.setRepeats(false);		tempTimer.start();	} //}}}	//{{{ setMessage() method	/**	 * Displays a status message.	 */	public void setMessage(String message)	{		if(tempTimer != null)		{			tempTimer.stop();			tempTimer = null;		}		setMessageComponent(this.message);		if(message == null)		{			InputHandler inputHandler = view.getInputHandler();			if(inputHandler.isRepeatEnabled())			{				int repeatCount = inputHandler.getRepeatCount();				this.message.setText(jEdit.getProperty("view.status.repeat",					new Object[] { repeatCount == 1 ? "" : String.valueOf(repeatCount) }));			}			else if(view.getMacroRecorder() != null)				this.message.setText(jEdit.getProperty("view.status.recording"));			else				this.message.setText(" ");		}		else			this.message.setText(message);	} //}}}	//{{{ setMessageComponent() method	public void setMessageComponent(Component comp)	{		currentMessageIsIO = false;		if (comp == null || messageComp == comp)		{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -