/* * To change this template, choose Tools | Templates * and open the template in the editor. */ /* * VizzyForm.java * * Created on 23.04.2009, 10:16:16 */ package vizzy.forms; import java.awt.Color; import java.awt.Desktop; import java.awt.Dimension; import java.awt.Font; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.AdjustmentEvent; import java.awt.event.AdjustmentListener; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.beans.PropertyChangeListener; import java.net.URI; import java.util.Date; import java.util.List; import javax.swing.Action; import javax.swing.ActionMap; import javax.swing.BorderFactory; import javax.swing.DefaultComboBoxModel; import javax.swing.InputMap; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JScrollBar; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.KeyStroke; import javax.swing.SwingUtilities; import javax.swing.border.Border; import javax.swing.text.BadLocationException; import org.apache.log4j.Logger; import vizzy.comp.FilterDocument; import vizzy.comp.JScrollHighlightPanel; import vizzy.comp.LineHeightTextArea; import vizzy.comp.NewFeaturesPanel; import vizzy.controller.VizzyController; import vizzy.listeners.INewFeaturesListener; import vizzy.listeners.IVizzyView; import vizzy.model.Conf; import vizzy.model.HighlightsColorData; import vizzy.model.SearchResult; import vizzy.model.SettingsModel; /** * * @author sergeil */ public class VizzyForm extends javax.swing.JFrame implements IVizzyView { private static final Logger log = Logger.getLogger(VizzyForm.class); private NewFeaturesPanel newFeaturesPanel; private Border searchComboboxBorder; /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jLineNumbersTextArea = new vizzy.comp.LineHeightTextArea(); jPanel1 = new javax.swing.JPanel(); jSearchPanel = new javax.swing.JPanel(); jSearchComboBox = new javax.swing.JComboBox(); jButton1 = new javax.swing.JButton(); jFilterCheckbox = new javax.swing.JCheckBox(); jRegexpCheckbox = new javax.swing.JCheckBox(); jPanel2 = new javax.swing.JPanel(); jScrollPane1 = new javax.swing.JScrollPane(); jTraceTextArea = new javax.swing.JTextArea(); jScrollHighlight = new vizzy.comp.JScrollHighlightPanel(); jPanel3 = new javax.swing.JPanel(); jClearTraceButton = new javax.swing.JButton(); logTypeCombo = new javax.swing.JComboBox(); jOnTopCheckbox = new javax.swing.JCheckBox(); jAutorefreshCheckBox = new javax.swing.JCheckBox(); jMenuBar1 = new javax.swing.JMenuBar(); jMenu1 = new javax.swing.JMenu(); jMenuItem1 = new javax.swing.JMenuItem(); jMenu3 = new javax.swing.JMenu(); jWordWrapCheckBoxMenuItem = new javax.swing.JCheckBoxMenuItem(); jLineNumbersCheckBoxMenuItem = new javax.swing.JCheckBoxMenuItem(); jSearchVisibleMenuItem = new javax.swing.JCheckBoxMenuItem(); jMenu2 = new javax.swing.JMenu(); jMenuItem3 = new javax.swing.JMenuItem(); jMenuItemDetectPlayer = new javax.swing.JMenuItem(); jSeparator1 = new javax.swing.JSeparator(); jMenuItem2 = new javax.swing.JMenuItem(); jMenuItem4 = new javax.swing.JMenuItem(); jLineNumbersTextArea.setBackground(new java.awt.Color(204, 204, 204)); jLineNumbersTextArea.setFont(new java.awt.Font("Courier New", 0, 12)); jLineNumbersTextArea.setMinimumSize(new java.awt.Dimension(40, 2147483647)); jLineNumbersTextArea.setPreferredSize(new java.awt.Dimension(40, 500)); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("Vizzy Flash Tracer"); addWindowFocusListener(new java.awt.event.WindowFocusListener() { public void windowGainedFocus(java.awt.event.WindowEvent evt) { } public void windowLostFocus(java.awt.event.WindowEvent evt) { formWindowLostFocus(evt); } }); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { formWindowClosing(evt); } public void windowDeactivated(java.awt.event.WindowEvent evt) { formWindowDeactivated(evt); } }); jPanel1.setLayout(new javax.swing.BoxLayout(jPanel1, javax.swing.BoxLayout.Y_AXIS)); jSearchPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(3, 3, 3, 3)); jSearchPanel.setMaximumSize(new java.awt.Dimension(32767, 30)); jSearchPanel.setPreferredSize(new java.awt.Dimension(0, 30)); jSearchComboBox.setEditable(true); jSearchComboBox.setPreferredSize(new java.awt.Dimension(240, 24)); jSearchComboBox.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { jSearchComboBoxItemStateChanged(evt); } }); jSearchComboBox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jSearchComboBoxActionPerformed(evt); } }); jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/img/delete2.png"))); // NOI18N jButton1.setPreferredSize(new java.awt.Dimension(80, 26)); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jClearActionPerformed(evt); } }); jFilterCheckbox.setText("Filter"); jFilterCheckbox.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); jFilterCheckbox.setMargin(new java.awt.Insets(0, 0, 0, 0)); jFilterCheckbox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jFilterCheckboxChecked(evt); } }); jRegexpCheckbox.setText("RegExp"); jRegexpCheckbox.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); jRegexpCheckbox.setMargin(new java.awt.Insets(0, 0, 0, 0)); jRegexpCheckbox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jRegexpCheckboxChecked(evt); } }); org.jdesktop.layout.GroupLayout jSearchPanelLayout = new org.jdesktop.layout.GroupLayout(jSearchPanel); jSearchPanel.setLayout(jSearchPanelLayout); jSearchPanelLayout.setHorizontalGroup( jSearchPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jSearchPanelLayout.createSequentialGroup() .add(jSearchComboBox, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 150, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(jButton1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 40, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) .add(jFilterCheckbox, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 80, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(10, 10, 10) .add(jRegexpCheckbox, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addContainerGap(211, Short.MAX_VALUE)) ); jSearchPanelLayout.setVerticalGroup( jSearchPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jSearchPanelLayout.createSequentialGroup() .add(jSearchPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false) .add(jSearchPanelLayout.createSequentialGroup() .add(5, 5, 5) .add(jSearchPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(jRegexpCheckbox) .add(jFilterCheckbox)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 4, Short.MAX_VALUE)) .add(org.jdesktop.layout.GroupLayout.TRAILING, jButton1, 0, 0, Short.MAX_VALUE) .add(jSearchComboBox, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel1.add(jSearchPanel); jPanel2.setPreferredSize(new java.awt.Dimension(0, 0)); jPanel2.setLayout(new javax.swing.BoxLayout(jPanel2, javax.swing.BoxLayout.LINE_AXIS)); jScrollPane1.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); jScrollPane1.setRowHeaderView(jLineNumbersTextArea); jTraceTextArea.setFont(new java.awt.Font("Courier New", 0, 12)); jTraceTextArea.setLineWrap(true); jTraceTextArea.addMouseWheelListener(new java.awt.event.MouseWheelListener() { public void mouseWheelMoved(java.awt.event.MouseWheelEvent evt) { jTraceTextAreaMouseWheelMoved(evt); } }); jTraceTextArea.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { jTraceTextAreaMouseClicked(evt); } public void mouseExited(java.awt.event.MouseEvent evt) { jTraceTextAreaMouseExited(evt); } public void mousePressed(java.awt.event.MouseEvent evt) { jTraceTextAreaMousePressed(evt); } public void mouseReleased(java.awt.event.MouseEvent evt) { jTraceTextAreaMouseReleased(evt); } }); jTraceTextArea.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { public void mouseMoved(java.awt.event.MouseEvent evt) { jTraceTextAreaMouseMoved(evt); } }); jTraceTextArea.addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(java.awt.event.KeyEvent evt) { jTraceTextAreaKeyPressed(evt); } }); jScrollPane1.setViewportView(jTraceTextArea); jPanel2.add(jScrollPane1); jScrollHighlight.setMaximumSize(new java.awt.Dimension(8, 32767)); jScrollHighlight.setMinimumSize(new java.awt.Dimension(8, 0)); jScrollHighlight.setPreferredSize(new java.awt.Dimension(8, 325)); org.jdesktop.layout.GroupLayout jScrollHighlightLayout = new org.jdesktop.layout.GroupLayout(jScrollHighlight); jScrollHighlight.setLayout(jScrollHighlightLayout); jScrollHighlightLayout.setHorizontalGroup( jScrollHighlightLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(0, 8, Short.MAX_VALUE) ); jScrollHighlightLayout.setVerticalGroup( jScrollHighlightLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(0, 274, Short.MAX_VALUE) ); jPanel2.add(jScrollHighlight); jPanel1.add(jPanel2); jPanel3.setBorder(javax.swing.BorderFactory.createEmptyBorder(3, 3, 3, 7)); jPanel3.setMinimumSize(new java.awt.Dimension(0, 29)); jPanel3.setPreferredSize(new java.awt.Dimension(762, 29)); jClearTraceButton.setText("Clear Log"); jClearTraceButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jClearTraceButtondeleteActionPerformed(evt); } }); logTypeCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Flash Log", "Policy Log" })); logTypeCombo.setMinimumSize(new java.awt.Dimension(67, 23)); logTypeCombo.setPreferredSize(new java.awt.Dimension(72, 23)); logTypeCombo.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { logTypeComboActionPerformed(evt); } }); jOnTopCheckbox.setText("Always on Top"); jOnTopCheckbox.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); jOnTopCheckbox.setMargin(new java.awt.Insets(0, 0, 0, 0)); jOnTopCheckbox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jOnTopCheckboxChecked(evt); } }); jAutorefreshCheckBox.setSelected(true); jAutorefreshCheckBox.setText("Auto Refresh"); jAutorefreshCheckBox.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); jAutorefreshCheckBox.setMargin(new java.awt.Insets(0, 0, 0, 0)); jAutorefreshCheckBox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jAutorefreshCheckBoxjAutorefreshCheckboxChecked(evt); } }); org.jdesktop.layout.GroupLayout jPanel3Layout = new org.jdesktop.layout.GroupLayout(jPanel3); jPanel3.setLayout(jPanel3Layout); jPanel3Layout.setHorizontalGroup( jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(org.jdesktop.layout.GroupLayout.TRAILING, jPanel3Layout.createSequentialGroup() .add(jAutorefreshCheckBox, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 110, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) .add(jOnTopCheckbox, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 124, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 159, Short.MAX_VALUE) .add(jClearTraceButton) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(logTypeCombo, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 117, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) ); jPanel3Layout.setVerticalGroup( jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.CENTER) .add(jAutorefreshCheckBox) .add(logTypeCombo, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(jClearTraceButton) .add(jOnTopCheckbox)) ); jPanel1.add(jPanel3); jMenu1.setText("Edit"); jMenuItem1.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_A, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK)); jMenuItem1.setText("Copy All to Clipboard"); jMenuItem1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { menuCopyAllClicked(evt); } }); jMenu1.add(jMenuItem1); jMenuBar1.add(jMenu1); jMenu3.setText("View"); jWordWrapCheckBoxMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_W, java.awt.event.InputEvent.CTRL_MASK)); jWordWrapCheckBoxMenuItem.setSelected(true); jWordWrapCheckBoxMenuItem.setText("Word Wrap"); jWordWrapCheckBoxMenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jWordWrapCheckBoxMenuItemActionPerformed(evt); } }); jMenu3.add(jWordWrapCheckBoxMenuItem); jLineNumbersCheckBoxMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_L, java.awt.event.InputEvent.CTRL_MASK)); jLineNumbersCheckBoxMenuItem.setSelected(true); jLineNumbersCheckBoxMenuItem.setText("Line Numbers"); jLineNumbersCheckBoxMenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { menuLineNumbersVisibleClicked(evt); } }); jMenu3.add(jLineNumbersCheckBoxMenuItem); jSearchVisibleMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F, java.awt.event.InputEvent.CTRL_MASK)); jSearchVisibleMenuItem.setText("Search Panel "); jSearchVisibleMenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { menuSearchVisibleClicked(evt); } }); jMenu3.add(jSearchVisibleMenuItem); jMenuBar1.add(jMenu3); jMenu2.setText("Extra"); jMenuItem3.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.ALT_MASK)); jMenuItem3.setText("Log snapshot"); jMenuItem3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { menuSnapshotClicked(evt); } }); jMenu2.add(jMenuItem3); jMenuItemDetectPlayer.setText("Detect Flash Player"); jMenuItemDetectPlayer.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItemDetectPlayerActionPerformed(evt); } }); jMenu2.add(jMenuItemDetectPlayer); jMenu2.add(jSeparator1); jMenuItem2.setText("Options..."); jMenuItem2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { menuOptionsClicked(evt); } }); jMenu2.add(jMenuItem2); jMenuItem4.setText("About"); jMenuItem4.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { aboutClicked(evt); } }); jMenu2.add(jMenuItem4); jMenuBar1.add(jMenu2); setJMenuBar(jMenuBar1); org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jPanel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 613, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jPanel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 333, Short.MAX_VALUE) ); pack(); }// </editor-fold>//GEN-END:initComponents private void jFilterCheckboxChecked(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jFilterCheckboxChecked if (!settings.isUIActionsAvailable()) return; controller.filterClicked(jFilterCheckbox.isSelected(), (String)jSearchComboBox.getSelectedItem()); }//GEN-LAST:event_jFilterCheckboxChecked private void jTraceTextAreaKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTraceTextAreaKeyPressed if (!settings.isUIActionsAvailable()) return; controller.textAreaKeyPressed(jTraceTextArea.getSelectedText(), evt); }//GEN-LAST:event_jTraceTextAreaKeyPressed private void jAutorefreshCheckBoxjAutorefreshCheckboxChecked(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jAutorefreshCheckBoxjAutorefreshCheckboxChecked if (!settings.isUIActionsAvailable()) return; controller.autoRefreshClicked(jAutorefreshCheckBox.isSelected()); }//GEN-LAST:event_jAutorefreshCheckBoxjAutorefreshCheckboxChecked private void jOnTopCheckboxChecked(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jOnTopCheckboxChecked if (!settings.isUIActionsAvailable()) return; controller.alwaysOnTopClicked(jOnTopCheckbox.isSelected()); }//GEN-LAST:event_jOnTopCheckboxChecked private void jClearTraceButtondeleteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jClearTraceButtondeleteActionPerformed if (!settings.isUIActionsAvailable()) return; controller.clearTraceClicked(); }//GEN-LAST:event_jClearTraceButtondeleteActionPerformed private void jTraceTextAreaMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTraceTextAreaMousePressed if (!settings.isUIActionsAvailable()) return; controller.textAreaMousePressed(); }//GEN-LAST:event_jTraceTextAreaMousePressed private void jClearActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jClearActionPerformed if (!settings.isUIActionsAvailable()) return; controller.clearSearchClicked(); }//GEN-LAST:event_jClearActionPerformed private void logTypeComboActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_logTypeComboActionPerformed if (!settings.isUIActionsAvailable()) return; controller.setLogTypeClicked(String.valueOf(logTypeCombo.getSelectedIndex())); }//GEN-LAST:event_logTypeComboActionPerformed private void menuCopyAllClicked(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuCopyAllClicked if (!settings.isUIActionsAvailable()) return; controller.copyAllClicked(jTraceTextArea.getText()); }//GEN-LAST:event_menuCopyAllClicked private void menuOptionsClicked(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuOptionsClicked if (!settings.isUIActionsAvailable()) return; controller.openOptionsClicked(); }//GEN-LAST:event_menuOptionsClicked private void menuSnapshotClicked(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuSnapshotClicked if (!settings.isUIActionsAvailable()) return; controller.snapshotClicked(jTraceTextArea.getText()); }//GEN-LAST:event_menuSnapshotClicked private void aboutClicked(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_aboutClicked if (!settings.isUIActionsAvailable()) return; controller.aboutOpenClicked(); }//GEN-LAST:event_aboutClicked private void jTraceTextAreaMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTraceTextAreaMouseMoved if (!settings.isUIActionsAvailable()) return; controller.textAreaMouseMoved(evt); }//GEN-LAST:event_jTraceTextAreaMouseMoved private void jTraceTextAreaMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTraceTextAreaMouseExited if (!settings.isUIActionsAvailable()) return; controller.textAreaMouseExited(evt); }//GEN-LAST:event_jTraceTextAreaMouseExited private void formWindowDeactivated(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowDeactivated if (!settings.isUIActionsAvailable()) return; controller.formWindowDeactivated(); }//GEN-LAST:event_formWindowDeactivated private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing if (!settings.isUIActionsAvailable()) return; controller.onClose(); }//GEN-LAST:event_formWindowClosing private void jTraceTextAreaMouseWheelMoved(java.awt.event.MouseWheelEvent evt) {//GEN-FIRST:event_jTraceTextAreaMouseWheelMoved if (!settings.isUIActionsAvailable()) return; traceAreaScrollBar.dispatchEvent(evt); checkNeedScrollDown(); controller.traceAreaMouseWheel(evt); }//GEN-LAST:event_jTraceTextAreaMouseWheelMoved private void formWindowLostFocus(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowLostFocus if (!settings.isUIActionsAvailable()) return; controller.formWindowDeactivated(); }//GEN-LAST:event_formWindowLostFocus private void jSearchComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jSearchComboBoxActionPerformed // if (!settings.isUIActionsAvailable()) return; // if (evt.getActionCommand().equals("comboBoxEdited")) { // controller.searchComboboxChanged((String)jSearchComboBox.getSelectedItem()); // } }//GEN-LAST:event_jSearchComboBoxActionPerformed private void jRegexpCheckboxChecked(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRegexpCheckboxChecked if (!settings.isUIActionsAvailable()) return; controller.regexpClicked(jRegexpCheckbox.isSelected()); }//GEN-LAST:event_jRegexpCheckboxChecked private void jTraceTextAreaMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTraceTextAreaMouseClicked if (!settings.isUIActionsAvailable()) return; if (evt.getClickCount() == 2) { controller.textAreaDoubleClicked(evt.getPoint()); } else if (evt.getButton() == MouseEvent.BUTTON3) { controller.textAreaRightClicked(evt.getPoint()); } }//GEN-LAST:event_jTraceTextAreaMouseClicked private void jTraceTextAreaMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTraceTextAreaMouseReleased if (!settings.isUIActionsAvailable()) return; controller.textAreaMouseReleased(); }//GEN-LAST:event_jTraceTextAreaMouseReleased private void jMenuItemDetectPlayerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemDetectPlayerActionPerformed controller.detectFlashPlayer(); }//GEN-LAST:event_jMenuItemDetectPlayerActionPerformed private void menuSearchVisibleClicked(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuSearchVisibleClicked controller.searchPanelVisibleClicked(); }//GEN-LAST:event_menuSearchVisibleClicked private void menuLineNumbersVisibleClicked(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuLineNumbersVisibleClicked controller.lineNumbersVisibleClicked(); }//GEN-LAST:event_menuLineNumbersVisibleClicked private void jWordWrapCheckBoxMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jWordWrapCheckBoxMenuItemActionPerformed if (!settings.isUIActionsAvailable()) return; controller.wordWrapClicked(); }//GEN-LAST:event_jWordWrapCheckBoxMenuItemActionPerformed private void jSearchComboBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_jSearchComboBoxItemStateChanged if (!settings.isUIActionsAvailable()) return; controller.searchComboboxChanged((String)jSearchComboBox.getSelectedItem(), false); }//GEN-LAST:event_jSearchComboBoxItemStateChanged // Variables declaration - do not modify//GEN-BEGIN:variables public javax.swing.JCheckBox jAutorefreshCheckBox; public javax.swing.JButton jButton1; public javax.swing.JButton jClearTraceButton; public javax.swing.JCheckBox jFilterCheckbox; private javax.swing.JCheckBoxMenuItem jLineNumbersCheckBoxMenuItem; private javax.swing.JTextArea jLineNumbersTextArea; private javax.swing.JMenu jMenu1; private javax.swing.JMenu jMenu2; private javax.swing.JMenu jMenu3; private javax.swing.JMenuBar jMenuBar1; private javax.swing.JMenuItem jMenuItem1; private javax.swing.JMenuItem jMenuItem2; private javax.swing.JMenuItem jMenuItem3; private javax.swing.JMenuItem jMenuItem4; private javax.swing.JMenuItem jMenuItemDetectPlayer; public javax.swing.JCheckBox jOnTopCheckbox; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JPanel jPanel3; public javax.swing.JCheckBox jRegexpCheckbox; private javax.swing.JPanel jScrollHighlight; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JComboBox jSearchComboBox; private javax.swing.JPanel jSearchPanel; private javax.swing.JCheckBoxMenuItem jSearchVisibleMenuItem; private javax.swing.JSeparator jSeparator1; public javax.swing.JTextArea jTraceTextArea; private javax.swing.JCheckBoxMenuItem jWordWrapCheckBoxMenuItem; public javax.swing.JComboBox logTypeCombo; // End of variables declaration//GEN-END:variables private boolean needToScrolldown = true; private boolean isCapturingScroll = false; private JScrollBar traceAreaScrollBar; private SettingsModel settings; private VizzyController controller; public VizzyForm(VizzyController controller, SettingsModel settings) { super("Vizzy Flash Tracer"); this.controller = controller; this.settings = settings; } @Override public void onInit() { initComponents(); FilterDocument filterDocument = new FilterDocument(); jTraceTextArea.setDocument(filterDocument); searchComboboxBorder = ((JComponent)jSearchComboBox.getEditor().getEditorComponent()).getBorder(); } @Override public void onAfterInit() { initVars(); initListeners(); setVisible(true); } private void initListeners() { traceAreaScrollBar.addMouseListener(new MouseListener() { public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent e) { isCapturingScroll = true; } public void mouseReleased(MouseEvent e) { isCapturingScroll = false; } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } }); traceAreaScrollBar.addAdjustmentListener(new AdjustmentListener() { public void adjustmentValueChanged(AdjustmentEvent e) { if (isCapturingScroll) { checkNeedScrollDown(); } } }); jSearchComboBox.getEditor().getEditorComponent().addKeyListener(new KeyListener() { @Override public void keyTyped(KeyEvent e) { } @Override public void keyPressed(KeyEvent e) { } @Override public void keyReleased(KeyEvent e) { if (!settings.isUIActionsAvailable()) return; controller.searchComboboxChanged((String)jSearchComboBox.getEditor().getItem(), e.getKeyCode() == KeyEvent.VK_ENTER); } }); KeyStroke ctrlH = KeyStroke.getKeyStroke(KeyEvent.VK_E, InputEvent.CTRL_DOWN_MASK, true); InputMap inputMap = jPanel1.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); inputMap.put(ctrlH, "my_action"); ActionMap actionMap = jPanel1.getActionMap(); actionMap.put("my_action", new Action() { public Object getValue(String key) { return ""; } public void putValue(String key, Object value) { } public void setEnabled(boolean b) { } public boolean isEnabled() { return true; } public void addPropertyChangeListener(PropertyChangeListener listener) { } public void removePropertyChangeListener(PropertyChangeListener listener) { } public void actionPerformed(ActionEvent e) { controller.clearTraceClicked(); } }); // jTraceTextArea.getDocument().addDocumentListener(new DocumentListener(){ // @Override // public void changedUpdate(DocumentEvent de) { // populateLineNumbers(); // } // // @Override // public void insertUpdate(DocumentEvent de) { // populateLineNumbers(); // } // // @Override // public void removeUpdate(DocumentEvent de) { // populateLineNumbers(); // } // // }); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { populateLineNumbersDelayed(); } }); } private void populateLineNumbers() { try { if (!settings.isLineNumbersVisible()) { return; } int traceLinesCount = jTraceTextArea.getLineCount(); Dimension tracePrefSize = jTraceTextArea.getPreferredSize(); Dimension lineNumbersPrefSize = jLineNumbersTextArea.getPreferredSize(); jLineNumbersTextArea.setPreferredSize(new Dimension(lineNumbersPrefSize.width, tracePrefSize.height)); int linesCount = tracePrefSize.height / ((LineHeightTextArea) jLineNumbersTextArea).getRowHeightPubl(); if (linesCount < traceLinesCount) { return; } int existingLinesCount = jLineNumbersTextArea.getLineCount(); if (existingLinesCount == linesCount) { return; } int startValue = 1; StringBuilder sb = new StringBuilder(); if (existingLinesCount < linesCount) { startValue = existingLinesCount; for (int i = startValue; i <= linesCount; i++) { sb.append(i).append(Conf.newLine); } jLineNumbersTextArea.append(sb.toString()); } } catch (Exception e) { } } private void populateLineNumbersDelayed(){ SwingUtilities.invokeLater(new Runnable() { public void run() { populateLineNumbers(); } }); } private void initVars() { traceAreaScrollBar = jScrollPane1.getVerticalScrollBar(); getHighLightScroll().setTa(jTraceTextArea); } private void checkNeedScrollDown() { int sum = traceAreaScrollBar.getValue() + traceAreaScrollBar.getVisibleAmount(); int am = traceAreaScrollBar.getMaximum(); if (sum >= am) { needToScrolldown = true; } else { needToScrolldown = false; } } @Override public void onCustomASEditorChanged(String customASEditor) { } @Override public void onRefreshFreqChanged(long refreshFreq) { } @Override public void onLogTypeChanged(int logType) { logTypeCombo.setSelectedIndex(settings.getLogType()); } @Override public void onHightlightAllChanged(boolean hightlightAll) { // jHighlightAllCheckbox.setSelected(settings.isHightlightAll()); } @Override public void onDefaultASEditorChanged(boolean defaultASEditor) { } @Override public void onUTFChanged(boolean uTF) { } @Override public void onPolicyLogFileNameChanged(String policyLogFileName) { } @Override public void onFlashLogFileNameChanged(String flashLogFileName) { } @Override public void onFontsChanged(Font[] fonts) { } @Override public void onMainWindowLocationChanged(Rectangle window) { setBounds(settings.getMainWindowLocation()); } @Override public void onCurrentLogFileChanged(String currentLogFile) { } @Override public void onTraceFontChanged(Font traceFont) { jTraceTextArea.setFont(settings.getTraceFont()); jLineNumbersTextArea.setFont(settings.getTraceFont()); } @Override public void onSearchKeywordsChanged(String[] searchKeywords, DefaultComboBoxModel searchKeywordsModel) { jSearchComboBox.setModel(settings.getSearchKeywordsModel()); } @Override public void onFilterChanged(boolean filter) { if (!filter) { jTraceTextArea.setText(settings.getTraceContent()); populateLineNumbersDelayed(); } jFilterCheckbox.setSelected(settings.isFilter()); updateCommaTooltipCheckBox(); // jHighlightAllCheckbox.setEnabled(!settings.isFilter()); jRegexpCheckbox.setEnabled(!settings.isFilter()); ((JScrollHighlightPanel) jScrollHighlight).setAllowHighlighting(!settings.isFilter()); ((JScrollHighlightPanel) jScrollHighlight).setIndexes(null); } @Override public void onAutoRefreshChanged(boolean autoRefresh) { jAutorefreshCheckBox.setSelected(settings.isAutoRefresh()); } @Override public void onWordWrapChanged(boolean wordWrap) { jWordWrapCheckBoxMenuItem.setSelected(settings.isWordWrap()); jTraceTextArea.setLineWrap(settings.isWordWrap()); } @Override public void onCheckUpdatesChanged(boolean checkUpdates) { } @Override public void onMaxNumLinesEnabledChanged(boolean maxNumLinesEnabled) { } @Override public void onMaxNumLinesChanged(long maxNumLines) { } @Override public void onRestoreOnUpdateChanged(boolean restoreOnUpdate) { } @Override public void onAlwaysOnTopChanged(boolean alwaysONTop) { jOnTopCheckbox.setSelected(settings.isAlwaysOnTop()); setAlwaysOnTop(settings.isAlwaysOnTop()); } @Override public void onLastUpdateDateChanged(Date lastUpdateDate) { } @Override public void onDefaultFontChanged(String defaultFont) { } @Override public void onSetFontNamesChanged(String[] fontNames) { } @Override public void onRecentHashChanged(String recentHash) { } @Override public void onTraceContentChanged(String traceContent) { if ("".equals(traceContent) || traceContent == null) { jTraceTextArea.setText(settings.getTraceContent()); populateLineNumbersDelayed(); needToScrolldown = true; ((JScrollHighlightPanel) jScrollHighlight).setIndexes(null); } else { int selStart = jTraceTextArea.getSelectionStart(); int selEnd = jTraceTextArea.getSelectionEnd(); boolean filteringOff = !(settings.getSearcher().isWasSearching() && settings.isFilter()); if (filteringOff) { jTraceTextArea.setText(traceContent); populateLineNumbersDelayed(); } if (needToScrolldown) { jTraceTextArea.setCaretPosition(jTraceTextArea.getDocument().getLength()); } else { if (jTraceTextArea.getDocument().getLength() > selEnd && selEnd != -1 && selStart != -1 && selEnd > selStart) { jTraceTextArea.setSelectionStart(selStart); jTraceTextArea.setSelectionEnd(selEnd); } } if (settings.isRestoreOnUpdate()) { setExtendedState(JFrame.NORMAL); repaint(); } } } @Override public JTextArea getTextArea() { return jTraceTextArea; } @Override public void onSearch(String word, SearchResult searchResult, boolean scrollToSearchResult) { if (searchResult != null) { highlightSearchComboBox(true, true); if (scrollToSearchResult) { needToScrolldown = false; try { jTraceTextArea.scrollRectToVisible(jTraceTextArea.modelToView(searchResult.offset)); } catch (BadLocationException e) { } } } else { highlightSearchComboBox(true, false); } } @Override public void afterFilter(String content) { try { jTraceTextArea.setText(content); FilterDocument document = (FilterDocument) jTraceTextArea.getDocument(); document.writeUnlock2(); if (needToScrolldown) { jTraceTextArea.setCaretPosition(jTraceTextArea.getDocument().getLength()); } populateLineNumbersDelayed(); } catch (Exception ex) { log.warn("onSearch()", ex); } highlightSearchComboBox(false, false); } @Override public void beforeFilter() { try { FilterDocument document = (FilterDocument) jTraceTextArea.getDocument(); document.writeLock2(); jTraceTextArea.setText(settings.getTraceContent()); } catch (Exception ex) { log.warn("onSearch()", ex); } } @Override public void onOptionsClosed() { // jTraceTextArea.setText(""); } @Override public void onHighlightTraceKeyword(String text) { jSearchComboBox.setSelectedItem(text); } @Override public void onSearchCleared() { jTraceTextArea.setText(settings.getTraceContent()); if (!jSearchComboBox.getSelectedItem().equals("")) { jSearchComboBox.setSelectedItem(""); } highlightSearchComboBox(false, false); ((JScrollHighlightPanel)jScrollHighlight).setIndexes(null); populateLineNumbersDelayed(); jSearchComboBox.requestFocus(); } @Override public void onAlwaysOnTopUIChanged(boolean alwaysOnTop) { setAlwaysOnTop(alwaysOnTop); } @Override public JScrollHighlightPanel getHighLightScroll() { return (JScrollHighlightPanel)jScrollHighlight; } @Override public void onEnableTraceClickChanged(boolean enableStackTraceClick) { } @Override public void onEnableCodePopupChanged(boolean enableCodePopup) { } @Override public void onShowNewFeaturesPanel() { if (newFeaturesPanel == null) { newFeaturesPanel = new NewFeaturesPanel("<html>Did you know that it's possible to highlight" + " lines based on custom keywords? Read more...</html>", new INewFeaturesListener() { public void click() { removeNewFeaturesPanel(); if (Desktop.isDesktopSupported()) { try { Desktop.getDesktop().browse(new URI(Conf.URL_PROJECT_HOME + "wiki/Features#Custom_highlights")); } catch (Exception ex) { } } } public void close() { removeNewFeaturesPanel(); } }); jPanel1.add(newFeaturesPanel, jPanel1.getComponentCount() - 2); jPanel1.validate(); jPanel1.repaint(); } } @Override public void onNewFeaturesPanelShownChanged(boolean wasNewFeaturesPanelShown) { } private void removeNewFeaturesPanel() { controller.newFeaturesPanelClosed(); newFeaturesPanel.dispose(); jPanel1.remove(newFeaturesPanel); newFeaturesPanel = null; jPanel1.validate(); jPanel1.repaint(); } private void updateCommaTooltipCheckBox() { if (settings.isFilter()) { jSearchComboBox.setToolTipText("Use comma to separate multiple keywords"); } else { jSearchComboBox.setToolTipText(null); } } private void highlightSearchComboBox(boolean show, boolean found) { JComponent editor = (JComponent)jSearchComboBox.getEditor().getEditorComponent(); if (!show) { editor.setBorder(searchComboboxBorder); } else { if (found) { editor.setBorder(BorderFactory.createLineBorder(Conf.FOUND_SEARCH_COMBO_COLOR, 2)); } else { editor.setBorder(BorderFactory.createLineBorder(Conf.NOTFOUND_SEARCH_COMBO_COLOR, 2)); } } } public void onRegexpChanged(boolean regexp) { jRegexpCheckbox.setSelected(regexp); } public void onFontColorChanged(Color fontColor) { jTraceTextArea.setForeground(fontColor); } public void onBgColorChanged(Color bgColor) { jTraceTextArea.setBackground(bgColor); } public void onEnableParsingSourceLines(boolean enableParsingSourceLines) { } public void closeApp() { dispose(); } public void onSearchVisible(boolean searchVisible) { if (searchVisible && !jPanel1.isAncestorOf(jSearchPanel)) { jPanel1.add(jSearchPanel, 0); jPanel1.validate(); jPanel1.repaint(); jSearchComboBox.requestFocus(); } else if (!searchVisible && jPanel1.isAncestorOf(jSearchPanel)) { jPanel1.remove(jSearchPanel); jPanel1.validate(); jPanel1.repaint(); if (needToScrolldown) { jTraceTextArea.setCaretPosition(jTraceTextArea.getDocument().getLength()); } } jSearchVisibleMenuItem.setSelected(searchVisible); } public void onLineNumbersVisible(boolean lineNumbersVisible) { if (lineNumbersVisible) { jScrollPane1.setRowHeaderView(jLineNumbersTextArea); } else { jScrollPane1.setRowHeaderView(null); } jPanel1.validate(); jPanel1.repaint(); jLineNumbersCheckBoxMenuItem.setSelected(lineNumbersVisible); if (lineNumbersVisible) { populateLineNumbersDelayed(); } } public JScrollPane getScrollPane() { return jScrollPane1; } public void onHighlightColorData(List<HighlightsColorData> highlightColorData) { } }