JPanel buildUpDownPanel()

in src/main/java/org/apache/log4j/chainsaw/color/ColorPanel.java [551:618]


    JPanel buildUpDownPanel() {
        JPanel panel = new JPanel(new BorderLayout());
        JPanel innerPanel = new JPanel();
        innerPanel.setLayout(new GridLayout(5, 1));

        final JButton upButton = new JButton(ChainsawIcons.ICON_UP);
        upButton.setToolTipText("Move selected rule up");

        final JButton downButton = new JButton(ChainsawIcons.ICON_DOWN);
        downButton.setToolTipText("Move selected rule down");
        upButton.setEnabled(false);
        downButton.setEnabled(false);

        rulesTable.getSelectionModel().addListSelectionListener(
            e -> {
                if (!e.getValueIsAdjusting()) {
                    int index = rulesTable.getSelectionModel().getMaxSelectionIndex();

                    if (index < 0) {
                        downButton.setEnabled(false);
                        upButton.setEnabled(false);
                    } else if ((index == 0) && (rulesTableModel.getRowCount() == 1)) {
                        downButton.setEnabled(false);
                        upButton.setEnabled(false);
                    } else if ((index == 0) && (rulesTableModel.getRowCount() > 1)) {
                        downButton.setEnabled(true);
                        upButton.setEnabled(false);
                    } else if (index == (rulesTableModel.getRowCount() - 1)) {
                        downButton.setEnabled(false);
                        upButton.setEnabled(true);
                    } else {
                        downButton.setEnabled(true);
                        upButton.setEnabled(true);
                    }
                }
            });

        JPanel upPanel = new JPanel();

        upPanel.add(upButton);

        JPanel downPanel = new JPanel();
        downPanel.add(downButton);

        innerPanel.add(new JLabel(""));
        innerPanel.add(upPanel);
        innerPanel.add(new JLabel(""));
        innerPanel.add(downPanel);
        panel.add(innerPanel, BorderLayout.CENTER);

        upButton.addActionListener(
            new AbstractAction() {
                public void actionPerformed(ActionEvent evt) {
                    int index = rulesTable.getSelectionModel().getMaxSelectionIndex();
                    rulesTableModel.moveRowAtIndexUp(index);
                }
            });

        downButton.addActionListener(
            new AbstractAction() {
                public void actionPerformed(ActionEvent evt) {
                    int index = rulesTable.getSelectionModel().getMaxSelectionIndex();
                    rulesTableModel.moveRowAtIndexDown(index);
                }
            });

        return panel;
    }