Package

Source Code of BEMenus

import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.ButtonGroup;
import javax.swing.event.TreeModelListener;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.event.ListDataListener;
import javax.swing.event.ListDataEvent;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import javax.swing.KeyStroke;
import java.awt.event.KeyEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.IOException;
import java.util.Observable;
import java.util.Observer;
import java.util.Vector;
import java.util.Enumeration;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.StringSelection;
import java.net.URL;

/**
* The <code>BEViewer</code> class provides the main entry
* for the Bulk Extractor Viewer application.
*/
public class BEMenus extends JMenuBar {

  private final long serialVersionUID = 1;
  private JCheckBoxMenuItem cbShowToolbar;
  private JRadioButtonMenuItem rbFeatureText;
  private JRadioButtonMenuItem rbTypedText;
  private JRadioButtonMenuItem rbTextView;
  private JRadioButtonMenuItem rbHexView;
  private JRadioButtonMenuItem rbDecimal;
  private JRadioButtonMenuItem rbHex;
  private JRadioButtonMenuItem rbReferencedFeaturesVisible;
  private JRadioButtonMenuItem rbReferencedFeaturesCollapsible;
  private JCheckBoxMenuItem cbShowStoplistFiles;
  private JCheckBoxMenuItem cbShowEmptyFiles;
  private JMenuItem miPrintFeature;
  private JMenuItem miClearBookmarks;
  private JMenuItem miExportBookmarks;
  private JMenuItem miCopy;
  private JMenuItem miClose;
  private JMenuItem miCloseAll;
  private JMenuItem miAddBookmark;
  private JMenuItem miManageBookmarks;
  private JMenuItem miPanToStart;
  private JMenuItem miPanToEnd;
  private JMenuItem miShowReportFile;
  private JMenuItem miShowLog;

  private final int KEY_MASK = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
  private final KeyStroke KEYSTROKE_O = KeyStroke.getKeyStroke(KeyEvent.VK_O, KEY_MASK);
  private final KeyStroke KEYSTROKE_Q = KeyStroke.getKeyStroke(KeyEvent.VK_Q, KEY_MASK);
  private final KeyStroke KEYSTROKE_C = KeyStroke.getKeyStroke(KeyEvent.VK_C, KEY_MASK);
  private final KeyStroke KEYSTROKE_R = KeyStroke.getKeyStroke(KeyEvent.VK_R, KEY_MASK);
  private final KeyStroke KEYSTROKE_A = KeyStroke.getKeyStroke(KeyEvent.VK_A, KEY_MASK);
  private final KeyStroke KEYSTROKE_M = KeyStroke.getKeyStroke(KeyEvent.VK_M, KEY_MASK);
  private final KeyStroke KEYSTROKE_B = KeyStroke.getKeyStroke(KeyEvent.VK_B, KEY_MASK);
  private final KeyStroke KEYSTROKE_L = KeyStroke.getKeyStroke(KeyEvent.VK_L, KEY_MASK);

  // ********************************************************************************
  // Create the menus
  // ********************************************************************************
  /**
   * Creates the menus for BEViewer.
   */
  public BEMenus() {

    JMenuItem mi;

    // file
    JMenu file = new JMenu("File");
    add(file);

    // file Open
    mi = new JMenuItem("Open Report\u2026", BEIcons.OPEN_REPORT_16)// ...
    file.add(mi);
    mi.setAccelerator(KEYSTROKE_O);
    mi.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        WOpen.openWindow();
      }
    });

    // file Close
    miClose = new JMenuItem("Close Selected Report");
    file.add(miClose);
    miClose.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        // get the currently selected report
        TreePath selectedTreePath = BEViewer.reportsModel.getSelectedTreePath();
        ReportsModel.ReportTreeNode reportTreeNode = ReportsModel.getReportTreeNodeFromTreePath(selectedTreePath);
        if (reportTreeNode != null) {
          BEViewer.closeReport(reportTreeNode);
        } else {
          WLog.log("BEMenus Close Report failure");
        }
      }
    });
    miClose.setEnabled(false);

    // wire listener to manage when miClose is enabled
    BEViewer.reportsModel.getTreeSelectionModel().addTreeSelectionListener(new TreeSelectionListener() {
      public void valueChanged(TreeSelectionEvent e) {
        // get the currently selected report
        TreePath selectedTreePath = BEViewer.reportsModel.getSelectedTreePath();
        ReportsModel.ReportTreeNode reportTreeNode = ReportsModel.getReportTreeNodeFromTreePath(selectedTreePath);
        if (reportTreeNode != null) {
          miClose.setEnabled(true);
        } else {
          miClose.setEnabled(false);
        }
      }
    });

    // file Close all
    miCloseAll = new JMenuItem("Close all Reports");
    file.add(miCloseAll);
    miCloseAll.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        BEViewer.closeAllReports();
      }
    });
    miCloseAll.setEnabled(false);

    // wire ReportsModel's report tree model listener to manage when miCloseAll is enabled
    BEViewer.reportsModel.getTreeModel().addTreeModelListener(new TreeModelListener() {
      public void treeNodesChanged(TreeModelEvent e) {
        setCloseAllVisibility();
      }
      public void treeNodesInserted(TreeModelEvent e) {
        setCloseAllVisibility();
      }
      public void treeNodesRemoved(TreeModelEvent e) {
        setCloseAllVisibility();
      }
      public void treeStructureChanged(TreeModelEvent e) {
        setCloseAllVisibility();
      }
      private void setCloseAllVisibility() {
        Enumeration<ReportsModel.ReportTreeNode> e = BEViewer.reportsModel.elements();
        miCloseAll.setEnabled(e.hasMoreElements());
      }
    });

    // file|<separator>
    file.addSeparator();

    // file|export bookmarks
    miExportBookmarks = new JMenuItem("Export Bookmarks\u2026", BEIcons.EXPORT_BOOKMARKS_16)// ...
    file.add(miExportBookmarks);
    miExportBookmarks.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        WManageBookmarks.saveBookmarks();
      }
    });

    // wire listener to manage when bookmarks are available for export
    BEViewer.bookmarksModel.bookmarksComboBoxModel.addListDataListener(new ListDataListener() {
      public void contentsChanged(ListDataEvent e) {
        miExportBookmarks.setEnabled(!BEViewer.bookmarksModel.isEmpty());
      }
      public void intervalAdded(ListDataEvent e) {
        miExportBookmarks.setEnabled(!BEViewer.bookmarksModel.isEmpty());
      }
      public void intervalRemoved(ListDataEvent e) {
        miExportBookmarks.setEnabled(!BEViewer.bookmarksModel.isEmpty());
      }
    });
    miExportBookmarks.setEnabled(false);

    // file|<separator>
    file.addSeparator();

    // file|Import Work Settings
    mi = new JMenuItem("Import Work Settings\u2026")// ...
    file.add(mi);
    mi.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        WImportWorkSettings.openWindow();
      }
    });

    // file|Export Work Settings
    mi = new JMenuItem("Export Work Settings\u2026")// ...
    file.add(mi);
    mi.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        WExportWorkSettings.openWindow();
      }
    });

    // file|<separator>
    file.addSeparator();

    // file|Print Range
    miPrintFeature = new JMenuItem("Print Range\u2026", BEIcons.PRINT_FEATURE_16)// ...
    miPrintFeature.setEnabled(false);
    file.add(miPrintFeature);
    miPrintFeature.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        BEViewer.printRange();
      }
    });
    // wire listener to know when a feature is available for printing
    BEViewer.rangeSelectionManager.addRangeSelectionManagerChangedListener(new Observer() {
      public void update(Observable o, Object arg) {
        miPrintFeature.setEnabled(BEViewer.rangeSelectionManager.hasSelection());
      }
    });
    // file|<separator>
    file.addSeparator();

    // file Quit
    mi = new JMenuItem("Quit", BEIcons.EXIT_16);
    file.add(mi);
    mi.setAccelerator(KEYSTROKE_Q);
    mi.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        // close down BEViewer
        BEViewer.doClose();
      }
    });

    // edit
    JMenu edit = new JMenu("Edit");
    add(edit);

    // edit|copy
    miCopy = new JMenuItem("Copy", BEIcons.COPY_16);
    miCopy.setEnabled(false);
    edit.add(miCopy);
    miCopy.setAccelerator(KEYSTROKE_C);
    miCopy.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        // put text onto System Clipboard
        RangeSelectionManager.setSystemClipboard(BEViewer.rangeSelectionManager.getSelection());
      }
    });

    // wire listener to manage when a buffer is available to copy
    BEViewer.rangeSelectionManager.addRangeSelectionManagerChangedListener(new Observer() {
      public void update(Observable o, Object arg) {
        miCopy.setEnabled(BEViewer.rangeSelectionManager.hasSelection());
      }
    });

    // edit|<separator>
    edit.addSeparator();

    // edit|clear all bookmarks
    miClearBookmarks = new JMenuItem("Clear Bookmarks");
    edit.add(miClearBookmarks);
    miClearBookmarks.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        BEViewer.bookmarksModel.clear();
      }
    });
    miClearBookmarks.setEnabled(false);

    // wire listener to know when bookmarks are empty
    BEViewer.bookmarksModel.bookmarksComboBoxModel.addListDataListener(new ListDataListener() {
      public void contentsChanged(ListDataEvent e) {
        miClearBookmarks.setEnabled(!BEViewer.bookmarksModel.isEmpty());
      }
      public void intervalAdded(ListDataEvent e) {
        miClearBookmarks.setEnabled(!BEViewer.bookmarksModel.isEmpty());
      }
      public void intervalRemoved(ListDataEvent e) {
        miClearBookmarks.setEnabled(!BEViewer.bookmarksModel.isEmpty());
      }
    });

    // view
    JMenu view = new JMenu("View");
    add(view);
    ButtonGroup imageGroup = new ButtonGroup();
    ButtonGroup forensicPathNumericBaseGroup = new ButtonGroup();
    ButtonGroup referencedFeaturesGroup = new ButtonGroup();

    // view|Toolbar
    cbShowToolbar = new JCheckBoxMenuItem("Toolbar");
    cbShowToolbar.setSelected(true);
    view.add(cbShowToolbar);
    cbShowToolbar.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        BEViewer.toolbar.setVisible(cbShowToolbar.isSelected());
      }
    });
    // wire listener to know when the toolbar is visible
    BEViewer.toolbar.addToolbarChangedListener(new Observer() {
      public void update(Observable o, Object arg) {
        cbShowToolbar.setSelected(BEViewer.toolbar.isVisible());
      }
    });

    // view|Image Format
    JMenu imageFormatMenu = new JMenu("Image Format");
    view.add(imageFormatMenu);

    // view|Image Format|Text
    rbTextView = new JRadioButtonMenuItem("Text");
    imageGroup.add(rbTextView);
    imageFormatMenu.add(rbTextView);
    rbTextView.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        BEViewer.imageView.setLineFormat(ImageLine.LineFormat.TEXT_FORMAT);
      }
    });

    // view|Image Format|Hex
    rbHexView = new JRadioButtonMenuItem("Hex");
    imageGroup.add(rbHexView);
    imageFormatMenu.add(rbHexView);
    rbHexView.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        BEViewer.imageView.setLineFormat(ImageLine.LineFormat.HEX_FORMAT);
      }
    });

    // wire listener to manage which image view type button is selected
    BEViewer.imageView.addImageViewChangedListener(new Observer() {
      public void update(Observable o, Object arg) {
        // this could be changed to act only on ImageView.ChangeType.FORENSIC_PATH_NUMERIC_BASE_CHANGED
        ImageLine.LineFormat lineFormat = BEViewer.imageView.getLineFormat();
        if (lineFormat == ImageLine.LineFormat.TEXT_FORMAT) {
          rbTextView.setSelected(true);
        } else if (lineFormat == ImageLine.LineFormat.HEX_FORMAT) {
          rbHexView.setSelected(true);
        } else {
          throw new RuntimeException("invalid image format source");
        }
      }
    });
   
    // view|Forensic Path Numeric Base
    JMenu forensicPathNumericBaseMenu = new JMenu("Forensic Path Numeric Base");
    view.add(forensicPathNumericBaseMenu);

    // view|Forensic Path Numeric Base|Decimal
    rbDecimal = new JRadioButtonMenuItem("Decimal");
    forensicPathNumericBaseGroup.add(rbDecimal);
    forensicPathNumericBaseMenu.add(rbDecimal);
    rbDecimal.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        BEViewer.featuresModel.setUseHexPath(false);
        BEViewer.referencedFeaturesModel.setUseHexPath(false);
        BEViewer.imageView.setUseHexPath(false);
        BEViewer.bookmarksModel.fireViewChanged();
      }
    });

    // view|Forensic Path Numeric Base|Hex
    rbHex = new JRadioButtonMenuItem("Hexadecimal");
    forensicPathNumericBaseGroup.add(rbHex);
    forensicPathNumericBaseMenu.add(rbHex);
    rbHex.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        BEViewer.featuresModel.setUseHexPath(true);
        BEViewer.referencedFeaturesModel.setUseHexPath(true);
        BEViewer.imageView.setUseHexPath(true);
        BEViewer.bookmarksModel.fireViewChanged();
      }
    });
   
    // wire listener to manage which forensic path numeric base is shown in the menu
    BEViewer.imageView.addImageViewChangedListener(new Observer() {
      public void update(Observable o, Object arg) {
        if (BEViewer.imageView.getChangeType() == ImageView.ChangeType.FORENSIC_PATH_NUMERIC_BASE_CHANGED) {
          boolean isHex = BEViewer.imageView.getUseHexPath();
          if (!isHex) {
            rbDecimal.setSelected(true);
          } else {
            rbHex.setSelected(true);
          }
        }
      }
    });
   
    // view|Feature Font Size
    JMenu featureFontSizeMenu = new JMenu("Feature Font Size");
    view.add(featureFontSizeMenu);

    // view|Feature Font Size|Zoom In
    mi = new JMenuItem("Zoom In");
    featureFontSizeMenu.add(mi);
    mi.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        BEViewer.featuresModel.setFontSize(BEViewer.featuresModel.getFontSize() + 1);
        BEViewer.referencedFeaturesModel.setFontSize(BEViewer.featuresModel.getFontSize());
      }
    });

    // view|Feature Font Size|Zoom Out
    mi = new JMenuItem("Zoom Out");
    featureFontSizeMenu.add(mi);
    mi.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        int oldFontSize = BEViewer.featuresModel.getFontSize();
        if (oldFontSize > 6) {
          BEViewer.featuresModel.setFontSize(oldFontSize - 1);
          BEViewer.referencedFeaturesModel.setFontSize(BEViewer.featuresModel.getFontSize());
        } else {
          WError.showError("Already at minimum font size of " + oldFontSize + ".",
                           "BEViewer Feature Font Size error", null);
        }
      }
    });

    // view|Feature File View|Normal Size
    mi = new JMenuItem("Normal Size");
    featureFontSizeMenu.add(mi);
    mi.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        BEViewer.featuresModel.setFontSize(BEPreferences.DEFAULT_FEATURE_FONT_SIZE);
        BEViewer.referencedFeaturesModel.setFontSize(BEViewer.featuresModel.getFontSize());
      }
    });

    // view|Image Font Size
    JMenu imageFontSizeMenu = new JMenu("Image Font Size");
    view.add(imageFontSizeMenu);

    // view|Image Font Size|Zoom In
    mi = new JMenuItem("Zoom In");
    imageFontSizeMenu.add(mi);
    mi.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        BEViewer.imageView.setFontSize(BEViewer.imageView.getFontSize() + 1);
      }
    });

    // view|Image Font Size|Zoom Out
    mi = new JMenuItem("Zoom Out");
    imageFontSizeMenu.add(mi);
    mi.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        int oldFontSize = BEViewer.imageView.getFontSize();
        if (oldFontSize > 6) {
          BEViewer.imageView.setFontSize(oldFontSize - 1);
        } else {
          WError.showError("Already at minimum font size of " + oldFontSize + ".",
                           "BEViewer Image Font Size Size error", null);
        }
      }
    });

    // view|Image Font Size|Normal Size
    mi = new JMenuItem("Normal Size");
    imageFontSizeMenu.add(mi);
    mi.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        BEViewer.imageView.setFontSize(BEPreferences.DEFAULT_IMAGE_FONT_SIZE);
      }
    });

    // view|Referenced Features
    JMenu referencedFeaturesMenu = new JMenu("Referenced Features");
    view.add(referencedFeaturesMenu);

    // view|Referenced Features|always visible
    rbReferencedFeaturesVisible = new JRadioButtonMenuItem("Always Visible");
    referencedFeaturesGroup.add(rbReferencedFeaturesVisible);
    referencedFeaturesMenu.add(rbReferencedFeaturesVisible);
    rbReferencedFeaturesVisible.setSelected(!BEViewer.reportSelectionManager.isRequestHideReferencedFeatureView());
    rbReferencedFeaturesVisible.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        BEViewer.reportSelectionManager.setRequestHideReferencedFeatureView(false);
      }
    });

    // view|Referenced Features|collapsible
    rbReferencedFeaturesCollapsible = new JRadioButtonMenuItem("Collapsed when not Referenced");
    referencedFeaturesGroup.add(rbReferencedFeaturesCollapsible);
    referencedFeaturesMenu.add(rbReferencedFeaturesCollapsible);
    rbReferencedFeaturesCollapsible.setSelected(BEViewer.reportSelectionManager.isRequestHideReferencedFeatureView());
    rbReferencedFeaturesCollapsible.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        BEViewer.reportSelectionManager.setRequestHideReferencedFeatureView(true);
      }
    });

    // wire listener to manage which visibility mode is shown in the menu
    BEViewer.reportSelectionManager.addReportSelectionManagerChangedListener(new Observer() {
      public void update(Observable o, Object arg) {
        boolean requestHide = BEViewer.reportSelectionManager.isRequestHideReferencedFeatureView();
        if (requestHide) {
          rbReferencedFeaturesCollapsible.setSelected(true);
        } else {
          rbReferencedFeaturesVisible.setSelected(true);
        }
      }
    });
   
    // view|Feature Files
    JMenu featureFilesMenu = new JMenu("Feature Files");
    view.add(featureFilesMenu);

    // view|Feature Files|Show Stoplist Files
    cbShowStoplistFiles = new JCheckBoxMenuItem("Show Stoplist Files");
    featureFilesMenu.add(cbShowStoplistFiles);
    cbShowStoplistFiles.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        BEViewer.reportsModel.setIncludeStoplistFiles(cbShowStoplistFiles.getState());
      }
    });

    // wire ReportsModel's report tree model listener to manage when show stoplist files is enabled
    BEViewer.reportsModel.getTreeModel().addTreeModelListener(new TreeModelListener() {
      public void treeNodesChanged(TreeModelEvent e) {
        setShowStoplistVisibility();
      }
      public void treeNodesInserted(TreeModelEvent e) {
        setShowStoplistVisibility();
      }
      public void treeNodesRemoved(TreeModelEvent e) {
        setShowStoplistVisibility();
      }
      public void treeStructureChanged(TreeModelEvent e) {
        setShowStoplistVisibility();
      }
      private void setShowStoplistVisibility() {
        Enumeration<ReportsModel.ReportTreeNode> e = BEViewer.reportsModel.elements();
        cbShowStoplistFiles.setSelected(BEViewer.reportsModel.isIncludeStoplistFiles());
      }
    });

    // view|Feature Files|Show Empty Files
    cbShowEmptyFiles = new JCheckBoxMenuItem("Show Empty Files");
    featureFilesMenu.add(cbShowEmptyFiles);
    cbShowEmptyFiles.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        BEViewer.reportsModel.setIncludeEmptyFiles(cbShowEmptyFiles.getState());
      }
    });

    // wire ReportsModel's report tree model listener to manage when show empty files is enabled
    BEViewer.reportsModel.getTreeModel().addTreeModelListener(new TreeModelListener() {
      public void treeNodesChanged(TreeModelEvent e) {
        setShowEmptyFilesVisibility();
      }
      public void treeNodesInserted(TreeModelEvent e) {
        setShowEmptyFilesVisibility();
      }
      public void treeNodesRemoved(TreeModelEvent e) {
        setShowEmptyFilesVisibility();
      }
      public void treeStructureChanged(TreeModelEvent e) {
        setShowEmptyFilesVisibility();
      }
      private void setShowEmptyFilesVisibility() {
        Enumeration<ReportsModel.ReportTreeNode> e = BEViewer.reportsModel.elements();
        cbShowEmptyFiles.setSelected(BEViewer.reportsModel.isIncludeEmptyFiles());
      }
    });

    // view|<separator>
    view.addSeparator();

    // view|Selected Feature
    JMenu selectedFeature = new JMenu("Selected Feature");
    view.add(selectedFeature);

    // view|SelectedFeature|Pan to Start of Path
    miPanToStart = new JMenuItem("Pan to Start of Path");
    selectedFeature.add(miPanToStart);
    miPanToStart.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        // move to start of feature currently in the image model
        BEViewer.imageModel.setImageSelection(ForensicPath.getAdjustedPath(
                     BEViewer.imageView.getImagePage().pageForensicPath, 0));
      }
    });
    miPanToStart.setEnabled(false);

    // view|SelectedFeature|Pan to  End of Path
    miPanToEnd = new JMenuItem("Pan to End of Path");
    selectedFeature.add(miPanToEnd);
    miPanToEnd.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        // move to end of feature currently in the image model
        ImageModel.ImagePage imagePage = BEViewer.imageView.getImagePage();
        String pageForensicPath = imagePage.pageForensicPath;
        long imageSize = imagePage.imageSize;
        long imageEndOffset = (imageSize > 0) ? imageSize - 1 : 0;
        BEViewer.imageModel.setImageSelection(ForensicPath.getAdjustedPath(
                     pageForensicPath, imageEndOffset));
      }
    });
    miPanToEnd.setEnabled(false);

    // view|Selected Feature|<separator>
    selectedFeature.addSeparator();

    // view|Selected Feature|report.xml File
    miShowReportFile = new JMenuItem("Show report.xml File");
    selectedFeature.add(miShowReportFile);
    miShowReportFile.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        // get the currently selected feature line
        FeatureLine featureLine = BEViewer.featureLineSelectionManager.getFeatureLineSelection();
        if (featureLine.featuresFile == null) {
          WError.showError("A Feature must be selected before viewing the Report file.",
                           "BEViewer Selected Feature error", null);
        } else {
          try {
            File reportFile = new File(featureLine.featuresFile.getParentFile(), "report.xml");
            URL url = reportFile.toURI().toURL();
            new WURL("Bulk Extractor Viewer Report file " + reportFile.toString(), url);
          } catch (Exception exc) {
            WError.showError("Unable to read report.xml file.",
                             "BEViewer Read error", exc);
          }
        }
      }
    });
    miShowReportFile.setEnabled(false);

    // wire action for all view|selected feature items
    BEViewer.featureLineSelectionManager.addFeatureLineSelectionManagerChangedListener(new Observer() {
      public void update(Observable o, Object arg) {
        FeatureLine selectedFeatureLine = BEViewer.featureLineSelectionManager.getFeatureLineSelection();
        boolean hasSelection = !selectedFeatureLine.isBlank();
        miPanToStart.setEnabled(hasSelection);
        miPanToEnd.setEnabled(hasSelection);
        miShowReportFile.setEnabled(hasSelection);
      }
    });

    // bookmarks
    JMenu bookmarks = new JMenu("Bookmarks");
    add(bookmarks);

    // bookmarks|Bookmark selected Feature
    miAddBookmark = new JMenuItem("Bookmark selected Feature", BEIcons.ADD_BOOKMARK_16)// ...
    bookmarks.add(miAddBookmark);
    miAddBookmark.setAccelerator(KEYSTROKE_B);
    miAddBookmark.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        FeatureLine selectedFeatureLine = BEViewer.featureLineSelectionManager.getFeatureLineSelection();
        BEViewer.bookmarksModel.addElement(selectedFeatureLine);
      }
    });

    // a feature line has been selected and may be added as a bookmark
    BEViewer.featureLineSelectionManager.addFeatureLineSelectionManagerChangedListener(new Observer() {
      public void update(Observable o, Object arg) {

      // same as in BEToolbar

      // enabled if feature line is not blank and is not already bookmarked
      FeatureLine selectedFeatureLine = BEViewer.featureLineSelectionManager.getFeatureLineSelection();
      miAddBookmark.setEnabled(!selectedFeatureLine.isBlank()
                   && !BEViewer.bookmarksModel.contains(selectedFeatureLine));
      }
    });
    FeatureLine selectedFeatureLine = BEViewer.featureLineSelectionManager.getFeatureLineSelection();
    miAddBookmark.setEnabled(!selectedFeatureLine.isBlank()
                   && !BEViewer.bookmarksModel.contains(selectedFeatureLine));

    // bookmarks|Manage Bookmarks
    miManageBookmarks = new JMenuItem("Manage Bookmarks\u2026", BEIcons.MANAGE_BOOKMARKS_16)// ...
    bookmarks.add(miManageBookmarks);
    miManageBookmarks.setAccelerator(KEYSTROKE_M);
    miManageBookmarks.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        WManageBookmarks.openWindow();
      }
    });
    // wire listener to manage when bookmarks are available for management
    BEViewer.bookmarksModel.bookmarksComboBoxModel.addListDataListener(new ListDataListener() {
      public void contentsChanged(ListDataEvent e) {
        miManageBookmarks.setEnabled(!BEViewer.bookmarksModel.isEmpty());
      }
      public void intervalAdded(ListDataEvent e) {
        miManageBookmarks.setEnabled(!BEViewer.bookmarksModel.isEmpty());
      }
      public void intervalRemoved(ListDataEvent e) {
        miManageBookmarks.setEnabled(!BEViewer.bookmarksModel.isEmpty());
      }
    });
    miManageBookmarks.setEnabled(!BEViewer.bookmarksModel.isEmpty());

    // tools
    JMenu tools = new JMenu("Tools");
    add(tools);

    // tools|Run bulk_extractor
    mi = new JMenuItem("Run bulk_extractor\u2026", BEIcons.RUN_BULK_EXTRACTOR_16)// ...
    tools.add(mi);
    mi.setAccelerator(KEYSTROKE_R);
    mi.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        WScan.openWindow(new ScanSettings());
      }
    });

    // tools|bulk_extractor Run Queue...
    mi = new JMenuItem("bulk_extractor Run Queue\u2026");
    tools.add(mi);
    mi.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        WScanSettingsRunQueue.openWindow();
      }
    });

    // help
    JMenu help = new JMenu("Help");
    add(help);

    // help|About
    mi = new JMenuItem("About Bulk Extractor Viewer " + Config.VERSION, BEIcons.HELP_ABOUT_16);
    help.add(mi);
    mi.setAccelerator(KEYSTROKE_A);
    mi.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        WAbout.openWindow();
      }
    });

    // help|Check Versions
    mi = new JMenuItem("Check Versions");
    help.add(mi);
    mi.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        BulkExtractorVersionReader.showVersions();
      }
    });

    // help|<separator>
    help.addSeparator();

    // help|diagnostics
    JMenu diagnostics = new JMenu("Diagnostics");
    help.add(diagnostics);

    // help|diagnostics|Show Log
    miShowLog = new JMenuItem("Show Log");
    diagnostics.add(miShowLog);
    miShowLog.setAccelerator(KEYSTROKE_L);
    miShowLog.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        WLog.setVisible();
      }
    });

    // help|diagnostics|Clear Log
    mi = new JMenuItem("Clear Log");
    diagnostics.add(mi);
    mi.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        WLog.clearLog();
      }
    });

    // help|diagnostics|Copy Log to System Clipboard
    mi = new JMenuItem("Copy Log to System Clipboard");
    diagnostics.add(mi);
    mi.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        // clear the selection manager
        BEViewer.rangeSelectionManager.clear();

        // get the Transferable log
        Transferable log = new StringSelection(WLog.getLog());

        // copy the log to the system clipboard and, if available, to the selection clipboard
        RangeSelectionManager.setSystemClipboard(log);
        RangeSelectionManager.setSelectionClipboard(log);
      }
    });

    // help|diagnostics|<separator>
    diagnostics.addSeparator();

    // help|diagnostics|Close all Image Readers
    mi = new JMenuItem("Close All Image Readers");
    diagnostics.add(mi);
    mi.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        BEViewer.imageModel.closeAllImageReaders();
      }
    });

    // help|diagnostics|run tests
    mi = new JMenuItem("Run Tests\u2026")// ...
    diagnostics.add(mi);
    mi.addActionListener(new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        new WTest();
      }
    });
  }
}
TOP

Related Classes of BEMenus

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.