OSDN Git Service

OSXの場合、DockIconを先に設定するように修正
[charactermanaj/CharacterManaJ.git] / src / main / java / charactermanaj / ui / MainFramePartialForMacOSX.java
1 package charactermanaj.ui;
2
3 import java.awt.Image;
4 import java.awt.image.BufferedImage;
5 import java.lang.reflect.Method;
6 import java.util.logging.Level;
7 import java.util.logging.Logger;
8
9 import com.apple.eawt.Application;
10 import com.apple.eawt.ApplicationAdapter;
11 import com.apple.eawt.ApplicationEvent;
12
13 import charactermanaj.util.SystemUtil;
14 import charactermanaj.util.UIHelper;
15
16 /**
17  * Mac OS X用のメインフレームサポートクラス.<br>
18  * スクリーンメニューのハンドラなどを接続している.<br>
19  * @author seraphy
20  *
21  */
22 public class MainFramePartialForMacOSX {
23
24         /**
25          * ロガー
26          */
27         private static final Logger logger = Logger.getLogger(MainFramePartialForMacOSX.class.getName());
28
29         private MainFramePartialForMacOSX() {
30                 super();
31         }
32
33         public static void setupScreenMenu(final MainFrame mainFrame) {
34                 if (mainFrame == null) {
35                         throw new IllegalArgumentException();
36                 }
37
38                 Application app = Application.getApplication();
39
40                 app.setEnabledAboutMenu(true);
41                 app.setEnabledPreferencesMenu(true);
42
43                 ApplicationAdapter listener = new ApplicationAdapter() {
44                         public void handleAbout(ApplicationEvent arg0) {
45                                 if (MainFrame.getActivedMainFrame() != null) {
46                                         MainFrame.getActivedMainFrame().onAbout();
47                                 }
48                                 arg0.setHandled(true);
49                         }
50                         public void handleQuit(ApplicationEvent arg0) {
51                                 if (MainFrame.getActivedMainFrame() != null) {
52                                         MainFrame.closeAllProfiles();
53                                 }
54                                 arg0.setHandled(true);
55                                 // JVMを明示的にシャットダウンする. (何もしないと強制終了になるため。)
56                                 SystemUtil.exit(0);
57                         }
58                         public void handlePreferences(ApplicationEvent arg0) {
59                                 if (MainFrame.getActivedMainFrame() != null) {
60                                         MainFrame.getActivedMainFrame().onPreferences();
61                                 }
62                                 arg0.setHandled(true);
63                         }
64                 };
65                 app.addApplicationListener(listener);
66         }
67
68         public static void setupDockIcon() {
69                 try {
70                         Application app = Application.getApplication();
71                         Class<?> clz = app.getClass();
72
73                         BufferedImage icon = UIHelper.getInstance().getImage("icons/icon.png");
74
75                         Method mtd = clz.getMethod("setDockIconImage", new Class[] {Image.class});
76                         mtd.invoke(app, new Object[] { icon });
77
78                 } catch (NoSuchMethodException ex) {
79                         // メソッドがない = Tiger以前の失敗であろうから、単に無視するだけで良い.
80                         logger.log(Level.CONFIG, "dockIcon not supported.", ex);
81
82                 } catch (Exception ex) {
83                         // 実行時の失敗だが、DockIconが設定できないだけなので継続する.
84                         logger.log(Level.WARNING, "dockIcon failed.", ex);
85                 }
86         }
87 }