diff --git a/CMakeModules/FindCLucene.cmake b/CMakeModules/FindCLucene.cmake index 8b9311f13..873693d8c 100644 --- a/CMakeModules/FindCLucene.cmake +++ b/CMakeModules/FindCLucene.cmake @@ -41,6 +41,7 @@ SET(TRIAL_LIBRARY_PATHS /sw/lib${LIB_SUFFIX} /usr/pkg/lib${LIB_SUFFIX} /usr/lib64 + /usr/lib/${CMAKE_LIBRARY_ARCHITECTURE} ) SET(TRIAL_INCLUDE_PATHS $ENV{CLUCENE_HOME}/include diff --git a/CMakeModules/NSIS.template.in b/CMakeModules/NSIS.template.in index f3db07863..6c99ad1ea 100644 --- a/CMakeModules/NSIS.template.in +++ b/CMakeModules/NSIS.template.in @@ -309,6 +309,7 @@ Section "Tomahawk Player" SEC_TOMAHAWK_PLAYER File "${QT_DLL_PATH}\QtUiTools4.dll" File "${QT_DLL_PATH}\QtWebKit4.dll" File "${QT_DLL_PATH}\QtXml4.dll" + File "${QT_DLL_PATH}\QtSvg4.dll" ;SQLite driver SetOutPath "$INSTDIR\sqldrivers" @@ -319,6 +320,7 @@ Section "Tomahawk Player" SEC_TOMAHAWK_PLAYER SetOutPath "$INSTDIR\imageformats" File "${IMAGEFORMATS_DLL_PATH}\qgif4.dll" File "${IMAGEFORMATS_DLL_PATH}\qjpeg4.dll" + File "${IMAGEFORMATS_DLL_PATH}\qsvg4.dll" SetOutPath "$INSTDIR" ;Cygwin/c++ stuff diff --git a/admin/mac/macdeploy.py b/admin/mac/macdeploy.py index 144f46692..888b8b8ca 100755 --- a/admin/mac/macdeploy.py +++ b/admin/mac/macdeploy.py @@ -195,6 +195,7 @@ QT_PLUGINS = [ 'imageformats/libqgif.dylib', 'imageformats/libqico.dylib', 'imageformats/libqjpeg.dylib', + 'imageformats/libqsvg.dylib', 'imageformats/libqmng.dylib', ] diff --git a/data/images/account-none.svg b/data/images/account-none.svg new file mode 100644 index 000000000..50ed8b5dc --- /dev/null +++ b/data/images/account-none.svg @@ -0,0 +1,16 @@ + + + account-none + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/account-offline.svg b/data/images/account-offline.svg new file mode 100644 index 000000000..5dc8f1be7 --- /dev/null +++ b/data/images/account-offline.svg @@ -0,0 +1,16 @@ + + + account-offline + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/account-online.svg b/data/images/account-online.svg new file mode 100644 index 000000000..ca2362557 --- /dev/null +++ b/data/images/account-online.svg @@ -0,0 +1,11 @@ + + + account-online + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + \ No newline at end of file diff --git a/data/images/account-settings.svg b/data/images/account-settings.svg new file mode 100644 index 000000000..daa394fc3 --- /dev/null +++ b/data/images/account-settings.svg @@ -0,0 +1,14 @@ + + + account-settings + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + \ No newline at end of file diff --git a/data/images/add-contact.svg b/data/images/add-contact.svg new file mode 100644 index 000000000..11e81697e --- /dev/null +++ b/data/images/add-contact.svg @@ -0,0 +1,20 @@ + + + add-contact + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/add.svg b/data/images/add.svg new file mode 100644 index 000000000..7ab0712d3 --- /dev/null +++ b/data/images/add.svg @@ -0,0 +1,10 @@ + + + add + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + \ No newline at end of file diff --git a/data/images/advanced-settings.svg b/data/images/advanced-settings.svg new file mode 100644 index 000000000..a7e1c2bb0 --- /dev/null +++ b/data/images/advanced-settings.svg @@ -0,0 +1,16 @@ + + + advanced-settings + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/album-icon.svg b/data/images/album-icon.svg new file mode 100644 index 000000000..11688c082 --- /dev/null +++ b/data/images/album-icon.svg @@ -0,0 +1,20 @@ + + + album-icon + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/album-placeholder-grid.svg b/data/images/album-placeholder-grid.svg new file mode 100644 index 000000000..0e6e9cac1 --- /dev/null +++ b/data/images/album-placeholder-grid.svg @@ -0,0 +1,21 @@ + + + album-placeholder-grid + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/apply-check.svg b/data/images/apply-check.svg new file mode 100644 index 000000000..e7d141f7e --- /dev/null +++ b/data/images/apply-check.svg @@ -0,0 +1,12 @@ + + + Slice 1 + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + \ No newline at end of file diff --git a/data/images/arrow-down-double.svg b/data/images/arrow-down-double.svg new file mode 100644 index 000000000..8653d24fe --- /dev/null +++ b/data/images/arrow-down-double.svg @@ -0,0 +1,11 @@ + + + arrow-up-double + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + \ No newline at end of file diff --git a/data/images/arrow-right-double.svg b/data/images/arrow-right-double.svg new file mode 100644 index 000000000..5163a76fe --- /dev/null +++ b/data/images/arrow-right-double.svg @@ -0,0 +1,11 @@ + + + arrow-right-double + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + \ No newline at end of file diff --git a/data/images/arrow-up-double.svg b/data/images/arrow-up-double.svg new file mode 100644 index 000000000..5cc0c9e07 --- /dev/null +++ b/data/images/arrow-up-double.svg @@ -0,0 +1,11 @@ + + + arrow-up-double + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + \ No newline at end of file diff --git a/data/images/artist-icon.svg b/data/images/artist-icon.svg new file mode 100644 index 000000000..5226f31d9 --- /dev/null +++ b/data/images/artist-icon.svg @@ -0,0 +1,12 @@ + + + artist-icon + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + \ No newline at end of file diff --git a/data/images/artist-placeholder-grid.svg b/data/images/artist-placeholder-grid.svg new file mode 100644 index 000000000..b80659ed5 --- /dev/null +++ b/data/images/artist-placeholder-grid.svg @@ -0,0 +1,39 @@ + + + artist-placeholder + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/automatic-playlist.svg b/data/images/automatic-playlist.svg new file mode 100644 index 000000000..83a2c11f3 --- /dev/null +++ b/data/images/automatic-playlist.svg @@ -0,0 +1,16 @@ + + + automatic-playlist + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/back-pressed.svg b/data/images/back-pressed.svg new file mode 100644 index 000000000..5ed9fdb96 --- /dev/null +++ b/data/images/back-pressed.svg @@ -0,0 +1,17 @@ + + + back-pressed + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/back-rest.svg b/data/images/back-rest.svg new file mode 100644 index 000000000..0b19e2b1d --- /dev/null +++ b/data/images/back-rest.svg @@ -0,0 +1,17 @@ + + + back-rest + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/back.svg b/data/images/back.svg new file mode 100644 index 000000000..75b0295cb --- /dev/null +++ b/data/images/back.svg @@ -0,0 +1,16 @@ + + + back + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/cancel.svg b/data/images/cancel.svg new file mode 100644 index 000000000..4354ac718 --- /dev/null +++ b/data/images/cancel.svg @@ -0,0 +1,14 @@ + + + cancel + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + \ No newline at end of file diff --git a/data/images/charts.svg b/data/images/charts.svg new file mode 100644 index 000000000..24e209fa0 --- /dev/null +++ b/data/images/charts.svg @@ -0,0 +1,12 @@ + + + charts + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + \ No newline at end of file diff --git a/data/images/close.svg b/data/images/close.svg new file mode 100644 index 000000000..0558bcdff --- /dev/null +++ b/data/images/close.svg @@ -0,0 +1,53 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/data/images/closed-padlock.svg b/data/images/closed-padlock.svg new file mode 100644 index 000000000..8bbfc41a1 --- /dev/null +++ b/data/images/closed-padlock.svg @@ -0,0 +1,12 @@ + + + closed-padlock + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + \ No newline at end of file diff --git a/data/images/collection.svg b/data/images/collection.svg new file mode 100644 index 000000000..a76764680 --- /dev/null +++ b/data/images/collection.svg @@ -0,0 +1,16 @@ + + + collection + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/configure.svg b/data/images/configure.svg new file mode 100644 index 000000000..f666ea3c1 --- /dev/null +++ b/data/images/configure.svg @@ -0,0 +1,14 @@ + + + configure + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + \ No newline at end of file diff --git a/data/images/dashboard.svg b/data/images/dashboard.svg new file mode 100644 index 000000000..42dba0edb --- /dev/null +++ b/data/images/dashboard.svg @@ -0,0 +1,21 @@ + + + dashboard + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/delete.png b/data/images/delete.png index 6fad9b5bd..fef83f408 100644 Binary files a/data/images/delete.png and b/data/images/delete.png differ diff --git a/data/images/delete.svg b/data/images/delete.svg new file mode 100644 index 000000000..1b31cd1d6 --- /dev/null +++ b/data/images/delete.svg @@ -0,0 +1,19 @@ + + + delete + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/downloading.svg b/data/images/downloading.svg new file mode 100644 index 000000000..cad384b27 --- /dev/null +++ b/data/images/downloading.svg @@ -0,0 +1,12 @@ + + + downloading + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + \ No newline at end of file diff --git a/data/images/drop-album.svg b/data/images/drop-album.svg new file mode 100644 index 000000000..bfbedd051 --- /dev/null +++ b/data/images/drop-album.svg @@ -0,0 +1,14 @@ + + + drop-album + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + \ No newline at end of file diff --git a/data/images/drop-all-album.svg b/data/images/drop-all-album.svg new file mode 100644 index 000000000..c8caf31c9 --- /dev/null +++ b/data/images/drop-all-album.svg @@ -0,0 +1,23 @@ + + + drop-all-album + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/drop-all-songs.svg b/data/images/drop-all-songs.svg new file mode 100644 index 000000000..915f248df --- /dev/null +++ b/data/images/drop-all-songs.svg @@ -0,0 +1,14 @@ + + + drop-all-songs + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + \ No newline at end of file diff --git a/data/images/drop-local-songs.svg b/data/images/drop-local-songs.svg new file mode 100644 index 000000000..0c6a1e7ff --- /dev/null +++ b/data/images/drop-local-songs.svg @@ -0,0 +1,18 @@ + + + drop-local-songs + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/drop-song.svg b/data/images/drop-song.svg new file mode 100644 index 000000000..a27cf9cc5 --- /dev/null +++ b/data/images/drop-song.svg @@ -0,0 +1,14 @@ + + + drop-local-songs + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + \ No newline at end of file diff --git a/data/images/drop-top-songs.svg b/data/images/drop-top-songs.svg new file mode 100644 index 000000000..cac4a44d5 --- /dev/null +++ b/data/images/drop-top-songs.svg @@ -0,0 +1,14 @@ + + + drop-top-songs + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + \ No newline at end of file diff --git a/data/images/filter.svg b/data/images/filter.svg new file mode 100644 index 000000000..cf8f64074 --- /dev/null +++ b/data/images/filter.svg @@ -0,0 +1,13 @@ + + + filter + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + \ No newline at end of file diff --git a/data/images/forward.svg b/data/images/forward.svg new file mode 100644 index 000000000..731b50419 --- /dev/null +++ b/data/images/forward.svg @@ -0,0 +1,16 @@ + + + forward + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/green-dot.svg b/data/images/green-dot.svg new file mode 100644 index 000000000..c3057e5c2 --- /dev/null +++ b/data/images/green-dot.svg @@ -0,0 +1,18 @@ + + + green-dot + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/headphones-off.svg b/data/images/headphones-off.svg new file mode 100644 index 000000000..a1a30cb49 --- /dev/null +++ b/data/images/headphones-off.svg @@ -0,0 +1,12 @@ + + + headphones-off + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + \ No newline at end of file diff --git a/data/images/headphones.svg b/data/images/headphones.svg new file mode 100644 index 000000000..c4a7f8a31 --- /dev/null +++ b/data/images/headphones.svg @@ -0,0 +1,16 @@ + + + headphones + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/info.svg b/data/images/info.svg new file mode 100644 index 000000000..b369d3c0a --- /dev/null +++ b/data/images/info.svg @@ -0,0 +1,9 @@ + + + info + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + \ No newline at end of file diff --git a/data/images/jump-link.svg b/data/images/jump-link.svg new file mode 100644 index 000000000..16d9c96f0 --- /dev/null +++ b/data/images/jump-link.svg @@ -0,0 +1,9 @@ + + + jump-link + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + \ No newline at end of file diff --git a/data/images/lastfm-icon.svg b/data/images/lastfm-icon.svg new file mode 100644 index 000000000..ae21acb6e --- /dev/null +++ b/data/images/lastfm-icon.svg @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/images/lastfm-settings.svg b/data/images/lastfm-settings.svg new file mode 100644 index 000000000..802f7821c --- /dev/null +++ b/data/images/lastfm-settings.svg @@ -0,0 +1,53 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/data/images/list-add.svg b/data/images/list-add.svg new file mode 100644 index 000000000..0ddb0e42b --- /dev/null +++ b/data/images/list-add.svg @@ -0,0 +1,10 @@ + + + Slice 1 + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + \ No newline at end of file diff --git a/data/images/list-remove.svg b/data/images/list-remove.svg new file mode 100644 index 000000000..74ad8f7b8 --- /dev/null +++ b/data/images/list-remove.svg @@ -0,0 +1,10 @@ + + + list-remove + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + \ No newline at end of file diff --git a/data/images/loading-animation.svg b/data/images/loading-animation.svg new file mode 100644 index 000000000..1898dad9f --- /dev/null +++ b/data/images/loading-animation.svg @@ -0,0 +1,22 @@ + + + loading-animation + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/loved.svg b/data/images/loved.svg new file mode 100644 index 000000000..16f7b72bc --- /dev/null +++ b/data/images/loved.svg @@ -0,0 +1,19 @@ + + + loved + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/loved_playlist.svg b/data/images/loved_playlist.svg new file mode 100644 index 000000000..fe78d9d5c --- /dev/null +++ b/data/images/loved_playlist.svg @@ -0,0 +1,18 @@ + + + loved_playlist + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/music-settings.svg b/data/images/music-settings.svg new file mode 100644 index 000000000..0369a373e --- /dev/null +++ b/data/images/music-settings.svg @@ -0,0 +1,11 @@ + + + music-settings + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + \ No newline at end of file diff --git a/data/images/new-additions.svg b/data/images/new-additions.svg new file mode 100644 index 000000000..e7ff0b1ee --- /dev/null +++ b/data/images/new-additions.svg @@ -0,0 +1,73 @@ + + + + + + image/svg+xml + + new-additions + + + + + new-additions + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + diff --git a/data/images/new-releases.svg b/data/images/new-releases.svg new file mode 100644 index 000000000..7a2dc4084 --- /dev/null +++ b/data/images/new-releases.svg @@ -0,0 +1,18 @@ + + + new-releases + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/no-album-art-placeholder.svg b/data/images/no-album-art-placeholder.svg new file mode 100644 index 000000000..eac712af8 --- /dev/null +++ b/data/images/no-album-art-placeholder.svg @@ -0,0 +1,12 @@ + + + no-album-art-placeholder + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + \ No newline at end of file diff --git a/data/images/no-album-no-case.svg b/data/images/no-album-no-case.svg new file mode 100644 index 000000000..4907d1d10 --- /dev/null +++ b/data/images/no-album-no-case.svg @@ -0,0 +1,11 @@ + + + no-album-no-case + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + \ No newline at end of file diff --git a/data/images/no-artist-image-placeholder.svg b/data/images/no-artist-image-placeholder.svg new file mode 100644 index 000000000..93bc6ff8f --- /dev/null +++ b/data/images/no-artist-image-placeholder.svg @@ -0,0 +1,10 @@ + + + no-artist-image-placeholder + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + \ No newline at end of file diff --git a/data/images/no-source.svg b/data/images/no-source.svg index 36f5ebf8d..c85098c18 100644 --- a/data/images/no-source.svg +++ b/data/images/no-source.svg @@ -12,8 +12,8 @@ id="svg2" version="1.1" inkscape:version="0.48.2 r9819" - width="78.75" - height="53.75" + width="100" + height="100" xml:space="preserve" sodipodi:docname="no-source.pdf"> \ No newline at end of file + d="M 0,80 0,0 80,0 80,80 0,80 z" + style="fill:#e0dfe0;fill-opacity:1;fill-rule:evenodd;stroke:none" + id="path16" /> \ No newline at end of file diff --git a/data/images/not-loved.svg b/data/images/not-loved.svg new file mode 100644 index 000000000..00a863f19 --- /dev/null +++ b/data/images/not-loved.svg @@ -0,0 +1,9 @@ + + + not-loved + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + \ No newline at end of file diff --git a/data/images/now-playing-panel.png b/data/images/now-playing-panel.png index 780895cec..d138e89db 100644 Binary files a/data/images/now-playing-panel.png and b/data/images/now-playing-panel.png differ diff --git a/data/images/now-playing-speaker-dark.svg b/data/images/now-playing-speaker-dark.svg new file mode 100644 index 000000000..dc3b856d0 --- /dev/null +++ b/data/images/now-playing-speaker-dark.svg @@ -0,0 +1,32 @@ + + + now-playing-speaker-dark + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/now-playing-speaker.svg b/data/images/now-playing-speaker.svg new file mode 100644 index 000000000..2656036e5 --- /dev/null +++ b/data/images/now-playing-speaker.svg @@ -0,0 +1,14 @@ + + + now-playing-speaker + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + \ No newline at end of file diff --git a/data/images/ok.svg b/data/images/ok.svg new file mode 100644 index 000000000..069c046e8 --- /dev/null +++ b/data/images/ok.svg @@ -0,0 +1,14 @@ + + + ok + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + \ No newline at end of file diff --git a/data/images/open-padlock.svg b/data/images/open-padlock.svg new file mode 100644 index 000000000..23b5f62d3 --- /dev/null +++ b/data/images/open-padlock.svg @@ -0,0 +1,10 @@ + + + open-padlock + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + \ No newline at end of file diff --git a/data/images/open.svg b/data/images/open.svg new file mode 100644 index 000000000..60e9993cc --- /dev/null +++ b/data/images/open.svg @@ -0,0 +1,12 @@ + + + Slice 1 + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + \ No newline at end of file diff --git a/data/images/pause-pressed.svg b/data/images/pause-pressed.svg new file mode 100644 index 000000000..fca4e8970 --- /dev/null +++ b/data/images/pause-pressed.svg @@ -0,0 +1,27 @@ + + + pause-pressed + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/pause-rest.svg b/data/images/pause-rest.svg new file mode 100644 index 000000000..e57457bd2 --- /dev/null +++ b/data/images/pause-rest.svg @@ -0,0 +1,27 @@ + + + pause-rest + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/pause.svg b/data/images/pause.svg new file mode 100644 index 000000000..3bb26bfde --- /dev/null +++ b/data/images/pause.svg @@ -0,0 +1,46 @@ + + + pause + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/play-pressed.svg b/data/images/play-pressed.svg new file mode 100644 index 000000000..b4d719910 --- /dev/null +++ b/data/images/play-pressed.svg @@ -0,0 +1,17 @@ + + + play-pressed + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/play-rest.svg b/data/images/play-rest.svg new file mode 100644 index 000000000..9502d3172 --- /dev/null +++ b/data/images/play-rest.svg @@ -0,0 +1,17 @@ + + + play-rest + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/playlist-icon.svg b/data/images/playlist-icon.svg new file mode 100644 index 000000000..b05f8158d --- /dev/null +++ b/data/images/playlist-icon.svg @@ -0,0 +1,14 @@ + + + playlist-icon + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + \ No newline at end of file diff --git a/data/images/private-listening.svg b/data/images/private-listening.svg new file mode 100644 index 000000000..e5af70329 --- /dev/null +++ b/data/images/private-listening.svg @@ -0,0 +1,12 @@ + + + private-listening + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + \ No newline at end of file diff --git a/data/images/process-stop.svg b/data/images/process-stop.svg new file mode 100644 index 000000000..20f4e2ec1 --- /dev/null +++ b/data/images/process-stop.svg @@ -0,0 +1,19 @@ + + + process-stop + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/recently-played.svg b/data/images/recently-played.svg new file mode 100644 index 000000000..4551691b4 --- /dev/null +++ b/data/images/recently-played.svg @@ -0,0 +1,19 @@ + + + recently-played + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/repeat-1-on-pressed.svg b/data/images/repeat-1-on-pressed.svg new file mode 100644 index 000000000..0130540a7 --- /dev/null +++ b/data/images/repeat-1-on-pressed.svg @@ -0,0 +1,16 @@ + + + repeat-1-on-pressed + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/repeat-1-on-rest.svg b/data/images/repeat-1-on-rest.svg new file mode 100644 index 000000000..d81de3070 --- /dev/null +++ b/data/images/repeat-1-on-rest.svg @@ -0,0 +1,19 @@ + + + repeat-1-on-rest + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/repeat-all-on-pressed.svg b/data/images/repeat-all-on-pressed.svg new file mode 100644 index 000000000..9931d38b4 --- /dev/null +++ b/data/images/repeat-all-on-pressed.svg @@ -0,0 +1,12 @@ + + + repeat-all-on-pressed + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + \ No newline at end of file diff --git a/data/images/repeat-all-on-rest.svg b/data/images/repeat-all-on-rest.svg new file mode 100644 index 000000000..52f202a2f --- /dev/null +++ b/data/images/repeat-all-on-rest.svg @@ -0,0 +1,17 @@ + + + repeat-all-on-rest + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/repeat-off-pressed.svg b/data/images/repeat-off-pressed.svg new file mode 100644 index 000000000..405bb2877 --- /dev/null +++ b/data/images/repeat-off-pressed.svg @@ -0,0 +1,12 @@ + + + repeat-off-pressed + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + \ No newline at end of file diff --git a/data/images/repeat-off-rest.svg b/data/images/repeat-off-rest.svg new file mode 100644 index 000000000..4063dce83 --- /dev/null +++ b/data/images/repeat-off-rest.svg @@ -0,0 +1,12 @@ + + + repeat-off-rest + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + \ No newline at end of file diff --git a/data/images/resolver-default.svg b/data/images/resolver-default.svg new file mode 100644 index 000000000..038fd13fc --- /dev/null +++ b/data/images/resolver-default.svg @@ -0,0 +1,56 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/data/images/resolvers-settings.svg b/data/images/resolvers-settings.svg new file mode 100644 index 000000000..b05bd27c9 --- /dev/null +++ b/data/images/resolvers-settings.svg @@ -0,0 +1,12 @@ + + + resolvers-settings + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + \ No newline at end of file diff --git a/data/images/scrollbar-horizontal-handle.svg b/data/images/scrollbar-horizontal-handle.svg new file mode 100644 index 000000000..4da9ffa35 --- /dev/null +++ b/data/images/scrollbar-horizontal-handle.svg @@ -0,0 +1,9 @@ + + + scrollbar-horizontal-handle + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + \ No newline at end of file diff --git a/data/images/scrollbar-vertical-handle.svg b/data/images/scrollbar-vertical-handle.svg new file mode 100644 index 000000000..f28055ae6 --- /dev/null +++ b/data/images/scrollbar-vertical-handle.svg @@ -0,0 +1,9 @@ + + + scrollbar-vertical-handle + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + \ No newline at end of file diff --git a/data/images/search-box-dismiss-x.svg b/data/images/search-box-dismiss-x.svg new file mode 100644 index 000000000..2983d3925 --- /dev/null +++ b/data/images/search-box-dismiss-x.svg @@ -0,0 +1,10 @@ + + + search-box-dismiss + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + \ No newline at end of file diff --git a/data/images/search-icon.svg b/data/images/search-icon.svg new file mode 100644 index 000000000..7c0cd6d88 --- /dev/null +++ b/data/images/search-icon.svg @@ -0,0 +1,9 @@ + + + search-icon + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + \ No newline at end of file diff --git a/data/images/seek-and-volume-knob-pressed.svg b/data/images/seek-and-volume-knob-pressed.svg new file mode 100644 index 000000000..5d8a90876 --- /dev/null +++ b/data/images/seek-and-volume-knob-pressed.svg @@ -0,0 +1,14 @@ + + + seek-and-volume-knob-pressed + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + \ No newline at end of file diff --git a/data/images/seek-and-volume-knob-rest.png b/data/images/seek-and-volume-knob-rest.png index 2152a6bc9..cdd014fc7 100644 Binary files a/data/images/seek-and-volume-knob-rest.png and b/data/images/seek-and-volume-knob-rest.png differ diff --git a/data/images/seek-and-volume-knob-rest.svg b/data/images/seek-and-volume-knob-rest.svg new file mode 100644 index 000000000..1ffb5cc2f --- /dev/null +++ b/data/images/seek-and-volume-knob-rest.svg @@ -0,0 +1,14 @@ + + + seek-and-volume-knob-rest + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + \ No newline at end of file diff --git a/data/images/seek-slider-bkg.svg b/data/images/seek-slider-bkg.svg new file mode 100644 index 000000000..4e8e90c9b --- /dev/null +++ b/data/images/seek-slider-bkg.svg @@ -0,0 +1,9 @@ + + + seek-slider-bkg + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + \ No newline at end of file diff --git a/data/images/seek-slider-level.svg b/data/images/seek-slider-level.svg new file mode 100644 index 000000000..a5ea0ad15 --- /dev/null +++ b/data/images/seek-slider-level.svg @@ -0,0 +1,9 @@ + + + seek-slider-level + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + \ No newline at end of file diff --git a/data/images/share.svg b/data/images/share.svg new file mode 100644 index 000000000..d955ca1a8 --- /dev/null +++ b/data/images/share.svg @@ -0,0 +1,9 @@ + + + share + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + \ No newline at end of file diff --git a/data/images/shuffle-off-pressed.svg b/data/images/shuffle-off-pressed.svg new file mode 100644 index 000000000..07f4af6a4 --- /dev/null +++ b/data/images/shuffle-off-pressed.svg @@ -0,0 +1,13 @@ + + + shuffle-off-pressed + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + \ No newline at end of file diff --git a/data/images/shuffle-off-rest.svg b/data/images/shuffle-off-rest.svg new file mode 100644 index 000000000..d6c566a3c --- /dev/null +++ b/data/images/shuffle-off-rest.svg @@ -0,0 +1,13 @@ + + + shuffle-off-rest + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + \ No newline at end of file diff --git a/data/images/shuffle-on-pressed.svg b/data/images/shuffle-on-pressed.svg new file mode 100644 index 000000000..2cc3e9808 --- /dev/null +++ b/data/images/shuffle-on-pressed.svg @@ -0,0 +1,13 @@ + + + shuffle-on-pressed + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + \ No newline at end of file diff --git a/data/images/shuffle-on-rest.svg b/data/images/shuffle-on-rest.svg new file mode 100644 index 000000000..5727c39f3 --- /dev/null +++ b/data/images/shuffle-on-rest.svg @@ -0,0 +1,22 @@ + + + shuffle-on-rest + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/sipplugin-add.svg b/data/images/sipplugin-add.svg new file mode 100644 index 000000000..0585f3a7e --- /dev/null +++ b/data/images/sipplugin-add.svg @@ -0,0 +1,10 @@ + + + sipplugin-add + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + \ No newline at end of file diff --git a/data/images/sipplugin-offline.svg b/data/images/sipplugin-offline.svg new file mode 100644 index 000000000..9ad742cf6 --- /dev/null +++ b/data/images/sipplugin-offline.svg @@ -0,0 +1,11 @@ + + + sipplugin-offline + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + \ No newline at end of file diff --git a/data/images/sipplugin-online.svg b/data/images/sipplugin-online.svg new file mode 100644 index 000000000..2b0f62ef7 --- /dev/null +++ b/data/images/sipplugin-online.svg @@ -0,0 +1,13 @@ + + + sipplugin-online + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + \ No newline at end of file diff --git a/data/images/sipplugin-remove.svg b/data/images/sipplugin-remove.svg new file mode 100644 index 000000000..d994888c7 --- /dev/null +++ b/data/images/sipplugin-remove.svg @@ -0,0 +1,10 @@ + + + sipplugin-remove + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + \ No newline at end of file diff --git a/data/images/skip-pressed.svg b/data/images/skip-pressed.svg new file mode 100644 index 000000000..5f99aa83b --- /dev/null +++ b/data/images/skip-pressed.svg @@ -0,0 +1,17 @@ + + + skip-pressed + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/skip-rest.svg b/data/images/skip-rest.svg new file mode 100644 index 000000000..063aac30e --- /dev/null +++ b/data/images/skip-rest.svg @@ -0,0 +1,17 @@ + + + skip-rest + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/soundcloud.svg b/data/images/soundcloud.svg new file mode 100644 index 000000000..509972f24 --- /dev/null +++ b/data/images/soundcloud.svg @@ -0,0 +1,480 @@ + + + + + + + + + + +]> + + + + + + image/svg+xml + + + Adobe Illustrator CS3 + 2010-05-19T09:37:41+10:00 + 2010-05-19T09:37:41+10:00 + 2010-05-19T09:37:41+10:00 + + + + 256 + 148 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAlAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYqsmnggjMk0ixRjq7kKPvORnMRFk0ExiSaCC1jWbbTNKk1Fh60SBeAQj4ix AWh6U365j6rVxw4jk5htw4Dknw8nnWo/mJr90WEDJZxHoIwC1Pdmr+FM5LP27nn9NQHl+t3mPs3H Hn6kiuNX1O5Nbi7ml/15Gb9ZzWZNTkn9UpH4uXHDCPIAIXllDZSrDe3UBrBM8R8UYr+o5ZDJKP0k hjKAPMWnNj558x2ZAF0bhB+xOPUr/sj8f45sMPbGox/xcQ89/wBv2uNk0GKXSvcy3R/zJ025Kxaj GbOQ7eqPjjJ9/wBpf8983ul7fxz2yDhPf0dbm7MnHePq+9l8UsUsayxOJI3FUdSCCPEEZvoyEhYN h1hBBorskh2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KpLd+cdBtNTGnTz lZ6hXbiSisegZvpzX5e1MEMnhk7/AGOXDRZJQ4wNmMfmrNIH06LkfTIlYr25fCK5pvaORuA6b/oc /sgfUfcl1pNI/wCWt8HYssd4qoD2WsbUH0sTmNikT2fK+k/+Jb5itXH+r+tiPLNFTsncsaV3LGld yxpXcsaV3LGlTfQPNOp6LMDA/qWxNZbVz8DeNP5T7jM/RdoZNOfTvHu6ONqNJDKN+fe9Y0PXbDWb MXNo3TaWJvto3gw/Uc7bSayGeHFH5dzzmfTyxSqSY5lNDsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVUba+srrn9VuI5/TPGT0nV+J8G4k0OVwywnfCQa7izljlHmCEnu/Omj2uupo0nqfWGZUaQA emrvTipNa9/DMLJ2pihm8I3xfZu5MNDOWPxByTPU9X03S4BPfzrBEx4qTUknwAAJOZWfU48QuZoN GLDPIaiLV7a5t7q3S4t5BLDKOUci7gjLMeSM4iUTYLCcDE0eapk2Lw/zU3/Oyal/zESf8SOefdof 38/6xet0g/dR9wZN+aswa704D7Jidgf9Yj+mbb2hlcoe4uB2RH0y96X6e5/5V3qg7C8jIHz9PMXD /iM/64/Q3ZB/hUf6p/SxXlmndjTuWK07litO5YrTuWK07litO5YrSP0TXL3R79Lu1bcbSRn7Lp3V sydJqp4J8Uf7WnPp45Y8Je06RqtpqunxXtqaxyDdT1Vh1U+4zvdNqI5oCceReVzYZY5GJRmXtTsV dirsVdirsVdirsVdirsVdirsVdiqTebPMB0LSfrqxCZ2kWJEJ4irAmp+hcwe0NZ+Xx8dXvTlaPTe NPhunQax+kfKb6msfpGW1lf061oyqwO/zGMdR4mmOSquJWWHgzcH9IML/KWT/cjfpXrCp4+NGpX8 c0Xs8fXIeTte2B6Y+9KvME6j8wJJKGiXcNR/q8Af1ZiayX+Gk/0x+hyNNH/Bq/olP/zdkITS07MZ z93p/wBc2PtEdoD+t+hw+xh9Xw/Si9CvJYPywlmRjG8UVwI3XqCZGoa/Nsu0mQx7PJG1CX3lr1EA dWAe8fck35U3c51u6tzIfSe3aRkJ2LrIgDfOjHMHsCZ8WQvbhv42HK7XgPDB63+tjHmRv+di1T/m Ln/5Otmq1v8Afz/ry+9z9KP3Uf6o+5k/5otS50v/AJhj+sZte3vqh/VcDsnlL3oDTZAfy91de63U J+8oP4Zj4T/gWQf0h+htyj/CYf1Sxblmop2NO5Y0tO5Y0tO5Y0tO5Y0tO5Y0tO5Y0tO5Y0tMt/Lr zG2n6sLGZqWd8Qm52WXojfT9k/2ZuextZ4WTgP0z+/p+p1vaWm44cQ+qP3PXM7N5p2KuxV2KuxV2 KuxV2KuxV2KuxV2KpXqHmXSNP1O1026lKXV3T0lCkj4m4ryParCmYuXW48cxCR9UnIx6Wc4GYGwY 7+bLAeXrZa/EbtCB7CKT+ua3t/8AuR/W/QXO7HH70/1f0hf5cmp+WEjg8jHa3lR8mlIGHRy/wA/1 Z/pRqY/4X/nR/Qx38pXH6du07m1JHyEif1zW9gf3sv6v6Q5vbA/dj+t+gpP5kmUed7qTqqXYr/sW AP6sw9Yf8Kkf6TlaWP8Ag4H9Fkv5wSD1NKTuBOfv9MfwzZ+0J3gP636HA7FG0vh+lfpElfypvAdu AlUfS4P8clpz/rfL4/ejMP8ADB8En/Ks18zN/wAw0n/ElzC7C/v/APNP6HJ7X/ufix/zFIH8wamw 6NdzkfIyNmv1m+aZ/pS+9ztMP3Uf6o+5kP5lOWu9KYmpaxjJPuSc2PbW8of1A4PZY9M/6yF0w/8A Ogaz/wAxNv8ArGVYP8Tyf1otmX/GYe4sY5ZqnYO5Yq7liruWKu5Yq7liruWKu5Yq4OQQQaEbgjFa e8+V9W/Sug2d6xrK6cZv+MifC/3kVzv9Dn8XDGXXr73jtXh8PIYppmW47sVdirsVdirsVdirsVdi rsVdiryz8wZ2Xz5px6+klvQfKZm/jnLdqy/wuHlw/e9F2dH/AAaXx+5NvzekA0exTu1wSPkEP9cy +3z+7iP6X6HG7GHrl7lvlycD8rL0gbrDdoa/5XL/AJqyOjl/gEvdJOpj/hkffFIfylkA8yzKf27R wP8AkZGf4Zg9gms5/qn7w5nbA/dD+t+gpH5nmVfNmov1CXchNP8AJffMHWn/AAiR/pH73L0kf3Mf 6rK/zhcfW9MWu4jlJHsSv9M2vtB9UPcXXdij0y+C3SpOX5T6iKU4Ssvz/eRn+ODAf9b5e/8ASFzD /DY+79aV/lcx/wAVoPGGWv3DMXsT/GPgXI7WH7n4hj+uN/ub1D/mJm/5OHNfqf72X9Y/e52nH7uP uH3Mh/MadXutIC9DpsLg+zFv6Zse15XKH/Cw4PZkajP+uULpLf8AOj69/wAZrT/iZyrB/iuT3xbM w/wiHukxrlmtc+ncsVp3LFadyxWncsVp3LFadyxWncsVp3LFaep/lDfGTTb6zJr6EqyKPASrTb6Y 86nsDJcJR7jfz/sed7Zx1OMu8fd/az/N+6Z2KuxV2KuxV2KuxVL9b17TdFtUur9ykMkqwqVBb4mq e3YAEnMfUamGGPFPldN+DTzymo86tEahew2FjcXs9fRto2lcLuaKK0HvlmXIIRMjyAa8eMzkIjmU L5e1uDW9Jh1GFGiWXkDG1CVZSVIqOvTK9LqBmxiY2ts1OA4pmB6K9rq+mXV5c2VvcJLdWhAuIlO6 k/r8DTpk4Z4SkYg3KPNjPDOMRIjY8nkn5lzqvnR23/dJDy+gBtvvzlO15f4T7qek7Lj/AIP77ZF+ cclLHTUp9qWRq/6qgfxzYdvn0xHmXC7EHql7gh/Lk5H5VaoaA8TOg+TBf+asr0kv8Bn8Wepj/hkf gk35UyU81haV528i/L7J/hmJ2Iaz/AuV2uP3PxCQ+Z2/52XVv+Yy4/5OtmBrP76f9aX3uZpR+6h/ VH3Mt/N6QPf6Y42D27MAfdq5te3jcoHydb2MPTL3qelTH/lUur8dil0qE/N4K/g2DAf8An/W/TFl mj/hsP6v/FJd+WDkecLYA7NHKD8vTJ/hmP2N/jA9x+5u7VH7g/Bj+ryF9VvXPVp5Sfpc5gZ98kj5 lzcIqEfcE/8AzBP+k6L/ANsm2/W+Z3an1Y/+Fx/S4fZo2n/wyX6FDSJK+S/MKU+zLZGv+s7D+GQw H/Bsg84/eWeYf4Rj90mOcs11OdTuWNLTuWNLTuWNLTuWNLTuWNLTuWNLTuWNLTuWNLSP0vX9W0pZ xp9wbc3AVZWUDkQtSKEg069syMOpyYr4DVtOXTQyVxC6UbnU9QumLXN1LOT1Mjs/X5k5XPLOX1En 4so4ox5ABZBfXduQ1vPJCw6GN2U/gRgjOUeRITLHGXMWyTRvzL8y6eyrNN9fgHWO43antJ9qvzrm y0/a+bHzPEPP9bg5+y8U+Q4T5fqeo+WvN+keYISbVzHcoKy2slA6+4/mX3GdLo9djzj08+557VaK eE78u9O8zXEdirFb3zHeRfmFY6KsgFlNas0kdBvKQ7g169IxTNZk1Uhq44/4TH7d/wBTsYaaJ0ss n8Ql9m360m/OWbjpmnQ/zzO//AJT/jfMTt4+iI83K7Ej65HyT3zZecvIN1dV/vrWM1r/AL94j/jb M3W5L0pPfEfa4mjh/hIHdL7kB+Uc/qeVnT/fV1In3qjf8bZR2JK8Hukf0N3bMaze+I/Sx78t7z1P PWqmvw3CXDCnj66sPwrmB2TO9TPzv73N7UhWmj5V9yR/mXIW86agK1CiFR/yJQ/rOYfaxvUS+H3B zOyx/g8fj95ZF+b1wXsdCNeQlWZ+Xj8MX/NWZ/bkrjj87/Q4PY0alP4fpQ3l2cr+VWub1InZQK9A ywj+OV6U/wCA5Pf/AMSz1Mf8Mh7v1pX+VshXzhbr/PHKp/4An+GY3YxrUD3FyO1h+4PvCQa8f9zm o/8AMVN/ycOYOp/vZf1j97m6f+7j/VH3Mq/NWQPf6U42D2KMB82Y5s+2TcoH+g67sgVGX9ZZpc4H 5U6zHTc3sdT7Ewn/AI0wYZf4DMf0h/vU5o/4ZA/0f+KQX5ZyMPOlgB0cTA/L0XP8Mp7IP+ER+P3F t7VH+Dy+H3hIdUP+5O7/AOM0n/EzmDm+s+8ubi+ge4Jz51kdpdGLEknSbM1PuhOZnaBsw/4XFxNC Np/8Mkt0Zh/g7zGK787Hb/no+DB/i+X/ADPvKc4/f4/877gx7lmA5zuWKu5Yq7liruWKu5Yq7lir uWKu5Yq7liruWKu5Yq7liqvZX93Y3Ud3aStDcQtyjkXqDk8eSUJCUTRDDJjE4mMhYL3byd5ng8w6 StyKJdRUS7hH7L06j/JbqP7M7XQ6wZ8d/wAQ5vH63SHDOunRD6D5on1DzRrekyBBFYMv1bjs1B8M nLx+KmQ02rM804HlHl+lnqNIIYYTHOXP9DCtc1Hh+b1u1fhintoK+0iKD/ycOanUZK1w8jEfj5u2 0+K9CfdI/j5K/wCdU9bjSYK/ZSZyP9YoP+Ncn28d4D3/AKGHYUdpn3fpR/mK95/lFatXeWC0iJ33 KMv/AFTy7VTvQj3RH4+TTpoVrj75Kf5O3QTR9VU9IZVlP0oe/wDsMj2HKsc/Ip7bheSPmGLflhck edbQMamdZlJ9/TZ/+Nc13ZMv8IHnf3Ox7Wj/AIOfKvvQf5gSB/OOqEbUlC/8Cij+GVdpb55e9t7O FYI+5PfzOnaTTPLLEijWheg6VZIq/qzM7WNwxf1f1OH2VGp5f6361DQZwv5YeYQN2E8VR7O0S5DT GtHk94/Qz1Ef8Mx+4/pQP5YyEedtPA6OJgfl6Dn+GU9k/wCMR+P3Fu7VH+Dy+H3hINVYnVLwk1Jn kqf9mcws31y95c3CPQPcGTfmXNzvtHIrxbSrdwD25M+bDtU3KH/Cx+l1/ZcajP8Arn9C3TJkH5Z6 xGT8RvYafTwP/GpxxH/A5j+kE5Y/4XA/0Shvy4kKeddMI3q0i/8ABQuP45V2Wa1Efj9xbO0xenl8 PvDH7pv9Km/12/WcwpjcubDkE683zpJJpHGvwaVZoa+ITMvWmzD/AIXFxNFGhP8Arya0c/8AOreY P+jP/k8cGD+5yf5v3pzf32P/ADvuSHlmHTmO5Y0ruWNK7ljSu5Y0ruWNK7ljSu5Y0ruWNK7ljSu5 Y0ruWNK7ljSu5Y0rK/y01xtN80QRM1Le/wD9GlXtyb+7Pz50H0nNl2Vn8PMB0lt+p1vamn8TCT1j v+tMvy91UP8AmNeyV21E3VB4kv63/GmZXZuW9VI/zuL9bR2lhrSx/o8P6mPeZ9RI88X94DvBfMQR /wAUvxHf/IzB1eT/AAiUu6X3OdpMX+Dxj3x+9P8A85bgP5is4lNVS0VtjUVeR/4AZmdtyvKB/R/S XC7Dj+6J/pfoDerXvL8odISvxNdmJhWmyNMR8+gw5p/4DAf0v1rhx/4dP+r+pZ+WV4INL8z/AOTZ et0r/dJJ/wA1YOyp8MMv9W/lae1cdzxf1q+dJB5En9HzhpT+M4T/AJGAp/xtmF2eazw97m9oRvBP 3KfnWQv5t1Yk1IupF/4Fqfwwa43nn/WKdBH9xD+qE38+TF9I8rdgNNjAHuAqk/TTMntA3DF/Ucbs 6NTy/wBdZotxT8uvMcVOs9pv85Af+NMjgl/guQecfvTnj/hWM+UvuQ35cOR510wg0POQfQYnByHZ n+MR/HRs7UH+Dy/HUJBeuWvJ2Y1ZpHJPuWOYU95FzYD0j3Mi8/T+rcaK1KL+iLTj40IZt/8Agszu 0TZh/wALi4HZ0aE/+GSa051P5fautfiF7bEj2INP1Y4v8Vn/AFgnKP8ACof1ZKP5fSBPOWlk71lK /wDBIw/jkezTWePvZdpR/cS9yQzyK80jr0ZiRXwJrmFLcubGNBNvM5/eab/2zrX/AIhmTq+cf6kX G0g2l/Xku0iQjy5ryfslbUn5icD+OHD/AHWT/N+9GYfvcf8AnfcklcxHLp1cVp1cVp1cVp1cVp1c Vp1cVp1cVp1cVp1cVp1cVp1cVp1cVp1cVpUt7h4LiKeM0eJ1dD7qajJRJBBHREoAgg9WU/ltYSDz 9bwkmtmZzIRt9hGT9ZzZ9mYz+ZA/m267tTIPyxP86kj8zQSR+Z9UgG7fXJlXpvWQ0+/MTVQrLIf0 j97l6WV4Yn+iPuZH+b1ubfzJbJUsPqMQDGu/FnXv/q5m9sQrKP6o/S4PYsuLEf6x/Qt1K1dPyn0m euz6hI1PYiVf1x45Yf4HE/0v1pxTvWzH9Afo/Wt/L22ebTfNDqTVdMlQAGlSwYj/AIhg7Ohccv8A UKe0p1PF/XCSeTY2l82aQg7XcL/Qjhj+rMTRRvND+sHL1xrBP+qXecozF5s1dd97uZt/8ty38cdb Gs0/6xXQm8EP6oTbz1bNDpPlaQ1/eaam9a+D/wDMzMnXwqGI/wBBxez5XPKP6f4+5rRIWb8uvMct RxWe0277SAf8b4MEf8FyHzj96c8v8Kxjyl9yG/LhDJ520tR2d260+zE7fwyHZovPH8dGztQ1p5fj qkN8rJe3CN9pZXB+YYjMPIKkfe5mPeI9zIvP8LQXGiITX/cPZ0PyDL/xrmd2hGjD/hcXB7OlYn/w ySzT4OX5f6tNvtfW1PDZXH/G+DHH/BpH+kE5Jf4VAf0ZKf5eqZPOelLWlJS3/AozfwyPZwvPH3su 0jWnn7kgmX05njBqEYrX5GmYchRc2O4tOfNMbxvpfIEc9NtXWp6gp1zJ1ca4f6kXF0hsS/ryb0dS fLXmCSuyrarT/Wnr/wAa4cI/dZP8370Zz++xj+t9yRVzEcx1cVdXFXVxV1cVdXFXVxV1cVdXFXVx V1cVdXFXVxV1cVVrSB7m7htk+3PIsa08XIUfryUIcRA72M5cMST0eseR9K9H8x/M03H4YC4Xbp9Z l9Raf7Fc6PQ4q1OQ936TbzXaGa9JiHf+gUxbzHp/L82fqtPhnvbVj/qyCNmPbxOYGpx/4ZXfIfod jpcn+BcXdGX6Uy/O+HjqmmT/AM8Dp/wDg/8AG+X9tx9cT5NHYEvRIeaL1+y9P8m9O/4r9Cf/AJGs T/zMyzUQrRR+B+f9rVpp3r5fEfL+xS/KCzE2i+YSRX10SHffpHJ2/wBnkeyIXDJ57fey7bnWTH5b /aGLflnD63nfTFpUK0jnvThE7D8RmB2ZG88fx0dl2rKtPL4feFv5kx+j531RKUq6P/wcSN/HB2lG s8vx0Xss3p4/jqyT82bX0NH8sbUMdu8LV6/CkVB+vM3taFQx+79TgdjTvJl99/ep+Wbbl+UvmBzt znJFfCMRN+vBpof4HP3/AKmWrl/h2MeX32lf5SxiTzratt+6imcfTGV/42zH7JF5x8XI7ZNac+8f ex7zEnpeYNTipT07udaDtxkYZh6gVkkP6R+9ztKbxRP9Efcy7837YwajpFRQiwSKp2P7tm2I/wBl mx7XhUo/1XWdiyuM/wCup6TBX8odbmrSl9Ht7AwDb/g8GKP+BzP9L9TLNL/DoD+if98gPysTn550 87UQTMQf+MDj9ZyrssXqI/H7i3drmtNL4feGP6uvp6tex048J5V4jtRyKZhZhUyPMubhNwifIMg/ MKEQz6EASQdGs9z/AJIZf4ZmdoRow/4XFwuzJWMn/DJKWiJ/zovmWXbeWxUeO0jk/rwYB/g+Q+cf vZZz/hOMeUvuDGeWYDsKdyxWncsVp3LFadyxWncsVp3LFadyxWncsVp3LFadyxWncsVp3LFadyxW mZ/lToL6n5nju2X/AEXTf38jdvU6RL8+XxfRmz7K0/HlvpHf9Tqu2NQMeEx6y2/W90WKJXeRUVXk oZHAALUFBU96DOrADxxJOzzfVtO5fnRpjU+GS3Fyx/4xxyqPxjGabLj/AMNj7r+932HL/rfL319o /WofnpDW00if+SSZP+DVD/xpkO247RPvZ+z59Ux7v0p55usSn5VSWtKG3s7UU8PRMZ7/AOrmVq4f 4JXdEfZTh6LJet4u+UvttB/knDx8sXUp6yXjgfJY4/4k5X2NGsRP9L9Abu3pfvgP6P6Sw/8AKe04 +fHSm9pFP13IoRH2/wBbNd2VD/CPcC7Ptif+DX3kfrUPzXtifPcyr9q4SA9O5QJ9P2cj2pD/AAg+ dM+x5f4MPK2W/nfAq6LpjqABHO0YHcBo67f8Bmf21H0R97rewJfvJDy/Ss8pWw/5U9qZ2HqQ3ste v2FI/wCNMdJD/A5e6SdbL/D4++LH/wAlIy/mu4fekdnIa9qmSMUzD7Gj+9P9X9Tm9vGsI/rfoKQe bravnjU7fjT1b59h1PqPX8eWYmrh+/kP6Tm6KX+DxPdH7mYfnnHS80iWn2o5lr2+FkP/ABtmx7bH qife6v2fPpmPMfpa0aCv5LaoacucrSUP+RJHv9HCuOGP+BS9/wCkLnl/rhH3foKT/k9Hz85xtSvp 28rV8Ngv/G2Y3ZA/ffAuX22a0/xDG/NCiPzNq8YNQl7cLX5SsMw9SKyy/rH73P0hvDA/0R9zLfzd gMNxodSKiwSMqOg4H+3M/taNGH9V1nYsrE/66B0iOn5Ya9LQfFeWy17/AAsp/wCNsqxD/BZn+kG7 Mf8ADMY/olhtc1ztadXFadXFadXFadXFadXFadXFadXFadXFadXFadXFadXFadXFaRujaRqGsahF YWERluJTsP2VXuzHso7nLMOGWSXDHm0580cUTKRoB9DeUvLFp5c0aOwhPOU/Hcz0oZJSNz8h0A8M 7DSaYYYcI+Lw+t1cs+QyPLp7k6zJcRSaztWuku2hQ3SIY0nKjmEYglQ3WhIyPALut2XHLh4b2Y3+ YXlK68zaVbWlrKkMsNykrNJWnp8WR6UHUcqjMPX6U5oAA8i5/ZmtGnmZEXcU18y6ZJqHlzUNPt1H qz27xwKdhz4/APbemX6jHx45RHUONpcohljM8gUt/LjQ73RvKttaXyeldMzyyR1BK822Bp340yns /DLHiAlzcjtTURy5jKO4SHyJ5S1bSvO2u311b+naP6iWs1RxdZpRKOI9lUV8DtmLotLPHnnIjbp8 Tbm9o62GTT44xPq2v4CkF+YHlnV7/wDMDR7m1s5p7N1gWedFJRPTmYvzYbLRCDvlWu0056iJAJG3 3tvZurxw0sxIgS32+Cdfm9pN9qPlaMWUD3EtvdJM0cSl34cHQkAb7cxXMntXFKeL0i6Lidi5owze o0DGvuRXlLRb2H8uYdLniaG7ltbhTE44srTtIyhgeh+Mdcs0uGQ0wgedH7ba9bnidWZg3ESH2Uxj 8nPLms6fqWo3WoWU1ovpLDGZkaMsS3I8Q1Kj4euYPZOnnCUjIEOx7c1WOcIiEhLe9ks8x+Udcn/M 71IrCV7K4uoZ/rCqxi9McDIS/QUNa/7WU6jSTOpsA0SC5Gl1uMaOjIcQiRXXrTIPzm0LVdStNMuL C1lujavKsqQqXYCUJQ8VBNP3eZfa+CUxExF1bg9haiGOUhIgXXPyv9aL0by1qa/lTJpEkLJqM1vO wt2orc3dnRTXoSKdcsw6aX5Xgr1EFqz6qH53jB9II3+9jv5O+W9atNfu76+spbWCO3aFWmRoyZWd DRQwFaKrVzD7J0045DKQIFOf23qscsQjGQJu9u6ki83+TPMs/nW+jttPlkjvblpYJ0RjEVlblyZw OIpX4q5i6vR5DmNRPqPwczRa7CNPEmQ9I379vJl/5xeWdWv4tMudMtJLpLUSQyxQqZJFDcSh4rVi PhPyzYdraacxExF06vsTVwgZCZq990FpnkzXl/KrULJrVk1G6uBdx2rCkpjQxjiVO4b4GIXK8ejy flZRr1E3XybsuuxfnYyv0gVfTq85Pl3zCDQ6XdgjqPQl/wCac0/5fJ/Nl8i738zi/nR+Ya/w95h/ 6td3/wAiJf8AmnH8vk/mn5J/M4v50fmHf4e8w/8AVru/+REv/NOP5fJ/NPyX8zi/nR+Yd/h7zD/1 a7v/AJES/wDNOP5fJ/NPyX8zi/nR+Yd/h7zD/wBWu7/5ES/804/l8n80/JfzOL+dH5h3+HvMP/Vr u/8AkRL/AM04/l8n80/JfzOL+dH5h3+HvMP/AFa7v/kRL/zTj+XyfzT8l/M4v50fmHf4e8w/9Wu7 /wCREv8AzTj+XyfzT8l/M4v50fmHf4e8w/8AVru/+REv/NOP5fJ/NPyX8zi/nR+Yd/h7zD/1a7v/ AJES/wDNOP5fJ/NPyX8zi/nR+Yd/h7zD/wBWu7/5ES/804/l8n80/JfzOL+dH5hVt/Knmi4fhDpN 4x7n0JABXxJAAwx0uU8oy+TGWswx5zj8wyvQvyb8x3jq+pumm2/VlJEspHsqniPpb6Mz8PZGSX1e kfa6zUduYofR6j8g9Z8ueVdG8vWn1fToeLNT1rh/ilkI/mbb7htm+0+lhhFRDzWq1mTPK5n4dAm+ ZDiuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxVzMFBZjQDck9AMVeJ6r+ZfnTzDrEll5WR4rdeXpRwRq8zou3qOzBuP0Up75z2TX5ss6 xcvteuw9lafBjEs258+XuWWPnv8AM3QtUt7TVrea79dgsdncRcXkqafupEWpb/gvlghrNTjkBIE3 0P6GWTs7R5oGUCI11B5e8f2PXtW1y10nRJdWv1aGKCMSSRGhcM1AI9iVLFjx60ze5MwhDik8th05 y5BCO5J/BeNv59/MnzNezDRFligTf0LSMEIp+zzlIrU08RXsM0B1mozE8HLyerHZ2k08R4lX3n9S O8ufmr5l0nWF03zWrPAWCTPLGIp4a9GooXkvc1FadDlmDtHJCfDl5faGnVdj4cmPjwc/I2C9A/Mb WtR0jylc6hpk3o3SPEI5QqPs8gB2cMu4Phm012WUMRlE77Ok7LwQy5xCYsb/AHIf8rdf1bXPLT3u qT/WLkXMkYk4InwqqkCiKo7+GQ7OzSyY7kbNs+19NDDm4YChSU/m95s8weX/ANE/oi6+rfWfrHr/ ALuOTl6fpcf7xXpTmemU9p6nJi4eA1d/ocnsTRYs/H4guq6nz7k+uNZ1JPy4GsLNTUTpaXXr8V/v mgDluNOH2j0pTMmWWX5fjv1cN/Y4ccEDq/Dr0cdV5Wwf8uvzU1W71oab5huVmjvKJa3BSOPhL2U+ mqCj9N+9M12h7RlKfDkPPk7ftTseEcfHiFcPMbnb49zLPzX8w6xoPl23vNKuPq1xJeJC78EeqGKR iKSKw6qMze0s88eMGJo3+t1vY2mx5spjMWOG/tHcjPI2s6lqnke11O+m9a+kS4LzcVWpjlkVfhUK uwUdss0eWU8IlI77/eWrtDBDHqTCIqO33B5Rpv5g/mpqkrQ6ddS3cqLzdIbW3cha0qQIvE5pMet1 MzUTfwH6npcvZmixi5gRHnI/rR9n+bHnnRb9YPMNsZ16yQzw/VpuJPVCqoPvU5bHtLNjlWQX8KLR PsbTZY3iNe42HsulapZ6rp1vqFk/qW1ygeNu/gQfAg7EeOb/AB5BOIkOReVzYZY5mEuYeU+cPzW1 u61htI8qAgK5iFxHGJZZpAaH01IYcfDap65pNV2jOU+DF/a9Joex8ccfiZ/fXID3pQ3nb80fLVxF Jq/rNDIaiK8iHB/EBwAQfk2Ufm9TiPruvNyh2fo9QCMdX/RL0XzH5uu2/LebzHpXOyuWSFovVQFk LTpG44upVhQmhpv1zbZ9Sfy5yR2O33uh0uij+bGKfqG/3E9Gvyo8w6xr3l24vNVuPrNxHePCj8ES iCKNgKRqo6scHZueeTGTI2b/AFJ7Z02PDlEYChw39p72ZO6RozuwVEBZmOwAG5JzYE06oC9g8W13 80/Net6s2n+VUeK35FYfRjEk8qj9s8g3Ed9gKdznPZu0cuSXDi5fa9Zp+x8GGHFm5+ZoBCwfmF+Y vlnUIo9eSWaBtzb3cYUutdzHKADX6SPbIR1uowy9fLzbZdmaXURJxUD3j9IewRa3b6h5bbV9PesU ts80DECqsFOxG4qrChGb4ZRLHxx7nljpzDL4c+kqYV+Ufm/zF5gudTTV7v6ytukRhHpxR8SxYH+7 VK9O+a7szVZMplxm6rudt21osWAR4BV31P6WRfmRrOpaN5Tub/TZvQu43iCScVegaQKdnDL0PhmX r8sseIyiaLg9l4IZc4jMXHf7kP8Albr+ra55ae91Sf6xci5kjEnBE+FVUgURVHfwyHZ2aWTHcjZt n2vpoYc3DAUKeZW/5hfmff6hNaabdyXMqFyIora3dgitStBHXbNRHW6mUqib+A/U9DLszRwiJTFD +sf1oyL80vzC0O8SPXrYyo25huYBbOyjrwZFQfTQ5Mdo58Z9Y+YpqPZGlzRvEa9xt7BoOuWOuaTb 6nZMTBOK8W+0rA0ZWHiDm+w5o5IiQ5F5bU6eWGZhLmEwy1odirUiLJGyN9lwVPyO2Ai0g0bfPk+j eefIOtS3djFIYRyRbxI/VhlhJqA+x49BsaEds5k4s2mncfn0e3jn02txiMjv3XRBZFof54iW5hXz Bp0RVGqt5bA8oyRx5em5Y9Dvxb6MysXa1kccfiHB1Hs/QPhSPuPX4px+duoCTyfYNbSB7a8uY3Dq dnT0ndfoOxy/tad4hXIlxewMdZ5XzjE/eE4/KKyt7byLYyxAepdtLNO4/ab1GQfcqAZf2bADCK6u L21kMtTIHpQ+xiX592UCvpF6qgTuJoZG7sq8GWv+qWb78wu2YD0nru7P2cyGpx6bFMPNVxJP+Sln LJUu0FmGJ6niyCv00yzUG9ID5RaNHER7QIHfL9KP/JA/86a//MZL/wAQTLeyf7r4tHb/APjH+aP0 pF+f5p+gf+jv/mTmN2z/AAfH9Dm+zf8AlP8AN/3zKbr/AMk+v/bEj/6hlzMl/iv+Z+h1sP8AH/8A kqf908UsfLV3eeWbzXLSrHTp1S5jHURMtRIKfyt19t+2aCGnMsZmP4S9dk1cYZhjl/ENvf3Mm8ze dR5i/Laziunrqtjfwx3Vesi+hNwl/wBlSje/zGZeo1Xi6cA/UJD7ju6/SaDwNWSPolA15bx2ei/l j/5LOx/4x3X/ACflzaaD/Fx8fvLoe1v8cl/m/cGCfkOa+Y9Q/wCYP/mama7sf+8Pudz7Rf3Uf636 CzX85tOtLjyXPdyqv1iykie3c05fvJFjZQfAhqke3tmw7UgDhJPMOp7CyyjqBEcpA38rSX8ttRuo /wAqdbmViHsfrv1c/wAvG3WUf8OxOY+gmRppHu4vuty+1cQOtgP53Df+mpLPyFsbaXUtVvXAM9tF FHDXqBMXLkf8iwMp7HgDKR6hyPaPIRCEehJ+z+17FcWlrchFuIUmEbCSMSKHCuvRhUGhFeub2UQe YeVjOUeRpi35tf8AkvtV/wCjf/qJjzD7S/uJfD7w7LsX/GofH/clJ/yKNfKN3/20JP8AkzDlHZH9 0f636A5XtD/fj+oPvLJPzDuZLfyTrEkdeRt2TbrSQhG/Bsy9bKsMvc4HZkRLUQB72EfkJZwfVtWv ioNxzjhDdwgBYgfM0r8s13Y8BUj1dv7R5DcI9NyyD85rK3n8kT3EgHq2ksUkLHrVnEZA/wBi+ZXa kAcJPdTg9hZCNQAOUgf1pX+VFzLN+W2pI5qtvLdRxjwUwrJ/xJzlPZ0r08vK/ucntmAGrie8R++k p/II1vNZ/wCMcH/EnyjsbnL4OT7R/TD4/oZf+cP/ACgd7/xkg/5Ormd2n/cn4fe6vsT/ABmPx+5B /kgf+dNf/mMl/wCIJkOyf7r4tvb/APjH+aP0sK/J0/8AO/XX/MPcf8nEzX9l/wB+fcXb9uf4sPeP uL0f81dPtbvyRqDzKOdqFngc9VdWA2/1lJX6c2vaMBLCb6Oh7HyyjqI112LH/wAh7iR9B1GAmscd 0GQeBeMA/wDERmN2OfQR5ub7RRHixP8AR/S9OzbvPOxVSvJ2t7SadYnnaJGcQRAF3KivFQSNz2yM jQvmyhHikBdW8o0n891W8uU1vTnjgMh9D6tQyRr04SK5TkR3NR8s0+Ptbc8Y28nps3s76Qcct+t9 fcxP8yfNnl7zLe2j6Lp7wzJyE9yyKkkxcjivFC3KlOp33zC12ohlI4B+12XZWiy6eJ8SVjoO56J5 h8m6lfflVY6ZwZ9U0+GG4SD9ovGhDx/MI7Ae4zZ5tLKWmEf4ogOi02uhDWyn/BIkftYf+XX5q2vl 3TG0jVreaW3idmtpYApdOZqyMrsm3Kp698wtF2gMUeGQNO17U7Hlnn4kCLPO0t83+Zb78wfMtlZ6 XausKVis4X3erkGSSTjULsor4AZVqc51OQCI9zfotJHQ4ZSmd+Z/QA9d8zeUzc/l/L5eshzkt7WJ LWtAWe24sv0vwp9ObrPp7wcA6D7nmNJrOHVDLLrI38f1PLvy2/MiDypFdaVq1vM1q0pkUxgepFLQ I6sjFdvhHfY5qNDrRhBjIbPRdq9lHUkTgRdfMILzv5rufPvmCxs9LtXEUZMNlC9PUZ5SC7tSoXZR 32ArXIavUHUTAiPc3dn6MaLFKUzvzPweweaLFNP/AC4v7BDyS000wK3iI4uAP4Zu88OHAY90f0PL aTJx6uMv507+ZYj+Q8ccuh6xFKoeOSZVdGFQVMZBBB7HMLsgXCQ83ae0RIyQI7v0sA/MXyfL5Y11 4YwTpt1WWxc1+zXeMnxQmnyoe+a3W6Xwp1/CeTuuy9cNRjs/WOf6/i9f/LD/AMljY/8AGO6/5Py5 u9B/i4+P3l5ftf8AxyXvj9weS/lr5y07ytql3eX0U0yT2/pRrAFJ5c1bfkybfDml0OpjhkSb5PTd q6GepgIxIFG90y87/mLf+czb6LpVlJHbPKGWKvOaaQVCghdgBXpv45bq9bLPUIjb72js/suOkvJO W9fAPVfJ3k9dJ8lrod5vLdRyfXuJqOU4oyg/5K0X6M3Gm03Bi4D15/F5rXa7xdR4keQqvg8d8va1 qf5debbmC+tzJHQw3cINOcdapLGT949jTNJhyy0uUgj3vVanTw12AGJ8x+osr8x/nqrxQp5dtXSX mGmlvFWnEfsKiM32u5r8vHMzP2t/qY+brdL7O0T4p2/op/58v7+//KS6vb+0+o3c8ds8tqTyKVuY 6dQCKjeh6dMydXOUtMTIUTX3hwezscYa4RieKI4t/wDNLB/y4/M3SfK2hz6feWs88sty9wHh4cQr RxpT4mXeqZr9Dro4YGJB5u47U7JnqMglEgARrf3ln2lecdI/MDTtW0W1t5rZmtWBkn4UBkqqkcS3 2W3zY49THUxlAAjZ0ubQz0U4ZJEH1dHmvknzbeeQtcvrDVbSRoJCqXkK0EiPHXi6cqBgQ3juKGua rS6g6aZjIbdXoNfoo63HGUDv07t0Z+Y/5nweZrOHSdJt5o7UyB5nmCiSRl2RFVS+1TXrU7ZZrteM o4YjZp7L7IOnkZzIuunR6b5A8ryaT5Lh0y8BW4uleS7QdVacfZ+arQH3zbaPT8GIRPM8/i892lqx l1BnHkOXweReV9dvPy9833dvqNu0kQrb3ca0DFQQySx1oD4jfcHNJp8p02UiQ8i9Rq9PHXYAYHfm P1FM/wAyPzRs/MmnR6TpNvKlu0iyTyzBVZiv2UVVL7VNa5drteMseGI2cfsrsiWCZnMi62p6b+Wm hXOi+T7K1ukMd1JynnjOxUymoU+4WlffNrocJx4gDzee7V1Ay55Sj9PL5PF/I3mqw8s+a7rUb6OW WExzRBIQpbkzgj7TIKfDmi0mojiyGR83re0NHLUYRCJANg7px55/NO5802i6JpNlJDb3Dr6gY85p iDVIwqVoOVD1Ncv1evOYcERsftcTs/scaeXiTkCR8h5vS/yx8qz+XfLEcN2ON9dubi6TrwLABUr/ AJKqK+9c2ug05xY6PM7vP9rawZ81x+mOw/Wy3M11jsVdirBPOX/KpPrrf4i+q/Xv92+l6vrV/wCL Pq3x1/1s12p/LX66v7fsd1ofz3D+64uH4V8OJS8of8qe/SKfoD6t+kK/uPW9b1eX/FX1rev+rg03 5Xi9FcXx/Sy135/g/e8XD5VXx4f0vQM2To3nvm//AJU5+kpP0/8AV/0hX9/6Pr+py/4t+q/tf62+ a3U/leL11xfH9DvNF+f4P3V8PnX2cX6E48j/APKvPSk/wp9X5U/fcOXr8e3L1v3vH57ZdpfA/wAn X6ft3cXtD81Y8e/0fZsyrMx1rAvOf/Kovr7f4j+r/X/92+l63q1/4s+rfF/wWa7U/luL95V/H9Du tB+e4f3V8Pwr4cX6Eb5G/wCVa85P8KfV/rHH95/efWOFd/7/APe8a/Rk9J4H+Tq/t+3dq7Q/N/5e 6+FfZsyPW/0Z+iLz9K0/RvpP9b5cqelT4q8fi6eGZWXh4TxfT1cDT8fiDg+u9vek/kj/AAT9Vuf8 KcPq/NfrPp+rTnTavq79PDKdL4VHw+TldofmOIePz6cv0KvnT/B36Ni/xV6X1L1R6Pq86+pxP2fT +LpXDqvC4f3nJjoPzHGfAvir7PiifLn+HP8ADsP6E4/oTjL6PHnx4829T7fxfb5ZLDwcA4Poa9V4 vinxP7zb9jAv+QCf8u//AE95r/8AA/L7Xdf65+f+xZh5S/wDRv8ADP1L1KfvPq/H1uP+VX95T55m 6fwf8nw/pdXrfzX+W4vjy/UyTMp17GfO3+A/q0f+K/q3Gh9D1a+tT9r0/T/e08eOYmq8Gv3lfj7X YaD8zf7ji/R8b2Y95W/5Ur+k4/0N9X+vVHo/WPrFeXbh9a25eFN8xsH5Ti9FX53+lz9Z/KHAfEvh 8uH/AHrMvNH6A/QVz/iDj+iPg+s8+fH+8XhXh8X2+PTM7UcHAeP6XU6PxfFHhfX0+Xn5MA/5AJ/y 7/8AT3mu/wAD8vtd3/rn5/7Fkvkj/lXX1q5/wp6f1j0x9Z9P1q8K7V9Xbr4ZlaXwLPh8/i6/tD83 wjx7rpy/Q354/wCVb/B/ir6t61P3def1jj7ej+94/hjqvA/ylfp+zdez/wA3/kOKvs+3ZL/Jv/Ko f0gv+Hfq/wCkP91er63q1p/ur618Vafy5Xpvy3F6K4vj+lv1357g/e3w+VV8eH9LPs2LpGK+ef8A lXvpRf4s+r8qfuefL1+Pfh6X73jXw2zD1fgf5Sv0/Zu7Ls/81Z8C/wBH27JN5R/5U1+kk/QX1b9I V/c+v6/Pl29L61+1/q75Rp/yvF6Kv4/pcvW/n+D97fD5V9vD+l6HmzdE8ul/5UP6r+p9X9Tkef8A vV9qu+ag/k76fa9HH+Uq2v8A2LJ/KP8Ayrj1f+da+pfWuO/pU+scab/b/eU8cy9N4F/u+G/tddrf zdfvuKvs/UyrMx1rsVf/2Q== + + + + + + uuid:971E3EA93164DF118E6D90B556E55533 + uuid:981E3EA93164DF118E6D90B556E55533 + + uuid:5D6A817A07F311DDB65DBE16EC1FED5E + uuid:5D6A817907F311DDB65DBE16EC1FED5E + + + + + 35.277778 + 21.166667 + Millimeters + + 1 + False + False + + + + Default Swatch Group + 0 + + + + Blanc + RGB + PROCESS + 255 + 255 + 255 + + + Noir + RGB + PROCESS + 0 + 0 + 0 + + + Fusain + RGB + PROCESS + 63 + 63 + 63 + + + Graphite + RGB + PROCESS + 102 + 102 + 102 + + + Cendre + RGB + PROCESS + 140 + 140 + 140 + + + Fumée + RGB + PROCESS + 179 + 179 + 179 + + + Latte + RGB + PROCESS + 228 + 189 + 149 + + + Capuccino + RGB + PROCESS + 213 + 150 + 88 + + + Mochaccino + RGB + PROCESS + 138 + 91 + 41 + + + Moka + RGB + PROCESS + 90 + 61 + 27 + + + Rouge Mars + RGB + PROCESS + 143 + 0 + 0 + + + Rubis + RGB + PROCESS + 191 + 0 + 0 + + + Rouge + RGB + PROCESS + 255 + 0 + 0 + + + Citrouille + RGB + PROCESS + 255 + 65 + 0 + + + Jus + RGB + PROCESS + 255 + 127 + 0 + + + Soleil + RGB + PROCESS + 255 + 191 + 0 + + + Jaune pur + RGB + PROCESS + 255 + 255 + 0 + + + Olivine + RGB + PROCESS + 191 + 225 + 14 + + + Vert choux + RGB + PROCESS + 127 + 195 + 27 + + + Jade + RGB + PROCESS + 95 + 146 + 21 + + + Menthe à l’eau + RGB + PROCESS + 48 + 124 + 31 + + + Emeraude + RGB + PROCESS + 0 + 76 + 31 + + + Bleu-vert + RGB + PROCESS + 1 + 83 + 82 + + + Bleu des mers du Sud + RGB + PROCESS + 4 + 115 + 144 + + + Cyan pur + RGB + PROCESS + 0 + 160 + 198 + + + Bleu hawaiien + RGB + PROCESS + 6 + 120 + 179 + + + Bleu crépuscule + RGB + PROCESS + 10 + 80 + 161 + + + Bleu nuit étoilée + RGB + PROCESS + 15 + 41 + 143 + + + Bleu fonds marins + RGB + PROCESS + 19 + 0 + 124 + + + Lavande fraîche + RGB + PROCESS + 72 + 48 + 147 + + + Violet + RGB + PROCESS + 75 + 0 + 125 + + + Améthyste + RGB + PROCESS + 129 + 1 + 125 + + + Framboise + RGB + PROCESS + 184 + 2 + 126 + + + Magenta pur + RGB + PROCESS + 240 + 3 + 127 + + + Rouge global + PROCESS + 100.000000 + RGB + 255 + 0 + 0 + + + Jus global + PROCESS + 100.000000 + RGB + 255 + 126 + 0 + + + Jaune pur global + PROCESS + 100.000000 + RGB + 255 + 255 + 0 + + + Vert global + PROCESS + 100.000000 + RGB + 51 + 160 + 43 + + + Cyan pur global + PROCESS + 100.000000 + RGB + 0 + 160 + 198 + + + Bleu fonds marins global + PROCESS + 100.000000 + RGB + 19 + 0 + 123 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/images/spotify-sourceicon.svg b/data/images/spotify-sourceicon.svg new file mode 100644 index 000000000..b20952cc8 --- /dev/null +++ b/data/images/spotify-sourceicon.svg @@ -0,0 +1,92 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/data/images/star-hover.svg b/data/images/star-hover.svg new file mode 100644 index 000000000..2ca6c7b62 --- /dev/null +++ b/data/images/star-hover.svg @@ -0,0 +1,14 @@ + + + star-hover + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + \ No newline at end of file diff --git a/data/images/star-unstarred.svg b/data/images/star-unstarred.svg new file mode 100644 index 000000000..5d0e64d83 --- /dev/null +++ b/data/images/star-unstarred.svg @@ -0,0 +1,14 @@ + + + star-unstarred + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + \ No newline at end of file diff --git a/data/images/starred.svg b/data/images/starred.svg new file mode 100644 index 000000000..d7cce2eac --- /dev/null +++ b/data/images/starred.svg @@ -0,0 +1,14 @@ + + + starred + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + \ No newline at end of file diff --git a/data/images/station.svg b/data/images/station.svg new file mode 100644 index 000000000..64966d825 --- /dev/null +++ b/data/images/station.svg @@ -0,0 +1,32 @@ + + + station + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/subscribe-off.svg b/data/images/subscribe-off.svg new file mode 100644 index 000000000..141e5f2c8 --- /dev/null +++ b/data/images/subscribe-off.svg @@ -0,0 +1,15 @@ + + + subscribe-off + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/subscribe-on.svg b/data/images/subscribe-on.svg new file mode 100644 index 000000000..95932bcdb --- /dev/null +++ b/data/images/subscribe-on.svg @@ -0,0 +1,20 @@ + + + subscribe-on + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/supercollection.svg b/data/images/supercollection.svg new file mode 100644 index 000000000..f95015db6 --- /dev/null +++ b/data/images/supercollection.svg @@ -0,0 +1,18 @@ + + + supercollection + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/track-icon.svg b/data/images/track-icon.svg new file mode 100644 index 000000000..cebc3054d --- /dev/null +++ b/data/images/track-icon.svg @@ -0,0 +1,50 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/data/images/track-placeholder-grid.svg b/data/images/track-placeholder-grid.svg new file mode 100644 index 000000000..789c2edb9 --- /dev/null +++ b/data/images/track-placeholder-grid.svg @@ -0,0 +1,85 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/data/images/uploading.svg b/data/images/uploading.svg new file mode 100644 index 000000000..ec238b7bb --- /dev/null +++ b/data/images/uploading.svg @@ -0,0 +1,12 @@ + + + uploading + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + \ No newline at end of file diff --git a/data/images/user-avatar.svg b/data/images/user-avatar.svg new file mode 100644 index 000000000..c6bff4ef9 --- /dev/null +++ b/data/images/user-avatar.svg @@ -0,0 +1,19 @@ + + + user-avatar + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/view-refresh.svg b/data/images/view-refresh.svg new file mode 100644 index 000000000..cebe65781 --- /dev/null +++ b/data/images/view-refresh.svg @@ -0,0 +1,9 @@ + + + view-refresh + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + \ No newline at end of file diff --git a/data/images/view-toggle-active-centre.svg b/data/images/view-toggle-active-centre.svg new file mode 100644 index 000000000..e2b7c72cb --- /dev/null +++ b/data/images/view-toggle-active-centre.svg @@ -0,0 +1,14 @@ + + + view-toggle-active-centre + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + \ No newline at end of file diff --git a/data/images/view-toggle-active-left.svg b/data/images/view-toggle-active-left.svg new file mode 100644 index 000000000..3ffc30e13 --- /dev/null +++ b/data/images/view-toggle-active-left.svg @@ -0,0 +1,14 @@ + + + view-toggle-active-left + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + \ No newline at end of file diff --git a/data/images/view-toggle-active-right.svg b/data/images/view-toggle-active-right.svg new file mode 100644 index 000000000..7f45e334d --- /dev/null +++ b/data/images/view-toggle-active-right.svg @@ -0,0 +1,14 @@ + + + view-toggle-active-right + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + \ No newline at end of file diff --git a/data/images/view-toggle-icon-artist-active.svg b/data/images/view-toggle-icon-artist-active.svg new file mode 100644 index 000000000..202397535 --- /dev/null +++ b/data/images/view-toggle-icon-artist-active.svg @@ -0,0 +1,23 @@ + + + view-toggle-icon-artist-active + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/view-toggle-icon-artist-inactive.svg b/data/images/view-toggle-icon-artist-inactive.svg new file mode 100644 index 000000000..0012fd4d8 --- /dev/null +++ b/data/images/view-toggle-icon-artist-inactive.svg @@ -0,0 +1,23 @@ + + + view-toggle-icon-artist-inactive + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/view-toggle-icon-cloud-active.svg b/data/images/view-toggle-icon-cloud-active.svg new file mode 100644 index 000000000..e30ecbf82 --- /dev/null +++ b/data/images/view-toggle-icon-cloud-active.svg @@ -0,0 +1,14 @@ + + + view-toggle-icon-cloud-active + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + \ No newline at end of file diff --git a/data/images/view-toggle-icon-cloud-inactive.svg b/data/images/view-toggle-icon-cloud-inactive.svg new file mode 100644 index 000000000..9196a8cde --- /dev/null +++ b/data/images/view-toggle-icon-cloud-inactive.svg @@ -0,0 +1,14 @@ + + + view-toggle-icon-cloud-inactive + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + \ No newline at end of file diff --git a/data/images/view-toggle-icon-grid-active.svg b/data/images/view-toggle-icon-grid-active.svg new file mode 100644 index 000000000..a3fd0bea3 --- /dev/null +++ b/data/images/view-toggle-icon-grid-active.svg @@ -0,0 +1,12 @@ + + + view-toggle-icon-grid-active + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + \ No newline at end of file diff --git a/data/images/view-toggle-icon-grid-inactive.svg b/data/images/view-toggle-icon-grid-inactive.svg new file mode 100644 index 000000000..ab7392624 --- /dev/null +++ b/data/images/view-toggle-icon-grid-inactive.svg @@ -0,0 +1,12 @@ + + + view-toggle-icon-grid-inactive + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + \ No newline at end of file diff --git a/data/images/view-toggle-icon-list-active.svg b/data/images/view-toggle-icon-list-active.svg new file mode 100644 index 000000000..c7f1483d3 --- /dev/null +++ b/data/images/view-toggle-icon-list-active.svg @@ -0,0 +1,21 @@ + + + view-toggle-icon-list-active + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/view-toggle-icon-list-inactive.svg b/data/images/view-toggle-icon-list-inactive.svg new file mode 100644 index 000000000..0f88ad444 --- /dev/null +++ b/data/images/view-toggle-icon-list-inactive.svg @@ -0,0 +1,21 @@ + + + view-toggle-icon-list-inactive + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/view-toggle-inactive-centre.svg b/data/images/view-toggle-inactive-centre.svg new file mode 100644 index 000000000..6cce0a3df --- /dev/null +++ b/data/images/view-toggle-inactive-centre.svg @@ -0,0 +1,14 @@ + + + view-toggle-inactive-right + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + \ No newline at end of file diff --git a/data/images/view-toggle-inactive-left.svg b/data/images/view-toggle-inactive-left.svg new file mode 100644 index 000000000..c98f1aa42 --- /dev/null +++ b/data/images/view-toggle-inactive-left.svg @@ -0,0 +1,14 @@ + + + view-toggle-inactive-left + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + \ No newline at end of file diff --git a/data/images/view-toggle-inactive-right.svg b/data/images/view-toggle-inactive-right.svg new file mode 100644 index 000000000..2000ece02 --- /dev/null +++ b/data/images/view-toggle-inactive-right.svg @@ -0,0 +1,14 @@ + + + view-toggle-inactive-right + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + \ No newline at end of file diff --git a/data/images/view-toggle-pressed-centre.svg b/data/images/view-toggle-pressed-centre.svg new file mode 100644 index 000000000..c873f7f8c --- /dev/null +++ b/data/images/view-toggle-pressed-centre.svg @@ -0,0 +1,14 @@ + + + view-toggle-pressed-center + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + \ No newline at end of file diff --git a/data/images/view-toggle-pressed-left.svg b/data/images/view-toggle-pressed-left.svg new file mode 100644 index 000000000..7ea9c32f7 --- /dev/null +++ b/data/images/view-toggle-pressed-left.svg @@ -0,0 +1,14 @@ + + + view-toggle-pressed-left + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + \ No newline at end of file diff --git a/data/images/view-toggle-pressed-right.svg b/data/images/view-toggle-pressed-right.svg new file mode 100644 index 000000000..c58c0ad03 --- /dev/null +++ b/data/images/view-toggle-pressed-right.svg @@ -0,0 +1,14 @@ + + + view-toggle-pressed-right + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + \ No newline at end of file diff --git a/data/images/volume-icon-full.svg b/data/images/volume-icon-full.svg new file mode 100644 index 000000000..ef9875972 --- /dev/null +++ b/data/images/volume-icon-full.svg @@ -0,0 +1,16 @@ + + + volume-icon-full + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + \ No newline at end of file diff --git a/data/images/volume-icon-muted.svg b/data/images/volume-icon-muted.svg new file mode 100644 index 000000000..26f088bb2 --- /dev/null +++ b/data/images/volume-icon-muted.svg @@ -0,0 +1,18 @@ + + + volume-icon-muted + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/stylesheets/topbar-radiobuttons.css b/data/stylesheets/topbar-radiobuttons.css index 402d3c1cb..fbdd619a8 100644 --- a/data/stylesheets/topbar-radiobuttons.css +++ b/data/stylesheets/topbar-radiobuttons.css @@ -19,37 +19,37 @@ QRadioButton::indicator { QRadioButton::indicator::unchecked { background-image: url(:/data/images/view-toggle-inactive-centre.png); - image: url(:/data/images/view-toggle-icon-list-inactive.png); + image: url(:/data/images/view-toggle-icon-list-inactive.svg); } QRadioButton::indicator::checked { background-image: url(:/data/images/view-toggle-active-centre.png); - image: url(:/data/images/view-toggle-icon-list-active.png); + image: url(:/data/images/view-toggle-icon-list-active.svg); } QRadioButton::indicator::pressed { background-image: url(:/data/images/view-toggle-pressed-centre.png); - image: url(:/data/images/view-toggle-icon-list-active.png); + image: url(:/data/images/view-toggle-icon-list-active.svg); } QRadioButton#radioNormal::indicator::unchecked { background-image: url(:/data/images/view-toggle-inactive-left.png); - image: url(:/data/images/view-toggle-icon-artist-inactive.png); + image: url(:/data/images/view-toggle-icon-artist-inactive.svg); } QRadioButton#radioNormal::indicator::checked { background-image: url(:/data/images/view-toggle-active-left.png); - image: url(:/data/images/view-toggle-icon-artist-active.png); + image: url(:/data/images/view-toggle-icon-artist-active.svg); } QRadioButton#radioNormal::indicator::pressed { background-image: url(:/data/images/view-toggle-pressed-left.png); - image: url(:/data/images/view-toggle-icon-artist-active.png); + image: url(:/data/images/view-toggle-icon-artist-active.svg); } QRadioButton#radioCloud::indicator::unchecked { background-image: url(:/data/images/view-toggle-inactive-right.png); - image: url(:/data/images/view-toggle-icon-grid-inactive.png); + image: url(:/data/images/view-toggle-icon-grid-inactive.svg); } QRadioButton#radioCloud::indicator::checked { background-image: url(:/data/images/view-toggle-active-right.png); - image: url(:/data/images/view-toggle-icon-grid-active.png); + image: url(:/data/images/view-toggle-icon-grid-active.svg); } QRadioButton#radioCloud::indicator::pressed { background-image: url(:/data/images/view-toggle-pressed-right.png); - image: url(:/data/images/view-toggle-icon-grid-active.png); + image: url(:/data/images/view-toggle-icon-grid-active.svg); } diff --git a/lang/tomahawk_ar.ts b/lang/tomahawk_ar.ts index 7a3ff8a1a..d74e57b7c 100644 --- a/lang/tomahawk_ar.ts +++ b/lang/tomahawk_ar.ts @@ -48,17 +48,17 @@ connect and stream from you? AccountFactoryWrapperDelegate - + Online متصل - + Connecting... جاري الاتصال... - + Offline غير متصل @@ -66,18 +66,18 @@ connect and stream from you? AccountListWidget - + Connections - - + + Connect &All - + Disconnect &All @@ -101,154 +101,154 @@ connect and stream from you? ActionCollection - + &Listen Along &استمع مع - + Stop &Listening Along توقيف &الاستماع مع - + &Follow in real-time &تابع بنفس الوقت - - + + &Listen Privately &إستمع بخصوصية - - + + &Listen Publicly &إستمع علنا - + &Load Playlist &تحميل قائمة الأغاني - + &Rename Playlist &إعادة تسمية قائمة الأغاني - + &Copy Playlist Link &نسخ رابط قائمة الأغاني - + &Play &إستمع - + &Stop &أوقف الإستماع - + &Previous Track &الأغنية السابقة - + &Next Track &الأغنية التالية - + &Quit &أخرج - + Load &XSPF... تحميل XSPF&... - + U&pdate Collection &تحديث المجموعة - + Fully &Rescan Collection إعادة &مسح المجموعة كاملة - + Show Offline Sources أظهر المصادر الغير متصلة - + &Configure Tomahawk... &تكوين توماهوك... - + Minimize خفض - + Zoom زوم - + Hide Menu Bar إخفي شريط القائمة - + Diagnostics... تشخيص... - + About &Tomahawk... عن &توماهوك... - + &Legal Information... معلومات &قانونية... - + Check For Updates... تحقق من التحديثات... - + &Controls &ضوابط - + &Settings إ&عدادات - + &Help &مساعدة - + &Window &نافذة - + Main Menu القائمة الرئيسية @@ -296,7 +296,7 @@ connect and stream from you? نعتذر، لم نستطيع إيجاد أغاني أخرى لهذا الألبوم! - + Other Albums by %1 ألبومات أخرى ل%1 @@ -323,42 +323,44 @@ connect and stream from you? استمارة - + Top Hits الأكثر شهرة - + Related Artists الفنانين ذات الذوق القريب - + + Artist فنان - + Albums ألبومات - + + Cover غلاف - + Sorry, we could not find any albums for this artist! نعتذر, لم نستطيع إيجاد ألبومات أخرى لهذا الفنان! - + Sorry, we could not find any related artists! نعتذر، لم نستطيع إيجاد فنانين! - + Sorry, we could not find any top hits for this artist! نعتذر، لم نستطيع إيجاد أغاني مشهورة جدا لهذا الفنان! @@ -422,13 +424,13 @@ connect and stream from you? - + Shuffle خلط - + Repeat إعادة @@ -443,27 +445,27 @@ connect and stream from you? مرتفع - + Time Elapsed الوقت المنقضي - + Time Remaining الوقت المتبقي - + Playing from %1 يتم الاستماع من %1 - + Share شارك - + Love أحب @@ -489,24 +491,24 @@ connect and stream from you? CategoryAddItem - + Create new Playlist إنشاء قائمة أغاني جديدة - + Create new Station إنشاء إذاعة جديدة - - + + New Station إنشاء إذاعة جديدة - - + + %1 Station إذاعة %1 @@ -514,12 +516,12 @@ connect and stream from you? CategoryItem - + Playlists قائمات الأغاني - + Stations الإذاعات @@ -652,97 +654,97 @@ connect and stream from you? EchonestSteerer - + Steer this station: - + Much less - + Less - + A bit less - + Keep at current - + A bit more - + More - + Much more - + Tempo - + Loudness - + Danceability - + Energy - + Song Hotttnesss - + Artist Hotttnesss - + Artist Familiarity - + By Description - + Enter a description - + Apply steering command - + Reset all steering commands @@ -758,12 +760,12 @@ connect and stream from you? FlexibleView - + This playlist is currently empty. - + This playlist is currently empty. Add some tracks to it and enjoy the music! @@ -779,7 +781,7 @@ connect and stream from you? IndexingJobItem - + Indexing database فهرسة قاعدة البيانات @@ -846,7 +848,7 @@ connect and stream from you? LatchedStatusItem - + %1 is listening along with you! %1 يستمع معك! @@ -908,32 +910,32 @@ connect and stream from you? LovedTracksItem - + Top Loved Tracks أفضل الأغاني المحبوبة - + Sorry, we could not find any loved tracks! نعتذر، لم نستطيع إيجاد اي من الأغاني المحبوبة! - + The most loved tracks from all your friends أفضل الأغاني المحبوبة من جميع أصدقائك - + All of your loved tracks جميع أغانيك المحبوبة - + All of %1's loved tracks جميع أغاني "%1" المحبوبة - + Loved Tracks الأغاني المحبوبة @@ -1046,7 +1048,7 @@ connect and stream from you? تقدم - + Properties @@ -1172,20 +1174,30 @@ connect and stream from you? PlaylistLargeItemDelegate - + played %1 by you سمعت %1 - + played %1 by %2 %2 سمع %1 - + added %1 إضافة %1 + + + by <b>%1</b> + + + + + by <b>%1</b> on <b>%2</b> + + PlaylistModel @@ -1252,12 +1264,12 @@ connect and stream from you? PlaylistView - + This playlist is currently empty. هذه المجموعة فارغة حاليا. - + This playlist is currently empty. Add some tracks to it and enjoy the music! هذه القائمة فارغة حاليا. أضف لها بعض الأغاني واستمتع للموسيقى! @@ -1483,12 +1495,12 @@ connect and stream from you? SettingsDialog - + Collection مجموعة - + Advanced متقدمة @@ -1498,12 +1510,12 @@ connect and stream from you? الكل - + Some changed settings will not take effect until Tomahawk is restarted بعض الإعدادات التي تم تغييرها لن تصبح نافذة المفعول حتى يتم إعادة تشغيل توماهوك - + Services خدمات @@ -1513,37 +1525,37 @@ connect and stream from you? تثبيت من الملف - + Configure the accounts and services used by Tomahawk to search and retrieve music, find your friends and update your status. تكوين الحسابات والخدمات التي يستخدمها توماهوك للبحث واسترجاع الموسيقى، والعثور على أصدقائك وتحديث حالتك. - + Manage how Tomahawk finds music on your computer. تنظيم كيف يجد توماهوك الموسيقى على نظامك. - + Configure Tomahawk's advanced settings, including network connectivity settings, browser interaction and more. تكوين إعدادات توماهوك المتطورة، بما في ذلك إعدادات شبكة الاتصال، وتفاعل المتصفح وما إلى ذلك. - + Install resolver from file تثبيت محلل من ملف - + Delete all Access Control entries? حذف كافة بيانات التحكم بالوصول؟ - + Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to. هل فعلا تريد حذف جميع بيانات التحكم بالوصول؟ سوف يطلب منك اتخاذ القرار مجددا لكل ند على اتصال به. - + Information معلومات @@ -1739,22 +1751,22 @@ connect and stream from you? TextLabel - + Tweet تويت (Tweet) - + Listening to "%1" by %2. %3 إنني أستمع إلى "%1" من قبل %2. %3 - + Listening to "%1" by %2 on "%3". %4 إنني أستمع إلى "%1" من قبل %2 على "%3". %4 - + %1 characters left تبقى %1 حروف @@ -1787,19 +1799,19 @@ connect and stream from you? توب ١٠ - + All available tracks جميع الأغاني المتاحة - - + + Show أظهر - - + + Hide إخفي @@ -1846,7 +1858,7 @@ connect and stream from you? - + Latest Additions أحدث الإضافات @@ -1856,42 +1868,42 @@ connect and stream from you? تم الاستماع لها مؤخرا - + SuperCollection سوبر كولكشن - + Latest additions to your collection آخر إضافات على مجموعتك - + Latest additions to %1's collection آخر إضافات على مجموعة %1 - + Sorry, we could not find any recent additions! نعتذر، لم نستطيع إيجاد إضافة جديدة! - + Recently Played Tracks الأغاني التي إستمعت إليها مؤخرا - + Your recently played tracks الأغاني التي إستمعت إليها مؤخرا - + %1's recently played tracks الأغاني التي سمعها مؤخرا %1 - + Sorry, we could not find any recent plays! نعتذر، لم نستطيع إيجاد أغاني مسموعة مؤخرا! @@ -2107,17 +2119,17 @@ connect and stream from you? TemporaryPageItem - + Copy Artist Link نسخ رابط الفنان - + Copy Album Link نسخ رابط الالبوم - + Copy Track Link نسخ رابط الأغنية @@ -2125,32 +2137,32 @@ connect and stream from you? Tomahawk::Accounts::AccountDelegate - + Add Account أضف حساب - + Remove إزالة - + %1 downloads تحميل %1 - + Online متصل - + Connecting... جاري الاتصال... - + Offline غير متصل @@ -2220,7 +2232,7 @@ connect and stream from you? Tomahawk::Accounts::LastFmAccountFactory - + Scrobble your tracks to last.fm, and find freely downloadable tracks to play إبعث أغانيك الخاصة إلى last .fm و جد أغاني جديدة مجانا للاستماع إليها @@ -2526,83 +2538,82 @@ You may wish to try re-authenticating. Tomahawk::ContextMenu - + &Play &إستمع - - - + + + Add to &Queue أضف إلى &قائمة الانتظار - + Continue Playback after this &Track أكمل الاستماع بعد هذه &الأغنية - + Stop Playback after this &Track أوقف الاستماع بعد هذه &الأغنية - - + + &Love &أحب - + + + + &Go to "%1" + + + + + + + Go to "%1" + + + + &Copy Track Link &نسخ رابط الأغنية - + Copy Album &Link نسخ &رابط الالبوم - + Copy Artist &Link نسخ &رابط قائمة الأغاني - + Un-&Love لا &أحب - + &Delete Items &أحذف البنود - - &Show Track Page - &أظهر صفحة الأغاني - - - + Properties... خصائص... - + &Delete Item &أحذف البند - - - &Show Album Page - &أظهر صفحة الألبومات - - - - &Show Artist Page - &أظهر صفحة الفنان - Tomahawk::DropJobNotifier @@ -2697,7 +2708,7 @@ Please change the filters or try again. Tomahawk::DynamicWidget - + Station ran out of tracks! Try tweaking the filters for a new set of songs to play. @@ -3055,27 +3066,27 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks أفضل الأغاني - + Loved Tracks الأغاني المحبوبة - + Hyped Tracks فقت الأغاني - + Top Artists أفضل الفنانين - + Hyped Artists فقت الفنانين @@ -3209,7 +3220,7 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::ShortenedLinkParser - + Network error parsing shortened link! خطأ شبكة في تحليل تقصير الرابط! @@ -3484,178 +3495,178 @@ enter the displayed PIN number here: التالي - + Back إلى الوراء - + Go back one page العودة صفحة واحدة إلى الوراء - + Forward تقدم - + Go forward one page تقدم صفحة واحدة - + Global Search... بحث شامل... - - + + Hide Menu Bar إخفي شريط القائمة - - + + Show Menu Bar أظهر شريط القائمة - + &Main Menu ال&قائمة الرئيسية - - - + + + Connect To Peer ربط بالند - + Enter peer address: أدخل عنوان الند: - + Enter peer port: أدخل بوابة الند: - + Enter peer key: أدخل مفتاح الند: - + XSPF Error خطأ XSPF - + This is not a valid XSPF playlist. قائمة الأغاني XSPF هذه ليست صالحة. - + Failed to save tracks فشل في حفظ الأغاني - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. بعض الأغاني في قائمة الأغاني لا تحتوي على إسم الفنان أو إسم الأغنية. هذه الأغاني سوف تتجاهل. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. عذرا، هناك مشكلة في الوصول إلى جهاز الصوت أو الأغنية المطلوب، سوف يتم تخطي الأغنية الحالية. تأكد أن لديك خلفية فونون المناسبة والإضافات المطلوبة مثبتة. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. عذرا، هناك مشكلة في الوصول إلى جهاز الصوت أو الأغنية المطلوب، سوف يتم تخطي الأغنية الحالية. - + Station إذاعة - + Create New Station إنشاء قائمة أغاني جديدة - + Name: الاسم: - + Playlist قائمة الأغاني - + Automatic Playlist قائمة أغاني أوتوماتيكية - + Pause تعليق - + &Play &إستمع - + Authentication Error خطأ في المصادقة - + Error connecting to SIP: Authentication failed! خطأ في الاتصال بسيب (SIP): فشلت المصادقة! - + %1 by %2 track, artist name %1 من قبل %2 - + %1 - %2 current track, some window title %1 - %2 - + <h2><b>Tomahawk %1<br/>(%2)</h2> <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012 حقوق الطبع والنشر ٢٠١٠ - ٢٠١٢ - + Thanks to: شكر لكل من: - + About Tomahawk عن توماهوك @@ -3711,27 +3722,27 @@ enter the displayed PIN number here: نعتذر، لم نستطيع إيجاد أغاني قريبة من هذه الأغنية! - + You've listened to this track %n time(s). لقد استمعت إلى هذه الأغنية %n مرة.لقد استمعت إلى هذه الأغنية مرة %n.لقد استمعت إلى هذه الأغنية مرتين %n.لقد استمعت إلى هذه الأغنية %n مرات.لقد استمعت إلى هذه الأغنية %n مرات.لقد استمعت إلى هذه الأغنية %n مرات. - + You've never listened to this track before. لم تستمع لهذه الأغنية من قبل. - + You first listened to it on %1. استمعت إليها أولاً في %1. - + You've listened to %1 %n time(s). لقد استمعت إلى %1 %n مرة.لقد استمعت إلى %1 مرة %n.لقد استمعت إلى %1 مرتين %n.لقد استمعت إلى %1 %n مرات.لقد استمعت إلى %1 %n مرات.لقد استمعت إلى %1 %n مرات. - + You've never listened to %1 before. لم تستمع إلى %1 من قبل. @@ -3747,13 +3758,13 @@ enter the displayed PIN number here: TransferStatusItem - + from streaming artist - track from friend من - + to streaming artist - track to friend إلى @@ -3762,7 +3773,7 @@ enter the displayed PIN number here: TreeItemDelegate - + Unknown مجهول @@ -3937,17 +3948,17 @@ You can re-send a sync message at any time simply by sending another tweet using الأغاني التي إستمعت إليها مؤخرا - + Recently played tracks الأغاني التي إستمعت إليها مؤخرا - + No recently created playlists in your network. لا قوائم أغاني جديدة أنشئت مؤخرا على شبكتك. - + Welcome to Tomahawk مرحبا بكم في توماهوك diff --git a/lang/tomahawk_bg.ts b/lang/tomahawk_bg.ts index 34a77e6c4..01bf9723a 100644 --- a/lang/tomahawk_bg.ts +++ b/lang/tomahawk_bg.ts @@ -47,17 +47,17 @@ connect and stream from you? AccountFactoryWrapperDelegate - + Online На линия - + Connecting... Свързване... - + Offline Извън линия @@ -65,18 +65,18 @@ connect and stream from you? AccountListWidget - + Connections Връзки - - + + Connect &All Свържи &Всички - + Disconnect &All Прекъсни &Всички @@ -100,154 +100,154 @@ connect and stream from you? ActionCollection - + &Listen Along &Слушай заедно с - + Stop &Listening Along Спри &да слушаш заедно с - + &Follow in real-time &Следвай в реално време - - + + &Listen Privately &Слушай самостоятелно - - + + &Listen Publicly &Слушай публично - + &Load Playlist &Зареди списък - + &Rename Playlist &Преименувай списък - + &Copy Playlist Link &Копирай връзка към списък - + &Play &Изпълни - + &Stop &Спри - + &Previous Track &Предходна песен - + &Next Track &Следваща песен - + &Quit &Изключи приложението - + Load &XSPF... Зареди &XSPF... - + U&pdate Collection О&бнови колекцията - + Fully &Rescan Collection Пълно &сканиране на колекцията - + Show Offline Sources Покажи източници, които не са на линия - + &Configure Tomahawk... &Настройки... - + Minimize Минимизирай - + Zoom Увеличи - + Hide Menu Bar Скрий лентата на менюто - + Diagnostics... Диагностика... - + About &Tomahawk... За &Tomahawk... - + &Legal Information... &Правна информация - + Check For Updates... Провери за обновления - + &Controls &Контроли - + &Settings &Настройки - + &Help &Помощ - + &Window &Прозорец - + Main Menu Главно меню @@ -295,7 +295,7 @@ connect and stream from you? Съжалявам, но не откривам нито една песен за този артист! - + Other Albums by %1 Други албуми от %1 @@ -322,42 +322,44 @@ connect and stream from you? - + Top Hits Най-известни изпълнения - + Related Artists Изпълнители с подобно звучене - + + Artist Изпълнител - + Albums Албуми - + + Cover Обложка - + Sorry, we could not find any albums for this artist! Съжалявам, но не откривам нито един албум за този артист! - + Sorry, we could not find any related artists! Съжалявам, но не откривам нито един подобен на този артист! - + Sorry, we could not find any top hits for this artist! Съжалявам, но не откривам нито една хитова песен на този артист! @@ -421,13 +423,13 @@ connect and stream from you? - + Shuffle Разбъркано - + Repeat Повтори @@ -442,27 +444,27 @@ connect and stream from you? 100% - + Time Elapsed Изминало време - + Time Remaining Оставащо време - + Playing from %1 Изпълнявам от %1 - + Share Сподели - + Love Харесай @@ -488,24 +490,24 @@ connect and stream from you? CategoryAddItem - + Create new Playlist Създай нов списък - + Create new Station Създай нова станция - - + + New Station Нова станция - - + + %1 Station %1 Станция @@ -513,12 +515,12 @@ connect and stream from you? CategoryItem - + Playlists Списъци - + Stations Станции @@ -583,7 +585,8 @@ Tomahaw създаде доклад относно това и изпращай You can disable sending crash reports in the configuration dialog. - Можете да спрете изпращането на информация относно проблеми в панелът с настройки. + Можете да спрете изпращането на информация, +относно проблеми в панелът с настройки. @@ -654,97 +657,97 @@ Tomahaw създаде доклад относно това и изпращай EchonestSteerer - + Steer this station: Настрой, тази станция: - + Much less Много по-малко - + Less По-малко - + A bit less Малко по-малко - + Keep at current Задръж - + A bit more Малко повече - + More Повече - + Much more Много повече - + Tempo Темпо - + Loudness Сила - + Danceability Танцувалност - + Energy Енергичност - + Song Hotttnesss Популярност на песента - + Artist Hotttnesss Популярност на изпълнителя - + Artist Familiarity Сходност на изпълнителите - + By Description По описание - + Enter a description Въведи описание - + Apply steering command Приложи настройката - + Reset all steering commands Нулирай всички настройки @@ -760,12 +763,12 @@ Tomahaw създаде доклад относно това и изпращай FlexibleView - + This playlist is currently empty. Този списък е празен, в момента. - + This playlist is currently empty. Add some tracks to it and enjoy the music! Този списък е празен в моментът. Добави няколко песни и се наслади на музиката. @@ -781,7 +784,7 @@ Tomahaw създаде доклад относно това и изпращай IndexingJobItem - + Indexing database Индексиране на БД @@ -848,7 +851,7 @@ Tomahaw създаде доклад относно това и изпращай LatchedStatusItem - + %1 is listening along with you! %1 слуша заедно с теб! @@ -910,32 +913,32 @@ Tomahaw създаде доклад относно това и изпращай LovedTracksItem - + Top Loved Tracks Най-Най-харесвани - + Sorry, we could not find any loved tracks! Съжалявам, не откривам песни, които са маркирани като любими. - + The most loved tracks from all your friends Най-харесваните изпълнения от всичките ти приятели - + All of your loved tracks Всички песни, които харесваш - + All of %1's loved tracks Всички песни, които %1 харесва - + Loved Tracks Любими изпълнения @@ -1048,7 +1051,7 @@ Tomahaw създаде доклад относно това и изпращай Напред - + Properties Настройки @@ -1174,20 +1177,30 @@ Tomahaw създаде доклад относно това и изпращай PlaylistLargeItemDelegate - + played %1 by you изпълнена %1 от мен - + played %1 by %2 изпълнена %1 от %2 - + added %1 добавен %1 + + + by <b>%1</b> + от <b>%1</b> + + + + by <b>%1</b> on <b>%2</b> + от <b>%1</b> на <b>%2</b> + PlaylistModel @@ -1223,12 +1236,15 @@ Tomahaw създаде доклад относно това и изпращай Just a regular old playlist... Give it a name, drag in some tracks, and go! - Обикновен списък. Име, няколко песни и си ти на ход! ;-) + Обикновен списък. +Име, няколко песни и си ти на ход! Don't know exactly what you want? Give Tomahawk a few pointers and let it build a playlist for you! - Не знаеш точно какво искаш? Дай на Tomahawk няколко начални идеи и му позволи да създаде списък с песни за теб! + Не знаеш точно какво искаш? +Дай на Tomahawk няколко начални идеи +и му позволи да създаде списък с песни. @@ -1254,14 +1270,15 @@ Tomahaw създаде доклад относно това и изпращай PlaylistView - + This playlist is currently empty. Този списък е празен в момента. - + This playlist is currently empty. Add some tracks to it and enjoy the music! - Този списък в момента е празен. Добави няколко изпълнения и се наслади на музиката! + Този списък в момента е празен. +Добави няколко изпълнения и се наслади на музиката! @@ -1483,12 +1500,12 @@ Tomahaw създаде доклад относно това и изпращай SettingsDialog - + Collection Колекция - + Advanced Разширени @@ -1498,12 +1515,12 @@ Tomahaw създаде доклад относно това и изпращай Всички - + Some changed settings will not take effect until Tomahawk is restarted Някои промени няма да имат ефект, докато програмата не бъде рестартирана. - + Services Услуги @@ -1513,38 +1530,38 @@ Tomahaw създаде доклад относно това и изпращай Инсталирай от файл - + Configure the accounts and services used by Tomahawk to search and retrieve music, find your friends and update your status. Настройки на регистрации и услуги, ползвани от Tomahawk да търси музика, да сте свързва с твоите приятели и да обновява статусът ти. - + Manage how Tomahawk finds music on your computer. Указва начинът по който Tomahawk открива музиката на твоя компютър - + Configure Tomahawk's advanced settings, including network connectivity settings, browser interaction and more. Разширени настройки на Tomahawk, включващи настройки на мрежова свързаност, взаимодействие с браузъри и други подобни. - + Install resolver from file Инсталирай услиги за търсене от файл - + Delete all Access Control entries? Изтриване на всички данни за достъп? - + Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to. Наистина ли желаеш да изтриеш всички данни за достъп? Ще бъдеш питан отново за даване на достъп за всяка връзка. - + Information Информация @@ -1638,7 +1655,7 @@ Tomahaw създаде доклад относно това и изпращай Show notification when a new song starts to play - + Покажи уведомление, когато почне да се изпълнява нова песен @@ -1674,7 +1691,7 @@ Tomahaw създаде доклад относно това и изпращай Watch for changes - блюдавай за промени + Наблюдавай за промени @@ -1741,22 +1758,22 @@ Tomahaw създаде доклад относно това и изпращай Етикет - + Tweet Чурулик - + Listening to "%1" by %2. %3 - В момента се изпълнява "%1" от %2, %3 + ♥ "%1" от %2, %3 - + Listening to "%1" by %2 on "%3". %4 - В момента се изпълнява "%1" от %2, от %3, %4 + "%1" от %2, от %3, %4 - + %1 characters left Остават още %1 символа @@ -1789,19 +1806,19 @@ Tomahaw създаде доклад относно това и изпращай Първите 10 - + All available tracks Всички налични изпълнения - - + + Show Покажи - - + + Hide Скрий @@ -1848,7 +1865,7 @@ Tomahaw създаде доклад относно това и изпращай - + Latest Additions Последно добавени @@ -1858,43 +1875,43 @@ Tomahaw създаде доклад относно това и изпращай Наскоро изпълнени песни - + SuperCollection Супер колекция /Сборен излед от локалните и наличните в колекциите на приятелите ти/ - + Latest additions to your collection Последно добавени към колекцията - + Latest additions to %1's collection Последно добавени в колекцията на %1 - + Sorry, we could not find any recent additions! Съжалявам, но не откривам нито една ново-добавена позиция! - + Recently Played Tracks Наскоро изпълнени песни - + Your recently played tracks Наскоро изпълнени песни от теб - + %1's recently played tracks Наскоро изпълнените песни от %1 - + Sorry, we could not find any recent plays! Съжалявам, но не откривам нито една наскоро изпълнена песен! @@ -2111,17 +2128,17 @@ Tomahaw създаде доклад относно това и изпращай TemporaryPageItem - + Copy Artist Link Копирай адресът на Изпълнителят - + Copy Album Link Копирай адресът на Албума - + Copy Track Link Копирай адресът на изпълнението @@ -2129,32 +2146,32 @@ Tomahaw създаде доклад относно това и изпращай Tomahawk::Accounts::AccountDelegate - + Add Account Добави регистрация - + Remove Премахни - + %1 downloads %1 сваляния - + Online На линия - + Connecting... Свързване... - + Offline Извън линия @@ -2227,7 +2244,7 @@ Tomahaw създаде доклад относно това и изпращай Tomahawk::Accounts::LastFmAccountFactory - + Scrobble your tracks to last.fm, and find freely downloadable tracks to play Качи информация за изпълнените песни в Last.fm и открий свободно разпространявани. @@ -2535,83 +2552,82 @@ You may wish to try re-authenticating. Tomahawk::ContextMenu - + &Play &Изпълни - - - + + + Add to &Queue Добави към &опашката - + Continue Playback after this &Track Продължи изпълнението след тази песен - + Stop Playback after this &Track Спри изпълнението след тази песен - - + + &Love &Харесай - + + + + &Go to "%1" + &Иди на "%1" + + + + + + Go to "%1" + Иди на "%1" + + + &Copy Track Link &Копирай адреса на изпълнението - + Copy Album &Link Копирай адресът на албума - + Copy Artist &Link Копирай адресът на изпълнителя - + Un-&Love Не-&харесай - + &Delete Items &Изтрий позициите - - &Show Track Page - &Покажи страницата на песента - - - + Properties... Подробности: - + &Delete Item &Изтрий позицията - - - &Show Album Page - &Покажи страницата на албума - - - - &Show Artist Page - &Покажи страницата на артиста - Tomahawk::DropJobNotifier @@ -2705,7 +2721,7 @@ Please change the filters or try again. Tomahawk::DynamicWidget - + Station ran out of tracks! Try tweaking the filters for a new set of songs to play. @@ -3063,27 +3079,27 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks Най-слушани песни - + Loved Tracks Харесани песни - + Hyped Tracks Песни, изпъкващи сред останалите - + Top Artists Най-слушани артисти - + Hyped Artists Изпълнители, изпъкващи сред останалите @@ -3217,7 +3233,7 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::ShortenedLinkParser - + Network error parsing shortened link! Мрежова грешка при извличане на съкратеният адрес. @@ -3492,181 +3508,181 @@ enter the displayed PIN number here: Следваща - + Back Назад - + Go back one page Една страница назад - + Forward Напред - + Go forward one page Една страница напред - + Global Search... Глобално търсене... - - + + Hide Menu Bar Скрий лентата с менюто - - + + Show Menu Bar Покажи лентата с менюто - + &Main Menu &Основно меню - - - + + + Connect To Peer Свържи се с друг потребител - + Enter peer address: Въведи адресът на отдалеченият потребител: - + Enter peer port: Въведи порт: - + Enter peer key: Въведи ключът за удостоверяване: - + XSPF Error XSPF Грешка - + This is not a valid XSPF playlist. Това не е валиден XSPF списък - + Failed to save tracks Не мога да запазя списъкът с песни - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. Някои от песните в този списък нямат артист и заглавие. Те ще бъдат игнорирани. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. Съжалявам. Има проблем с достъпа до твоето аудио-устройство или до избраната песен - тя ще бъде прескочена. Моля, увери се, че са инсталирани подходящ Phonon и приставки. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Съжалявам. Има проблем с достъпа до твоето аудио устройство или избраната песен. Тя ще бъде пропусната. - + Station Станция - + Create New Station Създай нова станция - + Name: Име: - + Playlist Списък - + Automatic Playlist Автоматично-генериран списък - + Pause Пауза - + &Play &Възпроизвеждане - + Authentication Error Грешка при удостоверяване - + Error connecting to SIP: Authentication failed! Грешка при свързване: Неуспешно удостоверяване! - + %1 by %2 track, artist name %1 от %2 - + %1 - %2 current track, some window title %1 - %2 - + <h2><b>Tomahawk %1<br/>(%2)</h2> <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012 Всички права - запазени. 2010 - 2012 - + Thanks to: Благодарности на: - + About Tomahawk Относно Tomahawk @@ -3722,27 +3738,27 @@ enter the displayed PIN number here: Съжалявам, но не откривам нито една подобна на тази песен! - + You've listened to this track %n time(s). Ти си слушал тази песен %n път(и)Ти си слушал тази песен %n път(и) - + You've never listened to this track before. Никога не си слушал тази песен преди - + You first listened to it on %1. Първоначално си я слушал на %1 - + You've listened to %1 %n time(s). Слушал си %1 път(и)Слушал си %1 %n път(и) - + You've never listened to %1 before. Никога не си слушал %1 преди @@ -3758,13 +3774,13 @@ enter the displayed PIN number here: TransferStatusItem - + from streaming artist - track from friend от - + to streaming artist - track to friend до @@ -3773,7 +3789,7 @@ enter the displayed PIN number here: TreeItemDelegate - + Unknown Неизвестно @@ -3893,7 +3909,7 @@ You can re-send a sync message at any time simply by sending another tweet using This playlist is empty! - + Списъкът е празен! @@ -3950,17 +3966,17 @@ You can re-send a sync message at any time simply by sending another tweet using Наскоро изпълнени - + Recently played tracks Наскоро изпълнени - + No recently created playlists in your network. Не откривам наскоро създадени списъци в твоята мрежа - + Welcome to Tomahawk Здравей! diff --git a/lang/tomahawk_bn_IN.ts b/lang/tomahawk_bn_IN.ts index 25353b28e..8a75f915a 100644 --- a/lang/tomahawk_bn_IN.ts +++ b/lang/tomahawk_bn_IN.ts @@ -47,17 +47,17 @@ connect and stream from you? AccountFactoryWrapperDelegate - + Online - + Connecting... - + Offline @@ -65,18 +65,18 @@ connect and stream from you? AccountListWidget - + Connections - - + + Connect &All - + Disconnect &All @@ -100,154 +100,154 @@ connect and stream from you? ActionCollection - + &Listen Along - + Stop &Listening Along - + &Follow in real-time - - + + &Listen Privately - - + + &Listen Publicly - + &Load Playlist - + &Rename Playlist - + &Copy Playlist Link - + &Play - + &Stop - + &Previous Track - + &Next Track - + &Quit - + Load &XSPF... - + U&pdate Collection - + Fully &Rescan Collection - + Show Offline Sources - + &Configure Tomahawk... - + Minimize - + Zoom - + Hide Menu Bar - + Diagnostics... - + About &Tomahawk... - + &Legal Information... - + Check For Updates... - + &Controls - + &Settings - + &Help - + &Window - + Main Menu @@ -295,7 +295,7 @@ connect and stream from you? - + Other Albums by %1 @@ -322,42 +322,44 @@ connect and stream from you? - + Top Hits - + Related Artists - + + Artist - + Albums - + + Cover - + Sorry, we could not find any albums for this artist! - + Sorry, we could not find any related artists! - + Sorry, we could not find any top hits for this artist! @@ -421,13 +423,13 @@ connect and stream from you? - + Shuffle - + Repeat @@ -442,27 +444,27 @@ connect and stream from you? - + Time Elapsed - + Time Remaining - + Playing from %1 - + Share - + Love @@ -488,24 +490,24 @@ connect and stream from you? CategoryAddItem - + Create new Playlist - + Create new Station - - + + New Station - - + + %1 Station @@ -513,12 +515,12 @@ connect and stream from you? CategoryItem - + Playlists - + Stations @@ -651,97 +653,97 @@ connect and stream from you? EchonestSteerer - + Steer this station: - + Much less - + Less - + A bit less - + Keep at current - + A bit more - + More - + Much more - + Tempo - + Loudness - + Danceability - + Energy - + Song Hotttnesss - + Artist Hotttnesss - + Artist Familiarity - + By Description - + Enter a description - + Apply steering command - + Reset all steering commands @@ -757,12 +759,12 @@ connect and stream from you? FlexibleView - + This playlist is currently empty. - + This playlist is currently empty. Add some tracks to it and enjoy the music! @@ -778,7 +780,7 @@ connect and stream from you? IndexingJobItem - + Indexing database @@ -845,7 +847,7 @@ connect and stream from you? LatchedStatusItem - + %1 is listening along with you! @@ -907,32 +909,32 @@ connect and stream from you? LovedTracksItem - + Top Loved Tracks - + Sorry, we could not find any loved tracks! - + The most loved tracks from all your friends - + All of your loved tracks - + All of %1's loved tracks - + Loved Tracks @@ -1045,7 +1047,7 @@ connect and stream from you? - + Properties @@ -1171,20 +1173,30 @@ connect and stream from you? PlaylistLargeItemDelegate - + played %1 by you - + played %1 by %2 - + added %1 + + + by <b>%1</b> + + + + + by <b>%1</b> on <b>%2</b> + + PlaylistModel @@ -1251,12 +1263,12 @@ connect and stream from you? PlaylistView - + This playlist is currently empty. - + This playlist is currently empty. Add some tracks to it and enjoy the music! @@ -1480,12 +1492,12 @@ connect and stream from you? SettingsDialog - + Collection - + Advanced @@ -1495,12 +1507,12 @@ connect and stream from you? - + Some changed settings will not take effect until Tomahawk is restarted - + Services @@ -1510,37 +1522,37 @@ connect and stream from you? - + Configure the accounts and services used by Tomahawk to search and retrieve music, find your friends and update your status. - + Manage how Tomahawk finds music on your computer. - + Configure Tomahawk's advanced settings, including network connectivity settings, browser interaction and more. - + Install resolver from file - + Delete all Access Control entries? - + Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to. - + Information @@ -1736,22 +1748,22 @@ connect and stream from you? - + Tweet - + Listening to "%1" by %2. %3 - + Listening to "%1" by %2 on "%3". %4 - + %1 characters left @@ -1784,19 +1796,19 @@ connect and stream from you? - + All available tracks - - + + Show - - + + Hide @@ -1843,7 +1855,7 @@ connect and stream from you? - + Latest Additions @@ -1853,42 +1865,42 @@ connect and stream from you? - + SuperCollection - + Latest additions to your collection - + Latest additions to %1's collection - + Sorry, we could not find any recent additions! - + Recently Played Tracks - + Your recently played tracks - + %1's recently played tracks - + Sorry, we could not find any recent plays! @@ -2104,17 +2116,17 @@ connect and stream from you? TemporaryPageItem - + Copy Artist Link - + Copy Album Link - + Copy Track Link @@ -2122,32 +2134,32 @@ connect and stream from you? Tomahawk::Accounts::AccountDelegate - + Add Account - + Remove - + %1 downloads - + Online - + Connecting... - + Offline @@ -2217,7 +2229,7 @@ connect and stream from you? Tomahawk::Accounts::LastFmAccountFactory - + Scrobble your tracks to last.fm, and find freely downloadable tracks to play @@ -2520,83 +2532,82 @@ You may wish to try re-authenticating. Tomahawk::ContextMenu - + &Play - - - + + + Add to &Queue - + Continue Playback after this &Track - + Stop Playback after this &Track - - + + &Love - + + + + &Go to "%1" + + + + + + + Go to "%1" + + + + &Copy Track Link - + Copy Album &Link - + Copy Artist &Link - + Un-&Love - + &Delete Items - - &Show Track Page - - - - + Properties... - + &Delete Item - - - &Show Album Page - - - - - &Show Artist Page - - Tomahawk::DropJobNotifier @@ -2689,7 +2700,7 @@ Please change the filters or try again. Tomahawk::DynamicWidget - + Station ran out of tracks! Try tweaking the filters for a new set of songs to play. @@ -3045,27 +3056,27 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks - + Loved Tracks - + Hyped Tracks - + Top Artists - + Hyped Artists @@ -3199,7 +3210,7 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::ShortenedLinkParser - + Network error parsing shortened link! @@ -3473,178 +3484,178 @@ enter the displayed PIN number here: - + Back - + Go back one page - + Forward - + Go forward one page - + Global Search... - - + + Hide Menu Bar - - + + Show Menu Bar - + &Main Menu - - - + + + Connect To Peer - + Enter peer address: - + Enter peer port: - + Enter peer key: - + XSPF Error - + This is not a valid XSPF playlist. - + Failed to save tracks - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. - + Station - + Create New Station - + Name: - + Playlist - + Automatic Playlist - + Pause - + &Play - + Authentication Error - + Error connecting to SIP: Authentication failed! - + %1 by %2 track, artist name - + %1 - %2 current track, some window title - + <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012 - + Thanks to: - + About Tomahawk @@ -3700,27 +3711,27 @@ enter the displayed PIN number here: - + You've listened to this track %n time(s). - + You've never listened to this track before. - + You first listened to it on %1. - + You've listened to %1 %n time(s). - + You've never listened to %1 before. @@ -3736,13 +3747,13 @@ enter the displayed PIN number here: TransferStatusItem - + from streaming artist - track from friend - + to streaming artist - track to friend @@ -3751,7 +3762,7 @@ enter the displayed PIN number here: TreeItemDelegate - + Unknown @@ -3921,17 +3932,17 @@ You can re-send a sync message at any time simply by sending another tweet using - + Recently played tracks - + No recently created playlists in your network. - + Welcome to Tomahawk diff --git a/lang/tomahawk_ca.ts b/lang/tomahawk_ca.ts index 146e74a35..4ae6b88da 100644 --- a/lang/tomahawk_ca.ts +++ b/lang/tomahawk_ca.ts @@ -47,17 +47,17 @@ connect and stream from you? AccountFactoryWrapperDelegate - + Online En línia - + Connecting... Connectant-se... - + Offline Fora de línia @@ -65,18 +65,18 @@ connect and stream from you? AccountListWidget - + Connections - - + + Connect &All - + Disconnect &All @@ -100,154 +100,154 @@ connect and stream from you? ActionCollection - + &Listen Along &Escolta a la vegada - + Stop &Listening Along Deixa d'&escoltar a la vegada - + &Follow in real-time &Segueix en temps real - - + + &Listen Privately &Escolta privada - - + + &Listen Publicly &Escolta Pública - + &Load Playlist &Carrega la llista de reproducció - + &Rename Playlist &Reanomena la llista de reproducció - + &Copy Playlist Link &Copia l'enllaç a la llista de reproducció - + &Play &Reprodueix - + &Stop &Atura - + &Previous Track Cançó &Anterior - + &Next Track Cançó &Següent - + &Quit &Surt - + Load &XSPF... - + U&pdate Collection - + Fully &Rescan Collection - + Show Offline Sources - + &Configure Tomahawk... - + Minimize - + Zoom - + Hide Menu Bar - + Diagnostics... - + About &Tomahawk... - + &Legal Information... - + Check For Updates... - + &Controls - + &Settings - + &Help - + &Window - + Main Menu @@ -295,7 +295,7 @@ connect and stream from you? - + Other Albums by %1 Altres Àlbums de %1 @@ -322,42 +322,44 @@ connect and stream from you? Formulari - + Top Hits Grans Èxits - + Related Artists Artistes Relacionats - + + Artist Artista - + Albums Àlbums - + + Cover Caràtula - + Sorry, we could not find any albums for this artist! - + Sorry, we could not find any related artists! - + Sorry, we could not find any top hits for this artist! @@ -421,13 +423,13 @@ connect and stream from you? - + Shuffle Mescla - + Repeat Repeteix @@ -442,27 +444,27 @@ connect and stream from you? Alt - + Time Elapsed - + Time Remaining - + Playing from %1 - + Share - + Love @@ -488,24 +490,24 @@ connect and stream from you? CategoryAddItem - + Create new Playlist Crea una nova Llista - + Create new Station Crea una nova Emissora - - + + New Station Nova Emissora - - + + %1 Station Emissora %1 @@ -513,12 +515,12 @@ connect and stream from you? CategoryItem - + Playlists Llistes de reproducció - + Stations Emissores @@ -651,97 +653,97 @@ connect and stream from you? EchonestSteerer - + Steer this station: - + Much less - + Less - + A bit less - + Keep at current - + A bit more - + More - + Much more - + Tempo - + Loudness - + Danceability - + Energy - + Song Hotttnesss - + Artist Hotttnesss - + Artist Familiarity - + By Description - + Enter a description - + Apply steering command - + Reset all steering commands @@ -757,12 +759,12 @@ connect and stream from you? FlexibleView - + This playlist is currently empty. - + This playlist is currently empty. Add some tracks to it and enjoy the music! @@ -778,7 +780,7 @@ connect and stream from you? IndexingJobItem - + Indexing database S'està indexant la base de dades @@ -845,7 +847,7 @@ connect and stream from you? LatchedStatusItem - + %1 is listening along with you! @@ -907,32 +909,32 @@ connect and stream from you? LovedTracksItem - + Top Loved Tracks - + Sorry, we could not find any loved tracks! - + The most loved tracks from all your friends - + All of your loved tracks - + All of %1's loved tracks - + Loved Tracks Cançons preferides @@ -1045,7 +1047,7 @@ connect and stream from you? - + Properties @@ -1171,20 +1173,30 @@ connect and stream from you? PlaylistLargeItemDelegate - + played %1 by you reproduït %1 - + played %1 by %2 reproduït %1 per %2 - + added %1 afegit %1 + + + by <b>%1</b> + + + + + by <b>%1</b> on <b>%2</b> + + PlaylistModel @@ -1251,12 +1263,12 @@ connect and stream from you? PlaylistView - + This playlist is currently empty. La llista es troba buida - + This playlist is currently empty. Add some tracks to it and enjoy the music! Aquesta llista es troba buida. Afegiu-hi algunes cançons i gaudiu de la música! @@ -1481,12 +1493,12 @@ connect and stream from you? SettingsDialog - + Collection Col·lecció - + Advanced Avançat @@ -1496,12 +1508,12 @@ connect and stream from you? Tot - + Some changed settings will not take effect until Tomahawk is restarted Alguns paràmetres no tindran efecte fins que no reinicieu Tomahawk - + Services Serveis @@ -1511,37 +1523,37 @@ connect and stream from you? - + Configure the accounts and services used by Tomahawk to search and retrieve music, find your friends and update your status. - + Manage how Tomahawk finds music on your computer. - + Configure Tomahawk's advanced settings, including network connectivity settings, browser interaction and more. - + Install resolver from file Instal·la un Resolver des d'un fitxer - + Delete all Access Control entries? - + Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to. - + Information Informació @@ -1737,22 +1749,22 @@ connect and stream from you? TextLabel - + Tweet - + Listening to "%1" by %2. %3 Escoltant "%1" de %2. %3 - + Listening to "%1" by %2 on "%3". %4 Escoltant "%1" de %2 de "%3". %4 - + %1 characters left %1 caràcters restants @@ -1785,19 +1797,19 @@ connect and stream from you? Top 10 - + All available tracks Totes les cançons disponibles - - + + Show Mostra - - + + Hide Amaga @@ -1844,7 +1856,7 @@ connect and stream from you? - + Latest Additions Darreres Novetats @@ -1854,42 +1866,42 @@ connect and stream from you? Escoltades Recentment - + SuperCollection SuperCol·lecció - + Latest additions to your collection Darreres novetats a la vostra col·lecció - + Latest additions to %1's collection Darreres novetats a la col·lecció de %1 - + Sorry, we could not find any recent additions! - + Recently Played Tracks Cançons Escoltades Recentment - + Your recently played tracks Cançons Escoltades Recentment - + %1's recently played tracks Cançons Escoltades Recentment per %1 - + Sorry, we could not find any recent plays! @@ -2105,17 +2117,17 @@ connect and stream from you? TemporaryPageItem - + Copy Artist Link Copia l'enllaç de l'artista - + Copy Album Link Copia l'enllaç de l'àlbum - + Copy Track Link Copia l'enllaç de la cançó @@ -2123,32 +2135,32 @@ connect and stream from you? Tomahawk::Accounts::AccountDelegate - + Add Account Afegeix un compte - + Remove Esborra - + %1 downloads %1 descàrregues - + Online En Línia - + Connecting... Connectant-se... - + Offline Fora de Línia @@ -2218,7 +2230,7 @@ connect and stream from you? Tomahawk::Accounts::LastFmAccountFactory - + Scrobble your tracks to last.fm, and find freely downloadable tracks to play Fes scrobbling de les cançons a last.fm, i cerca cançons descarregables gratuïtament per escoltar-les @@ -2524,83 +2536,82 @@ Torneu a autenticar-vos. Tomahawk::ContextMenu - + &Play &Reprodueix - - - + + + Add to &Queue &Afegeix a la Cua - + Continue Playback after this &Track - + Stop Playback after this &Track - - + + &Love &M'encanta - + + + + &Go to "%1" + + + + + + + Go to "%1" + + + + &Copy Track Link &Copia l'Enllaç de la Cançó - + Copy Album &Link - + Copy Artist &Link - + Un-&Love &Treu de les preferides - + &Delete Items &Elimina els Ítems - - &Show Track Page - &Mostra la pàgina de la cançó - - - + Properties... - + &Delete Item &Elimina l'Ítem - - - &Show Album Page - &Mostra la pàgina de l'àlbum - - - - &Show Artist Page - &Mostra la pàgina de l'artista - Tomahawk::DropJobNotifier @@ -2695,7 +2706,7 @@ Canvieu els filtres o intenteu-ho de nou. Tomahawk::DynamicWidget - + Station ran out of tracks! Try tweaking the filters for a new set of songs to play. @@ -3053,27 +3064,27 @@ Intenteu ajustar els filtres per reproduir noves cançons. Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks Top Cançons Musicals - + Loved Tracks Cançons Preferides - + Hyped Tracks Cançons en alça - + Top Artists Top Artistes - + Hyped Artists Artistes en alça @@ -3207,7 +3218,7 @@ Intenteu ajustar els filtres per reproduir noves cançons. Tomahawk::ShortenedLinkParser - + Network error parsing shortened link! Error de la xarxa en analitzar l'enllaç escurçat! @@ -3482,178 +3493,178 @@ introduïu el PIN aquí: Següent - + Back Enrere - + Go back one page Retrocedeix una pàgina - + Forward Endavant - + Go forward one page Avança una pàgina - + Global Search... Cerca Global... - - + + Hide Menu Bar - - + + Show Menu Bar - + &Main Menu - - - + + + Connect To Peer Connexió Remota - + Enter peer address: Introduïu l'adreça remota: - + Enter peer port: Introduïu el port remot: - + Enter peer key: Introduïu la clau remota: - + XSPF Error Error XSPF - + This is not a valid XSPF playlist. No és una llista XSPF vàlida. - + Failed to save tracks Error en desar les cançons - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. Algunes cançons de la llista no contenen ni artista ni titol i s'han ignorat. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. Hi ha un problema per accedir al dispositiu de so o a la cançó. La cançó actual s'ha saltat. Assegureu-vos que teniu un back.end de Phonon adequant i els plugins necessaris instal·lats. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Hi ha un problema per accedir al dispositiu de so o a la cançó, la cançó actual s'ha saltat. - + Station Emissora - + Create New Station Crea una Nova Emissora - + Name: Nom: - + Playlist Llista - + Automatic Playlist Llista Automàtica - + Pause Pausa - + &Play - + Authentication Error Error d'autentificació - + Error connecting to SIP: Authentication failed! S'ha produït un error connectant-se a SIP: Ha fallat autentificant! - + %1 by %2 track, artist name %1 de %2 - + %1 - %2 current track, some window title %1 - %2 - + <h2><b>Tomahawk %1<br/>(%2)</h2> <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012 Copyright 2010 - 2012 - + Thanks to: Gràcies a: - + About Tomahawk Quant a Tomahawk @@ -3709,27 +3720,27 @@ introduïu el PIN aquí: - + You've listened to this track %n time(s). Heu escoltat aquesta cançó %n cop.Heu escoltat aquesta cançó %n cops. - + You've never listened to this track before. No heu escoltat mai aquesta cançó abans. - + You first listened to it on %1. Vau escoltar aquesta cançó per primer cop el %1. - + You've listened to %1 %n time(s). Heu escoltat %1 %n cop.Heu escoltat %1 %n cops. - + You've never listened to %1 before. No heu escoltat mai %1 abans. @@ -3745,13 +3756,13 @@ introduïu el PIN aquí: TransferStatusItem - + from streaming artist - track from friend - + to streaming artist - track to friend @@ -3760,7 +3771,7 @@ introduïu el PIN aquí: TreeItemDelegate - + Unknown Desconegut @@ -3935,17 +3946,17 @@ Podeu reenviar un missatge de sincronisme en qualsevol moment simplement enviant Cançons Escoltades Recentment - + Recently played tracks - + No recently created playlists in your network. No hi ha cançons escoltades recentment a la xarxa. - + Welcome to Tomahawk Us donem la benvinguda a Tomahawk diff --git a/lang/tomahawk_de.ts b/lang/tomahawk_de.ts index 19620d722..1885c083c 100644 --- a/lang/tomahawk_de.ts +++ b/lang/tomahawk_de.ts @@ -48,17 +48,17 @@ erlauben sich mit dir zu verbinden? AccountFactoryWrapperDelegate - + Online Verbunden - + Connecting... Verbinde... - + Offline Nicht Verbunden @@ -66,18 +66,18 @@ erlauben sich mit dir zu verbinden? AccountListWidget - + Connections - - + + Connect &All - + Disconnect &All @@ -101,154 +101,154 @@ erlauben sich mit dir zu verbinden? ActionCollection - + &Listen Along &Mithören - + Stop &Listening Along Mithören b&eenden - + &Follow in real-time In Echtzeit &folgen - - + + &Listen Privately &Privat Modus aktivieren - - + + &Listen Publicly &Privat Modus verlassen - + &Load Playlist &Lade Playlist - + &Rename Playlist Playlist &umbenennen - + &Copy Playlist Link &Kopiere Link zu dieser Playlist - + &Play &Abspielen - + &Stop &Stop - + &Previous Track &Vorheriges Lied - + &Next Track &Nächstes Lied - + &Quit &Verlassen - + Load &XSPF... - + U&pdate Collection - + Fully &Rescan Collection - + Show Offline Sources - + &Configure Tomahawk... - + Minimize - + Zoom - + Hide Menu Bar - + Diagnostics... - + About &Tomahawk... - + &Legal Information... - + Check For Updates... - + &Controls - + &Settings - + &Help - + &Window - + Main Menu @@ -296,7 +296,7 @@ erlauben sich mit dir zu verbinden? Sorry, wir konnten keine anderen Lieder für dieses Album finden! - + Other Albums by %1 Andere Alben von %1 @@ -323,42 +323,44 @@ erlauben sich mit dir zu verbinden? Form - + Top Hits Top Hits - + Related Artists Ähnliche Künstler - + + Artist Künstler - + Albums Alben - + + Cover Cover - + Sorry, we could not find any albums for this artist! Sorry, wir konnten keine Alben für diesen Künstler finden! - + Sorry, we could not find any related artists! Sorry, wir konnten keine ähnlichen Künstler finden! - + Sorry, we could not find any top hits for this artist! Sorry, wir konnten keine Lieder für diesen Künstler finden! @@ -422,13 +424,13 @@ erlauben sich mit dir zu verbinden? - + Shuffle Zufall - + Repeat Wiederholen @@ -443,27 +445,27 @@ erlauben sich mit dir zu verbinden? Hoch - + Time Elapsed - + Time Remaining - + Playing from %1 - + Share - + Love @@ -489,24 +491,24 @@ erlauben sich mit dir zu verbinden? CategoryAddItem - + Create new Playlist Neue Playlist erstellen - + Create new Station Neue Station erstellen - - + + New Station Neue Station - - + + %1 Station %1 Station @@ -514,12 +516,12 @@ erlauben sich mit dir zu verbinden? CategoryItem - + Playlists Playlisten - + Stations Stationen @@ -652,97 +654,97 @@ erlauben sich mit dir zu verbinden? EchonestSteerer - + Steer this station: - + Much less - + Less - + A bit less - + Keep at current - + A bit more - + More - + Much more - + Tempo - + Loudness - + Danceability - + Energy - + Song Hotttnesss - + Artist Hotttnesss - + Artist Familiarity - + By Description - + Enter a description - + Apply steering command - + Reset all steering commands @@ -758,12 +760,12 @@ erlauben sich mit dir zu verbinden? FlexibleView - + This playlist is currently empty. - + This playlist is currently empty. Add some tracks to it and enjoy the music! @@ -779,7 +781,7 @@ erlauben sich mit dir zu verbinden? IndexingJobItem - + Indexing database Datenbank indexieren @@ -846,7 +848,7 @@ erlauben sich mit dir zu verbinden? LatchedStatusItem - + %1 is listening along with you! %1 hört mit dir mit! @@ -908,32 +910,32 @@ erlauben sich mit dir zu verbinden? LovedTracksItem - + Top Loved Tracks - + Sorry, we could not find any loved tracks! Sorry, wir konnten keine Lieblingslieder finden! - + The most loved tracks from all your friends - + All of your loved tracks - + All of %1's loved tracks - + Loved Tracks Lieblingslieder @@ -1046,7 +1048,7 @@ erlauben sich mit dir zu verbinden? Vorwärts - + Properties @@ -1172,20 +1174,30 @@ erlauben sich mit dir zu verbinden? PlaylistLargeItemDelegate - + played %1 by you angehört %1 von dir - + played %1 by %2 hörte %1 von %2 - + added %1 fügte %1 hinzu + + + by <b>%1</b> + + + + + by <b>%1</b> on <b>%2</b> + + PlaylistModel @@ -1252,12 +1264,12 @@ erlauben sich mit dir zu verbinden? PlaylistView - + This playlist is currently empty. Diese Playlist ist momentan leer. - + This playlist is currently empty. Add some tracks to it and enjoy the music! Diese Playlist ist derzeit leer. Füge einige Stücke hinzu und genieße die Musik! @@ -1482,12 +1494,12 @@ erlauben sich mit dir zu verbinden? SettingsDialog - + Collection Sammlung - + Advanced Erweitert @@ -1497,12 +1509,12 @@ erlauben sich mit dir zu verbinden? Alle - + Some changed settings will not take effect until Tomahawk is restarted Einige geänderte Einstellungen haben keinen Effekt bis zum nächsten Neustart - + Services Dienste @@ -1512,37 +1524,37 @@ erlauben sich mit dir zu verbinden? - + Configure the accounts and services used by Tomahawk to search and retrieve music, find your friends and update your status. - + Manage how Tomahawk finds music on your computer. - + Configure Tomahawk's advanced settings, including network connectivity settings, browser interaction and more. - + Install resolver from file Installiere Resolver Datei - + Delete all Access Control entries? Alle erteilten Zugriffsrechte löschen? - + Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to. Willst du wirklich alle Zugriffseinstellungen zurücksetzen? Du wirst für alle Verbindungen erneut nach Zugriffseinstellungen gefragt werden. - + Information Information @@ -1738,22 +1750,22 @@ erlauben sich mit dir zu verbinden? TextLabel - + Tweet Tweet - + Listening to "%1" by %2. %3 Hört "%1" von %2, %3 - + Listening to "%1" by %2 on "%3". %4 Hört "%1" von %2 auf "%3", %4 - + %1 characters left %1 Zeichen übrig @@ -1786,19 +1798,19 @@ erlauben sich mit dir zu verbinden? Top 10 - + All available tracks Alle verfügbaren Stücke - - + + Show Einblenden - - + + Hide Verstecken @@ -1845,7 +1857,7 @@ erlauben sich mit dir zu verbinden? - + Latest Additions Kürzlich hinzugekommen @@ -1855,42 +1867,42 @@ erlauben sich mit dir zu verbinden? Kürzlich gehörte Lieder - + SuperCollection Supersammlung - + Latest additions to your collection Neueste Lieder in deiner Sammlung - + Latest additions to %1's collection Neueste Lieder in %1's Sammlung - + Sorry, we could not find any recent additions! Sorry, wir konnten keine Lieder finden die kürzlich hinzugefügt wurden! - + Recently Played Tracks Zuletzt gehörte Lieder - + Your recently played tracks Deine zuletzt gehörten Lieder - + %1's recently played tracks %1's zuletzt gehörte Lieder - + Sorry, we could not find any recent plays! Sorry, wir konnten keine kürzlich gespielten Lieder finden! @@ -2106,17 +2118,17 @@ erlauben sich mit dir zu verbinden? TemporaryPageItem - + Copy Artist Link Kopiere Link für diesen Künstler - + Copy Album Link Kopiere Link für dieses Album - + Copy Track Link Kopiere Link für diesen Lied @@ -2124,32 +2136,32 @@ erlauben sich mit dir zu verbinden? Tomahawk::Accounts::AccountDelegate - + Add Account Konto hinzufügen - + Remove Entfernen - + %1 downloads %1 Downloads - + Online Verbunden - + Connecting... Verbinde... - + Offline Nicht Verbunden @@ -2219,7 +2231,7 @@ erlauben sich mit dir zu verbinden? Tomahawk::Accounts::LastFmAccountFactory - + Scrobble your tracks to last.fm, and find freely downloadable tracks to play Gehörte Stücke zu last.fm scrobbeln und frei-verfügbare Stücke anhören @@ -2523,83 +2535,82 @@ You may wish to try re-authenticating. Tomahawk::ContextMenu - + &Play &Abspielen - - - + + + Add to &Queue In &Warteschlange einreihen - + Continue Playback after this &Track Nach diesem Lied &weiterspielen - + Stop Playback after this &Track Wiedergabe nach diesem Lied &stoppen - - + + &Love &Lieblingslied - - &Copy Track Link - &Kopiere Link zu diesem Stück + + + + &Go to "%1" + - - Copy Album &Link - Album-&Link kopieren - - - - Copy Artist &Link - Künstler-&Link kopieren - - - - Un-&Love - Kein &Lieblingslied - - - - &Delete Items - Elemente &entfernen - - - - &Show Track Page - &Gehe zur Song Seite - - - - Properties... + + + + Go to "%1" + &Copy Track Link + &Kopiere Link zu diesem Stück + + + + Copy Album &Link + Album-&Link kopieren + + + + Copy Artist &Link + Künstler-&Link kopieren + + + + Un-&Love + Kein &Lieblingslied + + + + &Delete Items + Elemente &entfernen + + + + Properties... + + + + &Delete Item Element &entfernen - - - &Show Album Page - &Gehe zur Album Seite - - - - &Show Artist Page - &Gehe zur Künstler Seite - Tomahawk::DropJobNotifier @@ -2694,7 +2705,7 @@ Bitte ändere den Filter oder versuche es erneut. Tomahawk::DynamicWidget - + Station ran out of tracks! Try tweaking the filters for a new set of songs to play. @@ -3052,27 +3063,27 @@ Versuch die Filter anzupassen für neue Lieder. Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks Meistgeh - + Loved Tracks Lieblingslieder - + Hyped Tracks Gehypte Lieder - + Top Artists Lieblingskünstler - + Hyped Artists Gehypte Künstler @@ -3206,7 +3217,7 @@ Versuch die Filter anzupassen für neue Lieder. Tomahawk::ShortenedLinkParser - + Network error parsing shortened link! Konnte den Kurzlink nicht auflösen! @@ -3481,178 +3492,178 @@ Tomahawk auf Twitter's Website authentifiziert hast: Weiter - + Back Zurück - + Go back one page Gehe eine Seite zurück - + Forward Vorwärts - + Go forward one page Gehe eine Seite vorwärts - + Global Search... Globale Suche... - - + + Hide Menu Bar - - + + Show Menu Bar - + &Main Menu - - - + + + Connect To Peer Mit anderem Tomahawk verbinden - + Enter peer address: Gib die Adresse der Gegenstelle ein: - + Enter peer port: Gib den Port der Gegenstelle ein: - + Enter peer key: Gib den Schlüssel der Gegenstelle ein: - + XSPF Error XSPF-Fehler - + This is not a valid XSPF playlist. Dies ist keine gültige XSPF-Playlist. - + Failed to save tracks Konnte Stücke nicht abspeichern - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. Einige Stücke in der Playlist enthalten weder Künstler noch Titel. Diese werden ignoriert. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. Es tut uns leid, Tomahawk kann auf dein Audio-Gerät oder das gewünschte Stück nicht zugreifen und überspringt es deshalb. Vergewisser dich, dass ein geignetes Phonon-Backend mitsamt benötigten Plugins installiert ist. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Es tut uns leid, Tomahawk kann auf dein Audio-Gerät oder das gewünschte Stück nicht zugreifen und überspringt es deshalb. - + Station Station - + Create New Station Neue Station erstellen - + Name: Name: - + Playlist Playlist - + Automatic Playlist Automatische Playlist - + Pause Pause - + &Play - + Authentication Error Authentifizierungsfehler - + Error connecting to SIP: Authentication failed! Verbindungsfehler mit SIP: Authentifizierung fehlgeschlagen! - + %1 by %2 track, artist name %1 von %2 - + %1 - %2 current track, some window title %1 - %2 - + <h2><b>Tomahawk %1<br/>(%2)</h2> <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012 Copright 2010 - 2012 - + Thanks to: Danke an: - + About Tomahawk Über Tomahawk @@ -3708,27 +3719,27 @@ Tomahawk auf Twitter's Website authentifiziert hast: Sorry, wir konnten keine ähnlichen Lieder finden! - + You've listened to this track %n time(s). Du hast dieses Lied einmal gehört.Du hast dieses Lied %n mal gehört. - + You've never listened to this track before. Du hast dieses Lied noch nie angehört. - + You first listened to it on %1. Du hast dieses Lied zum ersten mal am %1 gehört. - + You've listened to %1 %n time(s). Du hast %1 einmal angehört.Du hast %1 %n mal angehört. - + You've never listened to %1 before. Du hast %1 vorher noch nie gehört. @@ -3744,13 +3755,13 @@ Tomahawk auf Twitter's Website authentifiziert hast: TransferStatusItem - + from streaming artist - track from friend - + to streaming artist - track to friend @@ -3759,7 +3770,7 @@ Tomahawk auf Twitter's Website authentifiziert hast: TreeItemDelegate - + Unknown Unbekannt @@ -3929,17 +3940,17 @@ You can re-send a sync message at any time simply by sending another tweet using Kürzlich gehörte Lieder - + Recently played tracks - + No recently created playlists in your network. Es gibt keine kürzlich erstellten Playlisten in deinem Netzwerk. - + Welcome to Tomahawk Willkommen bei Tomahawk diff --git a/lang/tomahawk_el.ts b/lang/tomahawk_el.ts index e6efd3af0..063fa1dd2 100644 --- a/lang/tomahawk_el.ts +++ b/lang/tomahawk_el.ts @@ -47,17 +47,17 @@ connect and stream from you? AccountFactoryWrapperDelegate - + Online Σε σύνδεση - + Connecting... Σύνδεση... - + Offline Εκτός σύνδεσης @@ -65,18 +65,18 @@ connect and stream from you? AccountListWidget - + Connections Συνδέσεις - - + + Connect &All - + Disconnect &All @@ -100,154 +100,154 @@ connect and stream from you? ActionCollection - + &Listen Along &Συνακρόαση - + Stop &Listening Along Διακοπή &Συνακρόασης - + &Follow in real-time &Ακολούθηση σε πραγματικό χρόνο - - + + &Listen Privately &Ιδιωτική Ακρόαση - - + + &Listen Publicly &Δημόσια Ακρόαση - + &Load Playlist &Φόρτωση Λίστας Αναπαραγωγής - + &Rename Playlist &Μετονομασία Λίστας Αναπαραγωγής - + &Copy Playlist Link &Αντιγραφή Συνδέσμου Λίστας Αναπαραγωγής - + &Play &Αναπαραγωγή - + &Stop &Διακοπή - + &Previous Track &Προηγούμενο Κομμάτι - + &Next Track &Επόμενο Κομμάτι - + &Quit &Έξοδος - + Load &XSPF... Φόρτωση &XSPF - + U&pdate Collection Ε&νημέρωση Συλλογής - + Fully &Rescan Collection Πλήρης &Επανασάρωση Συλλογής - + Show Offline Sources Εμφάνιση Εκτός Σύνδεσης Πηγών - + &Configure Tomahawk... &Ρύθμιση Tomahawk - + Minimize Ελαχιστοποίηση - + Zoom Μεγέθυνση - + Hide Menu Bar Απόκρυψη Γραμμής Μενού - + Diagnostics... Διαγνωστικά - + About &Tomahawk... Σχετικά με το &Tomahawk... - + &Legal Information... &Νομικές Πληροφορίες - + Check For Updates... Έλεγχος Για Ενημερώσεις - + &Controls &Χειριστήρια - + &Settings &Ρυθμίσεις - + &Help &Βοήθεια - + &Window - + Main Menu @@ -295,7 +295,7 @@ connect and stream from you? - + Other Albums by %1 Άλλα Άλμπουμ από %1 @@ -322,42 +322,44 @@ connect and stream from you? Φόρμα - + Top Hits - + Related Artists Παρόμοιοι Καλλιτέχνες - + + Artist Καλλιτέχνης - + Albums Άλμπουμ - + + Cover - + Sorry, we could not find any albums for this artist! - + Sorry, we could not find any related artists! - + Sorry, we could not find any top hits for this artist! @@ -421,13 +423,13 @@ connect and stream from you? - + Shuffle Τυχαία σειρά - + Repeat Επανάληψη @@ -442,27 +444,27 @@ connect and stream from you? Υψηλή - + Time Elapsed - + Time Remaining - + Playing from %1 - + Share - + Love @@ -488,24 +490,24 @@ connect and stream from you? CategoryAddItem - + Create new Playlist Δημιουργία νέας Λίστας Αναπαραγωγής - + Create new Station Δημιουργία νέου Σταθμού - - + + New Station Νέος Σταθμός - - + + %1 Station %1 Σταθμού @@ -513,12 +515,12 @@ connect and stream from you? CategoryItem - + Playlists Λιστες Αναπαραγωγης - + Stations Σταθμοι @@ -651,97 +653,97 @@ connect and stream from you? EchonestSteerer - + Steer this station: - + Much less - + Less - + A bit less - + Keep at current - + A bit more - + More - + Much more - + Tempo - + Loudness - + Danceability - + Energy - + Song Hotttnesss - + Artist Hotttnesss - + Artist Familiarity - + By Description - + Enter a description - + Apply steering command - + Reset all steering commands @@ -757,12 +759,12 @@ connect and stream from you? FlexibleView - + This playlist is currently empty. - + This playlist is currently empty. Add some tracks to it and enjoy the music! @@ -778,7 +780,7 @@ connect and stream from you? IndexingJobItem - + Indexing database Ευρετηριοποίηση βάσης δεδομένων @@ -845,7 +847,7 @@ connect and stream from you? LatchedStatusItem - + %1 is listening along with you! Ο/Η %1 ακούει μαζί σας! @@ -907,32 +909,32 @@ connect and stream from you? LovedTracksItem - + Top Loved Tracks Κορυφαία Αγαπημένα Κομμάτια - + Sorry, we could not find any loved tracks! - + The most loved tracks from all your friends Τα πιο αγαπημένα κομμάτια από όλους τους φίλους σας - + All of your loved tracks Όλα τα αγαπημένα κομμάτια σας - + All of %1's loved tracks Όλα τα αγαπημένα κομμάτια του/της %1 - + Loved Tracks Αγαπημένα Κομμάτια @@ -1045,7 +1047,7 @@ connect and stream from you? Μπροστά - + Properties @@ -1171,20 +1173,30 @@ connect and stream from you? PlaylistLargeItemDelegate - + played %1 by you παίχθηκε %1 από εσάς - + played %1 by %2 παίχθηκε %1 από τον/την %2 - + added %1 προστέθηκε το %1 + + + by <b>%1</b> + + + + + by <b>%1</b> on <b>%2</b> + + PlaylistModel @@ -1251,12 +1263,12 @@ connect and stream from you? PlaylistView - + This playlist is currently empty. - + This playlist is currently empty. Add some tracks to it and enjoy the music! Αυτή η λίστα αναπαραγωγής είναι άδεια προς το παρόν. Προσθέστε μερικά κομμάτια σε αυτήν και απολαύστε την μουσική! @@ -1481,12 +1493,12 @@ connect and stream from you? SettingsDialog - + Collection Συλλογή - + Advanced Προχωρημένα @@ -1496,12 +1508,12 @@ connect and stream from you? Όλα - + Some changed settings will not take effect until Tomahawk is restarted Μερικές αλλαγμένες ρυθμίσεις δεν θα εφαρμοστούν μέχρι το Tomahawk να επανεκκινηθεί. - + Services Υπηρεσίες @@ -1511,37 +1523,37 @@ connect and stream from you? Εγκατάσταση από αρχείο - + Configure the accounts and services used by Tomahawk to search and retrieve music, find your friends and update your status. - + Manage how Tomahawk finds music on your computer. - + Configure Tomahawk's advanced settings, including network connectivity settings, browser interaction and more. - + Install resolver from file Εγκατάσταση επιλυτή από αρχείο - + Delete all Access Control entries? - + Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to. - + Information Πληροφορίες @@ -1737,22 +1749,22 @@ connect and stream from you? - + Tweet - + Listening to "%1" by %2. %3 - + Listening to "%1" by %2 on "%3". %4 - + %1 characters left @@ -1785,19 +1797,19 @@ connect and stream from you? Κορυφαία 10 - + All available tracks Όλα τα διαθέσιμα τραγούδια - - + + Show Προβολή - - + + Hide Απόκρυψη @@ -1844,7 +1856,7 @@ connect and stream from you? - + Latest Additions Τελευταίες Προσθήκες @@ -1854,42 +1866,42 @@ connect and stream from you? Τελευταίες Αναπαραγωγές - + SuperCollection ΥπερΣυλλογή - + Latest additions to your collection Τελευταίες προσθήκες στην βιβλιοθήκη σας - + Latest additions to %1's collection Τελευταίες προσθήκες στην βιβλιοθήκη του %1 - + Sorry, we could not find any recent additions! - + Recently Played Tracks Τελευταίες Αναπαραγωγές Κομματιών - + Your recently played tracks Οι τελευταίες σας αναπαραγωγές - + %1's recently played tracks - + Sorry, we could not find any recent plays! @@ -2105,17 +2117,17 @@ connect and stream from you? TemporaryPageItem - + Copy Artist Link Αντιγραφή Συνδέσμου Καλλιτέχνη - + Copy Album Link Αντιγραφή Συνδέσμου Άλμπουμ - + Copy Track Link Αντιγραφή Συνδέσμου Κομματιού @@ -2123,32 +2135,32 @@ connect and stream from you? Tomahawk::Accounts::AccountDelegate - + Add Account Προσθήκη Λογαριασμού - + Remove - + %1 downloads %1 λήψεις - + Online Συνεδεμένος - + Connecting... Σύνδεση... - + Offline Εκτός Σύνδεσης @@ -2218,7 +2230,7 @@ connect and stream from you? Tomahawk::Accounts::LastFmAccountFactory - + Scrobble your tracks to last.fm, and find freely downloadable tracks to play Κάντε Scrobble τα κομμάτια σας στο last.fm, και κατεβάστε ελέυθερα κομμάτια για αναπαραγωγή @@ -2524,83 +2536,82 @@ You may wish to try re-authenticating. Tomahawk::ContextMenu - + &Play &Αναπαραγωγή - - - + + + Add to &Queue Προσθήκη στην &Σειρά - + Continue Playback after this &Track - + Stop Playback after this &Track - - + + &Love &Αγάπησε - + + + + &Go to "%1" + + + + + + + Go to "%1" + + + + &Copy Track Link &Αντιγραφή Συνδέσμου Κομματιού - + Copy Album &Link - + Copy Artist &Link - + Un-&Love &Μίσησε - + &Delete Items &Διαγραφή Αντικειμένων - - &Show Track Page - &Εμφάνιση Σελίδας Κομματιού - - - + Properties... Ιδιότητες - + &Delete Item &Διαγραφή Αντικειμένου - - - &Show Album Page - &Εμφάνιση Σελίδας Άλμπουμ - - - - &Show Artist Page - &Εμφάνιση Σελίδας Καλλιτέχνη - Tomahawk::DropJobNotifier @@ -2695,7 +2706,7 @@ Please change the filters or try again. Tomahawk::DynamicWidget - + Station ran out of tracks! Try tweaking the filters for a new set of songs to play. @@ -3053,27 +3064,27 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks Κορυφαία Κομμάτια - + Loved Tracks Αγαπημένα Κομμάτια - + Hyped Tracks - + Top Artists Κορυφαίοι Καλλιτέχνες - + Hyped Artists @@ -3207,7 +3218,7 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::ShortenedLinkParser - + Network error parsing shortened link! @@ -3481,178 +3492,178 @@ enter the displayed PIN number here: Επόμενο - + Back Πίσω - + Go back one page Πήγαινε πίσω μία σελίδα - + Forward Μπροστά - + Go forward one page Πήγαινε μπροστά μία σελίδα - + Global Search... Αναζήτηση Παντού... - - + + Hide Menu Bar Απόκρυψη Γραμμής Μενού - - + + Show Menu Bar - + &Main Menu - - - + + + Connect To Peer Σύνδεση Σε Ομότιμο Κόμβο - + Enter peer address: Εισαγωγή διεύθυνσης ομότιμου κόμβου: - + Enter peer port: Εισαγωγή θύρας ομότιμου κόμβου: - + Enter peer key: Εισαγωγή κλειδιού ομότιμου κόμβου: - + XSPF Error Σφάλμα XSPF - + This is not a valid XSPF playlist. Αυτή δεν είναι μια έγκυρη λίστα αναπαραγωγής XSPF. - + Failed to save tracks Αποτυχία αποθήκευσης κομματιών. - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. Μερικά κομμάτια στην λίστα αναπαραγωγής δεν περιέχουν έναν καλλιτέχνη ή έναν τίτλο. Θα αγνοηθούν. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. Συγγνώμη, υπάρχει ένα πρόβλημα πρόσβασης στην συσκευή ήχου ή στο επιθυμητό κομμάτι, το τρέχον κομμάτι θα παραλειφθεί. Σιγουρευτείτε ότι έχετε εγκαταστήσει ένα κατάλληλο Phonon backend και τα απαιτούμενα πρόσθετα. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Συγγνώμη, υπάρχει ένα πρόβλημα πρόσβασης στην συσκευή ήχου ή στο επιθυμητό κομμάτι, το τρέχον κομμάτι θα παραλειφθεί. - + Station Σταθμός - + Create New Station Δημιουργία Νέου Σταθμού - + Name: Όνομα: - + Playlist Λίστας Αναπαραγωγής - + Automatic Playlist Αυτόματη Λίστα Αναπαραγωγής - + Pause Παύση - + &Play - + Authentication Error Σφάλμα Πιστοποίησης - + Error connecting to SIP: Authentication failed! - + %1 by %2 track, artist name %1 από %2 - + %1 - %2 current track, some window title %1 - %2 - + <h2><b>Tomahawk %1<br/>(%2)</h2> <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012 - + Thanks to: Χάρη στους: - + About Tomahawk Σχετικά με το Tomahawk @@ -3708,27 +3719,27 @@ enter the displayed PIN number here: - + You've listened to this track %n time(s). Έχετε ακούσει το κομμάτι %n φορά.Έχετε ακούσει το κομμάτι %n φορές. - + You've never listened to this track before. Δεν έχετε ακούσει αυτό το κομμάτι παλιότερα. - + You first listened to it on %1. Το ακούσατε για πρώτη φορά στις %1. - + You've listened to %1 %n time(s). Ακούσατε το %1 %n φορά.Ακούσατε το %1 %n φορές. - + You've never listened to %1 before. Δεν έχετε ακούσει το %1 ποτέ πριν. @@ -3744,13 +3755,13 @@ enter the displayed PIN number here: TransferStatusItem - + from streaming artist - track from friend από - + to streaming artist - track to friend προς @@ -3759,7 +3770,7 @@ enter the displayed PIN number here: TreeItemDelegate - + Unknown Άγνωστο @@ -3929,17 +3940,17 @@ You can re-send a sync message at any time simply by sending another tweet using Τελευταίες Αναπαραγωγές Κομματιών - + Recently played tracks Τελευταίες αναπαραγωγές κομματιών - + No recently created playlists in your network. - + Welcome to Tomahawk diff --git a/lang/tomahawk_en.ts b/lang/tomahawk_en.ts index fe5232647..1875adf7b 100644 --- a/lang/tomahawk_en.ts +++ b/lang/tomahawk_en.ts @@ -48,17 +48,17 @@ connect and stream from you? AccountFactoryWrapperDelegate - + Online Online - + Connecting... Connecting... - + Offline Offline @@ -66,18 +66,18 @@ connect and stream from you? AccountListWidget - + Connections Connections - - + + Connect &All Connect &All - + Disconnect &All Disconnect &All @@ -101,154 +101,154 @@ connect and stream from you? ActionCollection - + &Listen Along &Listen Along - + Stop &Listening Along Stop &Listening Along - + &Follow in real-time &Follow in real-time - - + + &Listen Privately &Listen Privately - - + + &Listen Publicly &Listen Publicly - + &Load Playlist &Load Playlist - + &Rename Playlist &Rename Playlist - + &Copy Playlist Link &Copy Playlist Link - + &Play &Play - + &Stop &Stop - + &Previous Track &Previous Track - + &Next Track &Next Track - + &Quit &Quit - + Load &XSPF... Load &XSPF... - + U&pdate Collection U&pdate Collection - + Fully &Rescan Collection Fully &Rescan Collection - + Show Offline Sources Show Offline Sources - + &Configure Tomahawk... &Configure Tomahawk... - + Minimize Minimize - + Zoom Zoom - + Hide Menu Bar Hide Menu Bar - + Diagnostics... Diagnostics... - + About &Tomahawk... About &Tomahawk... - + &Legal Information... &Legal Information... - + Check For Updates... Check For Updates... - + &Controls &Controls - + &Settings &Settings - + &Help &Help - + &Window &Window - + Main Menu Main Menu @@ -296,7 +296,7 @@ connect and stream from you? Sorry, we could not find any tracks for this album! - + Other Albums by %1 Other Albums by %1 @@ -323,42 +323,44 @@ connect and stream from you? Form - + Top Hits Top Hits - + Related Artists Related Artists - + + Artist Artist - + Albums Albums - + + Cover Cover - + Sorry, we could not find any albums for this artist! Sorry, we could not find any albums for this artist! - + Sorry, we could not find any related artists! Sorry, we could not find any related artists! - + Sorry, we could not find any top hits for this artist! Sorry, we could not find any top hits for this artist! @@ -422,13 +424,13 @@ connect and stream from you? - + Shuffle Shuffle - + Repeat Repeat @@ -443,27 +445,27 @@ connect and stream from you? High - + Time Elapsed Time Elapsed - + Time Remaining Time Remaining - + Playing from %1 Playing from %1 - + Share Share - + Love Love @@ -489,24 +491,24 @@ connect and stream from you? CategoryAddItem - + Create new Playlist Create new Playlist - + Create new Station Create new Station - - + + New Station New Station - - + + %1 Station %1 Station @@ -514,12 +516,12 @@ connect and stream from you? CategoryItem - + Playlists Playlists - + Stations Stations @@ -652,97 +654,97 @@ connect and stream from you? EchonestSteerer - + Steer this station: Steer this station: - + Much less Much less - + Less Less - + A bit less A bit less - + Keep at current Keep at current - + A bit more A bit more - + More More - + Much more Much more - + Tempo Tempo - + Loudness Loudness - + Danceability Danceability - + Energy Energy - + Song Hotttnesss Song Hotttnesss - + Artist Hotttnesss Artist Hotttnesss - + Artist Familiarity Artist Familiarity - + By Description By Description - + Enter a description Enter a description - + Apply steering command Apply steering command - + Reset all steering commands Reset all steering commands @@ -758,12 +760,12 @@ connect and stream from you? FlexibleView - + This playlist is currently empty. This playlist is currently empty. - + This playlist is currently empty. Add some tracks to it and enjoy the music! This playlist is currently empty. Add some tracks to it and enjoy the music! @@ -779,7 +781,7 @@ connect and stream from you? IndexingJobItem - + Indexing database Indexing database @@ -846,7 +848,7 @@ connect and stream from you? LatchedStatusItem - + %1 is listening along with you! %1 is listening along with you! @@ -908,32 +910,32 @@ connect and stream from you? LovedTracksItem - + Top Loved Tracks Top Loved Tracks - + Sorry, we could not find any loved tracks! Sorry, we could not find any loved tracks! - + The most loved tracks from all your friends The most loved tracks from all your friends - + All of your loved tracks All of your loved tracks - + All of %1's loved tracks All of %1's loved tracks - + Loved Tracks Loved Tracks @@ -1046,7 +1048,7 @@ connect and stream from you? Forward - + Properties Properties @@ -1172,20 +1174,30 @@ connect and stream from you? PlaylistLargeItemDelegate - + played %1 by you played %1 by you - + played %1 by %2 played %1 by %2 - + added %1 added %1 + + + by <b>%1</b> + by <b>%1</b> + + + + by <b>%1</b> on <b>%2</b> + by <b>%1</b> on <b>%2</b> + PlaylistModel @@ -1252,12 +1264,12 @@ connect and stream from you? PlaylistView - + This playlist is currently empty. This playlist is currently empty. - + This playlist is currently empty. Add some tracks to it and enjoy the music! This playlist is currently empty. Add some tracks to it and enjoy the music! @@ -1482,12 +1494,12 @@ connect and stream from you? SettingsDialog - + Collection Collection - + Advanced Advanced @@ -1497,12 +1509,12 @@ connect and stream from you? All - + Some changed settings will not take effect until Tomahawk is restarted Some changed settings will not take effect until Tomahawk is restarted - + Services Services @@ -1512,37 +1524,37 @@ connect and stream from you? Install from file - + Configure the accounts and services used by Tomahawk to search and retrieve music, find your friends and update your status. Configure the accounts and services used by Tomahawk to search and retrieve music, find your friends and update your status. - + Manage how Tomahawk finds music on your computer. Manage how Tomahawk finds music on your computer. - + Configure Tomahawk's advanced settings, including network connectivity settings, browser interaction and more. Configure Tomahawk's advanced settings, including network connectivity settings, browser interaction and more. - + Install resolver from file Install resolver from file - + Delete all Access Control entries? Delete all Access Control entries? - + Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to. Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to. - + Information Information @@ -1741,22 +1753,22 @@ connect and stream from you? TextLabel - + Tweet Tweet - + Listening to "%1" by %2. %3 Listening to "%1" by %2. %3 - + Listening to "%1" by %2 on "%3". %4 Listening to "%1" by %2 on "%3". %4 - + %1 characters left %1 characters left @@ -1789,19 +1801,19 @@ connect and stream from you? Top 10 - + All available tracks All available tracks - - + + Show Show - - + + Hide Hide @@ -1848,7 +1860,7 @@ connect and stream from you? - + Latest Additions Latest Additions @@ -1858,42 +1870,42 @@ connect and stream from you? Recently Played - + SuperCollection SuperCollection - + Latest additions to your collection Latest additions to your collection - + Latest additions to %1's collection Latest additions to %1's collection - + Sorry, we could not find any recent additions! Sorry, we could not find any recent additions! - + Recently Played Tracks Recently Played Tracks - + Your recently played tracks Your recently played tracks - + %1's recently played tracks %1's recently played tracks - + Sorry, we could not find any recent plays! Sorry, we could not find any recent plays! @@ -2109,17 +2121,17 @@ connect and stream from you? TemporaryPageItem - + Copy Artist Link Copy Artist Link - + Copy Album Link Copy Album Link - + Copy Track Link Copy Track Link @@ -2127,32 +2139,32 @@ connect and stream from you? Tomahawk::Accounts::AccountDelegate - + Add Account Add Account - + Remove Remove - + %1 downloads %1 downloads - + Online Online - + Connecting... Connecting... - + Offline Offline @@ -2222,7 +2234,7 @@ connect and stream from you? Tomahawk::Accounts::LastFmAccountFactory - + Scrobble your tracks to last.fm, and find freely downloadable tracks to play Scrobble your tracks to last.fm, and find freely downloadable tracks to play @@ -2528,83 +2540,82 @@ You may wish to try re-authenticating. Tomahawk::ContextMenu - + &Play &Play - - - + + + Add to &Queue Add to &Queue - + Continue Playback after this &Track Continue Playback after this &Track - + Stop Playback after this &Track Stop Playback after this &Track - - + + &Love &Love - + + + + &Go to "%1" + &Go to "%1" + + + + + + Go to "%1" + Go to "%1" + + + &Copy Track Link &Copy Track Link - + Copy Album &Link Copy Album &Link - + Copy Artist &Link Copy Artist &Link - + Un-&Love Un-&Love - + &Delete Items &Delete Items - - &Show Track Page - &Show Track Page - - - + Properties... Properties... - + &Delete Item &Delete Item - - - &Show Album Page - &Show Album Page - - - - &Show Artist Page - &Show Artist Page - Tomahawk::DropJobNotifier @@ -2699,7 +2710,7 @@ Please change the filters or try again. Tomahawk::DynamicWidget - + Station ran out of tracks! Try tweaking the filters for a new set of songs to play. @@ -3057,27 +3068,27 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks Top Tracks - + Loved Tracks Loved Tracks - + Hyped Tracks Hyped Tracks - + Top Artists Top Artists - + Hyped Artists Hyped Artists @@ -3211,7 +3222,7 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::ShortenedLinkParser - + Network error parsing shortened link! Network error parsing shortened link! @@ -3486,178 +3497,178 @@ enter the displayed PIN number here: Next - + Back Back - + Go back one page Go back one page - + Forward Forward - + Go forward one page Go forward one page - + Global Search... Global Search... - - + + Hide Menu Bar Hide Menu Bar - - + + Show Menu Bar Show Menu Bar - + &Main Menu &Main Menu - - - + + + Connect To Peer Connect To Peer - + Enter peer address: Enter peer address: - + Enter peer port: Enter peer port: - + Enter peer key: Enter peer key: - + XSPF Error XSPF Error - + This is not a valid XSPF playlist. This is not a valid XSPF playlist. - + Failed to save tracks Failed to save tracks - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. Some tracks in the playlist do not contain an artist and a title. They will be ignored. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. - + Station Station - + Create New Station Create New Station - + Name: Name: - + Playlist Playlist - + Automatic Playlist Automatic Playlist - + Pause Pause - + &Play &Play - + Authentication Error Authentication Error - + Error connecting to SIP: Authentication failed! Error connecting to SIP: Authentication failed! - + %1 by %2 track, artist name %1 by %2 - + %1 - %2 current track, some window title %1 - %2 - + <h2><b>Tomahawk %1<br/>(%2)</h2> <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012 Copyright 2010 - 2012 - + Thanks to: Thanks to: - + About Tomahawk About Tomahawk @@ -3713,27 +3724,27 @@ enter the displayed PIN number here: Sorry, but we could not find similar tracks for this song! - + You've listened to this track %n time(s). You've listened to this track %n time.You've listened to this track %n times. - + You've never listened to this track before. You've never listened to this track before. - + You first listened to it on %1. You first listened to it on %1. - + You've listened to %1 %n time(s). You've listened to %1 %n time.You've listened to %1 %n times. - + You've never listened to %1 before. You've never listened to %1 before. @@ -3749,13 +3760,13 @@ enter the displayed PIN number here: TransferStatusItem - + from streaming artist - track from friend from - + to streaming artist - track to friend to @@ -3764,7 +3775,7 @@ enter the displayed PIN number here: TreeItemDelegate - + Unknown Unknown @@ -3939,17 +3950,17 @@ You can re-send a sync message at any time simply by sending another tweet using Recently Played Tracks - + Recently played tracks Recently played tracks - + No recently created playlists in your network. No recently created playlists in your network. - + Welcome to Tomahawk Welcome to Tomahawk diff --git a/lang/tomahawk_es.ts b/lang/tomahawk_es.ts index 68d1a2577..336d13d03 100644 --- a/lang/tomahawk_es.ts +++ b/lang/tomahawk_es.ts @@ -47,17 +47,17 @@ connect and stream from you? AccountFactoryWrapperDelegate - + Online Conectado - + Connecting... Conectando... - + Offline Desconectado @@ -65,18 +65,18 @@ connect and stream from you? AccountListWidget - + Connections - - + + Connect &All - + Disconnect &All @@ -100,154 +100,154 @@ connect and stream from you? ActionCollection - + &Listen Along &Escuchar juntos - + Stop &Listening Along Detener la &reproducción conjunta - + &Follow in real-time &Seguir en tiempo real - - + + &Listen Privately &Escuchar en privado - - + + &Listen Publicly &Escuchar públicamente - + &Load Playlist &Cargar lista de reproducción - + &Rename Playlist &Renombrar lista de reproducción - + &Copy Playlist Link &Copiar enlace de lista de reproducción - + &Play &Reproducir - + &Stop &Detener - + &Previous Track &Pista anterior - + &Next Track &Pista siguiente - + &Quit &Salir - + Load &XSPF... - + U&pdate Collection - + Fully &Rescan Collection - + Show Offline Sources - + &Configure Tomahawk... - + Minimize - + Zoom - + Hide Menu Bar - + Diagnostics... - + About &Tomahawk... - + &Legal Information... - + Check For Updates... - + &Controls - + &Settings - + &Help - + &Window - + Main Menu @@ -295,7 +295,7 @@ connect and stream from you? - + Other Albums by %1 Otros álbumes por %1 @@ -322,42 +322,44 @@ connect and stream from you? Formulario - + Top Hits Grandes éxitos - + Related Artists Artistas relacionados - + + Artist - + Albums Álbumes - + + Cover - + Sorry, we could not find any albums for this artist! - + Sorry, we could not find any related artists! - + Sorry, we could not find any top hits for this artist! @@ -421,13 +423,13 @@ connect and stream from you? - + Shuffle Aleatorio - + Repeat Repetir @@ -442,27 +444,27 @@ connect and stream from you? Subir volumen - + Time Elapsed - + Time Remaining - + Playing from %1 - + Share - + Love @@ -488,24 +490,24 @@ connect and stream from you? CategoryAddItem - + Create new Playlist - + Create new Station - - + + New Station Nueva estación - - + + %1 Station %1 estación @@ -513,12 +515,12 @@ connect and stream from you? CategoryItem - + Playlists Listas de reproducción - + Stations Estaciones @@ -651,97 +653,97 @@ connect and stream from you? EchonestSteerer - + Steer this station: - + Much less - + Less - + A bit less - + Keep at current - + A bit more - + More - + Much more - + Tempo - + Loudness - + Danceability - + Energy - + Song Hotttnesss - + Artist Hotttnesss - + Artist Familiarity - + By Description - + Enter a description - + Apply steering command - + Reset all steering commands @@ -757,12 +759,12 @@ connect and stream from you? FlexibleView - + This playlist is currently empty. - + This playlist is currently empty. Add some tracks to it and enjoy the music! @@ -778,7 +780,7 @@ connect and stream from you? IndexingJobItem - + Indexing database Indexando la base de datos @@ -845,7 +847,7 @@ connect and stream from you? LatchedStatusItem - + %1 is listening along with you! @@ -907,32 +909,32 @@ connect and stream from you? LovedTracksItem - + Top Loved Tracks - + Sorry, we could not find any loved tracks! - + The most loved tracks from all your friends - + All of your loved tracks - + All of %1's loved tracks - + Loved Tracks @@ -1045,7 +1047,7 @@ connect and stream from you? - + Properties @@ -1171,20 +1173,30 @@ connect and stream from you? PlaylistLargeItemDelegate - + played %1 by you %1 reproducido por usted - + played %1 by %2 %1 reproducido por %2 - + added %1 añadio %1 + + + by <b>%1</b> + + + + + by <b>%1</b> on <b>%2</b> + + PlaylistModel @@ -1251,12 +1263,12 @@ connect and stream from you? PlaylistView - + This playlist is currently empty. - + This playlist is currently empty. Add some tracks to it and enjoy the music! Esta lista de reproducción está vacía. ¡Añada algunas pistas y disfrute de la música! @@ -1480,12 +1492,12 @@ connect and stream from you? SettingsDialog - + Collection Colección - + Advanced Avanzado @@ -1495,12 +1507,12 @@ connect and stream from you? Todo - + Some changed settings will not take effect until Tomahawk is restarted Algunos cambios no tomarán efecto hasta reiniciar Tomahawk - + Services Servicios @@ -1510,37 +1522,37 @@ connect and stream from you? - + Configure the accounts and services used by Tomahawk to search and retrieve music, find your friends and update your status. - + Manage how Tomahawk finds music on your computer. - + Configure Tomahawk's advanced settings, including network connectivity settings, browser interaction and more. - + Install resolver from file Instalar un Resolver desde un fichero - + Delete all Access Control entries? - + Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to. - + Information Información @@ -1736,22 +1748,22 @@ connect and stream from you? TextLabel - + Tweet - + Listening to "%1" by %2. %3 - + Listening to "%1" by %2 on "%3". %4 - + %1 characters left %1 caracteres restantes @@ -1784,19 +1796,19 @@ connect and stream from you? Top 10 - + All available tracks Todas las pistas disponibles - - + + Show Mostrar - - + + Hide Ocultar @@ -1843,7 +1855,7 @@ connect and stream from you? - + Latest Additions Añadidos recientemente @@ -1853,42 +1865,42 @@ connect and stream from you? Reproducido recientemente - + SuperCollection SuperColección - + Latest additions to your collection Últimas novedades en mi colección - + Latest additions to %1's collection Últimas novedadoes en la colección de %1 - + Sorry, we could not find any recent additions! - + Recently Played Tracks Temas Escuchados Recientemente - + Your recently played tracks Mis canciones escuchadas recientemente - + %1's recently played tracks Las canciones escuchadas recientemente por %1 - + Sorry, we could not find any recent plays! @@ -2104,17 +2116,17 @@ connect and stream from you? TemporaryPageItem - + Copy Artist Link - + Copy Album Link - + Copy Track Link @@ -2122,32 +2134,32 @@ connect and stream from you? Tomahawk::Accounts::AccountDelegate - + Add Account Añadir Cuenta - + Remove - + %1 downloads %1 descargas - + Online Conectado - + Connecting... Conectando... - + Offline Desconectado @@ -2217,7 +2229,7 @@ connect and stream from you? Tomahawk::Accounts::LastFmAccountFactory - + Scrobble your tracks to last.fm, and find freely downloadable tracks to play Hacer Scrobble de mis temas a last.fm y encontrar canciones gratuitas para reproducirlas @@ -2523,83 +2535,82 @@ Hay que volverse a autenticar. Tomahawk::ContextMenu - + &Play &Reproducir - - - + + + Add to &Queue Añadir a la &cola - + Continue Playback after this &Track - + Stop Playback after this &Track - - + + &Love &Favorito - + + + + &Go to "%1" + + + + + + + Go to "%1" + + + + &Copy Track Link &Copiar enlace del Tema - + Copy Album &Link - + Copy Artist &Link - + Un-&Love Quitar de &Favoritos - + &Delete Items &Eliminar de la cola - - &Show Track Page - - - - + Properties... - + &Delete Item &Eliminar de la cola - - - &Show Album Page - - - - - &Show Artist Page - - Tomahawk::DropJobNotifier @@ -2694,7 +2705,7 @@ Por favor, cambie los filtros o inténtelo de nuevo. Tomahawk::DynamicWidget - + Station ran out of tracks! Try tweaking the filters for a new set of songs to play. @@ -3052,27 +3063,27 @@ Intente ajustar los filtros para reproducir nuevas canciones. Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks Temas más escuchados - + Loved Tracks Temas Favoritos - + Hyped Tracks Temas a la alza - + Top Artists Artistas más escuchados - + Hyped Artists Artistas a la alza @@ -3206,7 +3217,7 @@ Intente ajustar los filtros para reproducir nuevas canciones. Tomahawk::ShortenedLinkParser - + Network error parsing shortened link! Error en la red al analizar el enlace acortado! @@ -3481,178 +3492,178 @@ introduzca su número PIN aquí: Siguiente - + Back - + Go back one page - + Forward - + Go forward one page - + Global Search... Búsqueda global... - - + + Hide Menu Bar - - + + Show Menu Bar - + &Main Menu - - - + + + Connect To Peer Conectar a un par - + Enter peer address: Introducir dirección del par: - + Enter peer port: Introducir puerto del par: - + Enter peer key: Introducir contraseña del par: - + XSPF Error Error XSPF - + This is not a valid XSPF playlist. Esta no es una lista de reproducción XSPF válida. - + Failed to save tracks Fallo al guardar pistas - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. Algunas pistas en la lista de reproducción no contienen artista ni título. Serán ignoradas. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. Se ha producido un error al acceder al dispostivo de audio o al tema deseado y se va saltar. Asegúrese de que ha instalado un backend de Phonon adecuado y los plugins necesarios. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Se ha producido un error al acceder al dispostivo de audio o al tema deseado y se va saltar. - + Station - + Create New Station Crear nueva estación - + Name: Nombre: - + Playlist - + Automatic Playlist - + Pause Pausar - + &Play - + Authentication Error Error de autenticación - + Error connecting to SIP: Authentication failed! - + %1 by %2 track, artist name %1 por %2 - + %1 - %2 current track, some window title %1 - %2 - + <h2><b>Tomahawk %1<br/>(%2)</h2> <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012 - + Thanks to: - + About Tomahawk Acerca de Tomahawk @@ -3708,27 +3719,27 @@ introduzca su número PIN aquí: - + You've listened to this track %n time(s). Ha escuchado esta canción %n vez.Ha escuchado esta canción %n veces. - + You've never listened to this track before. Nunca ha escuchado este tema antes. - + You first listened to it on %1. Escuchó este tema pro primera vez en %1. - + You've listened to %1 %n time(s). Ha escuchado %1 %n vez.Ha escuchado %1 %n veces. - + You've never listened to %1 before. Nunca ha escuchado %1 antes. @@ -3744,13 +3755,13 @@ introduzca su número PIN aquí: TransferStatusItem - + from streaming artist - track from friend - + to streaming artist - track to friend @@ -3759,7 +3770,7 @@ introduzca su número PIN aquí: TreeItemDelegate - + Unknown Desconocido @@ -3934,17 +3945,17 @@ Puede reenviar el mensaje de sincronización en cualquier momento simplemente en Pistas reproducidas recientemente - + Recently played tracks - + No recently created playlists in your network. No hay listas de reproducción recientemente creadas en su red. - + Welcome to Tomahawk Bienvenido a Tomahawk diff --git a/lang/tomahawk_fr.ts b/lang/tomahawk_fr.ts index c09dbeb77..329966ec0 100644 --- a/lang/tomahawk_fr.ts +++ b/lang/tomahawk_fr.ts @@ -48,17 +48,17 @@ de se connecter et streamer de vous? AccountFactoryWrapperDelegate - + Online En Ligne - + Connecting... Connexion en cours... - + Offline Hors ligne @@ -66,18 +66,18 @@ de se connecter et streamer de vous? AccountListWidget - + Connections - - + + Connect &All - + Disconnect &All @@ -101,154 +101,154 @@ de se connecter et streamer de vous? ActionCollection - + &Listen Along &Ecouter avec - + Stop &Listening Along Arrêter d'&écouter avec - + &Follow in real-time &Suivre en temps réel - - + + &Listen Privately &Ecouter en privé - - + + &Listen Publicly &Ecouter publiquement - + &Load Playlist &Charger une liste de lecture - + &Rename Playlist &Renommer la liste de lecture - + &Copy Playlist Link &Copier le lien de la piste de lecture - + &Play &Lire - + &Stop &Stop - + &Previous Track Piste &Précédente - + &Next Track Piste &Suivante - + &Quit &Quitter - + Load &XSPF... Charger &XSPF... - + U&pdate Collection Mettre à Jo&ur la Collection - + Fully &Rescan Collection &Rescanner la collection entièrement - + Show Offline Sources Afficher les sources hors ligne - + &Configure Tomahawk... &Configurer Tomahawk... - + Minimize Réduire - + Zoom Zoom - + Hide Menu Bar Masquer la barre de menu - + Diagnostics... Diagnostics... - + About &Tomahawk... A propos de &Tomahawk... - + &Legal Information... &Informations Légales... - + Check For Updates... Rechercher une mis à jour... - + &Controls &Contrôles - + &Settings &Paramètres - + &Help &Aide - + &Window &Fenêtre - + Main Menu Menu Principal @@ -296,7 +296,7 @@ de se connecter et streamer de vous? Désolé, nous n'avons pu trouver aucune piste pour cet album ! - + Other Albums by %1 Autres albums de %1 @@ -323,42 +323,44 @@ de se connecter et streamer de vous? Form - + Top Hits Top Hits - + Related Artists Artistes similaires - + + Artist Artiste - + Albums Albums - + + Cover Pochette - + Sorry, we could not find any albums for this artist! Désolé, on a pas pu trouver aucun album pour cet artiste! - + Sorry, we could not find any related artists! Désolé, on a rien trouvé par rapport a cet artite! - + Sorry, we could not find any top hits for this artist! Désolé, on a pas pu trouver aucun top hit pour cet artiste! @@ -422,13 +424,13 @@ de se connecter et streamer de vous? - + Shuffle Lecture Aléatoire - + Repeat Répéter @@ -443,27 +445,27 @@ de se connecter et streamer de vous? Haut - + Time Elapsed Durée Ecoulé - + Time Remaining Durée Restante - + Playing from %1 - + Share Partager - + Love Favori @@ -489,24 +491,24 @@ de se connecter et streamer de vous? CategoryAddItem - + Create new Playlist Créer une nouvelle liste de lecture - + Create new Station Créer une nouvelle station - - + + New Station Nouvelle Station - - + + %1 Station Station %1 @@ -514,12 +516,12 @@ de se connecter et streamer de vous? CategoryItem - + Playlists Listes de lecture - + Stations Stations @@ -652,97 +654,97 @@ de se connecter et streamer de vous? EchonestSteerer - + Steer this station: - + Much less - + Less - + A bit less - + Keep at current - + A bit more - + More - + Much more - + Tempo - + Loudness - + Danceability - + Energy - + Song Hotttnesss - + Artist Hotttnesss - + Artist Familiarity - + By Description - + Enter a description - + Apply steering command - + Reset all steering commands @@ -758,12 +760,12 @@ de se connecter et streamer de vous? FlexibleView - + This playlist is currently empty. - + This playlist is currently empty. Add some tracks to it and enjoy the music! @@ -779,7 +781,7 @@ de se connecter et streamer de vous? IndexingJobItem - + Indexing database Indexation de la base de données @@ -846,7 +848,7 @@ de se connecter et streamer de vous? LatchedStatusItem - + %1 is listening along with you! %1 écoute avec vous! @@ -908,32 +910,32 @@ de se connecter et streamer de vous? LovedTracksItem - + Top Loved Tracks Top pistes favoris - + Sorry, we could not find any loved tracks! Désolé, nous n'avons pu trouver aucune piste favorite ! - + The most loved tracks from all your friends Les titres favoris de vos amis - + All of your loved tracks Tous vos titres favoris - + All of %1's loved tracks Tous les titres favoris de %1 - + Loved Tracks Titres favoris @@ -1046,7 +1048,7 @@ de se connecter et streamer de vous? Avancer - + Properties @@ -1172,20 +1174,30 @@ de se connecter et streamer de vous? PlaylistLargeItemDelegate - + played %1 by you joué %1 par vous - + played %1 by %2 joué %1 par %2 - + added %1 ajouté par %1 + + + by <b>%1</b> + + + + + by <b>%1</b> on <b>%2</b> + + PlaylistModel @@ -1252,12 +1264,12 @@ de se connecter et streamer de vous? PlaylistView - + This playlist is currently empty. La collection est vide actuellement. - + This playlist is currently empty. Add some tracks to it and enjoy the music! La liste de lecture est vide. Ajoutez des pistes et profitez de la musique ! @@ -1482,12 +1494,12 @@ de se connecter et streamer de vous? SettingsDialog - + Collection Collection - + Advanced Avancés @@ -1497,12 +1509,12 @@ de se connecter et streamer de vous? Tous - + Some changed settings will not take effect until Tomahawk is restarted Certaines modifications ne prendront effet qu'au prochain démarrage de Tomahawk - + Services Services @@ -1512,37 +1524,37 @@ de se connecter et streamer de vous? Installer depuis un fichier - + Configure the accounts and services used by Tomahawk to search and retrieve music, find your friends and update your status. Configurer les comptes et les services que Tomahawk utilisera pour chercher et diffuser de la musique, retrouver vos amis ou mettre à jour votre statut. - + Manage how Tomahawk finds music on your computer. Gérer la manière dont Tomahawk trouve de la musique sur votre ordinateur. - + Configure Tomahawk's advanced settings, including network connectivity settings, browser interaction and more. Configurer les paramètres avancés de Tomahawk dont les paramètres de connectivité réseau, les interactions avec le navigateur et autres. - + Install resolver from file Installer un script de résolution depuis un fichier - + Delete all Access Control entries? Supprimer toutes les entrées de Contrôle d'accès? - + Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to. Voulez-vous vraiment supprimer toutes les entrées de contrôle d'accès ? On vous demandera de nouveau votre autorisation pour toutes les nouvelles connexions. - + Information Information @@ -1738,22 +1750,22 @@ de se connecter et streamer de vous? TextLabel - + Tweet Tweet - + Listening to "%1" by %2. %3 J'écoute "%1" par %2. %3 - + Listening to "%1" by %2 on "%3". %4 J'écoute "%1" par %2 sur "%3". %4 - + %1 characters left %1 caractères restants @@ -1786,19 +1798,19 @@ de se connecter et streamer de vous? Top 10 - + All available tracks Tous les titres disponibles - - + + Show Afficher - - + + Hide Masquer @@ -1845,7 +1857,7 @@ de se connecter et streamer de vous? - + Latest Additions Derniers ajouts @@ -1855,42 +1867,42 @@ de se connecter et streamer de vous? Joués récemment - + SuperCollection SuperCollection - + Latest additions to your collection Derniers ajouts à votre collection - + Latest additions to %1's collection Derniers ajouts à la collection de %1 - + Sorry, we could not find any recent additions! Désolé, on a pas pu trouver des dernier ajouts! - + Recently Played Tracks Derniers titres joués - + Your recently played tracks Les derniers titres que vous avez joués - + %1's recently played tracks Derniers titres joués par %1 - + Sorry, we could not find any recent plays! Désolé, aucune piste récemment jouée n'a pu être trouvée ! @@ -2106,17 +2118,17 @@ de se connecter et streamer de vous? TemporaryPageItem - + Copy Artist Link Copier le lien de l'artiste - + Copy Album Link Copier le lien de l'album - + Copy Track Link Copier le lien de la piste @@ -2124,32 +2136,32 @@ de se connecter et streamer de vous? Tomahawk::Accounts::AccountDelegate - + Add Account Ajouter un compte - + Remove Supprimer - + %1 downloads %1 téléchargements - + Online En Ligne - + Connecting... Connexion en cours... - + Offline Hors ligne @@ -2219,7 +2231,7 @@ de se connecter et streamer de vous? Tomahawk::Accounts::LastFmAccountFactory - + Scrobble your tracks to last.fm, and find freely downloadable tracks to play Scrobbler vos écoutes sur Last.fm et trouver des morceaux téléchargeables gratuitement @@ -2525,83 +2537,82 @@ Essayez de vous authentifier de nouveau. Tomahawk::ContextMenu - + &Play &Lecture - - - + + + Add to &Queue &Ajouter à la file d'attente - + Continue Playback after this &Track Continuer la lecture après cette &piste - + Stop Playback after this &Track Stopper la lecture après cette &piste - - + + &Love &Favori - + + + + &Go to "%1" + + + + + + + Go to "%1" + + + + &Copy Track Link &Copier le lien de la piste - + Copy Album &Link Copier le &lien de l'album - + Copy Artist &Link Copier le &lien de l'artiste - + Un-&Love &Supprimer des Favoris - + &Delete Items &Supprimer les éléments - - &Show Track Page - &Afficher la page de la piste - - - + Properties... Propriétés... - + &Delete Item &Supprimer l'élément - - - &Show Album Page - &Afficher la page de l'album - - - - &Show Artist Page - &Afficher la page artiste - Tomahawk::DropJobNotifier @@ -2696,7 +2707,7 @@ Veuillez changer les filtres et essayez de nouveau. Tomahawk::DynamicWidget - + Station ran out of tracks! Try tweaking the filters for a new set of songs to play. @@ -3054,27 +3065,27 @@ Essayez de changer les filtres pour avoir de nouveaux morceaux à jouer. Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks Top des titres - + Loved Tracks Titres favoris - + Hyped Tracks Titres Hype - + Top Artists Top Artistes - + Hyped Artists Artistes Hype @@ -3208,7 +3219,7 @@ Essayez de changer les filtres pour avoir de nouveaux morceaux à jouer. Tomahawk::ShortenedLinkParser - + Network error parsing shortened link! Erreur réseau lors du décodage de l'URL courte! @@ -3483,178 +3494,178 @@ saisissez le numéro PIN ici : Suivant - + Back Retour - + Go back one page Reculer d'une page - + Forward Avancer - + Go forward one page Avancer d'une page - + Global Search... Recherche Globale... - - + + Hide Menu Bar Masquer la barre de menu - - + + Show Menu Bar Afficher la barre de menu - + &Main Menu &Menu Principal - - - + + + Connect To Peer Connexion à un pair - + Enter peer address: Adresse du pair : - + Enter peer port: Port du pair : - + Enter peer key: Clé du pair : - + XSPF Error Erreur XSPF - + This is not a valid XSPF playlist. Ceci n'est pas une liste de lecture XSPF valide. - + Failed to save tracks Échec de la sauvegarde des pistes - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. Certaines pistes dans la liste de lecture ne contiennent pas d'artiste ou de titre. Elles seront ignorées. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. Désolé, il y a un problème d'accès à votre matériel audio ou la piste en cours va être sautée. Vérifiez que vous avez un backend Phonon et les plugins requis installés. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Désolé, il y a un problème d'accès à votre matériel audio ou la piste en cours va être sauter. - + Station Station - + Create New Station Créer une nouvelle station - + Name: Nom : - + Playlist Liste de lecture - + Automatic Playlist Liste de lecture automatique - + Pause Pause - + &Play &Lire - + Authentication Error Erreur d'authentification - + Error connecting to SIP: Authentication failed! Erreur de connexion SIP : échec de l'authentification ! - + %1 by %2 track, artist name %1 par %2 - + %1 - %2 current track, some window title %1 - %2 - + <h2><b>Tomahawk %1<br/>(%2)</h2> <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012 Droit d'auteur 2010 - 2012 - + Thanks to: Merci a: - + About Tomahawk A propos de Tomahawk @@ -3710,27 +3721,27 @@ saisissez le numéro PIN ici : Désolé, nous n'avons pu trouver aucune piste similaire pour cette chanson ! - + You've listened to this track %n time(s). Vous avez écouté cette piste %n fois.Vous avez écouté cette piste %n fois. - + You've never listened to this track before. Vous n'avez encore jamais écouté cette piste. - + You first listened to it on %1. Vous l'avez écouté pour la première fois le %1. - + You've listened to %1 %n time(s). Vous avez écouté %1 %n fois.Vous avez écouté %1 %n fois. - + You've never listened to %1 before. Vous n'avez encore jamais écouté %1. @@ -3746,13 +3757,13 @@ saisissez le numéro PIN ici : TransferStatusItem - + from streaming artist - track from friend à partir de - + to streaming artist - track to friend à @@ -3761,7 +3772,7 @@ saisissez le numéro PIN ici : TreeItemDelegate - + Unknown Inconnu @@ -3936,17 +3947,17 @@ Vous pouvez envoyer un message de synchronisation quand vous le souhaitez en env Joués récemment - + Recently played tracks Dernières titres joués - + No recently created playlists in your network. Pas de liste de lecture créée récemment sur votre réseau. - + Welcome to Tomahawk Bienvenue dans Tomahawk diff --git a/lang/tomahawk_gl.ts b/lang/tomahawk_gl.ts index 61065ce1f..8e0f1d6fa 100644 --- a/lang/tomahawk_gl.ts +++ b/lang/tomahawk_gl.ts @@ -47,17 +47,17 @@ connect and stream from you? AccountFactoryWrapperDelegate - + Online Conectado - + Connecting... Conectando... - + Offline Desconectado @@ -65,18 +65,18 @@ connect and stream from you? AccountListWidget - + Connections Conexións - - + + Connect &All Conectar &todo - + Disconnect &All Desconectar de &todos @@ -100,154 +100,154 @@ connect and stream from you? ActionCollection - + &Listen Along &Escoitar todo xunto - + Stop &Listening Along Parar de &escoitar todo xunto - + &Follow in real-time &Seguir en tempo rela - - + + &Listen Privately &Escoitar en privado - - + + &Listen Publicly &Escoutar en público - + &Load Playlist &Cargar a lista de reprodución - + &Rename Playlist &Renomear a lista de reprodución - + &Copy Playlist Link &Copiar a ligazón da lista de reprodución - + &Play &Reproducir - + &Stop &Deter - + &Previous Track &Pista anterior - + &Next Track P&ista seguinte - + &Quit &Saír - + Load &XSPF... Cargar &XSPF... - + U&pdate Collection &Actualizar a colección - + Fully &Rescan Collection &Rescanear a colección completa - + Show Offline Sources Mostrar as fontes fóra de liña - + &Configure Tomahawk... &Configurar Tomahawk... - + Minimize Minimizar - + Zoom Ampliación - + Hide Menu Bar Agochar a barra de menú - + Diagnostics... Diagnóstico... - + About &Tomahawk... Acerca de &Tomahawk... - + &Legal Information... &Información legal... - + Check For Updates... Buscar actualizacións... - + &Controls &Controis - + &Settings &Configuración - + &Help &Axuda - + &Window &Xanela - + Main Menu Menú principal @@ -295,7 +295,7 @@ connect and stream from you? Non se puido atopar ningunha outra pista para este álbum! - + Other Albums by %1 Outros álbums de %1 @@ -322,42 +322,44 @@ connect and stream from you? Formulario - + Top Hits Maiores éxitos - + Related Artists Artistas relacionados - + + Artist Artista - + Albums Álbums - + + Cover Portada - + Sorry, we could not find any albums for this artist! Non se atopou ningún álbum para este artista! - + Sorry, we could not find any related artists! Non se atopou ningún artista relacionado! - + Sorry, we could not find any top hits for this artist! Non se atopou ningún éxito deste artista! @@ -421,13 +423,13 @@ connect and stream from you? - + Shuffle Ao chou - + Repeat Repetir @@ -442,27 +444,27 @@ connect and stream from you? Alta - + Time Elapsed Tempo transcorrido - + Time Remaining Tempo que falta - + Playing from %1 Reproducindo de %1 - + Share Compartir - + Love gusta @@ -488,24 +490,24 @@ connect and stream from you? CategoryAddItem - + Create new Playlist Crear unha lista de temas nova - + Create new Station Crear unha nova emisora - - + + New Station Nova emisora - - + + %1 Station Emisora %1 @@ -513,12 +515,12 @@ connect and stream from you? CategoryItem - + Playlists Listas de reprodución - + Stations Emisoras @@ -651,97 +653,97 @@ connect and stream from you? EchonestSteerer - + Steer this station: Dirixir esta emisora: - + Much less Moito menos - + Less Menos - + A bit less Un pouco menos - + Keep at current Manter no actual - + A bit more Un chisco máis - + More Máis - + Much more Moito máis - + Tempo Tempo - + Loudness Sonoridade - + Danceability Como de bailable - + Energy Enerxía - + Song Hotttnesss Agrado da canción - + Artist Hotttnesss Agrado do artista - + Artist Familiarity Familiraridade do artista - + By Description Por descripción - + Enter a description Introducir unha descripción - + Apply steering command Aplicar o comando de direción - + Reset all steering commands Reiniciar tódolos comandos de dirección @@ -757,12 +759,12 @@ connect and stream from you? FlexibleView - + This playlist is currently empty. Esta lista de reprodución está baleira. - + This playlist is currently empty. Add some tracks to it and enjoy the music! Esta lista de reprodución está baleira. Engádelle algunhas pistas para desfrutar da música! @@ -778,7 +780,7 @@ connect and stream from you? IndexingJobItem - + Indexing database Base de datos de indexado @@ -845,7 +847,7 @@ connect and stream from you? LatchedStatusItem - + %1 is listening along with you! %1 está escoitando o mesmo a canda ti! @@ -907,32 +909,32 @@ connect and stream from you? LovedTracksItem - + Top Loved Tracks As pistas que máis me gustan - + Sorry, we could not find any loved tracks! Non se atopan pistas que che gustaran! - + The most loved tracks from all your friends As pistas que máis lle gustaron aos teus amigos - + All of your loved tracks Todas as pistas que che gustarn - + All of %1's loved tracks Todas as pistas de %1 que che gustaron - + Loved Tracks Pistas favoritas @@ -1045,7 +1047,7 @@ connect and stream from you? Adiante - + Properties Propiedades @@ -1171,20 +1173,30 @@ connect and stream from you? PlaylistLargeItemDelegate - + played %1 by you escoitou %1 por coñecela por ti - + played %1 by %2 escoitou %1 por coñecela por %2 - + added %1 engadiu %1 + + + by <b>%1</b> + + + + + by <b>%1</b> on <b>%2</b> + + PlaylistModel @@ -1251,12 +1263,12 @@ connect and stream from you? PlaylistView - + This playlist is currently empty. Esta lista de reprodución está agora mesmo baleira. - + This playlist is currently empty. Add some tracks to it and enjoy the music! Esta lista de reprodución está agora mesmo baleira. Engádelle unhas pistas para desfrutar da música! @@ -1481,12 +1493,12 @@ connect and stream from you? SettingsDialog - + Collection Colección - + Advanced Avanzado @@ -1496,12 +1508,12 @@ connect and stream from you? Todo - + Some changed settings will not take effect until Tomahawk is restarted Algunhas das configuracións que se cambiaron non van a ter efecto ata que se reinicie Tomahawk - + Services Servizos @@ -1511,37 +1523,37 @@ connect and stream from you? Instalar dende ficheiro - + Configure the accounts and services used by Tomahawk to search and retrieve music, find your friends and update your status. Configurar as contas e servizos que emprega Tomahawk para buscar e obter música, atopar ás túas amizades e actualizar o teu estado. - + Manage how Tomahawk finds music on your computer. Xestionar como Tomahawk busca música no teu computador. - + Configure Tomahawk's advanced settings, including network connectivity settings, browser interaction and more. Configurar as propiedades avanzadas de Tomahawks, incluíndo a conectividade a rede, a interacción co navegador e outras. - + Install resolver from file Instalar un resolvedor dende un ficheiro - + Delete all Access Control entries? Queres borrar tódalas entradas de control de acceso? - + Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to. Seguro que queres borrar tódalas entradas de control de acceso? Preguntaráseche de novo para que o confirmes cada vez que te conectes a un parceiro. - + Information Información @@ -1737,22 +1749,22 @@ connect and stream from you? Etiqueta de texto - + Tweet Chio - + Listening to "%1" by %2. %3 Escoitando a «%1» por %2. %3 - + Listening to "%1" by %2 on "%3". %4 Escoitando a «%1» por %2 en «%3». %4 - + %1 characters left quedan %1 caracteres @@ -1785,19 +1797,19 @@ connect and stream from you? Os 10 primeiros - + All available tracks Tódolas pistas dispoñíbeis - - + + Show Mostrar - - + + Hide Agochar @@ -1844,7 +1856,7 @@ connect and stream from you? - + Latest Additions Últimos engadidos @@ -1854,42 +1866,42 @@ connect and stream from you? Escoitados recentemente - + SuperCollection Supercolección - + Latest additions to your collection Os últimos engadidos á túa coleción - + Latest additions to %1's collection Os últimos engadidos a colección %1 - + Sorry, we could not find any recent additions! Non se atoparon novas pistas engadidas recentemente! - + Recently Played Tracks Pistas recentemente reproducidas - + Your recently played tracks As pistas que soaron recentemente - + %1's recently played tracks As pistas de %1 que soaron recentemente - + Sorry, we could not find any recent plays! Non se escoitaron pistas recentemente! @@ -2107,17 +2119,17 @@ connect and stream from you? TemporaryPageItem - + Copy Artist Link Copiar a ligazón do artista - + Copy Album Link Copiar a ligazón do álbum - + Copy Track Link Copiar a ligazón da pista @@ -2125,32 +2137,32 @@ connect and stream from you? Tomahawk::Accounts::AccountDelegate - + Add Account Engadir unha conta - + Remove Eliminar - + %1 downloads %1 descargas - + Online Conectado - + Connecting... Conectando... - + Offline Desconectado @@ -2220,7 +2232,7 @@ connect and stream from you? Tomahawk::Accounts::LastFmAccountFactory - + Scrobble your tracks to last.fm, and find freely downloadable tracks to play @@ -2526,83 +2538,82 @@ Proba a volver a autenticarte. Tomahawk::ContextMenu - + &Play &Reproducir - - - + + + Add to &Queue Engadir á &ringleira - + Continue Playback after this &Track Continuar á reprodución despois desta &pista - + Stop Playback after this &Track Deter a reprodución despois desta &pista - - + + &Love &Gústame - + + + + &Go to "%1" + + + + + + + Go to "%1" + + + + &Copy Track Link - + Copy Album &Link Copiar a &ligazón do álbum - + Copy Artist &Link Copiar a &ligazón do artista - + Un-&Love Xa non me &gusta - + &Delete Items &Borrar os elementos - - &Show Track Page - &Mostrar a páxina da pista - - - + Properties... Propiedades... - + &Delete Item &Borrar o elemento - - - &Show Album Page - &Mostrar a páxina do álbum - - - - &Show Artist Page - &Mostrar a páxina do artista - Tomahawk::DropJobNotifier @@ -2697,7 +2708,7 @@ Cambia os filtros e proba de novo. Tomahawk::DynamicWidget - + Station ran out of tracks! Try tweaking the filters for a new set of songs to play. @@ -3055,27 +3066,27 @@ Proba a trocar os filtros para ter outra lista música para escoitar. Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks As mellores pistas - + Loved Tracks Pistas favoritas - + Hyped Tracks Pistas en auxe - + Top Artists Os mellores artistas - + Hyped Artists Artistas en auxe @@ -3209,7 +3220,7 @@ Proba a trocar os filtros para ter outra lista música para escoitar. Tomahawk::ShortenedLinkParser - + Network error parsing shortened link! Erro de rede no acurtamento de ligazóns! @@ -3483,179 +3494,179 @@ enter the displayed PIN number here: Seguinte - + Back Atrás - + Go back one page Ir unha páxina atrás - + Forward Adiante - + Go forward one page Ir unha páxian adiante - + Global Search... Busca global... - - + + Hide Menu Bar Agochar a barra de menú - - + + Show Menu Bar Mostrar a barra de menú - + &Main Menu Menú &principal - - - + + + Connect To Peer Conectar cun parceiro - + Enter peer address: Introducir a dirección do parceiro: - + Enter peer port: Introducir o porto do parceiro: - + Enter peer key: Introducir a clave do parceiro: - + XSPF Error Erro XSPF - + This is not a valid XSPF playlist. Esta non é unha lista de XSPF válida. - + Failed to save tracks Fallou o gardado de pistas - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. Algunhas pistas na lista de reprodución non indican nin artista nin o título. Ignoraranse. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. Hai un problema accedendo ao teu dispositivo de son ou a pista que quere así que se omitirá. Asegúrate de ter o motor Phonon e os engadidos necesarios instalados. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Hai un problema accedendo ao teu dispositivo de son ou a pista que quere así que se omitirá. - + Station - + Create New Station Crear unha nova emisión - + Name: Nome: - + Playlist Lista de reprodución - + Automatic Playlist Lista de reprodución automática - + Pause Pausa - + &Play &Reproducir - + Authentication Error Erro de autenticación - + Error connecting to SIP: Authentication failed! Erro conectándose a SIP: Fallou a autentificación! - + %1 by %2 track, artist name %1 por %2 - + %1 - %2 current track, some window title %1.- %2 - + <h2><b>Tomahawk %1<br/>(%2)</h2> <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012 Copyright 2010 - 2012 - + Thanks to: Agradecementos: - + About Tomahawk Acerca de Tomahawk @@ -3711,27 +3722,27 @@ enter the displayed PIN number here: Non se atopan pistas parecidas a esta canción! - + You've listened to this track %n time(s). Escoitaches esta pista %n vece(s). - + You've never listened to this track before. Nunca antes escoutaras esta pista. - + You first listened to it on %1. Escoitaches esta pista por primeira vez en %1. - + You've listened to %1 %n time(s). Escoitaches %1 %n veces. - + You've never listened to %1 before. Nunca antes escoitaras a %1. @@ -3747,13 +3758,13 @@ enter the displayed PIN number here: TransferStatusItem - + from streaming artist - track from friend de - + to streaming artist - track to friend até @@ -3762,7 +3773,7 @@ enter the displayed PIN number here: TreeItemDelegate - + Unknown Descoñecido @@ -3932,17 +3943,17 @@ You can re-send a sync message at any time simply by sending another tweet using Pistas recentemente reproducidas - + Recently played tracks Pistas recentemente reproducidas - + No recently created playlists in your network. - + Welcome to Tomahawk diff --git a/lang/tomahawk_hi_IN.ts b/lang/tomahawk_hi_IN.ts index 450186428..04dbaa9ec 100644 --- a/lang/tomahawk_hi_IN.ts +++ b/lang/tomahawk_hi_IN.ts @@ -47,17 +47,17 @@ connect and stream from you? AccountFactoryWrapperDelegate - + Online - + Connecting... - + Offline @@ -65,18 +65,18 @@ connect and stream from you? AccountListWidget - + Connections - - + + Connect &All - + Disconnect &All @@ -100,154 +100,154 @@ connect and stream from you? ActionCollection - + &Listen Along - + Stop &Listening Along - + &Follow in real-time - - + + &Listen Privately - - + + &Listen Publicly - + &Load Playlist - + &Rename Playlist - + &Copy Playlist Link - + &Play - + &Stop - + &Previous Track - + &Next Track - + &Quit - + Load &XSPF... - + U&pdate Collection - + Fully &Rescan Collection - + Show Offline Sources - + &Configure Tomahawk... - + Minimize - + Zoom - + Hide Menu Bar - + Diagnostics... - + About &Tomahawk... - + &Legal Information... - + Check For Updates... - + &Controls - + &Settings - + &Help - + &Window - + Main Menu @@ -295,7 +295,7 @@ connect and stream from you? - + Other Albums by %1 @@ -322,42 +322,44 @@ connect and stream from you? - + Top Hits - + Related Artists - + + Artist - + Albums - + + Cover - + Sorry, we could not find any albums for this artist! - + Sorry, we could not find any related artists! - + Sorry, we could not find any top hits for this artist! @@ -421,13 +423,13 @@ connect and stream from you? - + Shuffle - + Repeat @@ -442,27 +444,27 @@ connect and stream from you? - + Time Elapsed - + Time Remaining - + Playing from %1 - + Share - + Love @@ -488,24 +490,24 @@ connect and stream from you? CategoryAddItem - + Create new Playlist - + Create new Station - - + + New Station - - + + %1 Station @@ -513,12 +515,12 @@ connect and stream from you? CategoryItem - + Playlists - + Stations @@ -651,97 +653,97 @@ connect and stream from you? EchonestSteerer - + Steer this station: - + Much less - + Less - + A bit less - + Keep at current - + A bit more - + More - + Much more - + Tempo - + Loudness - + Danceability - + Energy - + Song Hotttnesss - + Artist Hotttnesss - + Artist Familiarity - + By Description - + Enter a description - + Apply steering command - + Reset all steering commands @@ -757,12 +759,12 @@ connect and stream from you? FlexibleView - + This playlist is currently empty. - + This playlist is currently empty. Add some tracks to it and enjoy the music! @@ -778,7 +780,7 @@ connect and stream from you? IndexingJobItem - + Indexing database @@ -845,7 +847,7 @@ connect and stream from you? LatchedStatusItem - + %1 is listening along with you! @@ -907,32 +909,32 @@ connect and stream from you? LovedTracksItem - + Top Loved Tracks - + Sorry, we could not find any loved tracks! - + The most loved tracks from all your friends - + All of your loved tracks - + All of %1's loved tracks - + Loved Tracks @@ -1045,7 +1047,7 @@ connect and stream from you? - + Properties @@ -1171,20 +1173,30 @@ connect and stream from you? PlaylistLargeItemDelegate - + played %1 by you - + played %1 by %2 - + added %1 + + + by <b>%1</b> + + + + + by <b>%1</b> on <b>%2</b> + + PlaylistModel @@ -1251,12 +1263,12 @@ connect and stream from you? PlaylistView - + This playlist is currently empty. - + This playlist is currently empty. Add some tracks to it and enjoy the music! @@ -1480,12 +1492,12 @@ connect and stream from you? SettingsDialog - + Collection - + Advanced @@ -1495,12 +1507,12 @@ connect and stream from you? - + Some changed settings will not take effect until Tomahawk is restarted - + Services @@ -1510,37 +1522,37 @@ connect and stream from you? - + Configure the accounts and services used by Tomahawk to search and retrieve music, find your friends and update your status. - + Manage how Tomahawk finds music on your computer. - + Configure Tomahawk's advanced settings, including network connectivity settings, browser interaction and more. - + Install resolver from file - + Delete all Access Control entries? - + Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to. - + Information @@ -1736,22 +1748,22 @@ connect and stream from you? - + Tweet - + Listening to "%1" by %2. %3 - + Listening to "%1" by %2 on "%3". %4 - + %1 characters left @@ -1784,19 +1796,19 @@ connect and stream from you? - + All available tracks - - + + Show - - + + Hide @@ -1843,7 +1855,7 @@ connect and stream from you? - + Latest Additions @@ -1853,42 +1865,42 @@ connect and stream from you? - + SuperCollection - + Latest additions to your collection - + Latest additions to %1's collection - + Sorry, we could not find any recent additions! - + Recently Played Tracks - + Your recently played tracks - + %1's recently played tracks - + Sorry, we could not find any recent plays! @@ -2104,17 +2116,17 @@ connect and stream from you? TemporaryPageItem - + Copy Artist Link - + Copy Album Link - + Copy Track Link @@ -2122,32 +2134,32 @@ connect and stream from you? Tomahawk::Accounts::AccountDelegate - + Add Account - + Remove - + %1 downloads - + Online - + Connecting... - + Offline @@ -2217,7 +2229,7 @@ connect and stream from you? Tomahawk::Accounts::LastFmAccountFactory - + Scrobble your tracks to last.fm, and find freely downloadable tracks to play @@ -2520,83 +2532,82 @@ You may wish to try re-authenticating. Tomahawk::ContextMenu - + &Play - - - + + + Add to &Queue - + Continue Playback after this &Track - + Stop Playback after this &Track - - + + &Love - + + + + &Go to "%1" + + + + + + + Go to "%1" + + + + &Copy Track Link - + Copy Album &Link - + Copy Artist &Link - + Un-&Love - + &Delete Items - - &Show Track Page - - - - + Properties... - + &Delete Item - - - &Show Album Page - - - - - &Show Artist Page - - Tomahawk::DropJobNotifier @@ -2689,7 +2700,7 @@ Please change the filters or try again. Tomahawk::DynamicWidget - + Station ran out of tracks! Try tweaking the filters for a new set of songs to play. @@ -3045,27 +3056,27 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks - + Loved Tracks - + Hyped Tracks - + Top Artists - + Hyped Artists @@ -3199,7 +3210,7 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::ShortenedLinkParser - + Network error parsing shortened link! @@ -3473,178 +3484,178 @@ enter the displayed PIN number here: - + Back - + Go back one page - + Forward - + Go forward one page - + Global Search... - - + + Hide Menu Bar - - + + Show Menu Bar - + &Main Menu - - - + + + Connect To Peer - + Enter peer address: - + Enter peer port: - + Enter peer key: - + XSPF Error - + This is not a valid XSPF playlist. - + Failed to save tracks - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. - + Station - + Create New Station - + Name: - + Playlist - + Automatic Playlist - + Pause - + &Play - + Authentication Error - + Error connecting to SIP: Authentication failed! - + %1 by %2 track, artist name - + %1 - %2 current track, some window title - + <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012 - + Thanks to: - + About Tomahawk @@ -3700,27 +3711,27 @@ enter the displayed PIN number here: - + You've listened to this track %n time(s). - + You've never listened to this track before. - + You first listened to it on %1. - + You've listened to %1 %n time(s). - + You've never listened to %1 before. @@ -3736,13 +3747,13 @@ enter the displayed PIN number here: TransferStatusItem - + from streaming artist - track from friend - + to streaming artist - track to friend @@ -3751,7 +3762,7 @@ enter the displayed PIN number here: TreeItemDelegate - + Unknown @@ -3921,17 +3932,17 @@ You can re-send a sync message at any time simply by sending another tweet using - + Recently played tracks - + No recently created playlists in your network. - + Welcome to Tomahawk diff --git a/lang/tomahawk_hu.ts b/lang/tomahawk_hu.ts new file mode 100644 index 000000000..8f2091f58 --- /dev/null +++ b/lang/tomahawk_hu.ts @@ -0,0 +1,4315 @@ + + + ACLJobDelegate + + + Allow %1 to +connect and stream from you? + + + + + Allow Streaming + + + + + Deny Access + + + + + ACLJobItem + + + Tomahawk needs you to decide whether %1 is allowed to connect. + + + + + AccountFactoryWrapper + + + Dialog + + + + + Description goes here + + + + + Add Account + Fiók létrehozása + + + + AccountFactoryWrapperDelegate + + + Online + Elérhető + + + + Connecting... + Csatlakozás... + + + + Offline + Nem elérhető + + + + AccountListWidget + + + Connections + Kapcsolatok + + + + + Connect &All + + + + + Disconnect &All + + + + + AccountWidget + + + Invite + + + + + AccountsToolButton + + + Configure Accounts + + + + + ActionCollection + + + &Listen Along + + + + + Stop &Listening Along + + + + + &Follow in real-time + + + + + + &Listen Privately + + + + + + &Listen Publicly + + + + + &Load Playlist + &Lejátszólista betöltése + + + + &Rename Playlist + Lejátszólista átnevezése + + + + &Copy Playlist Link + + + + + &Play + Lejátszás + + + + &Stop + Megállítás + + + + &Previous Track + Előző zeneszám + + + + &Next Track + Következő zeneszám + + + + &Quit + Kilépés + + + + Load &XSPF... + &XSPF betöltése... + + + + U&pdate Collection + Kolelkció frissítése + + + + Fully &Rescan Collection + + + + + Show Offline Sources + Nem elérhető források mutatása + + + + &Configure Tomahawk... + Tomahawk kofigurálása + + + + Minimize + Minimalizálás + + + + Zoom + Zoom + + + + Hide Menu Bar + Menü bar elrejtése + + + + Diagnostics... + Diagnosztizálás... + + + + About &Tomahawk... + &Tomahawkról + + + + &Legal Information... + Jogi információk + + + + Check For Updates... + Frissítések ellenőrzése + + + + &Controls + + + + + &Settings + + + + + &Help + + + + + &Window + + + + + Main Menu + + + + + AlbumInfoWidget + + + Form + + + + + Tracklist + Zeneszám lista + + + + Other Albums + Egyéb albumok + + + + Cover + Borító + + + + Album + Album + + + + Artist + Előadó + + + + Sorry, we could not find any other albums for this artist! + + + + + Sorry, we could not find any tracks for this album! + + + + + Other Albums by %1 + + + + + AlbumModel + + + + All albums from %1 + + + + + All albums + Összes album + + + + ArtistInfoWidget + + + Form + + + + + Top Hits + Top Hits + + + + Related Artists + Kapcsolódó előadók + + + + + Artist + + + + + Albums + Albumok + + + + + Cover + Borító + + + + Sorry, we could not find any albums for this artist! + + + + + Sorry, we could not find any related artists! + + + + + Sorry, we could not find any top hits for this artist! + + + + + AudioControls + + + Prev + Előző + + + + Play + Lejátszás + + + + Pause + Szünet + + + + Next + Következő + + + + Artist + Előadó + + + + Album + Album + + + + social + + + + + love + + + + + resolver + + + + + Time + Idő + + + + Time Left + Hátralévő idő + + + + + Shuffle + + + + + + Repeat + Ismétlés + + + + Low + Alacsony + + + + High + Magas + + + + Time Elapsed + + + + + Time Remaining + + + + + Playing from %1 + + + + + Share + + + + + Love + + + + + AudioEngine + + + Sorry, Tomahawk couldn't find the track '%1' by %2 + + + + + Sorry, Tomahawk couldn't find the artist '%1' + + + + + Sorry, Tomahawk couldn't find the album '%1' by %2 + + + + + CategoryAddItem + + + Create new Playlist + Új lejátszólista létrehozása + + + + Create new Station + Új rádióállomás létrehozása + + + + + New Station + Új rádióállomás + + + + + %1 Station + + + + + CategoryItem + + + Playlists + Lejátszólisták + + + + Stations + Rádióállomások + + + + ClearButton + + + Clear + Törlés + + + + ContextWidget + + + InfoBar + InfoBar + + + + + Show Footnotes + Lábléc mutatása + + + + Hide Footnotes + Lábléc elrejtése + + + + CrashReporter + + + Tomahawk Crash Reporter + Tomahawk Crash Reporter + + + + <html><head/><body><p><span style=" font-weight:600;">Sorry!</span> Tomahawk crashed. Please tell us about it! Tomahawk has created an error report for you that can help improve the stability in the future. You can now send this report directly to the Tomahawk developers.</p></body></html> + + + + + Send this report + + + + + Don't send + + + + + Abort + + + + + You can disable sending crash reports in the configuration dialog. + + + + + Uploaded %L1 of %L2 KB. + + + + + + Close + Bezárás + + + + Sent! <b>Many thanks</b>. + + + + + Failed to send crash info. + + + + + DatabaseCommand_AllAlbums + + + Unknown + Ismeretlen + + + + DelegateConfigWrapper + + + About + Névjegy + + + + Delete Account + Fiók törlése + + + + About this Account + A fiókról + + + + DiagnosticsDialog + + + Tomahawk Diagnostics + Tomahawk diagnosztizálás + + + + &Copy to Clipboard + Másolás a vágólapra + + + + Open &Log-file + + + + + EchonestSteerer + + + Steer this station: + + + + + Much less + Sokkal kevesebb + + + + Less + Kevés + + + + A bit less + Egy kicsit kevés + + + + Keep at current + + + + + A bit more + Egy kicsit több + + + + More + Több + + + + Much more + Sokkal több + + + + Tempo + Ütem + + + + Loudness + Hangosság + + + + Danceability + Táncolhatóság + + + + Energy + Energia + + + + Song Hotttnesss + + + + + Artist Hotttnesss + + + + + Artist Familiarity + + + + + By Description + + + + + Enter a description + + + + + Apply steering command + + + + + Reset all steering commands + + + + + FlexibleHeader + + + Filter... + Szűrő... + + + + FlexibleView + + + This playlist is currently empty. + + + + + This playlist is currently empty. Add some tracks to it and enjoy the music! + + + + + GlobalSearchWidget + + + Form + + + + + IndexingJobItem + + + Indexing database + Adatbázis indexelése + + + + InfoBar + + + InfoBar + InfoBar + + + + Filter... + + + + + LastFmConfig + + + Form + + + + + Scrobble tracks to Last.fm + + + + + Username: + Felhasználónév: + + + + Password: + Jelszó: + + + + Test Login + Teszt belépés + + + + Import Playback History + + + + + Synchronize Loved Tracks + + + + + LastfmContext + + + Last.fm + Last.fm + + + + LatchedStatusItem + + + %1 is listening along with you! + + + + + LoadXSPF + + + Load XSPF + XSPF betöltése + + + + Playlist URL + Lejátszólista URL + + + + Enter URL... + URL beírása... + + + + ... + ... + + + + Automatically update + Automatikus frissítés + + + + LoadXSPFDialog + + + Load XSPF File + XSPF fájl betöltése + + + + XSPF Files (*.xspf) + XSPF fájlok (*.xspf) + + + + LocalCollection + + + Bookmarks + Könyvjelzők + + + + Saved tracks + Mentett zeneszámok + + + + LovedTracksItem + + + Top Loved Tracks + + + + + Sorry, we could not find any loved tracks! + + + + + The most loved tracks from all your friends + + + + + All of your loved tracks + + + + + All of %1's loved tracks + + + + + Loved Tracks + + + + + MetadataEditor + + + Form + + + + + Tags + + + + + Title: + + + + + Title... + + + + + Artist: + + + + + Artist... + + + + + Album: + Album: + + + + Album... + + + + + Track Number: + Zeneszám száma: + + + + Duration: + + + + + 00.00 + 00.00 + + + + Year: + Év: + + + + Bitrate: + Bitráta: + + + + File + Fájl + + + + File Name: + Fájlnév: + + + + File Name... + Fájlnév... + + + + File Size... + Fájlméret... + + + + File size... + Fájlméret... + + + + File Size: + Fájlméret: + + + + Back + Vissza + + + + Forward + Előre + + + + Properties + Tulajdonságok + + + + NewPlaylistWidget + + + Enter a title for the new playlist: + + + + + Tomahawk offers a variety of ways to help you create playlists and find music you enjoy! + + + + + Just enter a genre or tag name and Tomahawk will suggest a few songs to get you started with your new playlist: + + + + + &Create Playlist + Lejátszólista létrehozása + + + + Create a new playlist + Új lejátszólista létrehozása + + + + NewReleasesWidget + + + New Releases + Új kiadások + + + + PlayableModel + + + Artist + + + + + Title + + + + + Composer + + + + + Album + + + + + Track + + + + + Duration + + + + + Bitrate + + + + + Age + + + + + Year + + + + + Size + + + + + Origin + + + + + Score + + + + + + Name + Név + + + + PlaylistItemDelegate + + + played %1 by you + + + + + played %1 by %2 + + + + + PlaylistLargeItemDelegate + + + played %1 by you + + + + + played %1 by %2 + + + + + added %1 + + + + + by <b>%1</b> + by <b>%1</b> + + + + by <b>%1</b> on <b>%2</b> + by <b>%1</b> on <b>%2</b> + + + + PlaylistModel + + + A playlist you created %1. + + + + + + A playlist by %1, created %2. + + + + + All tracks by %1 on album %2 + + + + + All tracks by %1 + + + + + PlaylistTypeSelectorDlg + + + New Playlist + Új lejátszólista + + + + Just a regular old playlist... Give it a name, drag in some tracks, and go! + + + + + Don't know exactly what you want? Give Tomahawk a few pointers and let it build a playlist for you! + + + + + Name: + Név: + + + + New Playlist... + Új lejátszólista... + + + + Create Manual Playlist + + + + + Create Automatic Playlist + + + + + PlaylistView + + + This playlist is currently empty. + Ez a lejátszólista jelenleg üres. + + + + This playlist is currently empty. Add some tracks to it and enjoy the music! + + + + + ProxyDialog + + + Proxy Settings + Proxy beállítások + + + + Hostname of proxy server + Proxy szerver hosztneve + + + + Host + Hosztnév + + + + Port + Port + + + + Proxy login + Proxy bejelentkezés + + + + User + Felhasználó + + + + Password + Jelszó + + + + Proxy password + Proxy jelszó + + + + No Proxy Hosts: +(Overrides system proxy) + + + + + localhost *.example.com (space separated) + localhost *.example.com (szóközzel elválasztva) + + + + Use proxy for DNS lookups? + + + + + QObject + + + %n year(s) ago + %n évvel ezelőtt%n évvel ezelőtt + + + + %n year(s) + %n év%n év + + + + %n month(s) ago + %n hónappal ezelőtt%n hónappal ezelőtt + + + + %n month(s) + %n hónap%n hónap + + + + %n week(s) ago + %n héttel ezelőtt%n héttel ezelőtt + + + + %n week(s) + %n hét%n hét + + + + %n day(s) ago + %n nappal ezelőtt%n nappal ezelőtt + + + + %n day(s) + %n nap%n nap + + + + %n hour(s) ago + %n órával ezelőtt%n órával ezelőtt + + + + %n hour(s) + %n óra%n óra + + + + %1 minutes ago + %1 perccel ezelőtt + + + + %1 minutes + %1 perc + + + + just now + éppen most + + + + Friend Finders + Barát kereső + + + + Music Finders + Zene kereső + + + + Status Updaters + Állapot frissítő + + + + QuaZipFilePrivate + + + ZIP/UNZIP API error %1 + + + + + QueueView + + + InfoBar + + + + + + Open Queue + + + + + Open Queue - %n item(s) + + + + + Close Queue + + + + + RelatedArtistsContext + + + Related Artists + + + + + ResolverConfigDelegate + + + Not found: %1 + + + + + Failed to load: %1 + + + + + SearchLineEdit + + + Search + + + + + SearchWidget + + + Search: %1 + + + + + Results for '%1' + + + + + SettingsDialog + + + Collection + + + + + Advanced + + + + + All + Mind + + + + Some changed settings will not take effect until Tomahawk is restarted + + + + + Services + Szolgáltatások + + + + Install from file + + + + + Configure the accounts and services used by Tomahawk to search and retrieve music, find your friends and update your status. + + + + + Manage how Tomahawk finds music on your computer. + + + + + Configure Tomahawk's advanced settings, including network connectivity settings, browser interaction and more. + + + + + Install resolver from file + + + + + Delete all Access Control entries? + + + + + Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to. + + + + + Information + Információ + + + + Settings_Accounts + + + Form + + + + + Filter by capability: + + + + + Settings_Advanced + + + Form + + + + + Remote Peer Connection Method + + + + + None (outgoing connections only) + + + + + Use UPnP to establish port forward (recommended) + + + + + Use static external IP address/host name and port + + + + + Set this to your external IP address or host name. Make sure to forward the port to this host! + + + + + Static Host Name: + Statikus hosztnév: + + + + Static Port: + Statikus port: + + + + SOCKS Proxy + SOCKS Proxy + + + + Use SOCKS Proxy + SOCKS proxy használata + + + + Proxy Settings... + Proxy beállítások... + + + + Other Settings + Egyéb beállítások + + + + Allow web browsers to interact with Tomahawk (recommended) + + + + + Send reports after Tomahawk crashed + + + + + Show notification when a new song starts to play + Értesítések mutatása ha egy új zene elindul + + + + Clear All Access Control Entries + + + + + Settings_Collection + + + Form + + + + + Path to scan for music files: + + + + + The Echo Nest supports keeping track of your catalog metadata + and using it to craft personalized radios. Enabling this option + will allow you (and all your friends) to create automatic playlists + and stations based on your personal taste profile. + + + + + Upload collection list to The Echo Nest to enable user radio + + + + + Watch for changes + Változások figyelése + + + + Time between scans, in seconds: + Szkennelések közötti idő, másodpercben: + + + + SlideSwitchButton + + + On + + + + + Off + + + + + SocialPlaylistWidget + + + Popular New Albums From Your Friends + + + + + Most Played Playlists + + + + + Most Played Tracks You Don't Have + + + + + SocialWidget + + + Form + + + + + Facebook + + + + + Twitter + + + + + Cover + + + + + TextLabel + + + + + Tweet + Tweet + + + + Listening to "%1" by %2. %3 + + + + + Listening to "%1" by %2 on "%3". %4 + + + + + %1 characters left + + + + + SourceDelegate + + + Track + Zeneszám + + + + Album + Album + + + + Artist + Előadó + + + + Local + Helyi + + + + Top 10 + Top 10 + + + + All available tracks + Összes elérhető zeneszám + + + + + Show + Mutatás + + + + + Hide + Elrejtés + + + + SourceInfoWidget + + + Recent Albums + + + + + Latest Additions + Legutóbb hozzáadott + + + + Recently Played Tracks + Mostanában játszott zeneszámok + + + + New Additions + + + + + My recent activity + + + + + Recent activity from %1 + + + + + SourceItem + + + Collection + Kollekció + + + + + Latest Additions + + + + + Recently Played + Mostanában játszott + + + + SuperCollection + Szuper kollekció + + + + Latest additions to your collection + + + + + Latest additions to %1's collection + + + + + Sorry, we could not find any recent additions! + + + + + Recently Played Tracks + Monstanában játszott zeneszámok + + + + Your recently played tracks + + + + + %1's recently played tracks + + + + + Sorry, we could not find any recent plays! + + + + + SourceTreeView + + + &Copy Link + + + + + &Delete %1 + + + + + Add to my Playlists + + + + + Add to my Automatic Playlists + + + + + Add to my Stations + + + + + &Export Playlist + + + + + playlist + lejátszólista + + + + automatic playlist + automatikus lejátszólista + + + + station + rádióállomás + + + + Would you like to delete the %1 <b>"%2"</b>? + e.g. Would you like to delete the playlist named Foobar? + + + + + Delete + Törlés + + + + Save XSPF + XSPF mentése + + + + Playlists (*.xspf) + Lejátszólisták (*.xspf) + + + + SourcesModel + + + Group + Csoport + + + + Collection + Kollekció + + + + Playlist + Lejátszólista + + + + Automatic Playlist + Automatikus lejátszólista + + + + Station + Rádióállomás + + + + Browse + Böngészés + + + + Search History + Keresési előzmények + + + + My Music + Zenéim + + + + SuperCollection + Szuper kollekció + + + + Dashboard + + + + + Recently Played + Monstanában játszott + + + + Charts + + + + + New Releases + Új kiadások + + + + Friends + Barátok + + + + SpotifyConfig + + + Form + + + + + Configure your Spotify account + Spotify fiók konfigurálása + + + + Username or Facebook Email + Felhasználói név vagy Facebook email + + + + Log In + Belépés + + + + Right click on any Tomahawk playlist to sync it to Spotify. + + + + + Select All + Mind kijelőlése + + + + High Quality Streams + Magas minőségű streamek + + + + Spotify playlists to keep in sync: + + + + + Delete Tomahawk playlist when removing synchronization + + + + + Username: + Felhasználó: + + + + Password: + Jelszó: + + + + SpotifyPlaylistUpdater + + + Delete associated Spotify playlist? + + + + + TemporaryPageItem + + + Copy Artist Link + Előadó linkjének másolása + + + + Copy Album Link + Album linkjének másolása + + + + Copy Track Link + Zeneszám linkjének másolása + + + + Tomahawk::Accounts::AccountDelegate + + + Add Account + Fiók hozzáadása + + + + Remove + Eltávolítás + + + + %1 downloads + + + + + Online + Elérhető + + + + Connecting... + Csatlakozás... + + + + Offline + Nem elérhető + + + + Tomahawk::Accounts::AccountModel + + + Manual Install Required + + + + + Unfortunately, automatic installation of this resolver is not available or disabled for your platform.<br /><br />Please use "Install from file" above, by fetching it from your distribution or compiling it yourself. Further instructions can be found here:<br /><br />http://www.tomahawk-player.org/resolvers/%1 + + + + + Tomahawk::Accounts::GoogleWrapper + + + Configure this Google Account + + + + + Google Address: + + + + + Enter your Google login to connect with your friends using Tomahawk! + + + + + username@gmail.com + username@gmail.com + + + + Tomahawk::Accounts::GoogleWrapperFactory + + + Connect to Google Talk to find your friends + + + + + Tomahawk::Accounts::GoogleWrapperSip + + + Enter Google Address + + + + + Add Friend + Barát hozzáadása + + + + Enter Google Address: + Google cím beírása: + + + + Tomahawk::Accounts::LastFmAccountFactory + + + Scrobble your tracks to last.fm, and find freely downloadable tracks to play + + + + + Tomahawk::Accounts::LastFmConfig + + + Testing... + + + + + Test Login + Teszt belépés + + + + Importing %1 + e.g. Importing 2012/01/01 + + + + + Importing History... + + + + + History Incomplete. Resume + + + + + Playback History Imported + + + + + + Failed + Sikertelen + + + + Success + Sikeres + + + + Could not contact server + + + + + Synchronizing... + Szinkronizálás... + + + + Synchronization Finished + Szinkronizálás befejezve + + + + Tomahawk::Accounts::SpotifyAccount + + + Sync with Spotify + Szinkronizálás a Spotify-val + + + + Re-enable syncing with Spotify + + + + + Create local copy + Helyi másolat létrehozása + + + + Subscribe to playlist changes + + + + + Re-enable playlist subscription + + + + + Stop subscribing to changes + + + + + Enable Spotify collaborations + + + + + Disable Spotify collaborations + + + + + Stop syncing with Spotify + + + + + Tomahawk::Accounts::SpotifyAccountConfig + + + Logging in... + Belépés... + + + + Failed: %1 + + + + + Logged in as %1 + Bejelentkezve mint %1 + + + + Log Out + Kijelentkezés + + + + + Log In + Belépés + + + + Tomahawk::Accounts::SpotifyAccountFactory + + + Play music from and sync your playlists with Spotify Premium + + + + + Tomahawk::Accounts::TwitterAccountFactory + + + Connect to your Twitter followers. + + + + + Tomahawk::Accounts::TwitterConfigWidget + + + + + Tweet! + Tweet! + + + + + Status: No saved credentials + Állapot: Nincs elmentett belépési adat + + + + + + Authenticate + Azonosítás + + + + + Status: Credentials saved for %1 + + + + + + De-authenticate + + + + + + + + + + + Tweetin' Error + + + + + The credentials could not be verified. +You may wish to try re-authenticating. + + + + + Status: Error validating credentials + + + + + Global Tweet + + + + + Direct Message + Direkt üzenet + + + + Send Message! + + + + + @Mention + + + + + Send Mention! + + + + + You must enter a user name for this type of tweet. + + + + + Your saved credentials could not be loaded. +You may wish to try re-authenticating. + + + + + Your saved credentials could not be verified. +You may wish to try re-authenticating. + + + + + + There was an error posting your status -- sorry! + + + + + + Tweeted! + + + + + Your tweet has been posted! + + + + + There was an error posting your direct message -- sorry! + + + + + Your message has been posted! + + + + + Tomahawk::Accounts::XmppAccountFactory + + + Log on to your Jabber/XMPP account to connect to your friends + + + + + Tomahawk::Accounts::ZeroconfFactory + + + Automatically connect to Tomahawks on the local network + + + + + Tomahawk::ContextMenu + + + &Play + + + + + + + Add to &Queue + + + + + Continue Playback after this &Track + + + + + Stop Playback after this &Track + + + + + + &Love + + + + + + + &Go to "%1" + + + + + + + Go to "%1" + + + + + &Copy Track Link + + + + + Copy Album &Link + + + + + Copy Artist &Link + + + + + Un-&Love + + + + + &Delete Items + + + + + Properties... + Tulajdonságok... + + + + &Delete Item + + + + + Tomahawk::DropJobNotifier + + + playlist + lejátszólista + + + + artist + előadó + + + + track + zeneszám + + + + album + album + + + + Fetching %1 from database + + + + + Parsing %1 %2 + + + + + Tomahawk::DynamicControlList + + + Click to collapse + + + + + Tomahawk::DynamicModel + + + + Could not find a playable track. + +Please change the filters or try again. + + + + + Failed to generate preview with the desired filters + + + + + Tomahawk::DynamicSetupWidget + + + Type: + + + + + Generate + + + + + Tomahawk::DynamicView + + + Add some filters above to seed this station! + + + + + Press Generate to get started! + + + + + Add some filters above, and press Generate to get started! + + + + + Tomahawk::DynamicWidget + + + Station ran out of tracks! + +Try tweaking the filters for a new set of songs to play. + + + + + Tomahawk::EchonestControl + + + + + + + + is + + + + + from user + + + + + + No users with Echo Nest Catalogs enabled. Try enabling option in Collection settings + + + + + similar to + + + + + + + + + + + Less + + + + + + + + + + + More + + + + + 0 BPM + 0 BPM + + + + 500 BPM + 500 BPM + + + + 0 secs + 0 másodperc + + + + 3600 secs + 3600 másodperc + + + + -100 dB + -100 dB + + + + 100 dB + 100 dB + + + + Major + + + + + Minor + + + + + C + C + + + + C Sharp + C Sharp + + + + D + D + + + + E Flat + E Flat + + + + E + E + + + + F + F + + + + F Sharp + F Sharp + + + + G + G + + + + A Flat + A Flat + + + + A + A + + + + B Flat + B Flat + + + + B + B + + + + Ascending + Növekvő + + + + Descending + Csökkenő + + + + Tempo + Ütem + + + + Duration + Időtartam + + + + Loudness + Hangosság + + + + Artist Familiarity + + + + + Artist Hotttnesss + + + + + Song Hotttnesss + + + + + Latitude + Szélesség + + + + Longitude + Hosszúság + + + + Mode + Mód + + + + Key + Kulcs + + + + Energy + Energia + + + + Danceability + + + + + only by ~%1 + + + + + similar to ~%1 + + + + + with genre ~%1 + + + + + + from no one + + + + + My Collection + Saját kollekció + + + + from %1 radio + + + + + with %1 %2 + + + + + about %1 BPM + + + + + about %n minute(s) long + + + + + about %1 dB + + + + + at around %1%2 %3 + + + + + in %1 + + + + + in a %1 key + + + + + sorted in %1 %2 order + + + + + with a %1 mood + + + + + in a %1 style + + + + + Tomahawk::GroovesharkParser + + + Error fetching Grooveshark information from the network! + + + + + Tomahawk::InfoSystem::ChartsPlugin + + + Top Overall + + + + + Artists + + + + + Albums + + + + + Tracks + + + + + Tomahawk::InfoSystem::FdoNotifyPlugin + + + Tomahawk is playing "%1" by %2%3. + + + + + on "%1" + + + + + Tomahawk::InfoSystem::LastFmInfoPlugin + + + Top Tracks + Top zeneszámok + + + + Loved Tracks + Kedvelt zeneszámok + + + + Hyped Tracks + + + + + Top Artists + Top előadók + + + + Hyped Artists + + + + + Tomahawk::InfoSystem::NewReleasesPlugin + + + Albums + Albumok + + + + Tomahawk::InfoSystem::TwitterInfoPlugin + + + Listening to "%1" by %2 and loving it! %3 + + + + + Tomahawk::ItunesParser + + + Error fetching iTunes information from the network! + + + + + Tomahawk::JSPFLoader + + + New Playlist + + + + + Failed to save tracks + + + + + Some tracks in the playlist do not contain an artist and a title. They will be ignored. + + + + + XSPF Error + + + + + This is not a valid XSPF playlist. + + + + + Tomahawk::LatchManager + + + &Catch Up + + + + + + &Listen Along + + + + + Tomahawk::Playlist + + + Would you like to delete the playlist <b>"%2"</b>? + e.g. Would you like to delete the playlist named Foobar? + + + + + Delete + Törlés + + + + Tomahawk::Query + + + and + + + + + You + + + + + you + + + + + and + + + + + %n other(s) + + + + + %1 people + + + + + loved this track + + + + + Tomahawk::RdioParser + + + Error fetching Rdio information from the network! + + + + + Tomahawk::ShortenedLinkParser + + + Network error parsing shortened link! + + + + + Tomahawk::Source + + + + Scanning (%L1 tracks) + + + + + Scanning + Szkennelés + + + + Checking + Ellenőrzés + + + + Syncing + Szinkronizálás + + + + Importing + Importálás + + + + Saving (%1%) + Mentés (%1%) + + + + Online + Elérhető + + + + Offline + Nem elérhető + + + + Tomahawk::SpotifyParser + + + Error fetching Spotify information from the network! + + + + + Tomahawk::XspfUpdater + + + Automatically update from XSPF + + + + + TomahawkApp + + + My Collection + Saját kollekció + + + + TomahawkOAuthTwitter + + + Twitter PIN + Twitter PIN + + + + After authenticating on Twitter's web site, +enter the displayed PIN number here: + + + + + TomahawkTrayIcon + + + &Stop Playback after current Track + + + + + + Hide Tomahawk Window + Tomahawk ablak elrejtése + + + + Show Tomahawk Window + Tomahawk ablak megjelenítése + + + + Currently not playing. + + + + + Play + Lejátszás + + + + Pause + Megállítás + + + + &Love + + + + + Un-&Love + + + + + &Continue Playback after current Track + + + + + TomahawkWindow + + + Tomahawk + Tomahawk + + + + &Quit + Kiléps + + + + Ctrl+Q + Ctrl+Q + + + + Go &Online + + + + + Add &Friend... + Barát hozzáadása + + + + U&pdate Collection + Kollekció frissítése + + + + Update Collection + Kollekció frissítése + + + + &Configure Tomahawk... + Tomahawk beállítása + + + + Load &XSPF... + &XSPF betöltése... + + + + Create &New Playlist... + Új lejátszólista létrehozása + + + + About &Tomahawk... + &Tomahawkról + + + + Create New &Automatic Playlist + + + + + Create New &Station + + + + + Show Offline Sources + Nem elérhető források mutatása + + + + Hide Offline Sources + Nem elérhető források elrejtése + + + + Minimize + Minimalizálás + + + + Ctrl+M + Ctrl+M + + + + Zoom + Zoom + + + + Meta+Ctrl+Z + Meta+Ctrl+Z + + + + &Legal Info... + + + + + Diagnostics... + Diagnosztizálás... + + + + Fully &Rescan Collection + + + + + Fully Rescan Collection + + + + + Play + Lejátszás + + + + Space + Szóköz + + + + Previous + Előző + + + + Next + Következő + + + + Back + + + + + Go back one page + + + + + Forward + + + + + Go forward one page + + + + + Global Search... + Globális keresés... + + + + + Hide Menu Bar + + + + + + Show Menu Bar + + + + + &Main Menu + + + + + + + Connect To Peer + + + + + Enter peer address: + + + + + Enter peer port: + + + + + Enter peer key: + + + + + XSPF Error + XSPF hiba + + + + This is not a valid XSPF playlist. + Nem érvényes XSPF lejátszólista. + + + + Failed to save tracks + + + + + Some tracks in the playlist do not contain an artist and a title. They will be ignored. + + + + + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. + + + + + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. + + + + + Station + Rádióállomás + + + + Create New Station + + + + + Name: + + + + + Playlist + Lejátszólista + + + + Automatic Playlist + Automatikus lejátszólista + + + + Pause + + + + + &Play + + + + + Authentication Error + + + + + Error connecting to SIP: Authentication failed! + + + + + %1 by %2 + track, artist name + + + + + %1 - %2 + current track, some window title + + + + + <h2><b>Tomahawk %1<br/>(%2)</h2> + <h2><b>Tomahawk %1<br/>(%2)</h2> + + + + <h2><b>Tomahawk %1</h2> + <h2><b>Tomahawk %1</h2> + + + + Copyright 2010 - 2012 + + + + + Thanks to: + + + + + About Tomahawk + Tomahawkról + + + + TopTracksContext + + + Top Hits + + + + + TrackInfoWidget + + + Form + + + + + Cover + Borító + + + + Track + Zeneszám + + + + Artist + Előadó + + + + Album + Album + + + + Statistics + Statisztika + + + + Similar Tracks + Hasonló zeneszámok + + + + Sorry, but we could not find similar tracks for this song! + + + + + You've listened to this track %n time(s). + + + + + You've never listened to this track before. + + + + + You first listened to it on %1. + + + + + You've listened to %1 %n time(s). + + + + + You've never listened to %1 before. + + + + + TrackView + + + Sorry, your filter '%1' did not match any results. + + + + + TransferStatusItem + + + from + streaming artist - track from friend + + + + + to + streaming artist - track to friend + + + + + TreeItemDelegate + + + Unknown + + + + + TreeModel + + + All Artists + + + + + + My Collection + + + + + + Collection of %1 + + + + + TreeView + + + Sorry, your filter '%1' did not match any results. + + + + + TwitterConfigWidget + + + Configure this Twitter account + + + + + The Twitter plugin allows you to discover and play music from your Twitter friends running Tomahawk and post messages to your account. + + + + + Status: No saved credentials + + + + + Authenticate with Twitter + + + + + Twitter Connections + + + + + +If you only want to post tweets, you're done. + +If you want to connect Tomahawk to your friends using Twitter, select the type of tweet and press the button below to send a sync message. You must both be following each other as Direct Messages are used. Then be (very) patient -- it can take several minutes! + +You can re-send a sync message at any time simply by sending another tweet using the button. + + + + + Select the kind of tweet you would like, then press the button to post it: + + + + + Global Tweet + + + + + @Mention + + + + + Direct Message + + + + + e.g. @tomahawk + + + + + Send Message + + + + + TwitterSipPlugin + + + Enter Twitter username + + + + + ViewManager + + + This playlist is empty! + Ez a lejátszólista üres! + + + + After you have scanned your music collection you will find your tracks right here. + + + + + This collection is empty. + Ez a kollekció üres. + + + + SuperCollection + + + + + Combined libraries of all your online friends + + + + + Recently Played Tracks + Mostanában játszott zeneszámok + + + + Recently played tracks from all your friends + + + + + Sorry, we could not find any recent plays! + + + + + WelcomeWidget + + + Recent Additions + + + + + Newest Stations & Playlists + + + + + Recently Played Tracks + + + + + Recently played tracks + Mostanában játszott zeneszámok + + + + No recently created playlists in your network. + + + + + Welcome to Tomahawk + + + + + WhatsHotWidget + + + Charts + + + + + WikipediaContext + + + Wikipedia + + + + + XMPPBot + + + +Terms for %1: + + + + + + No terms found, sorry. + + + + + +Hotttness for %1: %2 + + + + + + +Familiarity for %1: %2 + + + + + + +Lyrics for "%1" by %2: + +%3 + + + + + + XSPFLoader + + + Failed to parse contents of XSPF playlist + + + + + Some playlist entries were found without artist and track name, they will be omitted + + + + + Failed to fetch the desired playlist from the network, or the desired file does not exist + + + + + New Playlist + Új lejátszólista + + + + XmlConsole + + + Xml stream console + Xml stream konzol + + + + + Filter + Szűrő + + + + Save log + Log mentése + + + + Disabled + + + + + By JID + + + + + By namespace uri + + + + + By all attributes + + + + + Visible stanzas + + + + + Information query + + + + + Message + Üzenet + + + + Presence + + + + + Custom + + + + + Close + Bezárás + + + + Save XMPP log to file + + + + + OpenDocument Format (*.odf);;HTML file (*.html);;Plain text (*.txt) + + + + + XmppConfigWidget + + + Xmpp Configuration + Xmpp beállítás + + + + Configure this Xmpp account + + + + + Enter your Xmpp login to connect with your friends using Tomahawk! + + + + + Login Information + Belépési információ + + + + Xmpp ID: + Xmpp ID: + + + + e.g. user@example.com + pl. user@example.com + + + + Password: + Jelszó: + + + + An account with this name already exists! + + + + + Advanced Xmpp Settings + Haladó Xmpp beállítások + + + + Server: + Szerver: + + + + Port: + Port: + + + + Lots of servers don't support this (e.g. GTalk, jabber.org) + + + + + Publish currently playing track + + + + + Enforce secure connection + + + + + XmppSipPlugin + + + User Interaction + Felhasználói interakció + + + + Host is unknown + Ismeretlen hoszt + + + + Item not found + + + + + Authorization Error + Azonosítási hiba + + + + Remote Stream Error + Távoli stream hiba + + + + Remote Connection failed + Távoli kapcsolódási hiba + + + + Internal Server Error + Belső szerver hiba + + + + System shutdown + Rendszer leállítás + + + + Conflict + + + + + Unknown + Ismeretlen + + + + Do you want to add <b>%1</b> to your friend list? + + + + + No Compression Support + + + + + Enter Jabber ID + + + + + No Encryption Support + + + + + No Authorization Support + + + + + No Supported Feature + + + + + Add Friend + + + + + Enter Xmpp ID: + + + + + Add Friend... + + + + + XML Console... + + + + + I'm sorry -- I'm just an automatic presence used by Tomahawk Player (http://gettomahawk.com). If you are getting this message, the person you are trying to reach is probably not signed on, so please try again later! + + + + + Authorize User + + + + + ZeroconfConfig + + + Form + + + + + Local Network configuration + + + + + This plugin will automatically find other users running Tomahawk on your local network + + + + + Connect automatically when Tomahawk starts + + + + \ No newline at end of file diff --git a/lang/tomahawk_it.ts b/lang/tomahawk_it.ts index 77765fe66..5083ea4d8 100644 --- a/lang/tomahawk_it.ts +++ b/lang/tomahawk_it.ts @@ -47,17 +47,17 @@ connect and stream from you? AccountFactoryWrapperDelegate - + Online Online - + Connecting... In connessione... - + Offline Offline @@ -65,18 +65,18 @@ connect and stream from you? AccountListWidget - + Connections - - + + Connect &All - + Disconnect &All @@ -100,154 +100,154 @@ connect and stream from you? ActionCollection - + &Listen Along &Ascolta assieme - + Stop &Listening Along &Stop&Ascolta assieme - + &Follow in real-time &Segui in diretta - - + + &Listen Privately &Ascolta in privato - - + + &Listen Publicly &Ascolta pubblicamente - + &Load Playlist &Carica playlist - + &Rename Playlist &Rinomina playlist - + &Copy Playlist Link &Copia link playlist - + &Play &Play - + &Stop &Stop - + &Previous Track &Indietro - + &Next Track &Avanti - + &Quit &Chiudi - + Load &XSPF... - + U&pdate Collection - + Fully &Rescan Collection - + Show Offline Sources - + &Configure Tomahawk... - + Minimize - + Zoom - + Hide Menu Bar - + Diagnostics... - + About &Tomahawk... - + &Legal Information... - + Check For Updates... - + &Controls - + &Settings - + &Help - + &Window - + Main Menu @@ -295,7 +295,7 @@ connect and stream from you? Ci dispiace, ma non abbiamo trovato nessuna traccia di questo album! - + Other Albums by %1 Altri album di %1 @@ -322,42 +322,44 @@ connect and stream from you? Corpo - + Top Hits Top Hits - + Related Artists Artisti simili - + + Artist - + Albums Album - + + Cover Copertina - + Sorry, we could not find any albums for this artist! Ci dispiace, ma non abbiamo trovato nessun album di questo artista! - + Sorry, we could not find any related artists! Siamo spiacenti, non è stato possibile trovare artisti simili! - + Sorry, we could not find any top hits for this artist! Ci dispiace, ma non abbiamo trovato alcun risultato top per l'artista! @@ -421,13 +423,13 @@ connect and stream from you? - + Shuffle Riproduzione casuale - + Repeat Ripeti @@ -442,27 +444,27 @@ connect and stream from you? Alto - + Time Elapsed - + Time Remaining - + Playing from %1 - + Share - + Love @@ -488,24 +490,24 @@ connect and stream from you? CategoryAddItem - + Create new Playlist Crea una playlist nuova - + Create new Station Crea una nuova stazione - - + + New Station Nuova stazione - - + + %1 Station %1 stazione @@ -513,12 +515,12 @@ connect and stream from you? CategoryItem - + Playlists Playlist - + Stations Stazioni @@ -651,97 +653,97 @@ connect and stream from you? EchonestSteerer - + Steer this station: - + Much less - + Less - + A bit less - + Keep at current - + A bit more - + More - + Much more - + Tempo - + Loudness - + Danceability - + Energy - + Song Hotttnesss - + Artist Hotttnesss - + Artist Familiarity - + By Description - + Enter a description - + Apply steering command - + Reset all steering commands @@ -757,12 +759,12 @@ connect and stream from you? FlexibleView - + This playlist is currently empty. - + This playlist is currently empty. Add some tracks to it and enjoy the music! @@ -778,7 +780,7 @@ connect and stream from you? IndexingJobItem - + Indexing database Aggiornando collezione @@ -845,7 +847,7 @@ connect and stream from you? LatchedStatusItem - + %1 is listening along with you! @@ -907,32 +909,32 @@ connect and stream from you? LovedTracksItem - + Top Loved Tracks - + Sorry, we could not find any loved tracks! - + The most loved tracks from all your friends - + All of your loved tracks - + All of %1's loved tracks - + Loved Tracks @@ -1045,7 +1047,7 @@ connect and stream from you? - + Properties @@ -1171,20 +1173,30 @@ connect and stream from you? PlaylistLargeItemDelegate - + played %1 by you ascoltata %1 da te - + played %1 by %2 ascoltata %1 da %2 - + added %1 %1 aggiunte + + + by <b>%1</b> + + + + + by <b>%1</b> on <b>%2</b> + + PlaylistModel @@ -1251,12 +1263,12 @@ connect and stream from you? PlaylistView - + This playlist is currently empty. Questa playlist è vuota. - + This playlist is currently empty. Add some tracks to it and enjoy the music! Questa playlist è vuota. Aggiungi qualche canzone! @@ -1480,12 +1492,12 @@ connect and stream from you? SettingsDialog - + Collection Collezione - + Advanced Avanzate @@ -1495,12 +1507,12 @@ connect and stream from you? Tutte - + Some changed settings will not take effect until Tomahawk is restarted Alcune modifiche non avranno effetto fino al riavvio di Tomahawk - + Services Servizi @@ -1510,37 +1522,37 @@ connect and stream from you? - + Configure the accounts and services used by Tomahawk to search and retrieve music, find your friends and update your status. - + Manage how Tomahawk finds music on your computer. - + Configure Tomahawk's advanced settings, including network connectivity settings, browser interaction and more. - + Install resolver from file Installa i resolver da file - + Delete all Access Control entries? Cancellare tutte le voci di controllo di accesso? - + Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to. - + Information Informazione @@ -1736,22 +1748,22 @@ connect and stream from you? TextLabel - + Tweet Tweetta - + Listening to "%1" by %2. %3 Ascoltando "%1" by %2. %3 - + Listening to "%1" by %2 on "%3". %4 Ascoltando "%1" di %2. %3".%4 - + %1 characters left %1 caratteri rimanenti @@ -1784,19 +1796,19 @@ connect and stream from you? Top 10 - + All available tracks Tutte le tracce disponibili - - + + Show Mostra - - + + Hide Nascondi @@ -1843,7 +1855,7 @@ connect and stream from you? - + Latest Additions Ultime aggiunte @@ -1853,42 +1865,42 @@ connect and stream from you? Ascoltate di recente - + SuperCollection Supercollezione - + Latest additions to your collection Ultime aggiunte alla tua collezione - + Latest additions to %1's collection Ultime aggiunte alla collezione di %1 - + Sorry, we could not find any recent additions! Spiacente, non abbiamo trovato nessuna aggiunta recente! - + Recently Played Tracks Tracce ascoltate di recente - + Your recently played tracks Tracce da te ascoltate di recente - + %1's recently played tracks Tracce ascoltate di recente da %1 - + Sorry, we could not find any recent plays! Spiacente, non è stato possibile trovare ascolti recenti! @@ -2104,17 +2116,17 @@ connect and stream from you? TemporaryPageItem - + Copy Artist Link Copia link artista - + Copy Album Link Copia link album - + Copy Track Link Copia link traccia @@ -2122,32 +2134,32 @@ connect and stream from you? Tomahawk::Accounts::AccountDelegate - + Add Account Aggiungi account - + Remove Rimuovi - + %1 downloads %1 download - + Online In linea - + Connecting... In collegamento... - + Offline Sconnesso @@ -2217,7 +2229,7 @@ connect and stream from you? Tomahawk::Accounts::LastFmAccountFactory - + Scrobble your tracks to last.fm, and find freely downloadable tracks to play Scrobbla le tue canzoni su last.fm, e trova musica gratuita da scaricare @@ -2520,83 +2532,82 @@ You may wish to try re-authenticating. Tomahawk::ContextMenu - + &Play &Play - - - + + + Add to &Queue Aggiungi alla &coda - + Continue Playback after this &Track - + Stop Playback after this &Track - - + + &Love &Love - + + + + &Go to "%1" + + + + + + + Go to "%1" + + + + &Copy Track Link &Copia link della traccia - + Copy Album &Link - + Copy Artist &Link - + Un-&Love Un-&love - + &Delete Items &Cancella tracce - - &Show Track Page - &Mostra pagina della traccia - - - + Properties... - + &Delete Item &Cancella traccia - - - &Show Album Page - &Mostra pagine dell'album - - - - &Show Artist Page - &Mostra pagina dell'artista - Tomahawk::DropJobNotifier @@ -2689,7 +2700,7 @@ Please change the filters or try again. Tomahawk::DynamicWidget - + Station ran out of tracks! Try tweaking the filters for a new set of songs to play. @@ -3045,27 +3056,27 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks Top Tracks - + Loved Tracks Tracce amate - + Hyped Tracks - + Top Artists - + Hyped Artists @@ -3199,7 +3210,7 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::ShortenedLinkParser - + Network error parsing shortened link! Errore di rete nell'analizzare il link accorciato! @@ -3473,178 +3484,178 @@ enter the displayed PIN number here: Prossima - + Back Indietro - + Go back one page Vai indietro di una pagina - + Forward Avanti - + Go forward one page Vai avanti di una pagina - + Global Search... Ricerca globale... - - + + Hide Menu Bar - - + + Show Menu Bar - + &Main Menu - - - + + + Connect To Peer Connettiti al peer - + Enter peer address: Inserisci indirizzo peer: - + Enter peer port: Inserisci porta peer: - + Enter peer key: Inserisce chiave peer: - + XSPF Error Errore XSPF - + This is not a valid XSPF playlist. Questa non è una valida playlist XSPF. - + Failed to save tracks Errore nel salvare le tracce - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. Alcune tracce nella playlist non contengono l'artista e il titolo. Verrano ignorate. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. Spiacente, c'è un problema nell'accedere al tuo dispositivo audio o alla traccia desiderata, questa traccia verrà saltata. Assicurati di avere le giuste librerie Phonon e i plugin necessari installati. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Spiacente, c'è un problema nell'accedere al tuo dispositivo audio o alla traccia desiderata, questa traccia verrà saltata. - + Station Stazione - + Create New Station Crea una nuova stazione - + Name: Nome: - + Playlist Playlist - + Automatic Playlist Playlist automatica - + Pause Pausa - + &Play - + Authentication Error Errore nell'autenticazione - + Error connecting to SIP: Authentication failed! Errore di connessione al SIP: autenticazione fallita! - + %1 by %2 track, artist name %1 di %2 - + %1 - %2 current track, some window title %1 - %2 - + <h2><b>Tomahawk %1<br/>(%2)</h2> <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012 Copyright 2010 - 2012 - + Thanks to: Grazie a: - + About Tomahawk Info su Tomahawk @@ -3700,27 +3711,27 @@ enter the displayed PIN number here: Ci dispiace, ma non abbiamo trovato tracce simili per questa canzone! - + You've listened to this track %n time(s). Hai ascoltato questa traccia una volta.Hai ascoltato questa traccia %n volte. - + You've never listened to this track before. Non hai mai ascoltato questa traccia. - + You first listened to it on %1. L'hai ascoltata la prima volta su %1. - + You've listened to %1 %n time(s). Hai ascoltato %1 una volta.Hai ascoltato %1 %n volte. - + You've never listened to %1 before. Non hai mai ascoltato %1. @@ -3736,13 +3747,13 @@ enter the displayed PIN number here: TransferStatusItem - + from streaming artist - track from friend - + to streaming artist - track to friend @@ -3751,7 +3762,7 @@ enter the displayed PIN number here: TreeItemDelegate - + Unknown Sconosciuto @@ -3921,17 +3932,17 @@ You can re-send a sync message at any time simply by sending another tweet using Tracce recentemente ascoltate - + Recently played tracks - + No recently created playlists in your network. Nessuna playlist creata di recente nel tuo network. - + Welcome to Tomahawk Benvenuto in Tomahawk diff --git a/lang/tomahawk_ja.ts b/lang/tomahawk_ja.ts index 09740abac..263e57848 100644 --- a/lang/tomahawk_ja.ts +++ b/lang/tomahawk_ja.ts @@ -47,17 +47,17 @@ connect and stream from you? AccountFactoryWrapperDelegate - + Online オンライン - + Connecting... 接続中... - + Offline オフライン @@ -65,18 +65,18 @@ connect and stream from you? AccountListWidget - + Connections コネクション - - + + Connect &All 全部を接続する - + Disconnect &All 全ての接続を切る @@ -100,154 +100,154 @@ connect and stream from you? ActionCollection - + &Listen Along 共有聴取 - + Stop &Listening Along 共有聴取を中止 - + &Follow in real-time 実時間にフォロー - - + + &Listen Privately 非公開で聴く - - + + &Listen Publicly 公開で聴く - + &Load Playlist プレイリストを読み込み - + &Rename Playlist プレイリスト名を変更 - + &Copy Playlist Link プレイリストリンクをコピー - + &Play 再生 - + &Stop 停止 - + &Previous Track 前のトラック - + &Next Track 次のトラック - + &Quit 終了 - + Load &XSPF... XSPFを読み込み... - + U&pdate Collection コレクションを更新 - + Fully &Rescan Collection すべてのコレクションを再スキャンする - + Show Offline Sources オフラインのソースを表示 - + &Configure Tomahawk... Tomahawkを設定... - + Minimize 最小化 - + Zoom ズーム - + Hide Menu Bar メニューバーを隠す - + Diagnostics... 診断... - + About &Tomahawk... Tomahawk について... - + &Legal Information... 法定情報... - + Check For Updates... 更新を確認... - + &Controls 制御 - + &Settings 設定 - + &Help ヘルプ - + &Window ウインドウ - + Main Menu メインメニュー @@ -295,7 +295,7 @@ connect and stream from you? このアルバムの曲は見つかりませんでした。 - + Other Albums by %1 %1の他のアルバム @@ -322,42 +322,44 @@ connect and stream from you? フォーム - + Top Hits 大ヒット曲 - + Related Artists 似たアーティスト - + + Artist アーティスト - + Albums アルバム - + + Cover カバー - + Sorry, we could not find any albums for this artist! このアーティストのアルバムは見つかりませんでした。 - + Sorry, we could not find any related artists! 関連アーティストは見つかりませんでした。 - + Sorry, we could not find any top hits for this artist! このアーティストの大ヒット曲は見つかりませんでした。 @@ -421,13 +423,13 @@ connect and stream from you? - + Shuffle シャッフル - + Repeat リピート @@ -442,27 +444,27 @@ connect and stream from you? - + Time Elapsed 再生時間 - + Time Remaining 残り時間 - + Playing from %1 %1から再生中 - + Share シェアー - + Love Love @@ -488,24 +490,24 @@ connect and stream from you? CategoryAddItem - + Create new Playlist 新規プレイリストを作成 - + Create new Station 新規ステーションを作成 - - + + New Station 新規ステーション - - + + %1 Station %1 ステーション @@ -513,12 +515,12 @@ connect and stream from you? CategoryItem - + Playlists プレイリスト - + Stations ステーション @@ -652,97 +654,97 @@ connect and stream from you? EchonestSteerer - + Steer this station: - + Much less - + Less - + A bit less - + Keep at current - + A bit more - + More - + Much more - + Tempo - + Loudness - + Danceability - + Energy - + Song Hotttnesss - + Artist Hotttnesss - + Artist Familiarity - + By Description - + Enter a description - + Apply steering command - + Reset all steering commands @@ -758,12 +760,12 @@ connect and stream from you? FlexibleView - + This playlist is currently empty. - + This playlist is currently empty. Add some tracks to it and enjoy the music! @@ -779,7 +781,7 @@ connect and stream from you? IndexingJobItem - + Indexing database データベースのインデックスを作成中 @@ -846,7 +848,7 @@ connect and stream from you? LatchedStatusItem - + %1 is listening along with you! %1さんが一緒に聴いています。 @@ -908,32 +910,32 @@ connect and stream from you? LovedTracksItem - + Top Loved Tracks 最もLove トラック - + Sorry, we could not find any loved tracks! Love トラックが見つかりませんでした。 - + The most loved tracks from all your friends 友達の最もLove トラック - + All of your loved tracks 自分のLove トラック - + All of %1's loved tracks %1さんのLove トラック - + Loved Tracks Love トラック @@ -1046,7 +1048,7 @@ connect and stream from you? 次へ - + Properties @@ -1172,20 +1174,30 @@ connect and stream from you? PlaylistLargeItemDelegate - + played %1 by you %1を再生しました。 - + played %1 by %2 %2が%1を再生しました。 - + added %1 %1を追加しました。 + + + by <b>%1</b> + + + + + by <b>%1</b> on <b>%2</b> + + PlaylistModel @@ -1252,12 +1264,12 @@ connect and stream from you? PlaylistView - + This playlist is currently empty. このプレイリストには何も入っていません。 - + This playlist is currently empty. Add some tracks to it and enjoy the music! プレイリストには何も入っていません。トラックを追加して、音楽を楽しみましょう! @@ -1482,12 +1494,12 @@ connect and stream from you? SettingsDialog - + Collection コレクション - + Advanced 詳細 @@ -1497,12 +1509,12 @@ connect and stream from you? すべて - + Some changed settings will not take effect until Tomahawk is restarted Tomahawkを再起動すると設定変更が反映されます - + Services サービス @@ -1512,37 +1524,37 @@ connect and stream from you? ファイルからインストールする - + Configure the accounts and services used by Tomahawk to search and retrieve music, find your friends and update your status. 友達を探すこと、又はステータスの更新や音楽の検索と取得の為に利用するアカウントとサービスを設定。 - + Manage how Tomahawk finds music on your computer. 音楽ファイルの検索方法を設定 - + Configure Tomahawk's advanced settings, including network connectivity settings, browser interaction and more. ネットワーク接続設定、又はブラウザー設定等の詳細設定を調整する。 - + Install resolver from file ファイルからリゾルバをインストールする - + Delete all Access Control entries? 全てのアクセス制御のエントリーを削除しますか? - + Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to. 本当に全てのアクセス制御のエントリーを削除しますか?ピア接続に対して、改めて同意を求めます。 - + Information 情報 @@ -1741,22 +1753,22 @@ connect and stream from you? TextLabel - + Tweet ツイート - + Listening to "%1" by %2. %3 %2の"%1"を聴いています。%3 - + Listening to "%1" by %2 on "%3". %4 %2の"%3"の"%1"を聴いています。%4 - + %1 characters left 残り%1文字 @@ -1789,19 +1801,19 @@ connect and stream from you? トップ10 - + All available tracks 利用可能トラック - - + + Show 表示 - - + + Hide 隠す @@ -1848,7 +1860,7 @@ connect and stream from you? - + Latest Additions 最新追加した項目 @@ -1858,42 +1870,42 @@ connect and stream from you? 最近聴いたトラック - + SuperCollection スーパーコレクション - + Latest additions to your collection コレクションの最新追加した項目 - + Latest additions to %1's collection %1のコレクションの最新追加した項目 - + Sorry, we could not find any recent additions! 最近追加した項目が見つかりませんでした。 - + Recently Played Tracks 最近再生したトラック - + Your recently played tracks あなたの最近再生したトラック - + %1's recently played tracks %1の最近再生したトラック - + Sorry, we could not find any recent plays! 最近の再生した項目が見つかりませんでした。 @@ -2109,17 +2121,17 @@ connect and stream from you? TemporaryPageItem - + Copy Artist Link アーティストリンクをコピー - + Copy Album Link アルバムリンクをコピー - + Copy Track Link トラックリンクをコピー @@ -2127,32 +2139,32 @@ connect and stream from you? Tomahawk::Accounts::AccountDelegate - + Add Account アカウントを追加 - + Remove 削除 - + %1 downloads %1ダウンロード - + Online オンライン - + Connecting... 接続中... - + Offline ・オフライン @@ -2222,7 +2234,7 @@ connect and stream from you? Tomahawk::Accounts::LastFmAccountFactory - + Scrobble your tracks to last.fm, and find freely downloadable tracks to play Last.fmにトラックをscrobbleして、無料ダウンロードのトラックを探して再生する @@ -2528,83 +2540,82 @@ You may wish to try re-authenticating. Tomahawk::ContextMenu - + &Play 再生 - - - + + + Add to &Queue キューに追加 - + Continue Playback after this &Track このトラックの再生後、再生を続く - + Stop Playback after this &Track このトラックの再生後、再生を停止する - - + + &Love &Love - + + + + &Go to "%1" + + + + + + + Go to "%1" + + + + &Copy Track Link トラックリンクをコピー - + Copy Album &Link アルバムリンクをコピー - + Copy Artist &Link アーティストリンクをコピー - + Un-&Love Loveじゃないトラック - + &Delete Items 項目を削除 - - &Show Track Page - トラックページを表示 - - - + Properties... 情報... - + &Delete Item 項目を削除 - - - &Show Album Page - アルバムページを表示 - - - - &Show Artist Page - アーティストページを表示 - Tomahawk::DropJobNotifier @@ -2699,7 +2710,7 @@ Please change the filters or try again. Tomahawk::DynamicWidget - + Station ran out of tracks! Try tweaking the filters for a new set of songs to play. @@ -3057,27 +3068,27 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks トップトラック - + Loved Tracks Love トラック - + Hyped Tracks ハイプトラック - + Top Artists トップアーティスト - + Hyped Artists ハイプアーティスト @@ -3211,7 +3222,7 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::ShortenedLinkParser - + Network error parsing shortened link! 短縮リンクの解析中にネットワークエラーが発生しました! @@ -3487,178 +3498,178 @@ Meta+Ctrl+Z 次へ - + Back プレイリスト - + Go back one page 前のページ - + Forward 次へ - + Go forward one page 次のページ - + Global Search... グローバルサーチ... - - + + Hide Menu Bar メニューバーを隠す - - + + Show Menu Bar メニューバーを表示 - + &Main Menu メインメニュー - - - + + + Connect To Peer ピアに接続する - + Enter peer address: ピアのアドレスを入力: - + Enter peer port: ピアのポートを入力: - + Enter peer key: ピアのキーを入力: - + XSPF Error XSPFエラー - + This is not a valid XSPF playlist. このプレイリストは有利なXSPFプレイリストではありません。 - + Failed to save tracks トラックの保存に失敗しました。 - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. プレイリストにアーティストもタイトルの無いトラックが見つかりました。この項目は無視されます。 - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. オーディオデバイス、又は要求トラックをアクセスすることができませんでしたので、このトラックは無視されます。適しているPhononのバックエンドを確認の上、必須プラグインのインストールを確認して下さい。 - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. オーディオデバイス、又は要求トラックをアクセスすることができませんでしたので、このトラックは無視されます。 - + Station ステーション - + Create New Station 新規ステーションを作成 - + Name: 名前: - + Playlist プレイリスト - + Automatic Playlist 自動プレイリスト - + Pause 一時停止 - + &Play 再生 - + Authentication Error 認証エラー - + Error connecting to SIP: Authentication failed! SIPへの接続エラー: 認証が失敗しました! - + %1 by %2 track, artist name %1 by %2 - + %1 - %2 current track, some window title %1 - %2 - + <h2><b>Tomahawk %1<br/>(%2)</h2> <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012 Copyright 2010 - 2012 - + Thanks to: Thanks to: - + About Tomahawk Tomahawkについて @@ -3714,27 +3725,27 @@ Meta+Ctrl+Z この曲に似ているトラックが見つかりませんでした。 - + You've listened to this track %n time(s). このトラックは%n回聴いています。 - + You've never listened to this track before. このトラックを一度も聴いていません。 - + You first listened to it on %1. 初めてこの曲を聴いたのは、%1です。 - + You've listened to %1 %n time(s). %1を%n回聴いています。 - + You've never listened to %1 before. %1を一度も聴いていません。 @@ -3750,13 +3761,13 @@ Meta+Ctrl+Z TransferStatusItem - + from streaming artist - track from friend から - + to streaming artist - track to friend @@ -3765,7 +3776,7 @@ Meta+Ctrl+Z TreeItemDelegate - + Unknown 不明 @@ -3940,17 +3951,17 @@ Twitterを使っている友達にTomahawkを接続したいなら、ツイー 最近再生したトラック - + Recently played tracks 最近再生したトラック - + No recently created playlists in your network. ネットワークに最近作成したプレイリストはありません。 - + Welcome to Tomahawk Tomahawkへようこそ diff --git a/lang/tomahawk_lt.ts b/lang/tomahawk_lt.ts index 713e67ec4..f9d0c92f2 100644 --- a/lang/tomahawk_lt.ts +++ b/lang/tomahawk_lt.ts @@ -47,17 +47,17 @@ connect and stream from you? AccountFactoryWrapperDelegate - + Online Prisijungęs - + Connecting... Jungiamasi... - + Offline Atsijungęs @@ -65,18 +65,18 @@ connect and stream from you? AccountListWidget - + Connections - - + + Connect &All - + Disconnect &All @@ -100,154 +100,154 @@ connect and stream from you? ActionCollection - + &Listen Along K&lausytis kartu - + Stop &Listening Along Stabdyti k&lausymąsi kartu - + &Follow in real-time Se&kti realiu laiku - - + + &Listen Privately K&lausytis privačiai - - + + &Listen Publicly K&lausytis viešai - + &Load Playlist Įke&lti grojaraštį - + &Rename Playlist Per&vadinti grojaraštį - + &Copy Playlist Link &Kopijuoti grojaraščio nuorodą - + &Play &Groti - + &Stop &Sustabdyti - + &Previous Track Ankstesnis takelis - + &Next Track Kitas takelis - + &Quit &Baigti darbą - + Load &XSPF... - + U&pdate Collection - + Fully &Rescan Collection - + Show Offline Sources - + &Configure Tomahawk... - + Minimize - + Zoom - + Hide Menu Bar - + Diagnostics... - + About &Tomahawk... - + &Legal Information... - + Check For Updates... - + &Controls - + &Settings - + &Help - + &Window - + Main Menu @@ -295,7 +295,7 @@ connect and stream from you? Atsiprašome, neradome jokių takelių iš šio albumo! - + Other Albums by %1 Kiti %1 albumai @@ -322,42 +322,44 @@ connect and stream from you? Forma - + Top Hits - + Related Artists Susiję atlikėjai - + + Artist Atlikėjas - + Albums Albumai - + + Cover Viršelis - + Sorry, we could not find any albums for this artist! Atsiprašome, neradome jokių šio atlikėjo albumų! - + Sorry, we could not find any related artists! Atsiprašome, neradome jokių susijusių atlikėjų! - + Sorry, we could not find any top hits for this artist! @@ -421,13 +423,13 @@ connect and stream from you? - + Shuffle Maišyti - + Repeat Kartoti @@ -442,27 +444,27 @@ connect and stream from you? - + Time Elapsed - + Time Remaining - + Playing from %1 - + Share - + Love @@ -488,24 +490,24 @@ connect and stream from you? CategoryAddItem - + Create new Playlist Sukurti naują grojaraštį - + Create new Station Sukurti naują stotį - - + + New Station Nauja stotis - - + + %1 Station @@ -513,12 +515,12 @@ connect and stream from you? CategoryItem - + Playlists Grojaraščiai - + Stations Stotys @@ -651,97 +653,97 @@ connect and stream from you? EchonestSteerer - + Steer this station: - + Much less - + Less - + A bit less - + Keep at current - + A bit more - + More - + Much more - + Tempo - + Loudness - + Danceability - + Energy - + Song Hotttnesss - + Artist Hotttnesss - + Artist Familiarity - + By Description - + Enter a description - + Apply steering command - + Reset all steering commands @@ -757,12 +759,12 @@ connect and stream from you? FlexibleView - + This playlist is currently empty. - + This playlist is currently empty. Add some tracks to it and enjoy the music! @@ -778,7 +780,7 @@ connect and stream from you? IndexingJobItem - + Indexing database @@ -845,7 +847,7 @@ connect and stream from you? LatchedStatusItem - + %1 is listening along with you! %1 klausosi kartu su Jumis! @@ -907,32 +909,32 @@ connect and stream from you? LovedTracksItem - + Top Loved Tracks Populiariausios mylimos dainos - + Sorry, we could not find any loved tracks! Deja, neradome jokių mylimų dainų! - + The most loved tracks from all your friends Visų Jūsų draugų labiausiai mylimos dainos - + All of your loved tracks Visos Jūsų mylimos dainos - + All of %1's loved tracks Visos %1 mylimos dainos - + Loved Tracks Mylimos dainos @@ -1045,7 +1047,7 @@ connect and stream from you? Pirmyn - + Properties @@ -1171,20 +1173,30 @@ connect and stream from you? PlaylistLargeItemDelegate - + played %1 by you - + played %1 by %2 - + added %1 + + + by <b>%1</b> + + + + + by <b>%1</b> on <b>%2</b> + + PlaylistModel @@ -1251,12 +1263,12 @@ connect and stream from you? PlaylistView - + This playlist is currently empty. Šis grojaraštis kol kas tuščias. - + This playlist is currently empty. Add some tracks to it and enjoy the music! Šis grojaraštis kol kas tuščias. Pridėkite takelių ir mėgaukitės muzika! @@ -1480,12 +1492,12 @@ connect and stream from you? SettingsDialog - + Collection Kolekcija - + Advanced Išplėstinės @@ -1495,12 +1507,12 @@ connect and stream from you? Visi - + Some changed settings will not take effect until Tomahawk is restarted - + Services Paslaugos @@ -1510,37 +1522,37 @@ connect and stream from you? - + Configure the accounts and services used by Tomahawk to search and retrieve music, find your friends and update your status. - + Manage how Tomahawk finds music on your computer. - + Configure Tomahawk's advanced settings, including network connectivity settings, browser interaction and more. - + Install resolver from file - + Delete all Access Control entries? - + Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to. - + Information Informacija @@ -1736,22 +1748,22 @@ connect and stream from you? Teksto etiketė - + Tweet - + Listening to "%1" by %2. %3 Klausosi "%1", atliekamą %2. %3 - + Listening to "%1" by %2 on "%3". %4 Klausosi "%1", atliekamą %2 iš albumo "%3". %4 - + %1 characters left Liko simbolių: %1 @@ -1784,19 +1796,19 @@ connect and stream from you? Top 10 - + All available tracks Visi prieinami takeliai - - + + Show Rodyti - - + + Hide Slėpti @@ -1843,7 +1855,7 @@ connect and stream from you? - + Latest Additions Neseniai pridėta @@ -1853,42 +1865,42 @@ connect and stream from you? Neseniai grota - + SuperCollection Super Kolekcija - + Latest additions to your collection Neseniai pridėta prie Jūsų kolekcijos - + Latest additions to %1's collection Neseniai pridėta prie %1 kolekcijos - + Sorry, we could not find any recent additions! Atsiprašome, neradome nieko, kas pridėta neseniai! - + Recently Played Tracks Neseniai groti takeliai - + Your recently played tracks Jūsų neseniai groti takeliai - + %1's recently played tracks %1 neseniai groti takeliai - + Sorry, we could not find any recent plays! Atsiprašome, neradome jokių neseniai grotų takelių! @@ -2104,17 +2116,17 @@ connect and stream from you? TemporaryPageItem - + Copy Artist Link Kopijuoti atlikėjo nuorodą - + Copy Album Link Kopijuoti albumo nuorodą - + Copy Track Link Kopijuoti takelio nuorodą @@ -2122,32 +2134,32 @@ connect and stream from you? Tomahawk::Accounts::AccountDelegate - + Add Account Pridėti paskyrą - + Remove Pašalinti - + %1 downloads %1 atsisiuntimų - + Online Prisijungęs - + Connecting... Jungiamasi... - + Offline Atsijungęs @@ -2217,7 +2229,7 @@ connect and stream from you? Tomahawk::Accounts::LastFmAccountFactory - + Scrobble your tracks to last.fm, and find freely downloadable tracks to play @@ -2520,83 +2532,82 @@ You may wish to try re-authenticating. Tomahawk::ContextMenu - + &Play &Groti - - - + + + Add to &Queue Pridėti į &eilę - + Continue Playback after this &Track Tęsti grojimą po šio &takelio - + Stop Playback after this &Track Sustabdyti grojimą po šio &takelio - - + + &Love My&liu - + + + + &Go to "%1" + + + + + + + Go to "%1" + + + + &Copy Track Link &Kopijuoti takelio nuorodą - + Copy Album &Link Kopijuoti albumo &nuorodą - + Copy Artist &Link Kopijuoti atlikėjo &nuorodą - + Un-&Love Nemy&liu - + &Delete Items Iš&trinti elementus - - &Show Track Page - &Rodyti takelio puslapį - - - + Properties... Savybės... - + &Delete Item Iš&trinti elementą - - - &Show Album Page - &Rodyti albumo puslapį - - - - &Show Artist Page - &Rodyti atlikėjo puslapį - Tomahawk::DropJobNotifier @@ -2689,7 +2700,7 @@ Please change the filters or try again. Tomahawk::DynamicWidget - + Station ran out of tracks! Try tweaking the filters for a new set of songs to play. @@ -3045,27 +3056,27 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks Populiariausi takeliai - + Loved Tracks Mylimi takeliai - + Hyped Tracks - + Top Artists Populiariausi atlikėjai - + Hyped Artists @@ -3199,7 +3210,7 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::ShortenedLinkParser - + Network error parsing shortened link! @@ -3473,178 +3484,178 @@ enter the displayed PIN number here: Kitas - + Back Atgal - + Go back one page Grįžti vienu puslapiu atgal - + Forward Pirmyn - + Go forward one page Eiti vienu puslapiu pirmyn - + Global Search... Globali paieška... - - + + Hide Menu Bar - - + + Show Menu Bar - + &Main Menu - - - + + + Connect To Peer - + Enter peer address: - + Enter peer port: - + Enter peer key: - + XSPF Error XSPF klaida - + This is not a valid XSPF playlist. - + Failed to save tracks Nepavyko išsaugoti takelių - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. - + Station Stotis - + Create New Station Sukurti naują stotį - + Name: Pavadinimas: - + Playlist Grojaraštis - + Automatic Playlist Automatinis grojaraštis - + Pause Pristabdyti - + &Play - + Authentication Error - + Error connecting to SIP: Authentication failed! - + %1 by %2 track, artist name - + %1 - %2 current track, some window title - + <h2><b>Tomahawk %1<br/>(%2)</h2> <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012 Autorinės teisės 2010 - 2012 - + Thanks to: Dėkojame: - + About Tomahawk Apie Tomahawk @@ -3700,27 +3711,27 @@ enter the displayed PIN number here: Atsiprašome, neradome jokių į šią dainą panašių takelių! - + You've listened to this track %n time(s). Jūs klausėtės šio takelio %n kartą.Jūs klausėtės šio takelio %n kartus.Jūs klausėtės šio takelio %n kartų. - + You've never listened to this track before. Jūs niekad anksčiau nesiklausėte šio takelio. - + You first listened to it on %1. Pirmąkart klausėtės jo %1. - + You've listened to %1 %n time(s). Jūs klausėtės %1 %n kartą.Jūs klausėtės %1 %n kartus.Jūs klausėtės %1 %n kartų. - + You've never listened to %1 before. Jūs niekada anksčiau nesiklausėte %1. @@ -3736,13 +3747,13 @@ enter the displayed PIN number here: TransferStatusItem - + from streaming artist - track from friend - + to streaming artist - track to friend @@ -3751,7 +3762,7 @@ enter the displayed PIN number here: TreeItemDelegate - + Unknown @@ -3921,17 +3932,17 @@ You can re-send a sync message at any time simply by sending another tweet using Neseniai groti takeliai - + Recently played tracks - + No recently created playlists in your network. Jūsų tinkle nėra neseniai sukurtų grojaraščių. - + Welcome to Tomahawk diff --git a/lang/tomahawk_pl.ts b/lang/tomahawk_pl.ts index 0f1e4f1eb..d1188ff02 100644 --- a/lang/tomahawk_pl.ts +++ b/lang/tomahawk_pl.ts @@ -47,17 +47,17 @@ connect and stream from you? AccountFactoryWrapperDelegate - + Online Online - + Connecting... Łączenie... - + Offline Offline @@ -65,18 +65,18 @@ connect and stream from you? AccountListWidget - + Connections - - + + Connect &All - + Disconnect &All @@ -100,154 +100,154 @@ connect and stream from you? ActionCollection - + &Listen Along &Słuchaj razem - + Stop &Listening Along Przestań &Słuchać razem - + &Follow in real-time &Podążaj na bieżąco - - + + &Listen Privately &Słuchaj Prywatnie - - + + &Listen Publicly &Słuchaj Publicznie - + &Load Playlist &Załaduj listę - + &Rename Playlist &Zmień nazwę listy - + &Copy Playlist Link &Skopiuj link listy - + &Play &Odtwarzaj - + &Stop &Zatrzymaj - + &Previous Track &Poprzednia piosenka - + &Next Track &Następna piosenka - + &Quit &Wyjdź - + Load &XSPF... - + U&pdate Collection - + Fully &Rescan Collection - + Show Offline Sources - + &Configure Tomahawk... - + Minimize - + Zoom - + Hide Menu Bar - + Diagnostics... - + About &Tomahawk... - + &Legal Information... - + Check For Updates... - + &Controls - + &Settings - + &Help - + &Window - + Main Menu @@ -295,7 +295,7 @@ connect and stream from you? - + Other Albums by %1 Inne albumy %1 @@ -322,42 +322,44 @@ connect and stream from you? Formularz - + Top Hits Hity na Topie - + Related Artists Powiązani artyści - + + Artist - + Albums Albumy - + + Cover - + Sorry, we could not find any albums for this artist! - + Sorry, we could not find any related artists! - + Sorry, we could not find any top hits for this artist! @@ -421,13 +423,13 @@ connect and stream from you? - + Shuffle Losowo - + Repeat Powtarzaj @@ -442,27 +444,27 @@ connect and stream from you? Wysoko - + Time Elapsed - + Time Remaining - + Playing from %1 - + Share - + Love @@ -488,24 +490,24 @@ connect and stream from you? CategoryAddItem - + Create new Playlist - + Create new Station - - + + New Station Nowa stacja - - + + %1 Station Stacja %1 @@ -513,12 +515,12 @@ connect and stream from you? CategoryItem - + Playlists Listy - + Stations Stacje @@ -651,97 +653,97 @@ connect and stream from you? EchonestSteerer - + Steer this station: - + Much less - + Less - + A bit less - + Keep at current - + A bit more - + More - + Much more - + Tempo - + Loudness - + Danceability - + Energy - + Song Hotttnesss - + Artist Hotttnesss - + Artist Familiarity - + By Description - + Enter a description - + Apply steering command - + Reset all steering commands @@ -757,12 +759,12 @@ connect and stream from you? FlexibleView - + This playlist is currently empty. - + This playlist is currently empty. Add some tracks to it and enjoy the music! @@ -778,7 +780,7 @@ connect and stream from you? IndexingJobItem - + Indexing database Indeksowanie bazy danych @@ -845,7 +847,7 @@ connect and stream from you? LatchedStatusItem - + %1 is listening along with you! @@ -907,32 +909,32 @@ connect and stream from you? LovedTracksItem - + Top Loved Tracks - + Sorry, we could not find any loved tracks! - + The most loved tracks from all your friends - + All of your loved tracks - + All of %1's loved tracks - + Loved Tracks @@ -1045,7 +1047,7 @@ connect and stream from you? - + Properties @@ -1171,20 +1173,30 @@ connect and stream from you? PlaylistLargeItemDelegate - + played %1 by you odtworzone %1 przez ciebie - + played %1 by %2 - + added %1 dodano %1 + + + by <b>%1</b> + + + + + by <b>%1</b> on <b>%2</b> + + PlaylistModel @@ -1251,12 +1263,12 @@ connect and stream from you? PlaylistView - + This playlist is currently empty. - + This playlist is currently empty. Add some tracks to it and enjoy the music! Ta lista jest aktualnie pusta. Dodaj do niej trochę piosenek i ciesz się muzyką! @@ -1480,12 +1492,12 @@ connect and stream from you? SettingsDialog - + Collection Kolekcje - + Advanced Zaawansowane @@ -1495,12 +1507,12 @@ connect and stream from you? Wszystkie - + Some changed settings will not take effect until Tomahawk is restarted - + Services Usługi @@ -1510,37 +1522,37 @@ connect and stream from you? - + Configure the accounts and services used by Tomahawk to search and retrieve music, find your friends and update your status. - + Manage how Tomahawk finds music on your computer. - + Configure Tomahawk's advanced settings, including network connectivity settings, browser interaction and more. - + Install resolver from file - + Delete all Access Control entries? - + Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to. - + Information Informacja @@ -1736,22 +1748,22 @@ connect and stream from you? - + Tweet - + Listening to "%1" by %2. %3 - + Listening to "%1" by %2 on "%3". %4 - + %1 characters left pozostało znaków: %1 @@ -1784,19 +1796,19 @@ connect and stream from you? Top 10 - + All available tracks Wszystkie dostępne utwory - - + + Show Pokaż - - + + Hide Ukryj @@ -1843,7 +1855,7 @@ connect and stream from you? - + Latest Additions Ostatnio Dodane @@ -1853,42 +1865,42 @@ connect and stream from you? Ostatnio Odtworzone - + SuperCollection Superkolekcja - + Latest additions to your collection - + Latest additions to %1's collection - + Sorry, we could not find any recent additions! - + Recently Played Tracks - + Your recently played tracks - + %1's recently played tracks - + Sorry, we could not find any recent plays! @@ -2104,17 +2116,17 @@ connect and stream from you? TemporaryPageItem - + Copy Artist Link - + Copy Album Link - + Copy Track Link @@ -2122,32 +2134,32 @@ connect and stream from you? Tomahawk::Accounts::AccountDelegate - + Add Account Dodaj Konto - + Remove - + %1 downloads pobrań: %1 - + Online Online - + Connecting... Łączenie... - + Offline Offline @@ -2217,7 +2229,7 @@ connect and stream from you? Tomahawk::Accounts::LastFmAccountFactory - + Scrobble your tracks to last.fm, and find freely downloadable tracks to play @@ -2520,83 +2532,82 @@ You may wish to try re-authenticating. Tomahawk::ContextMenu - + &Play &Odtwarzaj - - - + + + Add to &Queue Dodaj do &kolejki - + Continue Playback after this &Track - + Stop Playback after this &Track - - + + &Love &Uwielbiam - + + + + &Go to "%1" + + + + + + + Go to "%1" + + + + &Copy Track Link - + Copy Album &Link - + Copy Artist &Link - + Un-&Love - + &Delete Items &Usuń pozycje - - &Show Track Page - - - - + Properties... - + &Delete Item &Usuń pozycję - - - &Show Album Page - - - - - &Show Artist Page - - Tomahawk::DropJobNotifier @@ -2691,7 +2702,7 @@ Proszę zmienić filtry lub spróbować ponownie. Tomahawk::DynamicWidget - + Station ran out of tracks! Try tweaking the filters for a new set of songs to play. @@ -3047,27 +3058,27 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks - + Loved Tracks - + Hyped Tracks - + Top Artists - + Hyped Artists @@ -3201,7 +3212,7 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::ShortenedLinkParser - + Network error parsing shortened link! @@ -3476,178 +3487,178 @@ wprowadź pokazany numer PIN tutaj: Następny - + Back - + Go back one page - + Forward - + Go forward one page - + Global Search... Globalne Wyszukiwanie... - - + + Hide Menu Bar - - + + Show Menu Bar - + &Main Menu - - - + + + Connect To Peer - + Enter peer address: - + Enter peer port: - + Enter peer key: - + XSPF Error Błąd XSPF - + This is not a valid XSPF playlist. To nie jest poprawna lista XSPF. - + Failed to save tracks Nie udało się zapisać utworów - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. Niektóre utwory na liście nie zawierają artysty i tytułu. Zostaną one zignorowane. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. - + Station - + Create New Station Utwórz Nową Stację - + Name: Nazwa: - + Playlist - + Automatic Playlist - + Pause Pauza - + &Play - + Authentication Error Błąd uwierzytelniania - + Error connecting to SIP: Authentication failed! - + %1 by %2 track, artist name %1 wykonawcy %2 - + %1 - %2 current track, some window title %1 - %2 - + <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012 - + Thanks to: - + About Tomahawk @@ -3703,27 +3714,27 @@ wprowadź pokazany numer PIN tutaj: - + You've listened to this track %n time(s). - + You've never listened to this track before. - + You first listened to it on %1. - + You've listened to %1 %n time(s). - + You've never listened to %1 before. @@ -3739,13 +3750,13 @@ wprowadź pokazany numer PIN tutaj: TransferStatusItem - + from streaming artist - track from friend - + to streaming artist - track to friend @@ -3754,7 +3765,7 @@ wprowadź pokazany numer PIN tutaj: TreeItemDelegate - + Unknown Nieznany @@ -3929,17 +3940,17 @@ Zawsze możesz ponownie wysłać wiadomość synchronizacyjną - po prostu wyśl Ostatnio Odtworzone Utwory - + Recently played tracks - + No recently created playlists in your network. Brak ostatnio utworzonych list w twojej sieci. - + Welcome to Tomahawk Witaj w Tomahawk diff --git a/lang/tomahawk_pt_BR.ts b/lang/tomahawk_pt_BR.ts index d612397d6..658db041f 100644 --- a/lang/tomahawk_pt_BR.ts +++ b/lang/tomahawk_pt_BR.ts @@ -48,17 +48,17 @@ se conecte e faça o stream de você? AccountFactoryWrapperDelegate - + Online Online - + Connecting... Conectando... - + Offline Offline @@ -66,18 +66,18 @@ se conecte e faça o stream de você? AccountListWidget - + Connections Conexões - - + + Connect &All Conect&ar todos - + Disconnect &All Desconect&ar todos @@ -101,154 +101,154 @@ se conecte e faça o stream de você? ActionCollection - + &Listen Along &Ouça Junto - + Stop &Listening Along Parar de &Ouvir Junto - + &Follow in real-time &Seguir em tempo real - - + + &Listen Privately &Ouvir Privadamente - - + + &Listen Publicly &Ouvir Publicamente - + &Load Playlist &Carregar Playlist - + &Rename Playlist &Renomear Playlist - + &Copy Playlist Link &Copiar link da Playlist - + &Play &Play - + &Stop &Stop - + &Previous Track &Faixa Anterior - + &Next Track &Próxima Faixa - + &Quit &Sair - + Load &XSPF... Carregar &XSPF... - + U&pdate Collection At&ualizar coleção - + Fully &Rescan Collection Varredura completa de coleção - + Show Offline Sources Mostrar fontes offline - + &Configure Tomahawk... &Configurar o Tomahawk... - + Minimize Minimizar - + Zoom Zoom - + Hide Menu Bar Esconder barra de menu - + Diagnostics... Diagnósticos... - + About &Tomahawk... Sobre &Tomahawk... - + &Legal Information... Informação &legal... - + Check For Updates... Verificar atualizações... - + &Controls &Controles - + &Settings C&onfigurações - + &Help &Ajuda - + &Window &Janela - + Main Menu Menu principal @@ -296,7 +296,7 @@ se conecte e faça o stream de você? Desculpe, mas não conseguimos encontrar outras faixas para este álbum! - + Other Albums by %1 Outros álbuns de %1 @@ -323,42 +323,44 @@ se conecte e faça o stream de você? Formulário - + Top Hits Mais Tocadas - + Related Artists Artistas Relacionados - + + Artist Artista - + Albums Álbuns - + + Cover Capa - + Sorry, we could not find any albums for this artist! Desculpe, mas não conseguimos encontrar outros álbuns para este artista! - + Sorry, we could not find any related artists! Desculpe, mas não conseguimos encontrar outros artistas relacionados a este! - + Sorry, we could not find any top hits for this artist! Desculpe, mas não conseguimos encontrar outras faixas mais tocadas deste artista! @@ -422,13 +424,13 @@ se conecte e faça o stream de você? - + Shuffle Shuffle - + Repeat Repetir @@ -443,27 +445,27 @@ se conecte e faça o stream de você? Aumentar - + Time Elapsed Tempo decorrido - + Time Remaining Tempo restante - + Playing from %1 Reproduzindo de %1 - + Share Compartilhar - + Love Gostar @@ -489,24 +491,24 @@ se conecte e faça o stream de você? CategoryAddItem - + Create new Playlist Criar nova Playlist - + Create new Station Criar nova Estação - - + + New Station Nova estação - - + + %1 Station %1 Estação @@ -514,12 +516,12 @@ se conecte e faça o stream de você? CategoryItem - + Playlists Playlists - + Stations Estações @@ -652,97 +654,97 @@ se conecte e faça o stream de você? EchonestSteerer - + Steer this station: - + Much less Muito menos - + Less Menos - + A bit less Um pouco menos - + Keep at current Manter o atual - + A bit more Um pouco mais - + More Mais - + Much more Muito mais - + Tempo - + Loudness - + Danceability - + Energy - + Song Hotttnesss - + Artist Hotttnesss - + Artist Familiarity - + By Description Por descrição - + Enter a description Digite uma descrição - + Apply steering command - + Reset all steering commands @@ -758,12 +760,12 @@ se conecte e faça o stream de você? FlexibleView - + This playlist is currently empty. Esta lista de reprodução está vazia no momento. - + This playlist is currently empty. Add some tracks to it and enjoy the music! Esta lista de reprodução está vazia no momento. Adicione algumas faixas a ela e aproveite a música! @@ -779,7 +781,7 @@ se conecte e faça o stream de você? IndexingJobItem - + Indexing database Indexando banco de dados @@ -846,7 +848,7 @@ se conecte e faça o stream de você? LatchedStatusItem - + %1 is listening along with you! %1 está ouvindo junto com você! @@ -908,32 +910,32 @@ se conecte e faça o stream de você? LovedTracksItem - + Top Loved Tracks Faixas mais favoritas - + Sorry, we could not find any loved tracks! Desculpe, não encontramos nenhuma faixa favorita! - + The most loved tracks from all your friends As faixas mais favoritas de todos os seus amigos - + All of your loved tracks Todas as suas faixas favoritas - + All of %1's loved tracks Todas as faixas favoritas do %1 - + Loved Tracks Faixas favoritas @@ -1046,7 +1048,7 @@ se conecte e faça o stream de você? Avançar - + Properties Propriedades @@ -1172,20 +1174,30 @@ se conecte e faça o stream de você? PlaylistLargeItemDelegate - + played %1 by you tocou %1 por você - + played %1 by %2 tocou %1 por %2 - + added %1 adicionou %1 + + + by <b>%1</b> + + + + + by <b>%1</b> on <b>%2</b> + + PlaylistModel @@ -1252,12 +1264,12 @@ se conecte e faça o stream de você? PlaylistView - + This playlist is currently empty. Esta playlist esta atualmente vazia. - + This playlist is currently empty. Add some tracks to it and enjoy the music! Esta playlist está vazia. Adicione algumas faixas a ela e aprecie a música! @@ -1482,12 +1494,12 @@ se conecte e faça o stream de você? SettingsDialog - + Collection Coleção - + Advanced Avançado @@ -1497,12 +1509,12 @@ se conecte e faça o stream de você? Todos - + Some changed settings will not take effect until Tomahawk is restarted Algumas configurações não terão efeito até que o Tomahawk seja reiniciado - + Services Serviços @@ -1512,37 +1524,37 @@ se conecte e faça o stream de você? Instalar do arquivo - + Configure the accounts and services used by Tomahawk to search and retrieve music, find your friends and update your status. Configure as contas e serviços usados pelo Tomahawk para pesquisar e obter músicas, encontrar seus amigos e atualizar seu status. - + Manage how Tomahawk finds music on your computer. Gerenciar como o Tomahawk encontra música no seu computador - + Configure Tomahawk's advanced settings, including network connectivity settings, browser interaction and more. Configure as configurações avançadas do Tomahawk, incluindo as configurações de conectividade de rede, interação com o navegador e mais. - + Install resolver from file Instalar resolvedor via arquivo - + Delete all Access Control entries? Excluir todas as entradas de controle de acesso? - + Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to. Você realmente quer apagar todas as entradas de controle de acesso? Você será solicitado a tomar uma decisão para cada ponto a que você se conectar. - + Information Informação @@ -1738,22 +1750,22 @@ se conecte e faça o stream de você? TextLabel - + Tweet Tweet - + Listening to "%1" by %2. %3 Ouvindo "%1" de %2. %3 - + Listening to "%1" by %2 on "%3". %4 Ouvindo "%1" de %2 em "%3". %4 - + %1 characters left %1 caracteres restantes @@ -1786,19 +1798,19 @@ se conecte e faça o stream de você? 10 Mais - + All available tracks Todas as faixas disponíveis - - + + Show Mostrar - - + + Hide Ocultar @@ -1845,7 +1857,7 @@ se conecte e faça o stream de você? - + Latest Additions Últimas Adições @@ -1855,42 +1867,42 @@ se conecte e faça o stream de você? Ouvidas Recentemente - + SuperCollection SuperColeção - + Latest additions to your collection Últimas adições à sua coleção - + Latest additions to %1's collection Últimas adições à coleção de %1 - + Sorry, we could not find any recent additions! Desculpe, não foi possível encontrar adições recentes! - + Recently Played Tracks Faixas Reproduzidas Recentemente - + Your recently played tracks Suas faixas reproduzidas recentemente - + %1's recently played tracks Faixas reproduzidas recentemente por %1 - + Sorry, we could not find any recent plays! Desculpe, não foi possível encontrar playlists recentes! @@ -2106,17 +2118,17 @@ se conecte e faça o stream de você? TemporaryPageItem - + Copy Artist Link Copiar Link do Artista - + Copy Album Link Copiar Link do Álbum - + Copy Track Link Copiar Link da Faixa @@ -2124,32 +2136,32 @@ se conecte e faça o stream de você? Tomahawk::Accounts::AccountDelegate - + Add Account Adicionar Conta - + Remove Remover - + %1 downloads %1 downloads - + Online Online - + Connecting... Conectando... - + Offline Offline @@ -2219,7 +2231,7 @@ se conecte e faça o stream de você? Tomahawk::Accounts::LastFmAccountFactory - + Scrobble your tracks to last.fm, and find freely downloadable tracks to play Faça o scrobble para o last.fm e encontre faixas gratuitas para reproduzir @@ -2525,83 +2537,82 @@ Você pode tentar re-autenticar. Tomahawk::ContextMenu - + &Play &Play - - - + + + Add to &Queue Adicionar à &lista - + Continue Playback after this &Track Continuar a reprodução após esta &Faixa - + Stop Playback after this &Track Parar a reprodução após esta &Faixa - - + + &Love &Favorita - + + + + &Go to "%1" + + + + + + + Go to "%1" + + + + &Copy Track Link &Copiar Link da Faixa - + Copy Album &Link Copiar &Link do Álbum - + Copy Artist &Link Copiar &Link do Artista - + Un-&Love &Desfavoritar - + &Delete Items &Deletar itens - - &Show Track Page - &Mostrar Página da Faixa - - - + Properties... Propriedades... - + &Delete Item &Deletar item - - - &Show Album Page - &Mostrar Página do Álbum - - - - &Show Artist Page - &Mostrar Página do Artista - Tomahawk::DropJobNotifier @@ -2696,7 +2707,7 @@ Por favor, mude os filtros ou tente novamente. Tomahawk::DynamicWidget - + Station ran out of tracks! Try tweaking the filters for a new set of songs to play. @@ -3054,27 +3065,27 @@ Tente ajustar os filtros para ouvir um novo conjunto de músicas. Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks Faixas Mais Tocadas - + Loved Tracks Faixas favoritas - + Hyped Tracks Faixas Mais Populares - + Top Artists Artistas Mais Tocados - + Hyped Artists Artistas Mais Populares @@ -3208,7 +3219,7 @@ Tente ajustar os filtros para ouvir um novo conjunto de músicas. Tomahawk::ShortenedLinkParser - + Network error parsing shortened link! Erro de rede ao analisar o encurtador de link! @@ -3483,178 +3494,178 @@ colocar o número PIN mostrado aqui: Próximo - + Back Voltar - + Go back one page Voltar uma página - + Forward Avançar - + Go forward one page Avançar uma página - + Global Search... Busca global... - - + + Hide Menu Bar Esconder barra de menu - - + + Show Menu Bar Mostrar barra de menu - + &Main Menu &Menu principal - - - + + + Connect To Peer Conectar-se ao par - + Enter peer address: Coloque o endereço do par: - + Enter peer port: Coloque a porta do par: - + Enter peer key: Coloque a chave do par: - + XSPF Error Erro de XSPF - + This is not a valid XSPF playlist. Esta não é uma lista de reprodução XSPF válida. - + Failed to save tracks Falha ao salvar faixas - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. Algumas faixas da lista de reprodução não contem artista e título. Estas serão ignoradas. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. Desculpe, há um problema ao acessar sua placa de áudio ou a faixa desejada, a faixa atual será ignorada. Certifique-se de ter um backend do Phonon adequado e os plugins necessários instalados. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Desculpe, há um problema ao acessar sua placa de áudio ou a faixa desejada, a faixa atual será ignorada. - + Station Estação - + Create New Station Criar uma nova estação - + Name: Nome: - + Playlist Playlist - + Automatic Playlist Playlist Automática - + Pause PIN do Twitter - + &Play Re&produzir - + Authentication Error Erro de autenticação - + Error connecting to SIP: Authentication failed! Erro ao conectar ao SIP: Falha de autenticação! - + %1 by %2 track, artist name %1 de %2 - + %1 - %2 current track, some window title %1 - %2 - + <h2><b>Tomahawk %1<br/>(%2)</h2> <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012 Copyright 2010 - 2012 - + Thanks to: Agradecimentos: - + About Tomahawk Sobre o Tomahawk @@ -3710,27 +3721,27 @@ colocar o número PIN mostrado aqui: Desculpe, mas não conseguimos encontrar faixas similares para esta música! - + You've listened to this track %n time(s). Você ouviu esta faixa %n vez.Você ouviu esta faixa %n vezes. - + You've never listened to this track before. Você nunca ouviu esta faixa antes. - + You first listened to it on %1. Você ouviu pela primeira vez em %1. - + You've listened to %1 %n time(s). Você ouviu %1 %n vez.Você ouviu %1 %n vezes. - + You've never listened to %1 before. Você nunca ouviu %1 antes. @@ -3746,13 +3757,13 @@ colocar o número PIN mostrado aqui: TransferStatusItem - + from streaming artist - track from friend de - + to streaming artist - track to friend para @@ -3761,7 +3772,7 @@ colocar o número PIN mostrado aqui: TreeItemDelegate - + Unknown Desconhecido @@ -3936,17 +3947,17 @@ Você pode enviar uma outra mensagem de sincronia a qualquer momento simplesment Faixas reproduzidas recentemente - + Recently played tracks Faixas reproduzidas recentemente - + No recently created playlists in your network. Nenhuma lista de reprodução criada recentemente na sua rede. - + Welcome to Tomahawk Bem-vindo ao Tomahawk diff --git a/lang/tomahawk_ru.ts b/lang/tomahawk_ru.ts index fdd4f0b40..1effffddb 100644 --- a/lang/tomahawk_ru.ts +++ b/lang/tomahawk_ru.ts @@ -48,17 +48,17 @@ connect and stream from you? AccountFactoryWrapperDelegate - + Online В сети - + Connecting... Соединяюсь... - + Offline Не в сети @@ -66,18 +66,18 @@ connect and stream from you? AccountListWidget - + Connections - - + + Connect &All - + Disconnect &All @@ -101,154 +101,154 @@ connect and stream from you? ActionCollection - + &Listen Along &Слушать Его - + Stop &Listening Along &Прекратить его слушать - + &Follow in real-time &Следить в реальном времени - - + + &Listen Privately &Слушать Cамому - - + + &Listen Publicly &Слушать со всеми - + &Load Playlist &Загрузить Плейлист - + &Rename Playlist &Переименовать Плейлист - + &Copy Playlist Link &Скопировать Cсылку Плейлиста - + &Play &Играть - + &Stop &Стоп - + &Previous Track &Предыдущий - + &Next Track &Следующий - + &Quit &Выйти - + Load &XSPF... - + U&pdate Collection - + Fully &Rescan Collection - + Show Offline Sources - + &Configure Tomahawk... - + Minimize - + Zoom - + Hide Menu Bar - + Diagnostics... Диагностика - + About &Tomahawk... О &Tomahawk... - + &Legal Information... &Юридическая информация - + Check For Updates... Проверить обновление... - + &Controls &Управление - + &Settings &Настройки - + &Help &Помощь - + &Window &Окно - + Main Menu Главное меню @@ -296,7 +296,7 @@ connect and stream from you? К сожалению, мы не смогли найти никаких треков для этого альбома! - + Other Albums by %1 Другие альбомы %1 @@ -323,42 +323,44 @@ connect and stream from you? Форма - + Top Hits Хиты - + Related Artists Похожие исполнители - + + Artist Исполнитель - + Albums Альбомы - + + Cover Обложка - + Sorry, we could not find any albums for this artist! К сожалению, мы не смогли найти никаких альбомов этого исполнителя! - + Sorry, we could not find any related artists! К сожалению, мы не смогли найти никаких исполнители! - + Sorry, we could not find any top hits for this artist! К сожалению, мы не смогли найти никаких хитов этого исполнителя! @@ -422,13 +424,13 @@ connect and stream from you? - + Shuffle Случаная - + Repeat Повторять @@ -443,27 +445,27 @@ connect and stream from you? Громче - + Time Elapsed - + Time Remaining - + Playing from %1 - + Share - + Love @@ -489,24 +491,24 @@ connect and stream from you? CategoryAddItem - + Create new Playlist Создать новый Плейлист - + Create new Station Создать Новую Станцию - - + + New Station Новая станция - - + + %1 Station %1 Станция @@ -514,12 +516,12 @@ connect and stream from you? CategoryItem - + Playlists Плейлисты - + Stations Станции @@ -652,97 +654,97 @@ connect and stream from you? EchonestSteerer - + Steer this station: - + Much less - + Less - + A bit less - + Keep at current - + A bit more - + More - + Much more - + Tempo - + Loudness - + Danceability - + Energy - + Song Hotttnesss - + Artist Hotttnesss - + Artist Familiarity - + By Description - + Enter a description - + Apply steering command - + Reset all steering commands @@ -758,12 +760,12 @@ connect and stream from you? FlexibleView - + This playlist is currently empty. - + This playlist is currently empty. Add some tracks to it and enjoy the music! @@ -779,7 +781,7 @@ connect and stream from you? IndexingJobItem - + Indexing database Индексирую базу данных @@ -846,7 +848,7 @@ connect and stream from you? LatchedStatusItem - + %1 is listening along with you! @@ -908,32 +910,32 @@ connect and stream from you? LovedTracksItem - + Top Loved Tracks Топ Любимых Песен - + Sorry, we could not find any loved tracks! К сожалению, мы не смогли найти никаких любимых песен! - + The most loved tracks from all your friends Любимые песни ваших друзей - + All of your loved tracks Все ваши любимые песни - + All of %1's loved tracks Все из %1 любимые песни - + Loved Tracks Любимые Песни @@ -1046,7 +1048,7 @@ connect and stream from you? Вперед - + Properties @@ -1172,20 +1174,30 @@ connect and stream from you? PlaylistLargeItemDelegate - + played %1 by you Воспроизводилось %1 вами - + played %1 by %2 Воспроизводилось %1 %2 - + added %1 Добавлено %1 + + + by <b>%1</b> + + + + + by <b>%1</b> on <b>%2</b> + + PlaylistModel @@ -1252,12 +1264,12 @@ connect and stream from you? PlaylistView - + This playlist is currently empty. Текущий плейлист пуст. - + This playlist is currently empty. Add some tracks to it and enjoy the music! Этот плейлист пустой. Добавьте какие-нибудь треки и наслаждайтесь музыкой! @@ -1482,12 +1494,12 @@ connect and stream from you? SettingsDialog - + Collection Коллекция - + Advanced Дополнительны @@ -1497,12 +1509,12 @@ connect and stream from you? Все - + Some changed settings will not take effect until Tomahawk is restarted Некоторые измененные настройки не вступят в силу до перезапуска Tomahawk - + Services Сервисы @@ -1512,37 +1524,37 @@ connect and stream from you? - + Configure the accounts and services used by Tomahawk to search and retrieve music, find your friends and update your status. - + Manage how Tomahawk finds music on your computer. - + Configure Tomahawk's advanced settings, including network connectivity settings, browser interaction and more. - + Install resolver from file Установить resolver из файла - + Delete all Access Control entries? Удаление всех записей контроля доступа? - + Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to. - + Information Инофрмация @@ -1738,22 +1750,22 @@ connect and stream from you? TextLabel - + Tweet Твит - + Listening to "%1" by %2. %3 Прослушивание "%1" %2. %3 - + Listening to "%1" by %2 on "%3". %4 Прослушивание "%1" by %2 on "%3". %4 - + %1 characters left %1 символов осталось @@ -1786,19 +1798,19 @@ connect and stream from you? Топ 10 - + All available tracks Доступные песни - - + + Show Показать - - + + Hide Спрятать @@ -1845,7 +1857,7 @@ connect and stream from you? - + Latest Additions Последние добавленные @@ -1855,42 +1867,42 @@ connect and stream from you? Последние воспроизводимые - + SuperCollection Общая коллекция - + Latest additions to your collection Последние добавления в коллекцию - + Latest additions to %1's collection Новые поступления в коллекции %1 - + Sorry, we could not find any recent additions! К сожалению, мы не смогли найти никаких последних добавлений! - + Recently Played Tracks Недавно Воспроизводимые - + Your recently played tracks Ваши Недавно Воспроизводимые - + %1's recently played tracks %1 последние проиграные треки - + Sorry, we could not find any recent plays! К сожалению, мы не смогли найти никаких воспроизвидений треков! @@ -2106,17 +2118,17 @@ connect and stream from you? TemporaryPageItem - + Copy Artist Link Скопировать Ссылку на Исполнителя - + Copy Album Link Скопировать Ссылку на Альбом - + Copy Track Link Скопировать Ссылку на Песню @@ -2124,32 +2136,32 @@ connect and stream from you? Tomahawk::Accounts::AccountDelegate - + Add Account Добавить аккаунт - + Remove Удалить - + %1 downloads %1 загружено - + Online В сети - + Connecting... Соединяюсь... - + Offline Не в сети @@ -2219,7 +2231,7 @@ connect and stream from you? Tomahawk::Accounts::LastFmAccountFactory - + Scrobble your tracks to last.fm, and find freely downloadable tracks to play @@ -2525,83 +2537,82 @@ You may wish to try re-authenticating. Tomahawk::ContextMenu - + &Play &Играть - - - + + + Add to &Queue Добавить В &Очередь - + Continue Playback after this &Track Продолжить воспроизведение после этого &Песни - + Stop Playback after this &Track Остановить воспроизведение после этого &Песни - - + + &Love &Любимая - + + + + &Go to "%1" + + + + + + + Go to "%1" + + + + &Copy Track Link &Скопировать Ссылку Песни - + Copy Album &Link Копировать &Ссылку Альбома - + Copy Artist &Link Копировать &Ссылку Исполнителя - + Un-&Love &Не Любимая - + &Delete Items &Удалить Песни - - &Show Track Page - &Показать Станицу Песни - - - + Properties... Свойства... - + &Delete Item &Удалить Песню - - - &Show Album Page - &Показать Станицу Альбома - - - - &Show Artist Page - &Показать Станицу Исполнителя - Tomahawk::DropJobNotifier @@ -2696,7 +2707,7 @@ Please change the filters or try again. Tomahawk::DynamicWidget - + Station ran out of tracks! Try tweaking the filters for a new set of songs to play. @@ -3052,27 +3063,27 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks ТОП Песен - + Loved Tracks Любимые Песни - + Hyped Tracks - + Top Artists ТОП Исполнителей - + Hyped Artists Форма @@ -3206,7 +3217,7 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::ShortenedLinkParser - + Network error parsing shortened link! @@ -3480,178 +3491,178 @@ enter the displayed PIN number here: Следующая - + Back Назад - + Go back one page Перейти на предыдущую страницу - + Forward Вперед - + Go forward one page Перейдите на следующую страницу - + Global Search... Глобальный поиск - - + + Hide Menu Bar - - + + Show Menu Bar - + &Main Menu &Главное меню - - - + + + Connect To Peer Связаться с Peer - + Enter peer address: Введите адрес узла: - + Enter peer port: Введите адрес порта: - + Enter peer key: Введите адрес ключа: - + XSPF Error Ошибка XSPF - + This is not a valid XSPF playlist. Это не является допустимым XSPF плейлистом. - + Failed to save tracks Не удалось сохранить песни - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. Некоторые треки в плейлисте не содержат исполнителя и название. Они будут проигнорированы. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. - + Station Станция - + Create New Station Создать новую станцию - + Name: Имя: - + Playlist Плейлист - + Automatic Playlist Автоматический Плейлист - + Pause Пауза - + &Play &Играть - + Authentication Error Ошибка авторизации - + Error connecting to SIP: Authentication failed! Ошибка соединения с SIP: Ошибка авторизации! - + %1 by %2 track, artist name %1 %2 - + %1 - %2 current track, some window title %1 - %2 - + <h2><b>Tomahawk %1<br/>(%2)</h2> <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012 Авторское право 2010 - 2012 - + Thanks to: Благодарность - + About Tomahawk О Tomahawk @@ -3707,27 +3718,27 @@ enter the displayed PIN number here: Извините, но мы не смогли найти похожие треки на эту песню! - + You've listened to this track %n time(s). - + You've never listened to this track before. Вы никогда не слушали этот трек раньше. - + You first listened to it on %1. Первое прослушивание этой песни %1. - + You've listened to %1 %n time(s). - + You've never listened to %1 before. Вы никогда не слушали %1 до этого. @@ -3743,13 +3754,13 @@ enter the displayed PIN number here: TransferStatusItem - + from streaming artist - track from friend из - + to streaming artist - track to friend к @@ -3758,7 +3769,7 @@ enter the displayed PIN number here: TreeItemDelegate - + Unknown Неизвестный @@ -3932,17 +3943,17 @@ You can re-send a sync message at any time simply by sending another tweet using Последние Воспроизводимые Песни - + Recently played tracks - + No recently created playlists in your network. Нет списков, созданных в последнее время в вашей сети. - + Welcome to Tomahawk Добро пожаловать в Tomahawk diff --git a/lang/tomahawk_sv.ts b/lang/tomahawk_sv.ts index bd94c6256..cef4ba3f1 100644 --- a/lang/tomahawk_sv.ts +++ b/lang/tomahawk_sv.ts @@ -47,17 +47,17 @@ connect and stream from you? AccountFactoryWrapperDelegate - + Online Online - + Connecting... Ansluter... - + Offline Offline @@ -65,18 +65,18 @@ connect and stream from you? AccountListWidget - + Connections - - + + Connect &All - + Disconnect &All @@ -100,154 +100,154 @@ connect and stream from you? ActionCollection - + &Listen Along &Lyssna med - + Stop &Listening Along Sluta &Lyssna med - + &Follow in real-time &Lyssna med i realtid - - + + &Listen Privately &Lyssna privat - - + + &Listen Publicly &Lyssna publikt - + &Load Playlist &Läs in spellista - + &Rename Playlist &Byt namn på spellista - + &Copy Playlist Link &Kopiera länk till spellista - + &Play Spela &upp - + &Stop &Stoppa - + &Previous Track &Föregående spår - + &Next Track &Nästa spår - + &Quit A&vsluta - + Load &XSPF... - + U&pdate Collection - + Fully &Rescan Collection - + Show Offline Sources - + &Configure Tomahawk... - + Minimize - + Zoom - + Hide Menu Bar - + Diagnostics... - + About &Tomahawk... - + &Legal Information... - + Check For Updates... - + &Controls - + &Settings - + &Help - + &Window - + Main Menu @@ -295,7 +295,7 @@ connect and stream from you? - + Other Albums by %1 Andra album av %1 @@ -322,42 +322,44 @@ connect and stream from you? Formulär - + Top Hits Största hits - + Related Artists Relaterade artister - + + Artist - + Albums Album - + + Cover - + Sorry, we could not find any albums for this artist! - + Sorry, we could not find any related artists! - + Sorry, we could not find any top hits for this artist! @@ -421,13 +423,13 @@ connect and stream from you? - + Shuffle Blanda - + Repeat Upprepa @@ -442,27 +444,27 @@ connect and stream from you? Hög - + Time Elapsed - + Time Remaining - + Playing from %1 - + Share - + Love @@ -488,24 +490,24 @@ connect and stream from you? CategoryAddItem - + Create new Playlist - + Create new Station - - + + New Station Ny station - - + + %1 Station %1 station @@ -513,12 +515,12 @@ connect and stream from you? CategoryItem - + Playlists Spellistor - + Stations Stationer @@ -651,97 +653,97 @@ connect and stream from you? EchonestSteerer - + Steer this station: - + Much less - + Less - + A bit less - + Keep at current - + A bit more - + More - + Much more - + Tempo - + Loudness - + Danceability - + Energy - + Song Hotttnesss - + Artist Hotttnesss - + Artist Familiarity - + By Description - + Enter a description - + Apply steering command - + Reset all steering commands @@ -757,12 +759,12 @@ connect and stream from you? FlexibleView - + This playlist is currently empty. - + This playlist is currently empty. Add some tracks to it and enjoy the music! @@ -778,7 +780,7 @@ connect and stream from you? IndexingJobItem - + Indexing database Indexerar databasen @@ -845,7 +847,7 @@ connect and stream from you? LatchedStatusItem - + %1 is listening along with you! @@ -907,32 +909,32 @@ connect and stream from you? LovedTracksItem - + Top Loved Tracks - + Sorry, we could not find any loved tracks! - + The most loved tracks from all your friends - + All of your loved tracks - + All of %1's loved tracks - + Loved Tracks @@ -1045,7 +1047,7 @@ connect and stream from you? - + Properties @@ -1171,20 +1173,30 @@ connect and stream from you? PlaylistLargeItemDelegate - + played %1 by you %1 spelades av dig - + played %1 by %2 %1 spelades av %2 - + added %1 %1 tillagd + + + by <b>%1</b> + + + + + by <b>%1</b> on <b>%2</b> + + PlaylistModel @@ -1251,12 +1263,12 @@ connect and stream from you? PlaylistView - + This playlist is currently empty. - + This playlist is currently empty. Add some tracks to it and enjoy the music! Denna spellista är för närvarande tom. Lägg till några spår och njut av musiken! @@ -1481,12 +1493,12 @@ connect and stream from you? SettingsDialog - + Collection Samling - + Advanced Avancerat @@ -1496,12 +1508,12 @@ connect and stream from you? Alla - + Some changed settings will not take effect until Tomahawk is restarted - + Services Tjänster @@ -1511,37 +1523,37 @@ connect and stream from you? - + Configure the accounts and services used by Tomahawk to search and retrieve music, find your friends and update your status. - + Manage how Tomahawk finds music on your computer. - + Configure Tomahawk's advanced settings, including network connectivity settings, browser interaction and more. - + Install resolver from file Installera resolver från fil - + Delete all Access Control entries? - + Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to. - + Information Information @@ -1737,22 +1749,22 @@ connect and stream from you? - + Tweet - + Listening to "%1" by %2. %3 - + Listening to "%1" by %2 on "%3". %4 - + %1 characters left @@ -1785,19 +1797,19 @@ connect and stream from you? Topp 10 - + All available tracks Alla tillgängliga spår - - + + Show Visa - - + + Hide Göm @@ -1844,7 +1856,7 @@ connect and stream from you? - + Latest Additions Senast tillagda @@ -1854,42 +1866,42 @@ connect and stream from you? Senast spelade spår - + SuperCollection SuperCollection - + Latest additions to your collection - + Latest additions to %1's collection - + Sorry, we could not find any recent additions! - + Recently Played Tracks - + Your recently played tracks - + %1's recently played tracks - + Sorry, we could not find any recent plays! @@ -2105,17 +2117,17 @@ connect and stream from you? TemporaryPageItem - + Copy Artist Link - + Copy Album Link - + Copy Track Link @@ -2123,32 +2135,32 @@ connect and stream from you? Tomahawk::Accounts::AccountDelegate - + Add Account Lägg till konto - + Remove - + %1 downloads - + Online - + Connecting... Ansluter… - + Offline @@ -2218,7 +2230,7 @@ connect and stream from you? Tomahawk::Accounts::LastFmAccountFactory - + Scrobble your tracks to last.fm, and find freely downloadable tracks to play @@ -2521,83 +2533,82 @@ You may wish to try re-authenticating. Tomahawk::ContextMenu - + &Play Spela &upp - - - + + + Add to &Queue Lägg till i &kö - + Continue Playback after this &Track - + Stop Playback after this &Track - - + + &Love - + + + + &Go to "%1" + + + + + + + Go to "%1" + + + + &Copy Track Link - + Copy Album &Link - + Copy Artist &Link - + Un-&Love - + &Delete Items &Ta bort objekt - - &Show Track Page - - - - + Properties... - + &Delete Item &Ta bort objekt - - - &Show Album Page - - - - - &Show Artist Page - - Tomahawk::DropJobNotifier @@ -2690,7 +2701,7 @@ Please change the filters or try again. Tomahawk::DynamicWidget - + Station ran out of tracks! Try tweaking the filters for a new set of songs to play. @@ -3046,27 +3057,27 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks - + Loved Tracks - + Hyped Tracks - + Top Artists - + Hyped Artists @@ -3200,7 +3211,7 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::ShortenedLinkParser - + Network error parsing shortened link! @@ -3474,178 +3485,178 @@ enter the displayed PIN number here: Nästa - + Back - + Go back one page - + Forward - + Go forward one page - + Global Search... Global sökning... - - + + Hide Menu Bar - - + + Show Menu Bar - + &Main Menu - - - + + + Connect To Peer Anslut till klient - + Enter peer address: Ange klientadress: - + Enter peer port: Ange klientport: - + Enter peer key: Ange klientnyckel: - + XSPF Error XSPF-fel - + This is not a valid XSPF playlist. Detta är inte en giltig XSPF-spellista. - + Failed to save tracks Misslyckades med att spara spår - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. Några spår i spellistan innehåller inte någon artist och titel. De kommer att ignoreras. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. - + Station - + Create New Station Skapa ny station - + Name: Namn: - + Playlist - + Automatic Playlist - + Pause Paus - + &Play - + Authentication Error Autentiseringsfel - + Error connecting to SIP: Authentication failed! - + %1 by %2 track, artist name %1 av %2 - + %1 - %2 current track, some window title %1 - %2 - + <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012 - + Thanks to: - + About Tomahawk @@ -3701,27 +3712,27 @@ enter the displayed PIN number here: - + You've listened to this track %n time(s). - + You've never listened to this track before. - + You first listened to it on %1. - + You've listened to %1 %n time(s). - + You've never listened to %1 before. @@ -3737,13 +3748,13 @@ enter the displayed PIN number here: TransferStatusItem - + from streaming artist - track from friend - + to streaming artist - track to friend @@ -3752,7 +3763,7 @@ enter the displayed PIN number here: TreeItemDelegate - + Unknown Okänt @@ -3922,17 +3933,17 @@ You can re-send a sync message at any time simply by sending another tweet using Senaste spelade spår - + Recently played tracks - + No recently created playlists in your network. Inga skapade spellistor i ditt nätverk på sistone. - + Welcome to Tomahawk Välkommen till Tomahawk diff --git a/lang/tomahawk_tr.ts b/lang/tomahawk_tr.ts index ee9e0289b..b4c971b46 100644 --- a/lang/tomahawk_tr.ts +++ b/lang/tomahawk_tr.ts @@ -47,17 +47,17 @@ connect and stream from you? AccountFactoryWrapperDelegate - + Online Çevrimiçi - + Connecting... Bağlanıyor... - + Offline Çevrimdışı @@ -65,18 +65,18 @@ connect and stream from you? AccountListWidget - + Connections - - + + Connect &All - + Disconnect &All @@ -100,154 +100,154 @@ connect and stream from you? ActionCollection - + &Listen Along &Birlikte Dinle - + Stop &Listening Along &Birlikte Dinlemeyi Durdur - + &Follow in real-time &Gerçek zamanlı takip et - - + + &Listen Privately &Gizli Dinle - - + + &Listen Publicly &Yayınlayarak Dinle - + &Load Playlist &Şarkı Listesini Yükle - + &Rename Playlist &Şarkı Listesini Yeniden Adlandır - + &Copy Playlist Link &Şarkı Listesinin Bağlantısını Kopyala - + &Play &Yürüt - + &Stop &Durdur - + &Previous Track &Önceki Parça - + &Next Track &Sonraki Parça - + &Quit &Çıkış - + Load &XSPF... - + U&pdate Collection - + Fully &Rescan Collection - + Show Offline Sources - + &Configure Tomahawk... - + Minimize - + Zoom - + Hide Menu Bar - + Diagnostics... - + About &Tomahawk... - + &Legal Information... - + Check For Updates... - + &Controls - + &Settings - + &Help - + &Window - + Main Menu @@ -295,7 +295,7 @@ connect and stream from you? - + Other Albums by %1 Diğer %1 Albümleri @@ -322,42 +322,44 @@ connect and stream from you? Form - + Top Hits En Çok Dinlenenler - + Related Artists Benzer Sanatçılar - + + Artist - + Albums Albümler - + + Cover - + Sorry, we could not find any albums for this artist! - + Sorry, we could not find any related artists! - + Sorry, we could not find any top hits for this artist! @@ -421,13 +423,13 @@ connect and stream from you? - + Shuffle Karışık - + Repeat Yenile @@ -442,27 +444,27 @@ connect and stream from you? Yüksek - + Time Elapsed - + Time Remaining - + Playing from %1 - + Share - + Love @@ -488,24 +490,24 @@ connect and stream from you? CategoryAddItem - + Create new Playlist - + Create new Station - - + + New Station Yeni İstasyon - - + + %1 Station %1 İstasyon @@ -513,12 +515,12 @@ connect and stream from you? CategoryItem - + Playlists Şarkı Listeleri - + Stations İstasyonlar @@ -651,97 +653,97 @@ connect and stream from you? EchonestSteerer - + Steer this station: - + Much less - + Less - + A bit less - + Keep at current - + A bit more - + More - + Much more - + Tempo - + Loudness - + Danceability - + Energy - + Song Hotttnesss - + Artist Hotttnesss - + Artist Familiarity - + By Description - + Enter a description - + Apply steering command - + Reset all steering commands @@ -757,12 +759,12 @@ connect and stream from you? FlexibleView - + This playlist is currently empty. - + This playlist is currently empty. Add some tracks to it and enjoy the music! @@ -778,7 +780,7 @@ connect and stream from you? IndexingJobItem - + Indexing database Veritabanı dizini oluşturuluyor @@ -845,7 +847,7 @@ connect and stream from you? LatchedStatusItem - + %1 is listening along with you! @@ -907,32 +909,32 @@ connect and stream from you? LovedTracksItem - + Top Loved Tracks - + Sorry, we could not find any loved tracks! - + The most loved tracks from all your friends - + All of your loved tracks - + All of %1's loved tracks - + Loved Tracks @@ -1045,7 +1047,7 @@ connect and stream from you? - + Properties @@ -1171,20 +1173,30 @@ connect and stream from you? PlaylistLargeItemDelegate - + played %1 by you - + played %1 by %2 - + added %1 + + + by <b>%1</b> + + + + + by <b>%1</b> on <b>%2</b> + + PlaylistModel @@ -1251,12 +1263,12 @@ connect and stream from you? PlaylistView - + This playlist is currently empty. - + This playlist is currently empty. Add some tracks to it and enjoy the music! @@ -1480,12 +1492,12 @@ connect and stream from you? SettingsDialog - + Collection - + Advanced @@ -1495,12 +1507,12 @@ connect and stream from you? - + Some changed settings will not take effect until Tomahawk is restarted - + Services @@ -1510,37 +1522,37 @@ connect and stream from you? - + Configure the accounts and services used by Tomahawk to search and retrieve music, find your friends and update your status. - + Manage how Tomahawk finds music on your computer. - + Configure Tomahawk's advanced settings, including network connectivity settings, browser interaction and more. - + Install resolver from file - + Delete all Access Control entries? - + Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to. - + Information @@ -1736,22 +1748,22 @@ connect and stream from you? - + Tweet - + Listening to "%1" by %2. %3 - + Listening to "%1" by %2 on "%3". %4 - + %1 characters left @@ -1784,19 +1796,19 @@ connect and stream from you? - + All available tracks - - + + Show - - + + Hide @@ -1843,7 +1855,7 @@ connect and stream from you? - + Latest Additions @@ -1853,42 +1865,42 @@ connect and stream from you? - + SuperCollection - + Latest additions to your collection - + Latest additions to %1's collection - + Sorry, we could not find any recent additions! - + Recently Played Tracks - + Your recently played tracks - + %1's recently played tracks - + Sorry, we could not find any recent plays! @@ -2104,17 +2116,17 @@ connect and stream from you? TemporaryPageItem - + Copy Artist Link - + Copy Album Link - + Copy Track Link @@ -2122,32 +2134,32 @@ connect and stream from you? Tomahawk::Accounts::AccountDelegate - + Add Account - + Remove - + %1 downloads - + Online - + Connecting... - + Offline @@ -2217,7 +2229,7 @@ connect and stream from you? Tomahawk::Accounts::LastFmAccountFactory - + Scrobble your tracks to last.fm, and find freely downloadable tracks to play @@ -2520,83 +2532,82 @@ You may wish to try re-authenticating. Tomahawk::ContextMenu - + &Play - - - + + + Add to &Queue - + Continue Playback after this &Track - + Stop Playback after this &Track - - + + &Love - + + + + &Go to "%1" + + + + + + + Go to "%1" + + + + &Copy Track Link - + Copy Album &Link - + Copy Artist &Link - + Un-&Love - + &Delete Items - - &Show Track Page - - - - + Properties... - + &Delete Item - - - &Show Album Page - - - - - &Show Artist Page - - Tomahawk::DropJobNotifier @@ -2689,7 +2700,7 @@ Please change the filters or try again. Tomahawk::DynamicWidget - + Station ran out of tracks! Try tweaking the filters for a new set of songs to play. @@ -3045,27 +3056,27 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks - + Loved Tracks - + Hyped Tracks - + Top Artists - + Hyped Artists @@ -3199,7 +3210,7 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::ShortenedLinkParser - + Network error parsing shortened link! @@ -3473,178 +3484,178 @@ enter the displayed PIN number here: - + Back - + Go back one page - + Forward - + Go forward one page - + Global Search... - - + + Hide Menu Bar - - + + Show Menu Bar - + &Main Menu - - - + + + Connect To Peer - + Enter peer address: - + Enter peer port: - + Enter peer key: - + XSPF Error - + This is not a valid XSPF playlist. - + Failed to save tracks - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. - + Station - + Create New Station - + Name: - + Playlist - + Automatic Playlist - + Pause - + &Play - + Authentication Error - + Error connecting to SIP: Authentication failed! - + %1 by %2 track, artist name - + %1 - %2 current track, some window title - + <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012 - + Thanks to: - + About Tomahawk @@ -3700,27 +3711,27 @@ enter the displayed PIN number here: - + You've listened to this track %n time(s). - + You've never listened to this track before. - + You first listened to it on %1. - + You've listened to %1 %n time(s). - + You've never listened to %1 before. @@ -3736,13 +3747,13 @@ enter the displayed PIN number here: TransferStatusItem - + from streaming artist - track from friend - + to streaming artist - track to friend @@ -3751,7 +3762,7 @@ enter the displayed PIN number here: TreeItemDelegate - + Unknown @@ -3921,17 +3932,17 @@ You can re-send a sync message at any time simply by sending another tweet using - + Recently played tracks - + No recently created playlists in your network. - + Welcome to Tomahawk diff --git a/lang/tomahawk_zh_CN.ts b/lang/tomahawk_zh_CN.ts index 9b5defd26..d9acdb1d8 100644 --- a/lang/tomahawk_zh_CN.ts +++ b/lang/tomahawk_zh_CN.ts @@ -47,17 +47,17 @@ connect and stream from you? AccountFactoryWrapperDelegate - + Online 在线 - + Connecting... 连接中... - + Offline 离线 @@ -65,18 +65,18 @@ connect and stream from you? AccountListWidget - + Connections - - + + Connect &All - + Disconnect &All @@ -100,154 +100,154 @@ connect and stream from you? ActionCollection - + &Listen Along 一块儿收听 - + Stop &Listening Along 停止一块儿收听 - + &Follow in real-time 实时跟随收听 - - + + &Listen Privately 私下收听 - - + + &Listen Publicly 公开收听 - + &Load Playlist 载入播放列表 - + &Rename Playlist 重命名播放列表 - + &Copy Playlist Link 复制播放列表链接 - + &Play 播放 - + &Stop 停止 - + &Previous Track 上一首 - + &Next Track 下一首 - + &Quit 退出 - + Load &XSPF... 载入 XSPF... - + U&pdate Collection 更新收藏 - + Fully &Rescan Collection 完整重新扫描收藏 - + Show Offline Sources 显示离线资源 - + &Configure Tomahawk... 配置 Tomahawk... - + Minimize 最小化 - + Zoom 放大 - + Hide Menu Bar 隐藏菜单栏 - + Diagnostics... 诊断... - + About &Tomahawk... 关于 Tomahawk... - + &Legal Information... 法律信息... - + Check For Updates... 检查更新... - + &Controls 控制 - + &Settings 设置 - + &Help 帮助 - + &Window 窗口 - + Main Menu 主菜单 @@ -295,7 +295,7 @@ connect and stream from you? 抱歉,没有找到这张专辑的其他歌曲! - + Other Albums by %1 %1 的其他专辑 @@ -322,42 +322,44 @@ connect and stream from you? 来自 - + Top Hits 最热歌曲 - + Related Artists 相关艺人 - + + Artist 艺术家 - + Albums 专辑 - + + Cover 封面 - + Sorry, we could not find any albums for this artist! 抱歉,未找到该艺术家的其他专辑! - + Sorry, we could not find any related artists! 抱歉,没有找到相关的艺术家! - + Sorry, we could not find any top hits for this artist! 抱歉,没有找到该艺术家的任何人气歌曲! @@ -421,13 +423,13 @@ connect and stream from you? - + Shuffle 无序播放 - + Repeat 重复播放 @@ -442,27 +444,27 @@ connect and stream from you? - + Time Elapsed 已播放时间 - + Time Remaining 剩余时间 - + Playing from %1 歌曲来自 %1 - + Share 分享 - + Love 喜欢 @@ -488,24 +490,24 @@ connect and stream from you? CategoryAddItem - + Create new Playlist 创建新的播放列表 - + Create new Station 创建新的电台 - - + + New Station 新电台 - - + + %1 Station %1 电台 @@ -513,12 +515,12 @@ connect and stream from you? CategoryItem - + Playlists 播放列表 - + Stations 电台 @@ -651,97 +653,97 @@ connect and stream from you? EchonestSteerer - + Steer this station: - + Much less - + Less - + A bit less - + Keep at current - + A bit more - + More - + Much more - + Tempo - + Loudness - + Danceability - + Energy - + Song Hotttnesss - + Artist Hotttnesss - + Artist Familiarity - + By Description - + Enter a description - + Apply steering command - + Reset all steering commands @@ -757,12 +759,12 @@ connect and stream from you? FlexibleView - + This playlist is currently empty. - + This playlist is currently empty. Add some tracks to it and enjoy the music! @@ -778,7 +780,7 @@ connect and stream from you? IndexingJobItem - + Indexing database 正在索引数据库 @@ -845,7 +847,7 @@ connect and stream from you? LatchedStatusItem - + %1 is listening along with you! %1 在与您一起听! @@ -907,32 +909,32 @@ connect and stream from you? LovedTracksItem - + Top Loved Tracks 最多喜爱的歌曲 - + Sorry, we could not find any loved tracks! 抱歉!未找到任何喜爱歌曲。 - + The most loved tracks from all your friends 从所有朋友中获取的最多喜爱歌曲 - + All of your loved tracks 我所有的喜爱歌曲 - + All of %1's loved tracks %1 所有被喜欢的歌曲 - + Loved Tracks 喜爱歌曲 @@ -1045,7 +1047,7 @@ connect and stream from you? 下一个 - + Properties @@ -1171,20 +1173,30 @@ connect and stream from you? PlaylistLargeItemDelegate - + played %1 by you %1 - + played %1 by %2 已播放 %2 的 %1 - + added %1 已添加 %1 + + + by <b>%1</b> + + + + + by <b>%1</b> on <b>%2</b> + + PlaylistModel @@ -1251,12 +1263,12 @@ connect and stream from you? PlaylistView - + This playlist is currently empty. 当前播放列表为空。 - + This playlist is currently empty. Add some tracks to it and enjoy the music! 该播放列表现在为空。请为她添加一些歌曲享受吧! @@ -1481,12 +1493,12 @@ connect and stream from you? SettingsDialog - + Collection 收藏 - + Advanced 高级 @@ -1496,12 +1508,12 @@ connect and stream from you? 所有 - + Some changed settings will not take effect until Tomahawk is restarted 一些设置改动将在 Tomahawk 下次启动时生效。 - + Services 服务 @@ -1511,37 +1523,37 @@ connect and stream from you? 从文件安装 - + Configure the accounts and services used by Tomahawk to search and retrieve music, find your friends and update your status. 配置 Tomahawk 使用的账户和服务以获取音乐,寻找朋友,更新状态 - + Manage how Tomahawk finds music on your computer. 设置以便让 Tomahawk 发现你计算机上的音乐。 - + Configure Tomahawk's advanced settings, including network connectivity settings, browser interaction and more. 配置 Tomahawk 的高级设置,包括网络链接设置,浏览交互设置等等。 - + Install resolver from file 从文件安装解析器 - + Delete all Access Control entries? 删除所有的访问控制项? - + Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to. 你真的想删除所有的访问控制项吗?将在对每个连接的客户端操作后再次询问。 - + Information 信息 @@ -1739,22 +1751,22 @@ connect and stream from you? 文本标签 - + Tweet Tweet - + Listening to "%1" by %2. %3 正在听 %2. %3 的 "%1"。 - + Listening to "%1" by %2 on "%3". %4 正在听 "%1",来自 %2 的专辑 "%3"。 %4 - + %1 characters left 剩余 %1 字 @@ -1787,19 +1799,19 @@ connect and stream from you? Top 10 - + All available tracks 所有可用的歌曲 - - + + Show 显示 - - + + Hide 隐藏 @@ -1846,7 +1858,7 @@ connect and stream from you? - + Latest Additions 最近添加 @@ -1856,42 +1868,42 @@ connect and stream from you? 最近播放 - + SuperCollection 超级收藏 - + Latest additions to your collection 最近加入收藏的歌曲 - + Latest additions to %1's collection - + Sorry, we could not find any recent additions! 抱歉,未找到任何最近添加的音乐! - + Recently Played Tracks 最近播放歌曲 - + Your recently played tracks 你最近播放的歌曲 - + %1's recently played tracks %1最近播放的歌曲 - + Sorry, we could not find any recent plays! 抱歉,未找到任何最近播放的音乐! @@ -2107,17 +2119,17 @@ connect and stream from you? TemporaryPageItem - + Copy Artist Link 复制艺术家链接 - + Copy Album Link 复制专辑链接 - + Copy Track Link 复制歌曲链接 @@ -2125,32 +2137,32 @@ connect and stream from you? Tomahawk::Accounts::AccountDelegate - + Add Account 添加账户 - + Remove 移除 - + %1 downloads %1 个下载 - + Online 在线 - + Connecting... 连接中... - + Offline 离线 @@ -2220,7 +2232,7 @@ connect and stream from you? Tomahawk::Accounts::LastFmAccountFactory - + Scrobble your tracks to last.fm, and find freely downloadable tracks to play 将歌曲同步至 last.fm, 并播放可以免费下载的音乐。 @@ -2526,83 +2538,82 @@ You may wish to try re-authenticating. Tomahawk::ContextMenu - + &Play 播放 - - - + + + Add to &Queue 添加到队列 - + Continue Playback after this &Track 此歌曲后继续播放 - + Stop Playback after this &Track 此歌曲后停止播放 - - + + &Love 喜欢 - + + + + &Go to "%1" + + + + + + + Go to "%1" + + + + &Copy Track Link 复制歌曲链接 - + Copy Album &Link 复制专辑链接 - + Copy Artist &Link 复制艺术家链接 - + Un-&Love 不喜欢 - + &Delete Items 删除该项 - - &Show Track Page - 显示歌曲页面 - - - + Properties... 属性... - + &Delete Item 删除该项 - - - &Show Album Page - 显示专辑页面 - - - - &Show Artist Page - 显示艺术家页面 - Tomahawk::DropJobNotifier @@ -2697,7 +2708,7 @@ Please change the filters or try again. Tomahawk::DynamicWidget - + Station ran out of tracks! Try tweaking the filters for a new set of songs to play. @@ -3055,27 +3066,27 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks 最热歌曲 - + Loved Tracks 喜爱歌曲 - + Hyped Tracks 活跃歌曲 - + Top Artists Top 艺术家 - + Hyped Artists 活跃艺术家 @@ -3209,7 +3220,7 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::ShortenedLinkParser - + Network error parsing shortened link! 解析短链接时出错! @@ -3484,178 +3495,178 @@ enter the displayed PIN number here: 下一首 - + Back 后退 - + Go back one page 转向上一页 - + Forward 下一个 - + Go forward one page 转向下一页 - + Global Search... 全局搜索 ... - - + + Hide Menu Bar 隐藏菜单栏 - - + + Show Menu Bar 显示菜单栏 - + &Main Menu 主菜单 - - - + + + Connect To Peer 连接到客户端 - + Enter peer address: 输入客户端地址: - + Enter peer port: 输入客户端端口: - + Enter peer key: 输入客户端密钥: - + XSPF Error XSPF 错误 - + This is not a valid XSPF playlist. 这不是一个合法的 XSPF 播放列表。 - + Failed to save tracks 保存歌曲失败。 - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. 播放列表中的一些歌曲缺失艺术家和标题,它们将被忽略。 - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. 抱歉,访问音频设备或者指定的歌曲时出错。当前歌曲将被跳过。请确认你正在使用合适的 Phonon 后端并安装了必要的插件。 - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. 抱歉,在访问音频设备或者指定的歌曲时出错。当前歌曲将被跳过。 - + Station 电台 - + Create New Station 创建新电台 - + Name: 名字: - + Playlist 播放列表 - + Automatic Playlist 自动播放列表 - + Pause 暂停 - + &Play 播放 - + Authentication Error 认证错误 - + Error connecting to SIP: Authentication failed! 连接到SIP 时错误:认证失败! - + %1 by %2 track, artist name %2 的 %1 - + %1 - %2 current track, some window title %1 - %2 - + <h2><b>Tomahawk %1<br/>(%2)</h2> <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012 版权所有 2010 - 2012 - + Thanks to: 感谢: - + About Tomahawk 关于 Tomahawk @@ -3711,27 +3722,27 @@ enter the displayed PIN number here: 抱歉,无法找到与这首歌类似的歌曲! - + You've listened to this track %n time(s). 你已经收听过此歌曲 %n 遍。 - + You've never listened to this track before. 你之前从未听过此歌曲。 - + You first listened to it on %1. 你第一次听的是 %1. - + You've listened to %1 %n time(s). 你已经听过 %1 有 %n 遍了。 - + You've never listened to %1 before. 你之前从未听过 %1。 @@ -3747,13 +3758,13 @@ enter the displayed PIN number here: TransferStatusItem - + from streaming artist - track from friend - + to streaming artist - track to friend @@ -3762,7 +3773,7 @@ enter the displayed PIN number here: TreeItemDelegate - + Unknown 未知 @@ -3937,17 +3948,17 @@ You can re-send a sync message at any time simply by sending another tweet using 最近播放歌曲 - + Recently played tracks 最近播放的歌曲 - + No recently created playlists in your network. 在你的网络中最近未创建播放列表 - + Welcome to Tomahawk 欢迎使用 Tomahawk diff --git a/lang/tomahawk_zh_TW.ts b/lang/tomahawk_zh_TW.ts index 55a9ace05..2de6d6636 100644 --- a/lang/tomahawk_zh_TW.ts +++ b/lang/tomahawk_zh_TW.ts @@ -47,17 +47,17 @@ connect and stream from you? AccountFactoryWrapperDelegate - + Online 線上 - + Connecting... 連接中... - + Offline 離線 @@ -65,18 +65,18 @@ connect and stream from you? AccountListWidget - + Connections - - + + Connect &All - + Disconnect &All @@ -100,154 +100,154 @@ connect and stream from you? ActionCollection - + &Listen Along - + Stop &Listening Along - + &Follow in real-time 即時跟隨 - - + + &Listen Privately 私下聆聽 - - + + &Listen Publicly 公開聆聽 - + &Load Playlist 載入播放清單 - + &Rename Playlist 重新命名播放清單 - + &Copy Playlist Link 複製播放清單連結 - + &Play 播放 - + &Stop 停止 - + &Previous Track 上一首曲目 - + &Next Track 下一個曲目 - + &Quit 結束 - + Load &XSPF... - + U&pdate Collection - + Fully &Rescan Collection - + Show Offline Sources - + &Configure Tomahawk... - + Minimize - + Zoom - + Hide Menu Bar - + Diagnostics... - + About &Tomahawk... - + &Legal Information... - + Check For Updates... - + &Controls - + &Settings - + &Help - + &Window - + Main Menu @@ -295,7 +295,7 @@ connect and stream from you? - + Other Albums by %1 列出所有其他專輯,依 %1 @@ -322,42 +322,44 @@ connect and stream from you? 形式 - + Top Hits 流行精選 - + Related Artists 相關演出者 - + + Artist - + Albums 專輯 - + + Cover - + Sorry, we could not find any albums for this artist! - + Sorry, we could not find any related artists! - + Sorry, we could not find any top hits for this artist! @@ -421,13 +423,13 @@ connect and stream from you? - + Shuffle 隨機 - + Repeat 重複 @@ -442,27 +444,27 @@ connect and stream from you? - + Time Elapsed - + Time Remaining - + Playing from %1 - + Share - + Love @@ -488,24 +490,24 @@ connect and stream from you? CategoryAddItem - + Create new Playlist - + Create new Station - - + + New Station - - + + %1 Station @@ -513,12 +515,12 @@ connect and stream from you? CategoryItem - + Playlists 播放清單 - + Stations @@ -651,97 +653,97 @@ connect and stream from you? EchonestSteerer - + Steer this station: - + Much less - + Less - + A bit less - + Keep at current - + A bit more - + More - + Much more - + Tempo - + Loudness - + Danceability - + Energy - + Song Hotttnesss - + Artist Hotttnesss - + Artist Familiarity - + By Description - + Enter a description - + Apply steering command - + Reset all steering commands @@ -757,12 +759,12 @@ connect and stream from you? FlexibleView - + This playlist is currently empty. - + This playlist is currently empty. Add some tracks to it and enjoy the music! @@ -778,7 +780,7 @@ connect and stream from you? IndexingJobItem - + Indexing database 索引資料庫 @@ -845,7 +847,7 @@ connect and stream from you? LatchedStatusItem - + %1 is listening along with you! @@ -907,32 +909,32 @@ connect and stream from you? LovedTracksItem - + Top Loved Tracks - + Sorry, we could not find any loved tracks! - + The most loved tracks from all your friends - + All of your loved tracks - + All of %1's loved tracks - + Loved Tracks @@ -1045,7 +1047,7 @@ connect and stream from you? - + Properties @@ -1171,20 +1173,30 @@ connect and stream from you? PlaylistLargeItemDelegate - + played %1 by you - + played %1 by %2 - + added %1 + + + by <b>%1</b> + + + + + by <b>%1</b> on <b>%2</b> + + PlaylistModel @@ -1251,12 +1263,12 @@ connect and stream from you? PlaylistView - + This playlist is currently empty. - + This playlist is currently empty. Add some tracks to it and enjoy the music! 目前這個播放清單是空的。請加入一些曲目,然後盡情享受音樂! @@ -1480,12 +1492,12 @@ connect and stream from you? SettingsDialog - + Collection 收藏 - + Advanced 進階 @@ -1495,12 +1507,12 @@ connect and stream from you? 所有 - + Some changed settings will not take effect until Tomahawk is restarted - + Services 服務 @@ -1510,37 +1522,37 @@ connect and stream from you? - + Configure the accounts and services used by Tomahawk to search and retrieve music, find your friends and update your status. - + Manage how Tomahawk finds music on your computer. - + Configure Tomahawk's advanced settings, including network connectivity settings, browser interaction and more. - + Install resolver from file 從檔案安裝解析器 - + Delete all Access Control entries? - + Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to. - + Information 資訊 @@ -1736,22 +1748,22 @@ connect and stream from you? 文字標籤 - + Tweet - + Listening to "%1" by %2. %3 - + Listening to "%1" by %2 on "%3". %4 - + %1 characters left @@ -1784,19 +1796,19 @@ connect and stream from you? 前10名 - + All available tracks - - + + Show 顯示 - - + + Hide 隱藏 @@ -1843,7 +1855,7 @@ connect and stream from you? - + Latest Additions 最新加入 @@ -1853,42 +1865,42 @@ connect and stream from you? 最近播放的 - + SuperCollection 超級收藏 - + Latest additions to your collection - + Latest additions to %1's collection - + Sorry, we could not find any recent additions! - + Recently Played Tracks - + Your recently played tracks - + %1's recently played tracks - + Sorry, we could not find any recent plays! @@ -2104,17 +2116,17 @@ connect and stream from you? TemporaryPageItem - + Copy Artist Link - + Copy Album Link - + Copy Track Link @@ -2122,32 +2134,32 @@ connect and stream from you? Tomahawk::Accounts::AccountDelegate - + Add Account 新增帳戶 - + Remove - + %1 downloads - + Online 線上 - + Connecting... 連接中... - + Offline 離線 @@ -2217,7 +2229,7 @@ connect and stream from you? Tomahawk::Accounts::LastFmAccountFactory - + Scrobble your tracks to last.fm, and find freely downloadable tracks to play @@ -2520,83 +2532,82 @@ You may wish to try re-authenticating. Tomahawk::ContextMenu - + &Play 播放 - - - + + + Add to &Queue 添加至佇列 - + Continue Playback after this &Track - + Stop Playback after this &Track - - + + &Love - + + + + &Go to "%1" + + + + + + + Go to "%1" + + + + &Copy Track Link - + Copy Album &Link - + Copy Artist &Link - + Un-&Love - + &Delete Items - - &Show Track Page - - - - + Properties... - + &Delete Item - - - &Show Album Page - - - - - &Show Artist Page - - Tomahawk::DropJobNotifier @@ -2689,7 +2700,7 @@ Please change the filters or try again. Tomahawk::DynamicWidget - + Station ran out of tracks! Try tweaking the filters for a new set of songs to play. @@ -3045,27 +3056,27 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks - + Loved Tracks - + Hyped Tracks - + Top Artists - + Hyped Artists @@ -3199,7 +3210,7 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::ShortenedLinkParser - + Network error parsing shortened link! @@ -3473,178 +3484,178 @@ enter the displayed PIN number here: 下一首 - + Back - + Go back one page - + Forward - + Go forward one page - + Global Search... 全域搜尋... - - + + Hide Menu Bar - - + + Show Menu Bar - + &Main Menu - - - + + + Connect To Peer 連接點對點 - + Enter peer address: 輸入對等地址: - + Enter peer port: 輸入對等連接埠: - + Enter peer key: 輸入對等密鑰: - + XSPF Error XSPF 錯誤 - + This is not a valid XSPF playlist. - + Failed to save tracks 無法儲存曲目 - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. - + Station - + Create New Station - + Name: 名稱: - + Playlist - + Automatic Playlist - + Pause 暫停 - + &Play - + Authentication Error 驗證錯誤 - + Error connecting to SIP: Authentication failed! - + %1 by %2 track, artist name - + %1 - %2 current track, some window title - + <h2><b>Tomahawk %1<br/>(%2)</h2> <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012 - + Thanks to: - + About Tomahawk @@ -3700,27 +3711,27 @@ enter the displayed PIN number here: - + You've listened to this track %n time(s). - + You've never listened to this track before. - + You first listened to it on %1. - + You've listened to %1 %n time(s). - + You've never listened to %1 before. @@ -3736,13 +3747,13 @@ enter the displayed PIN number here: TransferStatusItem - + from streaming artist - track from friend - + to streaming artist - track to friend @@ -3751,7 +3762,7 @@ enter the displayed PIN number here: TreeItemDelegate - + Unknown @@ -3921,17 +3932,17 @@ You can re-send a sync message at any time simply by sending another tweet using 最近播放的曲目 - + Recently played tracks - + No recently created playlists in your network. 沒有最近建立的播放清單在您的網路。 - + Welcome to Tomahawk 歡迎到 Tomahawk diff --git a/resources.qrc b/resources.qrc index 212adacee..b95ff53f5 100644 --- a/resources.qrc +++ b/resources.qrc @@ -1,105 +1,94 @@ - data/images/back-pressed.png - data/images/back-rest.png - data/images/filter.png - data/images/loved.png - data/images/not-loved.png - data/images/no-album-art-placeholder.png - data/images/no-artist-image-placeholder.png - data/images/artist-placeholder-grid.png - data/images/album-placeholder-grid.png - data/images/track-placeholder.png + data/images/back-pressed.svg + data/images/back-rest.svg + data/images/filter.svg + data/images/loved.svg + data/images/not-loved.svg + data/images/no-album-art-placeholder.svg + data/images/no-artist-image-placeholder.svg + data/images/artist-placeholder-grid.svg + data/images/album-placeholder-grid.svg + data/images/track-placeholder-grid.svg data/images/now-playing-panel.png - data/images/now-playing-speaker.png - data/images/now-playing-speaker-dark.png - data/images/pause-pressed.png - data/images/pause-rest.png - data/images/play-pressed.png - data/images/play-rest.png - data/images/sipplugin-add.png - data/images/sipplugin-remove.png - data/images/playlist-icon.png - data/images/repeat-1-on-pressed.png - data/images/repeat-1-on-rest.png - data/images/repeat-all-on-pressed.png - data/images/repeat-all-on-rest.png - data/images/repeat-off-pressed.png - data/images/repeat-off-rest.png - data/images/search-box-dismiss-x.png + data/images/now-playing-speaker.svg + data/images/now-playing-speaker-dark.svg + data/images/pause-pressed.svg + data/images/pause-rest.svg + data/images/play-pressed.svg + data/images/play-rest.svg + data/images/playlist-icon.svg + data/images/repeat-1-on-pressed.svg + data/images/repeat-1-on-rest.svg + data/images/repeat-all-on-pressed.svg + data/images/repeat-all-on-rest.svg + data/images/repeat-off-pressed.svg + data/images/repeat-off-rest.svg data/images/seek-and-volume-knob-pressed.png data/images/seek-and-volume-knob-rest.png data/images/seek-slider-bkg.png data/images/seek-slider-level.png - data/images/shuffle-off-pressed.png - data/images/shuffle-off-rest.png - data/images/shuffle-on-pressed.png - data/images/shuffle-on-rest.png - data/images/skip-pressed.png - data/images/skip-rest.png - data/images/user-avatar.png + data/images/shuffle-off-pressed.svg + data/images/shuffle-off-rest.svg + data/images/shuffle-on-pressed.svg + data/images/shuffle-on-rest.svg + data/images/skip-pressed.svg + data/images/skip-rest.svg + data/images/user-avatar.svg data/images/view-toggle-active-centre.png data/images/view-toggle-active-left.png data/images/view-toggle-active-right.png - data/images/view-toggle-icon-artist-active.png - data/images/view-toggle-icon-artist-inactive.png - data/images/view-toggle-icon-cloud-active.png - data/images/view-toggle-icon-cloud-inactive.png - data/images/view-toggle-icon-grid-active.png - data/images/view-toggle-icon-grid-inactive.png - data/images/view-toggle-icon-list-active.png - data/images/view-toggle-icon-list-inactive.png + data/images/view-toggle-icon-artist-active.svg + data/images/view-toggle-icon-artist-inactive.svg + data/images/view-toggle-icon-grid-active.svg + data/images/view-toggle-icon-grid-inactive.svg + data/images/view-toggle-icon-list-active.svg + data/images/view-toggle-icon-list-inactive.svg data/images/view-toggle-inactive-centre.png data/images/view-toggle-inactive-left.png data/images/view-toggle-inactive-right.png data/images/view-toggle-pressed-centre.png data/images/view-toggle-pressed-left.png data/images/view-toggle-pressed-right.png - data/images/list-add.png - data/images/list-remove.png - data/images/arrow-up-double.png - data/images/arrow-down-double.png - data/images/volume-icon-full.png - data/images/arrow-right-double.png - data/images/view-refresh.png - data/images/volume-icon-muted.png + data/images/list-add.svg + data/images/list-remove.svg + data/images/arrow-up-double.svg + data/images/arrow-down-double.svg + data/images/arrow-right-double.svg + data/images/view-refresh.svg + data/images/volume-icon-muted.svg + data/images/volume-icon-full.svg data/images/volume-slider-bkg.png data/images/volume-slider-level.png data/images/echonest_logo.png - data/images/loading-animation.gif - data/images/info.png - data/images/back.png - data/images/forward.png - data/images/music-icon.png - data/images/configure.png - data/images/private-listening.png - data/images/add.png - data/images/recently-played.png - data/images/supercollection.png - data/images/sipplugin-online.png - data/images/sipplugin-offline.png - data/images/advanced-settings.png - data/images/account-settings.png - data/images/music-settings.png - data/images/resolvers-settings.png - data/images/lastfm-settings.png - data/images/automatic-playlist.png - data/images/station.png - data/images/new-additions.png - data/images/charts.png - data/images/new-releases.png - data/images/loved_playlist.png - data/images/dashboard.png - data/images/artist-icon.png - data/images/album-icon.png - data/images/search-icon.png - data/images/star-hover.png - data/images/starred.png - data/images/star-unstarred.png - data/images/track-icon-22x22.png - data/images/track-icon-32x32.png - data/images/track-icon-16x16.png - data/images/apply-check.png + data/images/info.svg + data/images/back.svg + data/images/forward.svg + data/images/configure.svg + data/images/private-listening.svg + data/images/add.svg + data/images/recently-played.svg + data/images/supercollection.svg + data/images/sipplugin-online.svg + data/images/sipplugin-offline.svg + data/images/advanced-settings.svg + data/images/account-settings.svg + data/images/music-settings.svg + data/images/automatic-playlist.svg + data/images/station.svg + data/images/new-additions.svg + data/images/charts.svg + data/images/new-releases.svg + data/images/loved_playlist.svg + data/images/dashboard.svg + data/images/artist-icon.svg + data/images/album-icon.svg + data/images/track-icon.svg + data/images/search-icon.svg + data/images/star-hover.svg + data/images/starred.svg + data/images/star-unstarred.svg + data/images/apply-check.svg data/stylesheets/topbar-radiobuttons.css data/icons/tomahawk-icon-16x16.png data/icons/tomahawk-icon-32x32.png @@ -118,51 +107,38 @@ data/sql/dbmigrate-27_to_28.sql data/sql/dbmigrate-28_to_29.sql data/js/tomahawk.js - data/images/avatar_frame.png - data/images/drop-all-songs.png - data/images/drop-local-songs.png - data/images/drop-top-songs.png - data/images/drop-song.png - data/images/drop-album.png + data/images/drop-all-songs.svg + data/images/drop-local-songs.svg + data/images/drop-top-songs.svg + data/images/drop-song.svg + data/images/drop-album.svg data/images/spotify-logo.png data/images/itunes.png - data/images/uploading.png - data/images/downloading.png - data/images/headphones.png - data/images/headphones-off.png - data/images/headphones-sidebar.png - data/images/closed-padlock.png - data/images/open-padlock.png - data/images/headphones-bigger.png - data/images/no-album-no-case.png + data/images/uploading.svg + data/images/downloading.svg + data/images/headphones-off.svg + data/images/closed-padlock.svg + data/images/open-padlock.svg + data/images/headphones.svg + data/images/no-album-no-case.svg data/images/rdio.png data/images/grooveshark.png - data/images/lastfm-icon.png + data/images/lastfm-icon.svg data/images/spotifycore-logo.png - data/images/playlist-header-tiled.png - data/images/share.png - data/images/process-stop.png + data/images/share.svg + data/images/process-stop.svg data/icons/tomahawk-icon-128x128-grayscale.png - data/images/collection.png + data/images/collection.svg data/misc/tomahawk_pubkey.pem - data/images/track-icon-sidebar.png - data/images/jump-link.png + data/images/jump-link.svg data/images/scrollbar-vertical-handle.png data/images/scrollbar-horizontal-handle.png - data/images/subscribe-on.png - data/images/subscribe-off.png - data/images/add-contact.png - data/images/account-none.png - data/images/green-dot.png + data/images/subscribe-on.svg + data/images/subscribe-off.svg + data/images/add-contact.svg + data/images/account-none.svg + data/images/green-dot.svg data/images/exfm.png - data/images/soundcloud.png - data/images/resolver-default.png - data/images/spotify-sourceicon.png - data/images/account-offline.png - data/images/account-online.png - data/images/cancel.png - data/images/delete.png - data/images/ok.png data/qml/StationScene.qml data/qml/StationConfig.qml data/qml/StationView.qml @@ -182,5 +158,13 @@ data/qml/stations/CreateByGenre.qml data/qml/tomahawkimports/TagCloud.qml data/qml/tomahawkimports/ScrollBar.qml + data/images/soundcloud.svg + data/images/resolver-default.svg + data/images/spotify-sourceicon.svg + data/images/account-offline.svg + data/images/account-online.svg + data/images/cancel.svg + data/images/delete.svg + data/images/ok.svg diff --git a/src/AudioControls.cpp b/src/AudioControls.cpp index 58316cc83..a7e0f9660 100644 --- a/src/AudioControls.cpp +++ b/src/AudioControls.cpp @@ -20,12 +20,6 @@ #include "AudioControls.h" #include "ui_AudioControls.h" -#include "audio/AudioEngine.h" -#include "playlist/PlaylistView.h" -#include "database/Database.h" -#include "widgets/ImageButton.h" -#include "utils/TomahawkUtilsGui.h" -#include "utils/Logger.h" #include "Album.h" #include "DropJob.h" #include "SocialWidget.h" @@ -33,10 +27,18 @@ #include "ViewManager.h" #include "Source.h" +#include "audio/AudioEngine.h" +#include "playlist/PlaylistView.h" +#include "database/Database.h" +#include "widgets/ImageButton.h" +#include "utils/TomahawkUtilsGui.h" +#include "utils/Logger.h" + #include #include #include #include +#include const static int ALLOWED_MAX_DIVERSION = 300; @@ -55,41 +57,40 @@ AudioControls::AudioControls( QWidget* parent ) setAcceptDrops( true ); QFont font( ui->artistTrackLabel->font() ); - font.setPointSize( TomahawkUtils::defaultFontSize() ); + font.setPointSize( TomahawkUtils::defaultFontSize() + 1 ); + font.setWeight( QFont::Bold ); ui->artistTrackLabel->setFont( font ); ui->artistTrackLabel->setElideMode( Qt::ElideMiddle ); - ui->artistTrackLabel->setType( QueryLabel::ArtistAndTrack ); + ui->artistTrackLabel->setType( QueryLabel::Track ); ui->artistTrackLabel->setJumpLinkVisible( true ); + font.setPointSize( TomahawkUtils::defaultFontSize() ); ui->albumLabel->setFont( font ); - ui->albumLabel->setType( QueryLabel::Album ); + ui->albumLabel->setType( QueryLabel::ArtistAndAlbum ); + font.setWeight( QFont::Normal ); ui->timeLabel->setFont( font ); ui->timeLeftLabel->setFont( font ); - font.setPointSize( TomahawkUtils::defaultFontSize() - 2 ); - - m_defaultSourceIcon = QPixmap( RESPATH "images/resolver-default.png" ); - - ui->prevButton->setPixmap( RESPATH "images/back-rest.png" ); - ui->prevButton->setPixmap( RESPATH "images/back-pressed.png", QIcon::Off, QIcon::Active ); - ui->playPauseButton->setPixmap( RESPATH "images/play-rest.png" ); - ui->playPauseButton->setPixmap( RESPATH "images/play-pressed.png", QIcon::Off, QIcon::Active ); - ui->pauseButton->setPixmap( RESPATH "images/pause-rest.png" ); - ui->pauseButton->setPixmap( RESPATH "images/pause-pressed.png", QIcon::Off, QIcon::Active ); - ui->nextButton->setPixmap( RESPATH "images/skip-rest.png" ); - ui->nextButton->setPixmap( RESPATH "images/skip-pressed.png", QIcon::Off, QIcon::Active ); - ui->shuffleButton->setPixmap( RESPATH "images/shuffle-off-rest.png" ); - ui->shuffleButton->setPixmap( RESPATH "images/shuffle-off-pressed.png", QIcon::Off, QIcon::Active ); - ui->repeatButton->setPixmap( RESPATH "images/repeat-off-rest.png" ); - ui->repeatButton->setPixmap( RESPATH "images/repeat-off-pressed.png", QIcon::Off, QIcon::Active ); - ui->volumeLowButton->setPixmap( RESPATH "images/volume-icon-muted.png" ); - ui->volumeHighButton->setPixmap( RESPATH "images/volume-icon-full.png" ); - ui->socialButton->setPixmap( RESPATH "images/share.png" ); - ui->loveButton->setPixmap( RESPATH "images/not-loved.png" ); + ui->ownerButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultResolver, TomahawkUtils::Original, QSize( 34, 34 ) ) ); + ui->prevButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::PrevButton, TomahawkUtils::Original, QSize( 35, 35 ) ) ); + ui->prevButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::PrevButtonPressed, TomahawkUtils::Original, QSize( 35, 35 ) ), QIcon::Off, QIcon::Active ); + ui->playPauseButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::PlayButton, TomahawkUtils::Original, QSize( 48, 48 ) ) ); + ui->playPauseButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::PlayButtonPressed, TomahawkUtils::Original, QSize( 48, 48 ) ), QIcon::Off, QIcon::Active ); + ui->pauseButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::PauseButton, TomahawkUtils::Original, QSize( 48, 48 ) ) ); + ui->pauseButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::PauseButtonPressed, TomahawkUtils::Original, QSize( 48, 48 ) ), QIcon::Off, QIcon::Active ); + ui->nextButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::NextButton, TomahawkUtils::Original, QSize( 35, 35 ) ) ); + ui->nextButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::NextButtonPressed, TomahawkUtils::Original, QSize( 35, 35 ) ), QIcon::Off, QIcon::Active ); + ui->shuffleButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::ShuffleOff, TomahawkUtils::Original, QSize( 34, 21 ) ) ); + ui->shuffleButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::ShuffleOffPressed, TomahawkUtils::Original, QSize( 34, 21 ) ), QIcon::Off, QIcon::Active ); + ui->repeatButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::RepeatOff, TomahawkUtils::Original, QSize( 34, 21 ) ) ); + ui->repeatButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::RepeatOffPressed, TomahawkUtils::Original, QSize( 34, 21 ) ), QIcon::Off, QIcon::Active ); + ui->volumeLowButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::VolumeMuted, TomahawkUtils::Original, QSize( 18, 18 ) ) ); + ui->volumeHighButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::VolumeFull, TomahawkUtils::Original, QSize( 22, 18 ) ) ); + ui->socialButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::Share, TomahawkUtils::Original, QSize( 20, 20 ) ) ); + ui->loveButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::NotLoved, TomahawkUtils::Original, QSize( 20, 20 ) ) ); ui->loveButton->setCheckable( true ); - ui->ownerButton->setPixmap( m_defaultSourceIcon ); ui->socialButton->setFixedSize( QSize( 20, 20 ) ); ui->loveButton->setFixedSize( QSize( 20, 20 ) ); @@ -122,7 +123,7 @@ AudioControls::AudioControls( QWidget* parent ) connect( ui->repeatButton, SIGNAL( clicked() ), SLOT( onRepeatClicked() ) ); connect( ui->shuffleButton, SIGNAL( clicked() ), SLOT( onShuffleClicked() ) ); - connect( ui->artistTrackLabel, SIGNAL( clickedArtist() ), SLOT( onArtistClicked() ) ); + connect( ui->albumLabel, SIGNAL( clickedArtist() ), SLOT( onArtistClicked() ) ); connect( ui->artistTrackLabel, SIGNAL( clickedTrack() ), SLOT( onTrackClicked() ) ); connect( ui->albumLabel, SIGNAL( clickedAlbum() ), SLOT( onAlbumClicked() ) ); connect( ui->socialButton, SIGNAL( clicked() ), SLOT( onSocialButtonClicked() ) ); @@ -281,6 +282,9 @@ AudioControls::onPlaybackLoading( const Tomahawk::result_ptr& result ) ui->loveButton->setToolTip( tr( "Love" ) ); ui->ownerButton->setToolTip( QString( tr( "Playing from %1" ) ).arg( result->friendlySource() ) ); + // If the ViewManager doesn't know a page for the current interface, we can't offer the jump link + ui->artistTrackLabel->setJumpLinkVisible( ( ViewManager::instance()->pageForInterface( AudioEngine::instance()->currentTrackPlaylist() ) ) ); + onControlStateChanged(); QPixmap sourceIcon = result->sourceIcon( TomahawkUtils::RoundedCorners, ui->ownerButton->size() ); @@ -291,7 +295,7 @@ AudioControls::onPlaybackLoading( const Tomahawk::result_ptr& result ) else { ui->ownerButton->clear(); - ui->ownerButton->setPixmap( m_defaultSourceIcon ); + ui->ownerButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultResolver, TomahawkUtils::Original, QSize( 34, 34 ) ) ); } if ( QUrl( result->linkUrl() ).isValid() || !result->collection().isNull() ) @@ -345,12 +349,12 @@ AudioControls::setSocialActions() { if ( m_currentTrack->toQuery()->loved() ) { - ui->loveButton->setPixmap( RESPATH "images/loved.png" ); + ui->loveButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::Loved, TomahawkUtils::Original, QSize( 20, 20 ) ) ); ui->loveButton->setChecked( true ); } else { - ui->loveButton->setPixmap( RESPATH "images/not-loved.png" ); + ui->loveButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::NotLoved, TomahawkUtils::Original, QSize( 20, 20 ) ) ); ui->loveButton->setChecked( false ); } } @@ -397,7 +401,7 @@ AudioControls::onPlaybackStopped() m_sliderTimeLine.stop(); m_sliderTimeLine.setCurrentTime( 0 ); m_phononTickCheckTimer.stop(); - ui->ownerButton->setPixmap( m_defaultSourceIcon ); + ui->ownerButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultResolver, TomahawkUtils::Original, QSize( 34, 34 ) ) ); ui->stackedLayout->setCurrentWidget( ui->playPauseButton ); ui->loveButton->setEnabled( false ); @@ -519,24 +523,24 @@ AudioControls::onRepeatModeChanged( PlaylistModes::RepeatMode mode ) case PlaylistModes::NoRepeat: { // switch to RepeatOne - ui->repeatButton->setPixmap( RESPATH "images/repeat-off-rest.png" ); - ui->repeatButton->setPixmap( RESPATH "images/repeat-off-pressed.png", QIcon::Off, QIcon::Active ); + ui->repeatButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::RepeatOff, TomahawkUtils::Original, QSize( 34, 21 ) ) ); + ui->repeatButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::RepeatOffPressed, TomahawkUtils::Original, QSize( 34, 21 ) ), QIcon::Off, QIcon::Active ); } break; case PlaylistModes::RepeatOne: { // switch to RepeatAll - ui->repeatButton->setPixmap( RESPATH "images/repeat-1-on-rest.png" ); - ui->repeatButton->setPixmap( RESPATH "images/repeat-1-on-pressed.png", QIcon::Off, QIcon::Active ); + ui->repeatButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::RepeatOne, TomahawkUtils::Original, QSize( 34, 21 ) ) ); + ui->repeatButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::RepeatOnePressed, TomahawkUtils::Original, QSize( 34, 21 ) ), QIcon::Off, QIcon::Active ); } break; case PlaylistModes::RepeatAll: { // switch to NoRepeat - ui->repeatButton->setPixmap( RESPATH "images/repeat-all-on-rest.png" ); - ui->repeatButton->setPixmap( RESPATH "images/repeat-all-on-pressed.png", QIcon::Off, QIcon::Active ); + ui->repeatButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::RepeatAll, TomahawkUtils::Original, QSize( 34, 21 ) ) ); + ui->repeatButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::RepeatAllPressed, TomahawkUtils::Original, QSize( 34, 21 ) ), QIcon::Off, QIcon::Active ); } break; @@ -587,15 +591,15 @@ AudioControls::onShuffleModeChanged( bool enabled ) if ( m_shuffled ) { - ui->shuffleButton->setPixmap( RESPATH "images/shuffle-on-rest.png" ); - ui->shuffleButton->setPixmap( RESPATH "images/shuffle-on-pressed.png", QIcon::Off, QIcon::Active ); + ui->shuffleButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::ShuffleOn, TomahawkUtils::Original, QSize( 34, 21 ) ) ); + ui->shuffleButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::ShuffleOnPressed, TomahawkUtils::Original, QSize( 34, 21 ) ), QIcon::Off, QIcon::Active ); ui->repeatButton->setEnabled( false ); } else { - ui->shuffleButton->setPixmap( RESPATH "images/shuffle-off-rest.png" ); - ui->shuffleButton->setPixmap( RESPATH "images/shuffle-off-pressed.png", QIcon::Off, QIcon::Active ); + ui->shuffleButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::ShuffleOff, TomahawkUtils::Original, QSize( 34, 21 ) ) ); + ui->shuffleButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::ShuffleOffPressed, TomahawkUtils::Original, QSize( 34, 21 ) ), QIcon::Off, QIcon::Active ); ui->repeatButton->setEnabled( true ); } @@ -698,13 +702,13 @@ AudioControls::onLoveButtonClicked( bool checked ) { if ( checked ) { - ui->loveButton->setPixmap( RESPATH "images/loved.png" ); + ui->loveButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::Loved, TomahawkUtils::Original, QSize( 20, 20 ) ) ); m_currentTrack->toQuery()->setLoved( true ); } else { - ui->loveButton->setPixmap( RESPATH "images/not-loved.png" ); + ui->loveButton->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::NotLoved, TomahawkUtils::Original, QSize( 20, 20 ) ) ); m_currentTrack->toQuery()->setLoved( false ); } diff --git a/src/AudioControls.h b/src/AudioControls.h index 0e1b2d05b..00cc1e9da 100644 --- a/src/AudioControls.h +++ b/src/AudioControls.h @@ -101,8 +101,6 @@ private: Tomahawk::PlaylistModes::RepeatMode m_repeatMode; bool m_shuffled; - QPixmap m_defaultSourceIcon; - QTimer m_phononTickCheckTimer; QTimeLine m_sliderTimeLine; bool m_seeked; diff --git a/src/SettingsDialog.cpp b/src/SettingsDialog.cpp index 31ae6ccec..932fd61ec 100644 --- a/src/SettingsDialog.cpp +++ b/src/SettingsDialog.cpp @@ -223,15 +223,18 @@ SettingsDialog::SettingsDialog(QObject *parent ) // ui->checkBoxEnableAdium->hide(); // #endif - m_dialog->addTab( m_accountsWidget, QPixmap( RESPATH "images/account-settings.png" ), tr( "Services" ), tr( "Configure the accounts and services used by Tomahawk " - "to search and retrieve music, find your friends and " - "update your status." ) ); + m_dialog->addTab( m_accountsWidget, TomahawkUtils::defaultPixmap( TomahawkUtils::AccountSettings ), + tr( "Services" ), tr( "Configure the accounts and services used by Tomahawk " + "to search and retrieve music, find your friends and " + "update your status." ) ); - m_dialog->addTab( m_collectionWidget, QPixmap( RESPATH "images/music-settings.png" ), tr( "Collection" ), tr( "Manage how Tomahawk finds music on your computer." )); + m_dialog->addTab( m_collectionWidget, TomahawkUtils::defaultPixmap( TomahawkUtils::MusicSettings ), + tr( "Collection" ), tr( "Manage how Tomahawk finds music on your computer." ) ); - m_dialog->addTab( m_advancedWidget, QPixmap( RESPATH "images/advanced-settings.png" ), tr( "Advanced" ), tr( "Configure Tomahawk's advanced settings, including " - "network connectivity settings, browser interaction " - "and more." ) ); + m_dialog->addTab( m_advancedWidget, TomahawkUtils::defaultPixmap( TomahawkUtils::AdvancedSettings ), + tr( "Advanced" ), tr( "Configure Tomahawk's advanced settings, including " + "network connectivity settings, browser interaction " + "and more." ) ); m_dialog->setCurrentIndex( 0 ); diff --git a/src/SocialWidget.cpp b/src/SocialWidget.cpp index 2d341acd9..a1fe34e59 100644 --- a/src/SocialWidget.cpp +++ b/src/SocialWidget.cpp @@ -23,6 +23,7 @@ #include "GlobalActionManager.h" #include "Source.h" +#include "utils/ImageRegistry.h" #include "utils/TomahawkUtilsGui.h" #include "utils/Logger.h" @@ -66,8 +67,8 @@ SocialWidget::SocialWidget( QWidget* parent ) ui->charsLeftLabel->setForegroundRole( QPalette::Text ); ui->charsLeftLabel->setStyleSheet( "text: black" ); ui->buttonBox->button( QDialogButtonBox::Ok )->setText( tr( "Tweet" ) ); - ui->buttonBox->button( QDialogButtonBox::Ok )->setIcon( QIcon( RESPATH "images/ok.png" ) ); - ui->buttonBox->button( QDialogButtonBox::Cancel )->setIcon( QIcon( RESPATH "images/cancel.png" ) ); + ui->buttonBox->button( QDialogButtonBox::Ok )->setIcon( ImageRegistry::instance()->icon( RESPATH "images/ok.svg" ) ); + ui->buttonBox->button( QDialogButtonBox::Cancel )->setIcon( ImageRegistry::instance()->icon( RESPATH "images/cancel.svg" ) ); ui->textEdit->setStyleSheet( "border: 1px solid " + TomahawkUtils::Colors::BORDER_LINE.name() ); diff --git a/src/TomahawkTrayIcon.cpp b/src/TomahawkTrayIcon.cpp index 36a416187..592c2c64e 100644 --- a/src/TomahawkTrayIcon.cpp +++ b/src/TomahawkTrayIcon.cpp @@ -315,7 +315,7 @@ void TomahawkTrayIcon::onSocialActionsLoaded() { m_loveTrackAction->setText( tr( "&Love" ) ); - m_loveTrackAction->setIcon( QIcon( RESPATH "images/loved.png" ) ); + m_loveTrackAction->setIcon( QIcon( RESPATH "images/loved.svg" ) ); if ( !m_currentTrack ) return; @@ -323,7 +323,7 @@ TomahawkTrayIcon::onSocialActionsLoaded() if ( m_currentTrack->toQuery()->loved() ) { m_loveTrackAction->setText( tr( "Un-&Love" ) ); - m_loveTrackAction->setIcon( QIcon( RESPATH "images/not-loved.png" ) ); + m_loveTrackAction->setIcon( QIcon( RESPATH "images/not-loved.svg" ) ); } } diff --git a/src/TomahawkWindow.cpp b/src/TomahawkWindow.cpp index d40d51b3b..72f2475bf 100644 --- a/src/TomahawkWindow.cpp +++ b/src/TomahawkWindow.cpp @@ -22,47 +22,6 @@ #include "TomahawkWindow.h" #include "ui_TomahawkWindow.h" -#include "accounts/AccountManager.h" -#include "sourcetree/SourceTreeView.h" -#include "network/Servent.h" -#include "utils/TomahawkUtilsGui.h" -#include "utils/ProxyStyle.h" -#include "utils/WidgetDragFilter.h" -#include "widgets/AccountsToolButton.h" -#include "widgets/AnimatedSplitter.h" -#include "widgets/NewPlaylistWidget.h" -#include "widgets/SearchWidget.h" -#include "widgets/PlaylistTypeSelectorDialog.h" -#include "thirdparty/Qocoa/qsearchfield.h" -#include "playlist/dynamic/GeneratorInterface.h" -#include "playlist/PlaylistModel.h" -#include "playlist/PlaylistView.h" -#include "playlist/QueueView.h" -#include "jobview/JobStatusView.h" -#include "jobview/JobStatusModel.h" -#include "jobview/ErrorStatusMessage.h" -#include "jobview/JobStatusModel.h" -#include "sip/SipPlugin.h" - -#include "Playlist.h" -#include "Query.h" -#include "Artist.h" -#include "ViewManager.h" -#include "ActionCollection.h" -#include "AudioControls.h" -#include "SettingsDialog.h" -#include "DiagnosticsDialog.h" -#include "TomahawkSettings.h" -#include "SourceList.h" -#include "TomahawkTrayIcon.h" -#include "libtomahawk/filemetadata/ScanManager.h" -#include "TomahawkApp.h" -#include "LoadXSPFDialog.h" -#include "widgets/ContainedMenuButton.h" -#include "utils/Logger.h" - -#include "config.h" - #include #include #include @@ -79,6 +38,48 @@ #include #include +#include "accounts/AccountManager.h" +#include "sourcetree/SourceTreeView.h" +#include "network/Servent.h" +#include "utils/TomahawkUtilsGui.h" +#include "utils/ProxyStyle.h" +#include "utils/WidgetDragFilter.h" +#include "widgets/AccountsToolButton.h" +#include "widgets/AnimatedSplitter.h" +#include "widgets/NewPlaylistWidget.h" +#include "widgets/SearchWidget.h" +#include "widgets/PlaylistTypeSelectorDialog.h" +#include "widgets/ContainedMenuButton.h" +#include "thirdparty/Qocoa/qsearchfield.h" +#include "playlist/dynamic/GeneratorInterface.h" +#include "playlist/PlaylistModel.h" +#include "playlist/PlaylistView.h" +#include "playlist/QueueView.h" +#include "jobview/JobStatusView.h" +#include "jobview/JobStatusModel.h" +#include "jobview/ErrorStatusMessage.h" +#include "jobview/JobStatusModel.h" +#include "sip/SipPlugin.h" +#include "filemetadata/ScanManager.h" + +#include "Playlist.h" +#include "Query.h" +#include "Artist.h" +#include "ViewManager.h" +#include "ActionCollection.h" +#include "AudioControls.h" +#include "SettingsDialog.h" +#include "DiagnosticsDialog.h" +#include "TomahawkSettings.h" +#include "SourceList.h" +#include "TomahawkTrayIcon.h" +#include "TomahawkApp.h" +#include "LoadXSPFDialog.h" +#include "utils/ImageRegistry.h" +#include "utils/Logger.h" + +#include "config.h" + #if defined( Q_WS_WIN ) #if defined ( WITH_QtSparkle ) #include @@ -262,9 +263,9 @@ TomahawkWindow::setupToolBar() m_toolbar->installEventFilter( new WidgetDragFilter( m_toolbar ) ); #endif - m_backAction = m_toolbar->addAction( QIcon( RESPATH "images/back.png" ), tr( "Back" ), ViewManager::instance(), SLOT( historyBack() ) ); + m_backAction = m_toolbar->addAction( ImageRegistry::instance()->icon( RESPATH "images/back.svg" ), tr( "Back" ), ViewManager::instance(), SLOT( historyBack() ) ); m_backAction->setToolTip( tr( "Go back one page" ) ); - m_forwardAction = m_toolbar->addAction( QIcon( RESPATH "images/forward.png" ), tr( "Forward" ), ViewManager::instance(), SLOT( historyForward() ) ); + m_forwardAction = m_toolbar->addAction( ImageRegistry::instance()->icon( RESPATH "images/forward.svg" ), tr( "Forward" ), ViewManager::instance(), SLOT( historyForward() ) ); m_forwardAction->setToolTip( tr( "Go forward one page" ) ); m_toolbarLeftBalancer = new QWidget( this ); @@ -300,7 +301,7 @@ TomahawkWindow::setupToolBar() #ifndef Q_OS_MAC ContainedMenuButton* compactMenuButton = new ContainedMenuButton( m_toolbar ); - compactMenuButton->setIcon( QIcon( RESPATH "images/configure.png" ) ); + compactMenuButton->setIcon( ImageRegistry::instance()->icon( RESPATH "images/configure.svg" ) ); compactMenuButton->setText( tr( "&Main Menu" ) ); compactMenuButton->setMenu( m_compactMainMenu ); compactMenuButton->setToolButtonStyle( Qt::ToolButtonIconOnly ); @@ -445,30 +446,22 @@ TomahawkWindow::setupWindowsButtons() const GUID IID_ITaskbarList3 = { 0xea1afb91,0x9e28,0x4b86, { 0x90,0xe9,0x9e,0x9f,0x8a,0x5e,0xef,0xaf } }; HRESULT hr = S_OK; - QPixmap play( RESPATH "images/play-rest.png" ); - QPixmap back( RESPATH "images/back-rest.png" ); - QPixmap love( RESPATH "images/not-loved.png" ); - - QTransform transform; - transform.rotate( 180 ); - QPixmap next( back.transformed( transform ) ); - THUMBBUTTONMASK dwMask = THUMBBUTTONMASK( THB_ICON | THB_TOOLTIP | THB_FLAGS ); m_thumbButtons[TP_PREVIOUS].dwMask = dwMask; m_thumbButtons[TP_PREVIOUS].iId = TP_PREVIOUS; - m_thumbButtons[TP_PREVIOUS].hIcon = back.toWinHICON(); + m_thumbButtons[TP_PREVIOUS].hIcon = thumbIcon(TomahawkUtils::PrevButton); m_thumbButtons[TP_PREVIOUS].dwFlags = THBF_ENABLED; m_thumbButtons[TP_PREVIOUS].szTip[ tr( "Back" ).toWCharArray( m_thumbButtons[TP_PREVIOUS].szTip ) ] = 0; m_thumbButtons[TP_PLAY_PAUSE].dwMask = dwMask; m_thumbButtons[TP_PLAY_PAUSE].iId = TP_PLAY_PAUSE; - m_thumbButtons[TP_PLAY_PAUSE].hIcon = play.toWinHICON(); + m_thumbButtons[TP_PLAY_PAUSE].hIcon = thumbIcon(TomahawkUtils::PlayButton); m_thumbButtons[TP_PLAY_PAUSE].dwFlags = THBF_ENABLED; m_thumbButtons[TP_PLAY_PAUSE].szTip[ tr( "Play" ).toWCharArray( m_thumbButtons[TP_PLAY_PAUSE].szTip ) ] = 0; m_thumbButtons[TP_NEXT].dwMask = dwMask; m_thumbButtons[TP_NEXT].iId = TP_NEXT; - m_thumbButtons[TP_NEXT].hIcon = next.toWinHICON(); + m_thumbButtons[TP_NEXT].hIcon = thumbIcon(TomahawkUtils::NextButton); m_thumbButtons[TP_NEXT].dwFlags = THBF_ENABLED; m_thumbButtons[TP_NEXT].szTip[ tr( "Next" ).toWCharArray( m_thumbButtons[TP_NEXT].szTip ) ] = 0; @@ -480,7 +473,7 @@ TomahawkWindow::setupWindowsButtons() m_thumbButtons[TP_LOVE].dwMask = dwMask; m_thumbButtons[TP_LOVE].iId = TP_LOVE; - m_thumbButtons[TP_LOVE].hIcon = love.toWinHICON(); + m_thumbButtons[TP_LOVE].hIcon = thumbIcon(TomahawkUtils::NotLoved); m_thumbButtons[TP_LOVE].dwFlags = THBF_DISABLED; m_thumbButtons[TP_LOVE].szTip[ tr( "Love" ).toWCharArray( m_thumbButtons[TP_LOVE].szTip ) ] = 0; @@ -503,6 +496,18 @@ TomahawkWindow::setupWindowsButtons() return false; #endif } + +HICON +TomahawkWindow::thumbIcon(TomahawkUtils::ImageType type) +{ + static QMap thumbIcons; + if(!thumbIcons.contains( type ) ) + { + QPixmap pix ( TomahawkUtils::defaultPixmap(type , TomahawkUtils::Original, QSize( 20, 20 ) ) ); + thumbIcons[type] = pix.toWinHICON(); + } + return thumbIcons[type]; +} #endif @@ -722,46 +727,41 @@ TomahawkWindow::audioStateChanged( AudioState newState, AudioState oldState ) #ifdef HAVE_THUMBBUTTON if ( m_taskbarList == 0 ) return; - switch ( newState ) { - case AudioEngine::Playing: - { - QPixmap pause( RESPATH "images/pause-rest.png" ); - m_thumbButtons[TP_PLAY_PAUSE].hIcon = pause.toWinHICON(); - m_thumbButtons[TP_PLAY_PAUSE].szTip[ tr( "Pause" ).toWCharArray( m_thumbButtons[TP_PLAY_PAUSE].szTip ) ] = 0; - updateWindowsLoveButton(); + case AudioEngine::Playing: + { + m_thumbButtons[TP_PLAY_PAUSE].hIcon = thumbIcon(TomahawkUtils::PauseButton); + m_thumbButtons[TP_PLAY_PAUSE].szTip[ tr( "Pause" ).toWCharArray( m_thumbButtons[TP_PLAY_PAUSE].szTip ) ] = 0; + updateWindowsLoveButton(); - } + } break; - case AudioEngine::Paused: - { - QPixmap play( RESPATH "images/play-rest.png" ); - m_thumbButtons[TP_PLAY_PAUSE].hIcon = play.toWinHICON(); - m_thumbButtons[TP_PLAY_PAUSE].szTip[ tr( "Play" ).toWCharArray( m_thumbButtons[TP_PLAY_PAUSE].szTip ) ] = 0; - } + case AudioEngine::Paused: + { + m_thumbButtons[TP_PLAY_PAUSE].hIcon = thumbIcon(TomahawkUtils::PlayButton); + m_thumbButtons[TP_PLAY_PAUSE].szTip[ tr( "Play" ).toWCharArray( m_thumbButtons[TP_PLAY_PAUSE].szTip ) ] = 0; + } break; - case AudioEngine::Stopped: + case AudioEngine::Stopped: + { + if ( !AudioEngine::instance()->currentTrack().isNull() ) { - if ( !AudioEngine::instance()->currentTrack().isNull() ) - { - disconnect( AudioEngine::instance()->currentTrack()->toQuery().data(), SIGNAL( socialActionsLoaded() ), this, SLOT( updateWindowsLoveButton() ) ); - } - - QPixmap play( RESPATH "images/play-rest.png" ); - m_thumbButtons[TP_PLAY_PAUSE].hIcon = play.toWinHICON(); - m_thumbButtons[TP_PLAY_PAUSE].szTip[ tr( "Play" ).toWCharArray( m_thumbButtons[TP_PLAY_PAUSE].szTip ) ] = 0; - - QPixmap not_loved( RESPATH "images/not-loved.png" ); - m_thumbButtons[TP_LOVE].hIcon = not_loved.toWinHICON(); - m_thumbButtons[TP_LOVE].dwFlags = THBF_DISABLED; + disconnect( AudioEngine::instance()->currentTrack()->toQuery().data(), SIGNAL( socialActionsLoaded() ), this, SLOT( updateWindowsLoveButton() ) ); } + + m_thumbButtons[TP_PLAY_PAUSE].hIcon = thumbIcon(TomahawkUtils::PlayButton); + m_thumbButtons[TP_PLAY_PAUSE].szTip[ tr( "Play" ).toWCharArray( m_thumbButtons[TP_PLAY_PAUSE].szTip ) ] = 0; + + m_thumbButtons[TP_LOVE].hIcon = thumbIcon(TomahawkUtils::NotLoved); + m_thumbButtons[TP_LOVE].dwFlags = THBF_DISABLED; + } break; - default: - return; + default: + return; } m_taskbarList->ThumbBarUpdateButtons( winId(), ARRAYSIZE( m_thumbButtons ), m_thumbButtons ); @@ -775,14 +775,12 @@ TomahawkWindow::updateWindowsLoveButton() #ifdef HAVE_THUMBBUTTON if ( !AudioEngine::instance()->currentTrack().isNull() && AudioEngine::instance()->currentTrack()->toQuery()->loved() ) { - QPixmap loved( RESPATH "images/loved.png" ); - m_thumbButtons[TP_LOVE].hIcon = loved.toWinHICON(); + m_thumbButtons[TP_LOVE].hIcon = thumbIcon(TomahawkUtils::Loved); m_thumbButtons[TP_LOVE].szTip[ tr( "Unlove" ).toWCharArray( m_thumbButtons[TP_LOVE].szTip ) ] = 0; } else { - QPixmap not_loved( RESPATH "images/not-loved.png" ); - m_thumbButtons[TP_LOVE].hIcon = not_loved.toWinHICON(); + m_thumbButtons[TP_LOVE].hIcon = thumbIcon(TomahawkUtils::NotLoved); m_thumbButtons[TP_LOVE].szTip[ tr( "Love" ).toWCharArray( m_thumbButtons[TP_LOVE].szTip ) ] = 0; } @@ -1121,7 +1119,7 @@ TomahawkWindow::audioStarted() { m_audioRetryCounter = 0; - ActionCollection::instance()->getAction( "playPause" )->setIcon( QIcon( RESPATH "images/pause-rest.png" ) ); + ActionCollection::instance()->getAction( "playPause" )->setIcon( ImageRegistry::instance()->icon( RESPATH "images/pause-rest.svg" ) ); ActionCollection::instance()->getAction( "playPause" )->setText( tr( "Pause" ) ); ActionCollection::instance()->getAction( "stop" )->setEnabled( true ); @@ -1143,7 +1141,7 @@ TomahawkWindow::audioFinished() void TomahawkWindow::audioPaused() { - ActionCollection::instance()->getAction( "playPause" )->setIcon( QIcon( RESPATH "images/play-rest.png" ) ); + ActionCollection::instance()->getAction( "playPause" )->setIcon( ImageRegistry::instance()->icon( RESPATH "images/play-rest.svg" ) ); ActionCollection::instance()->getAction( "playPause" )->setText( tr( "&Play" ) ); } diff --git a/src/TomahawkWindow.h b/src/TomahawkWindow.h index 9a836a5a0..b76e35713 100644 --- a/src/TomahawkWindow.h +++ b/src/TomahawkWindow.h @@ -167,6 +167,7 @@ private: #ifdef Q_OS_WIN bool setupWindowsButtons(); const unsigned int m_buttonCreatedID; + HICON thumbIcon(TomahawkUtils::ImageType type); #ifdef HAVE_THUMBBUTTON ITaskbarList3* m_taskbarList; THUMBBUTTON m_thumbButtons[5]; diff --git a/src/infoplugins/generic/echonest/EchonestPlugin.cpp b/src/infoplugins/generic/echonest/EchonestPlugin.cpp index b0e1ec65c..da2c96439 100644 --- a/src/infoplugins/generic/echonest/EchonestPlugin.cpp +++ b/src/infoplugins/generic/echonest/EchonestPlugin.cpp @@ -38,7 +38,7 @@ EchonestPlugin::EchonestPlugin() : InfoPlugin() { qDebug() << Q_FUNC_INFO; - m_supportedGetTypes << Tomahawk::InfoSystem::InfoArtistBiography << Tomahawk::InfoSystem::InfoArtistFamiliarity << Tomahawk::InfoSystem::InfoArtistHotttness << Tomahawk::InfoSystem::InfoArtistTerms << Tomahawk::InfoSystem::InfoMiscTopTerms; + m_supportedGetTypes << Tomahawk::InfoSystem::InfoArtistFamiliarity << Tomahawk::InfoSystem::InfoArtistHotttness << Tomahawk::InfoSystem::InfoArtistTerms << Tomahawk::InfoSystem::InfoMiscTopTerms; } @@ -102,10 +102,17 @@ EchonestPlugin::getSongProfile( const Tomahawk::InfoSystem::InfoRequestData &req void EchonestPlugin::getArtistBiography( const Tomahawk::InfoSystem::InfoRequestData &requestData ) { - if( !isValidArtistData( requestData ) ) + if ( !requestData.input.canConvert< Tomahawk::InfoSystem::InfoStringHash >() ) + { return; + } + InfoStringHash hash = requestData.input.value< Tomahawk::InfoSystem::InfoStringHash >(); + if ( !hash.contains( "artist" ) ) + { + return; + } - Echonest::Artist artist( requestData.input.toString() ); + Echonest::Artist artist( hash["artist"] ); QNetworkReply *reply = artist.fetchBiographies(); reply->setProperty( "artist", QVariant::fromValue< Echonest::Artist >( artist ) ); reply->setProperty( "requestData", QVariant::fromValue< Tomahawk::InfoSystem::InfoRequestData >( requestData ) ); @@ -180,7 +187,6 @@ EchonestPlugin::getArtistBiographySlot() siteData[ "text" ] = biography.text(); siteData[ "attribution" ] = biography.license().attribution; siteData[ "licensetype" ] = biography.license().type; - siteData[ "attribution" ] = biography.license().url.toString(); biographyMap[ biography.site() ] = siteData; } Tomahawk::InfoSystem::InfoRequestData requestData = reply->property( "requestData" ).value< Tomahawk::InfoSystem::InfoRequestData >(); @@ -307,4 +313,4 @@ EchonestPlugin::artistFromReply( QNetworkReply* reply ) } //ns Tomahawk -Q_EXPORT_PLUGIN2( Tomahawk::InfoSystem::InfoPlugin, Tomahawk::InfoSystem::EchonestPlugin ) \ No newline at end of file +Q_EXPORT_PLUGIN2( Tomahawk::InfoSystem::InfoPlugin, Tomahawk::InfoSystem::EchonestPlugin ) diff --git a/src/libtomahawk/ActionCollection.cpp b/src/libtomahawk/ActionCollection.cpp index 7dd304a41..f777be9f9 100644 --- a/src/libtomahawk/ActionCollection.cpp +++ b/src/libtomahawk/ActionCollection.cpp @@ -20,11 +20,13 @@ */ #include "ActionCollection.h" + #include "TomahawkSettings.h" +#include "Source.h" #include "audio/AudioEngine.h" +#include "utils/ImageRegistry.h" #include "utils/TomahawkUtils.h" #include "utils/Logger.h" -#include "Source.h" #include @@ -55,10 +57,10 @@ void ActionCollection::initActions() { QAction *latchOn = new QAction( tr( "&Listen Along" ), this ); - latchOn->setIcon( QIcon( RESPATH "images/headphones-sidebar.png" ) ); + latchOn->setIcon( ImageRegistry::instance()->icon( RESPATH "images/headphones.svg" ) ); m_actionCollection[ "latchOn" ] = latchOn; QAction *latchOff = new QAction( tr( "Stop &Listening Along" ), this ); - latchOff->setIcon( QIcon( RESPATH "images/headphones-off.png" ) ); + latchOff->setIcon( ImageRegistry::instance()->icon( RESPATH "images/headphones-off.svg" ) ); m_actionCollection[ "latchOff" ] = latchOff; QAction *realtimeFollowingAlong = new QAction( tr( "&Follow in real-time" ), this ); @@ -67,7 +69,7 @@ ActionCollection::initActions() bool isPublic = TomahawkSettings::instance()->privateListeningMode() == TomahawkSettings::PublicListening; QAction *privacyToggle = new QAction( ( isPublic ? tr( "&Listen Privately" ) : tr( "&Listen Publicly" ) ), this ); - privacyToggle->setIcon( QIcon( RESPATH "images/private-listening.png" ) ); + privacyToggle->setIcon( ImageRegistry::instance()->icon( RESPATH "images/private-listening.svg" ) ); privacyToggle->setIconVisibleInMenu( isPublic ); m_actionCollection[ "togglePrivacy" ] = privacyToggle; connect( m_actionCollection[ "togglePrivacy" ], SIGNAL( triggered() ), SLOT( togglePrivateListeningMode() ), Qt::UniqueConnection ); @@ -76,14 +78,14 @@ ActionCollection::initActions() m_actionCollection[ "renamePlaylist" ] = new QAction( tr( "&Rename Playlist" ), this ); m_actionCollection[ "copyPlaylist" ] = new QAction( tr( "&Copy Playlist Link" ), this ); m_actionCollection[ "playPause" ] = new QAction( tr( "&Play" ), this ); - m_actionCollection[ "playPause" ]->setIcon( QIcon( RESPATH "images/play-rest.png" ) ); + m_actionCollection[ "playPause" ]->setIcon( ImageRegistry::instance()->icon( RESPATH "images/play-rest.svg" ) ); m_actionCollection[ "playPause" ]->setShortcut( Qt::Key_Space ); m_actionCollection[ "playPause" ]->setShortcutContext( Qt::ApplicationShortcut ); m_actionCollection[ "stop" ] = new QAction( tr( "&Stop" ), this ); m_actionCollection[ "previousTrack" ] = new QAction( tr( "&Previous Track" ), this ); - m_actionCollection[ "previousTrack" ]->setIcon( QIcon( RESPATH "images/back-rest.png" ) ); + m_actionCollection[ "previousTrack" ]->setIcon( ImageRegistry::instance()->icon( RESPATH "images/back-rest.svg" ) ); m_actionCollection[ "nextTrack" ] = new QAction( tr( "&Next Track" ), this ); - m_actionCollection[ "nextTrack" ]->setIcon( QIcon( RESPATH "images/skip-rest.png" ) ); + m_actionCollection[ "nextTrack" ]->setIcon( ImageRegistry::instance()->icon( RESPATH "images/skip-rest.svg" ) ); m_actionCollection[ "quit" ] = new QAction( tr( "&Quit" ), this ); m_actionCollection[ "quit" ]->setShortcut( QKeySequence::Quit ); m_actionCollection[ "quit" ]->setShortcutContext( Qt::ApplicationShortcut ); @@ -103,7 +105,7 @@ ActionCollection::initActions() m_actionCollection[ "showOfflineSources" ] = new QAction( tr( "Show Offline Sources" ), this ); m_actionCollection[ "showOfflineSources" ]->setCheckable( true ); m_actionCollection[ "preferences" ] = new QAction( tr( "&Configure Tomahawk..." ), this ); - m_actionCollection[ "preferences" ]->setIcon( QIcon( RESPATH "images/configure.png" ) ); + m_actionCollection[ "preferences" ]->setIcon( ImageRegistry::instance()->icon( RESPATH "images/configure.svg" ) ); m_actionCollection[ "preferences" ]->setMenuRole( QAction::PreferencesRole ); #ifdef Q_OS_MAC m_actionCollection[ "minimize" ] = new QAction( tr( "Minimize" ), this ); @@ -118,7 +120,7 @@ ActionCollection::initActions() m_actionCollection[ "diagnostics" ] = new QAction( tr( "Diagnostics..." ), this ); m_actionCollection[ "diagnostics" ]->setMenuRole( QAction::ApplicationSpecificRole ); m_actionCollection[ "aboutTomahawk" ] = new QAction( tr( "About &Tomahawk..." ), this ); - m_actionCollection[ "aboutTomahawk" ]->setIcon( QIcon( RESPATH "images/info.png" ) ); + m_actionCollection[ "aboutTomahawk" ]->setIcon( ImageRegistry::instance()->icon( RESPATH "images/info.svg" ) ); m_actionCollection[ "aboutTomahawk" ]->setMenuRole( QAction::AboutRole ); m_actionCollection[ "legalInfo" ] = new QAction( tr( "&Legal Information..." ), this ); m_actionCollection[ "legalInfo" ]->setMenuRole( QAction::ApplicationSpecificRole ); diff --git a/src/libtomahawk/Album.cpp b/src/libtomahawk/Album.cpp index a4afa7a7d..54e23118a 100644 --- a/src/libtomahawk/Album.cpp +++ b/src/libtomahawk/Album.cpp @@ -27,6 +27,7 @@ #include "Query.h" #include "Source.h" +#include "utils/TomahawkUtilsGui.h" #include "utils/Logger.h" #include @@ -255,8 +256,11 @@ Album::cover( const QSize& size, bool forceLoad ) const if ( !m_cover && !m_coverBuffer.isEmpty() ) { - m_cover = new QPixmap(); - m_cover->loadFromData( m_coverBuffer ); + QPixmap cover; + cover.loadFromData( m_coverBuffer ); + m_coverBuffer.clear(); + + m_cover = new QPixmap( TomahawkUtils::squareCenterPixmap( cover ) ); } if ( m_cover && !m_cover->isNull() && !size.isEmpty() ) diff --git a/src/libtomahawk/Album.h b/src/libtomahawk/Album.h index 77d50efd5..bdb3b05b4 100644 --- a/src/libtomahawk/Album.h +++ b/src/libtomahawk/Album.h @@ -95,13 +95,13 @@ private: QString m_sortname; artist_ptr m_artist; - QByteArray m_coverBuffer; bool m_coverLoaded; mutable bool m_coverLoading; mutable QString m_uuid; mutable QString m_coverId; + mutable QByteArray m_coverBuffer; #ifndef ENABLE_HEADLESS mutable QPixmap* m_cover; mutable QHash< int, QPixmap > m_coverCache; diff --git a/src/libtomahawk/AlbumPlaylistInterface.cpp b/src/libtomahawk/AlbumPlaylistInterface.cpp index fb2596ef5..d2290e297 100644 --- a/src/libtomahawk/AlbumPlaylistInterface.cpp +++ b/src/libtomahawk/AlbumPlaylistInterface.cpp @@ -36,7 +36,6 @@ using namespace Tomahawk; AlbumPlaylistInterface::AlbumPlaylistInterface( Tomahawk::Album* album, Tomahawk::ModelMode mode, const Tomahawk::collection_ptr& collection ) : Tomahawk::PlaylistInterface() , m_currentItem( 0 ) - , m_currentTrack( 0 ) , m_infoSystemLoaded( false ) , m_databaseLoaded( false ) , m_mode( mode ) @@ -55,7 +54,8 @@ AlbumPlaylistInterface::~AlbumPlaylistInterface() void AlbumPlaylistInterface::setCurrentIndex( qint64 index ) { - m_currentTrack = index; + PlaylistInterface::setCurrentIndex( index ); + m_currentItem = m_queries.at( index )->results().first(); } @@ -63,7 +63,7 @@ AlbumPlaylistInterface::setCurrentIndex( qint64 index ) qint64 AlbumPlaylistInterface::siblingIndex( int itemsAway, qint64 rootIndex ) const { - qint64 p = m_currentTrack; + qint64 p = m_currentIndex; if ( rootIndex >= 0 ) p = rootIndex; @@ -181,6 +181,7 @@ AlbumPlaylistInterface::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData re Pipeline::instance()->resolve( ql ); m_queries << ql; + checkQueries(); } break; @@ -243,6 +244,8 @@ AlbumPlaylistInterface::onTracksLoaded( const QList< query_ptr >& tracks ) else m_queries << tracks; + checkQueries(); + m_finished = true; emit tracksLoaded( m_mode, m_collection ); } @@ -301,3 +304,13 @@ AlbumPlaylistInterface::resultAt( qint64 index ) const return Tomahawk::result_ptr(); } + + +void +AlbumPlaylistInterface::checkQueries() +{ + foreach ( const Tomahawk::query_ptr& query, m_queries ) + { + connect( query.data(), SIGNAL( playableStateChanged( bool ) ), SLOT( onItemsChanged() ), Qt::UniqueConnection ); + } +} diff --git a/src/libtomahawk/AlbumPlaylistInterface.h b/src/libtomahawk/AlbumPlaylistInterface.h index 83a52ee46..a63f41f17 100644 --- a/src/libtomahawk/AlbumPlaylistInterface.h +++ b/src/libtomahawk/AlbumPlaylistInterface.h @@ -70,9 +70,10 @@ private slots: void infoSystemFinished( const QString& infoId ); private: + void checkQueries(); + QList< Tomahawk::query_ptr > m_queries; mutable result_ptr m_currentItem; - mutable qint64 m_currentTrack; bool m_infoSystemLoaded; bool m_databaseLoaded; diff --git a/src/libtomahawk/Artist.cpp b/src/libtomahawk/Artist.cpp index 2aadd453c..79f0b0a34 100644 --- a/src/libtomahawk/Artist.cpp +++ b/src/libtomahawk/Artist.cpp @@ -28,6 +28,7 @@ #include "database/IdThreadWorker.h" #include "Source.h" +#include "utils/TomahawkUtilsGui.h" #include "utils/Logger.h" #include @@ -322,13 +323,14 @@ Artist::biography() const { if ( !m_biographyLoaded ) { + Tomahawk::InfoSystem::InfoStringHash trackInfo; + trackInfo["artist"] = name(); + Tomahawk::InfoSystem::InfoRequestData requestData; requestData.caller = uniqueId(); - requestData.customData = QVariantMap(); - - requestData.input = name(); requestData.type = Tomahawk::InfoSystem::InfoArtistBiography; - requestData.requestId = TomahawkUtils::infosystemRequestId(); + requestData.input = QVariant::fromValue< Tomahawk::InfoSystem::InfoStringHash >( trackInfo ); + requestData.customData = QVariantMap(); connect( Tomahawk::InfoSystem::InfoSystem::instance(), SIGNAL( info( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ), @@ -482,7 +484,6 @@ Artist::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData requestData, QVari case InfoSystem::InfoArtistBiography: { QVariantMap bmap = output.toMap(); - foreach ( const QString& source, bmap.keys() ) { if ( source == "last.fm" ) @@ -558,9 +559,11 @@ Artist::cover( const QSize& size, bool forceLoad ) const if ( !m_cover && !m_coverBuffer.isEmpty() ) { - m_cover = new QPixmap(); - m_cover->loadFromData( m_coverBuffer ); + QPixmap cover; + cover.loadFromData( m_coverBuffer ); m_coverBuffer.clear(); + + m_cover = new QPixmap( TomahawkUtils::squareCenterPixmap( cover ) ); } if ( m_cover && !m_cover->isNull() && !size.isEmpty() ) diff --git a/src/libtomahawk/ArtistPlaylistInterface.cpp b/src/libtomahawk/ArtistPlaylistInterface.cpp index 033093930..451764fe5 100644 --- a/src/libtomahawk/ArtistPlaylistInterface.cpp +++ b/src/libtomahawk/ArtistPlaylistInterface.cpp @@ -35,7 +35,6 @@ using namespace Tomahawk; ArtistPlaylistInterface::ArtistPlaylistInterface( Tomahawk::Artist* artist, Tomahawk::ModelMode mode, const Tomahawk::collection_ptr& collection ) : Tomahawk::PlaylistInterface() , m_currentItem( 0 ) - , m_currentTrack( 0 ) , m_infoSystemLoaded( false ) , m_databaseLoaded( false ) , m_mode( mode ) @@ -54,15 +53,16 @@ ArtistPlaylistInterface::~ArtistPlaylistInterface() void ArtistPlaylistInterface::setCurrentIndex( qint64 index ) { - m_currentTrack = index; - m_currentItem = m_queries.at( index )->results().first(); + PlaylistInterface::setCurrentIndex( index ); + + m_currentItem = m_queries.at( index )->results().first(); } qint64 ArtistPlaylistInterface::siblingIndex( int itemsAway, qint64 rootIndex ) const { - qint64 p = m_currentTrack; + qint64 p = m_currentIndex; if ( rootIndex >= 0 ) p = rootIndex; @@ -162,6 +162,7 @@ ArtistPlaylistInterface::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData r Pipeline::instance()->resolve( ql ); m_queries << ql; + checkQueries(); } break; @@ -223,6 +224,8 @@ ArtistPlaylistInterface::onTracksLoaded( const QList< query_ptr >& tracks ) else m_queries << tracks; + checkQueries(); + m_finished = true; emit tracksLoaded( m_mode, m_collection ); } @@ -281,3 +284,13 @@ ArtistPlaylistInterface::resultAt( qint64 index ) const return Tomahawk::result_ptr(); } + + +void +ArtistPlaylistInterface::checkQueries() +{ + foreach ( const Tomahawk::query_ptr& query, m_queries ) + { + connect( query.data(), SIGNAL( playableStateChanged( bool ) ), SLOT( onItemsChanged() ), Qt::UniqueConnection ); + } +} diff --git a/src/libtomahawk/ArtistPlaylistInterface.h b/src/libtomahawk/ArtistPlaylistInterface.h index dd0508a51..c728f1c2a 100644 --- a/src/libtomahawk/ArtistPlaylistInterface.h +++ b/src/libtomahawk/ArtistPlaylistInterface.h @@ -69,9 +69,10 @@ private slots: private: Q_DISABLE_COPY( ArtistPlaylistInterface ) + void checkQueries(); + QList< Tomahawk::query_ptr > m_queries; mutable result_ptr m_currentItem; - mutable qint64 m_currentTrack; bool m_infoSystemLoaded; bool m_databaseLoaded; diff --git a/src/libtomahawk/CMakeLists.txt b/src/libtomahawk/CMakeLists.txt index 88ff0657e..77328cef5 100644 --- a/src/libtomahawk/CMakeLists.txt +++ b/src/libtomahawk/CMakeLists.txt @@ -4,6 +4,7 @@ SET( QT_USE_QTGUI TRUE ) SET( QT_USE_QTSQL TRUE ) SET( QT_USE_QTNETWORK TRUE ) SET( QT_USE_QTXML TRUE ) +SET( QT_USE_QTSVG TRUE ) SET( QT_USE_QTUITOOLS TRUE ) SET( QT_USE_QTDECLARATIVE TRUE ) @@ -96,6 +97,7 @@ set( libGuiSources resolvers/ScriptResolver.cpp resolvers/QtScriptResolver.cpp + utils/ImageRegistry.cpp utils/WidgetDragFilter.cpp utils/XspfGenerator.cpp utils/JspfLoader.cpp @@ -146,6 +148,7 @@ set( libGuiSources widgets/ComboBox.cpp widgets/ToggleButton.cpp widgets/FadingPixmap.cpp + widgets/PlayableCover.cpp widgets/SocialPlaylistWidget.cpp widgets/SourceTreePopupDialog.cpp widgets/DeclarativeCoverArtProvider.cpp @@ -180,6 +183,7 @@ set( libSources FuncTimeout.cpp Playlist.cpp PlaylistPlaylistInterface.cpp + MetaPlaylistInterface.cpp Resolver.cpp ExternalResolver.cpp Query.cpp @@ -466,6 +470,7 @@ TARGET_LINK_LIBRARIES( tomahawklib ${QT_QTSCRIPT_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${QT_QTXML_LIBRARY} + ${QT_QTSVG_LIBRARY} ${QT_QTCORE_LIBRARY} ${QT_QTDECLARATIVE_LIBRARY} ${OS_SPECIFIC_LINK_LIBRARIES} diff --git a/src/libtomahawk/ContextMenu.cpp b/src/libtomahawk/ContextMenu.cpp index 4fef0daa6..eefad6b0f 100644 --- a/src/libtomahawk/ContextMenu.cpp +++ b/src/libtomahawk/ContextMenu.cpp @@ -18,8 +18,10 @@ #include "ContextMenu.h" -#include "GlobalActionManager.h" +#include "audio/AudioEngine.h" #include "playlist/PlaylistView.h" +#include "filemetadata/MetadataEditor.h" +#include "GlobalActionManager.h" #include "ViewManager.h" #include "Query.h" #include "Result.h" @@ -28,9 +30,8 @@ #include "Artist.h" #include "Album.h" +#include "utils/ImageRegistry.h" #include "utils/Logger.h" -#include "audio/AudioEngine.h" -#include "filemetadata/MetadataEditor.h" using namespace Tomahawk; @@ -104,14 +105,21 @@ ContextMenu::setQueries( const QList& queries ) onSocialActionsLoaded(); } - if ( m_supportedActions & ActionCopyLink && itemCount() == 1 ) - m_sigmap->setMapping( addAction( tr( "&Copy Track Link" ) ), ActionCopyLink ); + addSeparator(); if ( m_supportedActions & ActionPage && itemCount() == 1 ) - m_sigmap->setMapping( addAction( tr( "&Show Track Page" ) ), ActionPage ); + { + m_sigmap->setMapping( addAction( tr( "&Go to \"%1\"" ).arg( m_queries.first()->track() ) ), ActionTrackPage ); + if ( !m_queries.first()->album().isEmpty() ) + m_sigmap->setMapping( addAction( tr( "Go to \"%1\"" ).arg( m_queries.first()->album() ) ), ActionAlbumPage ); + m_sigmap->setMapping( addAction( tr( "Go to \"%1\"" ).arg( m_queries.first()->artist() ) ), ActionArtistPage ); + } addSeparator(); + if ( m_supportedActions & ActionCopyLink && itemCount() == 1 ) + m_sigmap->setMapping( addAction( tr( "&Copy Track Link" ) ), ActionCopyLink ); + if ( m_supportedActions & ActionEditMetadata && itemCount() == 1 ) m_sigmap->setMapping( addAction( tr( "Properties..." ) ), ActionEditMetadata ); @@ -149,14 +157,16 @@ ContextMenu::setAlbums( const QList& albums ) m_albums.clear(); m_albums << albums; -/* if ( m_supportedActions & ActionPlay && itemCount() == 1 ) - m_sigmap->setMapping( addAction( tr( "Show &Album Page" ) ), ActionPlay );*/ - if ( m_supportedActions & ActionQueue ) m_sigmap->setMapping( addAction( tr( "Add to &Queue" ) ), ActionQueue ); + addSeparator(); + if ( m_supportedActions & ActionPage && itemCount() == 1 ) - m_sigmap->setMapping( addAction( tr( "&Show Album Page" ) ), ActionPage ); + { + m_sigmap->setMapping( addAction( tr( "&Go to \"%1\"" ).arg( m_albums.first()->name() ) ), ActionAlbumPage ); + m_sigmap->setMapping( addAction( tr( "Go to \"%1\"" ).arg( m_albums.first()->artist()->name() ) ), ActionArtistPage ); + } //m_sigmap->setMapping( addAction( tr( "&Add to Playlist" ) ), ActionAddToPlaylist ); @@ -197,8 +207,10 @@ ContextMenu::setArtists( const QList& artists ) if ( m_supportedActions & ActionQueue ) m_sigmap->setMapping( addAction( tr( "Add to &Queue" ) ), ActionQueue ); + addSeparator(); + if ( m_supportedActions & ActionPage && itemCount() == 1 ) - m_sigmap->setMapping( addAction( tr( "&Show Artist Page" ) ), ActionPage ); + m_sigmap->setMapping( addAction( tr( "&Go to \"%1\"" ).arg( m_artists.first()->name() ) ), ActionArtistPage ); //m_sigmap->setMapping( addAction( tr( "&Add to Playlist" ) ), ActionAddToPlaylist ); @@ -236,8 +248,10 @@ ContextMenu::onTriggered( int action ) copyLink(); break; - case ActionPage: - openPage(); + case ActionTrackPage: + case ActionArtistPage: + case ActionAlbumPage: + openPage( (MenuActions)action ); break; case ActionLove: @@ -304,20 +318,42 @@ ContextMenu::copyLink() void -ContextMenu::openPage() +ContextMenu::openPage( MenuActions action ) { if ( m_queries.count() ) { - ViewManager::instance()->show( m_queries.first() ); + if ( action == ActionTrackPage ) + { + ViewManager::instance()->show( m_queries.first() ); + } + else + { + const Tomahawk::artist_ptr artist = Artist::get( m_queries.first()->artist(), false ); + if ( action == ActionArtistPage ) + { + ViewManager::instance()->show( artist ); + } + else if ( action == ActionAlbumPage ) + { + ViewManager::instance()->show( Album::get( artist, m_queries.first()->album(), false ) ); + } + } + } + else if ( m_albums.count() ) + { + if ( action == ActionArtistPage ) + { + ViewManager::instance()->show( m_albums.first()->artist() ); + } + else + { + ViewManager::instance()->show( m_albums.first() ); + } } else if ( m_artists.count() ) { ViewManager::instance()->show( m_artists.first() ); } - else if ( m_albums.count() ) - { - ViewManager::instance()->show( m_albums.first() ); - } } @@ -330,12 +366,12 @@ ContextMenu::onSocialActionsLoaded() if ( m_loveAction && m_queries.first()->loved() ) { m_loveAction->setText( tr( "Un-&Love" ) ); - m_loveAction->setIcon( QIcon( RESPATH "images/not-loved.png" ) ); + m_loveAction->setIcon( ImageRegistry::instance()->icon( RESPATH "images/not-loved.svg" ) ); } else if ( m_loveAction ) { m_loveAction->setText( tr( "&Love" ) ); - m_loveAction->setIcon( QIcon( RESPATH "images/loved.png" ) ); + m_loveAction->setIcon( ImageRegistry::instance()->icon( RESPATH "images/loved.svg" ) ); } } diff --git a/src/libtomahawk/ContextMenu.h b/src/libtomahawk/ContextMenu.h index 3e59ee908..f12fef5b3 100644 --- a/src/libtomahawk/ContextMenu.h +++ b/src/libtomahawk/ContextMenu.h @@ -43,6 +43,9 @@ public: ActionLove = 16, ActionStopAfter = 32, ActionPage = 64, + ActionTrackPage = 65, + ActionArtistPage = 66, + ActionAlbumPage = 67, ActionEditMetadata = 128 }; @@ -73,7 +76,7 @@ signals: private slots: void onTriggered( int action ); void copyLink(); - void openPage(); + void openPage( MenuActions action ); void addToQueue(); void onSocialActionsLoaded(); diff --git a/src/libtomahawk/EchonestCatalogSynchronizer.cpp b/src/libtomahawk/EchonestCatalogSynchronizer.cpp index cc7fcf1a3..45f4c7657 100644 --- a/src/libtomahawk/EchonestCatalogSynchronizer.cpp +++ b/src/libtomahawk/EchonestCatalogSynchronizer.cpp @@ -18,6 +18,9 @@ #include "EchonestCatalogSynchronizer.h" +#include +#include + #include "Collection.h" #include "database/Database.h" #include "database/DatabaseImpl.h" @@ -27,9 +30,7 @@ #include "TomahawkSettings.h" #include "SourceList.h" #include "Query.h" - -#include -#include +#include "utils/Logger.h" using namespace Tomahawk; diff --git a/src/libtomahawk/GlobalActionManager.cpp b/src/libtomahawk/GlobalActionManager.cpp index 0a0de6172..1d61ba259 100644 --- a/src/libtomahawk/GlobalActionManager.cpp +++ b/src/libtomahawk/GlobalActionManager.cpp @@ -311,6 +311,7 @@ GlobalActionManager::parseTomahawkLink( const QString& urlIn ) { QString cmd = url.mid( 11 ); cmd.replace( "%2B", "%20" ); + cmd.replace( "+", "%20" ); // QUrl doesn't parse '+' into " " tLog() << "Parsing tomahawk link command" << cmd; QString cmdType = cmd.split( "/" ).first(); @@ -810,19 +811,21 @@ bool GlobalActionManager::handleViewCommand( const QUrl& url ) { QStringList parts = url.path().split( "/" ).mid( 1 ); // get the rest of the command - if ( parts.isEmpty() ) { + if ( parts.isEmpty() ) + { tLog() << "No specific view command:" << url.toString(); return false; } if ( parts[ 0 ] == "artist" ) { - const QString artist = url.queryItemValue( "name" ); + const QString artist = QUrl::fromPercentEncoding( url.encodedQueryItemValue( "name" ) ).replace( "+", " " ); if ( artist.isEmpty() ) { - tLog() << "Not artist supplied for view/artist command."; + tLog() << "No artist supplied for view/artist command."; return false; } + artist_ptr artistPtr = Artist::get( artist ); if ( !artistPtr.isNull() ) ViewManager::instance()->show( artistPtr ); @@ -831,19 +834,37 @@ GlobalActionManager::handleViewCommand( const QUrl& url ) } else if ( parts[ 0 ] == "album" ) { - const QString artist = url.queryItemValue( "artist" ); - const QString album = url.queryItemValue( "name" ); + const QString artist = QUrl::fromPercentEncoding( url.encodedQueryItemValue( "artist" ) ).replace( "+", " " ); + const QString album = QUrl::fromPercentEncoding( url.encodedQueryItemValue( "name" ) ).replace( "+", " " ); if ( artist.isEmpty() || album.isEmpty() ) { - tLog() << "Not artist or album supplied for view/artist command:" << url; + tLog() << "No artist or album supplied for view/album command:" << url; return false; } + album_ptr albumPtr = Album::get( Artist::get( artist, false ), album, false ); if ( !albumPtr.isNull() ) ViewManager::instance()->show( albumPtr ); return true; } + else if ( parts[ 0 ] == "track" ) + { + const QString artist = QUrl::fromPercentEncoding( url.encodedQueryItemValue( "artist" ) ).replace( "+", " " ); + const QString album = QUrl::fromPercentEncoding( url.encodedQueryItemValue( "album" ) ).replace( "+", " " ); + const QString track = QUrl::fromPercentEncoding( url.encodedQueryItemValue( "name" ) ).replace( "+", " " ); + if ( artist.isEmpty() || track.isEmpty() ) + { + tLog() << "No artist or track supplied for view/track command:" << url; + return false; + } + + query_ptr queryPtr = Query::get( artist, track, album ); + if ( !queryPtr.isNull() ) + ViewManager::instance()->show( queryPtr ); + + return true; + } return false; } @@ -1423,7 +1444,6 @@ GlobalActionManager::percentEncode( const QUrl& url ) const data.replace( "'", "%27" ); // QUrl doesn't encode ', which it doesn't have to. Some apps don't like ' though, and want %27. Both are valid. data.replace( "%20", "+" ); - data.replace( "&", "%26" ); return data; } diff --git a/src/libtomahawk/MetaPlaylistInterface.cpp b/src/libtomahawk/MetaPlaylistInterface.cpp new file mode 100644 index 000000000..98dc5626e --- /dev/null +++ b/src/libtomahawk/MetaPlaylistInterface.cpp @@ -0,0 +1,181 @@ +/* === This file is part of Tomahawk Player - === + * + * Copyright 2012, Christian Muehlhaeuser + * + * Tomahawk is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Tomahawk is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Tomahawk. If not, see . + */ + +#include "MetaPlaylistInterface.h" +#include "Result.h" +#include "Pipeline.h" +#include "Source.h" +#include "utils/Logger.h" + +using namespace Tomahawk; + + +MetaPlaylistInterface::MetaPlaylistInterface() + : Tomahawk::PlaylistInterface() +{ +} + + +MetaPlaylistInterface::~MetaPlaylistInterface() +{ +} + + +void +MetaPlaylistInterface::addChildInterface( const Tomahawk::playlistinterface_ptr& interface ) +{ + m_childInterfaces << interface; + + if ( m_childInterfaces.count() == 1 ) + { + connect( interface.data(), SIGNAL( repeatModeChanged( Tomahawk::PlaylistModes::RepeatMode ) ), + SIGNAL( repeatModeChanged( Tomahawk::PlaylistModes::RepeatMode ) ) ); + + connect( interface.data(), SIGNAL( shuffleModeChanged( bool ) ), + SIGNAL( shuffleModeChanged( bool ) ) ); + } +} + + +QList< Tomahawk::query_ptr > +MetaPlaylistInterface::tracks() const +{ + if ( m_childInterfaces.count() ) + return m_childInterfaces.first()->tracks(); + else + return QList< Tomahawk::query_ptr >(); +} + + +int +MetaPlaylistInterface::trackCount() const +{ + if ( m_childInterfaces.count() ) + return m_childInterfaces.first()->trackCount(); + else + return 0; +} + + +result_ptr +MetaPlaylistInterface::currentItem() const +{ + if ( m_childInterfaces.count() ) + return m_childInterfaces.first()->currentItem(); + else + return Tomahawk::result_ptr(); +} + + +qint64 +MetaPlaylistInterface::siblingIndex( int itemsAway, qint64 rootIndex ) const +{ + if ( m_childInterfaces.count() ) + return m_childInterfaces.first()->siblingIndex( itemsAway, rootIndex ); + else + return -1; +} + + +Tomahawk::query_ptr +MetaPlaylistInterface::queryAt( qint64 index ) const +{ + if ( m_childInterfaces.count() ) + return m_childInterfaces.first()->queryAt( index ); + else + return Tomahawk::query_ptr(); +} + + +Tomahawk::result_ptr +MetaPlaylistInterface::resultAt( qint64 index ) const +{ + if ( m_childInterfaces.count() ) + return m_childInterfaces.first()->resultAt( index ); + else + return Tomahawk::result_ptr(); +} + + +qint64 +MetaPlaylistInterface::indexOfResult( const Tomahawk::result_ptr& result ) const +{ + if ( m_childInterfaces.count() ) + return m_childInterfaces.first()->indexOfResult( result ); + else + return -1; +} + + +qint64 +MetaPlaylistInterface::indexOfQuery( const Tomahawk::query_ptr& query ) const +{ + if ( m_childInterfaces.count() ) + return m_childInterfaces.first()->indexOfQuery( query ); + else + return -1; +} + + +PlaylistModes::RepeatMode +MetaPlaylistInterface::repeatMode() const +{ + if ( m_childInterfaces.count() ) + return m_childInterfaces.first()->repeatMode(); + else + return PlaylistModes::NoRepeat; +} + + +bool +MetaPlaylistInterface::shuffled() const +{ + if ( m_childInterfaces.count() ) + return m_childInterfaces.first()->shuffled(); + else + return false; +} + + +bool +MetaPlaylistInterface::hasChildInterface( const Tomahawk::playlistinterface_ptr& interface ) +{ + foreach ( const Tomahawk::playlistinterface_ptr& iface, m_childInterfaces ) + { + if ( iface == interface || iface->hasChildInterface( interface ) ) + return true; + } + + return false; +} + + +void +MetaPlaylistInterface::setRepeatMode( PlaylistModes::RepeatMode mode ) +{ + if ( m_childInterfaces.count() ) + return m_childInterfaces.first()->setRepeatMode( mode ); +} + + +void +MetaPlaylistInterface::setShuffled( bool enabled ) +{ + if ( m_childInterfaces.count() ) + return m_childInterfaces.first()->setShuffled( enabled ); +} diff --git a/src/libtomahawk/MetaPlaylistInterface.h b/src/libtomahawk/MetaPlaylistInterface.h new file mode 100644 index 000000000..cf7bb9030 --- /dev/null +++ b/src/libtomahawk/MetaPlaylistInterface.h @@ -0,0 +1,66 @@ +/* === This file is part of Tomahawk Player - === + * + * Copyright 2012, Christian Muehlhaeuser + * + * Tomahawk is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Tomahawk is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Tomahawk. If not, see . + */ + +#ifndef METAPLAYLISTINTERFACE_H +#define METAPLAYLISTINTERFACE_H + +#include + +#include "PlaylistInterface.h" +#include "playlist/PlayableItem.h" +#include "Typedefs.h" +#include "DllMacro.h" + +namespace Tomahawk +{ + +class DLLEXPORT MetaPlaylistInterface : public PlaylistInterface +{ +Q_OBJECT + +public: + explicit MetaPlaylistInterface(); + virtual ~MetaPlaylistInterface(); + + void addChildInterface( const Tomahawk::playlistinterface_ptr& interface ); + + virtual QList< Tomahawk::query_ptr > tracks() const; + virtual int trackCount() const; + virtual Tomahawk::result_ptr currentItem() const; + virtual qint64 siblingIndex( int itemsAway, qint64 rootIndex = -1 ) const; + virtual Tomahawk::result_ptr resultAt( qint64 index ) const; + virtual Tomahawk::query_ptr queryAt( qint64 index ) const; + virtual qint64 indexOfResult( const Tomahawk::result_ptr& result ) const; + virtual qint64 indexOfQuery( const Tomahawk::query_ptr& query ) const; + + virtual PlaylistModes::RepeatMode repeatMode() const; + virtual bool shuffled() const; + + virtual bool hasChildInterface( const Tomahawk::playlistinterface_ptr& interface ); + +public slots: + virtual void setRepeatMode( PlaylistModes::RepeatMode mode ); + virtual void setShuffled( bool enabled ); + +private: + QList< Tomahawk::playlistinterface_ptr > m_childInterfaces; +}; + +} + +#endif // METAPLAYLISTINTERFACE_H diff --git a/src/libtomahawk/PlaylistInterface.cpp b/src/libtomahawk/PlaylistInterface.cpp index 0e7af24c7..15a1798e9 100644 --- a/src/libtomahawk/PlaylistInterface.cpp +++ b/src/libtomahawk/PlaylistInterface.cpp @@ -1,5 +1,6 @@ /* === This file is part of Tomahawk Player - === * + * Copyright 2010-2012, Christian Muehlhaeuser * Copyright 2011, Leo Franchi * Copyright 2010-2012, Jeff Mitchell * @@ -18,18 +19,21 @@ */ #include "PlaylistInterface.h" -#include "utils/Logger.h" #include "Result.h" #include "Pipeline.h" #include "Source.h" +#include "utils/Logger.h" using namespace Tomahawk; -PlaylistInterface::PlaylistInterface () +PlaylistInterface::PlaylistInterface() : QObject() , m_latchMode( PlaylistModes::StayOnSong ) , m_finished( false ) + , m_prevAvail( false ) + , m_nextAvail( false ) + , m_currentIndex( -1 ) { m_id = uuid(); } @@ -55,28 +59,24 @@ PlaylistInterface::nextResult() const Tomahawk::result_ptr -PlaylistInterface::siblingResult( int itemsAway ) const +PlaylistInterface::siblingResult( int itemsAway, qint64 rootIndex ) const { - qint64 idx = siblingIndex( itemsAway ); - qint64 safetyCheck = -1; + qint64 idx = siblingIndex( itemsAway, rootIndex ); + QList< qint64 > safetyCheck; - // If safetyCheck equals idx, this means the interface keeps returning the same item and we won't discover anything new - abort + // If safetyCheck contains idx, this means the interface keeps returning the same items and we won't discover anything new - abort // This can happen in repeat / random mode e.g. - while ( idx >= 0 && safetyCheck != idx ) + while ( idx >= 0 && !safetyCheck.contains( idx ) ) { - safetyCheck = idx; + safetyCheck << idx; Tomahawk::query_ptr query = queryAt( idx ); - if ( query && query->numResults() ) + + if ( query && query->playable() ) { return query->results().first(); } - if ( itemsAway < 0 ) - itemsAway--; - else - itemsAway++; - - idx = siblingIndex( itemsAway ); + idx = siblingIndex( itemsAway < 0 ? -1 : 1, idx ); } return Tomahawk::result_ptr(); @@ -159,12 +159,68 @@ PlaylistInterface::filterTracks( const QList& queries ) bool PlaylistInterface::hasNextResult() const { - return ( siblingResult( 1 ) ); + Tomahawk::result_ptr r = siblingResult( 1 ); + return ( r && r->isOnline() ); } bool PlaylistInterface::hasPreviousResult() const { - return ( siblingResult( -1 ) ); + Tomahawk::result_ptr r = siblingResult( -1 ); + return ( r && r->isOnline() ); +} + + +void +PlaylistInterface::onItemsChanged() +{ + if ( QThread::currentThread() != thread() ) + { + QMetaObject::invokeMethod( this, "onItemsChanged", Qt::QueuedConnection ); + return; + } + + Tomahawk::result_ptr prevResult = siblingResult( -1, m_currentIndex ); + Tomahawk::result_ptr nextResult = siblingResult( 1, m_currentIndex ); + + if ( prevResult ) + { + bool avail = prevResult->toQuery()->playable(); + if ( avail != m_prevAvail ) + { + m_prevAvail = avail; + emit previousTrackAvailable(); + } + } + else if ( m_prevAvail ) + { + m_prevAvail = false; + emit previousTrackAvailable(); + } + + if ( nextResult ) + { + bool avail = nextResult->toQuery()->playable(); + if ( avail != m_nextAvail ) + { + m_nextAvail = avail; + emit nextTrackAvailable(); + } + } + else if ( m_nextAvail ) + { + m_nextAvail = false; + emit nextTrackAvailable(); + } +} + + +void +PlaylistInterface::setCurrentIndex( qint64 index ) +{ + m_currentIndex = index; + + emit currentIndexChanged(); + onItemsChanged(); } diff --git a/src/libtomahawk/PlaylistInterface.h b/src/libtomahawk/PlaylistInterface.h index 8c557f8c3..fd52aa56f 100644 --- a/src/libtomahawk/PlaylistInterface.h +++ b/src/libtomahawk/PlaylistInterface.h @@ -1,6 +1,6 @@ /* === This file is part of Tomahawk Player - === * - * Copyright 2010-2011, Christian Muehlhaeuser + * Copyright 2010-2012, Christian Muehlhaeuser * Copyright 2010-2012, Jeff Mitchell * * Tomahawk is free software: you can redistribute it and/or modify @@ -25,7 +25,6 @@ #include "playlist/PlayableItem.h" #include "Typedefs.h" #include "DllMacro.h" -#include "utils/Logger.h" namespace Tomahawk { @@ -46,7 +45,7 @@ public: virtual int trackCount() const = 0; virtual Tomahawk::result_ptr currentItem() const = 0; - virtual void setCurrentIndex( qint64 index ) = 0; + virtual void setCurrentIndex( qint64 index ); virtual bool hasNextResult() const; virtual bool hasPreviousResult() const; @@ -54,7 +53,7 @@ public: virtual Tomahawk::result_ptr previousResult() const; virtual qint64 siblingIndex( int itemsAway, qint64 rootIndex = -1 ) const = 0; - virtual Tomahawk::result_ptr siblingResult( int itemsAway ) const; + virtual Tomahawk::result_ptr siblingResult( int itemsAway, qint64 rootIndex = -1 ) const; virtual Tomahawk::result_ptr resultAt( qint64 index ) const = 0; virtual Tomahawk::query_ptr queryAt( qint64 index ) const = 0; @@ -85,7 +84,7 @@ public: //TODO: Get rid of the next two functions once all playlsitinterfaces are factored out // Some playlist interfaces can wrap other interfaces. When checking for top-level // equality (say, to compare the currently playing interface) this might be needed - virtual bool hasChildInterface( Tomahawk::playlistinterface_ptr ) { return false; } + virtual bool hasChildInterface( const Tomahawk::playlistinterface_ptr& ) { return false; } public slots: virtual void setRepeatMode( PlaylistModes::RepeatMode mode ) = 0; @@ -100,11 +99,19 @@ signals: void previousTrackAvailable(); void nextTrackAvailable(); + void currentIndexChanged(); + +protected slots: + virtual void onItemsChanged(); + protected: virtual QList filterTracks( const QList& queries ); PlaylistModes::LatchMode m_latchMode; bool m_finished; + mutable bool m_prevAvail; + mutable bool m_nextAvail; + mutable qint64 m_currentIndex; private: Q_DISABLE_COPY( PlaylistInterface ) diff --git a/src/libtomahawk/ViewManager.cpp b/src/libtomahawk/ViewManager.cpp index f6d4da347..2ad25342c 100644 --- a/src/libtomahawk/ViewManager.cpp +++ b/src/libtomahawk/ViewManager.cpp @@ -392,7 +392,7 @@ ViewManager::showRecentPlaysPage() if ( !m_recentPlaysWidget ) { FlexibleView* pv = new FlexibleView( m_widget ); - pv->setPixmap( QPixmap( RESPATH "images/recently-played.png" ) ); + pv->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::RecentlyPlayed ) ); RecentlyPlayedModel* raModel = new RecentlyPlayedModel( pv ); raModel->setTitle( tr( "Recently Played Tracks" ) ); diff --git a/src/libtomahawk/accounts/AccountDelegate.cpp b/src/libtomahawk/accounts/AccountDelegate.cpp index 8996b9aa9..b8816c989 100644 --- a/src/libtomahawk/accounts/AccountDelegate.cpp +++ b/src/libtomahawk/accounts/AccountDelegate.cpp @@ -26,7 +26,7 @@ #include "accounts/Account.h" #include "accounts/AccountManager.h" -#include "utils/TomahawkUtils.h" +#include "utils/ImageRegistry.h" #include "utils/TomahawkUtilsGui.h" #include "utils/Logger.h" #include "utils/AnimatedSpinner.h" @@ -60,23 +60,6 @@ AccountDelegate::AccountDelegate( QObject* parent ) , m_accountRowHeight( -1 ) , m_model( 0 ) { - m_defaultCover.load( RESPATH "images/sipplugin-online.png" ); - m_ratingStarPositive.load( RESPATH "images/starred.png" ); - m_ratingStarNegative.load( RESPATH "images/star-unstarred.png" ); - m_onHoverStar.load( RESPATH "images/star-hover.png" ); - m_onlineIcon.load( RESPATH "images/sipplugin-online.png" ); - m_offlineIcon.load( RESPATH "images/sipplugin-offline.png" ); - m_removeIcon.load( RESPATH "images/list-remove.png" ); - - m_ratingStarPositive = m_ratingStarPositive.scaled( STAR_SIZE, STAR_SIZE, Qt::KeepAspectRatio, Qt::SmoothTransformation ); - m_ratingStarNegative = m_ratingStarNegative.scaled( STAR_SIZE, STAR_SIZE, Qt::KeepAspectRatio, Qt::SmoothTransformation ); - m_onlineIcon = m_onlineIcon.scaled( STATUS_ICON_SIZE, STATUS_ICON_SIZE, Qt::KeepAspectRatio, Qt::SmoothTransformation ); - m_offlineIcon = m_offlineIcon.scaled( STATUS_ICON_SIZE, STATUS_ICON_SIZE, Qt::KeepAspectRatio, Qt::SmoothTransformation ); - m_onHoverStar = m_onHoverStar.scaled( STAR_SIZE, STAR_SIZE, Qt::KeepAspectRatio, Qt::SmoothTransformation ); - m_removeIcon = m_removeIcon.scaled( REMOVE_ICON_SIZE, REMOVE_ICON_SIZE, Qt::KeepAspectRatio, Qt::SmoothTransformation ); - - m_defaultCover = m_defaultCover.scaled( ICONSIZE, ICONSIZE, Qt::KeepAspectRatio, Qt::SmoothTransformation ); - } @@ -188,7 +171,7 @@ AccountDelegate::paint ( QPainter* painter, const QStyleOptionViewItem& option, QPixmap p = index.data( Qt::DecorationRole ).value< QPixmap >(); QRect pixmapRect( leftEdge + PADDING, center - ICONSIZE/2, ICONSIZE, ICONSIZE ); if ( p.isNull() ) // default image... TODO - p = m_defaultCover; + p = TomahawkUtils::defaultPixmap( TomahawkUtils::SipPluginOnline, TomahawkUtils::Original, pixmapRect.size() ); else p = p.scaled( pixmapRect.size(), Qt::KeepAspectRatio, Qt::SmoothTransformation ); @@ -267,7 +250,6 @@ AccountDelegate::paint ( QPainter* painter, const QStyleOptionViewItem& option, rightEdge = drawStatus( painter, QPointF( rightEdge, center - painter->fontMetrics().height()/2 ), accts.first(), true ); } - } else if ( canDelete ) { @@ -353,7 +335,7 @@ AccountDelegate::paint ( QPainter* painter, const QStyleOptionViewItem& option, int starsTop = runningBottom + PADDING; for ( int i = 1; i < 6; i++ ) { - QRect r( runningEdge, starsTop, m_ratingStarPositive.width(), m_ratingStarPositive.height() ); + QRect r( runningEdge, starsTop, STAR_SIZE, STAR_SIZE ); // QRect r( runningEdge, opt.rect.top() + PADDING, m_ratingStarPositive.width(), m_ratingStarPositive.height() ); if ( i == 1 ) m_cachedStarRects[ index ] = r; @@ -364,23 +346,23 @@ AccountDelegate::paint ( QPainter* painter, const QStyleOptionViewItem& option, m_hoveringItem == index ) { if ( i <= m_hoveringOver ) // positive star - painter->drawPixmap( r, m_onHoverStar ); + painter->drawPixmap( r, TomahawkUtils::defaultPixmap( TomahawkUtils::StarHovered, TomahawkUtils::Original, r.size() ) ); else - painter->drawPixmap( r, m_ratingStarNegative ); + painter->drawPixmap( r, TomahawkUtils::defaultPixmap( TomahawkUtils::Unstarred, TomahawkUtils::Original, r.size() ) ); } else { if ( i <= rating ) // positive or rated star { if ( userHasRated ) - painter->drawPixmap( r, m_onHoverStar ); + painter->drawPixmap( r, TomahawkUtils::defaultPixmap( TomahawkUtils::StarHovered, TomahawkUtils::Original, r.size() ) ); else - painter->drawPixmap( r, m_ratingStarPositive ); + painter->drawPixmap( r, TomahawkUtils::defaultPixmap( TomahawkUtils::Starred, TomahawkUtils::Original, r.size() ) ); } else - painter->drawPixmap( r, m_ratingStarNegative ); + painter->drawPixmap( r, TomahawkUtils::defaultPixmap( TomahawkUtils::Unstarred, TomahawkUtils::Original, r.size() ) ); } - runningEdge += m_ratingStarPositive.width() + PADDING_BETWEEN_STARS; + runningEdge += STAR_SIZE + PADDING_BETWEEN_STARS; } // downloaded num times @@ -511,7 +493,7 @@ AccountDelegate::editorEvent( QEvent* event, QAbstractItemModel* model, const QS if ( m_cachedStarRects.contains( index ) ) { QRect fullStars = m_cachedStarRects[ index ]; - const int starsWidth = 5 * ( m_ratingStarPositive.width() + PADDING_BETWEEN_STARS ); + const int starsWidth = 5 * ( STAR_SIZE + PADDING_BETWEEN_STARS ); fullStars.setWidth( starsWidth ); QMouseEvent* me = static_cast< QMouseEvent* >( event ); @@ -563,26 +545,26 @@ AccountDelegate::drawStatus( QPainter* painter, const QPointF& rightTopEdge, Acc QPixmap p; QString statusText; + const int yPos = rightTopEdge.y(); + const QRect connectIconRect( rightTopEdge.x() - STATUS_ICON_SIZE, yPos, STATUS_ICON_SIZE, STATUS_ICON_SIZE ); const Account::ConnectionState state = acct->connectionState(); + if ( state == Account::Connected ) { - p = m_onlineIcon; + p = TomahawkUtils::defaultPixmap( TomahawkUtils::SipPluginOnline, TomahawkUtils::Original, connectIconRect.size() ); statusText = tr( "Online" ); } else if ( state == Account::Connecting ) { - p = m_offlineIcon; + p = TomahawkUtils::defaultPixmap( TomahawkUtils::SipPluginOffline, TomahawkUtils::Original, connectIconRect.size() ); statusText = tr( "Connecting..." ); } else { - p = m_offlineIcon; + p = TomahawkUtils::defaultPixmap( TomahawkUtils::SipPluginOffline, TomahawkUtils::Original, connectIconRect.size() ); statusText = tr( "Offline" ); } - const int yPos = rightTopEdge.y(); - const QRect connectIconRect( rightTopEdge.x() - STATUS_ICON_SIZE, yPos, STATUS_ICON_SIZE, STATUS_ICON_SIZE ); - if ( state == Account::Connecting ) { if ( !m_connectingSpinners.contains( acct ) ) @@ -637,7 +619,7 @@ AccountDelegate::drawConfigWrench ( QPainter* painter, QStyleOptionViewItemV4& o // draw it the same size as the check belox topt.font = opt.font; - topt.icon = QIcon( RESPATH "images/configure.png" ); + topt.icon = ImageRegistry::instance()->icon( RESPATH "images/configure.svg" ); topt.iconSize = QSize( 14, 14 ); topt.subControls = QStyle::SC_ToolButton; topt.activeSubControls = QStyle::SC_None; diff --git a/src/libtomahawk/accounts/AccountDelegate.h b/src/libtomahawk/accounts/AccountDelegate.h index 1b70a7df6..ab5cc86ef 100644 --- a/src/libtomahawk/accounts/AccountDelegate.h +++ b/src/libtomahawk/accounts/AccountDelegate.h @@ -46,7 +46,6 @@ public slots: void doneInstalling ( const QPersistentModelIndex& idx ); void errorInstalling ( const QPersistentModelIndex& idx ); - void doUpdateIndex( const QPersistentModelIndex& idx ); protected: @@ -71,7 +70,6 @@ private: QRect checkRectForIndex( const QStyleOptionViewItem &option, const QModelIndex &idx ) const; - QPixmap m_offlineIcon, m_onlineIcon, m_defaultCover, m_onHoverStar, m_ratingStarPositive, m_ratingStarNegative, m_removeIcon; int m_hoveringOver; QPersistentModelIndex m_hoveringItem, m_configPressed; mutable QHash< QPersistentModelIndex, QRect > m_cachedButtonRects; @@ -86,6 +84,7 @@ private: }; } + } #endif // ACCOUNTDELEGATE_H diff --git a/src/libtomahawk/accounts/AccountFactoryWrapperDelegate.cpp b/src/libtomahawk/accounts/AccountFactoryWrapperDelegate.cpp index 2b61599c5..e70b53af0 100644 --- a/src/libtomahawk/accounts/AccountFactoryWrapperDelegate.cpp +++ b/src/libtomahawk/accounts/AccountFactoryWrapperDelegate.cpp @@ -17,10 +17,12 @@ */ #include "AccountFactoryWrapperDelegate.h" -#include "accounts/Account.h" + #include "AccountFactoryWrapper.h" -#include "utils/TomahawkUtils.h" #include "Source.h" +#include "accounts/Account.h" +#include "utils/ImageRegistry.h" +#include "utils/TomahawkUtils.h" #include #include @@ -32,20 +34,13 @@ using namespace Tomahawk::Accounts; #define CONFIG_WRENCH_SIZE 20 #define PADDING 4 + AccountFactoryWrapperDelegate::AccountFactoryWrapperDelegate( QObject* parent ) : QStyledItemDelegate( parent ) { - m_removePixmap.load( RESPATH "images/list-remove.png" ); - m_onlineIcon.load( RESPATH "images/sipplugin-online.png" ); - m_offlineIcon.load( RESPATH "images/sipplugin-offline.png" ); - - m_removePixmap = m_removePixmap.scaled( ICON_SIZE, ICON_SIZE, Qt::KeepAspectRatio, Qt::SmoothTransformation ); - m_onlineIcon = m_onlineIcon.scaled( ICON_SIZE, ICON_SIZE, Qt::KeepAspectRatio, Qt::SmoothTransformation ); - m_offlineIcon = m_offlineIcon.scaled( ICON_SIZE, ICON_SIZE, Qt::KeepAspectRatio, Qt::SmoothTransformation ); - - m_configIcon.addFile( RESPATH "images/configure.png", QSize( CONFIG_WRENCH_SIZE - 8, CONFIG_WRENCH_SIZE - 8 ) ); } + void AccountFactoryWrapperDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const { @@ -75,8 +70,8 @@ AccountFactoryWrapperDelegate::paint(QPainter* painter, const QStyleOptionViewIt painter->drawText( opt.rect.adjusted( checkRect.right() + PADDING, PADDING, -PADDING, -PADDING ), Qt::AlignLeft | Qt::AlignVCenter, acc->accountFriendlyName() ); // remove, config, status on right - const QRect pmRect( opt.rect.right() - PADDING - m_removePixmap.width(), topIcon, ICON_SIZE, ICON_SIZE ); - painter->drawPixmap( pmRect, m_removePixmap ); + const QRect pmRect( opt.rect.right() - PADDING - ICON_SIZE, topIcon, ICON_SIZE, ICON_SIZE ); + painter->drawPixmap( pmRect, TomahawkUtils::defaultPixmap( TomahawkUtils::ListRemove, TomahawkUtils::Original, pmRect.size() ) ); m_cachedButtonRects[ index ] = pmRect; const QRect confRect( pmRect.left() - PADDING - CONFIG_WRENCH_SIZE, center - CONFIG_WRENCH_SIZE/2, CONFIG_WRENCH_SIZE, CONFIG_WRENCH_SIZE ); @@ -85,7 +80,7 @@ AccountFactoryWrapperDelegate::paint(QPainter* painter, const QStyleOptionViewIt topt.rect = confRect; topt.pos = confRect.topLeft(); topt.font = opt.font; - topt.icon = m_configIcon; + topt.icon = ImageRegistry::instance()->pixmap( RESPATH "images/configure.svg", QSize( CONFIG_WRENCH_SIZE - 8, CONFIG_WRENCH_SIZE - 8 ) ); topt.iconSize = QSize( CONFIG_WRENCH_SIZE - 8, CONFIG_WRENCH_SIZE - 8 ); topt.subControls = QStyle::SC_ToolButton; topt.activeSubControls = QStyle::SC_None; @@ -100,23 +95,24 @@ AccountFactoryWrapperDelegate::paint(QPainter* painter, const QStyleOptionViewIt QPixmap p; QString statusText; Account::ConnectionState state = acc->connectionState(); + const QRect connectIconRect( confRect.left() - PADDING - ICON_SIZE, topIcon, ICON_SIZE, ICON_SIZE ); + if ( state == Account::Connected ) { - p = m_onlineIcon; + p = TomahawkUtils::defaultPixmap( TomahawkUtils::SipPluginOnline, TomahawkUtils::Original, connectIconRect.size() ); statusText = tr( "Online" ); } else if ( state == Account::Connecting ) { - p = m_offlineIcon; + p = TomahawkUtils::defaultPixmap( TomahawkUtils::SipPluginOffline, TomahawkUtils::Original, connectIconRect.size() ); statusText = tr( "Connecting..." ); } else { - p = m_offlineIcon; + p = TomahawkUtils::defaultPixmap( TomahawkUtils::SipPluginOffline, TomahawkUtils::Original, connectIconRect.size() ); statusText = tr( "Offline" ); } - const QRect connectIconRect( confRect.left() - PADDING - ICON_SIZE, topIcon, ICON_SIZE, ICON_SIZE ); painter->drawPixmap( connectIconRect, p ); int width = painter->fontMetrics().width( statusText ); diff --git a/src/libtomahawk/accounts/AccountFactoryWrapperDelegate.h b/src/libtomahawk/accounts/AccountFactoryWrapperDelegate.h index 808f87985..f8327e9a4 100644 --- a/src/libtomahawk/accounts/AccountFactoryWrapperDelegate.h +++ b/src/libtomahawk/accounts/AccountFactoryWrapperDelegate.h @@ -49,8 +49,6 @@ signals: void checkOrUncheck( const QModelIndex& row, Tomahawk::Accounts::Account* account, Qt::CheckState newState ); private: - QPixmap m_removePixmap, m_offlineIcon, m_onlineIcon; - QIcon m_configIcon; QModelIndex m_configPressed; mutable QHash< QPersistentModelIndex, QRect > m_cachedCheckRects; diff --git a/src/libtomahawk/accounts/lastfm/LastFmAccount.cpp b/src/libtomahawk/accounts/lastfm/LastFmAccount.cpp index 44433a6a2..5712d692c 100644 --- a/src/libtomahawk/accounts/lastfm/LastFmAccount.cpp +++ b/src/libtomahawk/accounts/lastfm/LastFmAccount.cpp @@ -21,7 +21,7 @@ #include "infosystem/InfoSystem.h" #include "LastFmInfoPlugin.h" -#include "utils/TomahawkUtils.h" +#include "utils/TomahawkUtilsGui.h" #include "resolvers/QtScriptResolver.h" #include "AtticaManager.h" #include "Pipeline.h" @@ -34,7 +34,6 @@ using namespace Accounts; LastFmAccountFactory::LastFmAccountFactory() { - m_icon.load( RESPATH "images/lastfm-icon.png" ); } @@ -48,7 +47,7 @@ LastFmAccountFactory::createAccount( const QString& accountId ) QPixmap LastFmAccountFactory::icon() const { - return m_icon; + return TomahawkUtils::defaultPixmap( TomahawkUtils::LastfmIcon ); } @@ -56,7 +55,6 @@ LastFmAccount::LastFmAccount( const QString& accountId ) : CustomAtticaAccount( accountId ) { setAccountFriendlyName( "Last.Fm" ); - m_icon.load( RESPATH "images/lastfm-icon.png" ); AtticaManager::instance()->registerCustomAccount( "lastfm", this ); @@ -152,14 +150,14 @@ LastFmAccount::configurationWidget() Account::ConnectionState LastFmAccount::connectionState() const { - return (!m_resolver.isNull() && m_resolver.data()->running()) ? Account::Connected : Account::Disconnected; + return ( !m_resolver.isNull() && m_resolver.data()->running() ) ? Account::Connected : Account::Disconnected; } QPixmap LastFmAccount::icon() const { - return m_icon; + return TomahawkUtils::defaultPixmap( TomahawkUtils::LastfmIcon ); } diff --git a/src/libtomahawk/accounts/lastfm/LastFmAccount.h b/src/libtomahawk/accounts/lastfm/LastFmAccount.h index ef4bbea3b..2be052cb0 100644 --- a/src/libtomahawk/accounts/lastfm/LastFmAccount.h +++ b/src/libtomahawk/accounts/lastfm/LastFmAccount.h @@ -28,14 +28,17 @@ #include #include -namespace Tomahawk { -class ExternalResolverGui; +namespace Tomahawk +{ + class ExternalResolverGui; -namespace InfoSystem { +namespace InfoSystem +{ class LastFmInfoPlugin; } -namespace Accounts { +namespace Accounts +{ class LastFmConfig; @@ -53,9 +56,6 @@ public: virtual bool allowUserCreation() const { return false; } virtual QPixmap icon() const; virtual bool isUnique() const { return true; } - -private: - QPixmap m_icon; }; /** @@ -107,11 +107,10 @@ private: QWeakPointer m_resolver; QWeakPointer m_infoPlugin; QWeakPointer m_configWidget; - QPixmap m_icon; }; - } + } #endif // LASTFMACCOUNT_H diff --git a/src/libtomahawk/accounts/lastfm/LastFmConfig.ui b/src/libtomahawk/accounts/lastfm/LastFmConfig.ui index 59d11d76c..19629957b 100644 --- a/src/libtomahawk/accounts/lastfm/LastFmConfig.ui +++ b/src/libtomahawk/accounts/lastfm/LastFmConfig.ui @@ -20,7 +20,7 @@ - :/data/images/lastfm-icon.png + :/data/images/lastfm-icon.svg Qt::AlignCenter diff --git a/src/libtomahawk/accounts/lastfm/LastFmInfoPlugin.cpp b/src/libtomahawk/accounts/lastfm/LastFmInfoPlugin.cpp index f4d0677e4..86fb827a0 100644 --- a/src/libtomahawk/accounts/lastfm/LastFmInfoPlugin.cpp +++ b/src/libtomahawk/accounts/lastfm/LastFmInfoPlugin.cpp @@ -47,7 +47,7 @@ LastFmInfoPlugin::LastFmInfoPlugin( LastFmAccount* account ) , m_account( account ) , m_scrobbler( 0 ) { - m_supportedGetTypes << InfoAlbumCoverArt << InfoArtistImages << InfoArtistSimilars << InfoArtistSongs << InfoChart << InfoChartCapabilities << InfoTrackSimilars; + m_supportedGetTypes << InfoAlbumCoverArt << InfoArtistImages << InfoArtistSimilars << InfoArtistSongs << InfoArtistBiography << InfoChart << InfoChartCapabilities << InfoTrackSimilars; m_supportedPushTypes << InfoSubmitScrobble << InfoSubmitNowPlaying << InfoLove << InfoUnLove; } @@ -107,12 +107,8 @@ LastFmInfoPlugin::getInfo( Tomahawk::InfoSystem::InfoRequestData requestData ) { switch ( requestData.type ) { - case InfoArtistImages: - fetchArtistImages( requestData ); - break; - case InfoAlbumCoverArt: - fetchCoverArt( requestData ); + fetchAlbumInfo( requestData ); break; case InfoArtistSimilars: @@ -123,6 +119,11 @@ LastFmInfoPlugin::getInfo( Tomahawk::InfoSystem::InfoRequestData requestData ) fetchTopTracks( requestData ); break; + case InfoArtistImages: + case InfoArtistBiography: + fetchArtistInfo( requestData ); + break; + case InfoChart: fetchChart( requestData ); break; @@ -325,6 +326,28 @@ LastFmInfoPlugin::fetchTopTracks( Tomahawk::InfoSystem::InfoRequestData requestD } +void +LastFmInfoPlugin::fetchArtistInfo( Tomahawk::InfoSystem::InfoRequestData requestData ) +{ + if ( !requestData.input.canConvert< Tomahawk::InfoSystem::InfoStringHash >() ) + { + dataError( requestData ); + return; + } + InfoStringHash hash = requestData.input.value< Tomahawk::InfoSystem::InfoStringHash >(); + if ( !hash.contains( "artist" ) ) + { + dataError( requestData ); + return; + } + + Tomahawk::InfoSystem::InfoStringHash criteria; + criteria["artist"] = hash["artist"]; + + emit getCachedInfo( criteria, 2419200000, requestData ); +} + + void LastFmInfoPlugin::fetchChart( Tomahawk::InfoSystem::InfoRequestData requestData ) { @@ -363,7 +386,7 @@ LastFmInfoPlugin::fetchChartCapabilities( Tomahawk::InfoSystem::InfoRequestData void -LastFmInfoPlugin::fetchCoverArt( Tomahawk::InfoSystem::InfoRequestData requestData ) +LastFmInfoPlugin::fetchAlbumInfo( Tomahawk::InfoSystem::InfoRequestData requestData ) { if ( !requestData.input.canConvert< Tomahawk::InfoSystem::InfoStringHash >() ) { @@ -385,28 +408,6 @@ LastFmInfoPlugin::fetchCoverArt( Tomahawk::InfoSystem::InfoRequestData requestDa } -void -LastFmInfoPlugin::fetchArtistImages( Tomahawk::InfoSystem::InfoRequestData requestData ) -{ - if ( !requestData.input.canConvert< Tomahawk::InfoSystem::InfoStringHash >() ) - { - dataError( requestData ); - return; - } - InfoStringHash hash = requestData.input.value< Tomahawk::InfoSystem::InfoStringHash >(); - if ( !hash.contains( "artist" ) ) - { - dataError( requestData ); - return; - } - - Tomahawk::InfoSystem::InfoStringHash criteria; - criteria["artist"] = hash["artist"]; - - emit getCachedInfo( criteria, 2419200000, requestData ); -} - - void LastFmInfoPlugin::notInCacheSlot( QHash criteria, Tomahawk::InfoSystem::InfoRequestData requestData ) { @@ -515,36 +516,24 @@ LastFmInfoPlugin::notInCacheSlot( QHash criteria, Tomahawk::In return; } - case InfoAlbumCoverArt: + case InfoArtistBiography: + case InfoArtistImages: { - QString artistName = criteria["artist"]; - QString albumName = criteria["album"]; - - lastfm::Artist lfmArtist( artistName ); - lastfm::Album lfmAlbum( lfmArtist, albumName ); - - QNetworkReply* reply = lfmAlbum.getInfo(); + lastfm::Artist a( criteria["artist"] ); + QNetworkReply* reply = a.getInfo(); reply->setProperty( "requestData", QVariant::fromValue< Tomahawk::InfoSystem::InfoRequestData >( requestData ) ); - connect( reply, SIGNAL( finished() ), SLOT( albumInfoReturned() ) ); + + connect( reply, SIGNAL( finished() ), SLOT( artistInfoReturned() ) ); return; } - case InfoArtistImages: + case InfoAlbumCoverArt: { - QString artistName = criteria["artist"]; - - QUrl imgurl( "http://ws.audioscrobbler.com/2.0/" ); - imgurl.addQueryItem( "method", "artist.imageredirect" ); - imgurl.addEncodedQueryItem( "artist", QUrl::toPercentEncoding( artistName, "", "+" ) ); - imgurl.addQueryItem( "autocorrect", QString::number( 1 ) ); - imgurl.addQueryItem( "size", "largesquare" ); - imgurl.addQueryItem( "api_key", "7a90f6672a04b809ee309af169f34b8b" ); - - QNetworkRequest req( imgurl ); - QNetworkReply* reply = TomahawkUtils::nam()->get( req ); + lastfm::Album a( criteria["artist"], criteria["album"] ); + QNetworkReply* reply = a.getInfo(); reply->setProperty( "requestData", QVariant::fromValue< Tomahawk::InfoSystem::InfoRequestData >( requestData ) ); - connect( reply, SIGNAL( finished() ), SLOT( artistImagesReturned() ) ); + connect( reply, SIGNAL( finished() ), SLOT( albumInfoReturned() ) ); return; } @@ -719,37 +708,89 @@ LastFmInfoPlugin::topTracksReturned() } +void +LastFmInfoPlugin::artistInfoReturned() +{ + QNetworkReply* reply = qobject_cast( sender() ); + Tomahawk::InfoSystem::InfoRequestData requestData = reply->property( "requestData" ).value< Tomahawk::InfoSystem::InfoRequestData >(); + + if ( requestData.type == Tomahawk::InfoSystem::InfoArtistBiography ) + { + QVariantMap returnedData; + lastfm::XmlQuery lfm; + if ( lfm.parse( reply->readAll() ) ) + { + QRegExp tagRegExp( "" ); + QRegExp artistRegExp( "" ); + QRegExp albumRegExp( "" ); + QRegExp trackRegExp( "" ); + + tagRegExp.setMinimal( true ); + artistRegExp.setMinimal( true ); + albumRegExp.setMinimal( true ); + trackRegExp.setMinimal( true ); + + QString biography = lfm["artist"]["bio"]["content"].text().trimmed().replace( "User-contributed text is available under the Creative Commons By-SA License and may also be available under the GNU FDL.", "" ); + biography = biography.replace( tagRegExp, "" ) + .replace( artistRegExp, "" ) + .replace( albumRegExp, "" ) + .replace( trackRegExp, "" ) + .replace( "&album=_", "" ); + + QVariantHash siteData; + siteData[ "site" ] = "last.fm"; + siteData[ "text" ] = biography.replace( "\r", "\n" ).replace( "\n\n", "\n" ); + siteData[ "summary" ] = lfm["artist"]["bio"]["summary"].text().trimmed().replace( "\r", "\n" ).replace( "\n\n", "\n" ); + returnedData[ "last.fm" ] = siteData; + + Tomahawk::InfoSystem::InfoStringHash origData = requestData.input.value< Tomahawk::InfoSystem::InfoStringHash>(); + Tomahawk::InfoSystem::InfoStringHash criteria; + criteria["artist"] = origData["artist"]; + emit updateCache( criteria, 0, requestData.type, returnedData ); + } + emit info( requestData, returnedData ); + } + else if ( requestData.type == Tomahawk::InfoSystem::InfoArtistImages ) + { + lastfm::Artist artist = lastfm::Artist::getInfo( reply ); + + QUrl imgurl = artist.imageUrl( lastfm::AbstractType::ExtraLargeImage ); + if ( !imgurl.isValid() ) + imgurl = artist.imageUrl( lastfm::AbstractType::MegaImage ); + if ( !imgurl.isValid() ) + imgurl = artist.imageUrl( lastfm::AbstractType::LargeImage ); + + QNetworkRequest req( imgurl ); + QNetworkReply* newReply = TomahawkUtils::nam()->get( req ); + newReply->setProperty( "requestData", reply->property( "requestData" ) ); + connect( newReply, SIGNAL( finished() ), SLOT( coverArtReturned() ) ); + } +} + + void LastFmInfoPlugin::albumInfoReturned() { QNetworkReply* reply = qobject_cast( sender() ); - QHash< QString, QString > covers; - QString url; + Tomahawk::InfoSystem::InfoRequestData requestData = reply->property( "requestData" ).value< Tomahawk::InfoSystem::InfoRequestData >(); - lastfm::XmlQuery lfm; - lfm.parse( reply->readAll() ); - - foreach ( lastfm::XmlQuery xq, lfm.children( "album" ) ) + if ( requestData.type == Tomahawk::InfoSystem::InfoAlbumCoverArt ) { - foreach ( lastfm::XmlQuery xxq, xq.children( "image" ) ) + lastfm::XmlQuery lfm; + if ( lfm.parse( reply->readAll() ) ) { - covers[ xxq.attribute( "size" ).toLower() ] = xxq.text(); + QUrl imgurl = QUrl( lfm["album"]["image size=extralarge"].text() ); + if ( !imgurl.isValid() ) + imgurl = QUrl( lfm["album"]["image size=mega"].text() ); + if ( !imgurl.isValid() ) + imgurl = QUrl( lfm["album"]["image size=large"].text() ); + + QNetworkRequest req( imgurl ); + QNetworkReply* newReply = TomahawkUtils::nam()->get( req ); + newReply->setProperty( "requestData", reply->property( "requestData" ) ); + connect( newReply, SIGNAL( finished() ), SLOT( coverArtReturned() ) ); } } - - if ( covers.contains( "mega" ) ) - url = covers[ "mega" ]; - else if ( covers.contains( "extralarge" ) ) - url = covers[ "extralarge" ]; - else if ( covers.contains( "large" ) ) - url = covers[ "large" ]; - else if ( covers.contains( "medium" ) ) - url = covers[ "medium" ]; - - QNetworkRequest req( url ); - QNetworkReply* newReply = TomahawkUtils::nam()->get( req ); - newReply->setProperty( "requestData", reply->property( "requestData" ) ); - connect( newReply, SIGNAL( finished() ), SLOT( coverArtReturned() ) ); } @@ -789,12 +830,6 @@ LastFmInfoPlugin::coverArtReturned() } else { - if ( !TomahawkUtils::nam() ) - { - tLog() << Q_FUNC_INFO << "Uh oh, nam is null"; - emit info( reply->property( "requestData" ).value< Tomahawk::InfoSystem::InfoRequestData >(), QVariant() ); - return; - } // Follow HTTP redirect QNetworkRequest req( redir ); QNetworkReply* newReply = TomahawkUtils::nam()->get( req ); @@ -825,6 +860,7 @@ LastFmInfoPlugin::artistImagesReturned() if ( reply->url().toString().startsWith( url.toString() ) ) ba = QByteArray(); } + QVariantMap returnedData; returnedData["imgbytes"] = ba; returnedData["url"] = reply->url().toString(); diff --git a/src/libtomahawk/accounts/lastfm/LastFmInfoPlugin.h b/src/libtomahawk/accounts/lastfm/LastFmInfoPlugin.h index bb0b1aebb..a6bce22c2 100644 --- a/src/libtomahawk/accounts/lastfm/LastFmInfoPlugin.h +++ b/src/libtomahawk/accounts/lastfm/LastFmInfoPlugin.h @@ -59,9 +59,10 @@ public slots: void artistImagesReturned(); void similarArtistsReturned(); void topTracksReturned(); + void artistInfoReturned(); + void albumInfoReturned(); void chartReturned(); void similarTracksReturned(); - void albumInfoReturned(); protected slots: virtual void init(); @@ -71,23 +72,23 @@ protected slots: virtual void pushInfo( Tomahawk::InfoSystem::InfoPushData pushData ); private: - void fetchCoverArt( Tomahawk::InfoSystem::InfoRequestData requestData ); - void fetchArtistImages( Tomahawk::InfoSystem::InfoRequestData requestData ); void fetchSimilarArtists( Tomahawk::InfoSystem::InfoRequestData requestData ); void fetchTopTracks( Tomahawk::InfoSystem::InfoRequestData requestData ); + void fetchArtistInfo( Tomahawk::InfoSystem::InfoRequestData requestData ); + void fetchAlbumInfo( Tomahawk::InfoSystem::InfoRequestData requestData ); void fetchChart( Tomahawk::InfoSystem::InfoRequestData requestData ); void fetchChartCapabilities( Tomahawk::InfoSystem::InfoRequestData requestData ); void fetchSimilarTracks( Tomahawk::InfoSystem::InfoRequestData requestData ); void createScrobbler(); - void nowPlaying( const QVariant &input ); + void nowPlaying( const QVariant& input ); void scrobble(); void sendLoveSong( const InfoType type, QVariant input ); void dataError( Tomahawk::InfoSystem::InfoRequestData requestData ); QWeakPointer< Accounts::LastFmAccount > m_account; - QList parseTrackList( QNetworkReply * reply ); + QList parseTrackList( QNetworkReply* reply ); lastfm::MutableTrack m_track; lastfm::Audioscrobbler* m_scrobbler; diff --git a/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp b/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp index 751ef52e3..f7b11d8c5 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp +++ b/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp @@ -24,7 +24,7 @@ #include "SpotifyAccountConfig.h" #include "SpotifyPlaylistUpdater.h" #include "resolvers/ScriptResolver.h" -#include "utils/TomahawkUtils.h" +#include "utils/TomahawkUtilsGui.h" #include "ActionCollection.h" #include "Pipeline.h" #include "accounts/AccountManager.h" @@ -218,7 +218,7 @@ SpotifyAccount::hookupResolver() // 0.4.x->0.5.x upgrade. So we do it manually for a while killExistingResolvers(); m_spotifyResolver = QWeakPointer< ScriptResolver >( qobject_cast< ScriptResolver* >( Pipeline::instance()->addScriptResolver( path ) ) ); - m_spotifyResolver.data()->setIcon( QPixmap( RESPATH "images/spotify-sourceicon.png" ) ); + m_spotifyResolver.data()->setIcon( TomahawkUtils::defaultPixmap( TomahawkUtils::SpotifyIcon ) ); connect( m_spotifyResolver.data(), SIGNAL( changed() ), this, SLOT( resolverChanged() ) ); connect( m_spotifyResolver.data(), SIGNAL( customMessage( QString,QVariantMap ) ), this, SLOT( resolverMessage( QString, QVariantMap ) ) ); diff --git a/src/libtomahawk/database/DatabaseCommand_SetDynamicPlaylistRevision.cpp b/src/libtomahawk/database/DatabaseCommand_SetDynamicPlaylistRevision.cpp index 3a583b9de..b36f008c0 100644 --- a/src/libtomahawk/database/DatabaseCommand_SetDynamicPlaylistRevision.cpp +++ b/src/libtomahawk/database/DatabaseCommand_SetDynamicPlaylistRevision.cpp @@ -105,7 +105,7 @@ DatabaseCommand_SetDynamicPlaylistRevision::postCommitHook() Q_ASSERT( false ); return; } - + if ( m_mode == OnDemand ) rawPl->setRevision( newrev(), true, // this *is* the newest revision so far diff --git a/src/libtomahawk/database/DatabaseCommand_SetTrackAttributes.cpp b/src/libtomahawk/database/DatabaseCommand_SetTrackAttributes.cpp index d952c0372..916adc168 100644 --- a/src/libtomahawk/database/DatabaseCommand_SetTrackAttributes.cpp +++ b/src/libtomahawk/database/DatabaseCommand_SetTrackAttributes.cpp @@ -20,6 +20,7 @@ #include "TomahawkSqlQuery.h" #include "DatabaseImpl.h" #include "Source.h" +#include "utils/Logger.h" using namespace Tomahawk; diff --git a/src/libtomahawk/filemetadata/MetadataEditor.cpp b/src/libtomahawk/filemetadata/MetadataEditor.cpp index b5be4a8bc..da463e4e4 100644 --- a/src/libtomahawk/filemetadata/MetadataEditor.cpp +++ b/src/libtomahawk/filemetadata/MetadataEditor.cpp @@ -38,6 +38,7 @@ #include "filemetadata/taghandlers/tag.h" #include "utils/TomahawkUtils.h" #include "utils/Closure.h" +#include "utils/Logger.h" MetadataEditor::MetadataEditor( const Tomahawk::query_ptr& query, const Tomahawk::playlistinterface_ptr& interface, QWidget* parent ) diff --git a/src/libtomahawk/infobar/InfoBar.cpp b/src/libtomahawk/infobar/InfoBar.cpp index 7b4a916cb..cf1fc62fd 100644 --- a/src/libtomahawk/infobar/InfoBar.cpp +++ b/src/libtomahawk/infobar/InfoBar.cpp @@ -95,10 +95,10 @@ InfoBar::InfoBar( QWidget* parent ) ui->horizontalLayout->addWidget( m_searchWidget ); - setAutoFillBackground( true ); + QPalette pal = palette(); + setPalette( pal ); setFixedHeight( 80 ); - m_bgTile = TomahawkUtils::createTiledPixmap( 2000, height(), QImage( RESPATH "images/playlist-header-tiled.png" ) ); connect( ViewManager::instance(), SIGNAL( filterAvailable( bool ) ), SLOT( setFilterAvailable( bool ) ) ); } @@ -282,29 +282,30 @@ InfoBar::onFilterEdited() emit filterTextChanged( m_searchWidget->text() ); } + void -InfoBar::paintEvent( QPaintEvent* e ) +InfoBar::paintEvent( QPaintEvent* event ) { - Q_UNUSED( e ); + QWidget::paintEvent( event ); - if ( m_bgTile.isNull() || width() > m_bgTile.width() ) - m_bgTile = TomahawkUtils::createTiledPixmap( width(), height(), QImage( RESPATH "images/playlist-header-tiled.png" ) ); + QPainter painter( this ); + painter.setRenderHint( QPainter::Antialiasing ); - if ( m_bgTile.isNull() ) - return; + QLinearGradient gradient( QPoint( 0, 0 ), QPoint( 0, 1 ) ); + gradient.setCoordinateMode( QGradient::ObjectBoundingMode ); + gradient.setColorAt( 0.0, QColor( "#615858" ) ); + gradient.setColorAt( 1.0, QColor( "#231F1F" ) ); - QPainter p( this ); - - // Truncate bg pixmap and paint into bg - p.drawPixmap( rect(), m_bgTile, rect() ); + painter.setBrush( gradient ); + painter.fillRect( event->rect(), gradient ); } void -InfoBar::changeEvent( QEvent* e ) +InfoBar::changeEvent( QEvent* event ) { - QWidget::changeEvent( e ); - switch ( e->type() ) + QWidget::changeEvent( event ); + switch ( event->type() ) { case QEvent::LanguageChange: // ui->retranslateUi( this ); diff --git a/src/libtomahawk/infobar/InfoBar.h b/src/libtomahawk/infobar/InfoBar.h index 80ef6dbfa..7b4b512d9 100644 --- a/src/libtomahawk/infobar/InfoBar.h +++ b/src/libtomahawk/infobar/InfoBar.h @@ -68,8 +68,8 @@ signals: void filterTextChanged( const QString& filter ); protected: - void changeEvent( QEvent* e ); - void paintEvent( QPaintEvent* e ); + void changeEvent( QEvent* event ); + void paintEvent( QPaintEvent* event ); private slots: void onFilterEdited(); @@ -78,7 +78,6 @@ private slots: private: Ui::InfoBar* ui; - QPixmap m_bgTile; QPalette m_whitePal; QList m_updaters;; diff --git a/src/libtomahawk/jobview/ErrorStatusMessage.cpp b/src/libtomahawk/jobview/ErrorStatusMessage.cpp index 9398395c4..24565a6d8 100644 --- a/src/libtomahawk/jobview/ErrorStatusMessage.cpp +++ b/src/libtomahawk/jobview/ErrorStatusMessage.cpp @@ -18,11 +18,10 @@ #include "ErrorStatusMessage.h" -#include "utils/TomahawkUtils.h" +#include "utils/TomahawkUtilsGui.h" #include -QPixmap* ErrorStatusMessage::s_pixmap = 0; ErrorStatusMessage::ErrorStatusMessage( const QString& message, int timeoutSecs ) : JobStatusItem() @@ -33,10 +32,6 @@ ErrorStatusMessage::ErrorStatusMessage( const QString& message, int timeoutSecs m_timer->setSingleShot( true ); connect( m_timer, SIGNAL( timeout() ), this, SIGNAL( finished() ) ); - - if ( !s_pixmap ) - s_pixmap = new QPixmap( RESPATH "images/process-stop.png" ); - m_timer->start(); } @@ -44,8 +39,7 @@ ErrorStatusMessage::ErrorStatusMessage( const QString& message, int timeoutSecs QPixmap ErrorStatusMessage::icon() const { - Q_ASSERT( s_pixmap ); - return *s_pixmap; + return TomahawkUtils::defaultPixmap( TomahawkUtils::ProcessStop, TomahawkUtils::Original, QSize( 64, 64 ) ); } diff --git a/src/libtomahawk/jobview/IndexingJobItem.cpp b/src/libtomahawk/jobview/IndexingJobItem.cpp index 418d0c9a7..72e2223ea 100644 --- a/src/libtomahawk/jobview/IndexingJobItem.cpp +++ b/src/libtomahawk/jobview/IndexingJobItem.cpp @@ -18,12 +18,10 @@ #include "IndexingJobItem.h" -#include "utils/TomahawkUtils.h" +#include "utils/TomahawkUtilsGui.h" #include -static QPixmap* s_indexIcon = 0; - QString IndexingJobItem::mainText() const @@ -34,10 +32,7 @@ IndexingJobItem::mainText() const QPixmap IndexingJobItem::icon() const { - if ( s_indexIcon == 0 ) - s_indexIcon = new QPixmap( RESPATH "images/view-refresh.png" ); - - return *s_indexIcon; + return TomahawkUtils::defaultPixmap( TomahawkUtils::ViewRefresh, TomahawkUtils::Original, QSize( 128, 128 ) ); } diff --git a/src/libtomahawk/jobview/LatchedStatusItem.cpp b/src/libtomahawk/jobview/LatchedStatusItem.cpp index b2e42605c..c87e58632 100644 --- a/src/libtomahawk/jobview/LatchedStatusItem.cpp +++ b/src/libtomahawk/jobview/LatchedStatusItem.cpp @@ -22,7 +22,8 @@ #include "SourceList.h" #include "JobStatusView.h" #include "JobStatusModel.h" -#include "utils/TomahawkUtils.h" +#include "utils/TomahawkUtilsGui.h" + LatchedStatusItem::LatchedStatusItem( const Tomahawk::source_ptr& from, const Tomahawk::source_ptr& to, LatchedStatusManager* parent ) : JobStatusItem() @@ -65,8 +66,6 @@ LatchedStatusManager::LatchedStatusManager( QObject* parent ) { connect( SourceList::instance(), SIGNAL( sourceLatchedOn( Tomahawk::source_ptr, Tomahawk::source_ptr ) ), this, SLOT( latchedOn( Tomahawk::source_ptr, Tomahawk::source_ptr ) ) ); connect( SourceList::instance(), SIGNAL( sourceLatchedOff( Tomahawk::source_ptr, Tomahawk::source_ptr ) ), this, SLOT( latchedOff( Tomahawk::source_ptr, Tomahawk::source_ptr ) ) ); - - m_pixmap.load( RESPATH "images/headphones-bigger.png" ); } void @@ -113,3 +112,10 @@ LatchedStatusManager::latchedOff( const Tomahawk::source_ptr& from, const Tomaha item.data()->stop(); } } + + +QPixmap +LatchedStatusManager::pixmap() const +{ + return TomahawkUtils::defaultPixmap( TomahawkUtils::HeadphonesOn, TomahawkUtils::Original, QSize( 128, 128 ) ); +} diff --git a/src/libtomahawk/jobview/LatchedStatusItem.h b/src/libtomahawk/jobview/LatchedStatusItem.h index 3c83a5af5..5d6560007 100644 --- a/src/libtomahawk/jobview/LatchedStatusItem.h +++ b/src/libtomahawk/jobview/LatchedStatusItem.h @@ -53,7 +53,7 @@ public: explicit LatchedStatusManager( QObject* parent = 0 ); virtual ~LatchedStatusManager() {} - QPixmap pixmap() const { return m_pixmap; } + QPixmap pixmap() const; private slots: void latchedOn( const Tomahawk::source_ptr&, const Tomahawk::source_ptr& ); @@ -61,7 +61,6 @@ private slots: void sourceOffline(); private: - QPixmap m_pixmap; QHash< QString, QWeakPointer< LatchedStatusItem > > m_jobs; }; diff --git a/src/libtomahawk/jobview/PipelineStatusItem.cpp b/src/libtomahawk/jobview/PipelineStatusItem.cpp index 18f8a7f16..d343e88b4 100644 --- a/src/libtomahawk/jobview/PipelineStatusItem.cpp +++ b/src/libtomahawk/jobview/PipelineStatusItem.cpp @@ -20,13 +20,12 @@ #include "PipelineStatusItem.h" -#include "utils/TomahawkUtils.h" +#include "utils/TomahawkUtilsGui.h" #include "Pipeline.h" #include "JobStatusModel.h" #include "JobStatusView.h" #include "Source.h" -QPixmap* PipelineStatusItem::s_pixmap = 0; PipelineStatusItem::PipelineStatusItem( const Tomahawk::query_ptr& q ) : JobStatusItem() @@ -69,12 +68,7 @@ PipelineStatusItem::idle() QPixmap PipelineStatusItem::icon() const { - if ( !s_pixmap ) - { - s_pixmap = new QPixmap( RESPATH"images/search-icon.png" ); - } - - return *s_pixmap; + return TomahawkUtils::defaultPixmap( TomahawkUtils::Search ); } diff --git a/src/libtomahawk/jobview/PipelineStatusItem.h b/src/libtomahawk/jobview/PipelineStatusItem.h index cd16c0708..5a37a5d77 100644 --- a/src/libtomahawk/jobview/PipelineStatusItem.h +++ b/src/libtomahawk/jobview/PipelineStatusItem.h @@ -45,8 +45,6 @@ private slots: private: QString m_latestQuery; - - static QPixmap* s_pixmap; }; class PipelineStatusManager : public QObject diff --git a/src/libtomahawk/jobview/TransferStatusItem.cpp b/src/libtomahawk/jobview/TransferStatusItem.cpp index a1811f5a2..168cb26c9 100644 --- a/src/libtomahawk/jobview/TransferStatusItem.cpp +++ b/src/libtomahawk/jobview/TransferStatusItem.cpp @@ -20,12 +20,13 @@ #include "JobStatusView.h" #include "JobStatusModel.h" -#include "network/StreamConnection.h" -#include "network/Servent.h" -#include "utils/TomahawkUtils.h" #include "Result.h" #include "Source.h" #include "Artist.h" +#include "network/StreamConnection.h" +#include "network/Servent.h" +#include "utils/TomahawkUtilsGui.h" + TransferStatusItem::TransferStatusItem( TransferStatusManager* p, StreamConnection* sc ) : m_parent( p ) @@ -85,8 +86,8 @@ TransferStatusItem::icon() const if ( m_stream.data()->type() == StreamConnection::SENDING ) return m_parent->rxPixmap(); - else - return m_parent->txPixmap(); + else + return m_parent->txPixmap(); } @@ -100,9 +101,6 @@ TransferStatusItem::onTransferUpdate() TransferStatusManager::TransferStatusManager( QObject* parent ) : QObject( parent ) { - m_rxPixmap.load( RESPATH "images/uploading.png" ); - m_txPixmap.load( RESPATH "images/downloading.png" ); - connect( Servent::instance(), SIGNAL( streamStarted( StreamConnection* ) ), SLOT( streamRegistered( StreamConnection* ) ) ); } @@ -111,3 +109,17 @@ TransferStatusManager::streamRegistered( StreamConnection* sc ) { JobStatusView::instance()->model()->addJob( new TransferStatusItem( this, sc ) ); } + + +QPixmap +TransferStatusManager::rxPixmap() const +{ + return TomahawkUtils::defaultPixmap( TomahawkUtils::Downloading, TomahawkUtils::Original, QSize( 128, 128 ) ); +} + + +QPixmap +TransferStatusManager::txPixmap() const +{ + return TomahawkUtils::defaultPixmap( TomahawkUtils::Uploading, TomahawkUtils::Original, QSize( 128, 128 ) ); +} diff --git a/src/libtomahawk/jobview/TransferStatusItem.h b/src/libtomahawk/jobview/TransferStatusItem.h index 1670343c2..4b916a72b 100644 --- a/src/libtomahawk/jobview/TransferStatusItem.h +++ b/src/libtomahawk/jobview/TransferStatusItem.h @@ -32,14 +32,11 @@ public: explicit TransferStatusManager( QObject* parent = 0 ); virtual ~TransferStatusManager() {} - QPixmap rxPixmap() const { return m_rxPixmap; } - QPixmap txPixmap() const { return m_txPixmap; } + QPixmap rxPixmap() const; + QPixmap txPixmap() const; private slots: void streamRegistered( StreamConnection* sc ); - -private: - QPixmap m_rxPixmap, m_txPixmap; }; class TransferStatusItem : public JobStatusItem diff --git a/src/libtomahawk/playlist/FlexibleHeader.cpp b/src/libtomahawk/playlist/FlexibleHeader.cpp index 36681066e..7c574fa08 100644 --- a/src/libtomahawk/playlist/FlexibleHeader.cpp +++ b/src/libtomahawk/playlist/FlexibleHeader.cpp @@ -62,7 +62,7 @@ FlexibleHeader::FlexibleHeader( FlexibleView* parent ) m_radioDetailed = new QRadioButton( modeWidget ); m_radioCloud = new QRadioButton( modeWidget ); //for the CSS: - m_radioNormal->setObjectName( "radioNormal"); + m_radioNormal->setObjectName( "radioNormal" ); m_radioCloud->setObjectName( "radioCloud" ); m_radioNormal->setFocusPolicy( Qt::NoFocus ); diff --git a/src/libtomahawk/playlist/FlexibleView.cpp b/src/libtomahawk/playlist/FlexibleView.cpp index 02aa00dd9..038e6caf1 100644 --- a/src/libtomahawk/playlist/FlexibleView.cpp +++ b/src/libtomahawk/playlist/FlexibleView.cpp @@ -47,6 +47,7 @@ FlexibleView::FlexibleView( QWidget* parent ) // m_trackView->setPlaylistInterface( m_playlistInterface ); m_detailedView->setPlaylistInterface( m_trackView->proxyModel()->playlistInterface() ); + m_gridView->setPlaylistInterface( m_trackView->proxyModel()->playlistInterface() ); m_detailedView->setColumnHidden( PlayableModel::Age, true ); // Hide age column per default m_detailedView->setColumnHidden( PlayableModel::Filesize, true ); // Hide filesize column per default @@ -131,6 +132,8 @@ FlexibleView::setGridView( GridView* view ) delete m_gridView; } + view->setPlaylistInterface( m_trackView->proxyModel()->playlistInterface() ); + m_gridView = view; m_stack->addWidget( view ); } diff --git a/src/libtomahawk/playlist/GridItemDelegate.cpp b/src/libtomahawk/playlist/GridItemDelegate.cpp index 914475b90..0a5d174d3 100644 --- a/src/libtomahawk/playlist/GridItemDelegate.cpp +++ b/src/libtomahawk/playlist/GridItemDelegate.cpp @@ -58,6 +58,8 @@ GridItemDelegate::GridItemDelegate( QAbstractItemView* parent, PlayableProxyMode connect( proxy, SIGNAL( rowsAboutToBeInserted( QModelIndex, int, int ) ), SLOT( modelChanged() ) ); connect( proxy, SIGNAL( rowsAboutToBeRemoved( QModelIndex, int, int ) ), SLOT( modelChanged() ) ); + connect( proxy->playlistInterface().data(), SIGNAL( currentIndexChanged() ), SLOT( onCurrentIndexChanged() ), Qt::UniqueConnection ); + connect( m_view, SIGNAL( scrolledContents( int, int ) ), SLOT( onViewChanged() ) ); connect( m_view, SIGNAL( resized() ), SLOT( onViewChanged() ) ); } @@ -239,9 +241,7 @@ void GridItemDelegate::onPlayClicked( const QPersistentModelIndex& index ) { QPoint pos = m_playButton[ index ]->pos(); - foreach ( ImageButton* button, m_playButton ) - button->deleteLater(); - m_playButton.clear(); + clearButtons(); AnimatedSpinner* spinner = new AnimatedSpinner( m_view ); spinner->setAutoCenter( false ); @@ -255,23 +255,8 @@ GridItemDelegate::onPlayClicked( const QPersistentModelIndex& index ) PlayableItem* item = m_model->sourceModel()->itemFromIndex( m_model->mapToSource( index ) ); if ( item ) { - NewClosure( AudioEngine::instance(), SIGNAL( loading( Tomahawk::result_ptr ) ), - const_cast(this), SLOT( onPlaybackStarted( QPersistentModelIndex ) ), QPersistentModelIndex( index ) ); - - m_closures.remove( index ); - - m_closures.insertMulti( index, NewClosure( AudioEngine::instance(), SIGNAL( started( Tomahawk::result_ptr ) ), - const_cast(this), SLOT( onPlaylistChanged( QPersistentModelIndex ) ), QPersistentModelIndex( index ) ) ); - m_closures.insertMulti( index, NewClosure( AudioEngine::instance(), SIGNAL( stopped() ), - const_cast(this), SLOT( onPlaylistChanged( QPersistentModelIndex ) ), QPersistentModelIndex( index ) ) ); - - foreach ( _detail::Closure* closure, m_closures.values( index ) ) - closure->setAutoDelete( false ); - - connect( AudioEngine::instance(), SIGNAL( stopped() ), SLOT( onPlaybackFinished() ) ); - if ( !item->query().isNull() ) - AudioEngine::instance()->playItem( Tomahawk::playlistinterface_ptr(), item->query() ); + AudioEngine::instance()->playItem( m_model->playlistInterface(), item->query() ); else if ( !item->album().isNull() ) AudioEngine::instance()->playItem( item->album() ); else if ( !item->artist().isNull() ) @@ -320,8 +305,8 @@ GridItemDelegate::editorEvent( QEvent* event, QAbstractItemModel* model, const Q m_playButton.clear(); ImageButton* button = new ImageButton( m_view ); - button->setPixmap( RESPATH "images/play-rest.png" ); - button->setPixmap( RESPATH "images/play-pressed.png", QIcon::Off, QIcon::Active ); + button->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::PlayButton, TomahawkUtils::Original, QSize( 48, 48 ) ) ); + button->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::PlayButtonPressed, TomahawkUtils::Original, QSize( 48, 48 ) ), QIcon::Off, QIcon::Active ); button->setFixedSize( 48, 48 ); button->move( option.rect.center() - QPoint( 23, 23 ) ); button->setContentsMargins( 0, 0, 0, 0 ); @@ -418,18 +403,12 @@ GridItemDelegate::modelChanged() m_hoveringOver = QPersistentModelIndex(); m_hoverIndex = QPersistentModelIndex(); - foreach ( ImageButton* button, m_playButton ) - button->deleteLater(); - m_playButton.clear(); - foreach ( ImageButton* button, m_pauseButton ) - button->deleteLater(); - m_pauseButton.clear(); - foreach ( QWidget* widget, m_spinner ) - widget->deleteLater(); - m_spinner.clear(); + clearButtons(); if ( GridView* view = qobject_cast< GridView* >( m_view ) ) m_model = view->proxyModel(); + + connect( m_model->playlistInterface().data(), SIGNAL( currentIndexChanged() ), SLOT( onCurrentIndexChanged() ), Qt::UniqueConnection ); } @@ -466,78 +445,58 @@ GridItemDelegate::onViewChanged() void GridItemDelegate::onPlaybackFinished() { - foreach ( ImageButton* button, m_pauseButton ) - button->deleteLater(); - m_pauseButton.clear(); + clearButtons(); emit stoppedPlaying( QModelIndex() ); } void -GridItemDelegate::onPlaylistChanged( const QPersistentModelIndex& index ) +GridItemDelegate::onPlaybackStarted( const QPersistentModelIndex& index ) { - PlayableItem* item = m_model->sourceModel()->itemFromIndex( m_model->mapToSource( index ) ); - if ( item ) - { - bool finished = false; + clearButtons(); + createPauseButton( index ); - if ( !item->query().isNull() ) - { - if ( !item->query()->numResults() || AudioEngine::instance()->currentTrack() != item->query()->results().first() ) - finished = true; - } - else if ( !item->album().isNull() ) - { - if ( AudioEngine::instance()->currentTrackPlaylist() != item->album()->playlistInterface( Tomahawk::Mixed ) ) - finished = true; - } - else if ( !item->artist().isNull() ) - { - if ( AudioEngine::instance()->currentTrackPlaylist() != item->artist()->playlistInterface( Tomahawk::Mixed ) ) - finished = true; - } - - if ( finished ) - { - foreach ( _detail::Closure* closure, m_closures.values( index ) ) - closure->deleteLater(); - - if ( m_pauseButton.contains( index ) ) - { - m_pauseButton[ index ]->deleteLater(); - m_pauseButton.remove( index ); - } - if ( m_spinner.contains( index ) ) - { - m_spinner[ index ]->deleteLater(); - m_spinner.remove( index ); - } - - emit stoppedPlaying( index ); - } - } + emit startedPlaying( index ); } void -GridItemDelegate::onPlaybackStarted( const QPersistentModelIndex& index ) +GridItemDelegate::clearButtons() { - if ( !m_spinner.contains( index ) ) - return; - - QPoint pos = m_spinner[ index ]->pos(); - foreach ( QWidget* widget, m_spinner.values() ) - { - delete widget; - } + foreach ( ImageButton* button, m_playButton ) + button->deleteLater(); + m_playButton.clear(); + foreach ( ImageButton* button, m_pauseButton ) + button->deleteLater(); + m_pauseButton.clear(); + foreach ( QWidget* widget, m_spinner ) + widget->deleteLater(); m_spinner.clear(); +} + +void +GridItemDelegate::onCurrentIndexChanged() +{ + tDebug() << Q_FUNC_INFO << m_model-> currentIndex(); + if ( m_model->currentIndex().isValid() ) + { + onPlaybackStarted( m_model->currentIndex() ); + } + else + onPlaybackFinished(); +} + + +void +GridItemDelegate::createPauseButton( const QPersistentModelIndex& index ) +{ ImageButton* button = new ImageButton( m_view ); - button->setPixmap( RESPATH "images/pause-rest.png" ); - button->setPixmap( RESPATH "images/pause-pressed.png", QIcon::Off, QIcon::Active ); + button->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::PauseButton, TomahawkUtils::Original, QSize( 48, 48 ) ) ); + button->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::PauseButtonPressed, TomahawkUtils::Original, QSize( 48, 48 ) ), QIcon::Off, QIcon::Active ); button->setFixedSize( 48, 48 ); - button->move( pos ); + button->move( m_view->visualRect( index ).center() - QPoint( 23, 23 ) ); button->setContentsMargins( 0, 0, 0, 0 ); button->setFocusPolicy( Qt::NoFocus ); button->installEventFilter( this ); @@ -546,8 +505,6 @@ GridItemDelegate::onPlaybackStarted( const QPersistentModelIndex& index ) connect( button, SIGNAL( clicked( bool ) ), AudioEngine::instance(), SLOT( playPause() ) ); m_pauseButton[ index ] = button; - - emit startedPlaying( index ); } diff --git a/src/libtomahawk/playlist/GridItemDelegate.h b/src/libtomahawk/playlist/GridItemDelegate.h index a14414715..36dca3945 100644 --- a/src/libtomahawk/playlist/GridItemDelegate.h +++ b/src/libtomahawk/playlist/GridItemDelegate.h @@ -64,19 +64,21 @@ signals: private slots: void modelChanged(); void doUpdateIndex( const QPersistentModelIndex& idx ); + void onCurrentIndexChanged(); void onViewChanged(); void onPlaybackStarted( const QPersistentModelIndex& index ); void onPlaybackFinished(); void onPlayClicked( const QPersistentModelIndex& index ); - void onPlaylistChanged( const QPersistentModelIndex& index ); void fadingFrameChanged( const QPersistentModelIndex& ); void fadingFrameFinished( const QPersistentModelIndex& ); private: QTimeLine* createTimeline( QTimeLine::Direction direction ); + void createPauseButton( const QPersistentModelIndex& index ); + void clearButtons(); QAbstractItemView* m_view; PlayableProxyModel* m_model; @@ -94,7 +96,6 @@ private: mutable QHash< QPersistentModelIndex, ImageButton* > m_playButton; mutable QHash< QPersistentModelIndex, ImageButton* > m_pauseButton; mutable QHash< QPersistentModelIndex, QTimeLine* > m_hoverFaders; - mutable QHash< QPersistentModelIndex, _detail::Closure* > m_closures; }; #endif // GRIDITEMDELEGATE_H diff --git a/src/libtomahawk/playlist/GridView.cpp b/src/libtomahawk/playlist/GridView.cpp index b884eecfb..e8dcb5395 100644 --- a/src/libtomahawk/playlist/GridView.cpp +++ b/src/libtomahawk/playlist/GridView.cpp @@ -38,6 +38,7 @@ #include "SingleTrackPlaylistInterface.h" #include "ContextMenu.h" #include "ViewManager.h" +#include "MetaPlaylistInterface.h" #include "utils/Logger.h" #include "utils/AnimatedSpinner.h" #include "utils/TomahawkUtilsGui.h" @@ -47,37 +48,6 @@ using namespace Tomahawk; -class GridPlaylistInterface : public PlayableProxyModelPlaylistInterface -{ - Q_OBJECT -public: - explicit GridPlaylistInterface( PlayableProxyModel* proxy, GridView* view ) : PlayableProxyModelPlaylistInterface( proxy ), m_view( view ) {} - - virtual bool hasChildInterface( playlistinterface_ptr playlistInterface ) - { - if ( m_view.isNull() || !m_view.data()->m_playing.isValid() ) - { - return false; - } - - PlayableItem* item = m_view.data()->model()->itemFromIndex( m_view.data()->proxyModel()->mapToSource( m_view.data()->m_playing ) ); - if ( item ) - { - if ( !item->album().isNull() ) - return item->album()->playlistInterface( Tomahawk::Mixed ) == playlistInterface; - else if ( !item->artist().isNull() ) - return item->artist()->playlistInterface( Tomahawk::Mixed ) == playlistInterface; - else if ( !item->query().isNull() && !playlistInterface.dynamicCast< SingleTrackPlaylistInterface >().isNull() ) - return item->query() == playlistInterface.dynamicCast< SingleTrackPlaylistInterface >()->track(); - } - - return false; - } -private: - QWeakPointer m_view; -}; - - GridView::GridView( QWidget* parent ) : QListView( parent ) , m_model( 0 ) @@ -110,8 +80,6 @@ GridView::GridView( QWidget* parent ) setAutoResize( false ); setProxyModel( new PlayableProxyModel( this ) ); - m_playlistInterface = playlistinterface_ptr( new GridPlaylistInterface( m_proxyModel, this ) ); - connect( this, SIGNAL( doubleClicked( QModelIndex ) ), SLOT( onItemActivated( QModelIndex ) ) ); connect( this, SIGNAL( customContextMenuRequested( QPoint ) ), SLOT( onCustomContextMenu( QPoint ) ) ); @@ -136,6 +104,9 @@ GridView::setProxyModel( PlayableProxyModel* model ) m_proxyModel = model; connect( m_proxyModel, SIGNAL( filterChanged( QString ) ), SLOT( onFilterChanged( QString ) ) ); + if ( m_delegate ) + delete m_delegate; + m_delegate = new GridItemDelegate( this, m_proxyModel ); connect( m_delegate, SIGNAL( updateIndex( QModelIndex ) ), this, SLOT( update( QModelIndex ) ) ); connect( m_delegate, SIGNAL( startedPlaying( QPersistentModelIndex ) ), this, SLOT( onDelegatePlaying( QPersistentModelIndex ) ) ); @@ -432,4 +403,18 @@ GridView::currentTrackRect() const } +playlistinterface_ptr +GridView::playlistInterface() const +{ + return proxyModel()->playlistInterface(); +} + + +void +GridView::setPlaylistInterface( const Tomahawk::playlistinterface_ptr& playlistInterface ) +{ + proxyModel()->setPlaylistInterface( playlistInterface ); +} + + #include "GridView.moc" diff --git a/src/libtomahawk/playlist/GridView.h b/src/libtomahawk/playlist/GridView.h index a5b006d2b..2db377ae2 100644 --- a/src/libtomahawk/playlist/GridView.h +++ b/src/libtomahawk/playlist/GridView.h @@ -65,7 +65,8 @@ public: void setEmptyTip( const QString& tip ); virtual QWidget* widget() { return this; } - virtual Tomahawk::playlistinterface_ptr playlistInterface() const { return m_playlistInterface; } + virtual Tomahawk::playlistinterface_ptr playlistInterface() const; + void setPlaylistInterface( const Tomahawk::playlistinterface_ptr& playlistInterface ); virtual QString title() const { return m_model->title(); } virtual QString description() const { return m_model->description(); } @@ -110,7 +111,6 @@ private: GridItemDelegate* m_delegate; AnimatedSpinner* m_loadingSpinner; OverlayWidget* m_overlay; - Tomahawk::playlistinterface_ptr m_playlistInterface; QModelIndex m_contextMenuIndex; QPersistentModelIndex m_playing; diff --git a/src/libtomahawk/playlist/PlayableProxyModelPlaylistInterface.cpp b/src/libtomahawk/playlist/PlayableProxyModelPlaylistInterface.cpp index b576d2f6a..24e0e0694 100644 --- a/src/libtomahawk/playlist/PlayableProxyModelPlaylistInterface.cpp +++ b/src/libtomahawk/playlist/PlayableProxyModelPlaylistInterface.cpp @@ -35,13 +35,10 @@ PlayableProxyModelPlaylistInterface::PlayableProxyModelPlaylistInterface( Playab , m_proxyModel( proxyModel ) , m_repeatMode( PlaylistModes::NoRepeat ) , m_shuffled( false ) - , m_prevAvail( false ) - , m_nextAvail( false ) { - connect( proxyModel, SIGNAL( currentIndexChanged() ), SLOT( onModelChanged() ) ); - connect( proxyModel, SIGNAL( indexPlayable( QModelIndex ) ), SLOT( onModelChanged() ) ); - connect( proxyModel, SIGNAL( filterChanged( QString ) ), SLOT( onModelChanged() ) ); - connect( proxyModel, SIGNAL( itemCountChanged( unsigned int ) ), SLOT( onModelChanged() ) ); + connect( proxyModel, SIGNAL( indexPlayable( QModelIndex ) ), SLOT( onItemsChanged() ) ); + connect( proxyModel, SIGNAL( filterChanged( QString ) ), SLOT( onItemsChanged() ) ); + connect( proxyModel, SIGNAL( itemCountChanged( unsigned int ) ), SLOT( onItemsChanged() ) ); } @@ -66,56 +63,6 @@ PlayableProxyModelPlaylistInterface::filter() const } -void -PlayableProxyModelPlaylistInterface::onModelChanged() -{ - if ( QThread::currentThread() != thread() ) - { - tDebug() << Q_FUNC_INFO << "Reinvoking in correct thread!"; - QMetaObject::invokeMethod( this, "onModelChanged", Qt::QueuedConnection ); - return; - } - - Tomahawk::result_ptr prevResult; - Tomahawk::result_ptr nextResult; - if ( m_proxyModel.data()->currentIndex().isValid() ) - { - prevResult = siblingResult( -1 ); - nextResult = siblingResult( 1 ); - } - - if ( prevResult ) - { - bool avail = prevResult->toQuery()->playable(); - if ( avail != m_prevAvail ) - { - m_prevAvail = avail; - emit previousTrackAvailable(); - } - } - else if ( m_prevAvail ) - { - m_prevAvail = false; - emit previousTrackAvailable(); - } - - if ( nextResult ) - { - bool avail = nextResult->toQuery()->playable(); - if ( avail != m_nextAvail ) - { - m_nextAvail = avail; - emit nextTrackAvailable(); - } - } - else if ( m_nextAvail ) - { - m_nextAvail = false; - emit nextTrackAvailable(); - } -} - - QList< Tomahawk::query_ptr > PlayableProxyModelPlaylistInterface::tracks() const { @@ -167,6 +114,8 @@ PlayableProxyModelPlaylistInterface::setCurrentIndex( qint64 index ) m_shuffleHistory << queryAt( index ); m_shuffleCache = QPersistentModelIndex(); } + + PlaylistInterface::setCurrentIndex( index ); } @@ -246,7 +195,7 @@ PlayableProxyModelPlaylistInterface::siblingIndex( int itemsAway, qint64 rootInd else { PlayableItem* pitem = static_cast( (void*)rootIndex ); - if ( !pitem ) + if ( !pitem || !pitem->index.isValid() ) return -1; idx = proxyModel->mapFromSource( pitem->index ); @@ -272,7 +221,6 @@ PlayableProxyModelPlaylistInterface::siblingIndex( int itemsAway, qint64 rootInd } } - // Try to find the next available PlaylistItem (with results) while ( idx.isValid() ) { PlayableItem* item = proxyModel->itemFromIndex( proxyModel->mapToSource( idx ) ); diff --git a/src/libtomahawk/playlist/PlayableProxyModelPlaylistInterface.h b/src/libtomahawk/playlist/PlayableProxyModelPlaylistInterface.h index e3f51bc83..7b6d50d11 100644 --- a/src/libtomahawk/playlist/PlayableProxyModelPlaylistInterface.h +++ b/src/libtomahawk/playlist/PlayableProxyModelPlaylistInterface.h @@ -65,9 +65,6 @@ signals: void previousTrackAvailable(); void nextTrackAvailable(); -private slots: - virtual void onModelChanged(); - protected: QWeakPointer< PlayableProxyModel > m_proxyModel; @@ -75,9 +72,6 @@ protected: bool m_shuffled; mutable QList< Tomahawk::query_ptr > m_shuffleHistory; mutable QPersistentModelIndex m_shuffleCache; - - mutable bool m_prevAvail; - mutable bool m_nextAvail; }; } //ns diff --git a/src/libtomahawk/playlist/PlaylistItemDelegate.cpp b/src/libtomahawk/playlist/PlaylistItemDelegate.cpp index a8ec08575..a1b875d4c 100644 --- a/src/libtomahawk/playlist/PlaylistItemDelegate.cpp +++ b/src/libtomahawk/playlist/PlaylistItemDelegate.cpp @@ -168,11 +168,11 @@ PlaylistItemDelegate::paintShort( QPainter* painter, const QStyleOptionViewItem& // Paint Now Playing Speaker Icon if ( item->isPlaying() ) { - QPixmap nowPlayingIcon = TomahawkUtils::defaultPixmap( TomahawkUtils::NowPlayingSpeaker ); - QRect npr = r.adjusted( 3, r.height() / 2 - nowPlayingIcon.height() / 2, 18 - r.width(), -r.height() / 2 + nowPlayingIcon.height() / 2 ); - nowPlayingIcon = TomahawkUtils::defaultPixmap( TomahawkUtils::NowPlayingSpeaker, TomahawkUtils::Original, npr.size() ); - painter->drawPixmap( npr, nowPlayingIcon ); - r.adjust( 22, 0, 0, 0 ); + const int pixMargin = 2; + const int pixHeight = r.height() - pixMargin * 2; + QRect npr = r.adjusted( pixMargin, pixMargin + 1, pixHeight - r.width() + pixMargin, -pixMargin + 1 ); + painter->drawPixmap( npr, TomahawkUtils::defaultPixmap( TomahawkUtils::NowPlayingSpeaker, TomahawkUtils::Original, npr.size() ) ); + r.adjust( pixHeight + 8, 0, 0, 0 ); } painter->setPen( opt.palette.text().color() ); @@ -206,9 +206,7 @@ PlaylistItemDelegate::paintShort( QPainter* painter, const QStyleOptionViewItem& painter->drawText( r.adjusted( 0, 1, 0, 0 ), text, m_topOption ); painter->setFont( opt.font ); - if ( option.state & QStyle::State_Selected ) - painter->setPen( option.palette.color( QPalette::HighlightedText ) ); - else + if ( !( option.state & QStyle::State_Selected || item->isPlaying() ) ) painter->setPen( Qt::gray ); text = painter->fontMetrics().elidedText( lowerText, Qt::ElideRight, r.width() ); @@ -273,9 +271,11 @@ PlaylistItemDelegate::paintDetailed( QPainter* painter, const QStyleOptionViewIt // Paint Now Playing Speaker Icon if ( m_view->header()->visualIndex( index.column() ) == 0 ) { - r.adjust( 0, 0, 0, -3 ); - painter->drawPixmap( r.adjusted( 3, 1, 18 - r.width(), 1 ), TomahawkUtils::defaultPixmap( TomahawkUtils::NowPlayingSpeaker ) ); - r.adjust( 25, 0, 0, 3 ); + const int pixMargin = 1; + const int pixHeight = r.height() - pixMargin * 2; + QRect npr = r.adjusted( pixMargin, pixMargin, pixHeight - r.width() + pixMargin, -pixMargin ); + painter->drawPixmap( npr, TomahawkUtils::defaultPixmap( TomahawkUtils::NowPlayingSpeaker, TomahawkUtils::Original, npr.size() ) ); + r.adjust( pixHeight + 6, 0, 0, 0 ); } painter->setPen( opt.palette.text().color() ); diff --git a/src/libtomahawk/playlist/PlaylistLargeItemDelegate.cpp b/src/libtomahawk/playlist/PlaylistLargeItemDelegate.cpp index 90d1200fc..cae2f5ea7 100644 --- a/src/libtomahawk/playlist/PlaylistLargeItemDelegate.cpp +++ b/src/libtomahawk/playlist/PlaylistLargeItemDelegate.cpp @@ -113,10 +113,7 @@ PlaylistLargeItemDelegate::drawRichText( QPainter* painter, const QStyleOptionVi QAbstractTextDocumentLayout::PaintContext context; - if ( option.state & QStyle::State_Selected ) - context.palette.setColor( QPalette::Text, option.palette.color( QPalette::HighlightedText ) ); - else - context.palette.setColor( QPalette::Text, painter->pen().color() ); + context.palette.setColor( QPalette::Text, painter->pen().color() ); painter->save(); painter->translate( rect.x(), y ); @@ -141,9 +138,10 @@ PlaylistLargeItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& return; const query_ptr q = item->query()->displayQuery(); - QString artist = q->artist(); - QString track = q->track(); - unsigned int duration = q->duration(); + const QString artist = q->artist(); + const QString album = q->album(); + const QString track = q->track(); + int duration = q->duration(); QPixmap avatar; QString lowerText; @@ -172,16 +170,16 @@ PlaylistLargeItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& painter->save(); { - QRect r = opt.rect.adjusted( 3, 6, 0, -6 ); + QRect r = opt.rect.adjusted( 4, 6, 0, -6 ); // Paint Now Playing Speaker Icon if ( item->isPlaying() ) { - QPixmap nowPlayingIcon = TomahawkUtils::defaultPixmap( TomahawkUtils::NowPlayingSpeaker ); - QRect npr = r.adjusted( 3, r.height() / 2 - nowPlayingIcon.height() / 2, 18 - r.width(), -r.height() / 2 + nowPlayingIcon.height() / 2 ); - nowPlayingIcon = TomahawkUtils::defaultPixmap( TomahawkUtils::NowPlayingSpeaker, TomahawkUtils::Original, npr.size() ); - painter->drawPixmap( npr, nowPlayingIcon ); - r.adjust( 22, 0, 0, 0 ); + const int pixMargin = 4; + const int pixHeight = r.height() - pixMargin * 2; + QRect npr = r.adjusted( pixMargin, pixMargin + 1, pixHeight - r.width() + pixMargin, -pixMargin + 1 ); + painter->drawPixmap( npr, TomahawkUtils::defaultPixmap( TomahawkUtils::NowPlayingSpeaker, TomahawkUtils::Original, npr.size() ) ); + r.adjust( pixHeight + 8, 0, 0, 0 ); } painter->setPen( opt.palette.text().color() ); @@ -190,7 +188,6 @@ PlaylistLargeItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& QRect avatarRect = r.adjusted( option.rect.width() - r.left() - 12 - avatarSize.width(), ( option.rect.height() - avatarSize.height() ) / 2 - 5, 0, 0 ); avatarRect.setSize( avatarSize ); - if ( !m_pixmaps.contains( index ) ) { m_pixmaps.insert( index, QSharedPointer< Tomahawk::PixmapDelegateFader >( new Tomahawk::PixmapDelegateFader( item->query(), pixmapRect.size(), TomahawkUtils::ScaledCover, false ) ) ); @@ -216,7 +213,7 @@ PlaylistLargeItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& QFontMetrics smallBoldFontMetrics( smallBoldFont ); QFont smallFont = opt.font; - smallFont.setPointSize( TomahawkUtils::defaultFontSize() - 2 ); + smallFont.setPointSize( TomahawkUtils::defaultFontSize() - 1 ); r.adjust( pixmapRect.width() + 12, 1, - 16 - avatar.width(), 0 ); QRect leftRect = r.adjusted( 0, 0, -48, 0 ); @@ -226,13 +223,21 @@ PlaylistLargeItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& QString text = painter->fontMetrics().elidedText( track, Qt::ElideRight, leftRect.width() ); painter->drawText( leftRect, text, m_topOption ); - painter->setFont( smallBoldFont ); - text = painter->fontMetrics().elidedText( artist, Qt::ElideRight, leftRect.width() ); - painter->drawText( leftRect.adjusted( 0, boldFontMetrics.height(), 0, 0 ), text, m_topOption ); - painter->setFont( smallFont ); - painter->setPen( Qt::gray ); QTextDocument textDoc; + if ( album.isEmpty() ) + textDoc.setHtml( tr( "by %1" ).arg( artist ) ); + else + textDoc.setHtml( tr( "by %1 on %2" ).arg( artist ).arg( album ) ); + textDoc.setDocumentMargin( 0 ); + textDoc.setDefaultFont( painter->font() ); + textDoc.setDefaultTextOption( m_topOption ); + + drawRichText( painter, opt, leftRect.adjusted( 0, boldFontMetrics.height() + 1, 0, 0 ), Qt::AlignTop, textDoc ); + + if ( !( option.state & QStyle::State_Selected || item->isPlaying() ) ) + painter->setPen( Qt::gray ); + textDoc.setHtml( lowerText ); textDoc.setDocumentMargin( 0 ); textDoc.setDefaultFont( painter->font() ); @@ -241,7 +246,7 @@ PlaylistLargeItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& if ( textDoc.idealWidth() > leftRect.width() ) textDoc.setHtml( item->query()->socialActionDescription( "Love", Query::Short ) ); - drawRichText( painter, option, leftRect, Qt::AlignBottom, textDoc ); + drawRichText( painter, opt, leftRect, Qt::AlignBottom, textDoc ); const int sourceIconSize = avatarRect.width() - 6; if ( q->numResults() && !q->results().first()->sourceIcon( TomahawkUtils::RoundedCorners, QSize( sourceIconSize, sourceIconSize ) ).isNull() ) @@ -257,8 +262,7 @@ PlaylistLargeItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& { painter->setPen( opt.palette.text().color() ); painter->setFont( smallBoldFont ); - text = painter->fontMetrics().elidedText( TomahawkUtils::timeToString( duration ), Qt::ElideRight, rightRect.width() ); - painter->drawText( rightRect, text, m_centerRightOption ); + painter->drawText( rightRect, TomahawkUtils::timeToString( duration ), m_centerRightOption ); } } painter->restore(); diff --git a/src/libtomahawk/playlist/PlaylistView.cpp b/src/libtomahawk/playlist/PlaylistView.cpp index d8a2879a3..a22f8301b 100644 --- a/src/libtomahawk/playlist/PlaylistView.cpp +++ b/src/libtomahawk/playlist/PlaylistView.cpp @@ -22,9 +22,10 @@ #include #include "ViewManager.h" -#include "utils/Logger.h" #include "PlaylistUpdaterInterface.h" #include "Source.h" +#include "utils/TomahawkUtilsGui.h" +#include "utils/Logger.h" using namespace Tomahawk; @@ -160,3 +161,10 @@ PlaylistView::onMenuTriggered( int action ) break; } } + + +QPixmap +PlaylistView::pixmap() const +{ + return TomahawkUtils::defaultPixmap( TomahawkUtils::Playlist ); +} diff --git a/src/libtomahawk/playlist/PlaylistView.h b/src/libtomahawk/playlist/PlaylistView.h index a4c64efd8..8bfe68f44 100644 --- a/src/libtomahawk/playlist/PlaylistView.h +++ b/src/libtomahawk/playlist/PlaylistView.h @@ -40,7 +40,7 @@ public: virtual QList updaters() const; - virtual QPixmap pixmap() const { return QPixmap( RESPATH "images/playlist-icon.png" ); } + virtual QPixmap pixmap() const; virtual bool isTemporaryPage() const; signals: diff --git a/src/libtomahawk/playlist/TrackView.cpp b/src/libtomahawk/playlist/TrackView.cpp index fcd77f183..4edd4a890 100644 --- a/src/libtomahawk/playlist/TrackView.cpp +++ b/src/libtomahawk/playlist/TrackView.cpp @@ -774,7 +774,7 @@ TrackView::description() const QPixmap TrackView::pixmap() const { - return QPixmap( RESPATH "images/music-icon.png" ); + return TomahawkUtils::defaultPixmap( TomahawkUtils::SuperCollection ); } diff --git a/src/libtomahawk/playlist/TreeItemDelegate.cpp b/src/libtomahawk/playlist/TreeItemDelegate.cpp index 548734d04..ea991cad3 100644 --- a/src/libtomahawk/playlist/TreeItemDelegate.cpp +++ b/src/libtomahawk/playlist/TreeItemDelegate.cpp @@ -84,9 +84,9 @@ TreeItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, if ( item->isPlaying() ) { - o.palette.setColor( QPalette::Highlight, o.palette.color( QPalette::Mid ) ); - if ( o.state & QStyle::State_Selected ) - o.palette.setColor( QPalette::Text, textColor ); + textColor = TomahawkUtils::Colors::NOW_PLAYING_ITEM_TEXT; + o.palette.setColor( QPalette::Highlight, TomahawkUtils::Colors::NOW_PLAYING_ITEM ); + o.palette.setColor( QPalette::Text, TomahawkUtils::Colors::NOW_PLAYING_ITEM_TEXT ); o.state |= QStyle::State_Selected; } @@ -115,10 +115,11 @@ TreeItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, // Paint Now Playing Speaker Icon if ( item->isPlaying() && m_view->header()->visualIndex( index.column() ) == 0 ) { - r.adjust( 0, 0, 0, -3 ); - QRect npr = r.adjusted( 3, 1, 18 - r.width(), 1 ); + const int pixMargin = 1; + const int pixHeight = r.height() - pixMargin * 2; + QRect npr = r.adjusted( pixMargin, pixMargin, pixHeight - r.width() + pixMargin, -pixMargin ); painter->drawPixmap( npr, TomahawkUtils::defaultPixmap( TomahawkUtils::NowPlayingSpeaker, TomahawkUtils::Original, npr.size() ) ); - r.adjust( 25, 0, 0, 3 ); + r.adjust( pixHeight + 6, 0, 0, 0 ); } painter->setPen( o.palette.text().color() ); diff --git a/src/libtomahawk/playlist/TreeModel.cpp b/src/libtomahawk/playlist/TreeModel.cpp index 05689836e..688255e51 100644 --- a/src/libtomahawk/playlist/TreeModel.cpp +++ b/src/libtomahawk/playlist/TreeModel.cpp @@ -31,7 +31,7 @@ #include "database/Database.h" #include "AlbumPlaylistInterface.h" #include "PlayableItem.h" -#include "utils/TomahawkUtils.h" +#include "utils/TomahawkUtilsGui.h" #include "utils/Logger.h" using namespace Tomahawk; @@ -41,7 +41,7 @@ TreeModel::TreeModel( QObject* parent ) : PlayableModel( parent ) , m_mode( DatabaseMode ) { - setIcon( QPixmap( RESPATH "images/music-icon.png" ) ); + setIcon( TomahawkUtils::defaultPixmap( TomahawkUtils::SuperCollection ) ); connect( AudioEngine::instance(), SIGNAL( started( Tomahawk::result_ptr ) ), SLOT( onPlaybackStarted( Tomahawk::result_ptr ) ), Qt::DirectConnection ); connect( AudioEngine::instance(), SIGNAL( stopped() ), SLOT( onPlaybackStopped() ), Qt::DirectConnection ); diff --git a/src/libtomahawk/playlist/TreeProxyModelPlaylistInterface.cpp b/src/libtomahawk/playlist/TreeProxyModelPlaylistInterface.cpp index 54e2b25c5..079b4821f 100644 --- a/src/libtomahawk/playlist/TreeProxyModelPlaylistInterface.cpp +++ b/src/libtomahawk/playlist/TreeProxyModelPlaylistInterface.cpp @@ -70,6 +70,8 @@ TreeProxyModelPlaylistInterface::trackCount() const void TreeProxyModelPlaylistInterface::setCurrentIndex( qint64 index ) { + PlaylistInterface::setCurrentIndex( index ); + PlayableItem* item = static_cast( (void*)index ); if ( index < 0 || !item ) { diff --git a/src/libtomahawk/playlist/dynamic/widgets/DynamicQmlWidget.cpp b/src/libtomahawk/playlist/dynamic/widgets/DynamicQmlWidget.cpp index 8a2f3583c..d334873b2 100644 --- a/src/libtomahawk/playlist/dynamic/widgets/DynamicQmlWidget.cpp +++ b/src/libtomahawk/playlist/dynamic/widgets/DynamicQmlWidget.cpp @@ -13,6 +13,7 @@ #include "database/DatabaseCommand_PlaybackCharts.h" #include "widgets/DeclarativeCoverArtProvider.h" #include "utils/TomahawkUtilsGui.h" +#include "utils/Logger.h" #include #include diff --git a/src/libtomahawk/resolvers/QtScriptResolver.cpp b/src/libtomahawk/resolvers/QtScriptResolver.cpp index 978f2a0e4..2c727d5af 100644 --- a/src/libtomahawk/resolvers/QtScriptResolver.cpp +++ b/src/libtomahawk/resolvers/QtScriptResolver.cpp @@ -35,9 +35,11 @@ #include "network/Servent.h" -#include "utils/TomahawkUtils.h" +#include "utils/TomahawkUtilsGui.h" #include "utils/Logger.h" +#include "config.h" + // FIXME: bloody hack, remove this for 0.3 // this one adds new functionality to old resolvers #define RESOLVER_LEGACY_CODE "var resolver = Tomahawk.resolver.instance ? Tomahawk.resolver.instance : TomahawkResolver;" @@ -212,7 +214,7 @@ void ScriptEngine::javaScriptConsoleMessage( const QString& message, int lineNumber, const QString& sourceID ) { tLog() << "JAVASCRIPT:" << m_scriptPath << message << lineNumber << sourceID; -#ifndef QT_NO_DEBUG +#ifndef DEBUG_BUILD QMessageBox::critical( 0, "Script Resolver Error", QString( "%1 %2 %3 %4" ).arg( m_scriptPath ).arg( message ).arg( lineNumber ).arg( sourceID ) ); #endif } @@ -231,8 +233,7 @@ QtScriptResolver::QtScriptResolver( const QString& scriptPath ) m_name = QFileInfo( filePath() ).baseName(); // set the icon, if we launch properly we'll get the icon the resolver reports - m_icon.load( RESPATH "images/resolver-default.png" ); - + m_icon = TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultResolver, TomahawkUtils::Original, QSize( 128, 128 ) ); if ( !QFile::exists( filePath() ) ) { diff --git a/src/libtomahawk/resolvers/ScriptResolver.cpp b/src/libtomahawk/resolvers/ScriptResolver.cpp index 98a2a183b..b2cf5ec71 100644 --- a/src/libtomahawk/resolvers/ScriptResolver.cpp +++ b/src/libtomahawk/resolvers/ScriptResolver.cpp @@ -28,7 +28,7 @@ #include "Pipeline.h" #include "SourceList.h" -#include "utils/TomahawkUtils.h" +#include "utils/TomahawkUtilsGui.h" #include "utils/Logger.h" #ifdef Q_OS_WIN @@ -59,7 +59,7 @@ ScriptResolver::ScriptResolver( const QString& exe ) m_name = QFileInfo( filePath() ).baseName(); // set the icon, if we launch properly we'll get the icon the resolver reports - m_icon.load( RESPATH "images/resolver-default.png" ); + m_icon = TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultResolver, TomahawkUtils::Original, QSize( 128, 128 ) ); } diff --git a/src/libtomahawk/utils/ImageRegistry.cpp b/src/libtomahawk/utils/ImageRegistry.cpp new file mode 100644 index 000000000..8dc09c41e --- /dev/null +++ b/src/libtomahawk/utils/ImageRegistry.cpp @@ -0,0 +1,135 @@ +/* + * Copyright 2012, Christian Muehlhaeuser + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include "ImageRegistry.h" + +#include +#include +#include + +#include "utils/Logger.h" + +static QHash< QString, QHash< int, QHash< int, QPixmap > > > s_cache; +ImageRegistry* ImageRegistry::s_instance = 0; + + +ImageRegistry* +ImageRegistry::instance() +{ + return s_instance; +} + + +ImageRegistry::ImageRegistry() +{ + s_instance = this; +} + + +QIcon +ImageRegistry::icon( const QString& image, TomahawkUtils::ImageMode mode ) +{ + return pixmap( image, TomahawkUtils::defaultIconSize(), mode ); +} + + +QPixmap +ImageRegistry::pixmap( const QString& image, const QSize& size, TomahawkUtils::ImageMode mode ) +{ + QHash< int, QPixmap > subsubcache; + QHash< int, QHash< int, QPixmap > > subcache; + + if ( s_cache.contains( image ) ) + { + subcache = s_cache.value( image ); + + if ( subcache.contains( mode ) ) + { + subsubcache = subcache.value( mode ); + + if ( subsubcache.contains( size.width() ) ) + { + return subsubcache.value( size.width() ); + } + } + } + + // Image not found in cache. Let's load it. + QPixmap pixmap; + if ( image.toLower().endsWith( ".svg" ) ) + { + QSvgRenderer svgRenderer( image ); + QPixmap p( size.isNull() ? svgRenderer.defaultSize() : size ); + p.fill( Qt::transparent ); + + QPainter pixPainter( &p ); + svgRenderer.render( &pixPainter ); + + pixmap = p; + } + else + pixmap = QPixmap( image ); + + if ( !pixmap.isNull() ) + { + switch ( mode ) + { + case TomahawkUtils::RoundedCorners: + pixmap = TomahawkUtils::createRoundedImage( pixmap, size ); + break; + + default: + break; + } + + if ( !size.isNull() && pixmap.size() != size ) + pixmap = pixmap.scaled( size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); + + putInCache( image, size, mode, pixmap ); + } + + return pixmap; +} + + +void +ImageRegistry::putInCache( const QString& image, const QSize& size, TomahawkUtils::ImageMode mode, const QPixmap& pixmap ) +{ + tDebug() << Q_FUNC_INFO << "Adding to image cache:" << image << size << mode; + + QHash< int, QPixmap > subsubcache; + QHash< int, QHash< int, QPixmap > > subcache; + + if ( s_cache.contains( image ) ) + { + subcache = s_cache.value( image ); + + if ( subcache.contains( mode ) ) + { + subsubcache = subcache.value( mode ); + +/* if ( subsubcache.contains( size.width() ) ) + { + Q_ASSERT( false ); + }*/ + } + } + + subsubcache.insert( size.width(), pixmap ); + subcache.insert( mode, subsubcache ); + s_cache.insert( image, subcache ); +} diff --git a/src/libtomahawk/utils/ImageRegistry.h b/src/libtomahawk/utils/ImageRegistry.h new file mode 100644 index 000000000..ae12efdad --- /dev/null +++ b/src/libtomahawk/utils/ImageRegistry.h @@ -0,0 +1,42 @@ +/* + * Copyright 2012, Christian Muehlhaeuser + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef IMAGE_REGISTRY_H +#define IMAGE_REGISTRY_H + +#include + +#include "utils/TomahawkUtilsGui.h" +#include "DllMacro.h" + +class DLLEXPORT ImageRegistry +{ +public: + static ImageRegistry* instance(); + + explicit ImageRegistry(); + + QIcon icon( const QString& image, TomahawkUtils::ImageMode mode = TomahawkUtils::Original ); + QPixmap pixmap( const QString& image, const QSize& size, TomahawkUtils::ImageMode mode = TomahawkUtils::Original ); + +private: + void putInCache( const QString& image, const QSize& size, TomahawkUtils::ImageMode mode, const QPixmap& pixmap ); + + static ImageRegistry* s_instance; +}; + +#endif // IMAGE_REGISTRY_H diff --git a/src/libtomahawk/utils/ShortenedLinkParser.cpp b/src/libtomahawk/utils/ShortenedLinkParser.cpp index 5f6c7f786..47b851511 100644 --- a/src/libtomahawk/utils/ShortenedLinkParser.cpp +++ b/src/libtomahawk/utils/ShortenedLinkParser.cpp @@ -30,13 +30,11 @@ #include "jobview/JobStatusModel.h" #include "jobview/JobStatusView.h" #include "utils/NetworkReply.h" -#include "utils/TomahawkUtils.h" +#include "utils/TomahawkUtilsGui.h" #include "utils/Logger.h" using namespace Tomahawk; -QPixmap* ShortenedLinkParser::s_pixmap = 0; - ShortenedLinkParser::ShortenedLinkParser ( const QStringList& urls, QObject* parent ) : QObject( parent ) @@ -125,10 +123,7 @@ ShortenedLinkParser::checkFinished() QPixmap ShortenedLinkParser::pixmap() { - if ( !s_pixmap ) - s_pixmap = new QPixmap( RESPATH "images/add.png" ); - - return *s_pixmap; + return TomahawkUtils::defaultPixmap( TomahawkUtils::Add ); } #endif diff --git a/src/libtomahawk/utils/ShortenedLinkParser.h b/src/libtomahawk/utils/ShortenedLinkParser.h index 571993574..f35671b34 100644 --- a/src/libtomahawk/utils/ShortenedLinkParser.h +++ b/src/libtomahawk/utils/ShortenedLinkParser.h @@ -66,7 +66,6 @@ private: #ifndef ENABLE_HEADLESS static QPixmap pixmap(); - static QPixmap* s_pixmap; #endif QStringList m_links; diff --git a/src/libtomahawk/utils/SoundcloudParser.cpp b/src/libtomahawk/utils/SoundcloudParser.cpp index 4f61ba6fc..35fc6fc22 100644 --- a/src/libtomahawk/utils/SoundcloudParser.cpp +++ b/src/libtomahawk/utils/SoundcloudParser.cpp @@ -30,13 +30,11 @@ #include "jobview/JobStatusModel.h" #include "jobview/ErrorStatusMessage.h" #include "utils/NetworkReply.h" -#include "utils/TomahawkUtils.h" +#include "utils/TomahawkUtilsGui.h" #include "utils/Logger.h" using namespace Tomahawk; -QPixmap* SoundcloudParser::s_pixmap = 0; - SoundcloudParser::SoundcloudParser( const QStringList& Urls, bool createNewPlaylist, QObject* parent ) : QObject ( parent ) @@ -236,8 +234,5 @@ SoundcloudParser::soundcloudBrowseFinished() QPixmap SoundcloudParser::pixmap() const { - if ( !s_pixmap ) - s_pixmap = new QPixmap( RESPATH "images/soundcloud.png" ); - - return *s_pixmap; + return TomahawkUtils::defaultPixmap( TomahawkUtils::SoundcloudIcon ); } diff --git a/src/libtomahawk/utils/SoundcloudParser.h b/src/libtomahawk/utils/SoundcloudParser.h index 64b8c4b7c..bb35b6029 100644 --- a/src/libtomahawk/utils/SoundcloudParser.h +++ b/src/libtomahawk/utils/SoundcloudParser.h @@ -83,7 +83,6 @@ private: Tomahawk::playlist_ptr m_playlist; DropJobNotifier* m_browseJob; DropJob::DropType m_type; - static QPixmap* s_pixmap; }; } diff --git a/src/libtomahawk/utils/StyleHelper.cpp b/src/libtomahawk/utils/StyleHelper.cpp index 85cd3041d..c4f35c7ef 100644 --- a/src/libtomahawk/utils/StyleHelper.cpp +++ b/src/libtomahawk/utils/StyleHelper.cpp @@ -26,14 +26,14 @@ QColor StyleHelper::headerUpperColor() { - return QColor( "#464e57" ); + return QColor( "#615858" ); } QColor StyleHelper::headerLowerColor() { - return QColor( "#3f4650" ); + return QColor( "#231F1F" ); } @@ -49,12 +49,19 @@ StyleHelper::horizontalHeader( QPainter* painter, const QRect& r ) { painter->save(); - QRect upperHalf( 0, 0, r.width(), r.height() / 2 ); +/* QRect upperHalf( 0, 0, r.width(), r.height() / 2 ); QRect lowerHalf( 0, upperHalf.height(), r.width(), r.height() ); painter->fillRect( upperHalf, StyleHelper::headerUpperColor() ); - painter->fillRect( lowerHalf, StyleHelper::headerLowerColor() ); + painter->fillRect( lowerHalf, StyleHelper::headerLowerColor() );*/ + QLinearGradient gradient( QPoint( 0, 0 ), QPoint( 0, 1 ) ); + gradient.setCoordinateMode( QGradient::ObjectBoundingMode ); + gradient.setColorAt( 0.0, StyleHelper::headerLowerColor() ); + gradient.setColorAt( 1.0, StyleHelper::headerUpperColor() ); - { + painter->setBrush( gradient ); + painter->fillRect( r, gradient ); + +/* { QColor lineColor( 100, 100, 100 ); QLine line( 0, 0, r.width(), 0 ); painter->setPen( lineColor ); @@ -65,7 +72,7 @@ StyleHelper::horizontalHeader( QPainter* painter, const QRect& r ) QLine line( 0, r.height() - 1, r.width(), r.height() - 1 ); painter->setPen( lineColor ); painter->drawLine( line ); - } + }*/ painter->restore(); } @@ -79,7 +86,7 @@ StyleHelper::headerTextColor() /* - * This implementation is from QWindowsStyle (Qt 7.2) + * This implementation is from QWindowsStyle (Qt 4.2) * * It is licensed under the GPL 3: * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). @@ -96,7 +103,7 @@ void StyleHelper::drawArrow( QStyle::PrimitiveElement element, QPainter* p, cons QString pixmapName; pixmapName.sprintf( "arrow-%s-%d-%d-%d-%lld", "$qt_ia", uint(opt->state), element, size, opt->palette.cacheKey() ); - if ( !QPixmapCache::find( pixmapName, pixmap) ) + if ( !QPixmapCache::find( pixmapName, pixmap ) ) { int border = size / 5; int sqsize = 2 * ( size / 2 ); diff --git a/src/libtomahawk/utils/TomahawkUtils.h b/src/libtomahawk/utils/TomahawkUtils.h index 65d52d6e9..b78f22ecb 100644 --- a/src/libtomahawk/utils/TomahawkUtils.h +++ b/src/libtomahawk/utils/TomahawkUtils.h @@ -48,8 +48,79 @@ namespace TomahawkUtils DefaultArtistImage, DefaultTrackImage, DefaultSourceAvatar, + DefaultCollection, + DefaultResolver, NowPlayingSpeaker, - InfoIcon + NowPlayingSpeakerDark, + InfoIcon, + PlayButton, + PlayButtonPressed, + PauseButton, + PauseButtonPressed, + PrevButton, + PrevButtonPressed, + NextButton, + NextButtonPressed, + ShuffleOff, + ShuffleOffPressed, + ShuffleOn, + ShuffleOnPressed, + RepeatOne, + RepeatOnePressed, + RepeatAll, + RepeatAllPressed, + RepeatOff, + RepeatOffPressed, + VolumeMuted, + VolumeFull, + Share, + NotLoved, + Loved, + Configure, + GreenDot, + AddContact, + SubscribeOn, + SubscribeOff, + JumpLink, + ProcessStop, + HeadphonesOn, + HeadphonesOff, + PadlockClosed, + PadlockOpen, + Downloading, + Uploading, + ViewRefresh, + SuperCollection, + LovedPlaylist, + NewReleases, + NewAdditions, + RecentlyPlayed, + AutomaticPlaylist, + Charts, + Station, + Playlist, + Search, + ListRemove, + ListAdd, + AdvancedSettings, + AccountSettings, + MusicSettings, + Add, + DropSong, + DropAlbum, + DropAllSongs, + DropLocalSongs, + DropTopSongs, + LastfmIcon, + SpotifyIcon, + SoundcloudIcon, + AccountNone, + Starred, + Unstarred, + StarHovered, + SipPluginOnline, + SipPluginOffline, + Invalid }; enum ImageMode diff --git a/src/libtomahawk/utils/TomahawkUtilsGui.cpp b/src/libtomahawk/utils/TomahawkUtilsGui.cpp index 9c5eaa2d8..9137949d9 100644 --- a/src/libtomahawk/utils/TomahawkUtilsGui.cpp +++ b/src/libtomahawk/utils/TomahawkUtilsGui.cpp @@ -2,6 +2,7 @@ * * Copyright 2010-2011, Christian Muehlhaeuser * Copyright 2010-2011, Leo Franchi + * Copyright 2012, Teo Mrnjavac * * Tomahawk is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,16 +20,18 @@ #include "TomahawkUtilsGui.h" +#include "playlist/PlayableItem.h" #include "config.h" #include "Query.h" #include "Result.h" -#include "Logger.h" -#include "playlist/PlayableItem.h" #include "Source.h" +#include "ImageRegistry.h" +#include "Logger.h" #include #include #include +#include #include #include #include @@ -47,6 +50,10 @@ #include #endif +#ifdef QT_MAC_USE_COCOA + #include "widgets/SourceTreePopupDialog_mac.h" +#endif + // Defined in qpixmapfilter.cpp, private but exported extern void qt_blurImage( QPainter *p, QImage &blurImage, qreal radius, bool quality, bool alphaOnly, int transposed = 0 ); @@ -100,13 +107,13 @@ createDragPixmap( MediaType type, int itemCount ) switch ( type ) { case MediaTypeArtist: - pixmap = QPixmap( ":/data/images/artist-icon.png" ).scaledToWidth( size, Qt::SmoothTransformation ); + pixmap = TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultArtistImage, TomahawkUtils::Original, QSize( size, size ) ); break; case MediaTypeAlbum: - pixmap = QPixmap( ":/data/images/album-icon.png" ).scaledToWidth( size, Qt::SmoothTransformation ); + pixmap = TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultAlbumCover, TomahawkUtils::Original, QSize( size, size ) ); break; case MediaTypeTrack: - pixmap = QPixmap( QString( ":/data/images/track-icon-%2x%2.png" ).arg( size ) ); + pixmap = TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultTrackImage, TomahawkUtils::Original, QSize( size, size ) ); break; } @@ -385,6 +392,14 @@ setDefaultFontSize( int points ) } +QSize +defaultIconSize() +{ + const int w = defaultFontHeight() * 1.6; + return QSize( w, w ); +} + + QColor alphaBlend( const QColor& colorFrom, const QColor& colorTo, float opacity ) { @@ -402,58 +417,288 @@ QPixmap defaultPixmap( ImageType type, ImageMode mode, const QSize& size ) { QPixmap pixmap; - QHash< int, QPixmap > subsubcache; - QHash< int, QHash< int, QPixmap > > subcache; - static QHash< int, QHash< int, QHash< int, QPixmap > > > cache; - - if ( cache.contains( type ) ) - { - subcache = cache.value( type ); - - if ( subcache.contains( mode ) ) - { - subsubcache = subcache.value( mode ); - - if ( subsubcache.contains( size.width() ) ) - return subsubcache.value( size.width() ); - } - } switch ( type ) { case DefaultAlbumCover: if ( mode == CoverInCase ) - pixmap = QPixmap( RESPATH "images/no-album-art-placeholder.png" ); + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/no-album-art-placeholder.svg", size ); else if ( mode == Grid ) - pixmap = QPixmap( RESPATH "images/album-placeholder-grid.png" ); + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/album-placeholder-grid.svg", size ); else - pixmap = QPixmap( RESPATH "images/no-album-no-case.png" ); + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/album-icon.svg", size ); break; case DefaultArtistImage: if ( mode == Grid ) - pixmap = QPixmap( RESPATH "images/artist-placeholder-grid.png" ); + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/artist-placeholder-grid.svg", size ); else - pixmap = QPixmap( RESPATH "images/no-artist-image-placeholder.png" ); + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/artist-icon.svg", size ); break; case DefaultTrackImage: - pixmap = QPixmap( RESPATH "images/track-placeholder.png" ); + if ( mode == Grid ) + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/track-placeholder-grid.svg", size ); + else + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/track-icon.svg", size ); break; case DefaultSourceAvatar: if ( mode == RoundedCorners ) - pixmap = TomahawkUtils::createRoundedImage( QPixmap( RESPATH "images/user-avatar.png" ), size ); + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/user-avatar.svg", size, TomahawkUtils::RoundedCorners ); else - pixmap = QPixmap( RESPATH "images/user-avatar.png" ); + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/user-avatar.svg", size ); + break; + + case DefaultResolver: + if ( mode == RoundedCorners ) + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/resolver-default.svg", size, TomahawkUtils::RoundedCorners ); + else + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/resolver-default.svg", size ); + break; + + case DefaultCollection: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/collection.svg", size ); break; case NowPlayingSpeaker: - pixmap = QPixmap( RESPATH "images/now-playing-speaker.png" ); + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/now-playing-speaker.svg", size ); + break; + + case NowPlayingSpeakerDark: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/now-playing-speaker-dark.svg", size ); break; case InfoIcon: - pixmap = QPixmap( RESPATH "images/info.png" ); + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/info.svg", size ); + break; + + case PlayButton: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/play-rest.svg", size ); + break; + case PlayButtonPressed: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/play-pressed.svg", size ); + break; + + case PauseButton: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/pause-rest.svg", size ); + break; + case PauseButtonPressed: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/pause-pressed.svg", size ); + break; + + case PrevButton: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/back-rest.svg", size ); + break; + case PrevButtonPressed: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/back-pressed.svg", size ); + break; + + case NextButton: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/skip-rest.svg", size ); + break; + case NextButtonPressed: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/skip-pressed.svg", size ); + break; + + case ShuffleOff: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/shuffle-off-rest.svg", size ); + break; + case ShuffleOffPressed: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/shuffle-off-pressed.svg", size ); + break; + case ShuffleOn: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/shuffle-on-rest.svg", size ); + break; + case ShuffleOnPressed: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/shuffle-on-pressed.svg", size ); + break; + + case RepeatOne: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/repeat-1-on-rest.svg", size ); + break; + case RepeatOnePressed: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/repeat-1-on-pressed.svg", size ); + break; + case RepeatAll: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/repeat-all-on-rest.svg", size ); + break; + case RepeatAllPressed: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/repeat-all-on-pressed.svg", size ); + break; + case RepeatOff: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/repeat-off-rest.svg", size ); + break; + case RepeatOffPressed: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/repeat-off-pressed.svg", size ); + break; + + case VolumeMuted: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/volume-icon-muted.svg", size ); + break; + case VolumeFull: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/volume-icon-full.svg", size ); + break; + + case Share: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/share.svg", size ); + break; + + case NotLoved: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/not-loved.svg", size ); + break; + case Loved: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/loved.svg", size ); + break; + + case Configure: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/configure.svg", size ); + break; + + case GreenDot: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/green-dot.svg", size ); + break; + + case AddContact: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/add-contact.svg", size ); + break; + + case SubscribeOn: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/subscribe-on.svg", size ); + break; + case SubscribeOff: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/subscribe-off.svg", size ); + break; + + case JumpLink: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/jump-link.svg", size ); + break; + + case ProcessStop: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/process-stop.svg", size ); + break; + + case HeadphonesOn: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/headphones.svg", size ); + break; + case HeadphonesOff: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/headphones-off.svg", size ); + break; + + case PadlockClosed: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/closed-padlock.svg", size ); + break; + case PadlockOpen: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/open-padlock.svg", size ); + break; + + case Downloading: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/downloading.svg", size ); + break; + case Uploading: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/uploading.svg", size ); + break; + + case ViewRefresh: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/view-refresh.svg", size ); + break; + + case SuperCollection: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/supercollection.svg", size ); + break; + case LovedPlaylist: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/loved_playlist.svg", size ); + break; + case NewReleases: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/new-releases.svg", size ); + break; + case NewAdditions: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/new-additions.svg", size ); + break; + case RecentlyPlayed: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/recently-played.svg", size ); + break; + case Charts: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/charts.svg", size ); + break; + case AutomaticPlaylist: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/automatic-playlist.svg", size ); + break; + case Station: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/station.svg", size ); + break; + case Playlist: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/playlist-icon.svg", size ); + break; + case Search: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/search-icon.svg", size ); + break; + + case Add: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/add.svg", size ); + break; + case ListAdd: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/list-add.svg", size ); + break; + case ListRemove: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/list-remove.svg", size ); + break; + + case AdvancedSettings: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/advanced-settings.svg", size ); + break; + case AccountSettings: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/account-settings.svg", size ); + break; + case MusicSettings: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/music-settings.svg", size ); + break; + + case DropSong: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/drop-song.svg", size ); + break; + case DropAlbum: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/drop-album.svg", size ); + break; + case DropAllSongs: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/drop-all-songs.svg", size ); + break; + case DropLocalSongs: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/drop-local-songs.svg", size ); + break; + case DropTopSongs: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/drop-top-songs.svg", size ); + break; + + case Starred: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/starred.svg", size ); + break; + case Unstarred: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/star-unstarred.svg", size ); + break; + case StarHovered: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/star-hover.svg", size ); + break; + + case SipPluginOnline: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/sipplugin-online.svg", size ); + break; + case SipPluginOffline: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/sipplugin-offline.svg", size ); + break; + + case AccountNone: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/account-none.svg", size ); + break; + case LastfmIcon: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/lastfm-icon.svg", size ); + break; + case SpotifyIcon: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/spotify-sourceicon.svg", size ); + break; + case SoundcloudIcon: + pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/soundcloud.svg", size ); + break; default: break; @@ -465,13 +710,6 @@ defaultPixmap( ImageType type, ImageMode mode, const QSize& size ) return QPixmap(); } - if ( !size.isNull() ) - pixmap = pixmap.scaled( size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); - - subsubcache.insert( size.width(), pixmap ); - subcache.insert( mode, subsubcache ); - cache.insert( type, subcache ); - return pixmap; } @@ -483,14 +721,12 @@ prepareStyleOption( QStyleOptionViewItemV4* option, const QModelIndex& index, Pl if ( item->isPlaying() ) { - option->palette.setColor( QPalette::Highlight, option->palette.color( QPalette::Mid ) ); - - option->backgroundBrush = option->palette.color( QPalette::Mid ); - option->palette.setColor( QPalette::Text, option->palette.color( QPalette::Text ) ); + option->backgroundBrush = TomahawkUtils::Colors::NOW_PLAYING_ITEM; + option->palette.setColor( QPalette::Highlight, TomahawkUtils::Colors::NOW_PLAYING_ITEM.lighter() ); + option->palette.setColor( QPalette::Text, TomahawkUtils::Colors::NOW_PLAYING_ITEM_TEXT ); } - - if ( option->state & QStyle::State_Selected && !item->isPlaying() ) + else if ( option->state & QStyle::State_Selected ) { option->palette.setColor( QPalette::Text, option->palette.color( QPalette::HighlightedText ) ); } @@ -677,4 +913,85 @@ addDropShadow( const QPixmap& source, const QSize& targetSize ) } +QPixmap +squareCenterPixmap( const QPixmap& sourceImage ) +{ + if ( sourceImage.width() != sourceImage.height() ) + { + const int sqwidth = qMin( sourceImage.width(), sourceImage.height() ); + const int delta = abs( sourceImage.width() - sourceImage.height() ); + + if ( sourceImage.width() > sourceImage.height() ) + { + return sourceImage.copy( delta / 2, 0, sqwidth, sqwidth ); + } + else + { + return sourceImage.copy( 0, delta / 2, sqwidth, sqwidth ); + } + } + + return sourceImage; +} + + +void +drawCompositedPopup( QWidget* widget, + const QPainterPath& outline, + const QColor& lineColor, + const QBrush& backgroundBrush, + qreal opacity ) +{ + bool compositingWorks = true; +#if defined(Q_WS_WIN) //HACK: Windows refuses to perform compositing so we must fake it + compositingWorks = false; +#elif defined(Q_WS_X11) + if ( !QX11Info::isCompositingManagerRunning() ) + compositingWorks = false; +#endif + + QPainter p; + QImage result; + if ( compositingWorks ) + { + p.begin( widget ); + p.setRenderHint( QPainter::Antialiasing ); + p.setBackgroundMode( Qt::TransparentMode ); + } + else + { + result = QImage( widget->rect().size(), QImage::Format_ARGB32_Premultiplied ); + p.begin( &result ); + p.setCompositionMode( QPainter::CompositionMode_Source ); + p.fillRect( result.rect(), Qt::transparent ); + p.setCompositionMode( QPainter::CompositionMode_SourceOver ); + } + + QPen pen( lineColor ); + pen.setWidth( 2 ); + p.setPen( pen ); + p.drawPath( outline ); + + p.setOpacity( opacity ); + p.fillPath( outline, backgroundBrush ); + p.end(); + + if ( !compositingWorks ) + { + QPainter finalPainter( widget ); + finalPainter.setRenderHint( QPainter::Antialiasing ); + finalPainter.setBackgroundMode( Qt::TransparentMode ); + finalPainter.drawImage( 0, 0, result ); + widget->setMask( QPixmap::fromImage( result ).mask() ); + } + +#ifdef QT_MAC_USE_COCOA + // Work around bug in Qt/Mac Cocoa where opening subsequent popups + // would incorrectly calculate the background due to it not being + // invalidated. + SourceTreePopupHelper::clearBackground( widget ); +#endif +} + + } // ns diff --git a/src/libtomahawk/utils/TomahawkUtilsGui.h b/src/libtomahawk/utils/TomahawkUtilsGui.h index a9673c46e..206a016cd 100644 --- a/src/libtomahawk/utils/TomahawkUtilsGui.h +++ b/src/libtomahawk/utils/TomahawkUtilsGui.h @@ -58,27 +58,30 @@ namespace TomahawkUtils DLLEXPORT void unmarginLayout( QLayout* layout ); + DLLEXPORT void setDefaultFontSize( int points ); DLLEXPORT int defaultFontSize(); DLLEXPORT int defaultFontHeight(); - DLLEXPORT void setDefaultFontSize( int points ); - - DLLEXPORT QPixmap defaultPixmap( ImageType type, ImageMode mode = TomahawkUtils::Original, const QSize& size = QSize( 0, 0 ) ); + DLLEXPORT QSize defaultIconSize(); DLLEXPORT void prepareStyleOption( QStyleOptionViewItemV4* option, const QModelIndex& index, PlayableItem* item ); DLLEXPORT void drawRoundedButton( QPainter* painter, const QRect& btnRect, const QColor& color, const QColor &gradient1bottom = QColor(), const QColor& gradient2top = QColor(), const QColor& gradient2bottom = QColor() ); - DLLEXPORT void styleScrollBar( QScrollBar* scrollBar ); + DLLEXPORT QPixmap defaultPixmap( ImageType type, ImageMode mode = TomahawkUtils::Original, const QSize& size = QSize( 0, 0 ) ); DLLEXPORT QPixmap createTiledPixmap( int width, int height, const QImage& src ); - DLLEXPORT QPixmap addDropShadow( const QPixmap& sourceImage, const QSize& targetSize ); + DLLEXPORT QPixmap squareCenterPixmap( const QPixmap& sourceImage ); + + DLLEXPORT void drawCompositedPopup( QWidget* widget, const QPainterPath& outline, const QColor& lineColor, const QBrush& backgroundBrush, qreal opacity ); namespace Colors { static const QColor BORDER_LINE = QColor( "#8c8c8c" ); static const QColor POPUP_BACKGROUND = QColor( "#ffffff" ); static const QColor GROUP_HEADER = QColor( "#637180" ); + static const QColor NOW_PLAYING_ITEM = QColor( "#962c26" ); + static const QColor NOW_PLAYING_ITEM_TEXT = QColor( "#ffffff" ); } static const int POPUP_ROUNDING_RADIUS = 6; diff --git a/src/libtomahawk/widgets/BasicHeader.cpp b/src/libtomahawk/widgets/BasicHeader.cpp index a6c06bed3..ed797efdd 100644 --- a/src/libtomahawk/widgets/BasicHeader.cpp +++ b/src/libtomahawk/widgets/BasicHeader.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include "utils/TomahawkUtilsGui.h" #include "ElidedLabel.h" @@ -74,28 +75,27 @@ BasicHeader::BasicHeader( QWidget* parent ) m_descriptionLabel->setAlignment( Qt::AlignTop | Qt::AlignLeft ); m_captionLabel->setMargin( 2 ); - m_descriptionLabel->setMargin( 1 ); + m_descriptionLabel->setMargin( 2 ); + +/* QGraphicsDropShadowEffect* effect = new QGraphicsDropShadowEffect(); + effect->setBlurRadius( 4 ); + effect->setXOffset( 0 ); + effect->setYOffset( 0 ); + effect->setColor( Qt::white ); + m_captionLabel->setGraphicsEffect( effect );*/ +// m_descriptionLabel->setGraphicsEffect( effect ); TomahawkUtils::unmarginLayout( layout() ); layout()->setContentsMargins( 8, 4, 8, 4 ); setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ); setFixedHeight( 80 ); - pal = palette(); - pal.setColor( QPalette::Window, QColor( "#454e59" ) ); - setPalette( pal ); - setAutoFillBackground( true ); - - if ( !s_tiledHeader ) - s_tiledHeader = new QPixmap( TomahawkUtils::createTiledPixmap( 2000, height(), QImage( RESPATH "images/playlist-header-tiled.png" ) ) ); } BasicHeader::~BasicHeader() { - delete s_tiledHeader; - s_tiledHeader = 0; } @@ -121,20 +121,18 @@ BasicHeader::setPixmap( const QPixmap& p ) void -BasicHeader::paintEvent( QPaintEvent* ) +BasicHeader::paintEvent( QPaintEvent* event ) { - if ( !s_tiledHeader || s_tiledHeader->isNull() || width() > s_tiledHeader->width() ) - { - delete s_tiledHeader; - s_tiledHeader = new QPixmap( TomahawkUtils::createTiledPixmap( width(), height(), QImage( RESPATH "images/playlist-header-tiled.png" ) ) ); - } + QWidget::paintEvent( event ); - if ( !s_tiledHeader || s_tiledHeader->isNull() ) - return; + QPainter painter( this ); + painter.setRenderHint( QPainter::Antialiasing ); - QPainter p( this ); + QLinearGradient gradient( QPoint( 0, 0 ), QPoint( 0, 1 ) ); + gradient.setCoordinateMode( QGradient::ObjectBoundingMode ); + gradient.setColorAt( 0.0, QColor( "#615858" ) ); + gradient.setColorAt( 1.0, QColor( "#231F1F" ) ); - // Truncate bg pixmap and paint into bg - p.drawPixmap( rect(), *s_tiledHeader, rect() ); + painter.setBrush( gradient ); + painter.fillRect( event->rect(), gradient ); } - diff --git a/src/libtomahawk/widgets/BasicHeader.h b/src/libtomahawk/widgets/BasicHeader.h index aaed9bee9..4b8d59349 100644 --- a/src/libtomahawk/widgets/BasicHeader.h +++ b/src/libtomahawk/widgets/BasicHeader.h @@ -42,7 +42,7 @@ public slots: virtual void setPixmap( const QPixmap& p ); protected: - void paintEvent( QPaintEvent* ); + virtual void paintEvent( QPaintEvent* event ); QLabel* m_imageLabel; ElidedLabel* m_captionLabel; diff --git a/src/libtomahawk/widgets/DeclarativeCoverArtProvider.cpp b/src/libtomahawk/widgets/DeclarativeCoverArtProvider.cpp index 644b3f3e5..28b8901aa 100644 --- a/src/libtomahawk/widgets/DeclarativeCoverArtProvider.cpp +++ b/src/libtomahawk/widgets/DeclarativeCoverArtProvider.cpp @@ -5,6 +5,7 @@ #include "Album.h" #include "Artist.h" #include "utils/TomahawkUtilsGui.h" +#include "utils/Logger.h" #include #include diff --git a/src/libtomahawk/widgets/NewReleasesWidget.cpp b/src/libtomahawk/widgets/NewReleasesWidget.cpp index dcc701128..5fd039eae 100644 --- a/src/libtomahawk/widgets/NewReleasesWidget.cpp +++ b/src/libtomahawk/widgets/NewReleasesWidget.cpp @@ -20,7 +20,6 @@ */ #include "NewReleasesWidget.h" -#include "WhatsHotWidget_p.h" #include "ui_NewReleasesWidget.h" #include "ViewManager.h" @@ -69,7 +68,7 @@ NewReleasesWidget::NewReleasesWidget( QWidget* parent ) m_sortedProxy->setDynamicSortFilter( true ); m_sortedProxy->setFilterCaseSensitivity( Qt::CaseInsensitive ); - ui->breadCrumbLeft->setRootIcon( QPixmap( RESPATH "images/new-releases.png" ) ); + ui->breadCrumbLeft->setRootIcon( TomahawkUtils::defaultPixmap( TomahawkUtils::NewReleases, TomahawkUtils::Original ) ); connect( ui->breadCrumbLeft, SIGNAL( activateIndex( QModelIndex ) ), SLOT( leftCrumbIndexChanged(QModelIndex) ) ); diff --git a/src/libtomahawk/widgets/PlayableCover.cpp b/src/libtomahawk/widgets/PlayableCover.cpp new file mode 100644 index 000000000..20cbfd47c --- /dev/null +++ b/src/libtomahawk/widgets/PlayableCover.cpp @@ -0,0 +1,108 @@ +/* === This file is part of Tomahawk Player - === + * + * Copyright 2011 - 2012, Christian Muehlhaeuser + * + * Tomahawk is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Tomahawk is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Tomahawk. If not, see . + */ + +#include "PlayableCover.h" + +#include "audio/AudioEngine.h" +#include "widgets/ImageButton.h" +#include "utils/TomahawkUtilsGui.h" +#include "utils/Logger.h" + +#include + + +PlayableCover::PlayableCover( QWidget* parent ) + : QLabel( parent ) +{ + setMouseTracking( true ); + + m_button = new ImageButton( this ); + m_button->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::PlayButton, TomahawkUtils::Original, QSize( 48, 48 ) ) ); + m_button->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::PlayButtonPressed, TomahawkUtils::Original, QSize( 48, 48 ) ), QIcon::Off, QIcon::Active ); + m_button->setFixedSize( 48, 48 ); + m_button->setContentsMargins( 0, 0, 0, 0 ); + m_button->setFocusPolicy( Qt::NoFocus ); + m_button->installEventFilter( this ); + m_button->hide(); + + connect( m_button, SIGNAL( clicked( bool ) ), SLOT( onClicked() ) ); +} + + +PlayableCover::~PlayableCover() +{ +} + + +void +PlayableCover::enterEvent( QEvent* event ) +{ + QLabel::enterEvent( event ); + + m_button->show(); +} + + +void +PlayableCover::leaveEvent( QEvent* event ) +{ + QLabel::leaveEvent( event ); + + m_button->hide(); +} + + +void +PlayableCover::resizeEvent( QResizeEvent* event ) +{ + QLabel::resizeEvent( event ); + m_button->move( contentsRect().center() - QPoint( 23, 23 ) ); +} + + +void +PlayableCover::onClicked() +{ + if ( m_artist ) + AudioEngine::instance()->playItem( m_artist ); + else if ( m_album ) + AudioEngine::instance()->playItem( m_album ); + else if ( m_query ) + AudioEngine::instance()->playItem( Tomahawk::playlistinterface_ptr(), m_query ); +} + + +void +PlayableCover::setArtist( const Tomahawk::artist_ptr& artist ) +{ + m_artist = artist; +} + + +void +PlayableCover::setAlbum( const Tomahawk::album_ptr& album ) +{ + m_album = album; +} + + +void +PlayableCover::setQuery( const Tomahawk::query_ptr& query ) +{ + m_query = query; +} diff --git a/src/libtomahawk/widgets/PlayableCover.h b/src/libtomahawk/widgets/PlayableCover.h new file mode 100644 index 000000000..5bc505e75 --- /dev/null +++ b/src/libtomahawk/widgets/PlayableCover.h @@ -0,0 +1,66 @@ +/* === This file is part of Tomahawk Player - === + * + * Copyright 2011 - 2012, Christian Muehlhaeuser + * + * Tomahawk is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Tomahawk is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Tomahawk. If not, see . + */ + +#ifndef PLAYABLEPIXMAP_H +#define PLAYABLEPIXMAP_H + +#include +#include +#include + +#include "Artist.h" +#include "DllMacro.h" + +class ImageButton; + +/** + * \class PlayableCover + * \brief QLabel which shows a play/pause button on hovering. + */ +class DLLEXPORT PlayableCover : public QLabel +{ +Q_OBJECT + +public: + PlayableCover( QWidget* parent = 0 ); + virtual ~PlayableCover(); + +public slots: + virtual void setArtist( const Tomahawk::artist_ptr& artist ); + virtual void setAlbum( const Tomahawk::album_ptr& album ); + virtual void setQuery( const Tomahawk::query_ptr& query ); + +protected: + virtual void resizeEvent( QResizeEvent* event ); + + void leaveEvent( QEvent* event ); + void enterEvent( QEvent* event ); + +private slots: + void onClicked(); + +private: + QPixmap m_pixmap; + + ImageButton* m_button; + Tomahawk::artist_ptr m_artist; + Tomahawk::album_ptr m_album; + Tomahawk::query_ptr m_query; +}; + +#endif diff --git a/src/libtomahawk/widgets/QueryLabel.cpp b/src/libtomahawk/widgets/QueryLabel.cpp index d41e422b0..35b11628c 100644 --- a/src/libtomahawk/widgets/QueryLabel.cpp +++ b/src/libtomahawk/widgets/QueryLabel.cpp @@ -93,7 +93,6 @@ QueryLabel::init() m_mode = Qt::ElideMiddle; m_jumpLinkVisible = false; - m_jumpPixmap = QPixmap( RESPATH "images/jump-link.png" ).scaled( QSize( fontMetrics().height(), fontMetrics().height() ), Qt::KeepAspectRatio, Qt::SmoothTransformation ); } @@ -111,7 +110,7 @@ QueryLabel::text() const { text += m_result->artist()->name(); } - if ( m_type & Album ) + if ( m_type & Album && !m_result->album()->name().isEmpty() ) { smartAppend( text, m_result->album()->name() ); } @@ -126,7 +125,7 @@ QueryLabel::text() const { text += m_query->artist(); } - if ( m_type & Album ) + if ( m_type & Album && !m_query->album().isEmpty() ) { smartAppend( text, m_query->album() ); } @@ -373,8 +372,8 @@ QueryLabel::paintEvent( QPaintEvent* event ) QPainter p( this ); QRect r = contentsRect(); QString s = text(); - const QString elidedText = fontMetrics().elidedText( s, m_mode, r.width() ); const QFontMetrics& fm = fontMetrics(); + const QString elidedText = fm.elidedText( s, m_mode, r.width() ); p.save(); p.setRenderHint( QPainter::Antialiasing ); @@ -430,7 +429,7 @@ QueryLabel::paintEvent( QPaintEvent* event ) p.drawText( r, m_align, artist()->name() ); r.adjust( artistX, 0, 0, 0 ); } - if ( m_type & Album ) + if ( m_type & Album && !album()->name().isEmpty() ) { p.setBrush( palette().window() ); if ( !m_useCustomPen ) @@ -456,7 +455,7 @@ QueryLabel::paintEvent( QPaintEvent* event ) if ( !m_useCustomPen ) p.setPen( palette().color( foregroundRole() ) ); - if ( m_type & Artist || m_type & Album ) + if ( m_type & Artist || ( m_type & Album && !album()->name().isEmpty() ) ) { p.drawText( r, m_align, DASH ); r.adjust( dashX, 0, 0, 0 ); @@ -475,7 +474,7 @@ QueryLabel::paintEvent( QPaintEvent* event ) { r.adjust( 6, 0, 0, 0 ); r.setWidth( r.height() ); - p.drawPixmap( r, m_jumpPixmap.scaled( r.size(), Qt::KeepAspectRatio, Qt::SmoothTransformation ) ); + p.drawPixmap( r, TomahawkUtils::defaultPixmap( TomahawkUtils::JumpLink, TomahawkUtils::Original, r.size() ) ); } } @@ -598,7 +597,7 @@ QueryLabel::mouseMoveEvent( QMouseEvent* event ) { trackX += contentsMargins().left(); } - if ( m_type & Album ) + if ( m_type & Album && !album()->name().isEmpty() ) { trackX += albumX + dashX; albumX += contentsMargins().left(); @@ -621,21 +620,21 @@ QueryLabel::mouseMoveEvent( QMouseEvent* event ) hoverArea.setLeft( 0 ); hoverArea.setRight( artistX + contentsMargins().left() - 1 ); } - else if ( m_type & Album && x < albumX && x > artistX ) + else if ( m_type & Album && !album()->name().isEmpty() && x < albumX && x > artistX ) { m_hoverType = Album; int spacing = ( m_type & Artist ) ? dashX : 0; - hoverArea.setLeft( artistX + spacing ); - hoverArea.setRight( albumX + spacing + contentsMargins().left() - 1 ); + hoverArea.setLeft( artistX + spacing - contentsMargins().left() ); + hoverArea.setRight( albumX + contentsMargins().left() - 1 ); } else if ( m_type & Track && x < trackX && x > albumX ) { m_hoverType = Track; - int spacing = ( m_type & Album ) ? dashX : 0; + int spacing = ( m_type & Album && !album()->name().isEmpty() ) ? dashX : 0; hoverArea.setLeft( albumX + spacing ); hoverArea.setRight( trackX + contentsMargins().left() - 1 ); } - else if ( m_jumpLinkVisible && x < trackX + 6 + m_jumpPixmap.width() && x > trackX + 6 ) + else if ( m_jumpLinkVisible && x < trackX + 6 + fm.height() && x > trackX + 6 ) { m_hoverType = Complete; } diff --git a/src/libtomahawk/widgets/QueryLabel.h b/src/libtomahawk/widgets/QueryLabel.h index 229f59a55..53c3521c4 100644 --- a/src/libtomahawk/widgets/QueryLabel.h +++ b/src/libtomahawk/widgets/QueryLabel.h @@ -145,7 +145,6 @@ private: QMargins m_textMargins; bool m_jumpLinkVisible; - QPixmap m_jumpPixmap; }; #endif // QUERYLABEL_H diff --git a/src/libtomahawk/widgets/SearchWidget.cpp b/src/libtomahawk/widgets/SearchWidget.cpp index 51557c7d6..4a3e1e541 100644 --- a/src/libtomahawk/widgets/SearchWidget.cpp +++ b/src/libtomahawk/widgets/SearchWidget.cpp @@ -213,3 +213,10 @@ SearchWidget::sortAlbums() m_albumsModel->clear(); m_albumsModel->appendAlbums( sortedAlbums ); } + + +QPixmap +SearchWidget::pixmap() const +{ + return TomahawkUtils::defaultPixmap( TomahawkUtils::Search ); +} diff --git a/src/libtomahawk/widgets/SearchWidget.h b/src/libtomahawk/widgets/SearchWidget.h index e00fdf904..8955f8904 100644 --- a/src/libtomahawk/widgets/SearchWidget.h +++ b/src/libtomahawk/widgets/SearchWidget.h @@ -52,7 +52,7 @@ public: virtual QString title() const { return QString( tr( "Search: %1" ) ).arg( m_search ); } virtual QString description() const { return tr( "Results for '%1'" ).arg( m_search ); } - virtual QPixmap pixmap() const { return QPixmap( RESPATH "images/search-icon.png" ); } + virtual QPixmap pixmap() const; virtual bool isTemporaryPage() const { return true; } diff --git a/src/libtomahawk/widgets/SourceTreePopupDialog.cpp b/src/libtomahawk/widgets/SourceTreePopupDialog.cpp index 3a9cb9fe2..c8a91a69b 100644 --- a/src/libtomahawk/widgets/SourceTreePopupDialog.cpp +++ b/src/libtomahawk/widgets/SourceTreePopupDialog.cpp @@ -19,8 +19,6 @@ #include "SourceTreePopupDialog.h" -#include "utils/TomahawkUtilsGui.h" - #include #include #include @@ -33,9 +31,12 @@ #include #ifdef QT_MAC_USE_COCOA -#include "SourceTreePopupDialog_mac.h" + #include "SourceTreePopupDialog_mac.h" #endif +#include "utils/TomahawkUtilsGui.h" +#include "utils/ImageRegistry.h" + using namespace Tomahawk; SourceTreePopupDialog::SourceTreePopupDialog() @@ -69,8 +70,8 @@ SourceTreePopupDialog::SourceTreePopupDialog() m_label = new QLabel( this ); m_buttons = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this ); - m_buttons->button( QDialogButtonBox::Ok )->setIcon( QIcon( RESPATH "images/delete.png" ) ); - m_buttons->button( QDialogButtonBox::Cancel )->setIcon( QIcon( RESPATH "images/cancel.png" ) ); + m_buttons->button( QDialogButtonBox::Ok )->setIcon( ImageRegistry::instance()->icon( RESPATH "images/delete.svg" ) ); + m_buttons->button( QDialogButtonBox::Cancel )->setIcon( ImageRegistry::instance()->icon( RESPATH "images/cancel.svg" ) ); connect( m_buttons, SIGNAL( accepted() ), this, SLOT( onAccepted() ) ); connect( m_buttons, SIGNAL( rejected() ), this, SLOT( onRejected() ) ); @@ -205,28 +206,18 @@ SourceTreePopupDialog::paintEvent( QPaintEvent* event ) outline.lineTo( leftEdgeOffset, brect.top() + brect.height() / 2 + leftTriangleWidth / 2 ); outline.lineTo( brect.left(), brect.top() + brect.height() / 2 ); - QPainter p( this ); - - p.setRenderHint( QPainter::Antialiasing ); - - QPen pen( TomahawkUtils::Colors::BORDER_LINE ); - pen.setWidth( 2 ); - p.setPen( pen ); - p.drawPath( outline ); - -#ifdef Q_OS_MAC - p.setOpacity( 0.93 ); - p.fillPath( outline, QColor( "#D6E3F1" ) ); +#ifndef Q_OS_MAC + TomahawkUtils::drawCompositedPopup( this, + outline, + TomahawkUtils::Colors::BORDER_LINE, + TomahawkUtils::Colors::POPUP_BACKGROUND, + TomahawkUtils::POPUP_OPACITY ); #else - p.setOpacity( TomahawkUtils::POPUP_OPACITY ); - p.fillPath( outline, TomahawkUtils::Colors::POPUP_BACKGROUND ); -#endif - -#ifdef QT_MAC_USE_COCOA - // Work around bug in Qt/Mac Cocoa where opening subsequent popups - // would incorrectly calculate the background due to it not being - // invalidated. - SourceTreePopupHelper::clearBackground( this ); + TomahawkUtils::drawCompositedPopup( this, + outline, + TomahawkUtils::Colors::BORDER_LINE, + QColor( "#D6E3F1" ), + 0.93 ); #endif } diff --git a/src/libtomahawk/widgets/WelcomeWidget.cpp b/src/libtomahawk/widgets/WelcomeWidget.cpp index fdb621783..160352811 100644 --- a/src/libtomahawk/widgets/WelcomeWidget.cpp +++ b/src/libtomahawk/widgets/WelcomeWidget.cpp @@ -25,6 +25,7 @@ #include "SourceList.h" #include "TomahawkSettings.h" #include "RecentPlaylistsModel.h" +#include "MetaPlaylistInterface.h" #include "audio/AudioEngine.h" #include "playlist/AlbumModel.h" @@ -44,58 +45,6 @@ using namespace Tomahawk; -class WelcomeWidgetInterface : public Tomahawk::PlaylistInterface -{ - Q_OBJECT -public: - explicit WelcomeWidgetInterface( WelcomeWidget* w ) - : PlaylistInterface() - , m_w( w ) - { - connect( m_w->ui->tracksView->proxyModel()->playlistInterface().data(), SIGNAL( repeatModeChanged( Tomahawk::PlaylistModes::RepeatMode ) ), - SIGNAL( repeatModeChanged( Tomahawk::PlaylistModes::RepeatMode ) ) ); - - connect( m_w->ui->tracksView->proxyModel()->playlistInterface().data(), SIGNAL( shuffleModeChanged( bool ) ), - SIGNAL( shuffleModeChanged( bool ) ) ); - } - virtual ~WelcomeWidgetInterface() {} - - virtual void setCurrentIndex( qint64 index ) { m_w->ui->tracksView->proxyModel()->playlistInterface()->setCurrentIndex( index ); } - virtual Tomahawk::PlaylistModes::RepeatMode repeatMode() const { return m_w->ui->tracksView->proxyModel()->playlistInterface()->repeatMode(); } - virtual bool shuffled() const { return m_w->ui->tracksView->proxyModel()->playlistInterface()->shuffled(); } - - virtual Tomahawk::result_ptr resultAt( qint64 index ) const { Q_UNUSED( index ); Q_ASSERT( false ); return Tomahawk::result_ptr(); } - virtual Tomahawk::query_ptr queryAt( qint64 index ) const { Q_UNUSED( index ); Q_ASSERT( false ); return Tomahawk::query_ptr(); } - virtual qint64 indexOfResult( const Tomahawk::result_ptr& result ) const { Q_UNUSED( result ); Q_ASSERT( false ); return -1; } - virtual qint64 indexOfQuery( const Tomahawk::query_ptr& query ) const { Q_UNUSED( query ); Q_ASSERT( false ); return -1; } - virtual Tomahawk::result_ptr currentItem() const { return m_w->ui->tracksView->proxyModel()->playlistInterface()->currentItem(); } - virtual qint64 siblingIndex( int itemsAway, qint64 rootIndex = -1 ) const { return m_w->ui->tracksView->proxyModel()->playlistInterface()->siblingIndex( itemsAway, rootIndex ); } - virtual int trackCount() const { return m_w->ui->tracksView->proxyModel()->playlistInterface()->trackCount(); } - virtual QList< Tomahawk::query_ptr > tracks() const { return m_w->ui->tracksView->proxyModel()->playlistInterface()->tracks(); } - - virtual bool hasChildInterface( Tomahawk::playlistinterface_ptr other ) - { - return m_w->ui->tracksView->proxyModel()->playlistInterface() == other || - m_w->ui->tracksView->proxyModel()->playlistInterface()->hasChildInterface( other ) || - m_w->ui->additionsView->playlistInterface()->hasChildInterface( other ); - } - - virtual void setRepeatMode( Tomahawk::PlaylistModes::RepeatMode mode ) - { - m_w->ui->tracksView->proxyModel()->playlistInterface()->setRepeatMode( mode ); - } - - virtual void setShuffled( bool enabled ) - { - m_w->ui->tracksView->proxyModel()->playlistInterface()->setShuffled( enabled ); - } - -private: - WelcomeWidget* m_w; - -}; - - WelcomeWidget::WelcomeWidget( QWidget* parent ) : QWidget( parent ) , ui( new Ui::WelcomeWidget ) @@ -139,7 +88,10 @@ WelcomeWidget::WelcomeWidget( QWidget* parent ) ui->additionsView->setPlayableModel( m_recentAlbumsModel ); ui->additionsView->proxyModel()->sort( -1 ); - m_playlistInterface = playlistinterface_ptr( new WelcomeWidgetInterface( this ) ); + MetaPlaylistInterface* mpl = new MetaPlaylistInterface(); + mpl->addChildInterface( ui->tracksView->playlistInterface() ); + mpl->addChildInterface( ui->additionsView->playlistInterface() ); + m_playlistInterface = playlistinterface_ptr( mpl ); connect( SourceList::instance(), SIGNAL( ready() ), SLOT( onSourcesReady() ) ); connect( SourceList::instance(), SIGNAL( sourceAdded( Tomahawk::source_ptr ) ), SLOT( onSourceAdded( Tomahawk::source_ptr ) ) ); @@ -304,16 +256,16 @@ PlaylistDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, figFont.setPointSize( TomahawkUtils::defaultFontSize() - 1 ); QPixmap icon; - RecentlyPlayedPlaylistsModel::PlaylistTypes type = (RecentlyPlayedPlaylistsModel::PlaylistTypes)index.data( RecentlyPlayedPlaylistsModel::PlaylistTypeRole ).toInt(); - if( type == RecentlyPlayedPlaylistsModel::StaticPlaylist ) - icon = m_playlistIcon; - else if( type == RecentlyPlayedPlaylistsModel::AutoPlaylist ) - icon = m_autoIcon; - else if( type == RecentlyPlayedPlaylistsModel::Station ) - icon = m_stationIcon; - QRect pixmapRect = option.rect.adjusted( 10, 14, -option.rect.width() + option.rect.height() - 18, -14 ); - icon = icon.scaled( pixmapRect.size(), Qt::KeepAspectRatio, Qt::SmoothTransformation ); + RecentlyPlayedPlaylistsModel::PlaylistTypes type = (RecentlyPlayedPlaylistsModel::PlaylistTypes)index.data( RecentlyPlayedPlaylistsModel::PlaylistTypeRole ).toInt(); + + if ( type == RecentlyPlayedPlaylistsModel::StaticPlaylist ) + icon = TomahawkUtils::defaultPixmap( TomahawkUtils::Playlist, TomahawkUtils::Original, pixmapRect.size() ); + else if ( type == RecentlyPlayedPlaylistsModel::AutoPlaylist ) + icon = TomahawkUtils::defaultPixmap( TomahawkUtils::AutomaticPlaylist, TomahawkUtils::Original, pixmapRect.size() ); + else if ( type == RecentlyPlayedPlaylistsModel::Station ) + icon = TomahawkUtils::defaultPixmap( TomahawkUtils::Station, TomahawkUtils::Original, pixmapRect.size() ); + painter->drawPixmap( pixmapRect, icon ); if ( type != RecentlyPlayedPlaylistsModel::Station ) @@ -341,7 +293,7 @@ PlaylistDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, QRect r( option.rect.width() - option.fontMetrics.height() * 2.5 - 10, option.rect.top() + option.rect.height() / 3 - option.fontMetrics.height(), option.fontMetrics.height() * 2.5, option.fontMetrics.height() * 2.5 ); QPixmap avatar = index.data( RecentlyPlayedPlaylistsModel::PlaylistRole ).value< Tomahawk::playlist_ptr >()->author()->avatar( TomahawkUtils::RoundedCorners, r.size() ); if ( avatar.isNull() ) - avatar = m_defaultAvatar; + avatar = TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultSourceAvatar, TomahawkUtils::RoundedCorners, r.size() ); painter->drawPixmap( r, avatar ); painter->setFont( font ); diff --git a/src/libtomahawk/widgets/WelcomeWidget.h b/src/libtomahawk/widgets/WelcomeWidget.h index 5083a8c95..7e1e19b71 100644 --- a/src/libtomahawk/widgets/WelcomeWidget.h +++ b/src/libtomahawk/widgets/WelcomeWidget.h @@ -51,18 +51,11 @@ Q_OBJECT public: PlaylistDelegate() { - m_playlistIcon = QPixmap( RESPATH "images/playlist-icon.png" ); - m_autoIcon = QPixmap( RESPATH "images/automatic-playlist.png" ); - m_stationIcon = QPixmap( RESPATH "images/station.png" ); - m_defaultAvatar = TomahawkUtils::createRoundedImage( QPixmap( RESPATH "images/user-avatar.png" ), QSize( 0, 0 ) ); } protected: void paint( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const; QSize sizeHint( const QStyleOptionViewItem& option, const QModelIndex& index ) const; - -private: - QPixmap m_playlistIcon, m_autoIcon, m_stationIcon, m_defaultAvatar; }; diff --git a/src/libtomahawk/widgets/WhatsHotWidget.cpp b/src/libtomahawk/widgets/WhatsHotWidget.cpp index 72597715b..9e4347c85 100644 --- a/src/libtomahawk/widgets/WhatsHotWidget.cpp +++ b/src/libtomahawk/widgets/WhatsHotWidget.cpp @@ -20,15 +20,14 @@ */ #include "WhatsHotWidget.h" -#include "WhatsHotWidget_p.h" #include "ui_WhatsHotWidget.h" - #include "ViewManager.h" #include "SourceList.h" #include "TomahawkSettings.h" #include "RecentPlaylistsModel.h" #include "ChartDataLoader.h" +#include "MetaPlaylistInterface.h" #include "audio/AudioEngine.h" #include "playlist/dynamic/GeneratorInterface.h" @@ -75,7 +74,7 @@ WhatsHotWidget::WhatsHotWidget( QWidget* parent ) m_sortedProxy->setDynamicSortFilter( true ); m_sortedProxy->setFilterCaseSensitivity( Qt::CaseInsensitive ); - ui->breadCrumbLeft->setRootIcon( QPixmap( RESPATH "images/charts.png" ) ); + ui->breadCrumbLeft->setRootIcon( TomahawkUtils::defaultPixmap( TomahawkUtils::Charts, TomahawkUtils::Original ) ); connect( ui->breadCrumbLeft, SIGNAL( activateIndex( QModelIndex ) ), SLOT( leftCrumbIndexChanged( QModelIndex ) ) ); @@ -91,12 +90,9 @@ WhatsHotWidget::WhatsHotWidget( QWidget* parent ) artistsProxy->setDynamicSortFilter( true ); ui->artistsViewLeft->setProxyModel( artistsProxy ); - ui->artistsViewLeft->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); ui->artistsViewLeft->header()->setVisible( true ); - m_playlistInterface = Tomahawk::playlistinterface_ptr( new ChartsPlaylistInterface( this ) ); - m_workerThread = new QThread( this ); m_workerThread->start(); @@ -115,6 +111,11 @@ WhatsHotWidget::WhatsHotWidget( QWidget* parent ) m_loadingSpinner = new AnimatedSpinner( ui->tracksViewLeft ); m_loadingSpinner->fadeIn(); + MetaPlaylistInterface* mpl = new MetaPlaylistInterface(); + mpl->addChildInterface( ui->tracksViewLeft->playlistInterface() ); + mpl->addChildInterface( ui->artistsViewLeft->playlistInterface() ); + mpl->addChildInterface( ui->albumsView->playlistInterface() ); + m_playlistInterface = playlistinterface_ptr( mpl ); } diff --git a/src/libtomahawk/widgets/WhatsHotWidget_p.h b/src/libtomahawk/widgets/WhatsHotWidget_p.h deleted file mode 100644 index 4ad300bc2..000000000 --- a/src/libtomahawk/widgets/WhatsHotWidget_p.h +++ /dev/null @@ -1,109 +0,0 @@ -/* === This file is part of Tomahawk Player - === - * - * Copyright 2011, Leo Franchi - * Copyright 2011-2012, Jeff Mitchell - * - * Tomahawk is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Tomahawk is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Tomahawk. If not, see . - */ - -#ifndef WHATSHOTWIDGET_P_H -#define WHATSHOTWIDGET_P_H - -#include "WhatsHotWidget.h" -#include "PlaylistInterface.h" -#include "ui_WhatsHotWidget.h" -#include "playlist/TreeProxyModel.h" -#include "playlist/PlaylistView.h" -#include "Result.h" - -#include - -namespace Tomahawk -{ - -class ChartsPlaylistInterface : public Tomahawk::PlaylistInterface -{ - Q_OBJECT -public: - explicit ChartsPlaylistInterface( WhatsHotWidget* w ) - : PlaylistInterface() - , m_w( w ) - { - connect( m_w->ui->tracksViewLeft->proxyModel()->playlistInterface().data(), SIGNAL( repeatModeChanged( Tomahawk::PlaylistModes::RepeatMode ) ), - SLOT( anyRepeatModeChanged( Tomahawk::PlaylistModes::RepeatMode ) ) ); - connect( m_w->ui->artistsViewLeft->proxyModel()->playlistInterface().data(), SIGNAL( repeatModeChanged( Tomahawk::PlaylistModes::RepeatMode ) ), - SLOT( anyRepeatModeChanged( Tomahawk::PlaylistModes::RepeatMode ) ) ); - - connect( m_w->ui->tracksViewLeft->proxyModel()->playlistInterface().data(), SIGNAL( shuffleModeChanged( bool ) ), - SLOT( anyShuffleChanged( bool ) ) ); - connect( m_w->ui->artistsViewLeft->proxyModel()->playlistInterface().data(), SIGNAL( shuffleModeChanged( bool ) ), - SLOT( anyShuffleChanged( bool ) ) ); - } - virtual ~ChartsPlaylistInterface() {} - - // Any one is fine, we keep them all synched - virtual PlaylistModes::RepeatMode repeatMode() const { return m_w->ui->tracksViewLeft->proxyModel()->playlistInterface()->repeatMode(); } - virtual bool shuffled() const { return m_w->ui->tracksViewLeft->proxyModel()->playlistInterface()->shuffled(); } - - // Do nothing - virtual void setCurrentIndex( qint64 index ) { Q_UNUSED( index ); } - virtual Tomahawk::result_ptr resultAt( qint64 index ) const { Q_UNUSED( index ); Q_ASSERT( false ); return Tomahawk::result_ptr(); } - virtual Tomahawk::query_ptr queryAt( qint64 index ) const { Q_UNUSED( index ); Q_ASSERT( false ); return Tomahawk::query_ptr(); } - virtual qint64 indexOfResult( const Tomahawk::result_ptr& result ) const { Q_UNUSED( result ); Q_ASSERT( false ); return -1; } - virtual qint64 indexOfQuery( const Tomahawk::query_ptr& query ) const { Q_UNUSED( query ); Q_ASSERT( false ); return -1; } - virtual Tomahawk::result_ptr currentItem() const { return Tomahawk::result_ptr(); } - virtual qint64 siblingIndex( int, qint64 rootIndex = -1 ) const { Q_UNUSED( rootIndex ); return -1; } - virtual int trackCount() const { return 0; } - virtual QList< Tomahawk::query_ptr > tracks() const { return QList< Tomahawk::query_ptr >(); } - - virtual bool hasChildInterface( Tomahawk::playlistinterface_ptr other ) - { - return m_w->ui->tracksViewLeft->playlistInterface() == other || - m_w->ui->artistsViewLeft->playlistInterface() == other || - m_w->ui->albumsView->playlistInterface()->hasChildInterface( other ); - - } - -public slots: - virtual void setRepeatMode( PlaylistModes::RepeatMode mode ) - { - m_w->ui->tracksViewLeft->proxyModel()->playlistInterface()->setRepeatMode( mode ); - m_w->ui->artistsViewLeft->proxyModel()->playlistInterface()->setRepeatMode( mode ); - } - - virtual void setShuffled( bool enabled ) - { - m_w->ui->tracksViewLeft->proxyModel()->playlistInterface()->setShuffled( enabled ); - m_w->ui->artistsViewLeft->proxyModel()->playlistInterface()->setShuffled( enabled ); - } - -private slots: - void anyRepeatModeChanged( Tomahawk::PlaylistModes::RepeatMode mode ) - { - emit repeatModeChanged( mode ); - } - - void anyShuffleChanged( bool enabled ) - { - emit shuffleModeChanged( enabled ); - } - -private: - WhatsHotWidget* m_w; - -}; - -} //ns - -#endif diff --git a/src/libtomahawk/widgets/infowidgets/AlbumInfoWidget.cpp b/src/libtomahawk/widgets/infowidgets/AlbumInfoWidget.cpp index 6e91164bd..aaa889a2a 100644 --- a/src/libtomahawk/widgets/infowidgets/AlbumInfoWidget.cpp +++ b/src/libtomahawk/widgets/infowidgets/AlbumInfoWidget.cpp @@ -20,7 +20,6 @@ #include "AlbumInfoWidget.h" #include "ui_AlbumInfoWidget.h" -#include "AlbumInfoWidget_p.h" #include "audio/AudioEngine.h" #include "ViewManager.h" @@ -29,6 +28,7 @@ #include "playlist/PlayableModel.h" #include "playlist/GridItemDelegate.h" #include "Source.h" +#include "MetaPlaylistInterface.h" #include "database/DatabaseCommand_AllTracks.h" #include "database/DatabaseCommand_AllAlbums.h" @@ -134,7 +134,11 @@ AlbumInfoWidget::AlbumInfoWidget( const Tomahawk::album_ptr& album, QWidget* par "border-image: url(" RESPATH "images/scrollbar-vertical-handle.png) 3 3 3 3 stretch stretch;" "border-top: 3px transparent; border-bottom: 3px transparent; border-right: 3px transparent; border-left: 3px transparent; }" ); - m_playlistInterface = playlistinterface_ptr( new MetaAlbumInfoInterface( this ) ); + MetaPlaylistInterface* mpl = new MetaPlaylistInterface(); + mpl->addChildInterface( ui->tracks->playlistInterface() ); + mpl->addChildInterface( ui->albums->playlistInterface() ); + m_playlistInterface = playlistinterface_ptr( mpl ); + load( album ); connect( ui->artistLabel, SIGNAL( clickedArtist() ), SLOT( onArtistClicked() ) ); @@ -198,6 +202,7 @@ AlbumInfoWidget::load( const album_ptr& album ) ui->artistLabel->setArtist( album->artist() ); ui->albumLabel->setText( album->name() ); ui->label_2->setText( tr( "Other Albums by %1" ).arg( album->artist()->name() ) ); + ui->cover->setAlbum( album ); m_tracksModel->startLoading(); m_tracksModel->addTracks( album, QModelIndex(), true ); diff --git a/src/libtomahawk/widgets/infowidgets/AlbumInfoWidget.ui b/src/libtomahawk/widgets/infowidgets/AlbumInfoWidget.ui index a5826e50d..01e71ae4e 100644 --- a/src/libtomahawk/widgets/infowidgets/AlbumInfoWidget.ui +++ b/src/libtomahawk/widgets/infowidgets/AlbumInfoWidget.ui @@ -199,7 +199,7 @@ 0 - + 0 @@ -343,6 +343,11 @@ QLabel
widgets/QueryLabel.h
+ + PlayableCover + QLabel +
widgets/PlayableCover.h
+
diff --git a/src/libtomahawk/widgets/infowidgets/AlbumInfoWidget_p.h b/src/libtomahawk/widgets/infowidgets/AlbumInfoWidget_p.h deleted file mode 100644 index 43f1351de..000000000 --- a/src/libtomahawk/widgets/infowidgets/AlbumInfoWidget_p.h +++ /dev/null @@ -1,82 +0,0 @@ -/* === This file is part of Tomahawk Player - === - * - * Copyright 2012, Leo Franchi - * - * Tomahawk is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Tomahawk is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Tomahawk. If not, see . - */ - -#ifndef ALBUMINFOWIDGET_P_H -#define ALBUMINFOWIDGET_P_H - -#include "AlbumInfoWidget.h" -#include "ui_AlbumInfoWidget.h" -#include "PlaylistInterface.h" -#include "playlist/TreeProxyModel.h" -#include "Result.h" -#include "Typedefs.h" - -#include - -class MetaAlbumInfoInterface : public Tomahawk::PlaylistInterface -{ - Q_OBJECT -public: - explicit MetaAlbumInfoInterface( AlbumInfoWidget* w ) - : PlaylistInterface() - , m_w( w ) - { - connect( m_w->ui->tracks->proxyModel()->playlistInterface().data(), SIGNAL( repeatModeChanged( Tomahawk::PlaylistModes::RepeatMode ) ), - SIGNAL( repeatModeChanged( Tomahawk::PlaylistModes::RepeatMode ) ) ); - - connect( m_w->ui->tracks->proxyModel()->playlistInterface().data(), SIGNAL( shuffleModeChanged( bool ) ), - SIGNAL( shuffleModeChanged( bool ) ) ); - } - virtual ~MetaAlbumInfoInterface() {} - - virtual Tomahawk::PlaylistModes::RepeatMode repeatMode() const { return m_w->ui->tracks->proxyModel()->playlistInterface()->repeatMode(); } - virtual bool shuffled() const { return m_w->ui->tracks->proxyModel()->playlistInterface()->shuffled(); } - - virtual void setCurrentIndex( qint64 index ) { Q_UNUSED( index ); } - virtual Tomahawk::result_ptr resultAt( qint64 index ) const { Q_UNUSED( index ); Q_ASSERT( false ); return Tomahawk::result_ptr(); } - virtual Tomahawk::query_ptr queryAt( qint64 index ) const { Q_UNUSED( index ); Q_ASSERT( false ); return Tomahawk::query_ptr(); } - virtual qint64 indexOfResult( const Tomahawk::result_ptr& result ) const { Q_UNUSED( result ); Q_ASSERT( false ); return -1; } - virtual qint64 indexOfQuery( const Tomahawk::query_ptr& query ) const { Q_UNUSED( query ); Q_ASSERT( false ); return -1; } - virtual Tomahawk::result_ptr currentItem() const { return m_w->ui->tracks->proxyModel()->playlistInterface()->currentItem(); } - virtual qint64 siblingIndex( int itemsAway, qint64 rootIndex = -1 ) const { return m_w->ui->tracks->proxyModel()->playlistInterface()->siblingIndex( itemsAway, rootIndex ); } - virtual int trackCount() const { return m_w->ui->tracks->proxyModel()->playlistInterface()->trackCount(); } - virtual QList< Tomahawk::query_ptr > tracks() const { return m_w->ui->tracks->proxyModel()->playlistInterface()->tracks(); } - - virtual bool hasChildInterface( Tomahawk::playlistinterface_ptr other ) - { - return m_w->ui->tracks->proxyModel()->playlistInterface() == other || - m_w->ui->tracks->proxyModel()->playlistInterface()->hasChildInterface( other ) || - m_w->ui->albums->playlistInterface()->hasChildInterface( other ); - } - - virtual void setRepeatMode( Tomahawk::PlaylistModes::RepeatMode mode ) - { - m_w->ui->tracks->proxyModel()->playlistInterface()->setRepeatMode( mode ); - } - - virtual void setShuffled( bool enabled ) - { - m_w->ui->tracks->proxyModel()->playlistInterface()->setShuffled( enabled ); - } - -private: - AlbumInfoWidget* m_w; - -}; - -#endif diff --git a/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.cpp b/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.cpp index e834d88fb..b420992a9 100644 --- a/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.cpp +++ b/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.cpp @@ -18,7 +18,6 @@ */ #include "ArtistInfoWidget.h" -#include "ArtistInfoWidget_p.h" #include "ui_ArtistInfoWidget.h" #include @@ -30,12 +29,12 @@ #include "playlist/TreeModel.h" #include "playlist/PlaylistModel.h" #include "playlist/TreeProxyModel.h" -#include "Source.h" - #include "database/DatabaseCommand_AllTracks.h" #include "database/DatabaseCommand_AllAlbums.h" - +#include "Source.h" +#include "GlobalActionManager.h" #include "Pipeline.h" +#include "MetaPlaylistInterface.h" #include "utils/StyleHelper.h" #include "utils/TomahawkUtilsGui.h" #include "utils/Logger.h" @@ -52,18 +51,20 @@ ArtistInfoWidget::ArtistInfoWidget( const Tomahawk::artist_ptr& artist, QWidget* ui->setupUi( widget ); QPalette pal = palette(); - pal.setColor( QPalette::Window, QColor( "#454e59" ) ); + pal.setColor( QPalette::Window, QColor( "#231F1F" ) ); widget->setPalette( pal ); widget->setAutoFillBackground( true ); - m_plInterface = Tomahawk::playlistinterface_ptr( new MetaArtistInfoInterface( this ) ); - /* TomahawkUtils::unmarginLayout( ui->layoutWidget->layout() ); TomahawkUtils::unmarginLayout( ui->layoutWidget1->layout() ); TomahawkUtils::unmarginLayout( ui->layoutWidget2->layout() ); TomahawkUtils::unmarginLayout( ui->albumHeader->layout() );*/ + ui->artistLabel_2->setVisible( false ); + ui->biography_2->setVisible( false ); + ui->cover_2->setVisible( false ); + m_albumsModel = new PlayableModel( ui->albums ); ui->albums->setPlayableModel( m_albumsModel ); ui->albums->setEmptyTip( tr( "Sorry, we could not find any albums for this artist!" ) ); @@ -98,18 +99,22 @@ ArtistInfoWidget::ArtistInfoWidget( const Tomahawk::artist_ptr& artist, QWidget* m_pixmap = TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultArtistImage, TomahawkUtils::ScaledCover, QSize( 48, 48 ) ); ui->cover->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultArtistImage, TomahawkUtils::ScaledCover, QSize( ui->cover->sizeHint() ) ) ); + QFont f = font(); + f.setPointSize( f.pointSize() + 1 ); + ui->biography->setOpenLinks( false ); + ui->biography->setOpenExternalLinks( true ); ui->biography->setFrameShape( QFrame::NoFrame ); ui->biography->setAttribute( Qt::WA_MacShowFocusRect, 0 ); + ui->biography->setFont( f ); TomahawkUtils::styleScrollBar( ui->biography->verticalScrollBar() ); - QFont f = font(); f.setBold( true ); - f.setPointSize( TomahawkUtils::defaultFontSize() + 5 ); + f.setPointSize( TomahawkUtils::defaultFontSize() + 8 ); ui->artistLabel->setFont( f ); QPalette p = ui->biography->palette(); p.setColor( QPalette::Foreground, Qt::white ); - p.setColor( QPalette::Text, Qt::white ); + p.setColor( QPalette::Text, Qt::gray ); ui->artistLabel->setPalette( p ); ui->biography->setPalette( p ); @@ -134,6 +139,7 @@ ArtistInfoWidget::ArtistInfoWidget( const Tomahawk::artist_ptr& artist, QWidget* TomahawkUtils::styleScrollBar( ui->relatedArtists->horizontalScrollBar() ); ui->biography->setStyleSheet( "QTextBrowser#biography { background-color: transparent; }" ); + ui->biography->document()->setDefaultStyleSheet( "a { text-decoration: none; font-weight: bold; color: #ffffff; }" ); ui->albums->setStyleSheet( "QListView { background-color: transparent; }" ); ui->albumFrame->setStyleSheet( "QFrame#albumFrame { background-color: transparent; }" @@ -153,6 +159,14 @@ ArtistInfoWidget::ArtistInfoWidget( const Tomahawk::artist_ptr& artist, QWidget* "border-image: url(" RESPATH "images/scrollbar-vertical-handle.png) 3 3 3 3 stretch stretch;" "border-top: 3px transparent; border-bottom: 3px transparent; border-right: 3px transparent; border-left: 3px transparent; }" ); + connect( ui->biography, SIGNAL( anchorClicked( QUrl ) ), SLOT( onBiographyLinkClicked( QUrl ) ) ); + + MetaPlaylistInterface* mpl = new MetaPlaylistInterface(); + mpl->addChildInterface( ui->relatedArtists->playlistInterface() ); + mpl->addChildInterface( ui->topHits->playlistInterface() ); + mpl->addChildInterface( ui->albums->playlistInterface() ); + m_plInterface = playlistinterface_ptr( mpl ); + load( artist ); } @@ -241,6 +255,7 @@ ArtistInfoWidget::load( const artist_ptr& artist ) SLOT( onTracksFound( QList, Tomahawk::ModelMode ) ) ); ui->artistLabel->setText( artist->name() ); + ui->cover->setArtist( artist ); m_topHitsModel->startLoading(); @@ -292,7 +307,7 @@ ArtistInfoWidget::onBiographyLoaded() m_longDescription = m_artist->biography(); emit longDescriptionChanged( m_longDescription ); - ui->biography->setHtml( m_artist->biography() ); + ui->biography->setHtml( m_artist->biography().replace( '\n', "
" ) ); } @@ -309,6 +324,14 @@ ArtistInfoWidget::onArtistImageUpdated() } +void +ArtistInfoWidget::onBiographyLinkClicked( const QUrl& url ) +{ + tDebug() << Q_FUNC_INFO << url; + GlobalActionManager::instance()->parseTomahawkLink( url.toString() ); +} + + void ArtistInfoWidget::changeEvent( QEvent* e ) { diff --git a/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.h b/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.h index 87996e82a..6bab39a51 100644 --- a/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.h +++ b/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.h @@ -100,6 +100,8 @@ private slots: void onTracksFound( const QList& queries, Tomahawk::ModelMode mode ); void onSimilarArtistsLoaded(); + void onBiographyLinkClicked( const QUrl& url ); + private: Ui::ArtistInfoWidget *ui; diff --git a/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.ui b/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.ui index 939afee3e..e39bf628d 100644 --- a/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.ui +++ b/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.ui @@ -7,7 +7,7 @@ 0 0 965 - 912 + 1242
@@ -30,6 +30,100 @@ + + + + 16 + + + + + + + Artist + + + Qt::AlignCenter + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 4 + + + + + + + + + 0 + 0 + + + + + 220 + 220 + + + + Cover + + + Qt::AlignCenter + + + + + + + + + + 0 + 0 + + + + + 0 + 240 + + + + Qt::ScrollBarAlwaysOff + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 16 + + + + @@ -263,20 +357,11 @@ - - 16 - - - 0 - - - 0 - - + 0 - + 0 @@ -307,14 +392,14 @@ - 20 + 1 8 - + Artist @@ -333,14 +418,14 @@ - 20 + 1 12 - + 0 @@ -375,6 +460,11 @@ QTreeView
playlist/PlaylistView.h
+ + PlayableCover + QLabel +
widgets/PlayableCover.h
+
diff --git a/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget_p.h b/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget_p.h deleted file mode 100644 index 36752c9c5..000000000 --- a/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget_p.h +++ /dev/null @@ -1,113 +0,0 @@ -/* === This file is part of Tomahawk Player - === - * - * Copyright 2011, Leo Franchi - * Copyright 2011-2012, Jeff Mitchell - * - * Tomahawk is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Tomahawk is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Tomahawk. If not, see . - */ - -#ifndef ARTISTINFOWIDGET_P_H -#define ARTISTINFOWIDGET_P_H - -#include "ArtistInfoWidget.h" -#include "ui_ArtistInfoWidget.h" -#include "PlaylistInterface.h" -#include "playlist/TreeProxyModel.h" -#include "Result.h" -#include "Typedefs.h" - -#include - -class MetaArtistInfoInterface : public Tomahawk::PlaylistInterface -{ - Q_OBJECT -public: - explicit MetaArtistInfoInterface( ArtistInfoWidget* w ) - : PlaylistInterface() - , m_w( w ) - { - connect( m_w->ui->albums->proxyModel()->playlistInterface().data(), SIGNAL( repeatModeChanged( Tomahawk::PlaylistModes::RepeatMode ) ), - SLOT( anyRepeatModeChanged( Tomahawk::PlaylistModes::RepeatMode ) ) ); - connect( m_w->ui->relatedArtists->proxyModel()->playlistInterface().data(), SIGNAL( repeatModeChanged( Tomahawk::PlaylistModes::RepeatMode ) ), - SLOT( anyRepeatModeChanged( Tomahawk::PlaylistModes::RepeatMode ) ) ); - connect( m_w->ui->topHits->proxyModel()->playlistInterface().data(), SIGNAL( repeatModeChanged( Tomahawk::PlaylistModes::RepeatMode ) ), - SLOT( anyRepeatModeChanged( Tomahawk::PlaylistModes::RepeatMode ) ) ); - - connect( m_w->ui->albums->proxyModel()->playlistInterface().data(), SIGNAL( shuffleModeChanged( bool ) ), - SLOT( anyShuffleChanged( bool ) ) ); - connect( m_w->ui->relatedArtists->proxyModel()->playlistInterface().data(), SIGNAL( shuffleModeChanged( bool ) ), - SLOT( anyShuffleChanged( bool ) ) ); - connect( m_w->ui->topHits->proxyModel()->playlistInterface().data(), SIGNAL( shuffleModeChanged( bool ) ), - SLOT( anyShuffleChanged( bool ) ) ); - } - virtual ~MetaArtistInfoInterface() {} - - // Any one is fine, we keep them all synched - virtual Tomahawk::PlaylistModes::RepeatMode repeatMode() const { return m_w->ui->albums->proxyModel()->playlistInterface()->repeatMode(); } - - virtual bool shuffled() const { return m_w->ui->albums->proxyModel()->playlistInterface()->shuffled(); } - - // Do nothing - virtual void setCurrentIndex( qint64 index ) { Q_UNUSED( index ); } - virtual Tomahawk::result_ptr resultAt( qint64 index ) const { Q_UNUSED( index ); Q_ASSERT( false ); return Tomahawk::result_ptr(); } - virtual Tomahawk::query_ptr queryAt( qint64 index ) const { Q_UNUSED( index ); Q_ASSERT( false ); return Tomahawk::query_ptr(); } - virtual qint64 indexOfResult( const Tomahawk::result_ptr& result ) const { Q_UNUSED( result ); Q_ASSERT( false ); return -1; } - virtual qint64 indexOfQuery( const Tomahawk::query_ptr& query ) const { Q_UNUSED( query ); Q_ASSERT( false ); return -1; } - virtual Tomahawk::result_ptr currentItem() const { return Tomahawk::result_ptr(); } - virtual qint64 siblingIndex( int itemsAway, qint64 rootIndex = -1 ) const { Q_UNUSED( itemsAway ); Q_UNUSED( rootIndex ); return -1; } - virtual int trackCount() const { return 0; } - virtual QList< Tomahawk::query_ptr > tracks() const { return QList< Tomahawk::query_ptr >(); } - virtual int unfilteredTrackCount() const { return 0; } - - virtual bool hasChildInterface( Tomahawk::playlistinterface_ptr other ) - { - return ( m_w->ui->albums->playlistInterface() == other ) || - ( m_w->ui->relatedArtists->playlistInterface() == other ) || - ( m_w->ui->topHits->playlistInterface() == other ) || - ( m_w->ui->albums->playlistInterface()->hasChildInterface( other ) ) || - ( m_w->ui->relatedArtists->playlistInterface()->hasChildInterface( other ) ); - } - -public slots: - virtual void setRepeatMode( Tomahawk::PlaylistModes::RepeatMode mode ) - { - m_w->ui->albums->proxyModel()->playlistInterface()->setRepeatMode( mode ); - m_w->ui->relatedArtists->proxyModel()->playlistInterface()->setRepeatMode( mode ); - m_w->ui->topHits->proxyModel()->playlistInterface()->setRepeatMode( mode ); - } - - virtual void setShuffled( bool enabled ) - { - m_w->ui->albums->proxyModel()->playlistInterface()->setShuffled( enabled ); - m_w->ui->relatedArtists->proxyModel()->playlistInterface()->setShuffled( enabled ); - m_w->ui->topHits->proxyModel()->playlistInterface()->setShuffled( enabled ); - } - -private slots: - void anyRepeatModeChanged( Tomahawk::PlaylistModes::RepeatMode mode ) - { - emit repeatModeChanged( mode ); - } - - void anyShuffleChanged( bool enabled ) - { - emit shuffleModeChanged( enabled ); - } - -private: - ArtistInfoWidget* m_w; - -}; - -#endif diff --git a/src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp b/src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp index 421d122f8..d2879a249 100644 --- a/src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp +++ b/src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp @@ -76,8 +76,6 @@ SourceInfoWidget::SourceInfoWidget( const Tomahawk::source_ptr& source, QWidget* { m_description = tr( "Recent activity from %1" ).arg( source->friendlyName() ); } - - m_pixmap.load( RESPATH "images/new-additions.png" ); } @@ -115,3 +113,11 @@ SourceInfoWidget::changeEvent( QEvent* e ) break; } } + + +QPixmap +SourceInfoWidget::pixmap() const +{ + return TomahawkUtils::defaultPixmap( TomahawkUtils::NewAdditions, TomahawkUtils::Original ); + +} diff --git a/src/libtomahawk/widgets/infowidgets/SourceInfoWidget.h b/src/libtomahawk/widgets/infowidgets/SourceInfoWidget.h index db17ac46d..7ccbe7394 100644 --- a/src/libtomahawk/widgets/infowidgets/SourceInfoWidget.h +++ b/src/libtomahawk/widgets/infowidgets/SourceInfoWidget.h @@ -50,7 +50,7 @@ public: virtual QString title() const { return m_title; } virtual QString description() const { return m_description; } - virtual QPixmap pixmap() const { return m_pixmap; } + virtual QPixmap pixmap() const; virtual bool jumpToCurrentTrack() { return false; } @@ -73,7 +73,6 @@ private: QString m_title; QString m_description; - QPixmap m_pixmap; }; #endif // SOURCEINFOWIDGET_H diff --git a/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.cpp b/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.cpp index 7dc8db769..8af7a0c7f 100644 --- a/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.cpp +++ b/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.cpp @@ -202,6 +202,7 @@ TrackInfoWidget::load( const query_ptr& query ) ui->artistLabel->setQuery( query ); ui->albumLabel->setQuery( query ); ui->albumLabel->setVisible( !query->album().isEmpty() ); + ui->cover->setQuery( query ); m_relatedTracksModel->clear(); m_relatedTracksModel->startLoading(); diff --git a/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.ui b/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.ui index 82629aaa8..ea9da93d5 100644 --- a/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.ui +++ b/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.ui @@ -147,7 +147,7 @@ 12
- + 0 @@ -325,6 +325,11 @@ QLabel
widgets/QueryLabel.h
+ + PlayableCover + QLabel +
widgets/PlayableCover.h
+
diff --git a/src/main.cpp b/src/main.cpp index aca218154..f3bc20deb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -186,12 +186,6 @@ main( int argc, char *argv[] ) if ( guard.isPrimaryInstance() ) a.init(); - if ( argc > 1 ) - { - QString arg = a.arguments()[ 1 ]; - a.loadUrl( arg ); - } - int returnCode = 0; if ( guard.isPrimaryInstance() ) returnCode = a.exec(); diff --git a/src/sourcetree/SourceDelegate.cpp b/src/sourcetree/SourceDelegate.cpp index f30c09be6..58d2f23f4 100644 --- a/src/sourcetree/SourceDelegate.cpp +++ b/src/sourcetree/SourceDelegate.cpp @@ -60,21 +60,7 @@ SourceDelegate::SourceDelegate( QAbstractItemView* parent ) m_dropTypeTextMap.insert( 3, tr( "Local" ) ); m_dropTypeTextMap.insert( 4, tr( "Top 10" ) ); - m_dropTypeImageMap.insert( 0, QPixmap( RESPATH "images/drop-song.png" ).scaledToWidth( 32, Qt::SmoothTransformation ) ); - m_dropTypeImageMap.insert( 1, QPixmap( RESPATH "images/drop-album.png" ).scaledToWidth( 32, Qt::SmoothTransformation ) ); - m_dropTypeImageMap.insert( 2, QPixmap( RESPATH "images/drop-all-songs.png" ).scaledToHeight( 32, Qt::SmoothTransformation ) ); - m_dropTypeImageMap.insert( 3, QPixmap( RESPATH "images/drop-local-songs.png" ).scaledToWidth( 32, Qt::SmoothTransformation ) ); - m_dropTypeImageMap.insert( 4, QPixmap( RESPATH "images/drop-top-songs.png" ).scaledToWidth( 32, Qt::SmoothTransformation ) ); - m_dropMimeData = new QMimeData(); - - m_headphonesOff.load( RESPATH "images/headphones-off.png" ); - m_headphonesOn.load( RESPATH "images/headphones-sidebar.png" ); - m_realtimeLocked.load( RESPATH "images/closed-padlock.png" ); - m_realtimeUnlocked.load( RESPATH "images/open-padlock.png" ); - m_nowPlayingSpeaker.load( RESPATH "images/now-playing-speaker.png" ); - m_nowPlayingSpeakerDark.load( RESPATH "images/now-playing-speaker-dark.png" ); - m_collaborativeOn.load( RESPATH "images/green-dot.png" ); } @@ -149,8 +135,10 @@ SourceDelegate::paintDecorations( QPainter* painter, const QStyleOptionViewItem& } QRect iconRect = QRect( 4, option.rect.y() + 2, iconW, iconW ); - QPixmap speaker = option.state & QStyle::State_Selected ? m_nowPlayingSpeaker : m_nowPlayingSpeakerDark; - speaker = speaker.scaledToHeight( iconW, Qt::SmoothTransformation ); + QPixmap speaker = option.state & QStyle::State_Selected ? + TomahawkUtils::defaultPixmap( TomahawkUtils::NowPlayingSpeaker, TomahawkUtils::Original, iconRect.size() ) : + TomahawkUtils::defaultPixmap( TomahawkUtils::NowPlayingSpeakerDark, TomahawkUtils::Original, iconRect.size() ); + painter->drawPixmap( iconRect, speaker ); } } @@ -220,29 +208,29 @@ SourceDelegate::paintCollection( QPainter* painter, const QStyleOptionViewItem& if ( isPlaying || ( !colItem->source().isNull() && colItem->source()->isLocal() ) ) { // Show a listen icon - QPixmap listenAlongPixmap; - QPixmap realtimeListeningAlongPixmap; + TomahawkUtils::ImageType listenAlongPixmap = TomahawkUtils::Invalid; + TomahawkUtils::ImageType realtimeListeningAlongPixmap = TomahawkUtils::Invalid; if ( index.data( SourcesModel::LatchedOnRole ).toBool() ) { // Currently listening along - listenAlongPixmap = m_headphonesOn; + listenAlongPixmap = TomahawkUtils::HeadphonesOn; if ( !colItem->source()->isLocal() ) { realtimeListeningAlongPixmap = colItem->source()->playlistInterface()->latchMode() == Tomahawk::PlaylistModes::RealTime ? - m_realtimeLocked : m_realtimeUnlocked; + TomahawkUtils::PadlockClosed : TomahawkUtils::PadlockOpen; } } else if ( !colItem->source()->isLocal() ) { - listenAlongPixmap = m_headphonesOff; + listenAlongPixmap = TomahawkUtils::HeadphonesOff; } - if ( !listenAlongPixmap.isNull() ) + if ( listenAlongPixmap != TomahawkUtils::Invalid ) { QRect pmRect = textRect; pmRect.setRight( pmRect.left() + pmRect.height() ); - painter->drawPixmap( pmRect, listenAlongPixmap.scaledToHeight( pmRect.height(), Qt::SmoothTransformation ) ); + painter->drawPixmap( pmRect, TomahawkUtils::defaultPixmap( listenAlongPixmap, TomahawkUtils::Original, pmRect.size() ) ); textRect.adjust( pmRect.width() + 3, 0, 0, 0 ); m_headphoneRects[ index ] = pmRect; @@ -250,11 +238,11 @@ SourceDelegate::paintCollection( QPainter* painter, const QStyleOptionViewItem& else m_headphoneRects.remove( index ); - if ( !realtimeListeningAlongPixmap.isNull() ) + if ( realtimeListeningAlongPixmap != TomahawkUtils::Invalid ) { QRect pmRect = textRect; pmRect.setRight( pmRect.left() + pmRect.height() ); - painter->drawPixmap( pmRect, realtimeListeningAlongPixmap.scaledToHeight( pmRect.height(), Qt::SmoothTransformation ) ); + painter->drawPixmap( pmRect, TomahawkUtils::defaultPixmap( realtimeListeningAlongPixmap, TomahawkUtils::Original, pmRect.size() ) ); textRect.adjust( pmRect.width() + 3, 0, 0, 0 ); m_lockRects[ index ] = pmRect; @@ -522,7 +510,28 @@ SourceDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, co if ( itemsRect.bottom() - textRect.height() - 2 > itemsRect.top() ) { imageRect = itemsRect.adjusted( iconSpacing, verticalOffset, -iconSpacing, -textRect.height() - 2 ); - painter->drawPixmap( imageRect.x(), imageRect.y(), m_dropTypeImageMap.value( i ).copy( 0, 32 - imageRect.height(), 32, imageRect.height() ) ); + + QPixmap pixmap; + switch ( i ) + { + case 0: + pixmap = TomahawkUtils::defaultPixmap( TomahawkUtils::DropSong, TomahawkUtils::Original, imageRect.size() ); + break; + case 1: + pixmap = TomahawkUtils::defaultPixmap( TomahawkUtils::DropAlbum, TomahawkUtils::Original, imageRect.size() ); + break; + case 2: + pixmap = TomahawkUtils::defaultPixmap( TomahawkUtils::DropAllSongs, TomahawkUtils::Original, imageRect.size() ); + break; + case 3: + pixmap = TomahawkUtils::defaultPixmap( TomahawkUtils::DropLocalSongs, TomahawkUtils::Original, imageRect.size() ); + break; + case 4: + pixmap = TomahawkUtils::defaultPixmap( TomahawkUtils::DropTopSongs, TomahawkUtils::Original, imageRect.size() ); + break; + } + + painter->drawPixmap( imageRect, pixmap ); } count++; @@ -568,11 +577,8 @@ SourceDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, co QStyledItemDelegate::paint( painter, o, index ); // draw close icon - QPixmap p( RESPATH "images/list-remove.png" ); - p = p.scaledToHeight( m_iconHeight, Qt::SmoothTransformation ); - QRect r( o3.rect.right() - padding - m_iconHeight, padding + o3.rect.y(), m_iconHeight, m_iconHeight ); - painter->drawPixmap( r, p ); + painter->drawPixmap( r, TomahawkUtils::defaultPixmap( TomahawkUtils::ListRemove, TomahawkUtils::Original, r.size() ) ); } else QStyledItemDelegate::paint( painter, o, index ); @@ -585,20 +591,20 @@ SourceDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, co if ( plItem->canSubscribe() && !plItem->subscribedIcon().isNull() ) { const int padding = 2; - const int imgWidth = o.rect.height() - 2*padding; + const int imgWidth = o.rect.height() - 2 * padding; const QPixmap icon = plItem->subscribedIcon().scaled( imgWidth, imgWidth, Qt::KeepAspectRatio, Qt::SmoothTransformation ); - const QRect subRect( o.rect.right() - padding - imgWidth, o.rect.top() + padding, imgWidth, imgWidth ); painter->drawPixmap( subRect, icon ); } if ( plItem->collaborative() ) { - const int imgWidth = m_collaborativeOn.size().width(); + const int padding = 2; + const int imgWidth = o.rect.height() - 2 * padding; const QRect subRect( o.rect.left(), o.rect.top(), imgWidth, imgWidth ); - painter->drawPixmap( subRect, m_collaborativeOn ); + painter->drawPixmap( subRect, TomahawkUtils::defaultPixmap( TomahawkUtils::GreenDot, TomahawkUtils::Original, subRect.size() ) ); } } else diff --git a/src/sourcetree/SourceDelegate.h b/src/sourcetree/SourceDelegate.h index 62881e520..ae10dca7e 100644 --- a/src/sourcetree/SourceDelegate.h +++ b/src/sourcetree/SourceDelegate.h @@ -72,11 +72,9 @@ private: QMimeData* m_dropMimeData; mutable SourceTreeItem::DropType m_hoveredDropType; // Hack to keep easily track of the current highlighted DropType in paint() QMap< QModelIndex, AnimationHelper* > m_expandedMap; - QPixmap m_headphonesOn, m_headphonesOff, m_realtimeLocked, m_realtimeUnlocked, m_nowPlayingSpeaker, m_nowPlayingSpeakerDark, m_collaborativeOn; qint64 m_lastClicked; QMap< int, SourceTreeItem::DropType > m_dropTypeMap; QMap< int, QString > m_dropTypeTextMap; - QMap< int, QPixmap > m_dropTypeImageMap; mutable QPersistentModelIndex m_trackHovered; mutable QHash< QPersistentModelIndex, QRect > m_trackRects; diff --git a/src/sourcetree/SourcesModel.cpp b/src/sourcetree/SourcesModel.cpp index 25336f8fc..bdfdd51a5 100644 --- a/src/sourcetree/SourcesModel.cpp +++ b/src/sourcetree/SourcesModel.cpp @@ -20,6 +20,11 @@ #include "sourcetree/SourcesModel.h" +#include +#include + +#include + #include "sourcetree/items/SourceTreeItem.h" #include "sourcetree/items/SourceItem.h" #include "sourcetree/items/GroupItem.h" @@ -31,18 +36,13 @@ #include "Collection.h" #include "Source.h" #include "ViewManager.h" - -#include "utils/Logger.h" #include "GlobalActionManager.h" #include "DropJob.h" #include "items/PlaylistItems.h" #include "playlist/TreeView.h" #include "playlist/PlaylistView.h" - -#include -#include - -#include +#include "utils/ImageRegistry.h" +#include "utils/Logger.h" using namespace Tomahawk; @@ -281,13 +281,13 @@ SourcesModel::appendGroups() // new SourceTreeItem( this, m_rootItem, SourcesModel::Divider, 2 ); m_myMusicGroup = new GroupItem( this, m_rootItem, tr( "My Music" ), 3 ); - GenericPageItem* dashboard = new GenericPageItem( this, browse, tr( "Dashboard" ), QIcon( RESPATH "images/dashboard.png" ), + GenericPageItem* dashboard = new GenericPageItem( this, browse, tr( "Dashboard" ), ImageRegistry::instance()->icon( RESPATH "images/dashboard.svg" ), boost::bind( &ViewManager::showWelcomePage, ViewManager::instance() ), boost::bind( &ViewManager::welcomeWidget, ViewManager::instance() ) ); dashboard->setSortValue( 0 ); // super collection - GenericPageItem* sc = new GenericPageItem( this, browse, tr( "SuperCollection" ), QIcon( RESPATH "images/supercollection.png" ), + GenericPageItem* sc = new GenericPageItem( this, browse, tr( "SuperCollection" ), ImageRegistry::instance()->icon( RESPATH "images/supercollection.svg" ), boost::bind( &ViewManager::showSuperCollection, ViewManager::instance() ), boost::bind( &ViewManager::superCollectionView, ViewManager::instance() ) ); sc->setSortValue( 1 ); @@ -296,17 +296,17 @@ SourcesModel::appendGroups() LovedTracksItem* loved = new LovedTracksItem( this, browse ); loved->setSortValue( 2 ); - GenericPageItem* recent = new GenericPageItem( this, browse, tr( "Recently Played" ), QIcon( RESPATH "images/recently-played.png" ), + GenericPageItem* recent = new GenericPageItem( this, browse, tr( "Recently Played" ), ImageRegistry::instance()->icon( RESPATH "images/recently-played.svg" ), boost::bind( &ViewManager::showRecentPlaysPage, ViewManager::instance() ), boost::bind( &ViewManager::recentPlaysWidget, ViewManager::instance() ) ); recent->setSortValue( 3 ); - GenericPageItem* hot = new GenericPageItem( this, browse, tr( "Charts" ), QIcon( RESPATH "images/charts.png" ), + GenericPageItem* hot = new GenericPageItem( this, browse, tr( "Charts" ), ImageRegistry::instance()->icon( RESPATH "images/charts.svg" ), boost::bind( &ViewManager::showWhatsHotPage, ViewManager::instance() ), boost::bind( &ViewManager::whatsHotWidget, ViewManager::instance() ) ); hot->setSortValue( 4 ); - GenericPageItem* newReleases = new GenericPageItem( this, browse, tr( "New Releases" ), QIcon( RESPATH "images/new-releases.png" ), + GenericPageItem* newReleases = new GenericPageItem( this, browse, tr( "New Releases" ), ImageRegistry::instance()->icon( RESPATH "images/new-releases.svg" ), boost::bind( &ViewManager::showNewReleasesPage, ViewManager::instance() ), boost::bind( &ViewManager::newReleasesWidget, ViewManager::instance() ) ); newReleases->setSortValue( 5 ); diff --git a/src/sourcetree/items/CategoryItems.cpp b/src/sourcetree/items/CategoryItems.cpp index a1c455aa9..4701f67e6 100644 --- a/src/sourcetree/items/CategoryItems.cpp +++ b/src/sourcetree/items/CategoryItems.cpp @@ -19,22 +19,22 @@ #include "CategoryItems.h" +#include +#include + +#include "DropJob.h" #include "TomahawkApp.h" #include "ViewManager.h" #include "ViewPage.h" #include "SourceList.h" #include "SourceTreeView.h" -#include "utils/TomahawkUtils.h" -#include "widgets/NewPlaylistWidget.h" #include "TomahawkWindow.h" +#include "utils/TomahawkUtils.h" #include "playlist/dynamic/GeneratorInterface.h" +#include "widgets/NewPlaylistWidget.h" +#include "utils/ImageRegistry.h" #include "utils/Logger.h" -#include "DropJob.h" - -#include - -#include using namespace Tomahawk; @@ -45,7 +45,6 @@ CategoryAddItem::CategoryAddItem( SourcesModel* model, SourceTreeItem* parent, S : SourceTreeItem( model, parent, SourcesModel::CategoryAdd ) , m_categoryType( type ) { - m_icon = QIcon( RESPATH "images/add.png" ); } @@ -107,7 +106,7 @@ CategoryAddItem::flags() const QIcon CategoryAddItem::icon() const { - return m_icon; + return ImageRegistry::instance()->icon( RESPATH "images/add.svg" ); } diff --git a/src/sourcetree/items/CategoryItems.h b/src/sourcetree/items/CategoryItems.h index d32b56695..1f63ed63c 100644 --- a/src/sourcetree/items/CategoryItems.h +++ b/src/sourcetree/items/CategoryItems.h @@ -46,8 +46,6 @@ private slots: private: SourcesModel::CategoryType m_categoryType; - QIcon m_icon; - }; class CategoryItem : public SourceTreeItem diff --git a/src/sourcetree/items/LovedTracksItem.cpp b/src/sourcetree/items/LovedTracksItem.cpp index 00fba60be..6d40ffbad 100644 --- a/src/sourcetree/items/LovedTracksItem.cpp +++ b/src/sourcetree/items/LovedTracksItem.cpp @@ -29,6 +29,8 @@ #include "playlist/LovedTracksModel.h" #include "playlist/PlaylistLargeItemDelegate.h" +#include "utils/ImageRegistry.h" + using namespace Tomahawk; @@ -60,7 +62,7 @@ LovedTracksItem::text() const QIcon LovedTracksItem::icon() const { - return QIcon( RESPATH "images/loved_playlist.png" ); + return ImageRegistry::instance()->icon( RESPATH "images/loved_playlist.svg" ); } @@ -71,7 +73,7 @@ LovedTracksItem::activate() { SourceItem* par = dynamic_cast< SourceItem* >( parent() ); FlexibleView* pv = new FlexibleView( ViewManager::instance()->widget() ); - pv->setPixmap( QPixmap( RESPATH "images/loved_playlist.png" ) ); + pv->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::LovedPlaylist, TomahawkUtils::Original, QSize( 128, 128 ) ) ); LovedTracksModel* raModel = new LovedTracksModel( pv ); raModel->setTitle( text() ); diff --git a/src/sourcetree/items/PlaylistItems.cpp b/src/sourcetree/items/PlaylistItems.cpp index 16dd8bd47..84bca6d7d 100644 --- a/src/sourcetree/items/PlaylistItems.cpp +++ b/src/sourcetree/items/PlaylistItems.cpp @@ -21,15 +21,15 @@ #include "Query.h" #include "ViewManager.h" -#include "playlist/dynamic/GeneratorInterface.h" -#include "playlist/PlaylistView.h" #include "CategoryItems.h" #include "SourceItem.h" -#include "utils/TomahawkUtils.h" -#include "utils/Logger.h" #include "DropJob.h" #include "Source.h" #include "audio/AudioEngine.h" +#include "playlist/dynamic/GeneratorInterface.h" +#include "playlist/PlaylistView.h" +#include "utils/TomahawkUtilsGui.h" +#include "utils/Logger.h" #include #include @@ -49,9 +49,7 @@ PlaylistItem::PlaylistItem( SourcesModel* mdl, SourceTreeItem* parent, const pla connect( pl.data(), SIGNAL( changed() ), SLOT( onUpdated() ), Qt::QueuedConnection ); - m_icon = QIcon( RESPATH "images/playlist-icon.png" ); - - if( ViewManager::instance()->pageForPlaylist( pl ) ) + if ( ViewManager::instance()->pageForPlaylist( pl ) ) model()->linkSourceItemToPage( this, ViewManager::instance()->pageForPlaylist( pl ) ); if ( !m_playlist->updaters().isEmpty() ) @@ -337,9 +335,9 @@ PlaylistItem::createOverlay() } if ( m_canSubscribe && m_showSubscribed && m_subscribedOnIcon.isNull() ) - m_subscribedOnIcon = QPixmap( RESPATH "images/subscribe-on.png" ); + m_subscribedOnIcon = TomahawkUtils::defaultPixmap( TomahawkUtils::SubscribeOn, TomahawkUtils::Original, QSize( 20, 20 ) ); else if ( m_canSubscribe && !m_showSubscribed && m_subscribedOffIcon.isNull() ) - m_subscribedOffIcon = QPixmap( RESPATH "images/subscribe-off.png" ); + m_subscribedOffIcon = TomahawkUtils::defaultPixmap( TomahawkUtils::SubscribeOff, TomahawkUtils::Original, QSize( 20, 20 ) ); QList< QPixmap > icons; foreach ( PlaylistUpdaterInterface* updater, m_playlist->updaters() ) @@ -359,8 +357,7 @@ PlaylistItem::createOverlay() if ( icons.size() > 2 ) icons = icons.mid( 0, 2 ); - - QPixmap base = m_icon.pixmap( 48, 48 ); + QPixmap base = TomahawkUtils::defaultPixmap( TomahawkUtils::Playlist, TomahawkUtils::Original, QSize( 48, 48 ) ); QPainter p( &base ); const int w = base.width() / 2; QRect overlayRect( base.rect().right() - w, base.rect().height() - w, w, w ); @@ -388,7 +385,7 @@ PlaylistItem::icon() const if ( !m_overlaidIcon.isNull() ) return m_overlaidIcon; else - return m_icon; + return TomahawkUtils::defaultPixmap( TomahawkUtils::Playlist, TomahawkUtils::Original, QSize( 48, 48 ) ); } @@ -451,10 +448,7 @@ DynamicPlaylistItem::DynamicPlaylistItem( SourcesModel* mdl, SourceTreeItem* par connect( pl.data(), SIGNAL( dynamicRevisionLoaded( Tomahawk::DynamicPlaylistRevision ) ), SLOT( onDynamicPlaylistLoaded( Tomahawk::DynamicPlaylistRevision ) ), Qt::QueuedConnection ); - m_stationIcon = QIcon( RESPATH "images/station.png" ); - m_automaticPlaylistIcon = QIcon( RESPATH "images/automatic-playlist.png" ); - - if( ViewManager::instance()->pageForDynPlaylist( pl ) ) + if ( ViewManager::instance()->pageForDynPlaylist( pl ) ) model()->linkSourceItemToPage( this, ViewManager::instance()->pageForDynPlaylist( pl ) ); } @@ -580,11 +574,11 @@ DynamicPlaylistItem::icon() const { if ( m_dynplaylist->mode() == OnDemand ) { - return m_stationIcon; + return TomahawkUtils::defaultPixmap( TomahawkUtils::Station ); } else { - return m_automaticPlaylistIcon; + return TomahawkUtils::defaultPixmap( TomahawkUtils::AutomaticPlaylist ); } } diff --git a/src/sourcetree/items/PlaylistItems.h b/src/sourcetree/items/PlaylistItems.h index 1b7e1e3e7..02d501cd4 100644 --- a/src/sourcetree/items/PlaylistItems.h +++ b/src/sourcetree/items/PlaylistItems.h @@ -67,7 +67,7 @@ private: bool m_loaded, m_canSubscribe, m_showSubscribed; Tomahawk::playlist_ptr m_playlist; - QIcon m_icon, m_overlaidIcon; + QIcon m_overlaidIcon; QPixmap m_subscribedOnIcon, m_subscribedOffIcon; QList m_overlaidUpdaters; }; @@ -99,9 +99,6 @@ private: void checkReparentHackNeeded( const Tomahawk::DynamicPlaylistRevision& rev ); Tomahawk::dynplaylist_ptr m_dynplaylist; - - QIcon m_stationIcon; - QIcon m_automaticPlaylistIcon; }; diff --git a/src/sourcetree/items/SourceItem.cpp b/src/sourcetree/items/SourceItem.cpp index c848793b9..50f4234d0 100644 --- a/src/sourcetree/items/SourceItem.cpp +++ b/src/sourcetree/items/SourceItem.cpp @@ -25,16 +25,17 @@ #include "Playlist.h" #include "GenericPageItems.h" #include "LovedTracksItem.h" -#include "utils/TomahawkUtilsGui.h" -#include "utils/Logger.h" +#include "Source.h" +#include "SourceList.h" #include "widgets/SocialPlaylistWidget.h" #include "playlist/FlexibleView.h" #include "playlist/PlaylistView.h" #include "playlist/RecentlyAddedModel.h" #include "playlist/RecentlyPlayedModel.h" #include "playlist/PlaylistLargeItemDelegate.h" -#include "Source.h" -#include "SourceList.h" +#include "utils/ImageRegistry.h" +#include "utils/TomahawkUtilsGui.h" +#include "utils/Logger.h" /// SourceItem @@ -57,11 +58,10 @@ SourceItem::SourceItem( SourcesModel* mdl, SourceTreeItem* parent, const Tomahaw { if ( m_source.isNull() ) { - m_superCol = TomahawkUtils::createRoundedImage( QPixmap( RESPATH "images/supercollection.png" ), QSize( 0, 0 ) ); return; } - m_collectionItem = new GenericPageItem( model(), this, tr( "Collection" ), QIcon( RESPATH "images/collection.png" ), //FIXME different icon + m_collectionItem = new GenericPageItem( model(), this, tr( "Collection" ), ImageRegistry::instance()->icon( RESPATH "images/collection.svg" ), //FIXME different icon boost::bind( &SourceItem::collectionClicked, this ), boost::bind( &SourceItem::getCollectionPage, this ) ); @@ -69,11 +69,11 @@ SourceItem::SourceItem( SourcesModel* mdl, SourceTreeItem* parent, const Tomahaw boost::bind( &SourceItem::sourceInfoClicked, this ), boost::bind( &SourceItem::getSourceInfoPage, this ) );*/ - m_latestAdditionsItem = new GenericPageItem( model(), this, tr( "Latest Additions" ), QIcon( RESPATH "images/new-additions.png" ), + m_latestAdditionsItem = new GenericPageItem( model(), this, tr( "Latest Additions" ), ImageRegistry::instance()->icon( RESPATH "images/new-additions.svg" ), boost::bind( &SourceItem::latestAdditionsClicked, this ), boost::bind( &SourceItem::getLatestAdditionsPage, this ) ); - m_recentPlaysItem = new GenericPageItem( model(), this, tr( "Recently Played" ), QIcon( RESPATH "images/recently-played.png" ), + m_recentPlaysItem = new GenericPageItem( model(), this, tr( "Recently Played" ), ImageRegistry::instance()->icon( RESPATH "images/recently-played.svg" ), boost::bind( &SourceItem::recentPlaysClicked, this ), boost::bind( &SourceItem::getRecentPlaysPage, this ) ); @@ -104,8 +104,6 @@ SourceItem::SourceItem( SourcesModel* mdl, SourceTreeItem* parent, const Tomahaw /* if ( ViewManager::instance()->pageForCollection( source->collection() ) ) model()->linkSourceItemToPage( this, ViewManager::instance()->pageForCollection( source->collection() ) );*/ - m_defaultAvatar = TomahawkUtils::createRoundedImage( QPixmap( RESPATH "images/user-avatar.png" ), QSize( 0, 0 ) ); - // load auto playlists and stations! connect( source.data(), SIGNAL( stats( QVariantMap ) ), SIGNAL( updated() ) ); @@ -199,12 +197,12 @@ SourceItem::pixmap( const QSize& size ) const { if ( m_source.isNull() ) { - return m_superCol; + return TomahawkUtils::defaultPixmap( TomahawkUtils::SuperCollection, TomahawkUtils::Original, size ); } else { if ( m_source->avatar().isNull() ) - return m_defaultAvatar; + return TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultSourceAvatar, TomahawkUtils::RoundedCorners ); else return m_source->avatar( TomahawkUtils::RoundedCorners, size ); } @@ -518,7 +516,7 @@ SourceItem::latestAdditionsClicked() if ( !m_latestAdditionsPage ) { FlexibleView* pv = new FlexibleView( ViewManager::instance()->widget() ); - pv->setPixmap( QPixmap( RESPATH "images/new-additions.png" ) ); + pv->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::NewAdditions, TomahawkUtils::Original ) ); RecentlyAddedModel* raModel = new RecentlyAddedModel( pv ); raModel->setTitle( tr( "Latest Additions" ) ); @@ -561,7 +559,7 @@ SourceItem::recentPlaysClicked() if ( !m_recentPlaysPage ) { FlexibleView* pv = new FlexibleView( ViewManager::instance()->widget() ); - pv->setPixmap( QPixmap( RESPATH "images/recently-played.png" ) ); + pv->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::RecentlyPlayed ) ); RecentlyPlayedModel* raModel = new RecentlyPlayedModel( pv ); raModel->setTitle( tr( "Recently Played Tracks" ) ); diff --git a/src/sourcetree/items/SourceItem.h b/src/sourcetree/items/SourceItem.h index 691ddf656..2e9238623 100644 --- a/src/sourcetree/items/SourceItem.h +++ b/src/sourcetree/items/SourceItem.h @@ -92,7 +92,6 @@ private: void playlistDeletedInternal( SourceTreeItem* parent, const T& playlists ); Tomahawk::source_ptr m_source; - QPixmap m_superCol, m_defaultAvatar; CategoryItem* m_playlists; CategoryItem* m_stations; diff --git a/src/sourcetree/items/TemporaryPageItem.cpp b/src/sourcetree/items/TemporaryPageItem.cpp index 86f8ab073..0bd153d71 100644 --- a/src/sourcetree/items/TemporaryPageItem.cpp +++ b/src/sourcetree/items/TemporaryPageItem.cpp @@ -24,6 +24,7 @@ #include "widgets/infowidgets/ArtistInfoWidget.h" #include "widgets/infowidgets/TrackInfoWidget.h" #include "widgets/SearchWidget.h" +#include "utils/ImageRegistry.h" #include "utils/Closure.h" #include @@ -41,7 +42,7 @@ using namespace Tomahawk; TemporaryPageItem::TemporaryPageItem ( SourcesModel* mdl, SourceTreeItem* parent, ViewPage* page, int sortValue ) : SourceTreeItem( mdl, parent, SourcesModel::TemporaryPage ) , m_page( page ) - , m_icon( QIcon( RESPATH "images/playlist-icon.png" ) ) + , m_icon( ImageRegistry::instance()->icon( RESPATH "images/playlist-icon.svg" ) ) , m_sortValue( sortValue ) { QAction* action = 0; @@ -51,25 +52,25 @@ TemporaryPageItem::TemporaryPageItem ( SourcesModel* mdl, SourceTreeItem* parent action = new QAction( tr( "Copy Artist Link" ), this ); action->setProperty( "linkType", (int)ArtistLink ); - m_icon = QIcon( RESPATH "images/artist-icon.png" ); + m_icon = ImageRegistry::instance()->icon( RESPATH "images/artist-icon.svg" ); } else if ( dynamic_cast< AlbumInfoWidget* >( page ) ) { action = new QAction( tr( "Copy Album Link" ), this ); action->setProperty( "linkType", (int)AlbumLink ); - m_icon = QIcon( RESPATH "images/album-icon.png" ); + m_icon = ImageRegistry::instance()->icon( RESPATH "images/album-icon.svg" ); } else if ( dynamic_cast< TrackInfoWidget* >( page ) ) { action = new QAction( tr( "Copy Track Link" ), this ); action->setProperty( "linkType", (int)TrackLink ); - m_icon = QIcon( RESPATH "images/track-icon-sidebar.png" ); + m_icon = ImageRegistry::instance()->icon( RESPATH "images/track-icon.svg" ); } else if ( dynamic_cast< SearchWidget* >( page ) ) { - m_icon = QIcon( RESPATH "images/search-icon.png" ); + m_icon = ImageRegistry::instance()->icon( RESPATH "images/search-icon.svg" ); } if ( action ) diff --git a/src/widgets/AccountListWidget.cpp b/src/widgets/AccountListWidget.cpp index 811a8ad02..f6df9b4b5 100644 --- a/src/widgets/AccountListWidget.cpp +++ b/src/widgets/AccountListWidget.cpp @@ -21,11 +21,13 @@ #include "accounts/AccountModel.h" #include "accounts/AccountManager.h" #include "AccountWidget.h" +#include "utils/ImageRegistry.h" #include "utils/TomahawkUtilsGui.h" +#include "utils/Logger.h" -#include #include + AccountListWidget::AccountListWidget( AccountModelFactoryProxy* model, QWidget* parent ) : QWidget( parent ) , m_model( model ) @@ -227,6 +229,7 @@ AccountListWidget::updateToggleOnlineStateButton() m_toggleOnlineButton->setText( m_toggleOnlineButtonState ? tr( "Disconnect &All" ) : tr( "Connect &All" ) ); - m_toggleOnlineButton->setIcon( m_toggleOnlineButtonState ? QIcon( RESPATH "images/account-online.png" ) - : QIcon( RESPATH "images/account-offline.png" ) ); + m_toggleOnlineButton->setIcon( m_toggleOnlineButtonState ? + ImageRegistry::instance()->icon( RESPATH "images/account-online.svg" ) : + ImageRegistry::instance()->icon( RESPATH "images/account-offline.svg" ) ); } diff --git a/src/widgets/AccountWidget.cpp b/src/widgets/AccountWidget.cpp index bab5b98bc..fa4aa2c12 100644 --- a/src/widgets/AccountWidget.cpp +++ b/src/widgets/AccountWidget.cpp @@ -110,7 +110,7 @@ AccountWidget::AccountWidget( QWidget* parent ) m_addAccountIcon = new QLabel( m_inviteContainer ); m_addAccountIcon->setContentsMargins( 1, 0, 0, 0 ); - m_addAccountIcon->setPixmap( QIcon( RESPATH "images/add-contact.png" ).pixmap( 16 ) ); + m_addAccountIcon->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::AddContact, TomahawkUtils::Original, QSize( 16, 16 ) ) ); m_addAccountIcon->setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Expanding ); m_addAccountIcon->setAlignment( Qt::AlignCenter ); containerLayout->addWidget( m_addAccountIcon ); diff --git a/src/widgets/AccountsPopupWidget.cpp b/src/widgets/AccountsPopupWidget.cpp index efb6014c8..e2fdf5fba 100644 --- a/src/widgets/AccountsPopupWidget.cpp +++ b/src/widgets/AccountsPopupWidget.cpp @@ -21,10 +21,6 @@ #include "utils/TomahawkUtilsGui.h" -#ifdef QT_MAC_USE_COCOA -#include "widgets/SourceTreePopupDialog_mac.h" -#endif - #include #include #include @@ -35,15 +31,14 @@ AccountsPopupWidget::AccountsPopupWidget( QWidget* parent ) , m_widget( 0 ) , m_arrowOffset( 0 ) { -#ifndef Q_OS_WIN - setWindowFlags( Qt::FramelessWindowHint ); -#endif - setWindowFlags( Qt::Popup ); + setWindowFlags( Qt::Popup | Qt::FramelessWindowHint ); + //Uncomment this if using a debugger: //setWindowFlags( Qt::Window ); setAutoFillBackground( false ); setAttribute( Qt::WA_TranslucentBackground, true ); + setAttribute( Qt::WA_NoSystemBackground, true ); setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Minimum ); @@ -59,6 +54,7 @@ AccountsPopupWidget::AccountsPopupWidget( QWidget* parent ) #endif } + void AccountsPopupWidget::setWidget( QWidget* widget ) { @@ -67,6 +63,7 @@ AccountsPopupWidget::setWidget( QWidget* widget ) m_widget->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Minimum ); } + void AccountsPopupWidget::anchorAt( const QPoint &p ) { @@ -77,6 +74,7 @@ AccountsPopupWidget::anchorAt( const QPoint &p ) repaint(); } + void AccountsPopupWidget::setArrowOffset( int arrowOffset ) { @@ -89,7 +87,9 @@ AccountsPopupWidget::setArrowOffset( int arrowOffset ) } } -void AccountsPopupWidget::paintEvent( QPaintEvent* ) + +void +AccountsPopupWidget::paintEvent( QPaintEvent* ) { // Constants for painting const int cornerRadius = TomahawkUtils::POPUP_ROUNDING_RADIUS; //the rounding radius of the widget @@ -109,35 +109,24 @@ void AccountsPopupWidget::paintEvent( QPaintEvent* ) outline.lineTo( rect().right() - m_arrowOffset, 2 ); outline.lineTo( rect().right() - m_arrowOffset - arrowHeight, brect.top() ); - QPainter p( this ); - - p.setRenderHint( QPainter::Antialiasing ); - p.setBackgroundMode( Qt::TransparentMode ); - - QPen pen( TomahawkUtils::Colors::BORDER_LINE ); - pen.setWidth( 2 ); - p.setPen( pen ); - p.drawPath( outline ); - - p.setOpacity( TomahawkUtils::POPUP_OPACITY ); - p.fillPath( outline, TomahawkUtils::Colors::POPUP_BACKGROUND ); - -#ifdef QT_MAC_USE_COCOA - // Work around bug in Qt/Mac Cocoa where opening subsequent popups - // would incorrectly calculate the background due to it not being - // invalidated. - SourceTreePopupHelper::clearBackground( this ); -#endif + TomahawkUtils::drawCompositedPopup( this, + outline, + TomahawkUtils::Colors::BORDER_LINE, + TomahawkUtils::Colors::POPUP_BACKGROUND, + TomahawkUtils::POPUP_OPACITY ); } + void AccountsPopupWidget::focusOutEvent( QFocusEvent* ) { hide(); } + void AccountsPopupWidget::hideEvent( QHideEvent* ) { emit hidden(); } + diff --git a/src/widgets/AccountsToolButton.cpp b/src/widgets/AccountsToolButton.cpp index bdee7058a..328cb3d70 100644 --- a/src/widgets/AccountsToolButton.cpp +++ b/src/widgets/AccountsToolButton.cpp @@ -84,10 +84,9 @@ AccountsToolButton::AccountsToolButton( QWidget* parent ) wMainLayout->addSpacing( 6 ); QPushButton *settingsButton = new QPushButton( w ); - settingsButton->setIcon( QIcon( RESPATH "images/account-settings.png" ) ); + settingsButton->setIcon( TomahawkUtils::defaultPixmap( TomahawkUtils::AccountSettings ) ); settingsButton->setText( tr( "Configure Accounts" ) ); - connect( settingsButton, SIGNAL( clicked() ), - window(), SLOT( showSettingsDialog() ) ); + connect( settingsButton, SIGNAL( clicked() ), window(), SLOT( showSettingsDialog() ) ); QHBoxLayout *bottomLayout = new QHBoxLayout( w ); TomahawkUtils::unmarginLayout( bottomLayout ); @@ -95,13 +94,6 @@ AccountsToolButton::AccountsToolButton( QWidget* parent ) bottomLayout->addWidget( settingsButton ); wMainLayout->addLayout( bottomLayout ); - - //ToolButton stuff - m_defaultPixmap = QPixmap( RESPATH "images/account-none.png" ) - .scaled( iconSize(), - Qt::KeepAspectRatio, - Qt::SmoothTransformation ); - connect( m_proxy, SIGNAL( dataChanged( QModelIndex, QModelIndex ) ), this, SLOT( updateIcons() ) ); connect( m_proxy, SIGNAL( rowsInserted ( QModelIndex, int, int ) ), @@ -110,6 +102,20 @@ AccountsToolButton::AccountsToolButton( QWidget* parent ) this, SLOT( updateIcons() ) ); connect( m_proxy, SIGNAL( modelReset() ), this, SLOT( updateIcons() ) ); + +#ifdef Q_WS_MAC + setIconSize( QSize( iconSize().width()-4, iconSize().height()-4 ) ); + setStyleSheet( "AccountsToolButton {" + " border: 1px solid #7d7d7d;" + " border-radius: 4px;" + " background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1," + " stop: 0 #f5f5f5, stop: 1 #bababa);" + "}" + "AccountsToolButton:pressed {" + " background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1," + " stop: 0 #b6b6b6, stop: 1 #dddddd);" + "}" ); +#endif } void @@ -142,7 +148,8 @@ AccountsToolButton::paintEvent( QPaintEvent* event ) QRect pixmapRect( QPoint( width() / 2 - iconSize().width() / 2, height() / 2 - iconSize().height() / 2 ), iconSize() ); - painter.drawPixmap( pixmapRect, m_defaultPixmap ); + + painter.drawPixmap( pixmapRect, TomahawkUtils::defaultPixmap( TomahawkUtils::AccountNone, TomahawkUtils::Original, iconSize() ) ); } else { diff --git a/src/widgets/AccountsToolButton.h b/src/widgets/AccountsToolButton.h index 223dd354e..2d1e4c2da 100644 --- a/src/widgets/AccountsToolButton.h +++ b/src/widgets/AccountsToolButton.h @@ -51,7 +51,6 @@ private: Tomahawk::Accounts::AccountModel *m_model; AccountModelFactoryProxy *m_proxy; - QPixmap m_defaultPixmap; QList< QPixmap > m_factoryPixmaps; };