19package org.sleuthkit.autopsy.ingest;
21import java.awt.BorderLayout;
23import java.awt.EventQueue;
25import java.awt.Graphics;
26import java.beans.PropertyChangeEvent;
27import java.beans.PropertyChangeListener;
28import java.util.EnumSet;
29import javax.swing.JButton;
30import org.openide.util.NbBundle;
31import org.openide.windows.Mode;
32import org.openide.windows.WindowManager;
33import org.sleuthkit.autopsy.casemodule.Case;
34import org.sleuthkit.autopsy.core.RuntimeProperties;
40@SuppressWarnings(
"PMD.SingularField")
41class IngestMessagesToolbar extends javax.swing.JPanel {
43 private IngestMessagesButton ingestMessagesButton =
new IngestMessagesButton();
44 private static volatile IngestMessagesToolbar instance;
46 private IngestMessagesToolbar() {
48 customizeComponents();
51 public static IngestMessagesToolbar getDefault() {
52 if (instance ==
null) {
53 synchronized (IngestMessagesToolbar.class) {
54 if (instance ==
null) {
55 instance =
new IngestMessagesToolbar();
67 @SuppressWarnings(
"unchecked")
69 private
void initComponents() {
71 setToolTipText(org.openide.util.NbBundle.getMessage(IngestMessagesToolbar.class,
"IngestMessagesToolbar.toolTipText"));
72 setMaximumSize(
new java.awt.Dimension(32767, 25));
73 setPreferredSize(
new java.awt.Dimension(80, 25));
74 setLayout(
new java.awt.BorderLayout());
79 private void customizeButton() {
80 ingestMessagesButton =
new IngestMessagesButton();
82 setMaximumSize(
new java.awt.Dimension(32767, 25));
83 setPreferredSize(
new java.awt.Dimension(80, 25));
85 ingestMessagesButton.setFocusPainted(
false);
86 ingestMessagesButton.setContentAreaFilled(
false);
87 ingestMessagesButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/ingest/mail24.png")));
88 ingestMessagesButton.setRolloverEnabled(
true);
89 ingestMessagesButton.setRolloverIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/ingest/mail24-rollover.png")));
90 ingestMessagesButton.setToolTipText(
91 NbBundle.getMessage(
this.getClass(),
"IngestMessagesToolbar.customizeButton.toolTipText"));
92 ingestMessagesButton.setBorder(
null);
93 ingestMessagesButton.setBorderPainted(
false);
94 ingestMessagesButton.setEnabled(
false);
95 ingestMessagesButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
96 ingestMessagesButton.setMargin(
new java.awt.Insets(0, 0, 0, 0));
97 ingestMessagesButton.setMaximumSize(
new java.awt.Dimension(52, 24));
98 ingestMessagesButton.setMinimumSize(
new java.awt.Dimension(52, 24));
99 ingestMessagesButton.setPreferredSize(
new java.awt.Dimension(52, 24));
100 ingestMessagesButton.addActionListener((java.awt.event.ActionEvent evt) -> {
101 EventQueue.invokeLater(this::showIngestMessages);
103 this.add(ingestMessagesButton, BorderLayout.CENTER);
106 private void customizeComponents() {
110 this.setBorder(
null);
112 IngestMessagePanel.addPropertyChangeSupportListener(
new PropertyChangeListener() {
113 private int numNewMessages = 0;
116 public void propertyChange(PropertyChangeEvent evt) {
118 String propName = evt.getPropertyName();
119 int newNumNewMessages = numNewMessages;
120 if (propName.equals(IngestMessagePanel.MESSAGES_BOX_CLEARED)
121 || propName.equals(IngestMessagePanel.TOTAL_NUM_NEW_MESSAGES_CHANGED)) {
122 newNumNewMessages = (Integer) evt.getNewValue();
125 if (newNumNewMessages != numNewMessages) {
126 ingestMessagesButton.setMessages(newNumNewMessages);
127 numNewMessages = newNumNewMessages;
128 ingestMessagesButton.repaint();
134 if (evt.getPropertyName().equals(Case.Events.CURRENT_CASE.toString())) {
135 setEnabled(evt.getNewValue() != null && RuntimeProperties.runningWithGUI());
143 void showIngestMessages() {
144 IngestMessageTopComponent tc = IngestMessageTopComponent.findInstance();
146 Mode mode = WindowManager.getDefault().findMode(
"floatingLeftBottom");
150 String something = mode.getName();
157 public void setEnabled(
boolean enabled) {
158 super.setEnabled(enabled);
159 ingestMessagesButton.setEnabled(enabled);
175 Font messagesFont = g.getFont().deriveFont(Font.PLAIN,
FONT_SIZE);
176 String messageStr = Integer.toString(
messages);
177 final int len = messageStr.length();
178 g.setFont(messagesFont);
180 int dx = len * 5 + 5;
181 int x = getSize().width - dx;
185 g.setColor(Color.GRAY);
187 g.fillRoundRect(x, 1, dx,
FONT_SIZE, 2, 2);
188 g.setColor(Color.WHITE);
189 g.drawString(messageStr, x + 2,
FONT_SIZE);
192 void setMessages(
int messages) {
193 this.messages = messages;
static void addEventTypeSubscriber(Set< Events > eventTypes, PropertyChangeListener subscriber)