package org.limewire.ui.swing.player; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import javax.swing.Icon; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.SwingUtilities; import net.miginfocom.swing.MigLayout; import org.jdesktop.application.Resource; import org.limewire.player.api.PlayerState; import org.limewire.setting.evt.SettingEvent; import org.limewire.setting.evt.SettingListener; import org.limewire.ui.swing.components.MarqueeButton; import org.limewire.ui.swing.library.LibraryMediator; import org.limewire.ui.swing.settings.SwingUiSettings; import org.limewire.ui.swing.util.GuiUtils; import org.limewire.ui.swing.util.I18n; import com.google.inject.Inject; import com.google.inject.Provider; public class MiniPlayerPanel extends JPanel { @Resource private Icon pauseIcon; @Resource private Icon pauseIconPressed; @Resource private Icon pauseIconRollover; @Resource private Icon playIcon; @Resource private Icon playIconPressed; @Resource private Icon playIconRollover; @Resource private Color foregroundColor; @Resource private Font font; private JButton playPauseButton; private MarqueeButton statusButton; private final Provider<PlayerMediator> playerMediator; private final LibraryMediator libraryMediator; private boolean isInitialized = false; @Inject public MiniPlayerPanel(Provider<PlayerMediator> playerMediator, LibraryMediator libraryMediator) { super(new MigLayout("insets 0", "4[][]", "0[]0")); this.playerMediator = playerMediator; this.libraryMediator = libraryMediator; } private void initialize() { if(!isInitialized) { isInitialized = true; GuiUtils.assignResources(this); setOpaque(false); playPauseButton = new JButton(); playPauseButton.setMargin(new Insets(0, 0, 0, 0)); playPauseButton.setBorderPainted(false); playPauseButton.setContentAreaFilled(false); playPauseButton.setFocusPainted(false); playPauseButton.setRolloverEnabled(true); playPauseButton.setIcon(playIcon); Dimension playPauseDimensions = new Dimension(playIcon.getIconWidth(), playIcon.getIconHeight()); playPauseButton.setMaximumSize(playPauseDimensions); playPauseButton.setPreferredSize(playPauseDimensions); playPauseButton.setRolloverIcon(playIconRollover); playPauseButton.setPressedIcon(playIconPressed); playPauseButton.setHideActionText(true); playPauseButton.addActionListener(new PlayListener()); statusButton = new MarqueeButton(I18n.tr("Nothing selected"), 16); Dimension statusButtonDimensions = new Dimension(Integer.MAX_VALUE, playIcon.getIconHeight()); statusButton.setMaximumSize(statusButtonDimensions); statusButton.setFont(font); statusButton.setForeground(foregroundColor); statusButton.addActionListener(new ShowPlayerListener()); add(playPauseButton, "gapbottom 0, gaptop 0"); add(statusButton, "gapbottom 0, gaptop 0"); setMaximumSize(getPreferredSize()); } } @Inject void register() { playerMediator.get().addMediatorListener(new PlayerListener()); //hide the player if setting is disabled SwingUiSettings.PLAYER_ENABLED.addSettingListener(new SettingListener(){ @Override public void settingChanged(SettingEvent evt) { SwingUtilities.invokeLater(new Runnable(){ public void run() { MiniPlayerPanel.this.setVisible(false); } }); } }); } private class ShowPlayerListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { File currentFile = playerMediator.get().getCurrentSongFile(); if (currentFile != null) { libraryMediator.selectInLibrary(currentFile); } } } private class PlayListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { setPlaying(!isPlaying()); } } private boolean isPlaying(){ return playerMediator.get().getStatus() == PlayerState.PLAYING || playerMediator.get().getStatus() == PlayerState.SEEKING_PLAY ; } private void setPlaying(boolean playing){ if (playing){ playerMediator.get().resume(); } else { playerMediator.get().pause(); } } private class PlayerListener implements PlayerMediatorListener { @Override public void progressUpdated(float progress) { } @Override public void songChanged(String name) { initialize(); //Show MiniPlayer when song is opened statusButton.setText(name); statusButton.getToolTip().setTipText(name); if(!isVisible()) setVisible(true); statusButton.start(); } @Override public void stateChanged(PlayerState state) { initialize(); if (state == PlayerState.PLAYING || state == PlayerState.RESUMED){ playPauseButton.setIcon(pauseIcon); playPauseButton.setRolloverIcon(pauseIconRollover); playPauseButton.setPressedIcon(pauseIconPressed); statusButton.start(); } else if (state == PlayerState.STOPPED || state == PlayerState.EOM || state == PlayerState.UNKNOWN) { setVisible(false); statusButton.stop(); } else if(state == PlayerState.PAUSED){ playPauseButton.setIcon(playIcon); playPauseButton.setRolloverIcon(playIconRollover); playPauseButton.setPressedIcon(playIconPressed); statusButton.stop(); } } } }