You are viewing a plain text version of this content. The canonical link for it is here.
Posted to general@logging.apache.org by sd...@apache.org on 2010/04/08 07:48:09 UTC
svn commit: r931786 - in /logging/chainsaw/trunk/src/main:
java/org/apache/log4j/chainsaw/ resources/org/apache/log4j/chainsaw/
resources/org/apache/log4j/chainsaw/help/
Author: sdeboy
Date: Thu Apr 8 05:48:08 2010
New Revision: 931786
URL: http://svn.apache.org/viewvc?rev=931786&view=rev
Log:
Forward and backward search, as well as forward and backward next-color search now wrap
Added display of matching search count in status bar
Added null checks around calls to tablemodel.getRow
Added string[] length checks before attempting to access index zero
Updated Welcome panel to include ctrl-n, ctrl-p
Modified:
logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java
logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/ChainsawStatusBar.java
logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/EventContainer.java
logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogUI.java
logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java
logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/ThrowableRenderPanel.java
logging/chainsaw/trunk/src/main/resources/org/apache/log4j/chainsaw/WelcomePanel.html
logging/chainsaw/trunk/src/main/resources/org/apache/log4j/chainsaw/help/release-notes.html
Modified: logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java?rev=931786&r1=931785&r2=931786&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java (original)
+++ logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java Thu Apr 8 05:48:08 2010
@@ -169,12 +169,24 @@ class ChainsawCyclicBufferTableModel ext
return i;
}
}
+ //if there was no match, start at row zero and go to startLocation
+ for (int i = 0; i < startLocation; i++) {
+ if (rule.evaluate((LoggingEvent) filteredList.get(i))) {
+ return i;
+ }
+ }
} else {
for (int i = startLocation; i > -1; i--) {
if (rule.evaluate((LoggingEvent) filteredList.get(i))) {
return i;
}
}
+ //if there was no match, start at row list.size() - 1 and go to startLocation
+ for (int i = filteredList.size() - 1; i > startLocation; i--) {
+ if (rule.evaluate((LoggingEvent) filteredList.get(i))) {
+ return i;
+ }
+ }
}
}
@@ -347,10 +359,16 @@ class ChainsawCyclicBufferTableModel ext
}
}
- public void updateEventsWithFindRule(Rule findRule) {
+ public int updateEventsWithFindRule(Rule findRule) {
+ int count = 0;
for (Iterator iter = unfilteredList.iterator();iter.hasNext();) {
- ((ExtendedLoggingEvent)iter.next()).evaluateSearchRule(findRule);
+ ExtendedLoggingEvent extendedLoggingEvent = (ExtendedLoggingEvent) iter.next();
+ extendedLoggingEvent.evaluateSearchRule(findRule);
+ if (extendedLoggingEvent.isSearchMatch()) {
+ count++;
+ }
}
+ return count;
}
public int findColoredRow(int startLocation, boolean searchForward) {
@@ -363,6 +381,14 @@ class ChainsawCyclicBufferTableModel ext
return i;
}
}
+ //searching forward, no colorized event was found - now start at row zero and go to startLocation
+ for (int i = 0; i < startLocation; i++) {
+ ExtendedLoggingEvent event = (ExtendedLoggingEvent)filteredList.get(i);
+ if (!event.getColorRuleBackground().equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND) ||
+ !event.getColorRuleForeground().equals(ChainsawConstants.COLOR_DEFAULT_FOREGROUND)) {
+ return i;
+ }
+ }
} else {
for (int i = startLocation; i > -1; i--) {
ExtendedLoggingEvent event = (ExtendedLoggingEvent)filteredList.get(i);
@@ -371,6 +397,14 @@ class ChainsawCyclicBufferTableModel ext
return i;
}
}
+ //searching backward, no colorized event was found - now start at list.size() - 1 and go to startLocation
+ for (int i = filteredList.size() - 1; i > startLocation; i--) {
+ ExtendedLoggingEvent event = (ExtendedLoggingEvent)filteredList.get(i);
+ if (!event.getColorRuleBackground().equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND) ||
+ !event.getColorRuleForeground().equals(ChainsawConstants.COLOR_DEFAULT_FOREGROUND)) {
+ return i;
+ }
+ }
}
}
@@ -602,16 +636,19 @@ class ChainsawCyclicBufferTableModel ext
public void fireRowUpdated(int row, boolean checkForNewColumns) {
ExtendedLoggingEvent event = getRow(row);
- event.updateColorRuleColors(colorizer.getBackgroundColor(event), colorizer.getForegroundColor(event));
- Rule findRule = colorizer.getFindRule();
- if (findRule != null) {
- event.evaluateSearchRule(colorizer.getFindRule());
- }
+ if (event != null)
+ {
+ event.updateColorRuleColors(colorizer.getBackgroundColor(event), colorizer.getForegroundColor(event));
+ Rule findRule = colorizer.getFindRule();
+ if (findRule != null) {
+ event.evaluateSearchRule(colorizer.getFindRule());
+ }
- fireTableRowsUpdated(row, row);
- if (checkForNewColumns) {
- //row may have had a column added..if so, make sure a column is added
- checkForNewColumn(getRow(row));
+ fireTableRowsUpdated(row, row);
+ if (checkForNewColumns) {
+ //row may have had a column added..if so, make sure a column is added
+ checkForNewColumn(event);
+ }
}
}
Modified: logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/ChainsawStatusBar.java
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/ChainsawStatusBar.java?rev=931786&r1=931785&r2=931786&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/ChainsawStatusBar.java (original)
+++ logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/ChainsawStatusBar.java Thu Apr 8 05:48:08 2010
@@ -48,6 +48,7 @@ public class ChainsawStatusBar extends J
private static final int DELAY_PERIOD = 5000;
private static final String DEFAULT_MSG = "Welcome to Chainsaw v2!";
private final JLabel statusMsg = new JLabel(DEFAULT_MSG);
+ private final JLabel searchMatchLabel = new JLabel("", SwingConstants.CENTER);
private final JLabel pausedLabel = new JLabel("", SwingConstants.CENTER);
private final JLabel lineSelectionLabel = new JLabel("", SwingConstants.CENTER);
private final JLabel eventCountLabel = new JLabel("", SwingConstants.CENTER);
@@ -95,9 +96,16 @@ public class ChainsawStatusBar extends J
eventCountLabel.setMinimumSize(
new Dimension(
eventCountLabel.getFontMetrics(eventCountLabel.getFont())
- .stringWidth("99999:99999") + 5,
+ .stringWidth("Filtered/Total: 999999999999:999999999999") + 5,
(int) eventCountLabel.getPreferredSize().getHeight()));
+ searchMatchLabel.setBorder(statusBarComponentBorder);
+ searchMatchLabel.setToolTipText("<# viewable events>:<# total events>");
+ searchMatchLabel.setMinimumSize(
+ new Dimension(
+ searchMatchLabel.getFontMetrics(eventCountLabel.getFont()).stringWidth("Search matches: 999999999999") + 5,
+ (int) searchMatchLabel.getPreferredSize().getHeight()));
+
receivedConnectionlabel.setBorder(statusBarComponentBorder);
receivedConnectionlabel.setToolTipText(
"Indicates whether Chainsaw has received a remote connection");
@@ -110,14 +118,14 @@ public class ChainsawStatusBar extends J
lineSelectionLabel.setMinimumSize(
new Dimension(
lineSelectionLabel.getFontMetrics(lineSelectionLabel.getFont())
- .stringWidth("999999"),
+ .stringWidth("999999999"),
(int) lineSelectionLabel.getPreferredSize().getHeight()));
lineSelectionLabel.setToolTipText(
"The current line # selected");
JComponent[] toFix =
new JComponent[] {
- eventCountLabel,
+ searchMatchLabel, eventCountLabel,
receivedConnectionlabel, lineSelectionLabel, receivedEventLabel,
pausedLabel
};
@@ -153,19 +161,24 @@ public class ChainsawStatusBar extends J
c.gridx = 2;
add(lineSelectionLabel, c);
+ c.weightx = 0.0;
+ c.weighty = 0.0;
+ c.gridx = 3;
+ add(searchMatchLabel, c);
+
c.weightx = 0.0;
c.weighty = 0.0;
- c.gridx = 3;
+ c.gridx = 4;
add(eventCountLabel, c);
c.weightx = 0.0;
c.weighty = 0.0;
- c.gridx = 4;
+ c.gridx = 5;
add(receivedEventLabel, c);
c.weightx = 0.0;
c.weighty = 0.0;
- c.gridx = 5;
+ c.gridx = 6;
add(pausedLabel, c);
@@ -244,13 +257,20 @@ public class ChainsawStatusBar extends J
SwingUtilities.invokeLater(
new Runnable() {
public void run() {
- lineSelectionLabel.setText(
- selectedLine+"");
- eventCountLabel.setText(lineCount + ":" + total);
+ lineSelectionLabel.setText(selectedLine+"");
+ eventCountLabel.setText("Filtered/Total: " + lineCount + ":" + total);
}
});
}
+ void setSearchMatchCount(int searchMatchCount) {
+ if (searchMatchCount == 0) {
+ searchMatchLabel.setText("");
+ } else {
+ searchMatchLabel.setText("Search matches: " + searchMatchCount);
+ }
+ }
+
void setNothingSelected() {
SwingUtilities.invokeLater(
new Runnable() {
Modified: logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/EventContainer.java
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/EventContainer.java?rev=931786&r1=931785&r2=931786&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/EventContainer.java (original)
+++ logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/EventContainer.java Thu Apr 8 05:48:08 2010
@@ -178,7 +178,7 @@ public interface EventContainer extends
* Evaluate all events against the find rule
* @param findRule
*/
- void updateEventsWithFindRule(Rule findRule);
+ int updateEventsWithFindRule(Rule findRule);
/**
* Determine next row with a non-default color
Modified: logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanel.java?rev=931786&r1=931785&r2=931786&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanel.java (original)
+++ logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanel.java Thu Apr 8 05:48:08 2010
@@ -42,13 +42,8 @@ import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
import java.io.EOFException;
import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
@@ -1312,7 +1307,7 @@ public class LogPanel extends DockablePa
Object o = table.getValueAt(row, column);
if (o != null) {
- if (o instanceof String[]) {
+ if (o instanceof String[] && ((String[])o).length > 0) {
value = ((String[]) o)[0];
operator = "~=";
} else {
@@ -1352,7 +1347,7 @@ public class LogPanel extends DockablePa
} else {
Object o = table.getValueAt(row, column).toString();
- if (o instanceof String[]) {
+ if (o instanceof String[] && ((String[])o).length > 0) {
value = ((String[]) o)[0];
operator = "~=";
} else {
@@ -1423,7 +1418,7 @@ public class LogPanel extends DockablePa
Object o = table.getValueAt(row, column);
if (o != null) {
- if (o instanceof String[]) {
+ if (o instanceof String[] && ((String[])o).length > 0) {
value = ((String[]) o)[0];
operator = "~=";
} else {
@@ -1446,7 +1441,7 @@ public class LogPanel extends DockablePa
new AbstractAction("Clear find next") {
public void actionPerformed(ActionEvent e) {
findField.setText(null);
- updateRule(null);
+ updateFindRule(null);
}
};
@@ -1480,8 +1475,11 @@ public class LogPanel extends DockablePa
if (currentPoint != null) {
int row = table.rowAtPoint(currentPoint);
LoggingEvent event = tableModel.getRow(row);
- renderer.setUseRelativeTimes(event.getTimeStamp());
- tableModel.reFilter();
+ if (event != null)
+ {
+ renderer.setUseRelativeTimes(event.getTimeStamp());
+ tableModel.reFilter();
+ }
menuItemDisplayNormalTimes.setEnabled(true);
}
}
@@ -1987,7 +1985,7 @@ public class LogPanel extends DockablePa
return tableModel.isCyclic();
}
- public void updateRule(String ruleText) {
+ public void updateFindRule(String ruleText) {
if ((ruleText == null) || (ruleText.trim().equals(""))) {
findRule = null;
tableModel.updateEventsWithFindRule(null);
@@ -1996,6 +1994,7 @@ public class LogPanel extends DockablePa
findField.setBackground(UIManager.getColor("TextField.background"));
findField.setToolTipText(
"Enter expression - right click or ctrl-space for menu");
+ statusBar.setSearchMatchCount(0);
} else {
//only turn off scrolltobottom when finding something (find not empty)
preferenceModel.setScrollToBottom(false);
@@ -2008,15 +2007,17 @@ public class LogPanel extends DockablePa
findField.setToolTipText(
"Enter expression - right click or ctrl-space for menu");
findRule = ExpressionRule.getRule(ruleText);
- tableModel.updateEventsWithFindRule(findRule);
+ int matchCount = tableModel.updateEventsWithFindRule(findRule);
colorizer.setFindRule(findRule);
//valid expression, reset background color in case we were previously an invalid expression
findField.setBackground(UIManager.getColor("TextField.background"));
+ statusBar.setSearchMatchCount(matchCount);
} catch (IllegalArgumentException re) {
findField.setToolTipText(re.getMessage());
findField.setBackground(INVALID_EXPRESSION_BACKGROUND);
colorizer.setFindRule(null);
tableModel.updateEventsWithFindRule(null);
+ statusBar.setSearchMatchCount(0);
}
}
}
@@ -2382,7 +2383,7 @@ public class LogPanel extends DockablePa
*
*/
public void findNext() {
- updateRule(findField.getText());
+ updateFindRule(findField.getText());
if (findRule != null) {
try {
@@ -2405,7 +2406,7 @@ public class LogPanel extends DockablePa
*
*/
public void findPrevious() {
- updateRule(findField.getText());
+ updateFindRule(findField.getText());
if (findRule != null) {
try {
@@ -2588,14 +2589,16 @@ public class LogPanel extends DockablePa
int row = table.getSelectedRow();
if (row != -1) {
LoggingEvent event = tableModel.getRow(row);
- Object marker = event.getProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE);
- if (marker == null) {
- event.setProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE, "set");
- } else {
- event.removeProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE);
+ if (event != null) {
+ Object marker = event.getProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE);
+ if (marker == null) {
+ event.setProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE, "set");
+ } else {
+ event.removeProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE);
+ }
+ //if marker -was- null, it no longer is (may need to add the column)
+ tableModel.fireRowUpdated(row, (marker == null));
}
- //if marker -was- null, it no longer is (may need to add the column)
- tableModel.fireRowUpdated(row, (marker == null));
}
}
@@ -2723,14 +2726,16 @@ public class LogPanel extends DockablePa
int row = table.rowAtPoint(evt.getPoint());
if (row != -1) {
ExtendedLoggingEvent event = tableModel.getRow(row);
- Object marker = event.getProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE);
- if (marker == null) {
- event.setProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE, "set");
- } else {
- event.removeProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE);
+ if (event != null) {
+ Object marker = event.getProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE);
+ if (marker == null) {
+ event.setProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE, "set");
+ } else {
+ event.removeProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE);
+ }
+ //if marker -was- null, it no longer is (may need to add the column)
+ tableModel.fireRowUpdated(row, (marker == null));
}
- //if marker -was- null, it no longer is (may need to add the column)
- tableModel.fireRowUpdated(row, (marker == null));
}
}
}
@@ -2997,8 +3002,10 @@ public class LogPanel extends DockablePa
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)
{
currentEvent = tableModel.getRow(row);
- textField.setText(currentEvent.getProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE));
- textField.selectAll();
+ if (currentEvent != null) {
+ textField.setText(currentEvent.getProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE));
+ textField.selectAll();
+ }
return textField;
}
}
Modified: logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogUI.java
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogUI.java?rev=931786&r1=931785&r2=931786&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogUI.java (original)
+++ logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogUI.java Thu Apr 8 05:48:08 2010
@@ -599,7 +599,7 @@ public class LogUI extends JFrame implem
Plugin plugin = (Plugin) pluginClass.newInstance();
pluginRegistry.addPlugin(plugin);
plugin.activateOptions();
- MessageCenter.getInstance().getLogger().info("Looks like ZeroConf stuff is available... WooHoo!");
+ MessageCenter.getInstance().getLogger().info("Looks like ZeroConf is available... WooHoo!");
} catch (Throwable e) {
MessageCenter.getInstance().getLogger().error("Doesn't look like ZeroConf is available", e);
}
Modified: logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java?rev=931786&r1=931785&r2=931786&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java (original)
+++ logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java Thu Apr 8 05:48:08 2010
@@ -111,7 +111,7 @@ public class TableColorizingRenderer ext
break;
case ChainsawColumns.INDEX_THROWABLE_COL_NAME:
- if (value instanceof String[]) {
+ if (value instanceof String[] && ((String[])value).length > 0){
c.setText(((String[]) value)[0]);
}
break;
Modified: logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/ThrowableRenderPanel.java
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/ThrowableRenderPanel.java?rev=931786&r1=931785&r2=931786&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/ThrowableRenderPanel.java (original)
+++ logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/ThrowableRenderPanel.java Thu Apr 8 05:48:08 2010
@@ -79,8 +79,8 @@ class ThrowableRenderPanel extends Abstr
*/
public Component getTableCellEditorComponent(
JTable table, Object value, boolean isSelected, int row, int column) {
- if(value!=null){
- lbl.setText(((String[]) value)[0]);
+ if (value instanceof String[] && ((String[])value).length > 0) {
+ lbl.setText(((String[]) value)[0]);
}else {
lbl.setText("");
}
Modified: logging/chainsaw/trunk/src/main/resources/org/apache/log4j/chainsaw/WelcomePanel.html
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/main/resources/org/apache/log4j/chainsaw/WelcomePanel.html?rev=931786&r1=931785&r2=931786&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/main/resources/org/apache/log4j/chainsaw/WelcomePanel.html (original)
+++ logging/chainsaw/trunk/src/main/resources/org/apache/log4j/chainsaw/WelcomePanel.html Thu Apr 8 05:48:08 2010
@@ -30,10 +30,17 @@
<td nowrap class="HotKey">CTRL-LEFT</td>
<td width="50" align="center">-</td>
<td>Activate a tab to the left</td>
- <td nowrap class="HotKey">F1</td>
- <td width="50" align="center">-</td>
- <td>Hide/Show Welcome Panel/Help page</td>
-
+ <td nowrap class="HotKey">CTRL-RIGHT</td>
+ <td width="50" align="center">-</td>
+ <td>Activate a tab to the right</td>
+</tr>
+<tr valign="top" bgcolor="#EEEEEE">
+ <td nowrap class="HotKey">F3</td>
+ <td width="50" align="center">-</td>
+ <td>Find Next</td>
+ <td nowrap class="HotKey">SHIFT-F3</td>
+ <td width="50" align="center">-</td>
+ <td>Find previous</td>
</tr>
<tr valign="top">
<td nowrap class="HotKey">CTRL-A</td>
@@ -44,22 +51,22 @@
<td>Scroll to bottom</td>
</tr>
<tr valign="top" bgcolor="#EEEEEE">
- <td nowrap class="HotKey">Ctrl-F2 (or double-click on a row)</td>
+ <td nowrap class="HotKey">CTRL-F2 or double-click on a row</td>
<td width="50" align="center">-</td>
- <td colspan="1">Define a 'marker' (add a note to a row)</td>
- <td nowrap class="HotKey">F2</td>
+ <td>Define a 'marker' (add a note to a row)</td>
+ <td nowrap class="HotKey">CTRL-SHIFT-F2</td>
<td width="50" align="center">-</td>
- <td colspan="1">Find next marker</td>
+ <td>Clear all markers</td>
</tr>
-<tr valign="top" bgcolor="#EEEEEE">
- <td nowrap class="HotKey">Shift-F2</td>
+<tr valign="top">
+ <td nowrap class="HotKey">F2</td>
<td width="50" align="center">-</td>
- <td colspan="1">Find previous marker</td>
- <td nowrap class="HotKey">Ctrl-shift-F2</td>
+ <td>Find next marker</td>
+ <td nowrap class="HotKey">SHIFT-F2</td>
<td width="50" align="center">-</td>
- <td colspan="1">Clear all markers</td>
+ <td>Find previous marker</td>
</tr>
-<tr valign="top">
+<tr valign="top" bgcolor="#EEEEEE">
<td nowrap class="HotKey">ALT-J</td>
<td width="50" align="center">-</td>
<td>Set focus in 'search' field</td>
@@ -67,62 +74,56 @@
<td width="50" align="center">-</td>
<td>Set focus in 'refine focus' field</td>
</tr>
-<tr valign="top" bgcolor="#EEEEEE">
- <td nowrap class="HotKey">CTRL-RIGHT</td>
- <td width="50" align="center">-</td>
- <td>Activate a tab to the right</td>
- <td nowrap class="HotKey">F3</td>
- <td width="50" align="center">-</td>
- <td>Find Next</td>
-</tr>
<tr valign="top" >
<td nowrap class="HotKey">CTRL-S</td>
<td width="50" align="center">-</td>
- <td>Shows a File Save dialog to save the current tab's events as XML</td>
- <td nowrap class="HotKey">F6</td>
- <td width="50" align="center">-</td>
- <td>Show Receivers Dialog</td>
+ <td>Save displayed events as XML</td>
+ <td nowrap class="HotKey">CTRL-O</td>
+ <td width="50" align="center">-</td>
+ <td>Load file of XML events</td>
</tr>
<tr valign="top" bgcolor="#EEEEEE">
- <td nowrap class="HotKey">CTRL-O</td>
- <td width="50" align="center">-</td>
- <td>Shows a File Open dialog to open an XML file of events into Chainsaw</td>
+ <td nowrap class="HotKey">ALT-C or CTRL-BACKSPACE</td>
+ <td width="50" align="center">-</td>
+ <td>Purges current panels events</td>
<td nowrap class="HotKey">ALT-P or F12</td>
<td width="50" align="center">-</td>
<td>Pause display</td>
</tr>
<tr valign="top">
- <td nowrap class="HotKey">ALT-C or CTRL-BACKSPACE</td>
- <td width="50" align="center">-</td>
- <td colspan="4">Purges current panels events</td>
-</tr>
-<tr valign="top" bgcolor="#EEEEEE">
<td nowrap class="HotKey">ALT-D</td>
<td width="50" align="center">-</td>
- <td colspan="1">Show/Hide the Detail pane</td>
+ <td>Show/Hide the Detail pane</td>
<td nowrap class="HotKey">ALT-T</td>
<td width="50" align="center">-</td>
- <td colspan="1">Show/Hide the Logger Tree pane</td>
+ <td>Show/Hide the Logger Tree pane</td>
</tr>
<tr valign="top" bgcolor="#EEEEEE">
- <td nowrap class="HotKey">F3</td>
- <td width="50" align="center">-</td>
- <td colspan="1">Find next</td>
- <td nowrap class="HotKey">Shift-F3</td>
- <td width="50" align="center">-</td>
- <td colspan="1">Find previous</td>
+ <td nowrap class="HotKey">F1</td>
+ <td width="50" align="center">-</td>
+ <td>Hide/Show Welcome Panel/Help page</td>
+ <td nowrap class="HotKey">F6</td>
+ <td width="50" align="center">-</td>
+ <td>Show Receivers Dialog</td>
+</tr>
+<tr valign="top">
+ <td nowrap class="HotKey">CTRL-N</td>
+ <td width="50" align="center">-</td>
+ <td>Go to next colored row</td>
+ <td nowrap class="HotKey">CTRL-P</td>
+ <td width="50" align="center">-</td>
+ <td>Go to previous colored row</td>
</tr>
<tr valign="top" bgcolor="#EEEEEE">
- <td nowrap class="HotKey">ALT-X</td>
- <td width="50" align="center">-</td>
- <td colspan="1">Exits the Application</td>
<td nowrap class="HotKey">CTRL-G</td>
<td width="50" align="center">-</td>
- <td colspan="1">Go to line</td>
+ <td>Go to line</td>
+ <td nowrap class="HotKey">ALT-X</td>
+ <td width="50" align="center">-</td>
+ <td>Exits the Application</td>
</tr>
</table></P>
<!--<p><a href="#TheTop">Back to top</a></p>-->
-<a name="Receivers"></a>
<h2>Receivers</h2>
<p>Log4j has a concept of a 'Receiver', an object that receives events
from some source, and deposits them into the Log4j framework in the local JVM.
Modified: logging/chainsaw/trunk/src/main/resources/org/apache/log4j/chainsaw/help/release-notes.html
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/main/resources/org/apache/log4j/chainsaw/help/release-notes.html?rev=931786&r1=931785&r2=931786&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/main/resources/org/apache/log4j/chainsaw/help/release-notes.html (original)
+++ logging/chainsaw/trunk/src/main/resources/org/apache/log4j/chainsaw/help/release-notes.html Thu Apr 8 05:48:08 2010
@@ -10,6 +10,11 @@
<b>NOTE:</b> The mechanism and format used to persist settings in Chainsaw is subject to change. If you are experiencing problems displaying events in Chainsaw, please delete everything in the $user.dir/.chainsaw directory and restart Chainsaw.
<br>
<h1>1.99.99</h1>
+<h2>7 Apr 2010</h2>
+<ul>
+<li>Forward and backward search, as well as forward and backward next-color search now wrap.</li>
+<li>Added display of matching search count in status bar.</li>
+</ul>
<h2>6 Apr 2010</h2>
<ul>
<li>Added default color rule support (ability to assign a tab's color rules as the default color rules for new tabs). Default color rules can be applied to pre-existing tabs via the 'apply a tabs colors' drop down box in the color rule dialog.</li>