Package com.gitblit.client

Source Code of com.gitblit.client.JPalette

/*
* Copyright 2011 gitblit.com.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.gitblit.client;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

public class JPalette<T> extends JPanel {

  private static final long serialVersionUID = 1L;
  private PaletteModel<T> availableModel;
  private PaletteModel<T> selectedModel;
  private JButton add;
  private JButton subtract;
  private JButton up;
  private JButton down;

  public JPalette() {
    this(false);
  }

  public JPalette(boolean controlOrder) {
    super(new BorderLayout(5, 5));

    availableModel = new PaletteModel<T>();
    selectedModel = new PaletteModel<T>();

    final JTable available = new JTable(availableModel);
    final JTable selected = new JTable(selectedModel);

    add = new JButton("->");
    add.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent event) {
        List<T> move = new ArrayList<T>();
        if (available.getSelectedRowCount() <= 0) {
          return;
        }
        for (int row : available.getSelectedRows()) {
          int modelIndex = available.convertRowIndexToModel(row);
          T item = availableModel.list.get(modelIndex);
          move.add(item);
        }
        availableModel.list.removeAll(move);
        selectedModel.list.addAll(move);
        availableModel.fireTableDataChanged();
        selectedModel.fireTableDataChanged();
      }
    });
    subtract = new JButton("<-");
    subtract.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent event) {
        List<T> move = new ArrayList<T>();
        if (selected.getSelectedRowCount() <= 0) {
          return;
        }
        for (int row : selected.getSelectedRows()) {
          int modelIndex = selected.convertRowIndexToModel(row);
          T item = selectedModel.list.get(modelIndex);
          move.add(item);
        }
        selectedModel.list.removeAll(move);
        availableModel.list.addAll(move);

        selectedModel.fireTableDataChanged();
        availableModel.fireTableDataChanged();
      }
    });

    up = new JButton("\u2191");
    up.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent event) {
        int row = selected.getSelectedRow();
        if (row > 0) {
          T o = selectedModel.list.remove(row);
          selectedModel.list.add(row - 1, o);
          selectedModel.fireTableDataChanged();
        }
      }
    });

    down = new JButton("\u2193");
    down.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent event) {
        int row = selected.getSelectedRow();
        if (row < selected.getRowCount() - 1) {
          T o = selectedModel.list.remove(row);
          selectedModel.list.add(row + 1, o);
          selectedModel.fireTableDataChanged();
        }
      }
    });

    JPanel controls = new JPanel(new GridLayout(0, 1, 0, 5));
    controls.add(add);
    controls.add(subtract);
    if (controlOrder) {
      controls.add(up);
      controls.add(down);
    }

    JPanel center = new JPanel(new GridBagLayout());
    center.add(controls);

    add(newListPanel(Translation.get("gb.available"), available), BorderLayout.WEST);
    add(center, BorderLayout.CENTER);
    add(newListPanel(Translation.get("gb.selected"), selected), BorderLayout.EAST);
  }

  private JPanel newListPanel(String label, JTable table) {
    NameRenderer nameRenderer = new NameRenderer();
    table.setCellSelectionEnabled(false);
    table.setRowSelectionAllowed(true);
    table.getTableHeader().setReorderingAllowed(false);
    table.setGridColor(new Color(0xd9d9d9));
    table.setBackground(Color.white);
    table.getColumn(table.getColumnName(0)).setCellRenderer(nameRenderer);

    JScrollPane jsp = new JScrollPane(table);
    jsp.setPreferredSize(new Dimension(225, 160));
    JPanel panel = new JPanel(new BorderLayout());
    JLabel jlabel = new JLabel(label);
    jlabel.setFont(jlabel.getFont().deriveFont(Font.BOLD));
    panel.add(jlabel, BorderLayout.NORTH);
    panel.add(jsp, BorderLayout.CENTER);
    return panel;
  }

  @Override
  public void setEnabled(boolean enabled) {
    super.setEnabled(enabled);
    add.setEnabled(enabled);
    subtract.setEnabled(enabled);
    up.setEnabled(enabled);
    down.setEnabled(enabled);
  }

  public void setObjects(List<T> all, List<T> selected) {
    List<T> available = new ArrayList<T>(all);
    if (selected != null) {
      available.removeAll(selected);
    }
    availableModel.list.clear();
    availableModel.list.addAll(available);
    availableModel.fireTableDataChanged();

    if (selected != null) {
      selectedModel.list.clear();
      selectedModel.list.addAll(selected);
      selectedModel.fireTableDataChanged();
    }
  }

  public List<T> getSelections() {
    return new ArrayList<T>(selectedModel.list);
  }

  public class PaletteModel<K> extends AbstractTableModel {

    private static final long serialVersionUID = 1L;

    List<K> list;

    public PaletteModel() {
      this(new ArrayList<K>());
    }

    public PaletteModel(List<K> list) {
      this.list = new ArrayList<K>(list);
    }

    @Override
    public int getRowCount() {
      return list.size();
    }

    @Override
    public int getColumnCount() {
      return 1;
    }

    @Override
    public String getColumnName(int column) {
      return Translation.get("gb.name");
    }

    @Override
    public Class<?> getColumnClass(int columnIndex) {
      return String.class;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
      K o = list.get(rowIndex);
      return o.toString();
    }
  }
}
TOP

Related Classes of com.gitblit.client.JPalette

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.