/* * Jitsi, the OpenSource Java VoIP and Instant Messaging client. * * Copyright @ 2015 Atlassian Pty Ltd * * 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 net.java.sip.communicator.plugin.desktoputil; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.table.*; import org.jitsi.service.resources.*; /** * Creates a component containing a table and two buttons for the encodings of * type(AUDIO or VIDEO) or to sort the priority of the encryption protocols. * * @author Vincent Lucas */ public class PriorityTable extends TransparentPanel { /** * The table containing the different elements to sort by priority. */ private JTable table; /** * The button to increase the priority of one item by moving it up in the * table. */ private JButton upButton; /** * The button to decrease the priority of one item by moving it down in the * table. */ private JButton downButton; /** * The preferred width of all panels. */ private final static int WIDTH = 350; /** * Creates a component for the encodings of type(AUDIO or VIDEO) or to sort * the priority of the encryption protocols. * @param tableModel The table model to display encodings (AUDIO or VIDEO), * or to sort the priority of the encryption protocols. * @param height The height (preferred and maximum height) of the component. * @return the component. */ public PriorityTable( MoveableTableModel tableModel, int height) { super(new BorderLayout()); ResourceManagementService resources = DesktopUtilActivator.getResources(); String key; table = new JTable(); table.setShowGrid(false); table.setTableHeader(null); key = "impl.media.configform.UP"; upButton = new JButton(resources.getI18NString(key)); upButton.setMnemonic(resources.getI18nMnemonic(key)); upButton.setOpaque(false); key = "impl.media.configform.DOWN"; downButton = new JButton(resources.getI18NString(key)); downButton.setMnemonic(resources.getI18nMnemonic(key)); downButton.setOpaque(false); Container buttonBar = new TransparentPanel(new GridLayout(0, 1)); buttonBar.add(upButton); buttonBar.add(downButton); Container parentButtonBar = new TransparentPanel(new BorderLayout()); parentButtonBar.add(buttonBar, BorderLayout.NORTH); //Container container = new TransparentPanel(new BorderLayout()); this.setPreferredSize(new Dimension(WIDTH, height)); this.setMaximumSize(new Dimension(WIDTH, height)); this.add(new JScrollPane(table), BorderLayout.CENTER); this.add(parentButtonBar, BorderLayout.EAST); table.setModel(tableModel); /* * The first column contains the check boxes which enable/disable their * associated encodings and it doesn't make sense to make it wider than * the check boxes. */ TableColumnModel tableColumnModel = table.getColumnModel(); TableColumn tableColumn = tableColumnModel.getColumn(0); tableColumn.setMaxWidth(tableColumn.getMinWidth()); ListSelectionListener tableSelectionListener = new ListSelectionListener() { public void valueChanged(ListSelectionEvent event) { if (table.getSelectedRowCount() == 1) { int selectedRow = table.getSelectedRow(); if (selectedRow > -1) { upButton.setEnabled(selectedRow > 0); downButton.setEnabled(selectedRow < (table .getRowCount() - 1)); return; } } upButton.setEnabled(false); downButton.setEnabled(false); } }; table.getSelectionModel().addListSelectionListener( tableSelectionListener); tableSelectionListener.valueChanged(null); ActionListener buttonListener = new ActionListener() { public void actionPerformed(ActionEvent event) { Object source = event.getSource(); boolean up; if (source == upButton) up = true; else if (source == downButton) up = false; else return; move(up); } }; upButton.addActionListener(buttonListener); downButton.addActionListener(buttonListener); } /** * Used to move encoding options. * @param table the table with encodings * @param up move direction. */ private void move(boolean up) { int index = ((MoveableTableModel) table.getModel()).move(table .getSelectedRow(), up); table.getSelectionModel().setSelectionInterval(index, index); } @Override public void setEnabled(boolean enabled) { this.table.setEnabled(enabled); this.upButton.setEnabled(enabled); this.downButton.setEnabled(enabled); } }