Coverage for paintmaskanimator/session_state.py: 92%

31 statements  

« prev     ^ index     » next       coverage.py v7.17.0, created at 2026-11-02 04:50 +0000

1"""Restore painting controls and the linked reference view across launches.""" 

2 

3import math 

4 

5from PySide6.QtCore import QPointF 

6 

7from . import config 

8 

9 

10def _number(record, key, default, minimum, maximum): 

11 try: 

12 value = float(record.get(key, default)) 

13 except (TypeError, ValueError, OverflowError): 

14 return default 

15 return max(minimum, min(maximum, value)) if math.isfinite(value) else default 

16 

17 

18def save(window): 

19 view = window.subview 

20 config.set_value("last_paint_session", { 

21 "brush_size": window.tools.brush_size_spinbox.value(), 

22 "subview": { 

23 "path": str(view._path.resolve()) if view._path is not None else None, 

24 "zoom": view.zoom_slider.value(), 

25 "rotation": view.rotation_slider.value(), 

26 "pan_x": view._pan.x(), 

27 "pan_y": view._pan.y(), 

28 "open": not window.subview_dock.isClosed(), 

29 }, 

30 }) 

31 

32 

33def restore(window): 

34 record = config.get_value("last_paint_session", {}) 

35 if not isinstance(record, dict): 35 ↛ 36line 35 didn't jump to line 36 because the condition on line 35 was never true

36 return 

37 spin = window.tools.brush_size_spinbox 

38 spin.setValue(_number(record, "brush_size", 8.0, spin.minimum(), spin.maximum())) 

39 reference = record.get("subview") 

40 if not isinstance(reference, dict): 

41 return 

42 view = window.subview 

43 path = reference.get("path") 

44 if isinstance(path, str) and path and view.load_path(path): 

45 view.zoom_slider.setValue(int(_number(reference, "zoom", 100, 5, 1600))) 

46 slider = view.rotation_slider 

47 slider.setValue(int(_number(reference, "rotation", 0, slider.minimum(), slider.maximum()))) 

48 view._pan = QPointF( 

49 _number(reference, "pan_x", 0, -1e7, 1e7), 

50 _number(reference, "pan_y", 0, -1e7, 1e7), 

51 ) 

52 view.viewer.update() 

53 if isinstance(reference.get("open"), bool): 53 ↛ exitline 53 didn't return from function 'restore' because the condition on line 53 was always true

54 window.subview_dock.toggleView(reference["open"])