Advertisement
Guest User

PyGObject3 TreeModel

a guest
Jun 15th, 2012
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.04 KB | None | 0 0
  1. class CollectionModel(GObject.GObject, Gtk.TreeModel):
  2.     NUM_COL = 4
  3.     (ROWREF_ARTIST, ROWREF_ALBUM, ROWREF_DISC, ROWREF_SONG) = (1,2,3,4)
  4.     COL_TYPES = (GObject.TYPE_STRING,
  5.              GObject.TYPE_STRING,
  6.              GObject.TYPE_STRING,
  7.              GObject.TYPE_STRING)
  8.     COL_NAMES = ("name",
  9.              "file",
  10.              "icon",
  11.              "sort")
  12.     # rowrefs are tuples with 2 elements:
  13.     #   1 = type (Artist, Album, Disc, Song)
  14.     #       2 = ID (if type is ROWREF_DISC, ID is a tuple of albumid and discid)
  15.     def __init__(self, db):
  16.         GObject.GObject.__init__(self)
  17.         self.db = db
  18.  
  19.     def append(self, treeiter, data):
  20.         # I don't need append()
  21.         pass
  22.  
  23.     def do_get_column_names(self):
  24.         return self.COL_NAMES[:]
  25.  
  26.     def do_get_flags(self):
  27.         return 0
  28.  
  29.     def do_get_n_columns(self):
  30.         return len(self.COL_TYPES)
  31.  
  32.     def do_get_column_type(self, n):
  33.         return CollectionModel.COL_TYPES[n]
  34.  
  35.     def do_get_iter(self, path):
  36.         path = path.get_indices()
  37.         rowrefid = self.db.get_id_by_path(path)
  38.         if not path or isinstance(path,int) or len(path) == 1:
  39.             return (CollectionModel.ROWREF_ARTIST, rowrefid)
  40.         elif len(path) == 2:
  41.             return (CollectionModel.ROWREF_ALBUM, rowrefid)
  42.         elif len(path) == 3:
  43.             if isinstance(rowref,tuple):
  44.                 return (CollectionModel.ROWREF_DISC, rowrefid)
  45.             else:
  46.                 return (CollectionModel.ROWREF_SONG, rowrefid)
  47.         elif len(path) == 4:
  48.             return (CollectionModel.ROWREF_SONG, rowrefid)
  49.         return 0
  50.  
  51.     def do_get_path(self, rowref):
  52.         if not rowref:
  53.             return ()
  54.         elif rowref[0] == CollectionModel.ROWREF_ARTIST:
  55.             artistpos = self.db.get_artist_position_by_id(rowref[1])
  56.             if artistpos:
  57.                 return (artistpos,)
  58.         elif rowref[0] == CollectionModel.ROWREF_ALBUM:
  59.             albumpos = self.db.get_albuetm_position_by_id(rowref[1])
  60.             if albumpos:
  61.                 artistpos = self.db.get_artist_position_by_album_id(rowref[1])
  62.                 if artistpos:
  63.                     return (artistpos, albumpos)
  64.         elif rowref[0] == CollectionModel.ROWREF_DISC:
  65.             discpos = (rowref[1][1]-1)
  66.             if discpos:
  67.                 albumpos = self.db.get_album_position_by_id(rowref[1][1])
  68.                 if albumpos:
  69.                     artistpos = self.db.get_artist_position_by_album_id(rowref[1])
  70.                     if artistpos:
  71.                         return (artistpos, albumpos, discpos)
  72.         elif rowref[0] == CollectionModel.ROWREF_SONG:
  73.             songpos = self.db.get_song_position_by_id(rowref[1])
  74.             if songpos:
  75.                 discid = self.db.get_disc_by_song_id(rowref[1])
  76.                 albumpos = self.db.get_album_position_by_song_id(rowref[1])
  77.                 if albumpos:
  78.                     artistpos = self.db.get_artist_song_by_id(rowref[1])
  79.                     if artistpos:
  80.                         if discid:
  81.                             return (artistpos, albumpos, (discpos-1), songpos)
  82.                         else:
  83.                             return (artistpos, albumpos, songpos)
  84.         return ()
  85.  
  86.     def do_get_value(self, rowref, column):
  87.         print("do_get_value",rowref)
  88.         if not rowref or not rowref:
  89.             print("Damn it, something went wrong!")
  90.             pass # This should NEVER happen
  91.         elif rowref[0] == CollectionModel.ROWREF_ARTIST:
  92.             if column == 0:
  93.                 return self.db.get_artist_name_by_id(rowref[1])
  94.             elif column == 1:
  95.                 return ""
  96.             elif column == 2:
  97.                 return str(Gtk.STOCK_ORIENTATION_PORTRAIT)
  98.             elif column == 2:
  99.                 return ""
  100.         elif rowref[0] == CollectionModel.ROWREF_ALBUM:
  101.             if column == 0:
  102.                 return self.db.get_album_name_by_id(rowref[1])
  103.             elif column == 1:
  104.                 return ""
  105.             elif column == 2:
  106.                 return str(Gtk.STOCK_CDROM)
  107.             elif column == 2:
  108.                 return ""
  109.         elif rowref[0] == CollectionModel.ROWREF_DISC:
  110.             if column == 0:
  111.                 return "CD %s" % str(rowref[1][1])
  112.             elif column == 1:
  113.                 return ""
  114.             elif column == 2:
  115.                 return ""
  116.             elif column == 2:
  117.                 return ""
  118.         elif rowref[0] == CollectionModel.ROWREF_SONG:
  119.             if column == 0:
  120.                 return self.db.get_song_name_by_id(rowref[1])
  121.             elif column == 1:
  122.                 return self.db.get_song_filename_by_id(rowref[1])
  123.             elif column == 2:
  124.                 return ""
  125.             elif column == 3:
  126.                 return ""
  127.  
  128.         raise InvalidColumnError(column)
  129.         return "FUCK"
  130.  
  131.     def do_iter_next(self, rowref):
  132.         if not rowref:
  133.             return None
  134.         return (rowref[0], self.db.get_next(rowref))
  135.  
  136.     def do_iter_children(self, rowref):
  137.         """if not rowref or not rowref:
  138.             return self.db.get_nth_artist(0)
  139.         elif rowref[0] == CollectionModel.ROWREF_ARTIST:
  140.             albumid = self.db.get_nth_album_by_artist_id(rowref[1])
  141.             if albumid:
  142.                 return (CollectionModel.ROWREF_ALBUM, albumid)
  143.         elif rowref[0] == CollectionModel.ROWREF_ALBUM:
  144.             discid = self.db.get_nth_disc_by_album_id(rowref[1])
  145.             if discid:
  146.                 return (CollectionModel.ROWREF_DISC, discid)
  147.             else:
  148.                 songid = self.db.get_nth_song_by_album_id(rowref[1])
  149.                 if songid:
  150.                     return (CollectionModel.ROWREF_SONG, songid)
  151.         elif rowref[0] == CollectionModel.ROWREF_DISC:
  152.             songid = self.db.get_nth_song_by_album_id(rowref[1][0], rowref[1][1])
  153.             if songid:
  154.                 return (CollectionModel.ROWREF_SONG, songid)
  155.         return None"""
  156.         return self.do_iter_nth_child(self, rowref, 0)
  157.  
  158.     def do_iter_has_child(self, rowref):
  159.         if not rowref:
  160.             return True
  161.         elif rowref[0] == CollectionModel.ROWREF_SONG:
  162.             return False
  163.         else:
  164.             return True
  165.  
  166.     def do_iter_n_children(self, rowref):
  167.         if not rowref:
  168.             return self.db.get_artist_number()
  169.         elif rowref[0] == CollectionModel.ROWREF_ARTIST:
  170.             return self.db.get_album_number_by_artist_id(rowref[1])
  171.         elif rowref[0] == CollectionModel.ROWREF_ALBUM:
  172.             discnumber = self.db.get_disc_number_by_album_id(rowref[1])
  173.             if discnumber:
  174.                 return discnumber
  175.             else:
  176.                 return self.db.get_song_number_by_album_id(rowref[1])
  177.         elif rowref[0] == CollectionModel.ROWREF_DISC:
  178.             return self.db.get_song_number_by_album_id(rowref[1][0], rowref[1][1])
  179.         return 0
  180.  
  181.     def do_iter_nth_child(self, rowref, n):
  182.         if not rowref or not rowref:
  183.             artistid = self.db.get_nth_artist(n)
  184.             if artistid:
  185.                 return (CollectionModel.ROWREF_ARTIST, artistid)
  186.         elif rowref[0] == CollectionModel.ROWREF_ARTIST:
  187.             albumid = self.db.get_nth_album_by_artist_id(n, rowref[1])
  188.             if albumid:
  189.                 return (CollectionModel.ROWREF_ALBUM, albumid)
  190.         elif rowref[0] == CollectionModel.ROWREF_ALBUM:
  191.             discid = self.db.get_nth_disc_by_album_id(n, rowref[1])
  192.             if discid:
  193.                 return (CollectionModel.ROWREF_DISC, (albumid, discid))
  194.             else:
  195.                 songid = self.db.get_nth_song_by_album_id(n, rowref[1])
  196.                 if songid:
  197.                     return (CollectionModel.ROWREF_SONG, songid)
  198.         elif rowref[0] == CollectionModel.ROWREF_DISC:
  199.             songid = self.db.get_nth_song_by_album_id(n, rowref[1][0], rowref[1][1])
  200.             if songid:
  201.                 return (CollectionModel.ROWREF_SONG, songid)
  202.         return None
  203.  
  204.     def do_iter_parent(self, rowref):
  205.         if not rowref:
  206.             return None
  207.         if rowref[0] == CollectionModel.ROWREF_SONG:
  208.             albumid = self.db.get_album_by_song_id(rowref[1])
  209.             discid = self.db.get_disc_by_song_id(rowref[1])
  210.             if discid:
  211.                 return (CollectionModel.ROWREF_DISC, (albumid, discid))
  212.             else:
  213.                 return (CollectionModel.ROWREF_ALBUM, albumid)
  214.         elif rowref[0] == CollectionModel.ROWREF_ALBUM:
  215.             return (CollectionModel.ROWREF_ARTIST, self.db.get_artist_by_album_id(rowref[1]))
  216.         elif rowref[0] == CollectionModel.ROWREF_DISC:
  217.             return (CollectionModel.ROWREF_ALBUM, rowref[1][0])
  218.         return None
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement