mirror of
https://github.com/SoongNoonien/mpdevil.git
synced 2023-08-10 21:12:44 +03:00
simplified internal structure of Browser
This commit is contained in:
parent
9aa69e4392
commit
3b4af8f6a9
@ -1395,12 +1395,12 @@ class GenreSelect(Gtk.ComboBoxText):
|
|||||||
def deactivate(self):
|
def deactivate(self):
|
||||||
self.set_active(0)
|
self.set_active(0)
|
||||||
|
|
||||||
def clear(self, *args):
|
def _clear(self, *args):
|
||||||
self.handler_block(self._changed)
|
self.handler_block(self._changed)
|
||||||
self.remove_all()
|
self.remove_all()
|
||||||
self.handler_unblock(self._changed)
|
self.handler_unblock(self._changed)
|
||||||
|
|
||||||
def get_value(self):
|
def get_selected_genre(self):
|
||||||
if self.get_active() == 0:
|
if self.get_active() == 0:
|
||||||
return None
|
return None
|
||||||
else:
|
else:
|
||||||
@ -1424,7 +1424,7 @@ class GenreSelect(Gtk.ComboBoxText):
|
|||||||
|
|
||||||
def _on_disconnected(self, *args):
|
def _on_disconnected(self, *args):
|
||||||
self.set_sensitive(False)
|
self.set_sensitive(False)
|
||||||
self.clear()
|
self._clear()
|
||||||
|
|
||||||
def _on_reconnected(self, *args):
|
def _on_reconnected(self, *args):
|
||||||
self._refresh()
|
self._refresh()
|
||||||
@ -1476,7 +1476,7 @@ class ArtistWindow(FocusFrame):
|
|||||||
self._treeview.connect("row-activated", self._on_row_activated)
|
self._treeview.connect("row-activated", self._on_row_activated)
|
||||||
self._settings.connect("changed::use-album-artist", self._refresh)
|
self._settings.connect("changed::use-album-artist", self._refresh)
|
||||||
self._settings.connect("changed::show-initials", self._on_show_initials_settings_changed)
|
self._settings.connect("changed::show-initials", self._on_show_initials_settings_changed)
|
||||||
self._client.emitter.connect("disconnected", self.clear)
|
self._client.emitter.connect("disconnected", self._clear)
|
||||||
self._client.emitter.connect("reconnected", self._refresh)
|
self._client.emitter.connect("reconnected", self._refresh)
|
||||||
self._client.emitter.connect("update", self._refresh)
|
self._client.emitter.connect("update", self._refresh)
|
||||||
self._genre_select.connect("genre_changed", self._refresh)
|
self._genre_select.connect("genre_changed", self._refresh)
|
||||||
@ -1484,7 +1484,7 @@ class ArtistWindow(FocusFrame):
|
|||||||
self.set_widget(self._treeview)
|
self.set_widget(self._treeview)
|
||||||
self.add(scroll)
|
self.add(scroll)
|
||||||
|
|
||||||
def clear(self, *args):
|
def _clear(self, *args):
|
||||||
self._store.clear()
|
self._store.clear()
|
||||||
|
|
||||||
def select(self, artist):
|
def select(self, artist):
|
||||||
@ -1493,24 +1493,23 @@ class ArtistWindow(FocusFrame):
|
|||||||
path=Gtk.TreePath(i)
|
path=Gtk.TreePath(i)
|
||||||
if self._store[path][0] == artist:
|
if self._store[path][0] == artist:
|
||||||
self._treeview.set_cursor(path, None, False)
|
self._treeview.set_cursor(path, None, False)
|
||||||
if self.get_selected_artists() == [artist]:
|
if self.get_selected_artists()[1] != [artist]:
|
||||||
self._treeview.set_cursor(path, None, False)
|
|
||||||
else:
|
|
||||||
self._treeview.row_activated(path, self._column_name)
|
self._treeview.row_activated(path, self._column_name)
|
||||||
break
|
break
|
||||||
|
|
||||||
def get_selected_artists(self):
|
def get_selected_artists(self):
|
||||||
artists=[]
|
artists=[]
|
||||||
|
genre=self._genre_select.get_selected_genre()
|
||||||
if self._store[Gtk.TreePath(0)][1] == Pango.Weight.BOLD:
|
if self._store[Gtk.TreePath(0)][1] == Pango.Weight.BOLD:
|
||||||
for row in self._store:
|
for row in self._store:
|
||||||
artists.append(row[0])
|
artists.append(row[0])
|
||||||
return artists[1:]
|
return (genre, artists[1:])
|
||||||
else:
|
else:
|
||||||
for row in self._store:
|
for row in self._store:
|
||||||
if row[1] == Pango.Weight.BOLD:
|
if row[1] == Pango.Weight.BOLD:
|
||||||
artists.append(row[0])
|
artists.append(row[0])
|
||||||
break
|
break
|
||||||
return artists
|
return (genre, artists)
|
||||||
|
|
||||||
def highlight_selected(self):
|
def highlight_selected(self):
|
||||||
for path, row in enumerate(self._store):
|
for path, row in enumerate(self._store):
|
||||||
@ -1524,13 +1523,13 @@ class ArtistWindow(FocusFrame):
|
|||||||
|
|
||||||
def _refresh(self, *args):
|
def _refresh(self, *args):
|
||||||
self._selection.set_mode(Gtk.SelectionMode.NONE)
|
self._selection.set_mode(Gtk.SelectionMode.NONE)
|
||||||
self.clear()
|
self._clear()
|
||||||
if self._settings.get_artist_type() == "albumartist":
|
if self._settings.get_artist_type() == "albumartist":
|
||||||
self._column_name.set_title(_("Album Artist"))
|
self._column_name.set_title(_("Album Artist"))
|
||||||
else:
|
else:
|
||||||
self._column_name.set_title(_("Artist"))
|
self._column_name.set_title(_("Artist"))
|
||||||
self._store.append([_("all artists"), Pango.Weight.BOOK, "", Pango.Weight.BOOK])
|
self._store.append([_("all artists"), Pango.Weight.BOOK, "", Pango.Weight.BOOK])
|
||||||
genre=self._genre_select.get_value()
|
genre=self._genre_select.get_selected_genre()
|
||||||
if genre is None:
|
if genre is None:
|
||||||
artists=self._client.wrapped_call("comp_list", self._settings.get_artist_type())
|
artists=self._client.wrapped_call("comp_list", self._settings.get_artist_type())
|
||||||
else:
|
else:
|
||||||
@ -1546,6 +1545,7 @@ class ArtistWindow(FocusFrame):
|
|||||||
except:
|
except:
|
||||||
self._store.append([artist, Pango.Weight.BOOK, "", Pango.Weight.BOOK])
|
self._store.append([artist, Pango.Weight.BOOK, "", Pango.Weight.BOOK])
|
||||||
self._selection.set_mode(Gtk.SelectionMode.SINGLE)
|
self._selection.set_mode(Gtk.SelectionMode.SINGLE)
|
||||||
|
self.emit("artists_changed")
|
||||||
|
|
||||||
def _on_row_activated(self, widget, path, view_column):
|
def _on_row_activated(self, widget, path, view_column):
|
||||||
for row in self._store: # reset bold text
|
for row in self._store: # reset bold text
|
||||||
@ -1557,13 +1557,12 @@ class ArtistWindow(FocusFrame):
|
|||||||
self._column_initials.set_visible(self._settings.get_boolean("show-initials"))
|
self._column_initials.set_visible(self._settings.get_boolean("show-initials"))
|
||||||
|
|
||||||
class AlbumWindow(FocusFrame):
|
class AlbumWindow(FocusFrame):
|
||||||
def __init__(self, client, settings, genre_select, artist_window, window):
|
def __init__(self, client, settings, artist_window, window):
|
||||||
FocusFrame.__init__(self)
|
FocusFrame.__init__(self)
|
||||||
|
|
||||||
# adding vars
|
# adding vars
|
||||||
self._settings=settings
|
self._settings=settings
|
||||||
self._client=client
|
self._client=client
|
||||||
self._genre_select=genre_select
|
|
||||||
self._artist_window=artist_window
|
self._artist_window=artist_window
|
||||||
self._window=window
|
self._window=window
|
||||||
self._button_event=(None, None)
|
self._button_event=(None, None)
|
||||||
@ -1593,30 +1592,30 @@ class AlbumWindow(FocusFrame):
|
|||||||
self._iconview.connect("button-release-event", self._on_button_release_event)
|
self._iconview.connect("button-release-event", self._on_button_release_event)
|
||||||
self._iconview.connect("button-press-event", self._on_button_press_event)
|
self._iconview.connect("button-press-event", self._on_button_press_event)
|
||||||
self._key_press_event=self.connect("key-press-event", self._on_key_press_event)
|
self._key_press_event=self.connect("key-press-event", self._on_key_press_event)
|
||||||
self._client.emitter.connect("update", self.clear)
|
self._client.emitter.connect("update", self._clear)
|
||||||
self._client.emitter.connect("disconnected", self.clear)
|
self._client.emitter.connect("disconnected", self._clear)
|
||||||
self._settings.connect("changed::show-album-view-tooltips", self._tooltip_settings)
|
self._settings.connect("changed::show-album-view-tooltips", self._tooltip_settings)
|
||||||
self._settings.connect("changed::sort-albums-by-year", self._sort_settings)
|
self._settings.connect("changed::sort-albums-by-year", self._sort_settings)
|
||||||
self._settings.connect("changed::album-cover", self._on_settings_changed)
|
self._settings.connect("changed::album-cover", self._on_settings_changed)
|
||||||
self._settings.connect("changed::use-album-artist", self.clear)
|
self._settings.connect("changed::use-album-artist", self._clear)
|
||||||
self.connect("done", self._on_done)
|
self.connect("done", self._on_done)
|
||||||
self._genre_select.connect("genre_changed", self.clear)
|
|
||||||
self._artist_window.connect("artists_changed", self._refresh)
|
self._artist_window.connect("artists_changed", self._refresh)
|
||||||
|
|
||||||
self.set_widget(self._iconview)
|
self.set_widget(self._iconview)
|
||||||
self.add(scroll)
|
self.add(scroll)
|
||||||
|
|
||||||
def clear(self, *args):
|
def _workaround_clear(self):
|
||||||
def callback():
|
|
||||||
self._store.clear()
|
self._store.clear()
|
||||||
# workaround (scrollbar still visible after clear)
|
# workaround (scrollbar still visible after clear)
|
||||||
self._iconview.set_model(None)
|
self._iconview.set_model(None)
|
||||||
self._iconview.set_model(self._store)
|
self._iconview.set_model(self._store)
|
||||||
|
|
||||||
|
def _clear(self, *args):
|
||||||
if self._done:
|
if self._done:
|
||||||
callback()
|
self._workaround_clear()
|
||||||
elif not callback in self._pending:
|
elif not self._clear in self._pending:
|
||||||
self.stop_flag=True
|
self.stop_flag=True
|
||||||
self._pending.append(self.clear)
|
self._pending.append(self._clear)
|
||||||
|
|
||||||
def scroll_to_selected_album(self):
|
def scroll_to_selected_album(self):
|
||||||
def callback():
|
def callback():
|
||||||
@ -1637,7 +1636,7 @@ class AlbumWindow(FocusFrame):
|
|||||||
break
|
break
|
||||||
if self._done:
|
if self._done:
|
||||||
callback()
|
callback()
|
||||||
elif not callback in self._pending:
|
elif not self.scroll_to_selected_album in self._pending:
|
||||||
self._pending.append(self.scroll_to_selected_album)
|
self._pending.append(self.scroll_to_selected_album)
|
||||||
|
|
||||||
def _tooltip_settings(self, *args):
|
def _tooltip_settings(self, *args):
|
||||||
@ -1658,8 +1657,8 @@ class AlbumWindow(FocusFrame):
|
|||||||
|
|
||||||
def _refresh(self, *args):
|
def _refresh(self, *args):
|
||||||
def callback():
|
def callback():
|
||||||
GLib.idle_add(self._store.clear)
|
GLib.idle_add(self._workaround_clear)
|
||||||
artists=self._artist_window.get_selected_artists()
|
genre, artists=self._artist_window.get_selected_artists()
|
||||||
# show artist names if all albums are shown
|
# show artist names if all albums are shown
|
||||||
if len(artists) > 1:
|
if len(artists) > 1:
|
||||||
self._iconview.set_markup_column(2)
|
self._iconview.set_markup_column(2)
|
||||||
@ -1667,7 +1666,6 @@ class AlbumWindow(FocusFrame):
|
|||||||
self._iconview.set_markup_column(1)
|
self._iconview.set_markup_column(1)
|
||||||
# prepare albmus list (run all mpd related commands)
|
# prepare albmus list (run all mpd related commands)
|
||||||
albums=[]
|
albums=[]
|
||||||
genre=self._genre_select.get_value()
|
|
||||||
artist_type=self._settings.get_artist_type()
|
artist_type=self._settings.get_artist_type()
|
||||||
for artist in artists:
|
for artist in artists:
|
||||||
try: # client cloud meanwhile disconnect
|
try: # client cloud meanwhile disconnect
|
||||||
@ -1727,7 +1725,7 @@ class AlbumWindow(FocusFrame):
|
|||||||
if self._done:
|
if self._done:
|
||||||
self._done=False
|
self._done=False
|
||||||
callback()
|
callback()
|
||||||
elif not callback in self._pending:
|
elif not self._refresh in self._pending:
|
||||||
self.stop_flag=True
|
self.stop_flag=True
|
||||||
self._pending.append(self._refresh)
|
self._pending.append(self._refresh)
|
||||||
|
|
||||||
@ -1833,7 +1831,7 @@ class Browser(Gtk.Paned):
|
|||||||
self.genre_select=GenreSelect(self._client)
|
self.genre_select=GenreSelect(self._client)
|
||||||
self._artist_window=ArtistWindow(self._client, self._settings, self.genre_select)
|
self._artist_window=ArtistWindow(self._client, self._settings, self.genre_select)
|
||||||
self._search_window=SearchWindow(self._client)
|
self._search_window=SearchWindow(self._client)
|
||||||
self._album_window=AlbumWindow(self._client, self._settings, self.genre_select, self._artist_window, window)
|
self._album_window=AlbumWindow(self._client, self._settings, self._artist_window, window)
|
||||||
|
|
||||||
# connect
|
# connect
|
||||||
self.back_to_album_button.connect("clicked", self.back_to_album)
|
self.back_to_album_button.connect("clicked", self.back_to_album)
|
||||||
@ -1892,12 +1890,12 @@ class Browser(Gtk.Paned):
|
|||||||
artist=""
|
artist=""
|
||||||
# deactivate genre filter to show all artists (if needed)
|
# deactivate genre filter to show all artists (if needed)
|
||||||
try:
|
try:
|
||||||
if song['genre'] != self.genre_select.get_value():
|
if song['genre'] != self.genre_select.get_selected_genre():
|
||||||
self.genre_select.deactivate()
|
self.genre_select.deactivate()
|
||||||
except:
|
except:
|
||||||
self.genre_select.deactivate()
|
self.genre_select.deactivate()
|
||||||
# select artist
|
# select artist
|
||||||
if len(self._artist_window.get_selected_artists()) <= 1: # one artist selected
|
if len(self._artist_window.get_selected_artists()[1]) <= 1: # one artist selected
|
||||||
self._artist_window.select(artist)
|
self._artist_window.select(artist)
|
||||||
else: # all artists selected
|
else: # all artists selected
|
||||||
self.search_button.set_active(False)
|
self.search_button.set_active(False)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user