• R/O
  • HTTP
  • SSH
  • HTTPS

コミット

よく使われているワード(クリックで追加)

javac++androidlinuxc#objective-cqtwindows誰得cocoapythonphprubygameguibathyscaphec翻訳omegat計画中(planning stage)frameworktwittertestdomvb.netdirectxbtronarduinopreviewerゲームエンジン

KiSSセルデータと透過PNGファイルへの相互変換


コミットメタ情報

リビジョンacb175ff2de95f8d4817e2e393a31428761726be (tree)
日時2011-09-17 00:00:08
作者seraphy <seraphy@user...>
コミッターseraphy

ログメッセージ

MacOSXスクリーンメニュー対応

変更サマリ

差分

--- a/KiSSCellToPNG/.classpath
+++ b/KiSSCellToPNG/.classpath
@@ -9,5 +9,6 @@
99 <classpathentry kind="lib" path="lib/archivedfile-if.jar" sourcepath="/jlha/src2"/>
1010 <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
1111 <classpathentry kind="lib" path="lib/jh.jar"/>
12+ <classpathentry kind="lib" path="extlib/AppleJavaExtensions.jar"/>
1213 <classpathentry kind="output" path="bin"/>
1314 </classpath>
--- a/KiSSCellToPNG/src/kisscelltopng/Main.java
+++ b/KiSSCellToPNG/src/kisscelltopng/Main.java
@@ -1,5 +1,7 @@
11 package kisscelltopng;
22
3+import java.lang.reflect.Method;
4+
35 import javax.swing.SwingUtilities;
46 import javax.swing.UIManager;
57
@@ -11,12 +13,24 @@ import kisscelltopng.ui.MainFrame;
1113 */
1214 public class Main implements Runnable {
1315
16+ private boolean isMacOSX;
17+
1418 /**
1519 * UIをセットアップする.<br>
1620 * 失敗しても継続する.<br>
1721 */
1822 protected void setupLookAndFeel() {
1923 try {
24+ // Macの判定
25+ String lcOS = System.getProperty("os.name").toLowerCase();
26+ this.isMacOSX = lcOS.startsWith("mac os x");
27+ if (isMacOSX) {
28+ System.setProperty("apple.laf.useScreenMenuBar", "true");
29+ System.setProperty(
30+ "com.apple.mrj.application.apple.menu.about.name",
31+ "KiSSCellToPNG"); // Lionでは効かない.
32+ }
33+
2034 // 実行プラットフォームのネイティブな外観にする.
2135 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
2236
@@ -33,6 +47,19 @@ public class Main implements Runnable {
3347 setupLookAndFeel();
3448
3549 MainFrame mainFrame = new MainFrame();
50+
51+ if (isMacOSX) {
52+ try {
53+ Class<?> clz = Class.forName("kisscelltopng.SetupMacScreenMenu");
54+ Method method = clz.getMethod("connect", MainFrame.class);
55+ method.invoke(null, mainFrame);
56+
57+ } catch (Exception ex) {
58+ ex.printStackTrace();
59+ // 致命的とはいえないので、継続する.
60+ }
61+ }
62+
3663 mainFrame.setVisible(true);
3764 }
3865
--- /dev/null
+++ b/KiSSCellToPNG/src/kisscelltopng/SetupMacScreenMenu.java
@@ -0,0 +1,61 @@
1+package kisscelltopng;
2+
3+import kisscelltopng.ui.MainFrame;
4+
5+import com.apple.eawt.Application;
6+import com.apple.eawt.ApplicationAdapter;
7+import com.apple.eawt.ApplicationEvent;
8+
9+/**
10+ * Mac OS X用のメインフレームサポートクラス.<br>
11+ * スクリーンメニューのハンドラなどを接続している.<br>
12+ * @author seraphy
13+ */
14+public class SetupMacScreenMenu {
15+
16+ public static void connect(final MainFrame mainFrame) {
17+ if (mainFrame == null) {
18+ throw new IllegalArgumentException();
19+ }
20+
21+ Application app = Application.getApplication();
22+
23+ app.setEnabledAboutMenu(true);
24+ app.setEnabledPreferencesMenu(false);
25+
26+ ApplicationAdapter listener = new ApplicationAdapter() {
27+ public void handleAbout(ApplicationEvent arg0) {
28+ mainFrame.onAbout();
29+ arg0.setHandled(true);
30+ }
31+
32+ public void handleQuit(ApplicationEvent arg0) {
33+ mainFrame.onClose();
34+ arg0.setHandled(true);
35+ // JVMを明示的にシャットダウンする. (何もしないと強制終了になるため。)
36+ System.exit(0);
37+ }
38+
39+ public void handlePreferences(ApplicationEvent arg0) {
40+ arg0.setHandled(true);
41+ }
42+ };
43+ app.addApplicationListener(listener);
44+
45+// try {
46+// Class<?> clz = app.getClass();
47+// Method mtd = clz.getMethod("setDockIconImage",
48+// new Class[] { Image.class });
49+// mtd.invoke(app, new Object[] { mainFrame.icon });
50+//
51+// } catch (NoSuchMethodException ex) {
52+// // メソッドがない = Tiger以前の失敗であろうから、単に無視するだけで良い.
53+// logger.log(Level.CONFIG, "dockIcon not supported.", ex);
54+//
55+// } catch (Exception ex) {
56+// // 実行時の失敗だが、DockIconが設定できないだけなので継続する.
57+// logger.log(Level.WARNING, "dockIcon failed.", ex);
58+// }
59+ }
60+
61+}
--- a/KiSSCellToPNG/src/kisscelltopng/ui/MainFrame.java
+++ b/KiSSCellToPNG/src/kisscelltopng/ui/MainFrame.java
@@ -184,7 +184,7 @@ public class MainFrame extends JFrame {
184184 mnuAbout.setMnemonic(res.getString("menu.help.aboutThis.mnemonic").charAt(0));
185185 mnuAbout.addActionListener(new ActionListener() {
186186 public void actionPerformed(ActionEvent e) {
187- onAboutThis();
187+ onAbout();
188188 }
189189 });
190190 mnuHelp.add(mnuAbout);
@@ -235,7 +235,7 @@ public class MainFrame extends JFrame {
235235 updateSaveButton();
236236 }
237237
238- protected void onClose() {
238+ public void onClose() {
239239 try {
240240 if (dataConverter != null) {
241241 dataConverter.release(null);
@@ -254,7 +254,7 @@ public class MainFrame extends JFrame {
254254 System.out.println("help");
255255 }
256256
257- protected void onAboutThis() {
257+ public void onAbout() {
258258 // TODO:
259259 System.out.println("about");
260260 }
@@ -505,4 +505,3 @@ public class MainFrame extends JFrame {
505505 }
506506 }
507507 }
508-