Fix player position dragging.
parent
0489093fdf
commit
402191ffec
|
@ -20,6 +20,7 @@
|
|||
#
|
||||
# @end:license
|
||||
|
||||
import enum
|
||||
import logging
|
||||
import time as time_lib
|
||||
from typing import Any
|
||||
|
@ -33,6 +34,11 @@ from . import ui_base
|
|||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class TimeMode(enum.Enum):
|
||||
Follow = 0
|
||||
Manual = 1
|
||||
|
||||
|
||||
class PlayerState(ui_base.ProjectMixin, QtCore.QObject):
|
||||
playingChanged = QtCore.pyqtSignal(bool)
|
||||
currentTimeChanged = QtCore.pyqtSignal(object)
|
||||
|
@ -46,6 +52,8 @@ class PlayerState(ui_base.ProjectMixin, QtCore.QObject):
|
|||
self.__session_prefix = 'player_state:%s:' % self.project.id
|
||||
self.__last_current_time_update = None # type: float
|
||||
|
||||
self.__time_mode = TimeMode.Follow
|
||||
|
||||
self.__playing = False
|
||||
self.__current_time = self.__get_session_value('current_time', audioproc.MusicalTime())
|
||||
self.__loop_start_time = self.__get_session_value('loop_start_time', None)
|
||||
|
@ -67,10 +75,10 @@ class PlayerState(ui_base.ProjectMixin, QtCore.QObject):
|
|||
self.__player_id = player_id
|
||||
|
||||
def updateFromProto(self, player_state: audioproc.PlayerState) -> None:
|
||||
if player_state.HasField('current_time'):
|
||||
if player_state.HasField('current_time') and self.__time_mode == TimeMode.Follow:
|
||||
self.setCurrentTime(audioproc.MusicalTime.from_proto(player_state.current_time))
|
||||
|
||||
if player_state.HasField('playing'):
|
||||
if player_state.HasField('playing') and self.__time_mode == TimeMode.Follow:
|
||||
self.setPlaying(player_state.playing)
|
||||
|
||||
if player_state.HasField('loop_enabled'):
|
||||
|
@ -82,6 +90,9 @@ class PlayerState(ui_base.ProjectMixin, QtCore.QObject):
|
|||
if player_state.HasField('loop_end_time'):
|
||||
self.setLoopEndTime(audioproc.MusicalTime.from_proto(player_state.loop_end_time))
|
||||
|
||||
def setTimeMode(self, mode: TimeMode) -> None:
|
||||
self.__time_mode = mode
|
||||
|
||||
def setPlaying(self, playing: bool) -> None:
|
||||
if playing == self.__playing:
|
||||
return
|
||||
|
|
|
@ -67,7 +67,6 @@ class ProjectView(ui_base.AbstractProjectView):
|
|||
self.__player_realm = None # type: str
|
||||
self.__player_node_id = None # type: str
|
||||
self.__player_status_listener = None # type: core.Listener
|
||||
self.__playback_pos_mode = 'follow'
|
||||
|
||||
self.__player_state = player_state_lib.PlayerState(context=self.context)
|
||||
self.__player_state.playingChanged.connect(self.playingChanged)
|
||||
|
@ -157,10 +156,6 @@ class ProjectView(ui_base.AbstractProjectView):
|
|||
def loopEnabled(self) -> bool:
|
||||
return self.__player_state.loopEnabled()
|
||||
|
||||
def setPlaybackPosMode(self, mode: str) -> None:
|
||||
assert mode in ('follow', 'manual')
|
||||
self.__playback_pos_mode = mode
|
||||
|
||||
async def createPluginUI(self, node_id: str) -> Tuple[int, Tuple[int, int]]:
|
||||
return await self.project_client.create_plugin_ui(self.__player_id, node_id)
|
||||
|
||||
|
|
|
@ -21,7 +21,6 @@
|
|||
# @end:license
|
||||
|
||||
import logging
|
||||
import typing
|
||||
from typing import Any
|
||||
|
||||
from PyQt5.QtCore import Qt
|
||||
|
@ -32,12 +31,9 @@ from PyQt5 import QtWidgets
|
|||
from noisicaa import audioproc
|
||||
from noisicaa import music
|
||||
from noisicaa.ui import ui_base
|
||||
from noisicaa.ui import player_state as player_state_lib
|
||||
from . import time_view_mixin
|
||||
|
||||
if typing.TYPE_CHECKING:
|
||||
from noisicaa.ui import player_state as player_state_lib
|
||||
from noisicaa.ui import project_view as project_view_lib
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
|
@ -48,7 +44,6 @@ class TimeLine(
|
|||
QtWidgets.QWidget):
|
||||
def __init__(
|
||||
self, *,
|
||||
project_view: 'project_view_lib.ProjectView',
|
||||
player_state: 'player_state_lib.PlayerState',
|
||||
**kwargs: Any
|
||||
) -> None:
|
||||
|
@ -58,7 +53,6 @@ class TimeLine(
|
|||
self.setMinimumHeight(20)
|
||||
self.setMaximumHeight(20)
|
||||
|
||||
self.__project_view = project_view
|
||||
self.__player_state = player_state
|
||||
self.__player_id = None # type: str
|
||||
self.__move_time = False
|
||||
|
@ -124,7 +118,7 @@ class TimeLine(
|
|||
self.project_client.update_player_state(
|
||||
self.__player_id,
|
||||
audioproc.PlayerState(playing=False)))
|
||||
self.__project_view.setPlaybackPosMode('manual')
|
||||
self.__player_state.setTimeMode(player_state_lib.TimeMode.Manual)
|
||||
self.__player_state.setCurrentTime(current_time)
|
||||
evt.accept()
|
||||
return
|
||||
|
@ -152,7 +146,7 @@ class TimeLine(
|
|||
audioproc.PlayerState(
|
||||
playing=self.__old_player_state,
|
||||
current_time=current_time.to_proto())))
|
||||
self.__project_view.setPlaybackPosMode('follow')
|
||||
self.__player_state.setTimeMode(player_state_lib.TimeMode.Follow)
|
||||
evt.accept()
|
||||
return
|
||||
|
||||
|
|
|
@ -96,8 +96,9 @@ class TrackListView(ui_base.ProjectMixin, slots.SlotContainer, QtWidgets.QSplitt
|
|||
|
||||
time_line_frame = Frame(self)
|
||||
self.__time_line = time_line.TimeLine(
|
||||
project_view=self.__project_view, player_state=self.__player_state,
|
||||
parent=time_line_frame, context=self.context)
|
||||
parent=time_line_frame,
|
||||
player_state=self.__player_state,
|
||||
context=self.context)
|
||||
time_line_frame.setWidget(self.__time_line)
|
||||
|
||||
self.__time_line.setScaleX(self.__editor.scaleX())
|
||||
|
|
Loading…
Reference in New Issue