Skip to content

Commit 4d4ac55

Browse files
committed
LoggingPanel: add "Settings" to LoggingPanel's popup menu
Now LoggingPanel can be used to record and show the calling class of the log messages.
1 parent 396f11c commit 4d4ac55

File tree

2 files changed

+72
-6
lines changed

2 files changed

+72
-6
lines changed

src/main/java/org/scijava/ui/swing/console/LogFormatter.java

+37-6
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333

3434
import java.io.PrintWriter;
3535
import java.io.StringWriter;
36+
import java.util.EnumSet;
3637

3738
import org.scijava.log.LogLevel;
3839
import org.scijava.log.LogMessage;
@@ -44,16 +45,46 @@
4445
*/
4546
public class LogFormatter {
4647

47-
public String format(LogMessage message) {
48+
public enum Field {
49+
TIME, LEVEL, SOURCE, MESSAGE, THROWABLE, ATTACHMENT
50+
}
51+
52+
private EnumSet<Field> visibleFields = EnumSet.of(Field.TIME,
53+
Field.LEVEL, Field.SOURCE, Field.MESSAGE, Field.THROWABLE);
54+
55+
public boolean isVisible(Field field) {
56+
return visibleFields.contains(field);
57+
}
58+
59+
public void setVisible(Field field, boolean visible) {
60+
// copy on write to enable isVisible to be used concurrently
61+
EnumSet<Field> copy = EnumSet.copyOf(visibleFields);
62+
if (visible) copy.add(field);
63+
else copy.remove(field);
64+
visibleFields = copy;
65+
}
4866

67+
public String format(LogMessage message) {
4968
final StringWriter sw = new StringWriter();
5069
final PrintWriter printer = new PrintWriter(sw);
5170

52-
printWithBrackets(printer, message.time().toString());
53-
printWithBrackets(printer, LogLevel.prefix(message.level()));
54-
printWithBrackets(printer, message.source().toString());
55-
printer.println(message.text());
56-
if (message.throwable() != null)
71+
if (isVisible(Field.TIME))
72+
printWithBrackets(printer, message.time().toString());
73+
74+
if (isVisible(Field.LEVEL))
75+
printWithBrackets(printer, LogLevel.prefix(message.level()));
76+
77+
if (isVisible(Field.SOURCE))
78+
printWithBrackets(printer, message.source().toString());
79+
80+
if (isVisible(Field.ATTACHMENT)) {
81+
printer.print(message.attachments());
82+
printer.print(" ");
83+
}
84+
85+
if (isVisible(Field.MESSAGE)) printer.println(message.text());
86+
87+
if (isVisible(Field.THROWABLE) && message.throwable() != null)
5788
message.throwable().printStackTrace(printer);
5889

5990
return sw.toString();

src/main/java/org/scijava/ui/swing/console/LoggingPanel.java

+35
Original file line numberDiff line numberDiff line change
@@ -223,9 +223,44 @@ private JPopupMenu initMenu() {
223223
this::clear);
224224
menu.add(newMenuItem("Log Sources",
225225
this::toggleSourcesPanel));
226+
menu.add(newMenuItem("update", this::updateFilter));
227+
menu.add(initSettingsMenu());
226228
return menu;
227229
}
228230

231+
private JMenu initSettingsMenu() {
232+
JMenu menu = new JMenu("Settings");
233+
menu.add(newMenuItem("switch recording of calling class on/of",
234+
this::recordCallingClassSetter));
235+
menu.add(newMenuItem("show / hide time stamp",
236+
toggleLogFormatterFieldVisible(LogFormatter.Field.TIME)));
237+
menu.add(newMenuItem("show / hide log source",
238+
toggleLogFormatterFieldVisible(LogFormatter.Field.SOURCE)));
239+
menu.add(newMenuItem("show / hide log level",
240+
toggleLogFormatterFieldVisible(LogFormatter.Field.LEVEL)));
241+
menu.add(newMenuItem("show / hide exception",
242+
toggleLogFormatterFieldVisible(LogFormatter.Field.THROWABLE)));
243+
menu.add(newMenuItem("show / hide attached data",
244+
toggleLogFormatterFieldVisible(LogFormatter.Field.ATTACHMENT)));
245+
return menu;
246+
}
247+
248+
private void recordCallingClassSetter() {
249+
if (recorder != null) {
250+
boolean enable = !recorder.isRecordCallingClass();
251+
recorder.setRecordCallingClass(enable);
252+
if (enable)
253+
logFormatter.setVisible(LogFormatter.Field.ATTACHMENT, true);
254+
}
255+
}
256+
257+
private Runnable toggleLogFormatterFieldVisible(LogFormatter.Field item) {
258+
return () -> {
259+
logFormatter.setVisible(item, !logFormatter.isVisible(item));
260+
updateFilter();
261+
};
262+
}
263+
229264
static private JMenuItem newMenuItem(String text, String keyStroke,
230265
Runnable runnable)
231266
{

0 commit comments

Comments
 (0)