/*
* Jajuk
* Copyright (C) The Jajuk Team
* http://jajuk.info
*
* 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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
package org.jajuk.ui.widgets;
import java.awt.Component;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemListener;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.SwingConstants;
import javax.swing.plaf.basic.BasicComboBoxRenderer;
import org.jajuk.events.JajukEvent;
import org.jajuk.events.JajukEvents;
import org.jajuk.events.ObservationManager;
import org.jajuk.services.dj.Ambience;
import org.jajuk.services.dj.AmbienceManager;
import org.jajuk.ui.actions.ActionManager;
import org.jajuk.ui.actions.JajukActions;
import org.jajuk.util.Conf;
import org.jajuk.util.Const;
import org.jajuk.util.IconLoader;
import org.jajuk.util.JajukIcons;
import org.jajuk.util.Messages;
import org.jajuk.util.log.Log;
/**
* Ambience selection combo box.
*/
public class AmbienceComboBox extends SteppedComboBox {
/** Generated serialVersionUID. */
private static final long serialVersionUID = 1L;
/** An instance of the ambience combo listener. */
private AmbienceListener ambienceListener;
/**
* Ambience combo listener.
*/
private class AmbienceListener implements ActionListener {
/* (non-Javadoc)
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
@Override
public void actionPerformed(ActionEvent ae) {
// Ambience Configuration
if (getSelectedIndex() == 0) {
// display the wizard
try {
ActionManager.getAction(JajukActions.CONFIGURE_AMBIENCES).perform(null);
} catch (Exception e) {
Log.error(e);
}
// Reset combo to last selected item. We do this to avoid to select the
// "0" item that is not an ambience
removeActionListener(ambienceListener);
Ambience defaultAmbience = AmbienceManager.getInstance().getAmbience(
Conf.getString(Const.CONF_DEFAULT_AMBIENCE));
if (defaultAmbience != null) {
for (int i = 0; i < getItemCount(); i++) {
if (((JLabel) getItemAt(i)).getText().equals(defaultAmbience.getName())) {
setSelectedIndex(i);
break;
}
}
} else {
setSelectedIndex(1);
}
addActionListener(ambienceListener);
}
// Selected 'Any" ambience
else if (getSelectedIndex() == 1) {
// reset default ambience
Conf.setProperty(Const.CONF_DEFAULT_AMBIENCE, "");
ObservationManager.notify(new JajukEvent(JajukEvents.AMBIENCES_SELECTION_CHANGE));
} else {// Selected an ambience
Ambience ambience = AmbienceManager.getInstance().getAmbienceByName(
((JLabel) getSelectedItem()).getText());
Conf.setProperty(Const.CONF_DEFAULT_AMBIENCE, ambience.getID());
ObservationManager.notify(new JajukEvent(JajukEvents.AMBIENCES_SELECTION_CHANGE));
}
}
}
/**
* Populate ambiences combo.
*/
void populateAmbiences() {
removeActionListener(ambienceListener);
ItemListener[] il = getItemListeners();
for (ItemListener element : il) {
removeItemListener(element);
}
removeAllItems();
addItem(new JLabel(Messages.getString("CommandJPanel.19"),
IconLoader.getIcon(JajukIcons.CONFIGURATION), SwingConstants.LEFT));
addItem(new JLabel("<html><i>" + Messages.getString("DigitalDJWizard.64") + "</i></html>",
IconLoader.getIcon(JajukIcons.GENRE), SwingConstants.LEFT));
// Add available ambiences
for (final Ambience ambience : AmbienceManager.getInstance().getAmbiences()) {
addItem(new JLabel(ambience.getName(), IconLoader.getIcon(JajukIcons.GENRE),
SwingConstants.LEFT));
}
// Select right item
Ambience defaultAmbience = AmbienceManager.getInstance().getAmbience(
Conf.getString(Const.CONF_DEFAULT_AMBIENCE));
if (defaultAmbience != null) {
for (int i = 0; i < getItemCount(); i++) {
if (((JLabel) getItemAt(i)).getText().equals(defaultAmbience.getName())) {
setSelectedIndex(i);
break;
}
}
} else {
// or "any" ambience
setSelectedIndex(1);
}
addActionListener(ambienceListener);
}
/**
* Instantiates a new ambience combo box.
*/
public AmbienceComboBox() {
super();
// Set size of the popup
int popupWidth = (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth() / 4);
setPopupWidth(popupWidth);
setRenderer(new BasicComboBoxRenderer() {
private static final long serialVersionUID = -6943363556191659895L;
@Override
public Component getListCellRendererComponent(JList list, Object value, int index,
boolean isSelected, boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
JLabel jl = (JLabel) value;
setIcon(jl.getIcon());
setText(jl.getText());
return this;
}
});
setToolTipText(Messages.getString("DigitalDJWizard.66"));
populateAmbiences();
ambienceListener = new AmbienceListener();
addActionListener(ambienceListener);
}
}