Package com.tulskiy.musique.gui.dialogs

Source Code of com.tulskiy.musique.gui.dialogs.PlaybackQueueDialog

/*
* Copyright (c) 2008, 2009, 2010 Denis Tulskiy
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with this work.  If not, see <http://www.gnu.org/licenses/>.
*/

package com.tulskiy.musique.gui.dialogs;

import com.tulskiy.musique.playlist.PlaybackOrder;
import com.tulskiy.musique.system.Application;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
import java.util.List;

/**
* Author: Denis Tulskiy
* Date: 11/4/10
*/
public class PlaybackQueueDialog extends JDialog {

    public PlaybackQueueDialog(final JComponent owner) {
        super(SwingUtilities.windowForComponent(owner), "Playback Queue", ModalityType.MODELESS);
        Application app = Application.getInstance();
        final PlaybackOrder playbackOrder = app.getPlayer().getPlaybackOrder();
        final List<PlaybackOrder.QueueTuple> queue = playbackOrder.getQueue();
        final JList list = new JList(new DefaultListModel() {
            @Override
            public int getSize() {
                return queue.size();
            }

            @Override
            public Object getElementAt(int index) {
                return (index + 1) + ". " + queue.get(index);
            }
        });
        list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);

        setLayout(new BorderLayout());
        JScrollPane scrollPane = new JScrollPane(list);
        scrollPane.setBorder(BorderFactory.createEtchedBorder());
        add(scrollPane, BorderLayout.CENTER);

        JPanel buttons = new JPanel(new GridLayout(0, 1));
        JButton up = new JButton("Up");
        JButton down = new JButton("Down");
        JButton remove = new JButton("  Remove  ");
        JButton clear = new JButton("Clear");
        up.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int index = list.getSelectedIndex();
                if (index > 0) {
                    List<PlaybackOrder.QueueTuple> toAdd = new ArrayList<PlaybackOrder.QueueTuple>();
                    int[] selectedValues = list.getSelectedIndices();
                    for (int i : selectedValues) {
                        toAdd.add(queue.get(i));
                    }
                    queue.removeAll(toAdd);
                    index--;
                    queue.addAll(index, toAdd);
                    list.getSelectionModel().setSelectionInterval(index, index + selectedValues.length - 1);
                    playbackOrder.updateQueuePositions();
                    list.repaint();
                    owner.repaint();
                }
            }
        });
        down.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int[] indices = list.getSelectedIndices();
                if (indices.length > 0) {
                    int index = indices[0] + 1;
                    if (index <= queue.size() - indices.length) {
                        List<PlaybackOrder.QueueTuple> toAdd = new ArrayList<PlaybackOrder.QueueTuple>();
                        int[] selectedValues = list.getSelectedIndices();
                        for (int i : selectedValues) {
                            toAdd.add(queue.get(i));
                        }
                        queue.removeAll(toAdd);
                        queue.addAll(index, toAdd);
                        list.getSelectionModel().setSelectionInterval(index, index + selectedValues.length - 1);
                        playbackOrder.updateQueuePositions();
                        list.repaint();
                        owner.repaint();
                    }
                }
            }
        });
        remove.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int index = list.getSelectedIndex() - 1;
                if (queue.size() > 0) {
                    for (int i : list.getSelectedIndices()) {
                        PlaybackOrder.QueueTuple tuple = queue.get(i);
                        tuple.track.setQueuePosition(-1);
                        queue.remove(tuple);
                    }
                }
                list.clearSelection();
                playbackOrder.updateQueuePositions();
                list.repaint();
                owner.repaint();
            }
        });
        clear.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                playbackOrder.flushQueue();
                list.repaint();
                owner.repaint();
            }
        });

        buttons.add(up);
        buttons.add(down);
        buttons.add(remove);
        buttons.add(clear);
        JPanel p1 = new JPanel(new FlowLayout());
        p1.add(buttons);
        add(p1, BorderLayout.LINE_END);

        setSize(400, 300);
        setLocationRelativeTo(SwingUtilities.windowForComponent(owner));
    }
}
TOP

Related Classes of com.tulskiy.musique.gui.dialogs.PlaybackQueueDialog

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.