mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Implement migration of layout and visibility settings
This commit is contained in:
parent
7bc13463f2
commit
a328c7c8b2
@ -2,6 +2,7 @@
|
|||||||
# License: GPLv3 Copyright: 2023, Kovid Goyal <kovid at kovidgoyal.net>
|
# License: GPLv3 Copyright: 2023, Kovid Goyal <kovid at kovidgoyal.net>
|
||||||
|
|
||||||
from copy import copy
|
from copy import copy
|
||||||
|
from contextlib import suppress
|
||||||
from dataclasses import asdict, dataclass, fields
|
from dataclasses import asdict, dataclass, fields
|
||||||
from enum import Enum, auto
|
from enum import Enum, auto
|
||||||
from qt.core import (
|
from qt.core import (
|
||||||
@ -17,6 +18,34 @@ HIDE_THRESHOLD = 10
|
|||||||
SHOW_THRESHOLD = 50
|
SHOW_THRESHOLD = 50
|
||||||
|
|
||||||
|
|
||||||
|
def migrate_settings():
|
||||||
|
ans = {
|
||||||
|
'layout': config['gui_layout'],
|
||||||
|
'wide_visibility': Visibility().serialize(),
|
||||||
|
'narrow_visibility': Visibility().serialize(),
|
||||||
|
'wide_desires': WideDesires().serialize(),
|
||||||
|
'narrow_desires': NarrowDesires().serialize(),
|
||||||
|
}
|
||||||
|
for old, (new, hor_is_wide) in {
|
||||||
|
'tag_browser': ('tag_browser', True),
|
||||||
|
'book_details': ('book_details', True),
|
||||||
|
'cover_browser': ('cover_browser', False),
|
||||||
|
}.items():
|
||||||
|
key = 'wide' if hor_is_wide else 'narrow'
|
||||||
|
val = gprefs.get(f'{old}_splitter_horizontal_state')
|
||||||
|
if val:
|
||||||
|
with suppress(Exception):
|
||||||
|
ans[f'{key}_visibility'][new] = bool(val[0])
|
||||||
|
key = 'narrow' if hor_is_wide else 'wide'
|
||||||
|
val = gprefs.get(f'{old}_splitter_vertical_state')
|
||||||
|
if val:
|
||||||
|
with suppress(Exception):
|
||||||
|
ans[f'{key}_visibility'][new] = bool(val[0])
|
||||||
|
if gprefs.get('quickview visible'):
|
||||||
|
ans['wide_visibility']['quick_view'] = ans['narrow_visibility']['quick_view'] = True
|
||||||
|
return ans
|
||||||
|
|
||||||
|
|
||||||
class Placeholder(QLabel):
|
class Placeholder(QLabel):
|
||||||
backgrounds = 'yellow', 'lightgreen', 'grey', 'cyan', 'magenta'
|
backgrounds = 'yellow', 'lightgreen', 'grey', 'cyan', 'magenta'
|
||||||
bgcount = 0
|
bgcount = 0
|
||||||
@ -251,11 +280,12 @@ class CentralContainer(QWidget):
|
|||||||
def __init__(self, parent=None, prefs_name='main_window_central_widget_state', separate_cover_browser=None, for_develop=False):
|
def __init__(self, parent=None, prefs_name='main_window_central_widget_state', separate_cover_browser=None, for_develop=False):
|
||||||
self.separate_cover_browser = config['separate_cover_flow'] if separate_cover_browser is None else separate_cover_browser
|
self.separate_cover_browser = config['separate_cover_flow'] if separate_cover_browser is None else separate_cover_browser
|
||||||
self.prefs_name = prefs_name
|
self.prefs_name = prefs_name
|
||||||
super().__init__(parent)
|
|
||||||
self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
|
|
||||||
self.wide_desires = WideDesires()
|
self.wide_desires = WideDesires()
|
||||||
self.narrow_desires = NarrowDesires()
|
self.narrow_desires = NarrowDesires()
|
||||||
self.is_visible = Visibility()
|
self.wide_is_visible = Visibility()
|
||||||
|
self.narrow_is_visible = Visibility()
|
||||||
|
super().__init__(parent)
|
||||||
|
self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
|
||||||
if for_develop:
|
if for_develop:
|
||||||
self.tag_browser = Placeholder('tag browser', self)
|
self.tag_browser = Placeholder('tag browser', self)
|
||||||
self.book_list = Placeholder('book list', self)
|
self.book_list = Placeholder('book list', self)
|
||||||
@ -287,6 +317,10 @@ class CentralContainer(QWidget):
|
|||||||
self.top_handle = h(Qt.Orientation.Horizontal)
|
self.top_handle = h(Qt.Orientation.Horizontal)
|
||||||
self.bottom_handle = h(Qt.Orientation.Horizontal)
|
self.bottom_handle = h(Qt.Orientation.Horizontal)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_visible(self):
|
||||||
|
return self.wide_is_visible if self.layout is Layout.wide else self.narrow_is_visible
|
||||||
|
|
||||||
def set_widget(self, which, w):
|
def set_widget(self, which, w):
|
||||||
existing = getattr(self, which)
|
existing = getattr(self, which)
|
||||||
existing.setVisible(False)
|
existing.setVisible(False)
|
||||||
@ -323,7 +357,8 @@ class CentralContainer(QWidget):
|
|||||||
def serialized_settings(self):
|
def serialized_settings(self):
|
||||||
return {
|
return {
|
||||||
'layout': self.layout.name,
|
'layout': self.layout.name,
|
||||||
'visibility': self.is_visible.serialize(),
|
'wide_visibility': self.wide_is_visible.serialize(),
|
||||||
|
'narrow_visibility': self.narrow_is_visible.serialize(),
|
||||||
'wide_desires': self.wide_desires.serialize(),
|
'wide_desires': self.wide_desires.serialize(),
|
||||||
'narrow_desires': self.narrow_desires.serialize()
|
'narrow_desires': self.narrow_desires.serialize()
|
||||||
}
|
}
|
||||||
@ -338,11 +373,9 @@ class CentralContainer(QWidget):
|
|||||||
|
|
||||||
def unserialize_settings(self, s):
|
def unserialize_settings(self, s):
|
||||||
l = s.get('layout')
|
l = s.get('layout')
|
||||||
if l == 'wide':
|
self.layout = Layout.narrow if l == 'narrow' else Layout.wide
|
||||||
self.layout = Layout.wide
|
self.wide_is_visible.unserialize(s.get('wide_visibility') or {})
|
||||||
elif l == 'narrow':
|
self.narrow_is_visible.unserialize(s.get('narrow_visibility') or {})
|
||||||
self.layout = Layout.narrow
|
|
||||||
self.is_visible.unserialize(s.get('visibility') or {})
|
|
||||||
self.wide_desires.unserialize(s.get('wide_desires') or {})
|
self.wide_desires.unserialize(s.get('wide_desires') or {})
|
||||||
self.narrow_desires.unserialize(s.get('narrow_desires') or {})
|
self.narrow_desires.unserialize(s.get('narrow_desires') or {})
|
||||||
|
|
||||||
@ -351,7 +384,8 @@ class CentralContainer(QWidget):
|
|||||||
|
|
||||||
def read_settings(self):
|
def read_settings(self):
|
||||||
before = self.serialized_settings()
|
before = self.serialized_settings()
|
||||||
self.unserialize_settings(gprefs.get(self.prefs_name) or {})
|
settings = gprefs.get(self.prefs_name) or migrate_settings()
|
||||||
|
self.unserialize_settings(settings)
|
||||||
if self.serialized_settings() != before:
|
if self.serialized_settings() != before:
|
||||||
self.update_button_states_from_visibility()
|
self.update_button_states_from_visibility()
|
||||||
self.relayout()
|
self.relayout()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user