Autopsy  3.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
ReportWizardFileOptionsVisualPanel.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2013 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.report;
20 
21 import java.awt.Component;
22 import java.awt.event.MouseAdapter;
23 import java.awt.event.MouseEvent;
24 import java.util.Arrays;
25 import java.util.EnumMap;
26 import java.util.List;
27 import java.util.Map;
28 import javax.swing.JCheckBox;
29 import javax.swing.JLabel;
30 import javax.swing.JList;
31 import javax.swing.ListCellRenderer;
32 import javax.swing.ListModel;
33 import javax.swing.event.ListDataListener;
34 import org.openide.util.NbBundle;
35 
41 class ReportWizardFileOptionsVisualPanel extends javax.swing.JPanel {
42  private List<FileReportDataTypes> options;
43  private Map<FileReportDataTypes, Boolean> optionStates = new EnumMap<>(FileReportDataTypes.class);
44  private ListModel<FileReportDataTypes> model;
45  private ReportWizardFileOptionsPanel wizPanel;
46 
47 
48  public ReportWizardFileOptionsVisualPanel(ReportWizardFileOptionsPanel wizPanel) {
49  this.wizPanel = wizPanel;
50  initComponents();
51  initOptionsList();
52  }
53 
54  @Override
55  public String getName() {
56  return NbBundle.getMessage(this.getClass(), "ReportWizardFileOptionsVisualPanel.getName.text");
57  }
58 
62  private void initOptionsList() {
63  options = Arrays.asList(FileReportDataTypes.values());
64  for(FileReportDataTypes col : options) {
65  optionStates.put(col, Boolean.FALSE);
66  }
67 
68  model = new OptionsListModel();
69  optionsList.setModel(model);
70  optionsList.setCellRenderer(new OptionsListRenderer());
71  optionsList.setVisibleRowCount(-1);
72 
73  selectAllButton.setEnabled(true);
74  deselectAllButton.setEnabled(false);
75 
76  // Add the ability to enable and disable Tag checkboxes to the list
77  optionsList.addMouseListener(new MouseAdapter() {
78  @Override
79  public void mousePressed(MouseEvent evt) {
80 
81  int index = optionsList.locationToIndex(evt.getPoint());
82  FileReportDataTypes value = model.getElementAt(index);
83  optionStates.put(value, !optionStates.get(value));
84  optionsList.repaint();
85  boolean anySelected = anySelected();
86  deselectAllButton.setEnabled(anySelected);
87  wizPanel.setFinish(anySelected);
88  selectAllButton.setEnabled(notAllSelected());
89  }
90  });
91  }
92 
97  private boolean anySelected() {
98  for (Boolean b : optionStates.values()) {
99  if (b) {
100  return true;
101  }
102  }
103  return false;
104  }
105 
110  private boolean notAllSelected() {
111  for (Boolean b : optionStates.values()) {
112  if (!b) {
113  return true;
114  }
115  }
116  return false;
117  }
118 
123  Map<FileReportDataTypes, Boolean> getFileReportOptions() {
124  return optionStates;
125  }
131  @SuppressWarnings("unchecked")
132  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
133  private void initComponents() {
134 
135  jScrollPane1 = new javax.swing.JScrollPane();
136  optionsList = new javax.swing.JList<>();
137  selectAllButton = new javax.swing.JButton();
138  deselectAllButton = new javax.swing.JButton();
139  jLabel1 = new javax.swing.JLabel();
140 
141  optionsList.setModel(new javax.swing.AbstractListModel<FileReportDataTypes>() {
142  FileReportDataTypes[] types = { };
143  public int getSize() { return types.length; }
144  public FileReportDataTypes getElementAt(int i) { return types[i]; }
145  });
146  jScrollPane1.setViewportView(optionsList);
147 
148  org.openide.awt.Mnemonics.setLocalizedText(selectAllButton, org.openide.util.NbBundle.getMessage(ReportWizardFileOptionsVisualPanel.class, "ReportWizardFileOptionsVisualPanel.selectAllButton.text")); // NOI18N
149  selectAllButton.addActionListener(new java.awt.event.ActionListener() {
150  public void actionPerformed(java.awt.event.ActionEvent evt) {
151  selectAllButtonActionPerformed(evt);
152  }
153  });
154 
155  org.openide.awt.Mnemonics.setLocalizedText(deselectAllButton, org.openide.util.NbBundle.getMessage(ReportWizardFileOptionsVisualPanel.class, "ReportWizardFileOptionsVisualPanel.deselectAllButton.text")); // NOI18N
156  deselectAllButton.addActionListener(new java.awt.event.ActionListener() {
157  public void actionPerformed(java.awt.event.ActionEvent evt) {
158  deselectAllButtonActionPerformed(evt);
159  }
160  });
161 
162  org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(ReportWizardFileOptionsVisualPanel.class, "ReportWizardFileOptionsVisualPanel.jLabel1.text")); // NOI18N
163 
164  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
165  this.setLayout(layout);
166  layout.setHorizontalGroup(
167  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
168  .addGroup(layout.createSequentialGroup()
169  .addContainerGap()
170  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
171  .addComponent(jScrollPane1)
172  .addGroup(layout.createSequentialGroup()
173  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
174  .addComponent(jLabel1)
175  .addGroup(layout.createSequentialGroup()
176  .addComponent(selectAllButton, javax.swing.GroupLayout.PREFERRED_SIZE, 87, javax.swing.GroupLayout.PREFERRED_SIZE)
177  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
178  .addComponent(deselectAllButton)))
179  .addGap(0, 210, Short.MAX_VALUE)))
180  .addContainerGap())
181  );
182  layout.setVerticalGroup(
183  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
184  .addGroup(layout.createSequentialGroup()
185  .addGap(10, 10, 10)
186  .addComponent(jLabel1)
187  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
188  .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 220, Short.MAX_VALUE)
189  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
190  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
191  .addComponent(deselectAllButton)
192  .addComponent(selectAllButton))
193  .addContainerGap())
194  );
195  }// </editor-fold>//GEN-END:initComponents
196 
197  private void selectAllButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectAllButtonActionPerformed
198  for (FileReportDataTypes option : options) {
199  optionStates.put(option, Boolean.TRUE);
200  }
201  optionsList.repaint();
202  selectAllButton.setEnabled(false);
203  deselectAllButton.setEnabled(true);
204  wizPanel.setFinish(true);
205  }//GEN-LAST:event_selectAllButtonActionPerformed
206 
207  private void deselectAllButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deselectAllButtonActionPerformed
208  for (FileReportDataTypes option : options) {
209  optionStates.put(option, Boolean.FALSE);
210  }
211  optionsList.repaint();
212  selectAllButton.setEnabled(true);
213  deselectAllButton.setEnabled(false);
214  wizPanel.setFinish(false);
215  }//GEN-LAST:event_deselectAllButtonActionPerformed
216 
217  // Variables declaration - do not modify//GEN-BEGIN:variables
218  private javax.swing.JButton deselectAllButton;
219  private javax.swing.JLabel jLabel1;
220  private javax.swing.JScrollPane jScrollPane1;
221  private javax.swing.JList<FileReportDataTypes> optionsList;
222  private javax.swing.JButton selectAllButton;
223  // End of variables declaration//GEN-END:variables
224 
225  private class OptionsListModel implements ListModel<FileReportDataTypes> {
226 
227  @Override
228  public int getSize() {
229  return options.size();
230  }
231 
232  @Override
233  public FileReportDataTypes getElementAt(int index) {
234  return options.get(index);
235  }
236 
237  @Override
238  public void addListDataListener(ListDataListener l) {
239  }
240 
241  @Override
242  public void removeListDataListener(ListDataListener l) {
243  }
244  }
245 
249  private class OptionsListRenderer extends JCheckBox implements ListCellRenderer<FileReportDataTypes> {
250 
251  @Override
252  public Component getListCellRendererComponent(JList<? extends FileReportDataTypes> list, FileReportDataTypes value, int index, boolean isSelected, boolean cellHasFocus) {
253  if (value != null) {
254  FileReportDataTypes col = value;
255  setEnabled(list.isEnabled());
256  setSelected(optionStates.get(col));
257  setFont(list.getFont());
258  setBackground(list.getBackground());
259  setForeground(list.getForeground());
260  setText(col.getName());
261  return this;
262  }
263  return new JLabel();
264  }
265 
266  }
267 
268 }
Component getListCellRendererComponent(JList<?extends FileReportDataTypes > list, FileReportDataTypes value, int index, boolean isSelected, boolean cellHasFocus)

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.