loadingLabel = objc.IBOutlet()
def awakeFromNib(self):
- self.gen = None
+ self.runningGenerator = False
# Delegate methods
def applicationWillFinishLaunching_(self, _):
# Utility methods
def runGenerator(self, func, finish):
+ assert not self.runningGenerator
+ self.runningGenerator = True
NSApp.beginSheet_modalForWindow_modalDelegate_didEndSelector_contextInfo_(self.loadingSheet, self.window, None, None, None)
arg = (func(), finish)
self.performSelectorInBackground_withObject_(self.runGeneratorThread, arg)
def runGeneratorThread(self, (gen, finish)):
pool = NSAutoreleasePool.alloc().init()
for msg in gen:
+ if not self.runningGenerator:
+ break
self.loadingLabel.performSelectorOnMainThread_withObject_waitUntilDone_(
self.loadingLabel.setStringValue_, msg, True)
self.performSelectorOnMainThread_withObject_waitUntilDone_(
self.stopGenerator, finish, True)
+ self.runningGenerator = False
del pool
def stopGenerator(self, finish):
+ self.runningGenerator = False
NSApp.endSheet_(self.loadingSheet)
self.loadingSheet.orderOut_(self)
- if finish:
- finish()
+ finish()
@objc.IBAction
def doCancel_(self, sender):
- self.stopGenerator(None)
+ self.runningGenerator = False
@objc.IBAction
def doSync_(self, sender):