/**
* Xtreme Media Player a cross-platform media player.
* Copyright (C) 2005-2011 Besmir Beqiri
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package xtrememp;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import javax.swing.AbstractAction;
import javax.swing.AbstractButton;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;
import xtrememp.player.dsp.DigitalSignalSynchronizer;
import xtrememp.ui.button.PopupButton;
import xtrememp.util.Utilities;
import static xtrememp.util.Utilities.tr;
import xtrememp.visualization.Visualization;
import xtrememp.visualization.VisualizationChangeListener;
import xtrememp.visualization.VisualizationEvent;
import xtrememp.visualization.VisualizationPanel;
/**
*
* @author Besmir Beqiri
*/
public final class VisualizationManager extends JPanel implements ActionListener,
VisualizationChangeListener {
private final String PREV_VIS_ACTION = "prevVisAction";
private final String NEXT_VIS_ACTION = "nextVisAction";
private DigitalSignalSynchronizer dss;
private JPopupMenu selectionMenu;
private JButton fullScreenButton;
private JButton prevVisButton;
private JButton nextVisButton;
private PopupButton visMenuButton;
private ButtonGroup visButtonGroup;
private VisualizationPanel visPanel;
private Map<String, Visualization> visMap;
public VisualizationManager(DigitalSignalSynchronizer dss) {
super(new BorderLayout());
this.dss = dss;
initComponents();
}
private void initComponents() {
JToolBar toolBar = new JToolBar();
toolBar.setFloatable(false);
fullScreenButton = new JButton(Utilities.VIEW_FULLSCREEN_ICON);
fullScreenButton.setToolTipText(tr("MainFrame.VisualizationManager.ViewFullscreen"));
fullScreenButton.addActionListener(this);
toolBar.add(fullScreenButton);
toolBar.addSeparator();
prevVisButton = new JButton(Utilities.GO_PREVIOUS_ICON);
prevVisButton.setToolTipText(tr("MainFrame.VisualizationManager.PreviousVisualization"));
prevVisButton.addActionListener(this);
prevVisButton.getInputMap(WHEN_IN_FOCUSED_WINDOW).put(
KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, InputEvent.SHIFT_DOWN_MASK), PREV_VIS_ACTION);
prevVisButton.getActionMap().put(PREV_VIS_ACTION, new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
visPanel.prevVisualization();
}
});
toolBar.add(prevVisButton);
nextVisButton = new JButton(Utilities.GO_NEXT_ICON);
nextVisButton.setToolTipText(tr("MainFrame.VisualizationManager.NextVisualization"));
nextVisButton.addActionListener(this);
nextVisButton.getInputMap(WHEN_IN_FOCUSED_WINDOW).put(
KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, InputEvent.SHIFT_DOWN_MASK), NEXT_VIS_ACTION);
nextVisButton.getActionMap().put(NEXT_VIS_ACTION, new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
visPanel.nextVisualization();
}
});
toolBar.add(nextVisButton);
toolBar.addSeparator();
visMenuButton = new PopupButton(Utilities.MENU_ICON);
visMenuButton.setToolTipText(tr("MainFrame.VisualizationManager.VisualizationsMenu"));
selectionMenu = visMenuButton.getPopupMenu();
visButtonGroup = new ButtonGroup();
visPanel = new VisualizationPanel();
visPanel.addVisualizationChangeListener(this);
visMap = new HashMap<String, Visualization>();
for (Visualization vis : visPanel.getVisualizationSet()) {
String visDisplayName = vis.getDisplayName();
visMap.put(visDisplayName, vis);
JRadioButtonMenuItem menuItem = new JRadioButtonMenuItem(visDisplayName);
menuItem.setSelected(visDisplayName.equals(Settings.getVisualization()));
menuItem.addActionListener(this);
visButtonGroup.add(menuItem);
selectionMenu.add(menuItem);
}
toolBar.add(visMenuButton);
this.add(toolBar, BorderLayout.NORTH);
this.add(visPanel, BorderLayout.CENTER);
}
public void setDssEnabled(boolean flag) {
if (flag) {
dss.add(visPanel);
} else {
dss.remove(visPanel);
}
}
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source.equals(fullScreenButton)) {
visPanel.setFullScreen(true);
} else if (source.equals(prevVisButton)) {
visPanel.prevVisualization();
} else if (source.equals(nextVisButton)) {
visPanel.nextVisualization();
} else {
visPanel.showVisualization(visMap.get(e.getActionCommand()), false);
}
}
@Override
public void visualizationChanged(VisualizationEvent e) {
String visDisplayName = e.getVisualization().getDisplayName();
for (Enumeration<AbstractButton> abEnum = visButtonGroup.getElements(); abEnum.hasMoreElements();) {
AbstractButton aButton = abEnum.nextElement();
if (aButton.getText().equals(visDisplayName)) {
aButton.setSelected(true);
break;
}
}
}
}