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
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
37
log = logging.getLogger(__name__)
36
38
log.debug('projectortab module loaded')
47
49
:param parent: Parent widget
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)
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)
98
def retranslateUi(self):
107
def retranslate_ui(self):
100
109
Translate the UI on the fly
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')
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'))
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()
140
155
def on_dialog_type_combo_box_changed(self):
141
156
self.dialog_type = self.dialog_type_combo_box.currentIndex()
158
def add_udp_listener(self, port, callback):
160
Add new UDP listener to list
162
if port in self.udp_listeners:
163
log.warning('Port {port} already in list - not adding'.format(port=port))
165
self.udp_listeners[port] = callback
166
log.debug('PJLinkSettings: new callback list: {port}'.format(port=self.udp_listeners.keys()))
168
def remove_udp_listener(self, port):
170
Remove UDP listener from list
172
if port not in self.udp_listeners:
173
log.warning('Port {port} not in list - ignoring'.format(port=port))
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()))
180
def call_udp_listener(self):
182
Call listeners to update UDP listen setting
184
if len(self.udp_listeners) < 1:
185
log.warning('PJLinkSettings: No callers - returning')
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())