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

Copyright © 2012-2015 Basis Technology. Generated on: Wed Apr 6 2016
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.