Example #1
0
  @Override
  public List<AbstractButton> getButtons() {
    List<AbstractButton> buttons = new ArrayList<AbstractButton>();
    // JToggleButton and JButton are both javax.swing.AbstractButton

    // Toggle button
    JToggleButton buttonPoint = new JToggleButton();
    buttonPoint.setMargin(new Insets(0, 0, 0, 0));
    buttonPoint.setMinimumSize(new Dimension(16, 16));
    buttonPoint.setToolTipText("Mark reference point");
    try {
      buttonPoint.setIcon(new ImageIcon(StamperPS.class.getResource("icons/markPoint.png")));
    } catch (Exception e) {
      e.printStackTrace();
    }
    buttonPoint.addItemListener(
        new ItemListener() {

          @Override
          public void itemStateChanged(ItemEvent itemEvent) {
            int state = itemEvent.getStateChange();
            if (state == ItemEvent.SELECTED) {
              toggleMarkReferencePoint(true);
            } else {
              toggleMarkReferencePoint(false);
            }
          }
        });
    buttonPoint.setToolTipText("Mark reference point");
    buttonPoint.setMargin(new Insets(0, 0, 0, 0));
    buttonPoint.setMinimumSize(new Dimension(16, 16));
    buttons.add(buttonPoint);
    // Clear Points button
    JButton buttonClearPoints = new JButton();
    buttonClearPoints.setMargin(new Insets(0, 0, 0, 0));
    buttonClearPoints.setMinimumSize(new Dimension(16, 16));
    buttonClearPoints.setToolTipText("Clear marked points");
    try {
      buttonClearPoints.setIcon(
          new ImageIcon(StamperPS.class.getResource("icons/markPointClear.png")));
    } catch (Exception e) {
      e.printStackTrace();
    }
    buttonClearPoints.addActionListener(
        new ActionListener() {

          public void actionPerformed(ActionEvent e) {
            clearMarkedPoints();
          }
        });
    buttons.add(buttonClearPoints);
    return buttons;
  }
Example #2
0
    public ButtonPane(int idx) {
      index = idx;

      JButton leftmostB = new JButton("<<");
      leftmostB.setActionCommand("<<");
      leftmostB.addActionListener(this);
      leftmostB.setMargin(new Insets(0, 0, 0, 0));

      JButton leftB = new JButton(" < ");
      leftB.setActionCommand("<");
      leftB.addActionListener(this);
      leftB.setMargin(new Insets(0, 0, 0, 0));

      JButton rightB = new JButton(" > ");
      rightB.setActionCommand(">");
      rightB.addActionListener(this);
      rightB.setMargin(new Insets(0, 0, 0, 0));

      JButton rightmostB = new JButton(">>");
      rightmostB.setActionCommand(">>");
      rightmostB.addActionListener(this);
      rightmostB.setMargin(new Insets(0, 0, 0, 0));

      mzDisp = new JToggleButton("show all m/z");
      mzDisp.setActionCommand("mz");
      mzDisp.addActionListener(this);
      mzDisp.setMargin(new Insets(0, 0, 0, 0));

      msDiff = new JToggleButton("mass difference");
      msDiff.setActionCommand("msdiff");
      msDiff.addActionListener(this);
      msDiff.setMargin(new Insets(0, 0, 0, 0));

      setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
      add(leftmostB);
      add(leftB);
      add(rightB);
      add(rightmostB);
      add(mzDisp);
      add(msDiff);
    }
Example #3
0
  public JModRadioButton(
      int x, int y, int w, int h, Object obj, int min_val, int max_val, Parameter newPar) {
    super(min_val, max_val, newPar);

    b = new JToggleButton();

    if (obj instanceof String) {
      b.setText((String) obj);
      b.setFont(new Font("Dialog", Font.PLAIN, 10));
    }

    //        ImageIcon icon = new ImageIcon("./grafix/_sync.gif");
    //        b = new JToggleButton(new ImageIcon("./grafix/_sync.gif"));

    b.setSize(w, h);
    b.setMargin(new Insets(0, 0, 0, 0));
    b.setFocusPainted(false);
    add(b);

    setLocation(x, y);
    setSize(b.getWidth(), b.getHeight());

    b.setSelected(par.getValue() == getMaxValue());

    b.addMouseListener(
        new MouseAdapter() {
          public void mouseReleased(MouseEvent arg0) {
            if (b.isSelected()) setValue(getMaxValue());
            else b.setSelected(true);
          }
        });

    par.addChangeListener(
        new ChangeListener() {
          public void stateChanged(ChangeEvent e) {
            int val = (int) ((Parameter) e.getSource()).getValue();
            setValueWithoutFireStarter(val);
          }
        });
  }
Example #4
0
  public PaintBar(Tool tool) {
    bg = new ButtonGroup();
    this.tool = tool;

    setLayout(new GridLayout(0, 2));

    Listener listener = new Listener();
    for (Button b : interactButtons) {
      JToggleButton button =
          new JToggleButton(
              new ImageIcon(getClass().getResource("/gfx/" + b.tool.toolName + ".png")));
      button.setToolTipText(b.tooltip);
      button.addActionListener(listener);
      button.setActionCommand(b.tool.toolName);
      button.setMargin(new Insets(2, 2, 2, 2));
      if (b.tool == tool) {
        button.setSelected(true);
      }
      bg.add(button);
      add(button);
    }
  }
Example #5
0
  private void addResultTable(
      final String sql, long duration, final StatementExecutionResultSetResult resultSetResult) {
    int rowCount = resultSetResult.getRowCount();
    JPanel resultPane = addResultPane();
    final JLabel label = new JLabel(" " + rowCount + " rows");
    FlowLayout flowLayout = new FlowLayout(FlowLayout.LEFT, 0, 0);
    flowLayout.setAlignOnBaseline(true);
    JPanel statusPane = new JPanel(flowLayout);
    statusPane.setOpaque(false);
    if (rowCount <= resultSetResult.getRetainParsedRSDataRowCountThreshold()) {
      final JTableX table = new ResultTable(resultSetResult);
      JTableHeader tableHeader =
          new JTableHeader(table.getColumnModel()) {
            @Override
            public String getToolTipText(MouseEvent e) {
              int col = getTable().convertColumnIndexToModel(columnAtPoint(e.getPoint()));
              return col == 0 ? null : resultSetResult.getTypeInfos()[col - 1].toString();
            }
          };
      ToolTipManager.sharedInstance().registerComponent(tableHeader);
      table.setTableHeader(tableHeader);
      table.setDefaultRenderer(
          String.class,
          new DefaultTableCellRenderer() {
            @Override
            public Component getTableCellRendererComponent(
                JTable table,
                Object value,
                boolean isSelected,
                boolean hasFocus,
                int row,
                int column) {
              if (value != null) {
                value = "\"" + value + "\"";
              }
              return super.getTableCellRendererComponent(
                  table, value, isSelected, hasFocus, row, column);
            }
          });
      final TableCellRenderer booleanRenderer = table.getDefaultRenderer(Boolean.class);
      table.setDefaultRenderer(
          Boolean.class,
          new DefaultTableCellRenderer() {
            @Override
            public Component getTableCellRendererComponent(
                JTable table,
                Object value,
                boolean isSelected,
                boolean hasFocus,
                int row,
                int column) {
              Component c = null;
              if (value == null) {
                c =
                    super.getTableCellRendererComponent(
                        table, " ", isSelected, hasFocus, row, column);
              } else {
                c =
                    booleanRenderer.getTableCellRendererComponent(
                        table, value, isSelected, hasFocus, row, column);
              }
              if (!isSelected) {
                c.setBackground(
                    row % 2 == 0
                        ? UIManager.getColor("Table.background")
                        : JTableX.getTableAlternateRowBackgroundColor());
              }
              return c;
            }
          });
      table.setDefaultRenderer(
          Timestamp.class,
          new DefaultTableCellRenderer() {
            @SuppressWarnings("deprecation")
            @Override
            public Component getTableCellRendererComponent(
                JTable table,
                Object value,
                boolean isSelected,
                boolean hasFocus,
                int row,
                int column) {
              Component c =
                  super.getTableCellRendererComponent(
                      table, value, isSelected, hasFocus, row, column);
              if (value != null && c instanceof JLabel) {
                Timestamp timestamp = (Timestamp) value;
                String s;
                if (timestamp.getHours() != 0
                    || timestamp.getMinutes() != 0
                    || timestamp.getSeconds() != 0) {
                  s = Utils.formatDateTimeGMT((Timestamp) value);
                } else {
                  s = Utils.formatDateGMT((Timestamp) value);
                }
                ((JLabel) c).setText(s);
              }
              return c;
            }
          });
      table.setDefaultRenderer(
          byte[].class,
          new DefaultTableCellRenderer() {
            @Override
            public Component getTableCellRendererComponent(
                JTable table,
                Object value,
                boolean isSelected,
                boolean hasFocus,
                int row,
                int column) {
              Component c =
                  super.getTableCellRendererComponent(
                      table, value, isSelected, hasFocus, row, column);
              if (value != null && c instanceof JLabel) {
                byte[] bytes = (byte[]) value;
                ((JLabel) c).setText("Blob (" + bytes.length + " bytes)");
              }
              return c;
            }
          });
      table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
      table.setAutoCreateRowSorter(true);
      table
          .getRowSorter()
          .setSortKeys(Arrays.asList(new RowSorter.SortKey(0, SortOrder.ASCENDING)));
      table.setColumnSelectionAllowed(true);
      table.applyMinimumAndPreferredColumnSizes(200);
      resultPane.add(new JScrollPane(table), BorderLayout.CENTER);
      table
          .getSelectionModel()
          .addListSelectionListener(
              new ListSelectionListener() {
                @Override
                public void valueChanged(ListSelectionEvent e) {
                  int selectedRowCount = table.getSelectedRowCount();
                  label.setText(
                      " "
                          + resultSetResult.getRowData().length
                          + " rows"
                          + (selectedRowCount == 0
                              ? ""
                              : " - " + selectedRowCount + " selected rows"));
                }
              });
      table.addMouseListener(
          new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
              int row = table.rowAtPoint(e.getPoint());
              int column = table.columnAtPoint(e.getPoint());
              if (!table.isCellSelected(row, column)) {
                table.changeSelection(row, column, false, false);
              }
              maybeShowPopup(e);
            }

            @Override
            public void mouseReleased(MouseEvent e) {
              maybeShowPopup(e);
            }

            private void maybeShowPopup(MouseEvent e) {
              if (!e.isPopupTrigger()) {
                return;
              }
              boolean isEditable = resultSetResult.isEditable();
              JPopupMenu menu = new JPopupMenu();
              int selectedRowCount = table.getSelectedRowCount();
              int selectedColumnCount = table.getSelectedColumnCount();
              boolean isAddingSeparator = false;
              // Here to add custom menus.
              if (isEditable) {
                if (isAddingSeparator) {
                  isAddingSeparator = false;
                  menu.addSeparator();
                }
                JMenuItem insertNullMenuItem = new JMenuItem("Insert NULL");
                insertNullMenuItem.addActionListener(
                    new ActionListener() {
                      @Override
                      public void actionPerformed(ActionEvent e) {
                        int row = table.getSelectedRow();
                        int column = table.getSelectedColumn();
                        table.setValueAt(null, row, column);
                      }
                    });
                insertNullMenuItem.setEnabled(
                    selectedRowCount == 1
                        && selectedColumnCount == 1
                        && table.convertColumnIndexToModel(table.getSelectedColumn()) != 0);
                menu.add(insertNullMenuItem);
                menu.addSeparator();
                JMenuItem deleteRowMenuItem =
                    new JMenuItem(
                        "Delete " + (selectedRowCount > 1 ? selectedRowCount + " rows" : "row"));
                deleteRowMenuItem.addActionListener(
                    new ActionListener() {
                      @Override
                      public void actionPerformed(ActionEvent e) {
                        int[] selectedRows = table.getSelectedRows();
                        for (int i = selectedRows.length - 1; i >= 0; i--) {
                          selectedRows[i] = table.convertRowIndexToModel(selectedRows[i]);
                        }
                        Arrays.sort(selectedRows);
                        for (int i = selectedRows.length - 1; i >= 0; i--) {
                          int row = selectedRows[i];
                          boolean isSuccess = resultSetResult.deleteRow(row);
                          if (isSuccess) {
                            ((AbstractTableModel) table.getModel()).fireTableRowsDeleted(row, row);
                          }
                        }
                      }
                    });
                deleteRowMenuItem.setEnabled(selectedRowCount > 0);
                menu.add(deleteRowMenuItem);
              }
              if (menu.getComponentCount() > 0) {
                menu.show(e.getComponent(), e.getX(), e.getY());
              }
            }
          });
      final JPanel filterPane = new JPanel(flowLayout);
      filterPane.setOpaque(false);
      final JToggleButton filterToggleButton =
          new JToggleButton(
              new ImageIcon(
                  getClass().getResource("/org/jooq/debug/console/resources/Search16.png")));
      filterToggleButton.setOpaque(false);
      filterToggleButton.setToolTipText(
          "Filter ("
              + KeyEvent.getKeyModifiersText(InputEvent.CTRL_MASK)
              + "+"
              + KeyEvent.getKeyText(KeyEvent.VK_F)
              + ")");
      filterToggleButton.setMargin(new Insets(0, 0, 0, 0));
      filterPane.add(filterToggleButton);
      final JTextField searchField = new JTextField(7);
      searchField
          .getDocument()
          .addDocumentListener(
              new DocumentListener() {
                @Override
                public void removeUpdate(DocumentEvent e) {
                  adjustFilter();
                }

                @Override
                public void insertUpdate(DocumentEvent e) {
                  adjustFilter();
                }

                @Override
                public void changedUpdate(DocumentEvent e) {
                  adjustFilter();
                }

                private void adjustFilter() {
                  setFilter(table, searchField.getText());
                }
              });
      searchField.setVisible(false);
      filterPane.add(searchField);
      filterToggleButton.addItemListener(
          new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
              boolean isActive = e.getStateChange() == ItemEvent.SELECTED;
              searchField.setVisible(isActive);
              if (isActive) {
                searchField.requestFocus();
              } else {
                searchField.setText("");
                table.requestFocus();
              }
              filterPane.revalidate();
              filterPane.repaint();
            }
          });
      searchField.addKeyListener(
          new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
              if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
                e.consume();
                filterToggleButton.setSelected(false);
              } else if (e.getKeyCode() == KeyEvent.VK_F && e.isControlDown()) {
                filterToggleButton.setSelected(false);
              }
            }
          });
      table.addKeyListener(
          new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
              if (e.getKeyCode() == KeyEvent.VK_F && e.isControlDown()) {
                e.consume();
                filterToggleButton.setSelected(true);
                searchField.requestFocus();
                searchField.selectAll();
              }
            }
          });
      statusPane.add(filterPane);
    }
    JPanel southResultPanel = new JPanel(new BorderLayout());
    southResultPanel.setOpaque(false);
    if (isUsingMaxRowCount && rowCount == MAX_ROW_COUNT) {
      label.setForeground(Color.RED);
    }
    statusPane.add(label);
    southResultPanel.add(statusPane, BorderLayout.WEST);
    southResultPanel.add(
        new JLabel(
            Utils.formatDuration(duration)
                + " - "
                + Utils.formatDuration(resultSetResult.getResultSetParsingDuration())),
        BorderLayout.EAST);
    resultPane.add(southResultPanel, BorderLayout.SOUTH);
    southResultPanel.setToolTipText(sql);
    resultPane.revalidate();
    resultPane.repaint();
  }
  public JMovieControlAqua() {
    // Set the background color to the border color of the buttons.
    // This way the toolbar won't look too ugly when the buttons
    // are displayed before they have been loaded completely.
    // setBackground(new Color(118, 118, 118));
    setBackground(Color.WHITE);

    Dimension buttonSize = new Dimension(16, 16);
    GridBagLayout gridbag = new GridBagLayout();
    Insets margin = new Insets(0, 0, 0, 0);
    setLayout(gridbag);
    GridBagConstraints c;

    ResourceBundle labels = ResourceBundle.getBundle("org.monte.media.Labels");
    colorCyclingButton = new JToggleButton();
    colorCyclingButton.setToolTipText(labels.getString("colorCycling.toolTipText"));
    colorCyclingButton.addActionListener(this);
    colorCyclingButton.setPreferredSize(buttonSize);
    colorCyclingButton.setMinimumSize(buttonSize);
    colorCyclingButton.setVisible(false);
    colorCyclingButton.setMargin(margin);
    c = new GridBagConstraints();
    // c.gridx = 0;
    // c.gridy = 0;
    gridbag.setConstraints(colorCyclingButton, c);
    add(colorCyclingButton);

    audioButton = new JToggleButton();
    audioButton.setToolTipText(labels.getString("audio.toolTipText"));
    audioButton.addActionListener(this);
    audioButton.setPreferredSize(buttonSize);
    audioButton.setMinimumSize(buttonSize);
    audioButton.setVisible(false);
    audioButton.setMargin(margin);
    c = new GridBagConstraints();
    // c.gridx = 0;
    // c.gridy = 0;
    gridbag.setConstraints(audioButton, c);
    add(audioButton);

    startButton = new JToggleButton();
    startButton.setToolTipText(labels.getString("play.toolTipText"));
    startButton.addActionListener(this);
    startButton.setPreferredSize(buttonSize);
    startButton.setMinimumSize(buttonSize);
    startButton.setMargin(margin);
    c = new GridBagConstraints();
    // c.gridx = 1;
    // c.gridy = 0;
    gridbag.setConstraints(startButton, c);
    add(startButton);

    slider = new JMovieSliderAqua();
    c = new GridBagConstraints();
    // c.gridx = 2;
    // c.gridy = 0;
    c.fill = GridBagConstraints.HORIZONTAL;
    c.weightx = 1.0;
    gridbag.setConstraints(slider, c);
    add(slider);

    rewindButton = new JButton();
    rewindButton.setToolTipText(labels.getString("previous.toolTipText"));
    rewindButton.setPreferredSize(buttonSize);
    rewindButton.setMinimumSize(buttonSize);
    rewindButton.setMargin(margin);
    c = new GridBagConstraints();
    // c.gridx = 3;
    // c.gridy = 0;

    gridbag.setConstraints(rewindButton, c);
    add(rewindButton);
    rewindButton.addActionListener(this);

    forwardButton = new JButton();
    forwardButton.setToolTipText(labels.getString("next.toolTipText"));
    buttonSize = new Dimension(17, 16);
    forwardButton.setPreferredSize(buttonSize);
    forwardButton.setMinimumSize(buttonSize);
    forwardButton.setMargin(margin);
    c = new GridBagConstraints();
    // c.gridx = 4;
    // c.gridy = 0;
    gridbag.setConstraints(forwardButton, c);
    add(forwardButton);
    forwardButton.addActionListener(this);

    // The spacer is used when the play controls are hidden
    spacer = new JPanel(new BorderLayout());
    spacer.setVisible(false);
    spacer.setPreferredSize(new Dimension(16, 16));
    spacer.setMinimumSize(new Dimension(16, 16));
    spacer.setOpaque(false);
    c = new GridBagConstraints();
    c.fill = GridBagConstraints.HORIZONTAL;
    c.weightx = 1.0;
    gridbag.setConstraints(spacer, c);
    add(spacer);

    Border border =
        new BackdropBorder(
            new ButtonStateBorder(
                new ImageBevelBorder(
                    Images.createImage(getClass(), "images/Player.border.png"),
                    new Insets(1, 1, 1, 1),
                    new Insets(0, 4, 1, 4)),
                new ImageBevelBorder(
                    Images.createImage(getClass(), "images/Player.borderP.png"),
                    new Insets(1, 1, 1, 1),
                    new Insets(0, 4, 1, 4))));

    Border westBorder =
        new BackdropBorder(
            new ButtonStateBorder(
                new ImageBevelBorder(
                    Images.createImage(getClass(), "images/Player.borderWest.png"),
                    new Insets(1, 1, 1, 0),
                    new Insets(0, 4, 1, 4)),
                new ImageBevelBorder(
                    Images.createImage(getClass(), "images/Player.borderWestP.png"),
                    new Insets(1, 1, 1, 0),
                    new Insets(0, 4, 1, 4))));

    startButton.setBorder(westBorder);
    colorCyclingButton.setBorder(westBorder);
    audioButton.setBorder(westBorder);
    rewindButton.setBorder(westBorder);
    forwardButton.setBorder(border);
    startButton.setUI((ButtonUI) CustomButtonUI.createUI(startButton));
    colorCyclingButton.setUI((ButtonUI) CustomButtonUI.createUI(audioButton));
    audioButton.setUI((ButtonUI) CustomButtonUI.createUI(audioButton));
    rewindButton.setUI((ButtonUI) CustomButtonUI.createUI(rewindButton));
    forwardButton.setUI((ButtonUI) CustomButtonUI.createUI(forwardButton));

    colorCyclingButton.setIcon(
        new ImageIcon(Images.createImage(getClass(), "images/PlayerStartColorCycling.png")));
    colorCyclingButton.setSelectedIcon(
        new ImageIcon(Images.createImage(getClass(), "images/PlayerStartColorCycling.png")));
    colorCyclingButton.setDisabledIcon(
        new ImageIcon(
            Images.createImage(getClass(), "images/PlayerStartColorCycling.disabled.png")));
    audioButton.setIcon(
        new ImageIcon(Images.createImage(getClass(), "images/PlayerStartAudio.png")));
    audioButton.setSelectedIcon(
        new ImageIcon(Images.createImage(getClass(), "images/PlayerStopAudio.png")));
    audioButton.setDisabledIcon(
        new ImageIcon(Images.createImage(getClass(), "images/PlayerStartAudio.disabled.png")));
    startButton.setIcon(new ImageIcon(Images.createImage(getClass(), "images/PlayerStart.png")));
    startButton.setSelectedIcon(
        new ImageIcon(Images.createImage(getClass(), "images/PlayerStop.png")));
    startButton.setDisabledIcon(
        new ImageIcon(Images.createImage(getClass(), "images/PlayerStart.disabled.png")));
    rewindButton.setIcon(new ImageIcon(Images.createImage(getClass(), "images/PlayerBack.png")));
    rewindButton.setDisabledIcon(
        new ImageIcon(Images.createImage(getClass(), "images/PlayerBack.disabled.png")));
    forwardButton.setIcon(new ImageIcon(Images.createImage(getClass(), "images/PlayerNext.png")));
    forwardButton.setDisabledIcon(
        new ImageIcon(Images.createImage(getClass(), "images/PlayerNext.disabled.png")));

    // Automatic scrolling
    scrollHandler = new ScrollHandler();
    scrollTimer = new Timer(60, scrollHandler);
    scrollTimer.setInitialDelay(300); // default InitialDelay?
    forwardButton.addMouseListener(scrollHandler);
    rewindButton.addMouseListener(scrollHandler);
  }
Example #7
0
  public ABCPanel(MainPanel mainPanel) {

    this.mainPanel = mainPanel;
    setLayout(new BorderLayout());

    decompiledTextArea = new DecompiledEditorPane(this);
    decompiledTextArea.addTextChangedListener(this::decompiledTextAreaTextChanged);

    decompiledTextArea.setLinkHandler(
        new LinkHandler() {

          @Override
          public boolean isLink(Token token) {
            return hasDeclaration(token.length == 1 ? token.start : token.start + 1);
          }

          @Override
          public void handleLink(Token token) {
            gotoDeclaration(token.length == 1 ? token.start : token.start + 1);
          }

          @Override
          public Highlighter.HighlightPainter linkPainter() {
            return decompiledTextArea.linkPainter();
          }
        });

    searchPanel = new SearchPanel<>(new FlowLayout(), this);

    decompiledScrollPane = new JScrollPane(decompiledTextArea);

    JPanel iconDecPanel = new JPanel();
    iconDecPanel.setLayout(new BoxLayout(iconDecPanel, BoxLayout.Y_AXIS));
    JPanel iconsPanel = new JPanel();
    iconsPanel.setLayout(new BoxLayout(iconsPanel, BoxLayout.X_AXIS));

    JButton newTraitButton = new JButton(View.getIcon("traitadd16"));
    newTraitButton.setMargin(new Insets(5, 5, 5, 5));
    newTraitButton.addActionListener(this::addTraitButtonActionPerformed);
    newTraitButton.setToolTipText(AppStrings.translate("button.addtrait"));
    iconsPanel.add(newTraitButton);

    scriptNameLabel = new JLabel("-");
    scriptNameLabel.setAlignmentX(0);
    iconsPanel.setAlignmentX(0);
    decompiledScrollPane.setAlignmentX(0);
    iconDecPanel.add(scriptNameLabel);
    iconDecPanel.add(iconsPanel);
    iconDecPanel.add(decompiledScrollPane);

    JPanel decButtonsPan = new JPanel(new FlowLayout());
    decButtonsPan.setBorder(new BevelBorder(BevelBorder.RAISED));
    decButtonsPan.add(editDecompiledButton);
    decButtonsPan.add(experimentalLabel);
    decButtonsPan.add(saveDecompiledButton);
    decButtonsPan.add(cancelDecompiledButton);

    editDecompiledButton.setMargin(new Insets(3, 3, 3, 10));
    saveDecompiledButton.setMargin(new Insets(3, 3, 3, 10));
    cancelDecompiledButton.setMargin(new Insets(3, 3, 3, 10));

    saveDecompiledButton.addActionListener(this::saveDecompiledButtonActionPerformed);
    editDecompiledButton.addActionListener(this::editDecompiledButtonActionPerformed);
    cancelDecompiledButton.addActionListener(this::cancelDecompiledButtonActionPerformed);

    saveDecompiledButton.setVisible(false);
    cancelDecompiledButton.setVisible(false);
    decButtonsPan.setAlignmentX(0);

    JPanel decPanel = new JPanel(new BorderLayout());
    decPanel.add(searchPanel, BorderLayout.NORTH);
    decPanel.add(iconDecPanel, BorderLayout.CENTER);
    decPanel.add(decButtonsPan, BorderLayout.SOUTH);
    detailPanel = new DetailPanel(this);
    JPanel panB = new JPanel();
    panB.setLayout(new BorderLayout());
    panB.add(decPanel, BorderLayout.CENTER);
    panB.add(decLabel, BorderLayout.NORTH);
    decLabel.setHorizontalAlignment(SwingConstants.CENTER);
    // decLabel.setBorder(new BevelBorder(BevelBorder.RAISED));
    splitPane =
        new JPersistentSplitPane(
            JSplitPane.HORIZONTAL_SPLIT,
            panB,
            detailPanel,
            Configuration.guiAvm2SplitPaneDividerLocationPercent);
    splitPane.setContinuousLayout(true);

    decompiledTextArea.changeContentType("text/actionscript");
    decompiledTextArea.setFont(
        new Font("Monospaced", Font.PLAIN, decompiledTextArea.getFont().getSize()));

    View.addEditorAction(
        decompiledTextArea,
        new AbstractAction() {
          @Override
          public void actionPerformed(ActionEvent e) {
            int multinameIndex = decompiledTextArea.getMultinameUnderCaret();
            if (multinameIndex > -1) {
              UsageFrame usageFrame = new UsageFrame(abc, multinameIndex, ABCPanel.this, false);
              usageFrame.setVisible(true);
            }
          }
        },
        "find-usages",
        AppStrings.translate("abc.action.find-usages"),
        "control U");

    View.addEditorAction(
        decompiledTextArea,
        new AbstractAction() {
          @Override
          public void actionPerformed(ActionEvent e) {
            gotoDeclaration(decompiledTextArea.getCaretPosition());
          }
        },
        "find-declaration",
        AppStrings.translate("abc.action.find-declaration"),
        "control B");

    CtrlClickHandler cch = new CtrlClickHandler();
    decompiledTextArea.addKeyListener(cch);
    decompiledTextArea.addMouseListener(cch);
    decompiledTextArea.addMouseMotionListener(cch);

    navigator = new TraitsList(this);

    navPanel = new JPanel(new BorderLayout());
    JPanel navIconsPanel = new JPanel();
    navIconsPanel.setLayout(new BoxLayout(navIconsPanel, BoxLayout.X_AXIS));
    final JToggleButton sortButton = new JToggleButton(View.getIcon("sort16"));
    sortButton.setMargin(new Insets(3, 3, 3, 3));
    navIconsPanel.add(sortButton);
    navPanel.add(navIconsPanel, BorderLayout.SOUTH);
    navPanel.add(new JScrollPane(navigator), BorderLayout.CENTER);
    sortButton.addActionListener(
        new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
            navigator.setSorted(sortButton.isSelected());
            navigator.updateUI();
          }
        });

    tabbedPane = new JTabbedPane();
    tabbedPane.addTab(AppStrings.translate("traits"), navPanel);
    add(splitPane, BorderLayout.CENTER);

    JPanel panConstants = new JPanel();
    panConstants.setLayout(new BorderLayout());

    constantTypeList =
        new JComboBox<>(
            new String[] {
              "UINT", "INT", "DOUBLE", "DECIMAL", "STRING", "NAMESPACE", "NAMESPACESET", "MULTINAME"
            });
    constantTable = new JTable();
    if (abc != null) {
      View.autoResizeColWidth(constantTable, new UIntTableModel(abc));
    }
    constantTable.setAutoCreateRowSorter(true);

    final ABCPanel t = this;
    constantTable.addMouseListener(
        new MouseAdapter() {
          @Override
          public void mouseClicked(MouseEvent e) {
            if (e.getClickCount() == 2) {
              if (constantTypeList.getSelectedIndex() == 7) { // MULTINAME
                int rowIndex = constantTable.getSelectedRow();
                if (rowIndex == -1) {
                  return;
                }
                int multinameIndex = constantTable.convertRowIndexToModel(rowIndex);
                if (multinameIndex > 0) {
                  UsageFrame usageFrame = new UsageFrame(abc, multinameIndex, t, false);
                  usageFrame.setVisible(true);
                }
              }
            }
          }
        });
    constantTypeList.addItemListener(this);
    panConstants.add(constantTypeList, BorderLayout.NORTH);
    panConstants.add(new JScrollPane(constantTable), BorderLayout.CENTER);
    tabbedPane.addTab(AppStrings.translate("constants"), panConstants);
  }