From 63504b5b5450f1ebc504551fbd8c89db36ecd4aa Mon Sep 17 00:00:00 2001 From: bkuker Date: Sun, 24 Jun 2012 19:22:07 +0000 Subject: [PATCH] Include OSX UI elements. "OrangeExtensions" jar provides stubs for compilation and linking on other OSs. git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@803 180e2498-e6e9-4542-8430-84ac67f01cd8 --- core/.classpath | 1 + core/ChangeLog | 6 + core/build.xml | 2 +- core/lib/OrangeExtensions-1.2.jar | Bin 0 -> 32624 bytes .../net/sf/openrocket/startup/OSXStartup.java | 115 ++++++++++++++++++ .../net/sf/openrocket/startup/Startup2.java | 7 ++ 6 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 core/lib/OrangeExtensions-1.2.jar create mode 100644 core/src/net/sf/openrocket/startup/OSXStartup.java diff --git a/core/.classpath b/core/.classpath index ac3ceedf..8689c002 100644 --- a/core/.classpath +++ b/core/.classpath @@ -30,5 +30,6 @@ + diff --git a/core/ChangeLog b/core/ChangeLog index 5f605187..10d880de 100644 --- a/core/ChangeLog +++ b/core/ChangeLog @@ -1,3 +1,9 @@ +2012-06-24 Bill Kuker + + * OSX UI Elements: Screen menu bar, Application name, Dock Icon, Quit, About & Preference + handlers. Stubs for the "Apple Java Extensions" to allow other platforms to compile provided + by https://github.com/ymasory/OrangeExtensions. + 2012-06-05 Doug Pedrick * Most recently used design files added to File menu. diff --git a/core/build.xml b/core/build.xml index 3b9a2377..b4ee250f 100644 --- a/core/build.xml +++ b/core/build.xml @@ -76,7 +76,7 @@ - + diff --git a/core/lib/OrangeExtensions-1.2.jar b/core/lib/OrangeExtensions-1.2.jar new file mode 100644 index 0000000000000000000000000000000000000000..637d3969e9553e89c17ec5dcfa52430468417fb0 GIT binary patch literal 32624 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

Nxe>EnCsUR`J$j6|)YZ?hm?>AM6}e;liqRth zRY`Q-=y;I7D3?X|g@aGzJTM^;?n8OKiE{J!u|FKLLx7`$H<)+iuRAzWUoV&xHJZj&NT*ga@oRIl#KPf5kNqhBv-WBc^Gj$<@(w+GtI-p55?S+=Z7Ew3*b zos>d)IzAGm_=zV3w`bCS@IYy%h@LXubwAB-L>eW1Jz;_*f9=$t77Ftw(y1VAVOd0swEntfjxj`FB)ngVybFFXM_e;XjTCYInZ^E<8SmmB?>$pT#sZEA*?DF+pYZpK_W>&#Zo zkc5Dyb~VdYYaq`%vn2vj&*uc)IB0TYym}?+RDC@vp~sW({TT{7nA9>d_^!&*t>)hz zX-1fkA5)&93elu%**rX7*s9WSW%|Zt#ZIHJqGl%eB@6nYZPn2>CxN|qBMN*2(I$ac zaIS_72Aw2tinEE(I?_!rqbtaIx&RPwKu7?&6*IwL{zF&-qcI<9MG0gC21oV@MLlF!vM|Em&Ugm2I1(8|ZW|vMI*mQ$x%1t_@FQ?2QoPvQ8=Ol|pAKIW@=Wg-`t2HBKBqT_HGRaj1EZ#X&np3*bXV;!vIfEnkBUvINb`SWAS6;D z>>zG&ST!dQ@YSeb)RTQ4iLRioEvCTvkk;_d%s|{#Gem6@&Pf7gzcU>4B;1Lh9U+B% zkH6^*e>XVXmz&QKB}`>p?qgpeF@4=&(xWdJ=|k8n8BJ?#YS>Cd}~w7lqd9}bI?IS zI5ic5c-x6@I&`aAL5%jWJp?JY-(Z4ePjaI&-(q^|!>g6e{vo^CH7y^QQ11i!iSB!6 zg+e`8H}P$L92W<_X2!VNe0TAI!1!WgJHaK0@ZMzaKSQ5-Q zAbxtI*IP!-n%;r5Cow_zP1xu{rche!={_M+@c~1KM(-H9JhcyGgLVuIyRap(nNR|y zS#y%ZY&E1u;({R6bJS@~Y$)GXpV0?ZklbY6!_i1^2{xYz>Ejf6bNYn0JNOdPIm*d%G)4}pw1sMMj4@S+HZJ)OV~sydu{Q1Qgx7=I8U8p+ z_&oMAtexklruJ`|A>Tv8%_as{gCrLp1lDe$O$}JTeXZa=cFd%7kj>u1#5(A|?`ri` zGe6gV)of|#dOHL6LwdG$-8Ra27c(2N1+~zvg5B@{tEvD{-Xb7(WU^n&xj&TmSIN#9 z_iOa)n`BD-|9WEghNA%*q@rRh#{w z7=(VWj#N`d2U6$xsP_V|wNhYtg_E)m!OWes|KYr)E4kmt49%dY8Bk>~<}{KYcuIu! z8@5fb2QtUUALze0MB_RkdO3qfT~pslsTs+6e*-yLf`B=?IGRh2GU%|SH(7qorzAO} z=T`jU5ANNK01#FKa>uOi2Fe>%xJE3v1H%?O4L}?xQWb`R!^Q3C3g_vd=A@Y@QTd^l zfbRL6h>u05Hg~7!s?4+NRqRxX4d2&cLU_sdk)c!#^ZOGb29Eh2PiT3<#_%$w@)!_7 zh}+|&J|@jhw)(2Yl6LtuPqRk1E2!#IrXOuBV-&D{bh9Ix*U9A_58hLGff`_W7UB2# zR!c$6Id0|-K#2$BA2-B*80|M=4%q1hN5EwiHq69TuE|$y9h~W|K1n;+ZxA2NCVKI@ z*Iy!jT3nQH8{+Q9M!6@5vEp&8D_ihfXykCrjy|!E7eqL7&IND6_sx}1R-HU;f>285 z!i`x5RaqgmgWkN_AZh& zeI?Dc_{_k3%$4z8O{g=Qx=d{F{ZfJ6Tge@zlGV2pz- zuQ#;X3Yn5BVUL$3&>14Q-xIS?nPxs!5M^7$NxSlVOg_EKfe&r*n z^^+$$ibFGNmwM<=JR`A}q25K|Xf57bDuq#5iJCNu+T$30k)&9x^hsoCJnmlEP~tG3 z!9|Yy#plo}rxLM@PRhRSN2^GlWgF}pYBGxf9)u&eZX<7t2^9F3n2iI%0LZN>=a&QA z!NmcqLL=taNW?R@i`-2b36sUm7=o3R6x9e*O#++SMqgO;HNQ12bii3!PWvMg-@>R# zE>AJiX}gRZo3qXWO5q&yKzs)!Lx$A?7J31Asi7tjOzwo^c!nvqCldxXj*~OklW2u5LEU+$FwH1WNb4HQqTc+Gy+la zaOK;zDcL-dMhq86xJku4i^0474nw3sfnju(?opLC^Q`d^Or^<0wyMN7g2AtHxMi7Q z+v5$|*e^e%rAWe;x22fKP@cVZ8_LmJ)03TDiR0hVyZQzXQF5*wPJ;UE)w0lcEc<@6 z#OJUAE4Su%K{1*wc>uaOK<=mqe_8NPii!l7U;A@r&H1yS__=uFwL!DTnHFPyfGvXF zN#3oTgYiQ53oGbY12h?J%{-pg5t@s*Xh? zr(HBAQR3Xhs0SL>s7U%HLjUUJ?;{M~Q?h8hMlnAKYm)1vm?@O;e|&9DjQyRg*e!zY ztLfaiCPo7O%THCGiF9|^t}YaMB;EuG`Sg2lny@L_J<*G?79;*~YtJxV0gvGfKnexq zj^V*C+xrXBAmzcUAi%Eql&uh?c~x66Z1{ z=7~3)5P@6;Pi^D3tM2pxJ)xWR>ozV@Ie6B=d3XK#+mUaW;pdYiaD6V&8@oWNAwtx` zL&KEK;2)TAQJK$)qOgGYsr6YD8A#NT_w1~FwIU&vMx?gc#n>JNmDMZmK_7KYuZnmK z*@F3k^n^?2Y>FPGfR$WVX`-Ew8O}(?{I0&O%z{^a7)XW7Dq5W%EhNneNspJW>wDGZ z0lz8sy1{9z=31Zf&a=)DLvGYnHK0E4msdHnUYAKvkF;?Jcn$A+%QP~+aRmrK75fzg zJih|){uUT-v2Vae8T~(voq0T!*&oLVBTHOm_e-UO$TGqRZT2l9bQ8)lax0o>v$t5% zPL^zyRF)PgEt9o|31i99WEqpn(v%w6W%PS)y3X~z=RPyn_VUMhKi}th&OPUQpY!>C z&c-%hX$?xqk0tK1eCv+tXR2k{ZC9FW$L|m>tUk=4>U!EM$o#V67uTR|O6S@#C`zF( zst@S*{PtVFWQD}e$WoK>xnwsy+qp0uZdqcsWF7iB+-=XZ`e5%S5U>h5TN)aCxz z!E`6Tyn@7}of%7bZzlOuxF$STzH~ldz0BOJ=$-yRr&fHj((VDtT^jYfJXEBV&;NQV zKwy-==6U7fClWmxeYRDZt3Li?mYSVk8!}kuDdF|UuR?vNK2`+fayQEy2(g?ydxuU_ zy>qs=Mn-S!+%kKbaN~skp!?t7O|&-*ysEloEmfAh`vO7M$r8wv|cnQ+kB^W9z7(T6)5 z&JGvp*E$ZaQBmGb7Cp0=ki$O;6WcZky3yP`R(zDzyF-^idZ zS8rm!gTF2IgZ_k7oVHNmn1%SVe3|+A)@%Z>6tT$i4o} z=|J+PagQ_6|GQ+IVvBZXeV!`x3Xc0=puQ(IUH5Z zB_Fw#lv{YOG-#HvFa1z_%ecrXq4-{;tFvX=*&A^NMX6bdX|lpJ+eQfsp{TW!9kR~D ziE(ibf%(G4UA2jV4V9fn^M&He3y!7}uM+c?+l}3z_J(=t|o-3hA{<8LV6Lc^2;IXXMjw9;8XtRYv%sUZ z*3|gjbDDol?6!-${VL6rYc>q`=6DL*pA0-de-rPB{`aC(1DU5o3TiZ3&9Qy0C$z7= zEY|KUNp}fIXf6oln9zw8YB*6fmb!L4YwI%|Qw>ka!Q9`EuL{QIxKOrtM8G7-f zIkn-Da?1LVtie-~Z#U-+E^dK z^W{kiCpk(>-NKPCyD#0Ts?K!XKM<``@A`UN#C&_ZjC6ng2^#O`?!f3O;o|t8#GK5; z#vg0?m>ztzeCtkM+kf^(cb?$x?(u2eRGL2FQTlu^)Vizb^~P}?&XXc~mfm5hMHU>E zDt{h4a%8dN$M)Pm4^>;ZbX@wYK4;>pREc%t!CTkoNM{6=^BnthJ9ParlhKZiUGwTT znH*oVUCYOw^S~-ym4e>#?8@;Y|H-@T5_-abL_aH(!F0+`7K+@9WT~D zw6sSu@~wkiQ|hs#182LfD~@|vNv<)b+SmSGXhLb&xPH%& zHs#=(y`8sZITPxaX4BHO586Gunyr0hD>rpRg>kY%a7{k%MXs|i<|)(W<}Rr#5!hK) zDo=g$UO(?e#(j66K59wG74_LGJ|+DUd8IupuTC&EjwTb-l4qK?T3WO-Hs3Q%<$Uyq zNkiT1HYqVT478q#)vRkO^re|p=l^#2!eIv+eXm#c=Mv?T8fJ@gU0Od&-K12czcNfs zy6lKfVHVXvDoY&;NLHqQFTSuag3b>Wl<<;@2rz~vo7Iy5hQO$VgUa?61 z)#-DdHtmhYqKn}!MVS-rT?NIoSxazr(d!b#7TU6(OZmvYq9Oy-Uf_V zIav085Mwm^dL%g_sX-GxlVFkT(DZ?Q>P0`a!wke%wH{gHna4lO+IT9VB16!3LqNwb zn2GqhHv;4I@w+21T4x^WoY9u)^x5o{fTF@%=OeN#aYwNimO-8>fPp~h0*`>1Jj_5= zQRLUX93T!_t|MIJcdWQ+|8Bb1{L}|0EEW2lBdQxQZKAWD3UZpttZ5^mLzi(xHzhJt z5;}|LIJ_Fr-y4w?_(;hNEf-1D&{rF=1&DVlyQrb3E{qtORU@jP0DJ265-dr)(BB!6 zH3iAZGu@tH#LzdHiAzY!*j)#vHA|A1p}m@8fSDGPNZ8PS7O`)MuxB$Z#3Ws92rjE)`IpwTBnt|8_v)^5Pg_7nC5=#z=KRB;>^C}Od(LhDJy+$@1(G6pg7 zD*%lh5!Fr-M`b9g@V5w>%^{i~p_6C5o(vj8c!xc4=%I$7G4siw)9N-X^)WChL)0+h zX$bpJN%}hU;X+8lnv4WVeutnb6{7yIh=mG-PS`Vt{z(YfA;$uoo?B+vwZQ%kt%?w` zVlfs;Oe&;6=nI5^ImBZ`aCewy6H+L&-$BqMLXg4&WlSTaOlWk2n1_iKPQYZ=hhT3F z^pHWcy~LAm3~gGVfyF_;7KGcR$bw^OdBA$l> zD%0FUPK9n9h#E|MYy(s;w%#1Dze7U_gryMm-eg#k;R8B0ASgGna!CdyzXs4*0depC z3zum*7u&y})d3=hsF6oJbEy>zhc*KU?y61>N9&nbFs#l;;BXB#;2G;@B)2dHl)@vl z@Av-&O@1R`IXa@7X|ka+R*Xnuh85t5s=VS~sN~_oQfvhN%nr=75`?{Vus9ka3$@t9 ziYb+b?`BwsjHuVNXHdbq2uq0chsv-#6v13{nPHfR4_}upnS-PAV4)=9U0%t|V|_wE zU$%iXShA1nce)>AgN%(sYNx#RhBS5HZ#ON5mxKI4rD3L)eg2I4sD; zaY$GVhLCovaY&X_90!FZSqLh(1_x#2&e&c9YhDmc$dC-iNW^gg!nzW~oFrvV=ixXg ztl>b=9wV|qrv@|}5tcw8;qVS#$# zQg0j;N=Okk$(EeTe#C%+O~ee{K+Yr`GoWx1VXf`Ru}pb4?ixT%BLWN9{|7K>&`>vs z*jyXQ*(mGA#SCS5h%4y8hKotMabzffL*)1WiA;Jqp!N*GYaQ8yJu~ITMGUoG2ztlq zU!bJHLa`O%#%yB4WlFelkwPsLA{tQ1h@@dc;Sqw$Z=L}K={7Dvs6Rn0+7=cy3Y + * + */ +final class OSXStartup { + private static final LogHelper log = Application.getLogger(); + + // The name in the app menu + private static final String APP_NAME = "OpenRocket"; + + // The image resource to use for the Dock Icon + private static final String ICON_RSRC = "/pix/icon/icon-256.png"; + + /** + * The handler for the Quit item in the OSX app menu + */ + private static final QuitHandler qh = new QuitHandler() { + @Override + public void handleQuitRequestWith(final QuitEvent e, final QuitResponse r) { + BasicFrame.quitAction(); + // if we get here the user canceled + r.cancelQuit(); + } + }; + + /** + * The handler for the About item in the OSX app menu + */ + private static final AboutHandler ah = new AboutHandler() { + @Override + public void handleAbout(final AboutEvent a) { + new AboutDialog(null).setVisible(true); + } + }; + + /** + * The handler for the Preferences item in the OSX app menu + */ + private static final PreferencesHandler ph = new PreferencesHandler() { + @Override + public void handlePreferences(final PreferencesEvent p) { + PreferencesDialog.showPreferences(null); + } + }; + + /** + * Sets up the Application's Icon, Name, Menu and some menu item handlers + * for Apple OSX. This method needs to be called before other AWT or Swing + * things happen, or parts will fail to work. + * + * This function should fail gracefully if the OS is wrong. + */ + static void setupOSX() { + if (SystemInfo.getPlatform() != Platform.MAC_OS) { + log.warn("Attempting to set up OSX UI on non-MAC_OS"); + } + log.debug("Setting up OSX UI Elements"); + try { + // Put the menu bar at the top of the screen + System.setProperty("apple.laf.useScreenMenuBar", "true"); + // Set the name in the menu + System.setProperty("com.apple.mrj.application.apple.menu.about.name", APP_NAME); + + // This line must come AFTER the above properties are set, otherwise + // the name will not appear + final com.apple.eawt.Application osxApp = com.apple.eawt.Application.getApplication(); + + if (osxApp == null) { + // Application is null: Something is wrong, give up on OSX + // setup. + throw new NullPointerException("com.apple.eawt.Application.getApplication() returned NULL. " + + "Aborting OSX UI Setup."); + } + + // Set handlers + osxApp.setQuitHandler(qh); + osxApp.setAboutHandler(ah); + osxApp.setPreferencesHandler(ph); + + // Set the dock icon to the largest icon + final Image dockIcon = Toolkit.getDefaultToolkit().getImage( + Startup2.class.getResource(ICON_RSRC)); + osxApp.setDockIconImage(dockIcon); + + } catch (final Throwable t) { + // None of the preceding is critical to the app, + // so at worst case log an error and continue + log.warn("Error setting up OSX UI:", t); + } + } + +} diff --git a/core/src/net/sf/openrocket/startup/Startup2.java b/core/src/net/sf/openrocket/startup/Startup2.java index 3ab137a9..85500a36 100644 --- a/core/src/net/sf/openrocket/startup/Startup2.java +++ b/core/src/net/sf/openrocket/startup/Startup2.java @@ -9,6 +9,8 @@ import javax.swing.SwingUtilities; import javax.swing.Timer; import javax.swing.ToolTipManager; +import net.sf.openrocket.arch.SystemInfo; +import net.sf.openrocket.arch.SystemInfo.Platform; import net.sf.openrocket.communication.UpdateInfo; import net.sf.openrocket.communication.UpdateInfoRetriever; import net.sf.openrocket.database.ComponentPresetDatabase; @@ -52,6 +54,11 @@ public class Startup2 { VersionHelper.checkVersion(); VersionHelper.checkOpenJDK(); + // If running on a MAC set up OSX UI Elements. + if ( SystemInfo.getPlatform() == Platform.MAC_OS ){ + OSXStartup.setupOSX(); + } + // Run the actual startup method in the EDT since it can use progress dialogs etc. log.info("Moving startup to EDT"); SwingUtilities.invokeAndWait(new Runnable() { -- 2.47.2