View Javadoc
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 }