Remember more UI state.

- EditorWindow geometry (again).
- Settings window state and geometry (again).
- SheetEditor scroll position and scale (y_offset not working for some reason).
looper
Ben Niemann 5 years ago
parent e84fae1175
commit f8a545d94d

@ -86,9 +86,6 @@
- if the end goes past the region, extend the region and move all following regions (across
all tracks) to the right to make room.
* Settings window is sticky :BUG:
Keeps getting reopened on startup.
* Common testdata directory with some audio files :CLEANUP:
- possibly also lv2, ladspa, ... plugins (built from source)?
- replace all uses of system files in tests.

@ -21,6 +21,7 @@
# @end:license
import asyncio
from fractions import Fraction
import getpass
import logging
import socket
@ -326,7 +327,7 @@ class ProjectClientMixin(object):
assert isinstance(data, dict), data
for key, value in data.items():
assert isinstance(key, str), key
assert isinstance(value, (str, bytes, bool, int, float)), value
assert isinstance(value, (str, bytes, bool, int, float, Fraction)), value
self._session_data.update(data)
self.event_loop.create_task(

@ -341,17 +341,9 @@ class EditorApp(BaseEditorApp, QtWidgets.QApplication):
project = await self.project_registry.open_project(path)
await self.addProject(project)
self.aboutToQuit.connect(self.shutDown)
def shutDown(self):
logger.info("Shutting down.")
if self.win is not None:
self.win.storeState()
self.settings.sync()
self.dumpSettings()
async def cleanup(self):
logger.info("Cleanup app...")
if self.stat_monitor is not None:
self.stat_monitor.storeState()
self.stat_monitor = None
@ -365,9 +357,13 @@ class EditorApp(BaseEditorApp, QtWidgets.QApplication):
self.pipeline_graph_monitor = None
if self.win is not None:
self.win.storeState()
await self.win.cleanup()
self.win = None
self.settings.sync()
self.dumpSettings()
await super().cleanup()
logger.info("Remove custom excepthook.")

@ -278,6 +278,9 @@ class SheetEditor(TrackViewMixin, ui_base.ProjectMixin, AsyncSetupBase, QtWidget
self.__sheet = sheet
self.__player_state = player_state
self.__session_prefix = 'sheet_editor:%s:' % sheet.id
self.__session_data_last_update = {}
self.__current_tool_box = None
self.__current_tool = None
self.__mouse_grabber = None
@ -312,6 +315,26 @@ class SheetEditor(TrackViewMixin, ui_base.ProjectMixin, AsyncSetupBase, QtWidget
self.__player_state.playbackSamplePosChanged.connect(
lambda sample_pos: self.setPlaybackPos(sample_pos, 1))
self.setScaleX(self.__get_session_value('scale_x', self.__scale_x))
# TODO: Somehow the y_offset is not respected...
self.setOffset(
self.__get_session_value('x_offset', self.__x_offset),
self.__get_session_value('y_offset', self.__y_offset))
def __get_session_value(self, key, default):
return super().get_session_value(self.__session_prefix + key, default)
def __set_session_value(self, key, value):
super().set_session_value(self.__session_prefix + key, value)
def __lazy_set_session_value(self, key, value):
# TODO: value should be stored to session 5sec after most recent change. I.e. need
# some timer...
last_time = self.__session_data_last_update.get(key, 0)
if time.time() - last_time > 5:
self.__set_session_value(key, value)
self.__session_data_last_update[key] = time.time()
def createTrack(self, track):
track_item_cls = self.track_cls_map[type(track).__name__]
track_item = track_item_cls(
@ -434,11 +457,13 @@ class SheetEditor(TrackViewMixin, ui_base.ProjectMixin, AsyncSetupBase, QtWidget
dx = self.__x_offset - xoffset
if dx != 0:
self.__x_offset = xoffset
self.__lazy_set_session_value('x_offset', xoffset)
self.xOffsetChanged.emit(self.__x_offset)
dy = self.__y_offset - yoffset
if dy != 0:
self.__y_offset = yoffset
self.__lazy_set_session_value('y_offset', yoffset)
self.yOffsetChanged.emit(self.__y_offset)
self.scroll(dx, dy)
@ -451,6 +476,7 @@ class SheetEditor(TrackViewMixin, ui_base.ProjectMixin, AsyncSetupBase, QtWidget
return
self.__scale_x = scale_x
self.__lazy_set_session_value('scale_x', scale_x)
self.updateTracks()
self.scaleXChanged.emit(self.__scale_x)

Loading…
Cancel
Save