<reference key="NSTextColor" ref="888276067"/>
</object>
</object>
- <object class="NSScrollView" id="779802593">
+ <object class="NSScrollView" id="351141068">
<reference key="NSNextResponder" ref="439893737"/>
<int key="NSvFlags">268</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSClipView" id="860102363">
- <reference key="NSNextResponder" ref="779802593"/>
+ <object class="NSClipView" id="571230317">
+ <reference key="NSNextResponder" ref="351141068"/>
<int key="NSvFlags">2304</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSTableView" id="105029809">
- <reference key="NSNextResponder" ref="860102363"/>
+ <object class="NSOutlineView" id="371935982">
+ <reference key="NSNextResponder" ref="571230317"/>
<int key="NSvFlags">256</int>
- <string key="NSFrameSize">{312, 304}</string>
- <reference key="NSSuperview" ref="860102363"/>
+ <string key="NSFrameSize">{327, 338}</string>
+ <reference key="NSSuperview" ref="571230317"/>
<bool key="NSEnabled">YES</bool>
- <object class="NSTableHeaderView" key="NSHeaderView" id="800483137">
- <reference key="NSNextResponder" ref="784098487"/>
- <int key="NSvFlags">256</int>
- <string key="NSFrameSize">{312, 17}</string>
- <reference key="NSSuperview" ref="784098487"/>
- <reference key="NSTableView" ref="105029809"/>
- </object>
- <object class="_NSCornerView" key="NSCornerView" id="510111226">
- <reference key="NSNextResponder" ref="779802593"/>
- <int key="NSvFlags">256</int>
+ <object class="_NSCornerView" key="NSCornerView">
+ <nil key="NSNextResponder"/>
+ <int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{313, 0}, {16, 17}}</string>
- <reference key="NSSuperview" ref="779802593"/>
</object>
<object class="NSMutableArray" key="NSTableColumns">
<bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSTableColumn" id="819126432">
- <double key="NSWidth">6.400000e+01</double>
- <double key="NSMinWidth">1.000000e+01</double>
- <double key="NSMaxWidth">3.402823e+38</double>
+ <object class="NSTableColumn" id="50298789">
+ <string key="NSIdentifier">selected</string>
+ <double key="NSWidth">4.000000e+01</double>
+ <double key="NSMinWidth">1.600000e+01</double>
+ <double key="NSMaxWidth">1.000000e+03</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
<int key="NSCellFlags">75628032</int>
<int key="NSCellFlags2">0</int>
- <string key="NSContents">Playlist</string>
- <object class="NSFont" key="NSSupport">
+ <string key="NSContents"/>
+ <object class="NSFont" key="NSSupport" id="26">
<string key="NSName">LucidaGrande</string>
<double key="NSSize">1.100000e+01</double>
<int key="NSfFlags">3100</int>
</object>
+ <object class="NSColor" key="NSBackgroundColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC4zMzMzMzI5ODU2AA</bytes>
+ </object>
+ <object class="NSColor" key="NSTextColor" id="204738612">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">headerTextColor</string>
+ <reference key="NSColor" ref="495955423"/>
+ </object>
+ </object>
+ <object class="NSButtonCell" key="NSDataCell" id="811465044">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">131072</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="371935982"/>
+ <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags2">130</int>
+ <object class="NSCustomResource" key="NSNormalImage">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSSwitch</string>
+ </object>
+ <object class="NSButtonImageSource" key="NSAlternateImage">
+ <string key="NSImageName">NSSwitch</string>
+ </object>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ <int key="NSResizingMask">1</int>
+ <bool key="NSIsResizeable">YES</bool>
+ <bool key="NSIsEditable">YES</bool>
+ <reference key="NSTableView" ref="371935982"/>
+ </object>
+ <object class="NSTableColumn" id="296871537">
+ <string key="NSIdentifier">playlist</string>
+ <double key="NSWidth">2.710000e+02</double>
+ <double key="NSMinWidth">1.000000e+01</double>
+ <double key="NSMaxWidth">3.402823e+38</double>
+ <object class="NSTableHeaderCell" key="NSHeaderCell">
+ <int key="NSCellFlags">75628032</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="26"/>
<object class="NSColor" key="NSBackgroundColor">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<bytes key="NSWhite">MQA</bytes>
</object>
</object>
- <object class="NSColor" key="NSTextColor">
- <int key="NSColorSpace">6</int>
- <string key="NSCatalogName">System</string>
- <string key="NSColorName">headerTextColor</string>
- <reference key="NSColor" ref="495955423"/>
- </object>
+ <reference key="NSTextColor" ref="204738612"/>
</object>
- <object class="NSTextFieldCell" key="NSDataCell" id="64849697">
+ <object class="NSTextFieldCell" key="NSDataCell" id="286239095">
<int key="NSCellFlags">337772096</int>
<int key="NSCellFlags2">2048</int>
- <string key="NSContents">Text Cell</string>
+ <string key="NSContents"/>
<reference key="NSSupport" ref="822023840"/>
- <reference key="NSControlView" ref="105029809"/>
+ <reference key="NSControlView" ref="371935982"/>
<object class="NSColor" key="NSBackgroundColor" id="928689894">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
</object>
<reference key="NSTextColor" ref="888276067"/>
</object>
- <int key="NSResizingMask">3</int>
+ <int key="NSResizingMask">1</int>
<bool key="NSIsResizeable">YES</bool>
- <bool key="NSIsEditable">YES</bool>
- <reference key="NSTableView" ref="105029809"/>
+ <reference key="NSTableView" ref="371935982"/>
</object>
</object>
<double key="NSIntercellSpacingWidth">3.000000e+00</double>
</object>
</object>
<double key="NSRowHeight">1.700000e+01</double>
- <int key="NSTvFlags">-700448768</int>
+ <int key="NSTvFlags">-759169024</int>
<int key="NSColumnAutoresizingStyle">4</int>
<int key="NSDraggingSourceMaskForLocal">15</int>
<int key="NSDraggingSourceMaskForNonLocal">0</int>
<int key="NSTableViewDraggingDestinationStyle">1</int>
</object>
</object>
- <string key="NSFrame">{{1, 17}, {312, 304}}</string>
- <reference key="NSSuperview" ref="779802593"/>
- <reference key="NSNextKeyView" ref="105029809"/>
- <reference key="NSDocView" ref="105029809"/>
+ <string key="NSFrame">{{1, 1}, {327, 338}}</string>
+ <reference key="NSSuperview" ref="351141068"/>
+ <reference key="NSNextKeyView" ref="371935982"/>
+ <reference key="NSDocView" ref="371935982"/>
<reference key="NSBGColor" ref="928689894"/>
<int key="NScvFlags">4</int>
</object>
- <object class="NSScroller" id="133059945">
- <reference key="NSNextResponder" ref="779802593"/>
- <int key="NSvFlags">256</int>
- <string key="NSFrame">{{313, 17}, {15, 304}}</string>
- <reference key="NSSuperview" ref="779802593"/>
- <reference key="NSTarget" ref="779802593"/>
+ <object class="NSScroller" id="174881734">
+ <reference key="NSNextResponder" ref="351141068"/>
+ <int key="NSvFlags">-2147483392</int>
+ <string key="NSFrame">{{313, 1}, {15, 323}}</string>
+ <reference key="NSSuperview" ref="351141068"/>
+ <reference key="NSTarget" ref="351141068"/>
<string key="NSAction">_doScroller:</string>
- <double key="NSPercent">4.742590e-01</double>
+ <double key="NSPercent">9.556213e-01</double>
</object>
- <object class="NSScroller" id="1071968096">
- <reference key="NSNextResponder" ref="779802593"/>
- <int key="NSvFlags">256</int>
- <string key="NSFrame">{{1, 321}, {312, 15}}</string>
- <reference key="NSSuperview" ref="779802593"/>
+ <object class="NSScroller" id="9933412">
+ <reference key="NSNextResponder" ref="351141068"/>
+ <int key="NSvFlags">-2147483392</int>
+ <string key="NSFrame">{{1, 324}, {327, 15}}</string>
+ <reference key="NSSuperview" ref="351141068"/>
<int key="NSsFlags">1</int>
- <reference key="NSTarget" ref="779802593"/>
+ <reference key="NSTarget" ref="351141068"/>
<string key="NSAction">_doScroller:</string>
- <double key="NSPercent">5.714286e-01</double>
- </object>
- <object class="NSClipView" id="784098487">
- <reference key="NSNextResponder" ref="779802593"/>
- <int key="NSvFlags">2304</int>
- <object class="NSMutableArray" key="NSSubviews">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="800483137"/>
- </object>
- <string key="NSFrame">{{1, 0}, {312, 17}}</string>
- <reference key="NSSuperview" ref="779802593"/>
- <reference key="NSNextKeyView" ref="800483137"/>
- <reference key="NSDocView" ref="800483137"/>
- <reference key="NSBGColor" ref="928689894"/>
- <int key="NScvFlags">4</int>
+ <double key="NSPercent">9.159664e-01</double>
</object>
- <reference ref="510111226"/>
</object>
- <string key="NSFrame">{{32, 163}, {329, 337}}</string>
+ <string key="NSFrame">{{32, 160}, {329, 340}}</string>
<reference key="NSSuperview" ref="439893737"/>
- <reference key="NSNextKeyView" ref="860102363"/>
- <int key="NSsFlags">50</int>
- <reference key="NSVScroller" ref="133059945"/>
- <reference key="NSHScroller" ref="1071968096"/>
- <reference key="NSContentView" ref="860102363"/>
- <reference key="NSHeaderClipView" ref="784098487"/>
- <reference key="NSCornerView" ref="510111226"/>
+ <reference key="NSNextKeyView" ref="571230317"/>
+ <int key="NSsFlags">562</int>
+ <reference key="NSVScroller" ref="174881734"/>
+ <reference key="NSHScroller" ref="9933412"/>
+ <reference key="NSContentView" ref="571230317"/>
<bytes key="NSScrollAmts">QSAAAEEgAABBmAAAQZgAAA</bytes>
</object>
</object>
<string key="NSScreenRect">{{0, 0}, {1024, 746}}</string>
<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
</object>
- <object class="NSCustomObject" id="251429857">
- <string key="NSClassName">PlaylistTableModel</string>
+ <object class="NSCustomObject" id="354550651">
+ <string key="NSClassName">PlaylistModel</string>
</object>
</object>
<object class="IBObjectContainer" key="IBDocument.Objects">
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
- <string key="label">playlistView</string>
- <reference key="source" ref="567503449"/>
- <reference key="destination" ref="105029809"/>
+ <string key="label">outlineView</string>
+ <reference key="source" ref="354550651"/>
+ <reference key="destination" ref="371935982"/>
</object>
- <int key="connectionID">461</int>
+ <int key="connectionID">478</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">playlistModel</string>
<reference key="source" ref="567503449"/>
- <reference key="destination" ref="251429857"/>
- </object>
- <int key="connectionID">463</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBOutletConnection" key="connection">
- <string key="label">tableView</string>
- <reference key="source" ref="251429857"/>
- <reference key="destination" ref="105029809"/>
+ <reference key="destination" ref="354550651"/>
</object>
- <int key="connectionID">464</int>
+ <int key="connectionID">479</int>
</object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<reference ref="524945726"/>
<reference ref="997567970"/>
<reference ref="323617138"/>
- <reference ref="779802593"/>
<reference ref="703636579"/>
+ <reference ref="351141068"/>
</object>
<reference key="parent" ref="972006081"/>
</object>
<reference key="parent" ref="323617138"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">452</int>
- <reference key="object" ref="779802593"/>
+ <int key="objectID">467</int>
+ <reference key="object" ref="351141068"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="133059945"/>
- <reference ref="1071968096"/>
- <reference ref="105029809"/>
- <reference ref="800483137"/>
+ <reference ref="174881734"/>
+ <reference ref="9933412"/>
+ <reference ref="371935982"/>
</object>
<reference key="parent" ref="439893737"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">453</int>
- <reference key="object" ref="133059945"/>
- <reference key="parent" ref="779802593"/>
+ <int key="objectID">468</int>
+ <reference key="object" ref="174881734"/>
+ <reference key="parent" ref="351141068"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">454</int>
- <reference key="object" ref="1071968096"/>
- <reference key="parent" ref="779802593"/>
+ <int key="objectID">469</int>
+ <reference key="object" ref="9933412"/>
+ <reference key="parent" ref="351141068"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">455</int>
- <reference key="object" ref="105029809"/>
+ <int key="objectID">470</int>
+ <reference key="object" ref="371935982"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="819126432"/>
+ <reference ref="50298789"/>
+ <reference ref="296871537"/>
</object>
- <reference key="parent" ref="779802593"/>
+ <reference key="parent" ref="351141068"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">456</int>
- <reference key="object" ref="800483137"/>
- <reference key="parent" ref="779802593"/>
+ <int key="objectID">472</int>
+ <reference key="object" ref="50298789"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="811465044"/>
+ </object>
+ <reference key="parent" ref="371935982"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">462</int>
- <reference key="object" ref="251429857"/>
+ <int key="objectID">477</int>
+ <reference key="object" ref="354550651"/>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">465</int>
- <reference key="object" ref="819126432"/>
+ <int key="objectID">484</int>
+ <reference key="object" ref="811465044"/>
+ <reference key="parent" ref="50298789"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">485</int>
+ <reference key="object" ref="296871537"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="64849697"/>
+ <reference ref="286239095"/>
</object>
- <reference key="parent" ref="105029809"/>
+ <reference key="parent" ref="371935982"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">466</int>
- <reference key="object" ref="64849697"/>
- <reference key="parent" ref="819126432"/>
+ <int key="objectID">486</int>
+ <reference key="object" ref="286239095"/>
+ <reference key="parent" ref="296871537"/>
</object>
</object>
</object>
<string>436.IBPluginDependency</string>
<string>437.IBPluginDependency</string>
<string>438.IBPluginDependency</string>
- <string>452.IBPluginDependency</string>
- <string>453.IBPluginDependency</string>
- <string>454.IBPluginDependency</string>
- <string>455.IBPluginDependency</string>
- <string>456.IBPluginDependency</string>
- <string>462.IBPluginDependency</string>
+ <string>467.IBPluginDependency</string>
+ <string>468.IBPluginDependency</string>
+ <string>469.IBPluginDependency</string>
+ <string>470.IBPluginDependency</string>
+ <string>472.IBPluginDependency</string>
+ <string>477.IBPluginDependency</string>
+ <string>484.IBPluginDependency</string>
<string>56.IBPluginDependency</string>
<string>56.ImportedFromIB2</string>
<string>57.IBPluginDependency</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
</object>
</object>
<nil key="sourceID"/>
- <int key="maxID">466</int>
+ <int key="maxID">487</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
</object>
</object>
<object class="IBPartialClassDescription">
- <string key="className">PlaylistTableModel</string>
+ <string key="className">PlaylistModel</string>
<string key="superclassName">NSObject</string>
<object class="NSMutableDictionary" key="outlets">
- <string key="NS.key.0">tableView</string>
+ <string key="NS.key.0">outlineView</string>
<string key="NS.object.0">id</string>
</object>
<reference key="sourceIdentifier" ref="344772374"/>
import libsyncitunes
-class PlaylistTableModel(NSObject):
- tableView = objc.IBOutlet()
+class PlaylistModel(NSObject):
+ outlineView = objc.IBOutlet()
def awakeFromNib(self):
- self.playlists = []
- self.tableView.setDataSource_(self)
-
+ self.root = []
+ self.playlists = {}
+ self.outlineView.setDataSource_(self)
+
def setPlaylists(self, playlists):
+ self.root = []
self.playlists = playlists
- self.tableView.reloadData()
-
- def tableView_objectValueForTableColumn_row_(self, tableView, col, row):
- assert 0 <= row < len(self.playlists)
- return self.playlists[row]
-
- def numberOfRowsInTableView_(self, tableView):
- print "get number of rows", len(self.playlists)
- return len(self.playlists)
-
+ for playlist in self.playlists:
+ if playlist.parent is None:
+ self.root.append(playlist)
+ self.outlineView.reloadData()
+
+ def outlineView_child_ofItem_(self, _, childIndex, playlist):
+ if playlist == None:
+ return self.root[childIndex]
+ else:
+ return playlist.children[childIndex]
+
+ def outlineView_isItemExpandable_(self, _, playlist):
+ if playlist == None:
+ return True
+ else:
+ return len(playlist.children) > 0
+
+ def outlineView_numberOfChildrenOfItem_(self, _, playlist):
+ if playlist == None:
+ return len(self.root)
+ else:
+ return len(playlist.children)
+
+ def outlineView_objectValueForTableColumn_byItem_(self, _, col, playlist):
+ col = col.identifier() if col else "playlist"
+
+ if col == "selected":
+ selected = NSApp.delegate().playlists()
+ return playlist.pid in selected
+ if col == None or col == "playlist":
+ return playlist.name
+
+ def outlineView_setObjectValue_forTableColumn_byItem_(self, _, v, col, playlist):
+ col = col.identifier() if col else "playlist"
+
+ if col != "selected":
+ return
+ if v:
+ NSApp.delegate().addPlaylist_(playlist.pid)
+ else:
+ NSApp.delegate().delPlaylist_(playlist.pid)
class NotiPodController(NSObject):
def awakeFromNib(self):
self.performSelectorInBackground_withObject_(self.loadLibrary, None)
- print "awakeFromNib"
def finishLoading(self):
- self.playlistModel.setPlaylists(self.library.list_playlists())
+ self.playlistModel.setPlaylists(self.library.get_playlists())
self.folderPopup.addItemsWithTitles_(NSApp.delegate().folders())
def loadLibrary(self):
class NotiPodAppDelegate(NSObject):
# Delegate methods
-
def applicationWillFinishLaunching_(self, _):
- print "loading prefs"
- prefs = NSUserDefaults.standardUserDefaults()
- self._playlists = prefs.stringArrayForKey_("playlists")
- self._folders = prefs.stringArrayForKey_("folders")
- print "folders", self._folders
- print "playlists", self._playlists
+ pass
def applicationDidFinishLaunching_(self, _):
pass
def applicationWillTerminate_(self, _):
- prefs = NSUserDefaults.standardUserDefaults()
- prefs.synchronize()
+ self.prefs().synchronize()
def applicationShouldTerminateAfterLastWindowClosed_(self, _):
return True
# Public accessors
+ def prefs(self):
+ return NSUserDefaults.standardUserDefaults()
+
+ def _getArray(self, key):
+ res = self.prefs().stringArrayForKey_(key)
+ return list(res) if res else []
+
+ def _saveArray(self, key, array):
+ self.prefs().setObject_forKey_(array, key)
+
def playlists(self):
- return self._playlists
+ return self._getArray("playlists")
def folders(self):
- return self._folders or []
+ return self._getArray("folders")
def addFolder_(self, folder):
- self._folders.insert(0, folder)
+ folders = self.folders()
+ folders.append(folder)
+ self._saveArray("folders", folders)
+
+ def delPlaylist_(self, playlist):
+ playlists = self.playlists()
+ playlists.remove(playlist)
+ self._saveArray("playlists", playlists)
- def hasPlaylist_(self, playlist):
- return playlist in self._playlists
-
- def removePlaylist_(self, playlist):
- self._playlists.remove(playlist)
-
def addPlaylist_(self, playlist):
- self._playlists.append(playlist)
+ playlists = self.playlists()
+ playlists.append(playlist)
+ self._saveArray("playlists", playlists)