Skip to content

Commit

Permalink
Merge pull request feeluown#111 from cosven/dev
Browse files Browse the repository at this point in the history
remove qt webkit, use qt widget instead
  • Loading branch information
cosven committed Mar 3, 2016
2 parents 6bf6621 + f34ba1a commit 5f32dc2
Show file tree
Hide file tree
Showing 46 changed files with 475 additions and 10,912 deletions.
9 changes: 5 additions & 4 deletions feeluown/controller_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@ def play_mv_by_mvid(cls, mvid):
if not ControllerApi.api.is_response_ok(mv_model):
return

url_high = mv_model['url_high']
url_middle = mv_model['url_middle']
clipboard = QApplication.clipboard()
clipboard.setText(url_high)
clipboard.setText(url_middle)

cls.view.ui.STATUS_BAR.showMessage(
u"程序已经将视频的播放地址复制到剪切板", 5000)
Expand All @@ -49,15 +49,16 @@ def play_mv_by_mvid(cls, mvid):
ControllerApi.notify_widget.show_message(
"通知", "正在尝试调用VLC视频播放器播放MV")
try:
subprocess.Popen(['vlc', url_high, '--play-and-exit', '-f'])
subprocess.Popen(['vlc', url_middle, '--play-and-exit', '-f'])
except:
LOG.error('call vlc player failed')
elif platform.system().lower() == 'Darwin'.lower():
ControllerApi.player.pause()
ControllerApi.notify_widget.show_message(
"通知", "准备调用 QuickTime Player 播放mv")
try:
subprocess.Popen(['open', '-a', 'QuickTime Player', url_high])
subprocess.Popen(
['open', '-a', 'QuickTime Player', url_middle])
except:
LOG.error('call quicktime player failed')

Expand Down
17 changes: 14 additions & 3 deletions feeluown/controllers/focus_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,20 @@


class FocusManager(object):

@classmethod
def change_focus(cls):
if QApplication.focusWidget() is ViewOp.ui.WEBVIEW:
_BaseItem.items[1].setFocus()

# TODO: other widget can add themselves to focusable_widgets
focusable_widgets = [
ViewOp.ui.WEBVIEW.tracks_table_widget,
_BaseItem.items[2]]

current_focus_widget = QApplication.focusWidget()
if current_focus_widget in focusable_widgets:
index = focusable_widgets.index(current_focus_widget)
next_index = index + 1 if index < (len(focusable_widgets) - 1)\
else 0
focusable_widgets[next_index].setFocus()
else:
ViewOp.ui.WEBVIEW.setFocus()
focusable_widgets[0].setFocus()
17 changes: 8 additions & 9 deletions feeluown/glue.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
from feeluown.controller_api import ControllerApi
from feeluown.view_api import ViewOp
from feeluown.widgets.login_dialog import LoginDialog
from feeluown.widgets.music_table import MusicTableWidget
from feeluown.widgets.music_table import CurrentMusicTable
from feeluown.widgets.lyric import LyricWidget
from feeluown.widgets.playlist_widget import PlaylistItem
from feeluown.widgets.desktop_mini import DesktopMiniLayer
Expand Down Expand Up @@ -64,7 +64,7 @@ def __init__(self, parent=None):
ControllerApi.notify_widget = NotifyWidget()

ControllerApi.network_manager = NetworkManager(self)
ControllerApi.current_playlist_widget = MusicTableWidget()
ControllerApi.current_playlist_widget = CurrentMusicTable()

self._search_shortcut = QShortcut(QKeySequence('Ctrl+F'), self)
self._minimize_shortcut = QShortcut(QKeySequence('Ctrl+M'), self)
Expand Down Expand Up @@ -115,7 +115,7 @@ def _init_signal_binding(self):
ViewOp.ui.PLAY_OR_PAUSE.clicked.connect(
ViewOp.on_play_or_pause_clicked)

ViewOp.ui.WEBVIEW.signal_play.connect(self.on_play_song_clicked)
ViewOp.ui.WEBVIEW.signal_play_song.connect(self.on_play_song)
ViewOp.ui.WEBVIEW.signal_play_songs.connect(self.on_play_songs)
ViewOp.ui.WEBVIEW.signal_play_song_ids.connect(self.on_play_song_ids)
ViewOp.ui.WEBVIEW.signal_play_mv.connect(ControllerApi.play_mv_by_mvid)
Expand Down Expand Up @@ -171,7 +171,7 @@ def _init_signal_binding(self):
ViewOp.on_recommend_item_clicked)

ControllerApi.current_playlist_widget.signal_play_music.connect(
self.on_play_song_clicked)
self.on_play_song)
ControllerApi.current_playlist_widget.signal_remove_music_from_list.\
connect(self.remove_music_from_list)

Expand Down Expand Up @@ -226,7 +226,7 @@ def on_login_success(self, data):
ViewOp.load_user_infos(data)

@pyqtSlot(int)
def on_play_song_clicked(self, mid=None):
def on_play_song(self, mid=None):
self.mode_manager.change_to_normal()
ControllerApi.play_specific_song_by_mid(mid)

Expand Down Expand Up @@ -288,16 +288,15 @@ def _search_music(self):
if not ControllerApi.api.is_response_ok(songs):
return
PlaylistItem.de_active_all()
ViewOp.ui.WEBVIEW.load_search_result(songs)
ViewOp.ui.WEBVIEW.load_brief_songs(songs)
ControllerApi.state['current_pid'] = 0
length = len(songs)
if length != 0:
ViewOp.ui.STATUS_BAR.showMessage(
u'搜索到 %s 首 %s 相关歌曲' % (str(length), text), 5000)
return
else:
ViewOp.ui.STATUS_BAR.showMessage(u'Oops,没有找到相关歌曲', 5000)
return
ViewOp.ui.STATUS_BAR.showMessage(u'Oops,没有找到相关歌曲', 5000)
return

def paintEvent(self, event):
"""
Expand Down
2 changes: 1 addition & 1 deletion feeluown/plugin/NetEaseMusic/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ def channel_detail(self, channelids, offset=0):

return channels

def add_music_to_playlist(self, mid, pid, op):
def op_music_to_playlist(self, mid, pid, op):
"""
:param op: add or del
把mid这首音乐加入pid这个歌单列表当中去
Expand Down
14 changes: 10 additions & 4 deletions feeluown/plugin/NetEaseMusic/normalize.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@

from feeluown.logger import LOG
from feeluown.utils import singleton
from feeluown.models import MusicModel, UserModel, PlaylistModel, ArtistModel, \
AlbumModel, BriefPlaylistModel, BriefMusicModel, BriefArtistModel, BriefAlbumModel, \
AlbumDetailModel, ArtistDetailModel, MvModel, LyricModel
from feeluown.models import MusicModel, UserModel, PlaylistModel, ArtistModel,\
AlbumModel, BriefPlaylistModel, BriefMusicModel, BriefArtistModel,\
BriefAlbumModel, AlbumDetailModel, ArtistDetailModel, MvModel, LyricModel

from .api import NetEase
from .model import PlaylistDb, SongDb, UserDb
Expand Down Expand Up @@ -288,7 +288,13 @@ def set_music_to_favorite(self, mid, flag):
return data

def add_song_to_playlist(self, mid, pid):
data = self.ne.add_music_to_playlist(mid, pid, 'add')
data = self.ne.op_music_to_playlist(mid, pid, 'add')
if not self.is_response_avaible(data):
return False
return True

def remove_song_from_playlist(self, mid, pid):
data = self.ne.op_music_to_playlist(mid, pid, 'del')
if not self.is_response_avaible(data):
return False
return True
Expand Down
77 changes: 69 additions & 8 deletions feeluown/right_widget.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# -*- coding=utf8 -*-
# -*- coding=utf-8 -*-


"""
Expand All @@ -8,18 +8,80 @@
funcition to set child widget properties.
"""

from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtGui import QPainter
from PyQt5.QtWidgets import QStyleOption, QStyle, QWidget, \
QVBoxLayout

from feeluown.widgets.webview import WebView
from feeluown.widgets.music_table import TracksTableWidget,\
TracksTableOptionsWidget


class MusicWidget(QWidget):
signal_play_song = pyqtSignal([int])
signal_play_songs = pyqtSignal([list])
signal_play_song_ids = pyqtSignal([list])
signal_play_mv = pyqtSignal([int])
signal_search_album = pyqtSignal([int])
signal_search_artist = pyqtSignal([int])

def __init__(self, parent=None):
super().__init__(parent)
self.layout = QVBoxLayout(self)

self.tracks_table_widget = TracksTableWidget()
self.tracks_table_options_widget = TracksTableOptionsWidget()
self.layout.addWidget(self.tracks_table_options_widget)
self.layout.addWidget(self.tracks_table_widget)

self._set_layout_props()
self._bind_signal()

def _set_layout_props(self):
self.layout.setContentsMargins(0, 0, 0, 0)
self.layout.setSpacing(0)

def _bind_signal(self):
self.tracks_table_widget.signal_play_music.connect(
self.signal_play_song.emit)
self.tracks_table_options_widget.play_all_btn.clicked.connect(
self._play_songs)
self.tracks_table_widget.signal_play_mv.connect(
self.signal_play_mv.emit)
self.tracks_table_widget.signal_search_album.connect(
self.signal_search_album.emit)
self.tracks_table_widget.signal_search_artist.connect(
self.signal_search_artist.emit)

def _play_songs(self):
songs = self.tracks_table_widget.songs
if self.tracks_table_widget.is_songs_brief():
song_ids = [song['id'] for song in songs]
self.signal_play_song_ids.emit(song_ids)
else:
self.signal_play_songs.emit(songs)

def load_playlist(self, playlist_model):
tracks = playlist_model['tracks']
self.tracks_table_widget.set_songs(tracks, 0)

def load_artist(self, artist_detail_model):
tracks = artist_detail_model['hotSongs']
self.tracks_table_widget.set_songs(tracks, 2)

def load_album(self, album_detail_model):
tracks = album_detail_model['songs']
self.tracks_table_widget.set_songs(tracks, 3)

def load_brief_songs(self, songs):
self.tracks_table_widget.set_songs(songs, 4)


class RightWidget(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.layout = QVBoxLayout()
self.webview = WebView()
self.webview = MusicWidget()

self.set_me()
self.set_widgets_prop()
Expand All @@ -28,7 +90,7 @@ def __init__(self, parent=None):
def set_me(self):
self.setLayout(self.layout)

def paintEvent(self, QPaintEvent):
def paintEvent(self, event):
"""
self is derived from QWidget, Stylesheets don't work unless \
paintEvent is reimplemented.y
Expand All @@ -42,7 +104,6 @@ def paintEvent(self, QPaintEvent):

def set_widgets_prop(self):
self.webview.setObjectName("webview")
pass

def set_layouts_prop(self):
self.layout.setContentsMargins(0, 0, 0, 0)
Expand Down
4 changes: 2 additions & 2 deletions feeluown/tests/test_widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ def test_setting_widget(qtbot):


def test_music_table_widget(qtbot):
from feeluown.widgets.music_table import MusicTableWidget
w = MusicTableWidget()
from feeluown.widgets.music_table import CurrentMusicTable
w = CurrentMusicTable()
w.show()
qtbot.addWidget(w)

Expand Down
61 changes: 50 additions & 11 deletions feeluown/themes/default.qss
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,14 @@ QPushButton#new_playlist_btn:hover {
color: #993333;
}

QPushButton#tracks_play_all_btn {
font-size: 15px;
}

QPushButton#tracks_play_all_btn:hover, QPushButton#tracks_play_all_btn:focus {
color: #993333;
}

/* ****************************** */
/* QLineEdit */
/* ****************************** */
Expand Down Expand Up @@ -378,6 +386,36 @@ QLabel#remove_music:hover {
color: #993333;
}

QLabel#tracks_table_mv_btn {
font-size: 8px;
color: #CCC;
border-radius: 2px;
border: 1px solid #AAA;
margin-top: 8px;
margin-bottom: 8px;
}

QLabel#tracks_table_remove_btn {
color: #CCC;
}

QLabel#tracks_table_remove_btn:focus, QLabel#tracks_table_mv_btn:focus {
color: #993333;
}

QLabel#tracks_table_mv_btn:hover, QLabel#tracks_table_remove_btn:hover {
color: #993333;
border-color: #993333;
}

QLabel#tracks_title_label {
font-size: 13px;
}

QLabel#tracks_img_label {
border-radius: 5px;
}

/* ****************************** */
/* QScrollBar */
/* ****************************** */
Expand All @@ -390,14 +428,14 @@ QScrollBar:vertical {
margin: 0px 0;
border: 0px solid grey;
background: #222;
width: 6px;
border-radius: 3px;
width: 4px;
border-radius: 2px;
}

QScrollBar::handle:vertical {
width: 6px;
width: 4px;
background: #993333;
border-radius: 3px;
border-radius: 2px;
margin: 0 0;
border: 0px solid #993333;
}
Expand Down Expand Up @@ -496,18 +534,16 @@ QHeaderView {
}

QHeaderView::section:horizontal {
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #333, stop: 0.5 #222, stop: 0.8 #111, stop: 1 000);
color: #CCC;
background: #222;
color: #993333;
border: 0px;
border-bottom: 1px solid rgba(153, 51, 51, 0.3);
border-bottom: 1px solid #993333;
height: 24px;
padding-left: 5px;
font-size: 12px;
font-weight: normal;
}


QTableView QTableCornerButton::section {
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #333, stop: 0.5 #222, stop: 0.8 #111, stop: 1 000);
Expand All @@ -528,7 +564,6 @@ QTableWidget {
QTableWidget::item{
padding: 3px 4px;
border-radius: 0px;
selection-background-color: #993333;
outline: none;
color: #CCC;
}
Expand All @@ -542,8 +577,12 @@ QTableWidget::item:selected{

QTableWidget::item:focus {
outline: none;
border: 0px;
color: #993333;
}

QTableWidget#tracks_table_widget {
font-size: 13px;
border-left: 4px solid rgba(40, 40, 40, 0.4);
}

/* ****************************** */
Expand Down

0 comments on commit 5f32dc2

Please sign in to comment.