// Near Infinity - An Infinity Engine Browser and Editor // Copyright (C) 2001 - 2005 Jon Olav Hauglid // See LICENSE.txt for license information package org.infinity.gui; import java.awt.BorderLayout; import java.awt.Dimension; import javax.swing.BorderFactory; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.UIManager; import javax.swing.event.CaretEvent; import javax.swing.event.CaretListener; import javax.swing.text.BadLocationException; public final class StatusBar extends JPanel implements CaretListener { private final JLabel messageLabel = new JLabel(); private final JLabel cursorLabel = new JLabel(); public StatusBar() { super(new BorderLayout(3, 0)); messageLabel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1), BorderFactory.createLineBorder( UIManager.getColor("controlShadow")))); cursorLabel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1), BorderFactory.createLineBorder( UIManager.getColor("controlShadow")))); cursorLabel.setPreferredSize(new Dimension(120, cursorLabel.getPreferredSize().height)); add(messageLabel, BorderLayout.CENTER); add(cursorLabel, BorderLayout.EAST); setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1)); } // --------------------- Begin Interface CaretListener --------------------- @Override public void caretUpdate(CaretEvent event) { if (event.getSource() instanceof JTextArea) { JTextArea source = (JTextArea)event.getSource(); int position = event.getDot(); try { int linenr = source.getLineOfOffset(position); cursorLabel.setText(String.format(" %1$d:%2$d", linenr + 1, 1 + position - source.getLineStartOffset(linenr))); } catch (BadLocationException e) { cursorLabel.setText(""); } } } // --------------------- End Interface CaretListener --------------------- public void setCursorText(String text) { cursorLabel.setText(' ' + text); } public String getCursorText() { String text = cursorLabel.getText(); if (text.length() > 0) { return text.substring(1); } else { return ""; } } public void setMessage(String msg) { messageLabel.setText(' ' + msg); cursorLabel.setText(""); } public String getMessage() { String text = messageLabel.getText(); if (text.length() > 0) return text.substring(1); else return ""; } }