rusefi/java_console/ui/src/main/java/com/rusefi/ui/WarningPanel.java

81 lines
2.4 KiB
Java

package com.rusefi.ui;
import com.rusefi.FileLog;
import com.rusefi.config.generated.Fields;
import com.rusefi.core.MessagesCentral;
import com.rusefi.core.preferences.storage.Node;
import com.rusefi.ui.util.UiUtils;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class WarningPanel {
private static final String WARNING = "WARNING";
private static final String ERROR = "firmware error";
private final JPanel panel = new JPanel(new FlowLayout());
private final JLabel label = new JLabel();
private final JButton reset = new JButton("clear warning");
private final Timer criticalErrorBlinking = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
label.setVisible(!label.isVisible());
UiUtils.trueRepaint(label);
}
});
public WarningPanel(Node config) {
label.setForeground(Color.red);
panel.add(label);
Font currentFont = label.getFont();
label.setFont(currentFont.deriveFont((float) (currentFont.getSize() * 1.5)));
clear();
reset.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
clear();
}
});
MessagesCentral.getInstance().addListener(new MessagesCentral.MessageListener() {
boolean haveFatalError;
@Override
public void onMessage(Class clazz, String message) {
if (haveFatalError)
return;
if (message.startsWith(Fields.CRITICAL_PREFIX)) {
haveFatalError = true;
criticalErrorBlinking.start();
label.setText(message);
return;
}
if (message.startsWith(WARNING) || message.startsWith(ERROR)) {
label.setText(message);
reset.setEnabled(true);
}
}
});
panel.add(reset);
// todo: only display label if logs are being recorded
panel.add(new JLabel(FileLog.LOG_INFO_TEXT));
panel.add(new LogSizeControl(config).getContent());
}
private void clear() {
label.setText("");
reset.setEnabled(false);
}
public JPanel getPanel(Node config) {
return panel;
}
}