### Eclipse Workspace Patch 1.0
#P Spark
Index: src/java/org/jivesoftware/sparkimpl/plugin/systray/SysTrayPlugin.java
===================================================================
--- src/java/org/jivesoftware/sparkimpl/plugin/systray/SysTrayPlugin.java (revision 0)
+++ src/java/org/jivesoftware/sparkimpl/plugin/systray/SysTrayPlugin.java (revision 0)
@@ -0,0 +1,140 @@
+package org.jivesoftware.sparkimpl.plugin.systray;
+
+import java.awt.Menu;
+import java.awt.MenuItem;
+import java.awt.PopupMenu;
+import java.awt.SystemTray;
+import java.awt.TrayIcon;
+import java.awt.event.ActionEvent;
+
+import javax.swing.AbstractAction;
+import javax.swing.ImageIcon;
+
+import org.jivesoftware.Spark;
+import org.jivesoftware.resource.Default;
+import org.jivesoftware.resource.Res;
+import org.jivesoftware.resource.SparkRes;
+import org.jivesoftware.spark.SparkManager;
+import org.jivesoftware.spark.plugin.Plugin;
+import org.jivesoftware.spark.ui.status.StatusBar;
+import org.jivesoftware.spark.ui.status.StatusItem;
+
+public class SysTrayPlugin implements Plugin
+{
+ private PopupMenu popupMenu = new PopupMenu();
+
+ private final MenuItem openMenu = new MenuItem(Res.getString("menuitem.open"));
+ private final MenuItem minimizeMenu = new MenuItem(Res.getString("menuitem.hide"));
+ private final MenuItem exitMenu = new MenuItem(Res.getString("menuitem.exit"));
+ private final Menu statusMenu = new Menu(Res.getString("menuitem.status"));
+ private final MenuItem logoutMenu = new MenuItem(Res.getString("menuitem.logout.no.status"));
+
+ public boolean canShutDown()
+ {
+ return true;
+ }
+
+ public void initialize()
+ {
+ System.out.println("INIT");
+ SystemTray tray = SystemTray.getSystemTray();
+
+ ImageIcon availableIcon = Default.getImageIcon(Default.TRAY_IMAGE);
+ if (availableIcon == null) {
+ availableIcon = SparkRes.getImageIcon(SparkRes.TRAY_IMAGE);
+ }
+
+ popupMenu.add(openMenu);
+ openMenu.addActionListener(new AbstractAction() {
+
+ private static final long serialVersionUID = 1L;
+
+ public void actionPerformed(ActionEvent event) {
+ SparkManager.getMainWindow().setVisible(true);
+ SparkManager.getMainWindow().toFront();
+ }
+
+ });
+ popupMenu.add(minimizeMenu);
+ minimizeMenu.addActionListener(new AbstractAction() {
+ private static final long serialVersionUID = 1L;
+ public void actionPerformed(ActionEvent event) {
+ SparkManager.getMainWindow().setVisible(false);
+ }
+ });
+ popupMenu.addSeparator();
+ addStatusMessages();
+ popupMenu.add(statusMenu);
+ statusMenu.addActionListener(new AbstractAction() {
+ private static final long serialVersionUID = 1L;
+ public void actionPerformed(ActionEvent event) {
+
+ }
+ });
+
+ if (Spark.isWindows())
+ {
+ popupMenu.add(logoutMenu);
+ logoutMenu.addActionListener(new AbstractAction() {
+ private static final long serialVersionUID = 1L;
+
+ public void actionPerformed(ActionEvent e) {
+ SparkManager.getMainWindow().logout(false);
+ }
+ });
+ }
+ // Exit Menu
+ exitMenu.addActionListener(new AbstractAction() {
+ private static final long serialVersionUID = 1L;
+
+ public void actionPerformed(ActionEvent e) {
+ SparkManager.getMainWindow().shutdown();
+ }
+ });
+ popupMenu.add(exitMenu);
+
+ try {
+ TrayIcon trayIcon = new TrayIcon(availableIcon.getImage(),"Spark", popupMenu);
+ trayIcon.setImageAutoSize(true);
+
+ tray.add(trayIcon);
+ } catch (Exception e) {
+ // Not Supported
+ }
+ }
+
+ public void addStatusMessages() {
+ StatusBar statusBar = SparkManager.getWorkspace().getStatusBar();
+ for (Object o : statusBar.getStatusList()) {
+ StatusItem statusItem = (StatusItem) o;
+ MenuItem status = new MenuItem(statusItem.getText());
+ status.addActionListener(new AbstractAction() {
+ private static final long serialVersionUID = 1L;
+
+ public void actionPerformed(ActionEvent e) {
+ if (e.getSource() instanceof MenuItem) {
+ MenuItem menuItem = (MenuItem) e.getSource();
+ StatusBar statusBar = SparkManager.getWorkspace().getStatusBar();
+ StatusItem statusItem = statusBar.getStatusItem(menuItem.getLabel());
+
+ SparkManager.getSessionManager().changePresence(statusItem.getPresence());
+
+ statusBar.setStatus(statusItem.getText());
+ }
+ }
+ });
+ statusMenu.add(status);
+ }
+ }
+
+ public void shutdown() {
+
+
+ }
+
+ public void uninstall() {
+
+
+ }
+
+}
Index: src/resources/META-INF/plugins.xml
===================================================================
--- src/resources/META-INF/plugins.xml (revision 10961)
+++ src/resources/META-INF/plugins.xml (working copy)
@@ -157,6 +157,15 @@
org.jivesoftware.sparkimpl.plugin.history.FrequentContactsPlugin
+ SystemTray
+ 1.0
+ Michael Will
+ http://www.igniterealtime.org
+ michael-will@gmx.net
+ SystemTray.
+ org.jivesoftware.sparkimpl.plugin.systray.SysTrayPlugin
+
+
Language Plugin
1.0
Derek DeMoro