Autopsy  3.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
DropdownToolbar.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 
20 /*
21  * DropdownToolbar
22  *
23  */
24 package org.sleuthkit.autopsy.keywordsearch;
25 
26 import java.awt.event.ActionEvent;
27 import java.awt.event.ActionListener;
28 import java.awt.event.MouseEvent;
29 import java.beans.PropertyChangeEvent;
30 import java.beans.PropertyChangeListener;
31 import java.util.logging.Level;
32 
34 import javax.swing.SwingUtilities;
35 import javax.swing.event.PopupMenuEvent;
36 import javax.swing.event.PopupMenuListener;
38 
43 class DropdownToolbar extends javax.swing.JPanel {
44 
45  private static final Logger logger = Logger.getLogger(DropdownToolbar.class.getName());
46  private KeywordPropertyChangeListener listener;
47  private boolean active = false;
48  private static DropdownToolbar instance;
49  private DropdownSingleTermSearchPanel dropPanel = null;
50 
52  private DropdownToolbar() {
53  initComponents();
54  customizeComponents();
55  }
56 
60  public synchronized static DropdownToolbar getDefault() {
61  if (instance == null) {
62  instance = new DropdownToolbar();
63  }
64  return instance;
65  }
66 
67  private void customizeComponents() {
68  listener = new KeywordPropertyChangeListener();
69  KeywordSearch.getServer().addServerActionListener(listener);
70  Case.addPropertyChangeListener(listener);
71 
72  DropdownListSearchPanel listsPanel = DropdownListSearchPanel.getDefault();
73  listsPanel.addSearchButtonActionListener(new ActionListener() {
74  @Override
75  public void actionPerformed(ActionEvent e) {
76  listsMenu.setVisible(false);
77  }
78  });
79  // Adding border of six to account for menu border
80  listsMenu.setSize(listsPanel.getPreferredSize().width + 6, listsPanel.getPreferredSize().height + 6);
81  listsMenu.add(listsPanel);
82  listsMenu.addPopupMenuListener(new PopupMenuListener() {
83  @Override
84  public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
85  listsButton.setSelected(true);
86  }
87 
88  @Override
89  public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
90  listsButton.setSelected(false);
91  }
92 
93  @Override
94  public void popupMenuCanceled(PopupMenuEvent e) {
95  listsButton.setSelected(false);
96  }
97  });
98 
99  dropPanel = DropdownSingleTermSearchPanel.getDefault();
100  dropPanel.addSearchButtonActionListener(new ActionListener() {
101  @Override
102  public void actionPerformed(ActionEvent e) {
103  searchMenu.setVisible(false);
104  }
105  });
106  searchMenu.setSize(dropPanel.getPreferredSize().width + 6, dropPanel.getPreferredSize().height + 6);
107  searchMenu.add(dropPanel);
108  searchMenu.addPopupMenuListener(new PopupMenuListener() {
109  @Override
110  public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
111  searchDropButton.setSelected(true);
112  }
113 
114  @Override
115  public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
116  searchDropButton.setSelected(false);
117  }
118 
119  @Override
120  public void popupMenuCanceled(PopupMenuEvent e) {
121  searchDropButton.setSelected(false);
122  }
123  });
124 
125  }
126 
127 
128 
134  @SuppressWarnings("unchecked")
135  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
136  private void initComponents() {
137 
138  listsMenu = new javax.swing.JPopupMenu();
139  searchMenu = new javax.swing.JPopupMenu();
140  listsButton = new javax.swing.JButton();
141  searchDropButton = new javax.swing.JButton();
142  jSeparator1 = new javax.swing.JSeparator();
143 
144  setOpaque(false);
145 
146  listsButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/keywordsearch/watchbutton-icon.png"))); // NOI18N NON-NLS
147  listsButton.setText(org.openide.util.NbBundle.getMessage(DropdownToolbar.class, "ListBundleName")); // NOI18N
148  listsButton.setBorderPainted(false);
149  listsButton.setContentAreaFilled(false);
150  listsButton.setEnabled(false);
151  listsButton.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/keywordsearch/watchbutton-icon-rollover.png"))); // NOI18N NON-NLS
152  listsButton.setRolloverSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/keywordsearch/watchbutton-icon-pressed.png"))); // NOI18N NON-NLS
153  listsButton.addMouseListener(new java.awt.event.MouseAdapter() {
154  public void mousePressed(java.awt.event.MouseEvent evt) {
155  listsButtonMousePressed(evt);
156  }
157  });
158  listsButton.addActionListener(new java.awt.event.ActionListener() {
159  public void actionPerformed(java.awt.event.ActionEvent evt) {
160  listsButtonActionPerformed(evt);
161  }
162  });
163 
164  searchDropButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/keywordsearch/searchbutton-icon.png"))); // NOI18N NON-NLS
165  searchDropButton.setText(org.openide.util.NbBundle.getMessage(DropdownToolbar.class, "KeywordSearchPanel.searchDropButton.text")); // NOI18N
166  searchDropButton.setBorderPainted(false);
167  searchDropButton.setContentAreaFilled(false);
168  searchDropButton.setEnabled(false);
169  searchDropButton.setMaximumSize(new java.awt.Dimension(146, 27));
170  searchDropButton.setMinimumSize(new java.awt.Dimension(146, 27));
171  searchDropButton.setPreferredSize(new java.awt.Dimension(146, 27));
172  searchDropButton.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/keywordsearch/searchbutton-icon-rollover.png"))); // NOI18N NON-NLS
173  searchDropButton.setRolloverSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/keywordsearch/searchbutton-icon-pressed.png"))); // NOI18N NON-NLS
174  searchDropButton.addMouseListener(new java.awt.event.MouseAdapter() {
175  public void mousePressed(java.awt.event.MouseEvent evt) {
176  searchDropButtonMousePressed(evt);
177  }
178  });
179 
180  jSeparator1.setOrientation(javax.swing.SwingConstants.VERTICAL);
181 
182  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
183  this.setLayout(layout);
184  layout.setHorizontalGroup(
185  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
186  .addGroup(layout.createSequentialGroup()
187  .addComponent(listsButton)
188  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
189  .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 7, javax.swing.GroupLayout.PREFERRED_SIZE)
190  .addGap(0, 0, 0)
191  .addComponent(searchDropButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
192  .addContainerGap())
193  );
194  layout.setVerticalGroup(
195  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
196  .addGroup(layout.createSequentialGroup()
197  .addGap(0, 0, Short.MAX_VALUE)
198  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
199  .addComponent(listsButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
200  .addComponent(searchDropButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
201  .addComponent(jSeparator1)))
202  );
203  }// </editor-fold>//GEN-END:initComponents
204 
205  private void listsButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_listsButtonMousePressed
206  maybeShowListsPopup(evt);
207  }//GEN-LAST:event_listsButtonMousePressed
208 
209  private void listsButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_listsButtonActionPerformed
210  // TODO add your handling code here:
211  }//GEN-LAST:event_listsButtonActionPerformed
212 
213  private void searchDropButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_searchDropButtonMousePressed
214  maybeShowSearchPopup(evt);
215  }//GEN-LAST:event_searchDropButtonMousePressed
216 
217  // Variables declaration - do not modify//GEN-BEGIN:variables
218  private javax.swing.JSeparator jSeparator1;
219  private javax.swing.JButton listsButton;
220  private javax.swing.JPopupMenu listsMenu;
221  private javax.swing.JButton searchDropButton;
222  private javax.swing.JPopupMenu searchMenu;
223  // End of variables declaration//GEN-END:variables
224 
225  private class KeywordPropertyChangeListener implements PropertyChangeListener {
226 
227  @Override
228  public void propertyChange(PropertyChangeEvent evt) {
229  String changed = evt.getPropertyName();
230  Object oldValue = evt.getOldValue();
231  Object newValue = evt.getNewValue();
232 
233  if (changed.equals(Case.Events.CURRENT_CASE.toString())) {
234  dropPanel.resetSearchBox();
235  if (newValue == null) {
236  setFields(false);
237  } else {
238  setFields(true);
239  }
240  } else if (changed.equals(Server.CORE_EVT)) {
241  final Server.CORE_EVT_STATES state = (Server.CORE_EVT_STATES) newValue;
242  switch (state) {
243  case STARTED:
244  try {
245  final int numIndexedFiles = KeywordSearch.getServer().queryNumIndexedFiles();
246  KeywordSearch.fireNumIndexedFilesChange(null, new Integer(numIndexedFiles));
247  //setFilesIndexed(numIndexedFiles);
248  }
249  catch (NoOpenCoreException ex) {
250  logger.log(Level.SEVERE, "Error executing Solr query, " + ex); //NON-NLS
251  }
252  catch (KeywordSearchModuleException se) {
253  logger.log(Level.SEVERE, "Error executing Solr query, " + se.getMessage()); //NON-NLS
254  }
255  break;
256  case STOPPED:
257  break;
258  default:
259  }
260  }
261  }
262 
263  private void setFields(boolean enabled) {
264  searchDropButton.setEnabled(enabled);
265  listsButton.setEnabled(enabled);
266  active = enabled;
267  }
268  }
269 
270  private void maybeShowListsPopup(MouseEvent evt) {
271  if (!active) {
272  return;
273  }
274  if (evt != null && !SwingUtilities.isLeftMouseButton(evt)) {
275  return;
276  }
277  listsMenu.show(listsButton, listsButton.getWidth() - listsMenu.getWidth(), listsButton.getHeight() - 1);
278  }
279 
280  private void maybeShowSearchPopup(MouseEvent evt) {
281  if (!active) {
282  return;
283  }
284  if (evt != null && !SwingUtilities.isLeftMouseButton(evt)) {
285  return;
286  }
287  searchMenu.show(searchDropButton, searchDropButton.getWidth() - searchMenu.getWidth(), searchDropButton.getHeight() - 1);
288  }
289 }
static void fireNumIndexedFilesChange(Integer oldNum, Integer newNum)

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.