Autopsy  4.17.0
Graphical digital forensics platform for The Sleuth Kit and other tools.
ExternalViewerGlobalSettingsPanel.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2011-2018 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.directorytree;
20 
21 import java.awt.Color;
22 import java.awt.event.ActionListener;
23 import java.io.File;
24 import java.util.ArrayList;
25 import java.util.List;
26 import javax.swing.JFileChooser;
28 import javax.swing.JOptionPane;
29 import javax.swing.ListSelectionModel;
30 import javax.swing.event.ListSelectionEvent;
31 import org.openide.util.NbBundle;
32 import org.netbeans.spi.options.OptionsPanelController;
36 
42 @SuppressWarnings("PMD.SingularField") // UI widgets cause lots of false positives
43 final class ExternalViewerGlobalSettingsPanel extends javax.swing.JPanel implements OptionsPanel {
44 
45  private ExternalViewerGlobalSettingsTableModel tableModel;
46 
47  public ExternalViewerGlobalSettingsPanel() {
48  this(new ExternalViewerGlobalSettingsTableModel(new String[] {
49  "Mime type/Extension", "Application"}));
50  }
51 
55  public ExternalViewerGlobalSettingsPanel(ExternalViewerGlobalSettingsTableModel tableModel) {
56  initComponents();
57  this.tableModel = tableModel;
58  customizeComponents(tableModel);
59  }
60 
64  private void customizeComponents(ExternalViewerGlobalSettingsTableModel tableModel) {
65  ExternalViewerRulesTable.setModel(tableModel);
66  ExternalViewerRulesTable.setAutoCreateRowSorter(true);
67  ExternalViewerRulesTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
68  ListSelectionModel selectionModel = ExternalViewerRulesTable.getSelectionModel();
69 
70  selectionModel.addListSelectionListener((ListSelectionEvent selection) -> {
71  enableButtons();
72  });
73  }
74 
80  public void deleteRuleButtonClick(int selectedIndex) {
81  setSelectionInterval(selectedIndex, selectedIndex);
82  deleteRuleButton.getListeners(ActionListener.class)[0].actionPerformed(null);
83  }
84 
92  public void setSelectionInterval(int startingIndex, int endIndex) {
93  ExternalViewerRulesTable.getSelectionModel().setSelectionInterval(startingIndex, endIndex);
94  }
95 
102  public boolean isSelected(int index) {
103  return ExternalViewerRulesTable.getSelectionModel().isSelectedIndex(index);
104  }
105 
111  @SuppressWarnings("unchecked")
112  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
113  private void initComponents() {
114 
115  newRuleButton1 = new javax.swing.JButton();
116  jButton2 = new javax.swing.JButton();
117  jPanel1 = new javax.swing.JPanel();
118  jPanel2 = new javax.swing.JPanel();
119  newRuleButton = new javax.swing.JButton();
120  jScrollPane4 = new javax.swing.JScrollPane();
121  ExternalViewerRulesTable = new javax.swing.JTable();
122  externalViewerTitleLabel = new javax.swing.JLabel();
123  deleteRuleButton = new javax.swing.JButton();
124  editRuleButton = new javax.swing.JButton();
125  jPanel3 = new javax.swing.JPanel();
126  HxDPath = new javax.swing.JTextField();
127  HxDLabel = new javax.swing.JLabel();
128  ContentViewerExtensionLabel = new javax.swing.JLabel();
129  browseHxDDirectory = new javax.swing.JButton();
130 
131  newRuleButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/add16.png"))); // NOI18N
132  org.openide.awt.Mnemonics.setLocalizedText(newRuleButton1, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.newRuleButton1.text")); // NOI18N
133  newRuleButton1.setMaximumSize(new java.awt.Dimension(111, 25));
134  newRuleButton1.setMinimumSize(new java.awt.Dimension(111, 25));
135 
136  org.openide.awt.Mnemonics.setLocalizedText(jButton2, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.jButton2.text")); // NOI18N
137 
138  setPreferredSize(new java.awt.Dimension(701, 453));
139 
140  jPanel1.setPreferredSize(new java.awt.Dimension(701, 453));
141 
142  newRuleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/add16.png"))); // NOI18N
143  org.openide.awt.Mnemonics.setLocalizedText(newRuleButton, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.newRuleButton.text")); // NOI18N
144  newRuleButton.setMaximumSize(new java.awt.Dimension(111, 25));
145  newRuleButton.setMinimumSize(new java.awt.Dimension(111, 25));
146  newRuleButton.addActionListener(new java.awt.event.ActionListener() {
147  public void actionPerformed(java.awt.event.ActionEvent evt) {
148  newRuleButtonActionPerformed(evt);
149  }
150  });
151 
152  jScrollPane4.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(204, 204, 204)));
153 
154  jScrollPane4.setViewportView(ExternalViewerRulesTable);
155  if (ExternalViewerRulesTable.getColumnModel().getColumnCount() > 0) {
156  ExternalViewerRulesTable.getColumnModel().getColumn(0).setHeaderValue(org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.ExternalViewerRulesTable.columnModel.title0")); // NOI18N
157  ExternalViewerRulesTable.getColumnModel().getColumn(1).setHeaderValue(org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.ExternalViewerRulesTable.columnModel.title1")); // NOI18N
158  }
159 
160  org.openide.awt.Mnemonics.setLocalizedText(externalViewerTitleLabel, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.externalViewerTitleLabel.text")); // NOI18N
161 
162  deleteRuleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/delete16.png"))); // NOI18N
163  org.openide.awt.Mnemonics.setLocalizedText(deleteRuleButton, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.deleteRuleButton.text")); // NOI18N
164  deleteRuleButton.setMaximumSize(new java.awt.Dimension(111, 25));
165  deleteRuleButton.setMinimumSize(new java.awt.Dimension(111, 25));
166  deleteRuleButton.addActionListener(new java.awt.event.ActionListener() {
167  public void actionPerformed(java.awt.event.ActionEvent evt) {
168  deleteRuleButtonActionPerformed(evt);
169  }
170  });
171 
172  editRuleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/edit16.png"))); // NOI18N
173  org.openide.awt.Mnemonics.setLocalizedText(editRuleButton, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.editRuleButton.text")); // NOI18N
174  editRuleButton.setMaximumSize(new java.awt.Dimension(111, 25));
175  editRuleButton.setMinimumSize(new java.awt.Dimension(111, 25));
176  editRuleButton.addActionListener(new java.awt.event.ActionListener() {
177  public void actionPerformed(java.awt.event.ActionEvent evt) {
178  editRuleButtonActionPerformed(evt);
179  }
180  });
181 
182  javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
183  jPanel2.setLayout(jPanel2Layout);
184  jPanel2Layout.setHorizontalGroup(
185  jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
186  .addGroup(jPanel2Layout.createSequentialGroup()
187  .addContainerGap()
188  .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
189  .addComponent(jScrollPane4, javax.swing.GroupLayout.PREFERRED_SIZE, 634, javax.swing.GroupLayout.PREFERRED_SIZE)
190  .addGroup(jPanel2Layout.createSequentialGroup()
191  .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
192  .addComponent(externalViewerTitleLabel)
193  .addGroup(jPanel2Layout.createSequentialGroup()
194  .addComponent(newRuleButton, javax.swing.GroupLayout.PREFERRED_SIZE, 97, javax.swing.GroupLayout.PREFERRED_SIZE)
195  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
196  .addComponent(editRuleButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
197  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
198  .addComponent(deleteRuleButton, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE)))
199  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
200  );
201  jPanel2Layout.setVerticalGroup(
202  jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
203  .addGroup(jPanel2Layout.createSequentialGroup()
204  .addComponent(externalViewerTitleLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
205  .addGap(12, 12, 12)
206  .addComponent(jScrollPane4, javax.swing.GroupLayout.PREFERRED_SIZE, 219, javax.swing.GroupLayout.PREFERRED_SIZE)
207  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
208  .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
209  .addComponent(newRuleButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
210  .addComponent(editRuleButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
211  .addComponent(deleteRuleButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
212  .addContainerGap())
213  );
214 
215  HxDPath.setEditable(false);
216 
217  org.openide.awt.Mnemonics.setLocalizedText(HxDLabel, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.HxDLabel.text")); // NOI18N
218 
219  org.openide.awt.Mnemonics.setLocalizedText(ContentViewerExtensionLabel, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.ContentViewerExtensionLabel.text")); // NOI18N
220 
221  org.openide.awt.Mnemonics.setLocalizedText(browseHxDDirectory, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.browseHxDDirectory.text")); // NOI18N
222  browseHxDDirectory.addActionListener(new java.awt.event.ActionListener() {
223  public void actionPerformed(java.awt.event.ActionEvent evt) {
224  browseHxDDirectoryActionPerformed(evt);
225  }
226  });
227 
228  javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
229  jPanel3.setLayout(jPanel3Layout);
230  jPanel3Layout.setHorizontalGroup(
231  jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
232  .addGroup(jPanel3Layout.createSequentialGroup()
233  .addComponent(ContentViewerExtensionLabel)
234  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
235  .addGroup(jPanel3Layout.createSequentialGroup()
236  .addGap(21, 21, 21)
237  .addComponent(HxDLabel)
238  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
239  .addComponent(HxDPath, javax.swing.GroupLayout.DEFAULT_SIZE, 441, Short.MAX_VALUE)
240  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
241  .addComponent(browseHxDDirectory, javax.swing.GroupLayout.PREFERRED_SIZE, 82, javax.swing.GroupLayout.PREFERRED_SIZE))
242  );
243  jPanel3Layout.setVerticalGroup(
244  jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
245  .addGroup(jPanel3Layout.createSequentialGroup()
246  .addComponent(ContentViewerExtensionLabel)
247  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
248  .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
249  .addComponent(HxDPath, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
250  .addComponent(HxDLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
251  .addComponent(browseHxDDirectory))
252  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
253  );
254 
255  browseHxDDirectory.setEnabled(PlatformUtil.isWindowsOS());
256 
257  javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
258  jPanel1.setLayout(jPanel1Layout);
259  jPanel1Layout.setHorizontalGroup(
260  jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
261  .addGroup(jPanel1Layout.createSequentialGroup()
262  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
263  .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
264  .addGroup(jPanel1Layout.createSequentialGroup()
265  .addContainerGap()
266  .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
267  .addGap(547, 547, 547))
268  );
269  jPanel1Layout.setVerticalGroup(
270  jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
271  .addGroup(jPanel1Layout.createSequentialGroup()
272  .addContainerGap()
273  .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
274  .addGap(18, 18, 18)
275  .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
276  .addContainerGap(83, Short.MAX_VALUE))
277  );
278 
279  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
280  this.setLayout(layout);
281  layout.setHorizontalGroup(
282  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
283  .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 1191, Short.MAX_VALUE)
284  );
285  layout.setVerticalGroup(
286  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
287  .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
288  );
289  }// </editor-fold>//GEN-END:initComponents
290 
291  private void newRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newRuleButtonActionPerformed
292  AddExternalViewerRuleDialog dialog = new AddExternalViewerRuleDialog();
293  AddExternalViewerRuleDialog.BUTTON_PRESSED result = dialog.getResult();
294  if (result == AddExternalViewerRuleDialog.BUTTON_PRESSED.OK) {
295  ExternalViewerRule newRule = dialog.getRule();
296  // Only allow one association for each MIME type or extension.
297  if (tableModel.containsRule(newRule)) {
298  JOptionPane.showMessageDialog(this,
299  NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.JOptionPane.ruleAlreadyExists.message"),
300  NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.JOptionPane.ruleAlreadyExists.title"),
301  JOptionPane.ERROR_MESSAGE);
302  } else {
303  tableModel.addRule(newRule);
304  enableButtons();
305  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
306  }
307  }
308  }//GEN-LAST:event_newRuleButtonActionPerformed
309 
310  private void editRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editRuleButtonActionPerformed
311  int selectedIndex = ExternalViewerRulesTable.convertRowIndexToModel(ExternalViewerRulesTable.getSelectedRow());
312  ExternalViewerRule selectedRule = tableModel.getRuleAt(selectedIndex);
313  AddExternalViewerRuleDialog dialog = new AddExternalViewerRuleDialog(selectedRule);
314  AddExternalViewerRuleDialog.BUTTON_PRESSED result = dialog.getResult();
315  if (result == AddExternalViewerRuleDialog.BUTTON_PRESSED.OK) {
316  ExternalViewerRule newRule = dialog.getRule();
317  // Only allow one association for each MIME type or extension.
318  if (tableModel.containsRule(newRule)) {
319  JOptionPane.showMessageDialog(this,
320  NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.JOptionPane.ruleAlreadyExists.message"),
321  NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.JOptionPane.ruleAlreadyExists.title"),
322  JOptionPane.ERROR_MESSAGE);
323  } else {
324  tableModel.setRule(selectedIndex, dialog.getRule());
325  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
326  }
327  }
328  }//GEN-LAST:event_editRuleButtonActionPerformed
329 
330  private void deleteRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteRuleButtonActionPerformed
331  tableModel.removeRule(ExternalViewerRulesTable.convertRowIndexToModel(ExternalViewerRulesTable.getSelectedRow()));
332  ExternalViewerRulesTable.getSelectionModel().clearSelection();
333  enableButtons();
334  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
335  }//GEN-LAST:event_deleteRuleButtonActionPerformed
336 
337  private void browseHxDDirectoryActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseHxDDirectoryActionPerformed
338  JFileChooser fileWindow = new JFileChooser();
339  fileWindow.setFileSelectionMode(JFileChooser.FILES_ONLY);
340  GeneralFilter exeFilter = new GeneralFilter(GeneralFilter.EXECUTABLE_EXTS, GeneralFilter.EXECUTABLE_DESC);
341  File HxDPathFile = new File(HxDPath.getText());
342  if(HxDPathFile.exists() && HxDPathFile.canExecute()) {
343  fileWindow.setCurrentDirectory(new File(HxDPath.getText()));
344  }
345  fileWindow.setDragEnabled(false);
346  fileWindow.setFileFilter(exeFilter);
347  fileWindow.setMultiSelectionEnabled(false);
348  int returnVal = fileWindow.showSaveDialog(this);
349  if(returnVal == JFileChooser.APPROVE_OPTION) {
350  File HxDExecutable = fileWindow.getSelectedFile();
351  HxDPath.setForeground(Color.BLACK);
352  HxDPath.setText(HxDExecutable.getAbsolutePath());
353  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
354  }
355  }//GEN-LAST:event_browseHxDDirectoryActionPerformed
356 
357  @Override
358  public void store() {
359  //Dump rules from table model into a list to be stored by the rules manager.
360  List<ExternalViewerRule> rules = new ArrayList<>();
361  for(int i = 0; i < tableModel.getRowCount(); i++) {
362  rules.add(tableModel.getRuleAt(i));
363  }
364  ExternalViewerRulesManager.getInstance().setUserRules(rules);
365  UserPreferences.setExternalHexEditorPath(HxDPath.getText());
366  }
367 
368  @Override
369  public void load() {
370  List<ExternalViewerRule> rules = ExternalViewerRulesManager.getInstance().getUserRules();
371  for(ExternalViewerRule rule : rules) {
372  if(!tableModel.containsRule(rule)) {
373  tableModel.addRule(rule);
374  }
375  }
376  String editorPath = UserPreferences.getExternalHexEditorPath();
377  File HdXExecutable = new File(editorPath);
378  if(HdXExecutable.exists() || HdXExecutable.canExecute()) {
379  HxDPath.setText(editorPath);
380  } else {
381  HxDPath.setForeground(Color.RED);
382  HxDPath.setText(editorPath);
383  }
384  enableButtons();
385  }
386 
390  boolean enableButtons() {
391  boolean ruleIsSelected = ExternalViewerRulesTable.getSelectedRow() >= 0;
392  editRuleButton.setEnabled(ruleIsSelected);
393  deleteRuleButton.setEnabled(ruleIsSelected);
394  return ruleIsSelected;
395  }
396 
397  // Variables declaration - do not modify//GEN-BEGIN:variables
398  private javax.swing.JLabel ContentViewerExtensionLabel;
399  private javax.swing.JTable ExternalViewerRulesTable;
400  private javax.swing.JLabel HxDLabel;
401  private javax.swing.JTextField HxDPath;
402  private javax.swing.JButton browseHxDDirectory;
403  private javax.swing.JButton deleteRuleButton;
404  private javax.swing.JButton editRuleButton;
405  private javax.swing.JLabel externalViewerTitleLabel;
406  private javax.swing.JButton jButton2;
407  private javax.swing.JPanel jPanel1;
408  private javax.swing.JPanel jPanel2;
409  private javax.swing.JPanel jPanel3;
410  private javax.swing.JScrollPane jScrollPane4;
411  private javax.swing.JButton newRuleButton;
412  private javax.swing.JButton newRuleButton1;
413  // End of variables declaration//GEN-END:variables
414 }

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