📄 statusbar.java
字号:
/* * 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 + -