|
What this is
Other links
The source code
/*
* LogViewer.java
* :tabSize=8:indentSize=8:noTabs=false:
* :folding=explicit:collapseFolds=1:
*
* Copyright (C) 1999, 2004 Slava Pestov
*
* 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;
//{{{ Imports
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.event.*;
import org.gjt.sp.jedit.*;
import org.gjt.sp.jedit.msg.PropertiesChanged;
import org.gjt.sp.util.Log;
//}}}
public class LogViewer extends JPanel implements DefaultFocusComponent,
EBComponent
{
//{{{ LogViewer constructor
public LogViewer()
{
super(new BorderLayout());
JPanel caption = new JPanel();
caption.setLayout(new BoxLayout(caption,BoxLayout.X_AXIS));
caption.setBorder(new EmptyBorder(6,6,6,6));
String settingsDirectory = jEdit.getSettingsDirectory();
if(settingsDirectory != null)
{
String[] args = { MiscUtilities.constructPath(
settingsDirectory, "activity.log") };
JLabel label = new JLabel(jEdit.getProperty(
"log-viewer.caption",args));
caption.add(label);
}
caption.add(Box.createHorizontalGlue());
tailIsOn = jEdit.getBooleanProperty("log-viewer.tail", false);
tail = new JCheckBox(
jEdit.getProperty("log-viewer.tail.label"),tailIsOn);
tail.addActionListener(new ActionHandler());
caption.add(tail);
caption.add(Box.createHorizontalStrut(12));
copy = new JButton(jEdit.getProperty("log-viewer.copy"));
copy.addActionListener(new ActionHandler());
caption.add(copy);
ListModel model = Log.getLogListModel();
model.addListDataListener(new ListHandler());
list = new LogList(model);
add(BorderLayout.NORTH,caption);
JScrollPane scroller = new JScrollPane(list);
Dimension dim = scroller.getPreferredSize();
dim.width = Math.min(600,dim.width);
scroller.setPreferredSize(dim);
add(BorderLayout.CENTER,scroller);
propertiesChanged();
} //}}}
//{{{ handleMessage() method
public void handleMessage(EBMessage msg)
{
if(msg instanceof PropertiesChanged)
propertiesChanged();
} //}}}
//{{{ addNotify() method
public void addNotify()
{
super.addNotify();
if(tailIsOn)
{
int index = list.getModel().getSize() - 1;
list.ensureIndexIsVisible(index);
}
EditBus.addToBus(this);
} //}}}
//{{{ removeNotify() method
public void removeNotify()
{
super.removeNotify();
EditBus.removeFromBus(this);
} //}}}
//{{{ focusOnDefaultComponent() method
public void focusOnDefaultComponent()
{
list.requestFocus();
} //}}}
//{{{ Private members
private JList list;
private JButton copy;
private JCheckBox tail;
private boolean tailIsOn;
//{{{ propertiesChanged() method
private void propertiesChanged()
{
list.setFont(jEdit.getFontProperty("view.font"));
list.setFixedCellHeight(list.getFontMetrics(list.getFont())
.getHeight());
} //}}}
//}}}
//{{{ ActionHandler class
class ActionHandler implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
Object src = e.getSource();
if(src == tail)
{
tailIsOn = !tailIsOn;
jEdit.setBooleanProperty("log-viewer.tail",tailIsOn);
if(tailIsOn)
{
int index = list.getModel().getSize();
if(index != 0)
{
list.ensureIndexIsVisible(index - 1);
}
}
}
else if(src == copy)
{
StringBuffer buf = new StringBuffer();
Object[] selected = list.getSelectedValues();
if(selected != null && selected.length != 0)
{
for(int i = 0; i < selected.length; i++)
{
buf.append(selected[i]);
buf.append('\n');
}
}
else
{
ListModel model = list.getModel();
for(int i = 0; i < model.getSize(); i++)
{
buf.append(model.getElementAt(i));
buf.append('\n');
}
}
Registers.setRegister('$',buf.toString());
}
}
} //}}}
//{{{ ListHandler class
class ListHandler implements ListDataListener
{
public void intervalAdded(ListDataEvent e)
{
contentsChanged(e);
}
public void intervalRemoved(ListDataEvent e)
{
contentsChanged(e);
}
public void contentsChanged(ListDataEvent e)
{
if(tailIsOn)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
int index = list.getModel().getSize() - 1;
list.ensureIndexIsVisible(index);
}
});
}
}
} //}}}
//{{{ LogList class
class LogList extends JList
{
LogList(ListModel model)
{
super(model);
setVisibleRowCount(24);
getSelectionModel().setSelectionMode(
ListSelectionModel.SINGLE_INTERVAL_SELECTION);
setAutoscrolls(true);
}
public void processMouseEvent(MouseEvent evt)
{
if(evt.getID() == MouseEvent.MOUSE_PRESSED)
{
startIndex = list.locationToIndex(
evt.getPoint());
}
super.processMouseEvent(evt);
}
public void processMouseMotionEvent(MouseEvent evt)
{
if(evt.getID() == MouseEvent.MOUSE_DRAGGED)
{
int row = list.locationToIndex(evt.getPoint());
if(row != -1)
{
if(startIndex == -1)
{
list.setSelectionInterval(row,row);
startIndex = row;
}
else
list.setSelectionInterval(startIndex,row);
list.ensureIndexIsVisible(row);
evt.consume();
}
}
else
super.processMouseMotionEvent(evt);
}
private int startIndex;
} //}}}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.