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 }