From: Tay R. C. <rc...@us...> - 2005-07-15 12:17:52
|
Update of /cvsroot/actionstep/actionstep/src/org/actionstep In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15369/actionstep/org/actionstep Modified Files: NSApplication.as Log Message: added support for sheets and typed return values Index: NSApplication.as =================================================================== RCS file: /cvsroot/actionstep/actionstep/src/org/actionstep/NSApplication.as,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** NSApplication.as 14 Jul 2005 22:04:03 -0000 1.21 --- NSApplication.as 15 Jul 2005 12:17:36 -0000 1.22 *************** *** 44,47 **** --- 44,49 ---- import org.actionstep.ASTheme; + import org.actionstep.constants.NSRunResponse; + class org.actionstep.NSApplication extends NSResponder { *************** *** 61,72 **** public static var NSApplicationWillUnhideNotification = ASUtils.intern("NSApplicationWillUnhideNotification"); public static var NSApplicationWillUpdateNotification = ASUtils.intern("NSApplicationWillUpdateNotification"); ! ! public static var NSRunStoppedResponse:Number = -1000; ! public static var NSRunAbortedResponse:Number = -1001; ! public static var NSRunContinuesResponse:Number = -1002; private static var m_sharedApplication:NSApplication; ! private var m_active:Boolean; private var m_keyWindow:NSWindow; private var m_mainWindow:NSWindow; --- 63,74 ---- public static var NSApplicationWillUnhideNotification = ASUtils.intern("NSApplicationWillUnhideNotification"); public static var NSApplicationWillUpdateNotification = ASUtils.intern("NSApplicationWillUpdateNotification"); ! ! public static var NSRunStoppedResponse:Number = -1000; ! public static var NSRunAbortedResponse:Number = -1001; ! public static var NSRunContinuesResponse:Number = -1002; private static var m_sharedApplication:NSApplication; ! private var m_active:Boolean; private var m_keyWindow:NSWindow; private var m_mainWindow:NSWindow; *************** *** 76,82 **** private var m_windowsNeedDisplay:Boolean; ! private var m_modalSession:NSModalSession; ! private var m_modalCallback:Object; ! private var m_modalSelector:String; public static function sharedApplication():NSApplication { --- 78,85 ---- private var m_windowsNeedDisplay:Boolean; ! private var m_modalSession:NSModalSession; ! private var m_modalCallback:Object; ! private var m_modalSelector:String; ! private var m_sheetFlags:Array; public static function sharedApplication():NSApplication { *************** *** 96,100 **** m_notificationCenter.addObserverSelectorNameObject(this, "__windowDidResignMain", NSWindow.NSWindowDidResignMainNotification, null); ! m_active = false; return this; } --- 99,103 ---- m_notificationCenter.addObserverSelectorNameObject(this, "__windowDidResignMain", NSWindow.NSWindowDidResignMainNotification, null); ! m_active = false; return this; } *************** *** 119,126 **** return NSWindow.instances(); } ! ! public function isActive():Boolean { ! return m_active; ! } // Event handling --- 122,129 ---- return NSWindow.instances(); } ! ! public function isActive():Boolean { ! return m_active; ! } // Event handling *************** *** 140,144 **** private var m_eventFilter = null; ! public function callObjectSelectorWithNextEventMatchingMaskDequeue(callback:Object, selector:String, mask:Number, dequeue:Boolean):Void { m_eventFilter = {object: callback, selector: selector, mask: mask, dequeue: dequeue}; --- 143,147 ---- private var m_eventFilter = null; ! public function callObjectSelectorWithNextEventMatchingMaskDequeue(callback:Object, selector:String, mask:Number, dequeue:Boolean):Void { m_eventFilter = {object: callback, selector: selector, mask: mask, dequeue: dequeue}; *************** *** 267,411 **** ASEventMonitor.instance().trackKeyboardEvents(); //! What else should we do in run? ! m_active = true; } ! ! //modal ! public function beginModalSessionForWindow(win:NSWindow, call:Object, sel:String):NSModalSession { ! m_modalSession = new NSModalSession(NSRunContinuesResponse, null, win, m_modalSession, call, sel); ! if(win instanceof NSPanel) { ! win.center(); ! win.setLevel(NSWindow.NSModalPanelWindowLevel); ! } ! win.orderFrontRegardless(); ! if(isActive()) { ! if(win.canBecomeKeyWindow()) { ! win.makeKeyWindow(); ! } else if (win.canBecomeMainWindow()) { ! win.makeMainWindow(); ! } ! } ! return m_modalSession; ! } ! ! public function endModalSession(sess:NSModalSession) { ! var tmp:NSModalSession = m_modalSession; ! if (sess == null) { ! var e:NSException = NSException.exceptionWithNameReasonUserInfo ! ("NSInvalidArgumentException", "null pointer passed to endModalSession", null); ! TRACE(e); ! e.raise(); } ! /* Remove this session from linked list of sessions. */ ! while (tmp != null && tmp != sess) { ! tmp = tmp.previous; ! } ! if (tmp == null) { ! //very impt! can cause player to crash ! var e:NSException = NSException.exceptionWithNameReasonUserInfo ! ("NSInvalidArgumentException", "unknown session passed to endModalSession", null); ! TRACE(e); ! e.raise(); } ! while (m_modalSession != sess) { tmp = m_modalSession; m_modalSession = tmp.previous; if (tmp.window!=null) { ! tmp.window.setLevel(tmp.entryLevel); ! } ! } ! m_modalSession = m_modalSession.previous; ! if (sess.window != null) { sess.window.setLevel(sess.entryLevel); } ! //send callback with result, set lastrun to true ! var o = sess.callback ! o[sess.selector].call(o, sess.runState, true); ! //end posing ! m_sharedApplication.sendEvent = m_sharedApplication.originalSendEvent; ! } ! ! public function runModalSession(sess:NSModalSession):Void { ! if (sess != m_modalSession) { ! var e:NSException = NSException.exceptionWithNameReasonUserInfo ! ("NSInvalidArgumentException", "wrong session", null); ! TRACE(e); ! e.raise(); } var win = sess.window; ! win.orderFrontRegardless(); ! if(win.canBecomeKeyWindow()) { ! win.makeKeyWindow(); ! } else if (win.canBecomeMainWindow()) { ! win.makeMainWindow(); ! } ! //start posing ! m_sharedApplication.originalSendEvent = m_sharedApplication.sendEvent; ! m_sharedApplication.sendEvent = m_sharedApplication.modalSendEvent; ! } ! ! private function modalSendEvent(event:NSEvent) { ! var done = false; ! var sess = m_modalSession; ! if (event != null) { ! var eventWindow:NSWindow = event.window; ! /* ! * We handle events for the session window, events for any ! * window which works when modal, and any window management ! * events. All others are ignored/discarded. ! */ ! if (!(eventWindow == sess.window ! || eventWindow.worksWhenModal() == true ! || event.type == NSEvent.NSAppKitDefined)) { ! event = null; ! } ! } ! var o = sess.callback ! o[sess.selector].call(o, sess.runState); ! if(event!=null) { ! m_sharedApplication.originalSendEvent(event); ! } ! } ! ! public function runModalForWindow (win:NSWindow, callb:Object, sel:String):Void { ! var sess:NSModalSession = beginModalSessionForWindow(win, m_sharedApplication, "modalWin"); ! runModalSession(sess); ! m_modalCallback = callb; ! m_modalSelector = sel; ! } ! ! private function modalWin(ret:Number, lastrun:Boolean) { ! if(!lastrun && ret!=NSRunContinuesResponse) { ! endModalSession(m_modalSession); ! } ! var o = m_modalCallback; ! var s = m_modalSelector; ! o[s].call(o, ret); ! } ! ! public function stopModal() { ! stopModalWithCode(NSRunStoppedResponse); ! } ! ! public function stopModalWithCode(ret:Number):Void { ! if(m_modalSession == null) { ! var e:NSException = NSException.exceptionWithNameReasonUserInfo ! ("NSInvalidArgumentException", "not in a modal session", null); ! TRACE(e); ! e.raise(); ! } ! m_modalSession.runState = ret; ! endModalSession(m_modalSession); ! } ! ! //note: can return null ! public function modalWindow():NSWindow { ! return m_modalSession.window; ! } ! ! //this function is not found in Cocoa ! public function runningModal():Boolean { ! return (m_modalSession==null) ? false : true; ! } ! private function __windowWillClose(notification:NSNotification) { --- 270,450 ---- ASEventMonitor.instance().trackKeyboardEvents(); //! What else should we do in run? ! m_active = true; } ! ! //modal ! public function beginModalSessionForWindow(win:NSWindow, call:Object, sel:String, docWin:NSWindow):NSModalSession { ! m_modalSession = new NSModalSession(NSRunResponse.NSContinues, null, win, m_modalSession, call, sel, docWin); ! if(win instanceof NSPanel) { ! win.center(); ! win.setLevel(NSWindow.NSModalPanelWindowLevel); } ! win.orderFrontRegardless(); ! if(isActive()) { ! if(win.canBecomeKeyWindow()) { ! win.makeKeyWindow(); ! } else if (win.canBecomeMainWindow()) { ! win.makeMainWindow(); ! } } ! return m_modalSession; ! } ! ! public function endModalSession(sess:NSModalSession) { ! var tmp:NSModalSession = m_modalSession; ! if (sess == null) { ! var e:NSException = NSException.exceptionWithNameReasonUserInfo ! ("NSInvalidArgumentException", "null pointer passed to endModalSession", null); ! TRACE(e); ! e.raise(); ! } ! /* Remove this session from linked list of sessions. */ ! while (tmp != null && tmp != sess) { ! tmp = tmp.previous; ! } ! if (tmp == null) { ! //very impt! can cause player to crash ! var e:NSException = NSException.exceptionWithNameReasonUserInfo ! ("NSInvalidArgumentException", "unknown session passed to endModalSession", null); ! TRACE(e); ! e.raise(); ! } ! while (m_modalSession != sess) { tmp = m_modalSession; m_modalSession = tmp.previous; if (tmp.window!=null) { ! tmp.window.setLevel(tmp.entryLevel); ! } ! } ! m_modalSession = m_modalSession.previous; ! if (sess.window != null) { sess.window.setLevel(sess.entryLevel); } ! //send callback with result, set lastrun to true ! var o = sess.callback ! o[sess.selector].call(o, sess.runState, true); ! //end posing ! m_sharedApplication.sendEvent = m_sharedApplication.originalSendEvent; ! } ! ! public function runModalSession(sess:NSModalSession):Void { ! if (sess != m_modalSession) { ! var e:NSException = NSException.exceptionWithNameReasonUserInfo ! ("NSInvalidArgumentException", "wrong session", null); ! TRACE(e); ! e.raise(); } var win = sess.window; ! win.orderFrontRegardless(); ! if(win.canBecomeKeyWindow()) { ! win.makeKeyWindow(); ! } else if (win.canBecomeMainWindow()) { ! win.makeMainWindow(); ! } ! //start posing ! m_sharedApplication.originalSendEvent = m_sharedApplication.sendEvent; ! m_sharedApplication.sendEvent = m_sharedApplication.modalSendEvent; ! } ! ! private function modalSendEvent(event:NSEvent) { ! var done = false; ! var sess:NSModalSession = m_modalSession; ! if (event != null) { ! var eventWindow:NSWindow = event.window; ! /* ! * We handle events for the session window, events for any ! * window which works when modal, and any window management ! * events. All others are ignored/discarded. ! */ ! if (!sess.isSheet && ! !( eventWindow == sess.window ! || eventWindow.worksWhenModal() == true ! || event.type == NSEvent.NSAppKitDefined)) { ! event = null; ! } else if(eventWindow == sess.docWin) { ! event = null; ! } ! //if window is a sheet, allow other windows to receive events ! } ! var o = sess.callback ! o[sess.selector].call(o, sess.runState); ! if(event!=null) { ! m_sharedApplication.originalSendEvent(event); ! } ! } ! ! public function runModalForWindow (win:NSWindow, callb:Object, sel:String, docWin:NSWindow):Void { ! var sess:NSModalSession = beginModalSessionForWindow(win, m_sharedApplication, "modalWin", docWin); ! runModalSession(sess); ! m_modalCallback = callb; ! m_modalSelector = sel; ! } ! ! private function modalWin(ret:Number, lastrun:Boolean) { ! if(!lastrun && ret!=NSRunResponse.NSContinues) { ! endModalSession(m_modalSession); ! } ! var o = m_modalCallback; ! var s = m_modalSelector; ! o[s].call(o, ret); ! } ! ! public function stopModal() { ! stopModalWithCode(NSRunResponse.NSStopped); ! } ! ! //can be both NSRunResponse or NSAlertReturn ! public function stopModalWithCode(ret):Void { ! if(m_modalSession == null) { ! var e:NSException = NSException.exceptionWithNameReasonUserInfo ! ("NSInvalidArgumentException", "not in a modal session", null); ! TRACE(e); ! e.raise(); ! } ! m_modalSession.runState = ret; ! endModalSession(m_modalSession); ! } ! ! //note: can return null ! public function modalWindow():NSWindow { ! return m_modalSession.window; ! } ! ! //this function is not found in Cocoa ! public function runningModal():Boolean { ! return (m_modalSession==null) ? false : true; ! } ! //end--modal ! ! //sheets ! public function beginSheetModalForWindowModalDelegateDidEndSelectorContextInfo ! (sheet:NSWindow, docWin:NSWindow, delegate, sel:String, ctxt:Object):Void { ! m_sheetFlags = arguments; ! runModalForWindow(sheet, this, "sheetCallback", docWin); ! } ! ! private function sheetCallback(ret:Number) { ! if(ret==NSRunResponse.NSContinues) return; ! ! var args = m_sheetFlags; ! var sheet = args[0]; ! var delegate = args[2]; ! var sel = args[3]; ! var ctxt = args[4]; ! ! if(delegate.respondsToSelector(sel)) { ! delegate[sel].call(delegate, sheet, ret, ctxt); ! } ! } ! ! public function endSheet(sheet:NSWindow):Void { ! TRACE("end sheet") ! stopModal(); ! } ! ! public function endSheetReturnCode(sheet:NSWindow, returnCode:NSRunResponse):Void { ! stopModalWithCode(returnCode); ! } ! //end--sheets private function __windowWillClose(notification:NSNotification) { |