diff --git a/projects/robodj/src/java/robodj/chooser/PlaylistPanel.java b/projects/robodj/src/java/robodj/chooser/PlaylistPanel.java index 9423ad16..ca668096 100644 --- a/projects/robodj/src/java/robodj/chooser/PlaylistPanel.java +++ b/projects/robodj/src/java/robodj/chooser/PlaylistPanel.java @@ -1,14 +1,16 @@ // -// $Id: PlaylistPanel.java,v 1.9 2001/10/12 18:21:27 mdb Exp $ +// $Id: PlaylistPanel.java,v 1.10 2002/02/22 08:37:17 mdb Exp $ package robodj.chooser; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.util.ArrayList; import javax.swing.*; +import java.util.ArrayList; +import java.util.Iterator; + import com.samskivert.io.PersistenceException; import com.samskivert.swing.*; import com.samskivert.swing.util.*; @@ -95,6 +97,58 @@ public class PlaylistPanel // remove the entry UI elements JPanel epanel = (JPanel)entry.label.getParent(); epanel.getParent().remove(epanel); + revalidate(); // relayout + + // remove the entry from the playlist + _plist.remove(entry); + + // update the playing indicator because we may have removed + // the playing entry + refreshPlaying(); + + } else if (cmd.equals("remove_all")) { + JButton src = (JButton)e.getSource(); + PlaylistEntry entry = + (PlaylistEntry)src.getClientProperty("entry"); + + // remove all entries starting with this one until we get to + // one that has a different entryid + int count = 0; + Iterator iter = _plist.iterator(); + while (iter.hasNext()) { + PlaylistEntry pe = (PlaylistEntry)iter.next(); + if (entry == pe) { + count++; + // remove the entry UI elements + JPanel epanel = (JPanel)pe.label.getParent(); + epanel.getParent().remove(epanel); + // remove the entry + iter.remove(); + + } else if (count > 0) { + if (pe.entry.entryid == entry.entry.entryid) { + count++; + // remove the entry UI elements + JPanel epanel = (JPanel)pe.label.getParent(); + epanel.getParent().remove(epanel); + // remove the entry + iter.remove(); + + } else { + // we hit an entry that doesn't match, bail + break; + } + } + } + + // remove the title and stuff + JPanel tpanel = (JPanel)src.getParent(); + tpanel.getParent().remove(tpanel); + + revalidate(); // relayout + + // now tell the music daemon to remove these entries + Chooser.scontrol.removeGroup(entry.song.songid, count); // update the playing indicator because we may have removed // the playing entry @@ -213,14 +267,24 @@ public class PlaylistPanel String title = null; for (int i = 0; i < _plist.size(); i++) { PlaylistEntry entry = (PlaylistEntry)_plist.get(i); + JButton button; // add record/artist indicators when the record and artist // changes if (!entry.entry.title.equals(title)) { + JPanel tpanel = new JPanel(); + gl = new HGroupLayout(GroupLayout.NONE); + gl.setOffAxisPolicy(GroupLayout.STRETCH); + gl.setJustification(GroupLayout.LEFT); + tpanel.setLayout(gl); + title = entry.entry.title; JLabel label = new JLabel(entry.entry.title + " - " + entry.entry.artist); - _bpanel.add(label); + tpanel.add(label); + tpanel.add(newButton("Remove", "remove_all", entry)); + + _bpanel.add(tpanel); } // create a browse and a play button @@ -236,20 +300,8 @@ public class PlaylistPanel entry.label.setFont(_nameFont); hpanel.add(entry.label); - JButton button; - button = new JButton("Skip to"); - button.setFont(_nameFont); - button.setActionCommand("skipto"); - button.addActionListener(this); - button.putClientProperty("entry", entry); - hpanel.add(button); - - button = new JButton("Remove"); - button.setActionCommand("remove"); - button.setFont(_nameFont); - button.addActionListener(this); - button.putClientProperty("entry", entry); - hpanel.add(button); + hpanel.add(newButton("Skip to", "skipto", entry)); + hpanel.add(newButton("Remove", "remove", entry)); // let the bpanel know that we want to scroll the active track // label into place once we're all laid out @@ -270,6 +322,17 @@ public class PlaylistPanel _bpanel.revalidate(); } + protected JButton newButton (String label, String command, + Object clientProperty) + { + JButton button = new JButton(label); + button.setFont(_nameFont); + button.setActionCommand(command); + button.addActionListener(this); + button.putClientProperty("entry", clientProperty); + return button; + } + protected void highlightPlaying () { for (int i = 0; i < _plist.size(); i++) { @@ -278,6 +341,7 @@ public class PlaylistPanel entry.label.setForeground(Color.red); } } + repaint(); } protected PlaylistEntry getPlayingEntry ()