// Tray.java // (C) 2008-2012 by David Wieditz; d.wieditz@gmx.de // (C) 2008 by Florian Richter; Florian_Richter@gmx.de // first published 13.07.2008 on http://yacy.net // // This is a part of YaCy, a peer-to-peer based web search engine // // $LastChangedDate$ // $LastChangedRevision$ // $LastChangedBy$ // // LICENSE // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA package net.yacy.gui; import java.awt.Image; import java.awt.MenuItem; import java.awt.PopupMenu; import java.awt.SystemTray; import java.awt.Toolkit; import java.awt.TrayIcon; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import net.yacy.gui.framework.Browser; import net.yacy.kelondro.util.OS; import net.yacy.search.Switchboard; import net.yacy.search.SwitchboardConstants; public final class Tray { private Switchboard sb; private TrayIcon ti; private String trayLabel; final private static boolean deutsch = System.getProperty("user.language","").equals("de"); final private static boolean french = System.getProperty("user.language","").equals("fr"); // states private boolean isShown = false; private boolean appIsReady = false; private boolean menuEnabled = true; public Tray(final Switchboard sb_par) { sb = sb_par; menuEnabled = sb.getConfigBool(SwitchboardConstants.TRAY_MENU_ENABLED, true); trayLabel = sb.getConfig(SwitchboardConstants.TRAY_ICON_LABEL, "YaCy"); try { final boolean trayIconEnabled = sb.getConfigBool(SwitchboardConstants.TRAY_ICON_ENABLED, false); final boolean trayIconForced = sb.getConfigBool(SwitchboardConstants.TRAY_ICON_FORCED, false); if (trayIconEnabled && (OS.isWindows || trayIconForced)) { System.setProperty("java.awt.headless", "false"); // we have to switch off headless mode, else all will fail if(SystemTray.isSupported()) { final String iconPath = sb.getAppPath().toString() + "/addon/YaCy_TrayIcon.png".replace("/", File.separator); ActionListener al = new ActionListener() { public void actionPerformed(final ActionEvent e) { doubleClickAction(); } }; final Image i = Toolkit.getDefaultToolkit().getImage(iconPath); final PopupMenu menu = (menuEnabled) ? getPopupMenu() : null; ti = new TrayIcon(i, trayLabel, menu); ti.setImageAutoSize(true); ti.addActionListener(al); SystemTray.getSystemTray().add(ti); isShown = true; } else { System.setProperty("java.awt.headless", "true"); } } } catch (final Exception e) { System.setProperty("java.awt.headless", "true"); } } /** * set all functions available */ public void setReady() { appIsReady = true; } public void remove() { if (isShown){ SystemTray.getSystemTray().remove(ti); ti = null; isShown = false; } } private void doubleClickAction() { if (!appIsReady) { String label; if (deutsch) label = "Bitte warten bis YaCy gestartet ist."; else if (french) label = "S'il vous plaît attendre jusqu'à YaCy est démarré."; else label = "Please wait until YaCy is started."; //ti.displayMessage("YaCy",label); ti.displayMessage("YaCy", label, TrayIcon.MessageType.INFO); } else { openBrowserPage(""); } } /** * * @param browserPopUpPage relative path to the webserver root */ private void openBrowserPage(final String browserPopUpPage) { if(!menuEnabled) return; // no need for https, because we are on localhost Browser.openBrowser("http://localhost:" + sb.getConfig("port", "8090") + "/" + browserPopUpPage); } private PopupMenu getPopupMenu() { String label; PopupMenu menu = new PopupMenu(); MenuItem menuItem; // YaCy Search if (deutsch) label = "YaCy Suche"; else if (french) label = "YaCy Recherche"; else label = "YaCy Search"; menuItem = new MenuItem(label); menuItem.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { openBrowserPage(""); } }); menu.add(menuItem); /* no prominent compare since google can not be displayed in a frame anymore // Compare YaCy if (deutsch) label = "Vergleichs-Suche"; else if (french) label = "Comparer YaCy"; else label = "Compare YaCy"; menuItem = new MenuItem(label); menuItem.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { openBrowser("compare_yacy.html"); } }); menu.add(menuItem); */ // Peer Administration if (deutsch) label = "Peer Administration"; else if (french) label = "Peer Administration"; else label = "Peer Administration"; menuItem = new MenuItem(label); menuItem.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { openBrowserPage("Status.html"); } }); menu.add(menuItem); // Separator menu.addSeparator(); // Quit if(deutsch) label = "YaCy Beenden"; else if(french) label = "Arrêt YaCy"; else label = "Shutdown YaCy"; menuItem = new MenuItem(label); menuItem.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { sb.terminate("shutdown from tray"); } }); menu.add(menuItem); return menu; } }