File: selected_boxes_menu.py

package info (click to toggle)
raysession 0.17.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 19,168 kB
  • sloc: python: 44,371; sh: 1,538; makefile: 208; xml: 86
file content (76 lines) | stat: -rw-r--r-- 2,719 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
from typing import TYPE_CHECKING
from qtpy.QtCore import Slot # type:ignore
from qtpy.QtGui import QIcon
from qtpy.QtWidgets import QMenu, QApplication


from .. import patchcanvas
from patshared import PortMode
from ..cancel_mng import CancelOp, CancellableAction

if TYPE_CHECKING:
    from ..patchbay_manager import PatchbayManager

_translate = QApplication.translate


class SelectedBoxesMenu(QMenu):
    def __init__(self, parent):
        super().__init__(parent)
        self.mng : 'PatchbayManager' = None # type:ignore 
        self._selected_boxes = dict[int, PortMode]()

        self.setTitle(_translate('sel_boxes_menu', 'Selected boxes'))
        self.setIcon(QIcon.fromTheme('tool_rect_selection'))
        self._build()

    def set_patchbay_manager(self, mng: 'PatchbayManager'):
        self.mng = mng
    
    def set_selected_boxes(self, selected_boxes: dict[int, PortMode]):
        self._selected_boxes = selected_boxes
    
    def _build(self):
        self.action_new_white_view = self.addAction(
            _translate('sel_boxes_menu', "Put in a new exclusive view"))
        self.action_new_white_view.setIcon(QIcon.fromTheme('list-add'))
        self.action_new_white_view.triggered.connect(
            self._new_exclusive_view)

        self.action_hide_selected = self.addAction(
            _translate('sel_boxes_menu', "Hide boxes"))
        self.action_hide_selected.setIcon(QIcon.fromTheme('hint'))
        self.action_hide_selected.triggered.connect(
            self._hide_selected_boxes)

        self.action_invert_selection = self.addAction(
            _translate('sel_boxes_menu', 'Invert selection'))
        self.action_invert_selection.setIcon(
            QIcon.fromTheme('edit-select-invert'))
        self.action_invert_selection.triggered.connect(
            self._invert_boxes_selection)
    
    @Slot()    
    def _new_exclusive_view(self):
        with CancellableAction(self.mng, CancelOp.ALL_VIEWS) as a:
            sender_text: str = self.sender().text() # type:ignore
            a.name = sender_text
            patchcanvas.clear_selection()
            self.mng.new_view(exclusive_with=self._selected_boxes)
        
    @Slot()
    def _hide_selected_boxes(self):
        with CancellableAction(self.mng, CancelOp.VIEW) as a:
            sender_text: str = self.sender().text() # type:ignore
            a.name = sender_text

            for group_id, port_mode in self._selected_boxes.items():
                group = self.mng.get_group_from_id(group_id)
                if group is None:
                    continue

                group.hide(port_mode)

    @Slot()
    def _invert_boxes_selection(self):
        patchcanvas.invert_boxes_selection()