2009-04-06 17:53:32 +00:00
/ *
* To change this template , choose Tools | Templates
* and open the template in the editor .
* /
package gui ;
import desktopgui.* ;
import java.awt.AWTException ;
import java.awt.Desktop ;
import java.awt.Image ;
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 java.io.IOException ;
import java.net.URI ;
import java.net.URISyntaxException ;
import java.util.logging.Level ;
import java.util.logging.Logger ;
2009-04-11 13:35:22 +00:00
import javax.swing.JMenu ;
import javax.swing.JMenuItem ;
import javax.swing.JPopupMenu ;
2009-04-06 17:53:32 +00:00
import router.RouterHandler ;
2009-04-10 18:56:56 +00:00
import router.RouterHelper ;
2009-04-11 13:35:22 +00:00
import router.configuration.PeerHelper ;
2009-04-06 17:53:32 +00:00
/ * *
*
* @author mathias
* /
public class Tray {
public Tray ( ) {
tray = SystemTray . getSystemTray ( ) ;
loadSystemTray ( ) ;
}
private void loadSystemTray ( ) {
Image image = Toolkit . getDefaultToolkit ( ) . getImage ( " desktopgui/resources/logo/logo.jpg " ) ;
2009-04-11 13:35:22 +00:00
final JPopupMenu popup = new JPopupMenu ( ) ;
2009-04-06 17:53:32 +00:00
//Create menu items to put in the popup menu
2009-04-11 13:35:22 +00:00
JMenuItem browserLauncher = new JMenuItem ( " Launch browser " ) ;
2009-04-06 17:53:32 +00:00
browserLauncher . addActionListener ( new ActionListener ( ) {
2009-04-11 13:35:22 +00:00
@Override
2009-04-06 17:53:32 +00:00
public void actionPerformed ( ActionEvent arg0 ) {
if ( Desktop . isDesktopSupported ( ) ) {
Desktop desktop = Desktop . getDesktop ( ) ;
try {
2009-04-10 18:56:56 +00:00
if ( desktop . isSupported ( Desktop . Action . BROWSE ) ) {
desktop . browse ( new URI ( " http://localhost:7657 " ) ) ;
}
else {
trayIcon . displayMessage ( " Browser not found " , " The default browser for your system was not found. " , TrayIcon . MessageType . WARNING ) ;
}
2009-04-06 17:53:32 +00:00
} catch ( URISyntaxException ex ) {
Logger . getLogger ( Main . class . getName ( ) ) . log ( Level . SEVERE , null , ex ) ;
} catch ( IOException ex ) {
Logger . getLogger ( Main . class . getName ( ) ) . log ( Level . SEVERE , null , ex ) ;
}
}
}
} ) ;
2009-04-11 13:35:22 +00:00
JMenuItem howto = new JMenuItem ( " How to use I2P " ) ;
2009-04-06 17:53:32 +00:00
howto . addActionListener ( new ActionListener ( ) {
2009-04-11 13:35:22 +00:00
@Override
2009-04-06 17:53:32 +00:00
public void actionPerformed ( ActionEvent arg0 ) {
if ( Desktop . isDesktopSupported ( ) ) {
Desktop desktop = Desktop . getDesktop ( ) ;
try {
File f = new File ( " desktopgui/resources/howto/howto.html " ) ;
2009-04-13 15:02:46 +00:00
System . out . println ( new URI ( null , null , null , 0 , " file:// " + f . getAbsolutePath ( ) , null , null ) ) ;
desktop . browse ( new URI ( null , null , null , 0 , " file:// " + f . getAbsolutePath ( ) , null , null ) ) ;
//desktop.browse(new URI("file://" + f.getAbsolutePath()));
2009-04-06 17:53:32 +00:00
} catch ( URISyntaxException ex ) {
Logger . getLogger ( Main . class . getName ( ) ) . log ( Level . SEVERE , null , ex ) ;
} catch ( IOException ex ) {
Logger . getLogger ( Main . class . getName ( ) ) . log ( Level . SEVERE , null , ex ) ;
}
}
}
} ) ;
2009-04-11 13:35:22 +00:00
JMenu config = new JMenu ( " Configuration " ) ;
JMenuItem speedConfig = new JMenuItem ( " Speed " ) ;
2009-04-06 17:53:32 +00:00
speedConfig . addActionListener ( new ActionListener ( ) {
2009-04-11 13:35:22 +00:00
@Override
2009-04-06 17:53:32 +00:00
public void actionPerformed ( ActionEvent arg0 ) {
( new SpeedSelector ( ) ) . setVisible ( true ) ;
}
2009-04-13 15:02:46 +00:00
} ) ;
JMenuItem generalConfig = new JMenuItem ( " General Configuration " ) ;
generalConfig . addActionListener ( new ActionListener ( ) {
@Override
public void actionPerformed ( ActionEvent arg0 ) {
new GeneralConfiguration ( ) ;
}
2009-04-06 17:53:32 +00:00
} ) ;
2009-04-11 13:35:22 +00:00
JMenuItem advancedConfig = new JMenuItem ( " Advanced Configuration " ) ;
2009-04-06 17:53:32 +00:00
advancedConfig . addActionListener ( new ActionListener ( ) {
2009-04-11 13:35:22 +00:00
@Override
2009-04-06 17:53:32 +00:00
public void actionPerformed ( ActionEvent arg0 ) {
if ( Desktop . isDesktopSupported ( ) ) {
Desktop desktop = Desktop . getDesktop ( ) ;
try {
desktop . browse ( new URI ( " http://localhost:7657/config.jsp " ) ) ;
} catch ( URISyntaxException ex ) {
Logger . getLogger ( Main . class . getName ( ) ) . log ( Level . SEVERE , null , ex ) ;
} catch ( IOException ex ) {
Logger . getLogger ( Main . class . getName ( ) ) . log ( Level . SEVERE , null , ex ) ;
}
}
}
2009-04-10 18:56:56 +00:00
} ) ;
2009-04-11 13:35:22 +00:00
JMenuItem viewLog = new JMenuItem ( " View log " ) ;
2009-04-10 18:56:56 +00:00
viewLog . addActionListener ( new ActionListener ( ) {
@Override
public void actionPerformed ( ActionEvent arg0 ) {
new LogViewer ( ) ;
}
2009-04-13 15:02:46 +00:00
} ) ;
JMenuItem version = new JMenuItem ( " Version " ) ;
version . addActionListener ( new ActionListener ( ) {
@Override
public void actionPerformed ( ActionEvent arg0 ) {
new Version ( ) ;
}
2009-04-06 17:53:32 +00:00
} ) ;
2009-04-11 13:35:22 +00:00
JMenuItem shutdown = new JMenuItem ( " Shutdown I2P " ) ;
2009-04-06 17:53:32 +00:00
shutdown . addActionListener ( new ActionListener ( ) {
2009-04-11 13:35:22 +00:00
@Override
2009-04-06 17:53:32 +00:00
public void actionPerformed ( ActionEvent arg0 ) {
RouterHandler . setStatus ( RouterHandler . SHUTDOWN_GRACEFULLY ) ;
2009-04-10 18:56:56 +00:00
long shutdownTime = RouterHelper . getGracefulShutdownTimeRemaining ( ) ;
System . out . println ( shutdownTime ) ;
2009-04-11 13:35:22 +00:00
if ( shutdownTime > 0 ) {
trayIcon . displayMessage ( " Shutting down... " , " Shutdown time remaining: " + shutdownTime / 1000 + " seconds. "
+ System . getProperty ( " line.separator " ) + " Shutdown will not happen immediately, because we are still participating in the network. " , TrayIcon . MessageType . INFO ) ;
}
else {
2009-04-10 18:56:56 +00:00
trayIcon . displayMessage ( " Shutting down... " , " Shutting down immediately. " , TrayIcon . MessageType . INFO ) ;
2009-04-11 13:35:22 +00:00
}
2009-04-06 17:53:32 +00:00
}
} ) ;
//Add menu items to popup menu
popup . add ( browserLauncher ) ;
popup . add ( howto ) ;
2009-04-13 15:02:46 +00:00
popup . addSeparator ( ) ;
2009-04-06 17:53:32 +00:00
config . add ( speedConfig ) ;
2009-04-13 15:02:46 +00:00
//config.add(generalConfig);
2009-04-06 17:53:32 +00:00
config . add ( advancedConfig ) ;
popup . add ( config ) ;
2009-04-13 15:02:46 +00:00
popup . addSeparator ( ) ;
2009-04-10 18:56:56 +00:00
popup . add ( viewLog ) ;
2009-04-13 15:02:46 +00:00
popup . add ( version ) ;
popup . addSeparator ( ) ;
2009-04-10 18:56:56 +00:00
2009-04-06 17:53:32 +00:00
popup . add ( shutdown ) ;
//Add tray icon
2009-04-11 13:35:22 +00:00
trayIcon = new JPopupTrayIcon ( image , " I2P: the anonymous network " , popup ) ;
2009-04-13 17:27:35 +00:00
try {
tray . add ( trayIcon ) ;
} catch ( AWTException ex ) {
Logger . getLogger ( Main . class . getName ( ) ) . log ( Level . SEVERE , null , ex ) ;
}
2009-04-11 13:35:22 +00:00
PeerHelper . addReachabilityListener ( new ActionListener ( ) {
@Override
public void actionPerformed ( ActionEvent arg0 ) {
2009-04-13 17:27:35 +00:00
updateTooltip ( ) ;
2009-04-11 13:35:22 +00:00
}
} ) ;
PeerHelper . addActivePeerListener ( new ActionListener ( ) {
@Override
public void actionPerformed ( ActionEvent arg0 ) {
2009-04-13 17:27:35 +00:00
updateTooltip ( ) ;
2009-04-11 13:35:22 +00:00
int activePeers = PeerHelper . getActivePeers ( ) ;
if ( activePeers = = 0 )
trayIcon . setImage ( Toolkit . getDefaultToolkit ( ) . getImage ( " desktopgui/resources/logo/logo_red.jpg " ) ) ;
else if ( activePeers < 10 )
trayIcon . setImage ( Toolkit . getDefaultToolkit ( ) . getImage ( " desktopgui/resources/logo/logo_orange.jpg " ) ) ;
else
trayIcon . setImage ( Toolkit . getDefaultToolkit ( ) . getImage ( " desktopgui/resources/logo/logo_green.jpg " ) ) ;
}
} ) ;
2009-04-13 17:27:35 +00:00
}
public void updateTooltip ( ) {
trayIcon . setToolTip ( " I2P Network status: " + PeerHelper . getReachability ( ) + " / " + " Active Peers: " + PeerHelper . getActivePeers ( ) ) ;
2009-04-06 17:53:32 +00:00
}
private SystemTray tray = null ;
2009-04-11 13:35:22 +00:00
private JPopupTrayIcon trayIcon = null ;
2009-04-06 17:53:32 +00:00
}