Package com.tulskiy.musique.gui.menu

Source Code of com.tulskiy.musique.gui.menu.TracksMenu

/*
* Copyright (c) 2008, 2009, 2010, 2011 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.menu;

import java.awt.Desktop;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import javax.swing.ActionMap;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.KeyStroke;

import com.tulskiy.musique.audio.AudioFileReader;
import com.tulskiy.musique.audio.player.Player;
import com.tulskiy.musique.gui.dialogs.ConverterDialog;
import com.tulskiy.musique.gui.dialogs.FileOperations;
import com.tulskiy.musique.gui.dialogs.ProgressDialog;
import com.tulskiy.musique.gui.dialogs.Task;
import com.tulskiy.musique.gui.playlist.PlaylistTable;
import com.tulskiy.musique.images.Images;
import com.tulskiy.musique.playlist.Playlist;
import com.tulskiy.musique.playlist.Track;
import com.tulskiy.musique.playlist.TrackData;
import com.tulskiy.musique.system.Application;
import com.tulskiy.musique.system.TrackIO;
import com.tulskiy.musique.util.FileUtils;
import com.tulskiy.musique.util.Util;

/**
* Author: Denis Tulskiy
* Date: 2/26/11
*/
public class TracksMenu extends Menu {
    private static Application app = Application.getInstance();
    private static Player player = app.getPlayer();

    public JPopupMenu create(final PlaylistTable parent, final Playlist playlist, final ArrayList<Track> tracks) {
        final ActionMap aMap = parent.getActionMap();
        final JPopupMenu tableMenu = new JPopupMenu();
        JMenuItem item;

        item = tableMenu.add(aMap.get("enqueue"));
        item.setIcon(Images.getEmptyIcon());
        item.setAccelerator(KeyStroke.getKeyStroke("Q"));
        tableMenu.add(new JMenuItem("Reload Tags")).addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                ProgressDialog dialog = new ProgressDialog(parent, "Reloading Tags");
                dialog.show(new Task() {
                    String currentTrack;
                    float progress = 0;
                    boolean abort = false;

                    @Override
                    public String getStatus() {
                        return "Reading tags: " + currentTrack;
                    }

                    @Override
                    public void abort() {
                        abort = true;
                    }

                    @Override
                    public void start() {
                        for (int i = 0; i < tracks.size(); i++) {
                            Track track = tracks.get(i);
                            TrackData trackData = track.getTrackData();
                            if (abort)
                                break;
                            if (trackData.isFile() && trackData.getSubsongIndex() == 0) {
                                currentTrack = trackData.getFile().getName();
                                progress = (float) i / tracks.size();
                                AudioFileReader reader = TrackIO.getAudioFileReader(trackData.getFile().getName());
                                trackData.clearTags();
                                reader.reload(track);
                            }
                        }
                        playlist.firePlaylistChanged();
                    }

                    @Override
                    public boolean isIndeterminate() {
                        return false;
                    }

                    @Override
                    public float getProgress() {
                        return progress;
                    }
                });
            }
        });

        ActionListener fileOpsListener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String cmd = e.getActionCommand();
                FileOperations.Operation op = FileOperations.Operation.valueOf(cmd);
                new FileOperations(parent, op, tracks).setVisible(true);
            }
        };
        JMenu fileOps = new JMenu("File Operations");
        fileOps.add("Open containing folder").addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                for (Track track : tracks) {
                    if (track.getTrackData().isFile()) {
                        File file = track.getTrackData().getFile().getParentFile();
                        try {
                            Desktop.getDesktop().open(file);
                        } catch (IOException e1) {
                            e1.printStackTrace();
                        }
                        break;
                    }
                }
            }
        });
        fileOps.addSeparator();
        for (FileOperations.Operation op : FileOperations.Operation.values()) {
            fileOps.add(op.name()).addActionListener(fileOpsListener);
        }
        fileOps.addSeparator();
        JMenuItem deleteItem = fileOps.add("Delete       ");
        deleteItem.setIcon(Images.getEmptyIcon());
        deleteItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int ret = JOptionPane.showConfirmDialog(null, "This will delete file(s) permanently. Are you sure?", "Delete File(s)?", JOptionPane.YES_NO_OPTION);
                if (ret == JOptionPane.YES_OPTION) {
                    for (Track track : tracks) {
                        if (track.getTrackData().isFile() && !track.getTrackData().isCue()) {
                            if (player.getTrack() == track) {
                                player.stop();
                            }

                            if (track.getTrackData().getFile().delete()) {
                                FileUtils.deleteEmptyParentFolders(track.getTrackData().getFile(), true);
                                playlist.remove(track);
                            }
                        }

                    }
                    playlist.firePlaylistChanged();
                    parent.adjustLastSongAfterDelete(tracks);
                }
            }
        });

        tableMenu.add("Convert").addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                new ConverterDialog(parent, tracks).setVisible(true);
            }
        });
        tableMenu.add(fileOps);

        for (MenuCallback callback : menus) {
            JMenu menu = callback.create(tracks, playlist);
            if (menu != null)
                tableMenu.add(menu);
        }

        JMenuItem properties = new JMenuItem("Properties");
        properties.setAccelerator(KeyStroke.getKeyStroke("alt ENTER"));
        properties.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                parent.showProperties(tracks);
            }
        });
        tableMenu.add(properties);
        Util.fixIconTextGap(tableMenu);
        return tableMenu;
    }
}
TOP

Related Classes of com.tulskiy.musique.gui.menu.TracksMenu

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.