def __init__(self, app, list_name): super().__init__() self.app = app self.list_name = list_name # name, artist, album, rid, artistid, albumid self.liststore = Gtk.ListStore(str, str, str, int, int, int) self.treeview = Gtk.TreeView(model=self.liststore) self.selection = self.treeview.get_selection() self.treeview.set_search_column(0) self.treeview.props.headers_clickable = True self.treeview.props.headers_visible = True self.treeview.props.reorderable = True self.treeview.props.rules_hint = True self.treeview.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE) self.treeview.enable_model_drag_source(Gdk.ModifierType.BUTTON1_MASK, DRAG_TARGETS, DRAG_ACTIONS) self.treeview.connect('drag-data-get', self.on_drag_data_get) self.treeview.enable_model_drag_dest(DRAG_TARGETS, DRAG_ACTIONS) self.treeview.connect('drag-data-received', self.on_drag_data_received) self.treeview.connect('row_activated', self.on_treeview_row_activated) self.add(self.treeview) song_cell = Gtk.CellRendererText() song_col = TreeViewColumnText(_('Title'), song_cell, text=0) self.treeview.append_column(song_col) artist_cell = Gtk.CellRendererText() artist_col = TreeViewColumnText(_('Aritst'), artist_cell, text=1) self.treeview.append_column(artist_col) album_cell = Gtk.CellRendererText() album_col = TreeViewColumnText(_('Album'), album_cell, text=2) self.treeview.append_column(album_col) delete_cell = Gtk.CellRendererPixbuf(icon_name='user-trash-symbolic') self.delete_col = Widgets.TreeViewColumnIcon(_('Delete'), delete_cell) self.treeview.append_column(self.delete_col) self.treeview.connect('key-press-event', self.on_treeview_key_pressed) self.treeview.connect('button-press-event', self.on_treeview_button_pressed) self.treeview.connect('button-release-event', self.on_treeview_button_released) self.popup_menu = Gtk.Menu() save_as_menu = Gtk.MenuItem(_('Save As..')) save_as_menu.connect('activate', self.on_save_as_menu_activated) self.popup_menu.append(save_as_menu) sep = Gtk.SeparatorMenuItem() self.popup_menu.append(sep) delete_song_menu = Gtk.MenuItem(_('Delete from Playlist')) delete_song_menu.connect('activate', self.on_delete_song_menu_activated) self.popup_menu.append(delete_song_menu) delete_cache_menu = Gtk.MenuItem(_('Delete Local Cache')) delete_cache_menu.connect('activate', self.on_delete_cache_menu_activated) self.popup_menu.append(delete_cache_menu)