/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.lee.echo360.tray; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import java.awt.Menu; import java.awt.MenuItem; import java.awt.event.ActionEvent; import java.beans.PropertyChangeEvent; import java.util.HashMap; import java.util.Map; import java.util.SortedSet; import java.util.TreeSet; import org.lee.echo360.control.ControllerAction; import org.lee.echo360.control.controllers.MainController; import org.lee.echo360.model.ActionResult; import org.lee.echo360.model.DownloadType; import org.lee.echo360.model.Lecture; import org.lee.echo360.model.Stream; import org.lee.echo360.model.Subject; import org.lee.echo360.tray.util.prefix.MenuPrefixUpdater; import org.lee.echo360.tray.util.prefix.StreamMenuPrefixUpdater; /** * * @author lee */ public class StreamBasedSubjectMenu extends SubjectMenu { BiMap<MenuPrefixUpdater, Lecture> menuMap = HashBiMap.create(); Map<Stream, MenuPrefixUpdater> streamMenuMap = new HashMap<Stream, MenuPrefixUpdater>(); public StreamBasedSubjectMenu(Subject s, MainController mc) { super(s, mc); updateSubject(); } @Override public void propertyChange(PropertyChangeEvent evt) { // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override public void downloadingStarted(Subject subject) { // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override public void downloadingFinished(Subject subject) { // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override public void downloadStarting(Subject s, Lecture l, DownloadType t) { // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override public void downloadCompleted(Subject s, Lecture l, DownloadType t) { // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override public void start(ControllerAction action) { // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override public void finished(ControllerAction action, ActionResult r) { // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override public void error(Throwable e) { // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override public void actionPerformed(ActionEvent e) { Object o = e.getSource(); if (o instanceof MenuItem) { MenuItem m = (MenuItem) o; MenuPrefixUpdater wrapped = MenuPrefixUpdater.wrapForEquality(m); if (menuMap.containsKey(wrapped)) { Lecture l = menuMap.get(wrapped); openLecture(l); } } } private void updateSubject() { this.getMenu().removeAll(); TreeSet<Lecture> otherLectures = new TreeSet<Lecture>(); for (Stream stream : getSubject().getStreams()) { if (stream.isActualStream()) { SortedSet<Lecture> lectures = stream.getLectures(); if (!lectures.isEmpty()) { String label = stream.getName(); Menu m = new Menu(label); StreamMenuPrefixUpdater smpu = new StreamMenuPrefixUpdater(m, label, getSubject(), stream); streamMenuMap.put(stream, smpu); getMainCtl().addControllerListener(smpu); getMainCtl().addDownloadProgressListener(smpu); addAllLectures(lectures, m, menuMap.inverse()); this.getMenu().add(m); } } else { otherLectures.addAll(stream.getLectures()); } } if (!otherLectures.isEmpty()) { String label = "Other"; Menu m = new Menu(label); StreamMenuPrefixUpdater smpu = new StreamMenuPrefixUpdater(m, label, getSubject(), null); // Null has special meaning(I.E. Other) streamMenuMap.put(null, smpu); getMainCtl().addControllerListener(smpu); getMainCtl().addDownloadProgressListener(smpu); addAllLectures(otherLectures, m, menuMap.inverse()); this.getMenu().addSeparator(); this.getMenu().add(m); } } }