Autopsy  3.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
IngestMessagesToolbar.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2011 Basis Technology Corp.
5  * Contact: carrier <at> sleuthkit <dot> org
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19 package org.sleuthkit.autopsy.ingest;
20 
21 import java.awt.BorderLayout;
22 import java.awt.Color;
23 import java.awt.EventQueue;
24 import java.awt.Font;
25 import java.awt.Graphics;
26 import java.beans.PropertyChangeEvent;
27 import java.beans.PropertyChangeListener;
28 import javax.swing.JButton;
29 
30 import org.openide.util.NbBundle;
31 import org.openide.windows.Mode;
32 import org.openide.windows.WindowManager;
34 
39  class IngestMessagesToolbar extends javax.swing.JPanel {
40 
41  private IngestMessagesButton ingestMessagesButton = new IngestMessagesButton();
42  private static volatile IngestMessagesToolbar instance;
43 
47  private IngestMessagesToolbar() {
48  initComponents();
49  customizeComponents();
50  }
51 
55  public static IngestMessagesToolbar getDefault() {
56  if (instance == null) {
57  synchronized (IngestMessagesToolbar.class) {
58  if (instance == null) {
59  instance = new IngestMessagesToolbar();
60  }
61  }
62  }
63  return instance;
64  }
65 
71  @SuppressWarnings("unchecked")
72  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
73  private void initComponents() {
74 
75  setToolTipText(org.openide.util.NbBundle.getMessage(IngestMessagesToolbar.class, "IngestMessagesToolbar.toolTipText")); // NOI18N
76  setMaximumSize(new java.awt.Dimension(32767, 25));
77  setPreferredSize(new java.awt.Dimension(80, 25));
78  setLayout(new java.awt.BorderLayout());
79  }// </editor-fold>//GEN-END:initComponents
80 
81  // Variables declaration - do not modify//GEN-BEGIN:variables
82  // End of variables declaration//GEN-END:variables
83  private void customizeButton() {
84  ingestMessagesButton = new IngestMessagesButton();
85 
86  setMaximumSize(new java.awt.Dimension(32767, 25));
87  setPreferredSize(new java.awt.Dimension(80, 25));
88 
89  ingestMessagesButton.setFocusPainted(false);
90  ingestMessagesButton.setContentAreaFilled(false);
91  ingestMessagesButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/ingest/eye-bw-25.png"))); //NON-NLS
92  ingestMessagesButton.setRolloverEnabled(true);
93  ingestMessagesButton.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/ingest/eye-bw-25-rollover.png"))); //NON-NLS
94  ingestMessagesButton.setToolTipText(
95  NbBundle.getMessage(this.getClass(), "IngestMessagesToolbar.customizeButton.toolTipText"));
96  ingestMessagesButton.setBorder(null);
97  ingestMessagesButton.setBorderPainted(false);
98  ingestMessagesButton.setEnabled(false);
99  ingestMessagesButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
100  ingestMessagesButton.setMargin(new java.awt.Insets(0, 0, 0, 0));
101  ingestMessagesButton.setMaximumSize(new java.awt.Dimension(38, 24));
102  ingestMessagesButton.setMinimumSize(new java.awt.Dimension(38, 24));
103  ingestMessagesButton.setPreferredSize(new java.awt.Dimension(38, 24));
104  ingestMessagesButton.addActionListener(new java.awt.event.ActionListener() {
105  @Override
106  public void actionPerformed(java.awt.event.ActionEvent evt) {
107  EventQueue.invokeLater(new Runnable() {
108  @Override
109  public void run() {
110  showIngestMessages();
111  }
112  });
113 
114  }
115  });
116  this.add(ingestMessagesButton, BorderLayout.CENTER);
117  }
118 
119  private void customizeComponents() {
120 
121  customizeButton();
122 
123  this.setBorder(null);
124 
125  IngestMessagePanel.addPropertyChangeSupportListener(new PropertyChangeListener() {
126  private int numNewMessages = 0;
127 
128  @Override
129  public void propertyChange(PropertyChangeEvent evt) {
130 
131  String propName = evt.getPropertyName();
132  int newNumNewMessages = numNewMessages;
133  if (propName.equals(IngestMessagePanel.MESSAGES_BOX_CLEARED)
134  || propName.equals(IngestMessagePanel.TOTAL_NUM_NEW_MESSAGES_CHANGED)) {
135  newNumNewMessages = (Integer) evt.getNewValue();
136  }
137 
138  if (newNumNewMessages != numNewMessages) {
139  ingestMessagesButton.setMessages(newNumNewMessages);
140  numNewMessages = newNumNewMessages;
141  ingestMessagesButton.repaint();
142  }
143  }
144  });
145 
146  Case.addPropertyChangeListener(new PropertyChangeListener() {
147  @Override
148  public void propertyChange(PropertyChangeEvent evt) {
149  if (evt.getPropertyName().equals(Case.Events.CURRENT_CASE.toString())) {
150  setEnabled(evt.getNewValue() != null);
151  }
152  }
153  });
154  }
155 
159  void showIngestMessages() {
160  IngestMessageTopComponent tc = IngestMessageTopComponent.findInstance();
161 
162  Mode mode = WindowManager.getDefault().findMode("floatingLeftBottom"); //NON-NLS
163  if (mode != null) {
164  //TopComponent[] tcs = mode.getTopComponents();
165  mode.dockInto(tc);
166  tc.open();
167  //tc.requestActive();
168  }
169  }
170 
171  @Override
172  public void setEnabled(boolean enabled) {
173  super.setEnabled(enabled);
174  ingestMessagesButton.setEnabled(enabled);
175  }
176 
177  private static class IngestMessagesButton extends JButton {
178 
179  private static final int fontSize = 9;
180  private int messages = 0;
181 
182  @Override
183  public void paint(Graphics g) {
184  super.paint(g);
185 
186  if (messages == 0) {
187  return;
188  }
189  //paint text
190  Font messagesFont = g.getFont().deriveFont(Font.PLAIN, fontSize);
191  String messageStr = Integer.toString(messages);
192  final int len = messageStr.length();
193  g.setFont(messagesFont);
194 
195  int dx = len * 5 + 5;
196  int x = getSize().width - dx;
197  if (x < 0) {
198  x = 0;
199  }
200  g.setColor(Color.GRAY);
201  //g.fillRect(x, 1, dx, fontSize);
202  g.fillRoundRect(x, 1, dx, fontSize, 2, 2);
203  g.setColor(Color.WHITE);
204  g.drawString(messageStr, x + 2, fontSize);
205  }
206 
207  void setMessages(int messages) {
208  this.messages = messages;
209  }
210  }
211 }

Copyright © 2012-2015 Basis Technology. Generated on: Mon Oct 19 2015
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.