return len(playlist.children)
def outlineView_objectValueForTableColumn_byItem_(self, _, col, playlist):
- col = col.identifier() if col else "playlist"
+ if not col:
+ return
+ col = col.identifier()
if col == "selected":
selected = NSApp.delegate().playlists()
return playlist.pid in selected
- if col == None or col == "playlist":
+ if col == "icon":
+ return NSImage.imageNamed_("playlist-" + playlist.ptype)
+ if col == "playlist":
return playlist.name
def outlineView_setObjectValue_forTableColumn_byItem_(self, _, v, col, playlist):
- col = col.identifier() if col else "playlist"
+ if not col:
+ return
+ col = col.identifier()
+
if col != "selected":
return
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):