~tomasgroth/openlp/portable-path

« back to all changes in this revision

Viewing changes to openlp/core/projectors/tab.py

  • Committer: Tomas Groth
  • Date: 2019-04-30 19:02:42 UTC
  • mfrom: (2829.2.32 openlp)
  • Revision ID: tomasgroth@yahoo.dk-20190430190242-6zwjk8724tyux70m
trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
4
4
###############################################################################
5
5
# OpenLP - Open Source Lyrics Projection                                      #
6
6
# --------------------------------------------------------------------------- #
7
 
# Copyright (c) 2008-2018 OpenLP Developers                                   #
 
7
# Copyright (c) 2008-2019 OpenLP Developers                                   #
8
8
# --------------------------------------------------------------------------- #
9
9
# This program is free software; you can redistribute it and/or modify it     #
10
10
# under the terms of the GNU General Public License as published by the Free  #
27
27
from PyQt5 import QtWidgets
28
28
 
29
29
from openlp.core.common.i18n import UiStrings, translate
 
30
from openlp.core.common.registry import Registry
30
31
from openlp.core.common.settings import Settings
31
 
from openlp.core.lib import SettingsTab
 
32
from openlp.core.lib.settingstab import SettingsTab
 
33
from openlp.core.projectors import DialogSourceStyle
32
34
from openlp.core.ui.icons import UiIcons
33
 
from openlp.core.projectors import DialogSourceStyle
 
35
 
34
36
 
35
37
log = logging.getLogger(__name__)
36
38
log.debug('projectortab module loaded')
47
49
        :param parent: Parent widget
48
50
        """
49
51
        self.icon_path = UiIcons().projector
 
52
        self.udp_listeners = {}  # Key on port number
50
53
        projector_translated = translate('OpenLP.ProjectorTab', 'Projector')
51
54
        super(ProjectorTab, self).__init__(parent, 'Projector', projector_translated)
 
55
        Registry().register_function('udp_broadcast_add', self.add_udp_listener)
 
56
        Registry().register_function('udp_broadcast_remove', self.remove_udp_listener)
52
57
 
53
 
    def setupUi(self):
 
58
    def setup_ui(self):
54
59
        """
55
60
        Setup the UI
56
61
        """
57
62
        self.setObjectName('ProjectorTab')
58
 
        super(ProjectorTab, self).setupUi()
 
63
        super(ProjectorTab, self).setup_ui()
59
64
        self.connect_box = QtWidgets.QGroupBox(self.left_column)
60
65
        self.connect_box.setObjectName('connect_box')
61
66
        self.connect_box_layout = QtWidgets.QFormLayout(self.connect_box)
90
95
        self.connect_box_layout.addRow(self.dialog_type_label, self.dialog_type_combo_box)
91
96
        self.left_layout.addStretch()
92
97
        self.dialog_type_combo_box.activated.connect(self.on_dialog_type_combo_box_changed)
 
98
        # Enable/disable listening on UDP ports for PJLink2 broadcasts
 
99
        self.udp_broadcast_listen = QtWidgets.QCheckBox(self.connect_box)
 
100
        self.udp_broadcast_listen.setObjectName('udp_broadcast_listen')
 
101
        self.connect_box_layout.addRow(self.udp_broadcast_listen)
93
102
        # Connect on LKUP packet received (PJLink v2+ only)
94
103
        self.connect_on_linkup = QtWidgets.QCheckBox(self.connect_box)
95
104
        self.connect_on_linkup.setObjectName('connect_on_linkup')
96
105
        self.connect_box_layout.addRow(self.connect_on_linkup)
97
106
 
98
 
    def retranslateUi(self):
 
107
    def retranslate_ui(self):
99
108
        """
100
109
        Translate the UI on the fly
101
110
        """
116
125
                                               translate('OpenLP.ProjectorTab', 'Single dialog box'))
117
126
        self.connect_on_linkup.setText(
118
127
            translate('OpenLP.ProjectorTab', 'Connect to projector when LINKUP received (v2 only)'))
 
128
        self.udp_broadcast_listen.setText(
 
129
            translate('OpenLP.ProjectorTab', 'Enable listening for PJLink2 broadcast messages'))
 
130
        log.debug('PJLink settings tab initialized')
119
131
 
120
132
    def load(self):
121
133
        """
125
137
        self.socket_timeout_spin_box.setValue(Settings().value('projector/socket timeout'))
126
138
        self.socket_poll_spin_box.setValue(Settings().value('projector/poll time'))
127
139
        self.dialog_type_combo_box.setCurrentIndex(Settings().value('projector/source dialog type'))
 
140
        self.udp_broadcast_listen.setChecked(Settings().value('projector/udp broadcast listen'))
128
141
        self.connect_on_linkup.setChecked(Settings().value('projector/connect when LKUP received'))
129
142
 
130
143
    def save(self):
136
149
        Settings().setValue('projector/poll time', self.socket_poll_spin_box.value())
137
150
        Settings().setValue('projector/source dialog type', self.dialog_type_combo_box.currentIndex())
138
151
        Settings().setValue('projector/connect when LKUP received', self.connect_on_linkup.isChecked())
 
152
        Settings().setValue('projector/udp broadcast listen', self.udp_broadcast_listen.isChecked())
 
153
        self.call_udp_listener()
139
154
 
140
155
    def on_dialog_type_combo_box_changed(self):
141
156
        self.dialog_type = self.dialog_type_combo_box.currentIndex()
 
157
 
 
158
    def add_udp_listener(self, port, callback):
 
159
        """
 
160
        Add new UDP listener to list
 
161
        """
 
162
        if port in self.udp_listeners:
 
163
            log.warning('Port {port} already in list - not adding'.format(port=port))
 
164
            return
 
165
        self.udp_listeners[port] = callback
 
166
        log.debug('PJLinkSettings: new callback list: {port}'.format(port=self.udp_listeners.keys()))
 
167
 
 
168
    def remove_udp_listener(self, port):
 
169
        """
 
170
        Remove UDP listener from list
 
171
        """
 
172
        if port not in self.udp_listeners:
 
173
            log.warning('Port {port} not in list - ignoring'.format(port=port))
 
174
            return
 
175
        # Turn off listener before deleting
 
176
        self.udp_listeners[port](checked=False)
 
177
        del self.udp_listeners[port]
 
178
        log.debug('PJLinkSettings: new callback list: {port}'.format(port=self.udp_listeners.keys()))
 
179
 
 
180
    def call_udp_listener(self):
 
181
        """
 
182
        Call listeners to update UDP listen setting
 
183
        """
 
184
        if len(self.udp_listeners) < 1:
 
185
            log.warning('PJLinkSettings: No callers - returning')
 
186
            return
 
187
        log.debug('PJLinkSettings: Calling UDP listeners')
 
188
        for call in self.udp_listeners:
 
189
            self.udp_listeners[call](checked=self.udp_broadcast_listen.isChecked())