minor changes: methods that allow other plugins, e.g. the timeline, to learn about the currently used mote
output filter, make mote-specific coloring on by default
This commit is contained in:
parent
37ebe133e9
commit
bda04947e7
1 changed files with 80 additions and 38 deletions
|
@ -108,6 +108,19 @@ public class LogListener extends VisPlugin implements HasQuickHelp {
|
|||
private static final long serialVersionUID = 3294595371354857261L;
|
||||
private static Logger logger = Logger.getLogger(LogListener.class);
|
||||
|
||||
private final Color[] BG_COLORS = new Color[] {
|
||||
new Color(200, 200, 200),
|
||||
new Color(200, 200, 255),
|
||||
new Color(200, 255, 200),
|
||||
new Color(200, 255, 255),
|
||||
new Color(255, 200, 200),
|
||||
new Color(255, 255, 200),
|
||||
new Color(255, 255, 255),
|
||||
new Color(255, 220, 200),
|
||||
new Color(220, 255, 220),
|
||||
new Color(255, 200, 255),
|
||||
};
|
||||
|
||||
private final static int COLUMN_TIME = 0;
|
||||
private final static int COLUMN_FROM = 1;
|
||||
private final static int COLUMN_DATA = 2;
|
||||
|
@ -119,11 +132,11 @@ public class LogListener extends VisPlugin implements HasQuickHelp {
|
|||
"#"
|
||||
};
|
||||
|
||||
private static final long TIME_SECOND = 1000*Simulation.MILLISECOND;
|
||||
private static final long TIME_MINUTE = 60*TIME_SECOND;
|
||||
private static final long TIME_HOUR = 60*TIME_MINUTE;
|
||||
public static final long TIME_SECOND = 1000*Simulation.MILLISECOND;
|
||||
public static final long TIME_MINUTE = 60*TIME_SECOND;
|
||||
public static final long TIME_HOUR = 60*TIME_MINUTE;
|
||||
|
||||
private boolean formatTimeString = false;
|
||||
private boolean formatTimeString = true;
|
||||
private boolean hasHours = false;
|
||||
|
||||
private final JTable logTable;
|
||||
|
@ -140,7 +153,7 @@ public class LogListener extends VisPlugin implements HasQuickHelp {
|
|||
|
||||
private LogOutputListener logOutputListener;
|
||||
|
||||
private boolean backgroundColors = false;
|
||||
private boolean backgroundColors = true;
|
||||
private JCheckBoxMenuItem colorCheckbox;
|
||||
|
||||
private boolean inverseFilter = false;
|
||||
|
@ -219,7 +232,7 @@ public class LogListener extends VisPlugin implements HasQuickHelp {
|
|||
appendCheckBox = new JCheckBoxMenuItem(appendAction);
|
||||
fileMenu.add(appendCheckBox);
|
||||
|
||||
colorCheckbox = new JCheckBoxMenuItem("Mote-specific coloring");
|
||||
colorCheckbox = new JCheckBoxMenuItem("Mote-specific coloring", backgroundColors);
|
||||
showMenu.add(colorCheckbox);
|
||||
colorCheckbox.addActionListener(new ActionListener() {
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
|
@ -309,18 +322,6 @@ public class LogListener extends VisPlugin implements HasQuickHelp {
|
|||
};
|
||||
DefaultTableCellRenderer cellRenderer = new DefaultTableCellRenderer() {
|
||||
private static final long serialVersionUID = -340743275865216182L;
|
||||
private final Color[] BG_COLORS = new Color[] {
|
||||
new Color(200, 200, 200),
|
||||
new Color(200, 200, 255),
|
||||
new Color(200, 255, 200),
|
||||
new Color(200, 255, 255),
|
||||
new Color(255, 200, 200),
|
||||
new Color(255, 255, 200),
|
||||
new Color(255, 255, 255),
|
||||
new Color(255, 220, 200),
|
||||
new Color(220, 255, 220),
|
||||
new Color(255, 200, 255),
|
||||
};
|
||||
public Component getTableCellRendererComponent(JTable table,
|
||||
Object value, boolean isSelected, boolean hasFocus, int row,
|
||||
int column) {
|
||||
|
@ -331,12 +332,8 @@ public class LogListener extends VisPlugin implements HasQuickHelp {
|
|||
|
||||
if (backgroundColors) {
|
||||
LogData d = logs.get(logTable.getRowSorter().convertRowIndexToModel(row));
|
||||
char last = d.getID().charAt(d.getID().length()-1);
|
||||
if (last >= '0' && last <= '9') {
|
||||
setBackground(BG_COLORS[last - '0']);
|
||||
} else {
|
||||
setBackground(null);
|
||||
}
|
||||
int color = (10+d.ev.getMote().getID())%10;
|
||||
setBackground(BG_COLORS[color]);
|
||||
} else {
|
||||
setBackground(null);
|
||||
}
|
||||
|
@ -674,7 +671,7 @@ public class LogListener extends VisPlugin implements HasQuickHelp {
|
|||
}
|
||||
RowFilter<Object, Object> wrapped = new RowFilter<Object, Object>() {
|
||||
public boolean include(RowFilter.Entry<? extends Object, ? extends Object> entry) {
|
||||
if (regexp != null) {
|
||||
if (regexp != null) {
|
||||
boolean pass = regexp.include(entry);
|
||||
if (inverseFilter && pass) {
|
||||
return false;
|
||||
|
@ -698,6 +695,7 @@ public class LogListener extends VisPlugin implements HasQuickHelp {
|
|||
filterTextField.setBackground(Color.red);
|
||||
filterTextField.setToolTipText("Syntax error in regular expression: " + e.getMessage());
|
||||
}
|
||||
simulation.getGUI().getDesktopPane().repaint();
|
||||
}
|
||||
|
||||
public void trySelectTime(final long time) {
|
||||
|
@ -732,19 +730,7 @@ public class LogListener extends VisPlugin implements HasQuickHelp {
|
|||
|
||||
public String getTime() {
|
||||
if (formatTimeString) {
|
||||
long t = ev.getTime();
|
||||
long h = (t / TIME_HOUR);
|
||||
t -= (t / TIME_HOUR)*TIME_HOUR;
|
||||
long m = (t / TIME_MINUTE);
|
||||
t -= (t / TIME_MINUTE)*TIME_MINUTE;
|
||||
long s = (t / TIME_SECOND);
|
||||
t -= (t / TIME_SECOND)*TIME_SECOND;
|
||||
long ms = t / Simulation.MILLISECOND;
|
||||
if (hasHours) {
|
||||
return String.format("%d:%02d:%02d.%03d", h,m,s,ms);
|
||||
} else {
|
||||
return String.format("%02d:%02d.%03d", m,s,ms);
|
||||
}
|
||||
return getFormattedTime(ev.getTime());
|
||||
} else {
|
||||
return "" + ev.getTime() / Simulation.MILLISECOND;
|
||||
}
|
||||
|
@ -1031,4 +1017,60 @@ public class LogListener extends VisPlugin implements HasQuickHelp {
|
|||
"<br><br>^ID:[2-5] Contiki<br><i>logs from motes 2 to 5 starting with 'Contiki'</i>";
|
||||
}
|
||||
|
||||
/* Experimental feature: let other plugins learn if a log output would be filtered or not */
|
||||
public boolean filterWouldAccept(LogOutputEvent ev) {
|
||||
RowFilter<? super TableModel, ? super Integer> rowFilter = logFilter.getRowFilter();
|
||||
if (rowFilter == null) {
|
||||
/* No filter */
|
||||
return true;
|
||||
}
|
||||
|
||||
final LogData ld = new LogData(ev);
|
||||
RowFilter.Entry<? extends TableModel, ? extends Integer> entry = new RowFilter.Entry<TableModel, Integer>() {
|
||||
public TableModel getModel() {
|
||||
return model;
|
||||
}
|
||||
public int getValueCount() {
|
||||
return model.getColumnCount();
|
||||
}
|
||||
public Object getValue(int index) {
|
||||
if (index == COLUMN_TIME) {
|
||||
return ld.getTime();
|
||||
} else if (index == COLUMN_FROM) {
|
||||
return ld.getID();
|
||||
} else if (index == COLUMN_DATA) {
|
||||
return ld.ev.getMessage();
|
||||
} else if (index == COLUMN_CONCAT) {
|
||||
return ld.getID() + ' ' + ld.ev.getMessage();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
public Integer getIdentifier() {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
boolean show;
|
||||
show = rowFilter.include(entry);
|
||||
return show;
|
||||
}
|
||||
public Color getColorOfEntry(LogOutputEvent logEvent) {
|
||||
int color = (10+logEvent.getMote().getID())%10;
|
||||
return BG_COLORS[color];
|
||||
}
|
||||
|
||||
public static String getFormattedTime(long t) {
|
||||
long h = (t / LogListener.TIME_HOUR);
|
||||
t -= (t / TIME_HOUR)*TIME_HOUR;
|
||||
long m = (t / TIME_MINUTE);
|
||||
t -= (t / TIME_MINUTE)*TIME_MINUTE;
|
||||
long s = (t / TIME_SECOND);
|
||||
t -= (t / TIME_SECOND)*TIME_SECOND;
|
||||
long ms = t / Simulation.MILLISECOND;
|
||||
if (h > 0) {
|
||||
return String.format("%d:%02d:%02d.%03d", h,m,s,ms);
|
||||
} else {
|
||||
return String.format("%02d:%02d.%03d", m,s,ms);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue