JavaScriptã䜿çšããèªååã«é¢ããã»ãã·ã§ã³ãWWDC 2014ã§éå¬ãããŸããã AppleScriptã®ä»£ããã«JavaScriptã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãèªååã§ããããšãããããŸããã ããèªäœãåºæ¿çãªãã¥ãŒã¹ã§ãã AppleScriptã䜿çšããŠç¹°ãè¿ãæäœãèªååããæ©èœã¯ãããªãåããååšããŠããŸããã AppleScriptã§æžãã®ã¯æ¥œããçµéšã§ã¯ãªãã®ã§ã代ããã«äœ¿ãæ £ããæ§æã䜿çšããããšã¯éåžžã«è¯ãã§ãããã
ãã®ã»ãã·ã§ã³äžã«ãã¹ããŒã«ãŒã¯Objective-Cãšããªããžã«ã€ããŠè©±ããŸããã ããããã楜ãã¿ã§ãã ããªããžã䜿çšãããšãObjective-Cãã¬ãŒã ã¯ãŒã¯ãJSã¢ããªã±ãŒã·ã§ã³ã«ã€ã³ããŒãã§ããŸãã ããšãã°ãæšæºã®OS Xã³ã³ãããŒã«ã䜿çšããŠGUIãäœæããå Žåã¯ãCocoaãã€ã³ããŒãããå¿ èŠããããŸãã
ObjC.import("Cocoa");
Freymork Foundationã¯ããã®ååã瀺ããšããã®ãã®ã§ãã OS Xã¢ããªã±ãŒã·ã§ã³ã®ãããã¯ãçµã¿ç«ãŠãããšãã§ããã¯ã©ã¹ãšãããã³ã«ã®èšå€§ãªã»ããããããŸãã NSArray ã NSURL ã NSUserNotificationãªã© ããªãã¯ãããã®ãã¹ãŠã«ç²ŸéããŠããªããããããŸãããããããã®ååã¯ããããäœã®ããã«ãããã瀺åããŠããŸãã ãã®ãã¬ãŒã ã¯ãŒã¯ã¯éåžžã«éèŠã§ãããããæ°ããã¢ããªã±ãŒã·ã§ã³ã«ã€ã³ããŒãããå¿ èŠãªããããã©ã«ãã§ãã¬ãŒã ã¯ãŒã¯ãå©çšã§ããŸãã
ç§ã®ç¥ãéããJavaScriptã§ãObjective-CãSwiftãšåãããšãã§ããŸãã
äŸ
泚ïŒãã®äŸãæ©èœãããã«ã¯ãYosemite Developer Preview 7+ãå¿ èŠã§ã
äœããåŠã¶ããã®æè¯ã®æ¹æ³ã¯ããããåãåã£ãŠäœããããããšããããšã§ãã ã³ã³ãã¥ãŒã¿ãŒã®ç»åã衚瀺ã§ããå°ããªã¢ããªã±ãŒã·ã§ã³ãäœæããããã»ã¹ã玹ä»ããŸãã
ç§ã®ãªããžããªããå®å šãªäŸãããŠã³ããŒãã§ããŸã ã
äœæããã¢ããªã±ãŒã·ã§ã³ã®ç»é¢ã
ã¢ããªã±ãŒã·ã§ã³ã«ã¯ããŠã£ã³ããŠãããã¹ããããã¯ãå ¥åãã£ãŒã«ãããã¿ã³ããããŸãã ããŠããŸãã¯ã¯ã©ã¹åïŒ NSWindow ã NSTextField ã NSTextField ã NSButton ã
ããã¡ã€ã«éžæããã¿ã³ãã¯ãªãã¯ãããšã NSOpenPanelãéãããã¡ã€ã«ãéžæãããŸãã ãŠãŒã¶ãŒã.jpgã.pngãããã³.gif以å€ã®æ¡åŒµåãæã€ãã¡ã€ã«ãéžæã§ããªãããã«ãããã«ãæ§æããŸãã
ç»åãéžæããåŸããŠã£ã³ããŠã«è¡šç€ºããŸãã ãŠã£ã³ããŠã®ãµã€ãºã¯ãç»åã®å¹ ãšé«ããããã³ã³ã³ãããŒã«ã®é«ãã«åãããŠèª¿æŽãããŸãã ãŸããã³ã³ãããŒã«ãæ¶ããªãããã«ãæå°ãŠã£ã³ããŠãµã€ãºã瀺ããŸãã
ãããžã§ã¯ãã®ã»ããã¢ãã
Applictions> Utilitiesã§Apple Script Editor ã¢ããªãéããŸãã ããã¯ç§ãè©Šããæé«ã®ãšãã£ã¿ãŒã§ã¯ãããŸããããä»ã§ã¯å¿ èŠã§ãã JSã§OS Xã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«å¿ èŠãªæ©èœãããã€ããããŸãã ããŒãã®äžã§äœãèµ·ãã£ãŠããã®ãã¯ããããŸãããã圌ã¯ã¹ã¯ãªãããã¢ããªã±ãŒã·ã§ã³ãšããŠã³ã³ãã€ã«ããŠå®è¡ããæ¹æ³ãç¥ã£ãŠããŸãã ãŸããInfo.plistãã¡ã€ã«ãªã©ãè¿œå ã®å¿ èŠãªãã®ãäœæããŸãã ä»ã®ç·šéè ã«åãããšã匷å¶ããæ©äŒãããããã«æããŸãããç§ã¯ãŸã ãããç解ããŠããŸããã
File> NewãŸãã¯cmd + nã§æ°ããããã¥ã¡ã³ããäœæããŸãã æåã«è¡ãå¿ èŠãããã®ã¯ãããã¥ã¡ã³ããã¢ããªã±ãŒã·ã§ã³ãšããŠä¿åããããšã§ãã File> SaveãŸãã¯cmd + s㧠ä¿åããŸã ã äžåºŠã«æ¥ãã§ä¿åããªãã§ãã ããã ãããžã§ã¯ããã¢ããªã±ãŒã·ã§ã³ãšããŠå®è¡ããããã«å¿ èŠãª2ã€ã®èšå®ããããŸãã
å¿ èŠãªèšå®ãåããã¹ã¯ãªãããšãã£ã¿ãŒ
ãã©ãŒãããããã¢ããªã±ãŒã·ã§ã³ãã«å€æŽãããéããªããããã¯ã¹ã«ãã§ãã¯ãå ¥ããŸã**
éèŠãªæ³šæïŒãããã®èšå®ã¯å€æŽã§ããŸãã[ãã¡ã€ã«]ã¡ãã¥ãŒãéãããªãã·ã§ã³ãã¿ã³ãæŒãç¶ããŸãã ããã«ããããååãä»ããŠä¿å...ãã¢ã€ãã ãéããŸãã ä¿åãã€ã¢ãã°ã§ãèšå®ãå€æŽã§ããŸãã ãããããããžã§ã¯ããäœæãããšãã¯ããã«ãããè¡ãæ¹ãè¯ãã§ãã
[éããªã]ãã§ãã¯ããã¯ã¹ããªã³ã«ããªããšãã¢ããªã±ãŒã·ã§ã³ãéããããã«éããŸãã ã€ã³ã¿ãŒãããäžã®ãã®æ©èœã«é¢ããããã¥ã¡ã³ãã¯ã»ãšãã©ãããŸããã ããŒããŒãã§é¡ãå©ããŠæ°æéåŸã«ãã®ããšãç¥ããŸããã
ãã§ã«äœããããŸãããïŒ
次ã®è¡ãã¹ã¯ãªããã«è¿œå ãã Script> Run ApplicationãŸãã¯cmd + rã䜿çšããŠãã¹ãŠãå®è¡ããŸãã
ObjC.import("Cocoa"); $.NSLog("Hi everybody!");
ã»ãšãã©äœãèµ·ãããŸããã§ããã 衚瀺ãããå€æŽã¯ãã¡ãã¥ãŒããŒãšããã¯ã®ã¿ã§ãã ã¢ããªã±ãŒã·ã§ã³ã®ååãšé ç®Fileããã³Editãã¡ãã¥ãŒããŒã«è¡šç€ºãããŸããã ã¢ã€ã³ã³ãããã¯ã«ãããããã¢ããªã±ãŒã·ã§ã³ãå®è¡ãããŠããããšãããããŸãã
ãããã«ã¡ã¯ãã¿ãªããïŒããšããè¡ã¯ã©ãã«ãããŸããïŒ ãŸããjQueryã®ãã«èšå·ãšã¯äœã§ããïŒ File> QuitãŸãã¯cmd + qã§ã¢ããªã±ãŒã·ã§ã³ãéããŠããã®NSLogãçºçããå ŽæãèŠã€ããŸãããã
ã³ã³ãœãŒã«ãéããŸã ïŒ ã¢ããªã±ãŒã·ã§ã³>ãŠãŒãã£ãªãã£>ã³ã³ãœãŒã« ã åã¢ããªã±ãŒã·ã§ã³ã¯ãã³ã³ãœãŒã«ã«äœããæžã蟌ãããšãã§ããŸãã ChromeãSafariãFirefoxã®éçºè ããŒã«ãšå€§å·®ãããŸããã äž»ãªéãã¯ããµã€ãã§ã¯ãªãã¢ããªã±ãŒã·ã§ã³ããããã°ããŠããããšã§ãã
å€ãã®ã¡ãã»ãŒãžããããŸãã å³äžé ã®æ€çŽ¢ããŒã«ãã¢ãã¬ããããšæžãããšã§ãã£ã«ã¿ãªã³ã°ããŸãã ã¹ã¯ãªãããšãã£ã¿ãŒã«æ»ãã opt + cmd + rã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãå床å®è¡ããŸãã
èŠãŸãããïŒïŒ ãããã«ã¡ã¯ãã¿ãªããïŒããšããã¡ãã»ãŒãžãã³ã³ãœãŒã«ã«è¡šç€ºãããŸãã ååšããªãå Žåã¯ãã¢ããªã±ãŒã·ã§ã³ãéããŠå床å®è¡ããŸãã äœåãéããã®ãå¿ããŠãã³ãŒããèµ·åããŸããã§ããã
ãã«èšå·ã¯ã©ãã§ããïŒ
ãã«èšå·ã¯ãObjective-Cã®ããªããžãžã®ã¢ã¯ã»ã¹ã§ãã Objective-Cã¯ã©ã¹ãŸãã¯å®æ°ã«ã¢ã¯ã»ã¹ããå¿ èŠããããã³ã«ã $ .fooãŸãã¯ObjC.fooã䜿çšããå¿ èŠããããŸãã åŸã§$ã䜿çšããä»ã®æ¹æ³ã«ã€ããŠèª¬æããŸãã
ã³ã³ãœãŒã«ã¢ããªã±ãŒã·ã§ã³ãšNSLogã¯ããããã®ãªããã®ã§ãããåžžã«ãããã°ã«äœ¿çšããŸãã æåå以å€ã®ãã°ãèšé²ããæ¹æ³ã«ã€ããŠã¯ã NSLogã®äŸãã芧ãã ããã
ãŠã£ã³ããŠãäœæãã
ããåããããŸãããã ã³ãŒããè¿œå ããŸãã
ObjC.import("Cocoa"); var styleMask = $.NSTitledWindowMask | $.NSClosableWindowMask | $.NSMiniaturizableWindowMask; var windowHeight = 85; var windowWidth = 600; var ctrlsHeight = 80; var minWidth = 400; var minHeight = 340; var window = $.NSWindow.alloc.initWithContentRectStyleMaskBackingDefer( $.NSMakeRect(0, 0, windowWidth, windowHeight), styleMask, $.NSBackingStoreBuffered, false ); window.center; window.title = "Choose and Display Image"; window.makeKeyAndOrderFront(window);
次ã«ãã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŸãã opt + cmd + r 話ããŸãããïŒ å°éã®ã³ãŒãã§ã移åãæå°åãããã³éããããšãã§ããã¢ããªã±ãŒã·ã§ã³ãäœæããŸããã
JSã䜿çšããŠäœæãããã·ã³ãã«ãªNSWindowãŠã£ã³ããŠ
ç§ã®ããã«ãObjective-CãCocoaã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãäœæããå¿ èŠããªãã£ãå Žåãããã¯å°ãããããèŠãããããããŸããã ã¡ãœããåã®é·ãã¯ãã®ããã«æããŸããã ããããããååã奜ãã§ãããCocoaã¯è¡ãéãã§ãã
ãã ããããã¯JavaScriptã§ãã ã³ãŒãã¯ãWebãµã€ããäœæããŠããããã«èŠããŸãã
styleMaskå€ãèšå®ããæåã®è¡ã§äœãèµ·ãããŸããïŒ ã¹ã¿ã€ã«ãã¹ã¯ã¯ããŠã£ã³ããŠãã«ã¹ã¿ãã€ãºããããã«äœ¿çšãããŸãã åãªãã·ã§ã³ã¯ãè¿œå ããå 容ã瀺ããŸãã ã¿ã€ãã«ãéãããã¿ã³ãæå°åãã¿ã³ã ãããã®ãªãã·ã§ã³ã¯å®æ°ã§ãã ãããåäœãŸãã¯ïŒ "|"ïŒã䜿çšããŠãããèšå®ãå¥ã®èšå®ããåé¢ããŸãã
å€ãã®ãªãã·ã§ã³ããããŸãã ãããã«ã€ããŠã¯ãã¹ãŠããã¥ã¡ã³ãã§èªãããšãã§ããŸã ã NSResizableWindowMaskãè¿œå ããŠãäœãèµ·ãããã確èªããŠãã ããã
æ§æã«é¢ããããã€ãã®èå³æ·±ãããšãèŠããŠããå¿ èŠããããŸãã $ .NSWindow.allocã¯ã NSWindowãªããžã§ã¯ãã®allocã¡ãœãããåŒã³åºããŸãã ã¡ãœãããåŒã³åºããåŸã¯æ¬åŒ§ããããŸããã JavaScriptã§ã¯ãããã«ããã¡ãœããã§ã¯ãªãããããã£ã«ã¢ã¯ã»ã¹ã§ããŸãã ã©ãïŒ OS Xã®JSã§ã¯ããã©ã±ããã¯ãã©ã¡ãŒã¿ãŒãæž¡ãå Žåã«ã®ã¿èš±å¯ãããŸãã åŒæ°ãªãã§æ¬åŒ§ã䜿çšããããšãããšãå®è¡æãšã©ãŒãçºçããŸãã åé¡ãçºçããå Žåã¯ãã³ã³ãœãŒã«ã§ãšã©ãŒã確èªããŠãã ããã
以äžã¯ãè¶ é·ã¡ãœããåã®äŸã§ãã
initWithContentRectStyleMaskBackingDefer
NSWindowã®ããã¥ã¡ã³ãã§ã¯ããã®ã¡ãœããã¯å°ãç°ãªããŸãã
initWithContentRect:styleMask:backing:defer:
Objective-Cã§ã¯ããã®ãããªãŠã£ã³ããŠã¯æ¬¡ã®æ¹æ³ã§äœæãããŸãã
NSWindow* window [[NSWindow alloc] initWithContentRect: NSMakeRect(0, 0, windowWidth, windowHeight) styleMask: styleMask, backing: NSBackingStoreBuffered defer: NO ];
ã¡ãœããã®å ã®èª¬æã®ã³ãã³ïŒ "ïŒ"ïŒã«æ³šæããŠãã ããã JSã§Objective-Cã¡ãœããã䜿çšããã«ã¯ãããããåé€ãã次ã®æåã倧æåã«çœ®ãæããå¿ èŠããããŸãã è§æ¬åŒ§ïŒ "[]"ïŒã¯ãã¯ã©ã¹/ãªããžã§ã¯ãã¡ãœããã®åŒã³åºãã§ãã [NSWindow alloc]ã¯ã NSWindowã¯ã©ã¹ã®allocã¡ãœãããåŒã³åºããŸãã JSã§ã¯ãããã¯NSWindow.allocã«çžåœããå¿ èŠã«å¿ããŠè§ãã£ããè¿œå ããŸãã
æ®ãã®ã³ãŒãã¯éåžžã«ã·ã³ãã«ã ãšæããŸãã 圌女ã®è©³çŽ°ãªèª¬æãæããã§ãã 次ã«äœãèµ·ããããç解ããã«ã¯ãå€ãã®æéãå¿ èŠãšããå€ãã®ããã¥ã¡ã³ããèªãå¿ èŠããããŸããããããåŠçã§ããŸãã ãŠã£ã³ããŠã衚瀺ãããŠããå Žåãããã¯ãã§ã«çŽ æŽãããã§ãã ä»ã®ããšãããŸãããã
ã³ã³ãããŒã«ãè¿œå ãã
ã©ãã«ãããã¹ãããã¯ã¹ããã¿ã³ãå¿ èŠã§ãã NSTextFieldãšNSButtonã䜿çšããŸãã ã³ãŒããæŽæ°ããŠãã¢ããªã±ãŒã·ã§ã³ãå床å®è¡ããŸãã
ObjC.import("Cocoa"); var styleMask = $.NSTitledWindowMask | $.NSClosableWindowMask | $.NSMiniaturizableWindowMask; var windowHeight = 85; var windowWidth = 600; var ctrlsHeight = 80; var minWidth = 400; var minHeight = 340; var window = $.NSWindow.alloc.initWithContentRectStyleMaskBackingDefer( $.NSMakeRect(0, 0, windowWidth, windowHeight), styleMask, $.NSBackingStoreBuffered, false ); var textFieldLabel = $.NSTextField.alloc.initWithFrame($.NSMakeRect(25, (windowHeight - 40), 200, 24)); textFieldLabel.stringValue = "Image: (jpg, png, or gif)"; textFieldLabel.drawsBackground = false; textFieldLabel.editable = false; textFieldLabel.bezeled = false; textFieldLabel.selectable = true; var textField = $.NSTextField.alloc.initWithFrame($.NSMakeRect(25, (windowHeight - 60), 205, 24)); textField.editable = false; var btn = $.NSButton.alloc.initWithFrame($.NSMakeRect(230, (windowHeight - 62), 150, 25)); btn.title = "Choose an Image..."; btn.bezelStyle = $.NSRoundedBezelStyle; btn.buttonType = $.NSMomentaryLightButton; window.contentView.addSubview(textFieldLabel); window.contentView.addSubview(textField); window.contentView.addSubview(btn); window.center; window.title = "Choose and Display Image"; window.makeKeyAndOrderFront(window);
ãã¹ãŠãããŸãããã°ãã³ã³ãããŒã«ã®ãããŠã£ã³ããŠãã§ããŸããã ãã£ãŒã«ãã«äœãå ¥åããããšã¯ã§ããããã¿ã³ã¯äœãããŸããããã¡ãã£ãšåŸ ã£ãŠãã ããããã§ã«åé²ããŠããŸãã
ãŠã£ã³ããŠã³ã³ãããŒã«
ããã§äœãããŸãããïŒ textFieldLabelãštextFieldã¯äºãã«äŒŒãŠããŸãã ã©ã¡ããNSTextFieldã®ã€ã³ã¹ã¿ã³ã¹ã§ãã ãŠã£ã³ããŠãäœæããã®ãšåãæ¹æ³ã§äœæããŸããã initWithFrameãšNSMakeRectã衚瀺ãããå Žåãã»ãšãã©ã®å ŽåãUIèŠçŽ ãããã«äœæãããŠããŸãã NSMakeRectã¯ããã®ååã§ã¬ã³ããªã³ã°ãããããšãè¡ããŸãã æå®ããã座æšãšå¯žæ³ã§é·æ¹åœ¢ãäœæããŸãã ïŒxãyãå¹ ãé«ãïŒ ã ããã«ãããObjective-Cã§ãæ§é ããšåŒã°ãããã®ãäœæãããŸãã JSã§ã¯ãåçã®ãã®ã¯ãªããžã§ã¯ããããã·ã¥ããŸãã¯èŸæžã§ããå¯èœæ§ããããŸãã ããŒãšå€ã®ãã¢ã
ããã¹ããã£ãŒã«ããäœæããããããã€ãã®ããããã£ãããããèšå®ããŠãç®çã®çµæãååŸããŸãã Cocoaã«ã¯ãhtmlã©ãã«èŠçŽ ã®ãããªãã®ã¯ãããŸããã ããã§ã¯ãèæ¯ãšç·šéæ©èœããªãã«ããŠãã ããã
ããã¹ãããã¯ã¹ãããã°ã©ã ã§èšå®ããåæã«ç·šéãç¡å¹ã«ããŸãã ãããå¿ èŠãªããã°ã1è¡ã§ç®¡çã§ããŸãã
ãã¿ã³ãäœæããã«ã¯ã NSButtonã䜿çšããŸã ã ããã¹ãããã¯ã¹ãšåæ§ã«ãæ§é ãå¿ èŠã§ãã ããããã£ã«ã¯ã bezelStyleãšbuttonTypeã® 2ã€ããããŸãã äž¡æ¹ã®å€ã¯å®æ°ã§ãã ãããã®ããããã£ã¯ãèŠçŽ ã®æç»æ¹æ³ãšèŠçŽ ã®ã¹ã¿ã€ã«ã決å®ããŸãã NSButtonã®ãã®ä»ã®æäœã«ã€ããŠã¯ã NSButtonã®ããã¥ã¡ã³ããåç §ããŠãã ããã ãŸããããŸããŸãªã¹ã¿ã€ã«ãšåäœäžã®ãã¿ã³ã®ã¿ã€ãã瀺ãäŸããããŸãã
ããã§è¡ã£ãŠããæåŸã®æ°ããããšã¯ã addSubViewã䜿çšããŠãŠã£ã³ããŠã«èŠçŽ ãè¿œå ããããšã§ã ã ã䜿çšããŠãããæåã«è©Šã¿ããšã
window.addSubview(theView)
NSViewã§äœæããä»ã®æšæºãã¥ãŒã§ã¯ãããã¯æ©èœããŸããã NSWindowã€ã³ã¹ã¿ã³ã¹ã§ã¯æ©èœããŸããã çç±ã¯ããããŸãããã windowsã®contentViewã«èŠçŽ ãè¿œå ããå¿ èŠããããŸã ã ããã¥ã¡ã³ãã«ã¯ãããŠã£ã³ããŠéå±€ã§äœ¿çšå¯èœãªæäžäœã®NSViewããšãããŸãã ããã¯ç§ã®ããã«åããã
ãã¿ã³ãæ©èœããã
ãç»åã®éžæããã¿ã³ãã¯ãªãã¯ãããšãã³ã³ãã¥ãŒã¿ãŒäžã®ãã¡ã€ã«ã衚瀺ããããã«ãéããŸãã ãã®åã«ããã¿ã³ãã¯ãªãã¯ãããšãã«ã³ã³ãœãŒã«ã«ã¡ãã»ãŒãžãè¿œå ããŠãŠã©ãŒã ã¢ããããŸãããã
JSã§ã¯ãã¯ãªãã¯ãåŠçããããã«ã€ãã³ããã³ãã©ãŒãèŠçŽ ã«ã¢ã¿ãããããŸãã Objective-Cã¯ããããã«ç°ãªãæŠå¿µã䜿çšããŠããŸãã ã¡ãã»ãŒãžã³ã°***ãšåŒã°ãããã®ã䜿çšããŸãã ã€ãŸããã¡ãœããã®ååãå«ãã¡ãã»ãŒãžããªããžã§ã¯ãã«æž¡ããŸãã ãªããžã§ã¯ãã«ã¯ããã®ãããªã¡ãã»ãŒãžãåãåã£ããšãã«äœããã¹ããã«ã€ããŠã®æ å ±ãå¿ èŠã§ãã ããã¯æãæ£ç¢ºãªèª¬æã§ã¯ãªããããããŸããããç§ã¯ç解ããŠããŸãã
æåã«ããã¿ã³ã«ã¿ãŒã²ãããšã¢ã¯ã·ã§ã³ãèšå®ããå¿ èŠããããŸãã ã¿ãŒã²ããã¯ã ã¢ã¯ã·ã§ã³ã«å«ãŸããã¡ãã»ãŒãžã®éä¿¡å ã®ãªããžã§ã¯ãã§ãã æ確ã«ãªã£ãŠããªãå Žåã¯ã次ã«é²ãã§ãã ãããã³ãŒããèŠãã°ããã¹ãŠãç解ã§ããŸãã ãã¿ã³ãæ§æãããŠããã¹ã¯ãªããã®éšåãæŽæ°ããŸãã
... btn.target = appDelegate; btn.action = "btnClickHandler"; ...
appDelegateãšbtnClickHandlerã¯ãŸã ååšããŸããã ããããäœããªããã°ãªããŸããã 次ã®ã³ãŒãã§ã¯ãé åºãéèŠã§ãã æ°ããã³ãŒããã©ãã«ãããã瀺ãã³ã¡ã³ããè¿œå ããŸããã
ObjC.import("Cocoa"); // ObjC.registerSubclass({ name: "AppDelegate", methods: { "btnClickHandler": { types: ["void", ["id"]], implementation: function (sender) { $.NSLog("Clicked!"); } } } }); var appDelegate = $.AppDelegate.alloc.init; // // , var textFieldLabel = $.NSTextField.alloc.initWithFrame($.NSMakeRect(25, (windowHeight - 40), 200, 24)); textFieldLabel.stringValue = "Image: (jpg, png, or gif)"; ...
ã¢ããªã±ãŒã·ã§ã³ãèµ·åãããã¿ã³ãã¯ãªãã¯ããŠã³ã³ãœãŒã«ãèŠãŠãã ããã ãã¿ã³ãã¯ãªãã¯ãããšããClickedïŒãã¡ãã»ãŒãžã衚瀺ãããŸããïŒ ãããããªããããã¯ãã ã®ãžã£ãŒã¯ã§ãããïŒ ããã§ãªãå Žåã¯ãã³ã³ãœãŒã«ã§ã³ãŒããšãšã©ãŒã確èªããŠãã ããã
ç¶æ¿
ObjC.registerSubclassãšã¯äœã§ããïŒ ç¶æ¿ã¯ãå¥ã®Objective-Cã¯ã©ã¹ãç¶æ¿ããæ°ããã¯ã©ã¹ãäœæããæ¹æ³ã§ãã åæ çãªäœè«ïŒããã§ãç§ãééã£ãçšèªã䜿çšããå¯èœæ§ããããŸãã ç§ãšæŠãã registerSubclassã¯1ã€ã®åŒæ°ãåããŸãïŒæ°ãããªããžã§ã¯ãã®ããããã£ãå«ãJSãªããžã§ã¯ãã ããããã£ã«ã¯ã name ã superclass ã protocols ã propertiesããã³methodsããããŸã ã ãããå®å šãªãªã¹ããã©ããã¯100ïŒ ããããŸããããããã¯ãªãªãŒã¹ããŒãã«èšèŒãããŠããŸã ã
ããã¯ãã¹ãŠé 調ã§ãããããã§äœãããŸãããïŒ ã¹ãŒããŒã¯ã©ã¹ãæå®ããªãã£ãããã NSObjectããç¶æ¿ããŸãã ããã¯ãã»ãšãã©ã®Objective-Cã¯ã©ã¹ã®åºæ¬ã¯ã©ã¹ã§ãã nameããããã£ã«ãããä»åŸ$ãŸãã¯ObjCãä»ããŠæ°ããã¯ã©ã¹ã«ã¢ã¯ã»ã¹ã§ããããã«ãªããŸãã
$ .AppDelegate.alloc.init; ã¯ã©ã¹AppDelegateã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŸãã ç¹°ãè¿ããŸãããåŒæ°ãæž¡ããªãããã allocã¡ãœãããšinitã¡ãœããã®åŒã³åºãã®æ¬åŒ§ã¯äœ¿çšãããªãããšã«æ³šæããŠãã ããã
çžç¶äººã®æ¹æ³
ã¡ãœããã¯ãä»»æã®æåååãå²ãåœãŠãããšã«ããäœæãããŸãã ããšãã°ã btnClickHandler ã åãšå®è£ ããããã£ãæã€ãªããžã§ã¯ããæž¡ããŸãã typesé åã«å«ãŸããã¹ããã®ã«é¢ããå ¬åŒããã¥ã¡ã³ãã¯èŠã€ãããŸããã§ããã è©Šè¡é¯èª€ãéããŠãç§ã¯ããã次ã®ããã«èŠããããšã«æ°ä»ããŸããã
["return type", ["arg 1 type", "arg 2 type",...]]
btnClickHandlerã¯äœãè¿ããªããããæåã®èŠçŽ ã¯ç¡å¹ã«ãªããŸãã 1ã€ã®ãã©ã¡ãŒã¿ãŒãã¡ãã»ãŒãžãéä¿¡ãããªããžã§ã¯ããå¿ èŠã§ãã ç§ãã¡ã®ã±ãŒã¹ã§ã¯ã NSnãšåŒã°ããNSButtonã䜿çšããŸããã ã¿ã€ãã®å®å šãªãªã¹ãã¯ããã§å©çšå¯èœã§ã ã
å®è£ ã¯éåžžã®æ©èœã§ãã ãã®äžã«JavaScriptãèšè¿°ããŸãã ãªããžã§ã¯ãã®å€éšãšåãããã«$ã«ã¢ã¯ã»ã¹ã§ããŸãã ãŸããé¢æ°ã®å€éšã§å®£èšãããå€æ°ã䜿çšã§ããŸãã
ãããã³ã«ã®äœ¿çšã«é¢ããã¡ãã£ãšãã泚æ
Cocoaãããã³ã«ãããµãã¯ã©ã¹ãç¶æ¿ã§ããŸãããèœãšãç©ŽããããŸãã ãããã³ã«é åã䜿çšãããšãã¹ã¯ãªããããšã©ãŒãªãã§åçŽã«ã¯ã©ãã·ã¥ããããšãããããŸããã äŸãšèª¬æãæžããã®ã§ããããã䜿ã£ãŠäœæ¥ãããå Žåã¯ããããèªãã§ãã ããã
ç»åã®éžæãšè¡šç€º
ããã«ãéããŠãç»åãéžæããŠè¡šç€ºããæºåãã§ããŸããã æ©èœã³ãŒãã®æŽæ°
btnClickHandler: ... implementation: function (sender) { var panel = $.NSOpenPanel.openPanel; panel.title = "Choose an Image"; var allowedTypes = ["jpg", "png", "gif"]; // NOTE: JS NSArray panel.allowedFileTypes = $(allowedTypes); if (panel.runModal == $.NSOKButton) { // NOTE: panel.URLs - NSArray, JS array var imagePath = panel.URLs.objectAtIndex(0).path; textField.stringValue = imagePath; var img = $.NSImage.alloc.initByReferencingFile(imagePath); var imgView = $.NSImageView.alloc.initWithFrame( $.NSMakeRect(0, windowHeight, img.size.width, img.size.height)); window.setFrameDisplay( $.NSMakeRect( 0, 0, (img.size.width > minWidth) ? img.size.width : minWidth, ((img.size.height > minHeight) ? img.size.height : minHeight) + ctrlsHeight ), true ); imgView.setImage(img); window.contentView.addSubview(imgView); window.center; } }
æåã«ã NSOpenPanelã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŸãã ãã¡ã€ã«ãéžæãããããã®ãã¡ã€ã«ãä¿åããå Žæãéžæããããšãããå Žåãããã«ãåäœããŠããã®ãèŠãŸããã
ã¢ããªã±ãŒã·ã§ã³ã«å¿ èŠãªã®ã¯ãç»åã衚瀺ããããšã ãã§ãã allowedFileTypesããããã£ã䜿çšãããšãããã«ã§éžæã§ãããã¡ã€ã«ã®çš®é¡ã決å®ã§ããŸãã NSArrayåã®å€ãåããŸãã æå¹ãªåã§JSé åãäœæããŸãããããã§ãNSArrayã«å€æããå¿ èŠããããŸãã ããã¯æ¬¡ã®ããã«è¡ãããŸãïŒ $ïŒallowdTypesïŒ ã ããã¯ãããªããžã䜿çšããå¥ã®æ¹æ³ã§ãã ãã®ã¡ãœããã䜿çšããŠãJSå€ãObjective-Cã«å€æããŸãã éã®æäœã¯$ïŒObjCThingïŒ.jsã®ããã«è¡ãããŸãã
panel.runModalã䜿çšããŠããã«ãéããŸãã ã³ãŒãã®å®è¡ã¯äžæåæ¢ããŠããŸãã [ ãã£ã³ã»ã« ]ãŸãã¯[éã ]ãã¯ãªãã¯ãããšãããã«ã¯å€ãè¿ããŸãã [éã ]ãã¿ã³ãæŒããšãå®æ°$ .NSOKButtonãè¿ãããŸãã
panel.URLsã«é¢ãã次ã®ã³ã¡ã³ãã¯éåžžã«éèŠã§ãã JSã§ã¯ãé åå€ãžã®ã¢ã¯ã»ã¹ã¯æ¬¡ã®ããã«è¡ãããŸãïŒ array [0] ã URLã¯NSArrayåã§ãããããè§æ¬åŒ§ã䜿çšã§ããŸããã 代ããã«ã objectAtIndexã¡ãœããã䜿çšããŸãã çµæã¯åãã«ãªããŸãã
ç»åURLãååŸããåŸã NSImageã®æ°ããã€ã³ã¹ã¿ã³ã¹ãäœæã§ããŸã ã ãã¡ã€ã«URLã䜿çšããŠç»åãäœæããæ¹æ³ã¯åºãæ®åããŠãããããããã«ã¯äŸ¿å©ãªæ¹æ³ããããŸãã
initByReferencingFile
NSImageViewã¯ãä»ã®UIèŠçŽ ã®äœæã«äœ¿çšããã®ãšåãæ¹æ³ã§äœæãããŸãã imgViewã¯ç»åã®è¡šç€ºãå¶åŸ¡ããŸãã
ãŠã£ã³ããŠã®ãµã€ãºãç»åã®å¹ ãšé«ãã«åãããŠèª¿æŽããå¿ èŠããããŸãããé«ã/å¹ ã®äžéãç¶æããå¿ èŠããããŸãã ãŠã£ã³ããŠã®ãµã€ãºãå€æŽããã«ã¯ã setFrameDisplayã䜿çšããŸã ã
ãããã£ãŠã imageViewã®ç»åãèšå®ãããŠã£ã³ããŠã«è¿œå ããŸããã å¹ ãšé«ããå€æŽãããŠããããããŠã£ã³ããŠãäžå€®ã«é 眮ããå¿ èŠããããŸãã
ãããŠãããã«å°ããªã¢ããªã±ãŒã·ã§ã³ããããŸãã ããã€ãã®ãã¡ã€ã«ãéããŠãã ããã ãããŠãã¯ããã¢ãã¡ãŒã·ã§ã³GIFãæ©èœããã®ã§ãå¿ããªãã§ãã ããã
ãããããã¥ãŒã¹
ãããŸã§ãã¢ããªã±ãŒã·ã§ã³ãopt + cmd + rã§å®è¡ããŸãã ã ãã ããã¢ã€ã³ã³ãããã«ã¯ãªãã¯ããŠéåžžã®ã¢ããªã±ãŒã·ã§ã³ãèµ·åããŸãã
ã¢ã€ã³ã³ãããã«ã¯ãªãã¯ããŠãã¢ããªã±ãŒã·ã§ã³ãèµ·åããŸã
ã¢ã€ã³ã³ã¯ã /Contents/Resources/applet.icnsã眮ãæããããšã§å€æŽã§ããŸãã ã¢ããªã±ãŒã·ã§ã³ãªãœãŒã¹ã«ã¢ã¯ã»ã¹ããã«ã¯ãã¢ã€ã³ã³ãå³ã¯ãªãã¯ããŠ[ããã±ãŒãžã®å 容ã衚瀺]ãéžæããŸãã
ã©ãããŠãããªã«è奮ããã®
ç§ã¯å€§ããªå¯èœæ§ããããšæãããã§ãã ãããçç±ã§ãã Yosemiteãç»å Žãããšã誰ã§ã座ã£ãŠãã€ãã£ãã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãã ãããŠãæãäžè¬çãªããã°ã©ãã³ã°èšèªã®1ã€ã䜿çšããŠãããè¡ãããšãã§ããŸãã ããŠã³ããŒããããã€ã³ã¹ããŒã«ãããããå¿ èŠã¯ãããŸããã å¿ èŠãªãå Žåã¯ãXcodeãã€ã³ã¹ããŒã«ããå¿ èŠã¯ãããŸããã ãšã³ããªãŒã®ãããå€ã¯å€§å¹ ã«åæžãããŸãã ããã¯ä¿¡ããããªãã§ãã
OS Xçšã®ã¢ããªã±ãŒã·ã§ã³ã®éçºã¯ãã²ããŸãããŠã¹ã¯ãªãããæžããããã¯ããã«æ·±ãããã»ã¹ã§ããããšãç¥ã£ãŠããŸãã JavaScriptãMacã®éçºãéå§ããããã®äºå®äžã®æšæºã«ãªããšããå¹»æ³ã¯ãããŸããã ããã¯ãéçºè ãèªåèªèº«ãä»ã®äººã ã®éçºã容æã«ããå°ããªã¢ããªã±ãŒã·ã§ã³ãäœæããã®ã«åœ¹ç«ã€ãšä¿¡ããŠããŸãã ããŒã ã«ã¯ãã³ãã³ãã©ã€ã³ã§ã®äœæ¥ãé£ãããšæãã人ãããŸããïŒ ã¯ã€ãã¯GUIãäœæããŸãã æ§æããã°ãããŸãã¯èŠèŠçã«äœæãŸãã¯å€æŽããæ¹æ³ãå¿ èŠã§ããïŒ ãã®ããã®å°ããªã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã
ä»ã®èšèªã«ããããã®æ©èœããããŸãã PythonãšRubyã¯åããã€ãã£ãAPIã«ã¢ã¯ã»ã¹ã§ãã人ã ã¯ãããã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã ãã ããããã«JavaScriptã䜿çšããããšã¯ç°ãªããŸãã ããã«ããããã¹ãŠãéããŸã«ãªããŸãã ãŠã§ãéçºã®DIYã®ååãããã¹ã¯ãããã®äžã§ã®éçºã®æãããã¯ããŠããããã«ã ã¢ããã«ã¯ãã¢ã®ããã¯ã解é€ãããŸãŸã«ããŸããã
翻蚳è ã®ã¡ã¢ïŒ
*-ãã€ãã£ããããšãã°ãHTML5ã¢ããªã±ãŒã·ã§ã³ãšåŸæ¥ã®
**-ãã³ãã©ãŒã®å®è¡åŸã¯éãããŸãŸã«ããŸããã¹ã¯ãªãããšãã£ã¿ãŒã®ãã·ã¢èªçã§ã®ã»ããã¢ããã®ååãããããªã
***-ã¡ãã»ãŒãžã®åãæž¡ã