1 package siouxsie.desktop.impl; 2 3 import java.awt.event.ActionEvent; 4 import java.util.HashMap; 5 import java.util.Map; 6 7 import javax.swing.AbstractAction; 8 import javax.swing.Action; 9 import javax.swing.JComponent; 10 import javax.swing.JScrollPane; 11 12 import org.apache.commons.logging.Log; 13 import org.apache.commons.logging.LogFactory; 14 import org.jdesktop.swingx.JXTaskPane; 15 import org.jdesktop.swingx.JXTaskPaneContainer; 16 17 import siouxsie.desktop.IApplication; 18 import siouxsie.desktop.IApplicationCategory; 19 import siouxsie.desktop.IApplicationRegistry; 20 import siouxsie.desktop.events.ApplicationSelectedEvent; 21 import siouxsie.desktop.events.impl.AbstractDesktopActor; 22 23 /** 24 * 25 * @author Arnaud Cogoluegnes 26 * @version $Id$ 27 */ 28 public class JXTaskPaneListApplications extends AbstractDesktopActor { 29 30 private JScrollPane sp; 31 32 private JXTaskPaneContainer taskPaneContainer; 33 34 private IApplicationRegistry applicationRegistry; 35 36 37 public IApplicationRegistry getApplicationRegistry() { 38 return applicationRegistry; 39 } 40 41 public void setApplicationRegistry(IApplicationRegistry applicationRegistry) { 42 this.applicationRegistry = applicationRegistry; 43 } 44 45 private static final Log LOG = LogFactory.getLog(JXTaskPaneListApplications.class); 46 47 public void init() { 48 49 taskPaneContainer = new JXTaskPaneContainer(); 50 sp = new JScrollPane(taskPaneContainer); 51 52 Map<String, JXTaskPane> mapCategoryToTaskPane = new HashMap<String, JXTaskPane>(); 53 for(IApplication app : getApplicationRegistry().getApplications()) { 54 JXTaskPane taskpane = mapCategoryToTaskPane.get(app.getCategoryId()); 55 if (taskpane == null) { 56 taskpane = new JXTaskPane(); 57 IApplicationCategory cat = getApplicationRegistry().getCategory(app.getCategoryId()); 58 if(cat == null) { 59 LOG.warn("Could not find category "+app.getCategoryId()+" for application "+app.getId()+". Trying default category."); 60 cat = getApplicationRegistry().getCategory("default"); 61 if(cat == null) { 62 LOG.warn("No default category, application ignored."); 63 continue; 64 } 65 } 66 mapCategoryToTaskPane.put(app.getCategoryId(), taskpane); 67 taskpane.setTitle(cat.getName()); 68 taskpane.setToolTipText(cat.getDescription()); 69 if (cat.getIcon() != null) { 70 taskpane.setIcon(cat.getIcon()); 71 } 72 taskPaneContainer.add(taskpane); 73 } 74 75 taskpane.add(new SwitchApplicationAction(app)); 76 } 77 } 78 79 80 public JComponent getComponent() { 81 return sp; 82 } 83 84 class SwitchApplicationAction extends AbstractAction { 85 86 private static final long serialVersionUID = 560946042901742496L; 87 88 private IApplication application; 89 90 public SwitchApplicationAction(IApplication app) { 91 application = app; 92 putValue(Action.NAME, application.getName()); 93 if(app.getIcon() != null) { 94 putValue(Action.SMALL_ICON,app.getIcon()); 95 } 96 } 97 98 public void actionPerformed(ActionEvent evt) { 99 fireDesktopEvent(new ApplicationSelectedEvent(application)); 100 } 101 102 } 103 104 105 106 }