帆软报表设计器源代码。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

191 lines
5.8 KiB

package com.fr.start.server;
import com.fr.base.BaseUtils;
import com.fr.design.ui.util.UIUtil;
import com.fr.event.Event;
import com.fr.event.EventDispatcher;
import com.fr.event.ListenerAdaptor;
import com.fr.log.FineLoggerFactory;
import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
/**
* Create server tray.
*/
public class ServerTray {
private static ServerTray INSTANCE;
private MenuItem startMenu;
private MenuItem stopMenu;
private Image trayStartedImage = BaseUtils.readImage("/com/fr/base/images/oem/trayStarted@2x.png");
private Image trayStoppedImage = BaseUtils.readImage("/com/fr/base/images/oem/trayStopped@2x.png");
private ServerManageFrame serverManageFrame;
private TrayIcon trayIcon;
private ServerTray() {
listen();
//p:首先构建右键菜单
PopupMenu popup = new PopupMenu();
MenuItem manangeMenu = new MenuItem(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Server_Open_Service_Manager"));
manangeMenu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
serverManageFrame = ServerManageFrame.getServerManageFrame();
if (!serverManageFrame.isVisible()) {
serverManageFrame.setVisible(true);
}
serverManageFrame.toFront();//p:到第一个.
}
});
startMenu = new MenuItem(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Server_Embedded_Server_Start"));
stopMenu = new MenuItem(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Server_Embedded_Server_Stop"));
MenuItem exitMenu = new MenuItem(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_M_Exit"));
//创建打开监听器
ActionListener startListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
FineEmbedServer.start();
} catch (Exception exp) {
FineLoggerFactory.getLogger().error(exp.getMessage(), exp);
}
}
};
ActionListener stopListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
FineEmbedServer.stop();
} catch (Throwable exp) {
FineLoggerFactory.getLogger().error(exp.getMessage(), exp);
}
}
};
startMenu.addActionListener(startListener);
stopMenu.addActionListener(stopListener);
//创建退出菜单监听器
ActionListener exitListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
exit();
}
};
exitMenu.addActionListener(exitListener);
popup.add(manangeMenu);
popup.addSeparator();
popup.add(startMenu);
popup.add(stopMenu);
popup.addSeparator();
popup.add(exitMenu);
//p:开始创建托盘.
trayIcon = new TrayIcon(trayStartedImage, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Server_Embedded_Server"), popup);
trayIcon.setImageAutoSize(true);
trayIcon.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() < 2) {
return;
}
ServerManageFrame serverManageFrame = ServerManageFrame.getServerManageFrame();
if (!serverManageFrame.isVisible()) {
serverManageFrame.setVisible(true);
}
serverManageFrame.toFront();//p:到第一个.
}
});
TrayIcon[] icons = SystemTray.getSystemTray().getTrayIcons();
for (TrayIcon icon : icons) {
SystemTray.getSystemTray().remove(icon);
}
try {
SystemTray.getSystemTray().add(trayIcon);
} catch (AWTException e) {
System.err.println("Can not create the System Tray:" + e);
}
checkPopupMenuItemEnabled();
}
private void listen() {
ListenerAdaptor listenerAdaptor = new ListenerAdaptor() {
@Override
protected void on(Event event) {
checkPopupMenuItemEnabled();
}
};
EventDispatcher.listen(EmbedServerEvent.AfterStart, listenerAdaptor);
EventDispatcher.listen(EmbedServerEvent.AfterStop, listenerAdaptor);
}
private void exit() {
FineEmbedServer.stop();
SystemTray.getSystemTray().remove(trayIcon);
}
private void checkPopupMenuItemEnabled() {
try {
if (FineEmbedServer.isRunning()) {
startMenu.setEnabled(false);
stopMenu.setEnabled(true);
trayIcon.setImage(trayStartedImage);
} else {
startMenu.setEnabled(true);
stopMenu.setEnabled(false);
trayIcon.setImage(trayStoppedImage);
}
if (serverManageFrame != null) {
serverManageFrame.checkButtonEnabled();
serverManageFrame.repaint();
}
} catch (Exception exp) {
FineLoggerFactory.getLogger().error(exp.getMessage(), exp);
}
}
public static void init() {
UIUtil.invokeLaterIfNeeded(new Runnable() {
@Override
public void run() {
if (INSTANCE == null) {
INSTANCE = new ServerTray();
}
}
});
}
}