~suutari-olli/openlp/click-slide-to-go-live-from-blank

« back to all changes in this revision

Viewing changes to openlp/core/ui/projector/manager.py

  • Committer: Simon Hanna
  • Date: 2016-05-17 08:48:19 UTC
  • mfrom: (2625.1.36 openlp)
  • mto: (2625.1.37 openlp)
  • mto: This revision was merged to the branch mainline in revision 2649.
  • Revision ID: simon.hanna@serve-me.info-20160517084819-lgup78nzyzjympuu
merge trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
35
35
 
36
36
from openlp.core.common import RegistryProperties, Settings, OpenLPMixin, \
37
37
    RegistryMixin, translate
38
 
from openlp.core.lib import OpenLPToolbar
 
38
from openlp.core.ui.lib import OpenLPToolbar
39
39
from openlp.core.lib.ui import create_widget_action
40
40
from openlp.core.lib.projector import DialogSourceStyle
41
41
from openlp.core.lib.projector.constants import *
83
83
        self.one_toolbar.add_toolbar_action('new_projector',
84
84
                                            text=translate('OpenLP.ProjectorManager', 'Add Projector'),
85
85
                                            icon=':/projector/projector_new.png',
86
 
                                            tooltip=translate('OpenLP.ProjectorManager', 'Add a new projector'),
 
86
                                            tooltip=translate('OpenLP.ProjectorManager', 'Add a new projector.'),
87
87
                                            triggers=self.on_add_projector)
88
88
        # Show edit/delete when projector not connected
89
89
        self.one_toolbar.add_toolbar_action('edit_projector',
90
90
                                            text=translate('OpenLP.ProjectorManager', 'Edit Projector'),
91
91
                                            icon=':/general/general_edit.png',
92
 
                                            tooltip=translate('OpenLP.ProjectorManager', 'Edit selected projector'),
 
92
                                            tooltip=translate('OpenLP.ProjectorManager', 'Edit selected projector.'),
93
93
                                            triggers=self.on_edit_projector)
94
94
        self.one_toolbar.add_toolbar_action('delete_projector',
95
95
                                            text=translate('OpenLP.ProjectorManager', 'Delete Projector'),
96
96
                                            icon=':/general/general_delete.png',
97
 
                                            tooltip=translate('OpenLP.ProjectorManager', 'Delete selected projector'),
 
97
                                            tooltip=translate('OpenLP.ProjectorManager', 'Delete selected projector.'),
98
98
                                            triggers=self.on_delete_projector)
99
99
        # Show source/view when projector connected
100
100
        self.one_toolbar.add_toolbar_action('source_view_projector',
101
101
                                            text=translate('OpenLP.ProjectorManager', 'Select Input Source'),
102
102
                                            icon=':/projector/projector_hdmi.png',
103
103
                                            tooltip=translate('OpenLP.ProjectorManager',
104
 
                                                              'Choose input source on selected projector'),
 
104
                                                              'Choose input source on selected projector.'),
105
105
                                            triggers=self.on_select_input)
106
106
        self.one_toolbar.add_toolbar_action('view_projector',
107
107
                                            text=translate('OpenLP.ProjectorManager', 'View Projector'),
108
108
                                            icon=':/system/system_about.png',
109
109
                                            tooltip=translate('OpenLP.ProjectorManager',
110
 
                                                              'View selected projector information'),
 
110
                                                              'View selected projector information.'),
111
111
                                            triggers=self.on_status_projector)
112
112
        self.one_toolbar.addSeparator()
113
113
        self.one_toolbar.add_toolbar_action('connect_projector',
114
114
                                            text=translate('OpenLP.ProjectorManager',
115
 
                                                           'Connect to selected projector'),
 
115
                                                           'Connect to selected projector.'),
116
116
                                            icon=':/projector/projector_connect.png',
117
117
                                            tooltip=translate('OpenLP.ProjectorManager',
118
 
                                                              'Connect to selected projector'),
 
118
                                                              'Connect to selected projector.'),
119
119
                                            triggers=self.on_connect_projector)
120
120
        self.one_toolbar.add_toolbar_action('connect_projector_multiple',
121
121
                                            text=translate('OpenLP.ProjectorManager',
122
122
                                                           'Connect to selected projectors'),
123
123
                                            icon=':/projector/projector_connect_tiled.png',
124
124
                                            tooltip=translate('OpenLP.ProjectorManager',
125
 
                                                              'Connect to selected projector'),
 
125
                                                              'Connect to selected projectors.'),
126
126
                                            triggers=self.on_connect_projector)
127
127
        self.one_toolbar.add_toolbar_action('disconnect_projector',
128
128
                                            text=translate('OpenLP.ProjectorManager',
129
129
                                                           'Disconnect from selected projectors'),
130
130
                                            icon=':/projector/projector_disconnect.png',
131
131
                                            tooltip=translate('OpenLP.ProjectorManager',
132
 
                                                              'Disconnect from selected projector'),
 
132
                                                              'Disconnect from selected projector.'),
133
133
                                            triggers=self.on_disconnect_projector)
134
134
        self.one_toolbar.add_toolbar_action('disconnect_projector_multiple',
135
135
                                            text=translate('OpenLP.ProjectorManager',
136
136
                                                           'Disconnect from selected projector'),
137
137
                                            icon=':/projector/projector_disconnect_tiled.png',
138
138
                                            tooltip=translate('OpenLP.ProjectorManager',
139
 
                                                              'Disconnect from selected projector'),
 
139
                                                              'Disconnect from selected projectors.'),
140
140
                                            triggers=self.on_disconnect_projector)
141
141
        self.one_toolbar.addSeparator()
142
142
        self.one_toolbar.add_toolbar_action('poweron_projector',
144
144
                                                           'Power on selected projector'),
145
145
                                            icon=':/projector/projector_power_on.png',
146
146
                                            tooltip=translate('OpenLP.ProjectorManager',
147
 
                                                              'Power on selected projector'),
 
147
                                                              'Power on selected projector.'),
148
148
                                            triggers=self.on_poweron_projector)
149
149
        self.one_toolbar.add_toolbar_action('poweron_projector_multiple',
150
150
                                            text=translate('OpenLP.ProjectorManager',
151
151
                                                           'Power on selected projector'),
152
152
                                            icon=':/projector/projector_power_on_tiled.png',
153
153
                                            tooltip=translate('OpenLP.ProjectorManager',
154
 
                                                              'Power on selected projector'),
 
154
                                                              'Power on selected projectors.'),
155
155
                                            triggers=self.on_poweron_projector)
156
156
        self.one_toolbar.add_toolbar_action('poweroff_projector',
157
157
                                            text=translate('OpenLP.ProjectorManager', 'Standby selected projector'),
158
158
                                            icon=':/projector/projector_power_off.png',
159
159
                                            tooltip=translate('OpenLP.ProjectorManager',
160
 
                                                              'Put selected projector in standby'),
 
160
                                                              'Put selected projector in standby.'),
161
161
                                            triggers=self.on_poweroff_projector)
162
162
        self.one_toolbar.add_toolbar_action('poweroff_projector_multiple',
163
163
                                            text=translate('OpenLP.ProjectorManager', 'Standby selected projector'),
164
164
                                            icon=':/projector/projector_power_off_tiled.png',
165
165
                                            tooltip=translate('OpenLP.ProjectorManager',
166
 
                                                              'Put selected projector in standby'),
 
166
                                                              'Put selected projectors in standby.'),
167
167
                                            triggers=self.on_poweroff_projector)
168
168
        self.one_toolbar.addSeparator()
169
169
        self.one_toolbar.add_toolbar_action('blank_projector',
175
175
                                            triggers=self.on_blank_projector)
176
176
        self.one_toolbar.add_toolbar_action('blank_projector_multiple',
177
177
                                            text=translate('OpenLP.ProjectorManager',
178
 
                                                           'Blank selected projector screen'),
 
178
                                                           'Blank selected projectors screen'),
179
179
                                            icon=':/projector/projector_blank_tiled.png',
180
180
                                            tooltip=translate('OpenLP.ProjectorManager',
181
 
                                                              'Blank selected projector screen'),
 
181
                                                              'Blank selected projectors screen.'),
182
182
                                            triggers=self.on_blank_projector)
183
183
        self.one_toolbar.add_toolbar_action('show_projector',
184
184
                                            text=translate('OpenLP.ProjectorManager',
185
185
                                                           'Show selected projector screen'),
186
186
                                            icon=':/projector/projector_show.png',
187
187
                                            tooltip=translate('OpenLP.ProjectorManager',
188
 
                                                              'Show selected projector screen'),
 
188
                                                              'Show selected projector screen.'),
189
189
                                            triggers=self.on_show_projector)
190
190
        self.one_toolbar.add_toolbar_action('show_projector_multiple',
191
191
                                            text=translate('OpenLP.ProjectorManager',
192
192
                                                           'Show selected projector screen'),
193
193
                                            icon=':/projector/projector_show_tiled.png',
194
194
                                            tooltip=translate('OpenLP.ProjectorManager',
195
 
                                                              'Show selected projector screen'),
 
195
                                                              'Show selected projectors screen.'),
196
196
                                            triggers=self.on_show_projector)
197
197
        self.layout.addWidget(self.one_toolbar)
198
198
        self.projector_one_widget = QtWidgets.QWidgetAction(self.one_toolbar)
344
344
        real_projector = item.data(QtCore.Qt.UserRole)
345
345
        projector_name = str(item.text())
346
346
        visible = real_projector.link.status_connect >= S_CONNECTED
347
 
        log.debug('(%s) Building menu - visible = %s' % (projector_name, visible))
 
347
        log.debug('({name}) Building menu - visible = {visible}'.format(name=projector_name, visible=visible))
348
348
        self.delete_action.setVisible(True)
349
349
        self.edit_action.setVisible(True)
350
350
        self.connect_action.setVisible(not visible)
394
394
                                                        projectordb=self.projectordb,
395
395
                                                        edit=edit)
396
396
            source = source_select_form.exec(projector.link)
397
 
        log.debug('(%s) source_select_form() returned %s' % (projector.link.ip, source))
 
397
        log.debug('({ip}) source_select_form() returned {data}'.format(ip=projector.link.ip, data=source))
398
398
        if source is not None and source > 0:
399
399
            projector.link.set_input_source(str(source))
400
400
        return
473
473
            return
474
474
        projector = list_item.data(QtCore.Qt.UserRole)
475
475
        msg = QtWidgets.QMessageBox()
476
 
        msg.setText(translate('OpenLP.ProjectorManager', 'Delete projector (%s) %s?') % (projector.link.ip,
477
 
                                                                                         projector.link.name))
 
476
        msg.setText(translate('OpenLP.ProjectorManager',
 
477
                              'Delete projector ({ip}) {name}?'.format(ip=projector.link.ip,
 
478
                                                                       name=projector.link.name)))
478
479
        msg.setInformativeText(translate('OpenLP.ProjectorManager', 'Are you sure you want to delete this projector?'))
479
480
        msg.setStandardButtons(msg.Cancel | msg.Ok)
480
481
        msg.setDefaultButton(msg.Cancel)
522
523
        list_item = None
523
524
        deleted = self.projectordb.delete_projector(projector.db_item)
524
525
        for item in self.projector_list:
525
 
            log.debug('New projector list - item: %s %s' % (item.link.ip, item.link.name))
 
526
            log.debug('New projector list - item: {ip} {name}'.format(ip=item.link.ip, name=item.link.name))
526
527
 
527
528
    def on_disconnect_projector(self, opt=None):
528
529
        """
627
628
        """
628
629
        lwi = self.projector_list_widget.item(self.projector_list_widget.currentRow())
629
630
        projector = lwi.data(QtCore.Qt.UserRole)
630
 
        message = '<b>%s</b>: %s<BR />' % (translate('OpenLP.ProjectorManager', 'Name'),
631
 
                                           projector.link.name)
632
 
        message = '%s<b>%s</b>: %s<br />' % (message, translate('OpenLP.ProjectorManager', 'IP'),
633
 
                                             projector.link.ip)
634
 
        message = '%s<b>%s</b>: %s<br />' % (message, translate('OpenLP.ProjectorManager', 'Port'),
635
 
                                             projector.link.port)
636
 
        message = '%s<b>%s</b>: %s<br />' % (message, translate('OpenLP.ProjectorManager', 'Notes'),
637
 
                                             projector.link.notes)
638
 
        message = '%s<hr /><br >' % message
 
631
        message = '<b>{title}</b>: {data}<BR />'.format(title=translate('OpenLP.ProjectorManager', 'Name'),
 
632
                                                        data=projector.link.name)
 
633
        message += '<b>{title}</b>: {data}<br />'.format(title=translate('OpenLP.ProjectorManager', 'IP'),
 
634
                                                         data=projector.link.ip)
 
635
        message += '<b>{title}</b>: {data}<br />'.format(title=translate('OpenLP.ProjectorManager', 'Port'),
 
636
                                                         data=projector.link.port)
 
637
        message += '<b>{title}</b>: {data}<br />'.format(title=translate('OpenLP.ProjectorManager', 'Notes'),
 
638
                                                         data=projector.link.notes)
 
639
        message += '<hr /><br >'
639
640
        if projector.link.manufacturer is None:
640
 
            message = '%s%s' % (message, translate('OpenLP.ProjectorManager',
641
 
                                                   'Projector information not available at this time.'))
 
641
            message += translate('OpenLP.ProjectorManager', 'Projector information not available at this time.')
642
642
        else:
643
 
            message = '%s<b>%s</b>: %s<BR />' % (message, translate('OpenLP.ProjectorManager', 'Projector Name'),
644
 
                                                 projector.link.pjlink_name)
645
 
            message = '%s<b>%s</b>: %s<br />' % (message, translate('OpenLP.ProjectorManager', 'Manufacturer'),
646
 
                                                 projector.link.manufacturer)
647
 
            message = '%s<b>%s</b>: %s<br />' % (message, translate('OpenLP.ProjectorManager', 'Model'),
648
 
                                                 projector.link.model)
649
 
            message = '%s<b>%s</b>: %s<br /><br />' % (message, translate('OpenLP.ProjectorManager', 'Other info'),
650
 
                                                       projector.link.other_info)
651
 
            message = '%s<b>%s</b>: %s<br />' % (message, translate('OpenLP.ProjectorManager', 'Power status'),
652
 
                                                 ERROR_MSG[projector.link.power])
653
 
            message = '%s<b>%s</b>: %s<br />' % (message, translate('OpenLP.ProjectorManager', 'Shutter is'),
654
 
                                                 translate('OpenLP.ProjectorManager', 'Closed')
655
 
                                                 if projector.link.shutter else translate('OpenLP', 'Open'))
 
643
            message += '<b>{title}</b>: {data}<br />'.format(title=translate('OpenLP.ProjectorManager',
 
644
                                                                             'Projector Name'),
 
645
                                                             data=projector.link.pjlink_name)
 
646
            message += '<b>{title}</b>: {data}<br />'.format(title=translate('OpenLP.ProjectorManager', 'Manufacturer'),
 
647
                                                             data=projector.link.manufacturer)
 
648
            message += '<b>{title}</b>: {data}<br />'.format(title=translate('OpenLP.ProjectorManager', 'Model'),
 
649
                                                             data=projector.link.model)
 
650
            message += '<b>{title}</b>: {data}<br /><br />'.format(title=translate('OpenLP.ProjectorManager',
 
651
                                                                                   'Other info'),
 
652
                                                                   data=projector.link.other_info)
 
653
            message += '<b>{title}</b>: {data}<br />'.format(title=translate('OpenLP.ProjectorManager', 'Power status'),
 
654
                                                             data=ERROR_MSG[projector.link.power])
 
655
            message += '<b>{title}</b>: {data}<br />'.format(title=translate('OpenLP.ProjectorManager', 'Shutter is'),
 
656
                                                             data=translate('OpenLP.ProjectorManager', 'Closed')
 
657
                                                             if projector.link.shutter
 
658
                                                             else translate('OpenLP', 'Open'))
656
659
            message = '%s<b>%s</b>: %s<br />' % (message,
657
660
                                                 translate('OpenLP.ProjectorManager', 'Current source input is'),
658
661
                                                 projector.link.source)
659
662
            count = 1
660
663
            for item in projector.link.lamp:
661
 
                message = '%s <b>%s %s</b> (%s) %s: %s<br />' % (message,
662
 
                                                                 translate('OpenLP.ProjectorManager', 'Lamp'),
663
 
                                                                 count,
664
 
                                                                 translate('OpenLP.ProjectorManager', 'On')
665
 
                                                                 if item['On']
666
 
                                                                 else translate('OpenLP.ProjectorManager', 'Off'),
667
 
                                                                 translate('OpenLP.ProjectorManager', 'Hours'),
668
 
                                                                 item['Hours'])
669
 
                count = count + 1
670
 
            message = '%s<hr /><br />' % message
 
664
                message += '<b>{title} {count}</b> {status} '.format(title=translate('OpenLP.ProjectorManager',
 
665
                                                                                     'Lamp'),
 
666
                                                                     count=count,
 
667
                                                                     status=translate('OpenLP.ProjectorManager',
 
668
                                                                                      ' is on')
 
669
                                                                     if item['On']
 
670
                                                                     else translate('OpenLP.ProjectorManager',
 
671
                                                                                    'is off'))
 
672
 
 
673
                message += '<b>{title}</b>: {hours}<br />'.format(title=translate('OpenLP.ProjectorManager', 'Hours'),
 
674
                                                                  hours=item['Hours'])
 
675
                count += 1
 
676
            message += '<hr /><br />'
671
677
            if projector.link.projector_errors is None:
672
 
                message = '%s%s' % (message, translate('OpenLP.ProjectorManager', 'No current errors or warnings'))
 
678
                message += translate('OpenLP.ProjectorManager', 'No current errors or warnings')
673
679
            else:
674
 
                message = '%s<b>%s</b>' % (message, translate('OpenLP.ProjectorManager', 'Current errors/warnings'))
 
680
                message += '<b>{data}</b>'.format(data=translate('OpenLP.ProjectorManager', 'Current errors/warnings'))
675
681
                for (key, val) in projector.link.projector_errors.items():
676
 
                    message = '%s<b>%s</b>: %s<br />' % (message, key, ERROR_MSG[val])
 
682
                    message += '<b>{key}</b>: {data}<br />'.format(key=key, data=ERROR_MSG[val])
677
683
        QtWidgets.QMessageBox.information(self, translate('OpenLP.ProjectorManager', 'Projector Information'), message)
678
684
 
679
685
    def _add_projector(self, projector):
743
749
        if start:
744
750
            item.link.connect_to_host()
745
751
        for item in self.projector_list:
746
 
            log.debug('New projector list - item: (%s) %s' % (item.link.ip, item.link.name))
 
752
            log.debug('New projector list - item: ({ip}) {name}'.format(ip=item.link.ip, name=item.link.name))
747
753
 
748
754
    @pyqtSlot(str)
749
755
    def add_projector_from_wizard(self, ip, opts=None):
753
759
        :param ip: IP address of new record item to find
754
760
        :param opts: Needed by PyQt5
755
761
        """
756
 
        log.debug('add_projector_from_wizard(ip=%s)' % ip)
 
762
        log.debug('add_projector_from_wizard(ip={ip})'.format(ip=ip))
757
763
        item = self.projectordb.get_projector_by_ip(ip)
758
764
        self.add_projector(item)
759
765
 
764
770
 
765
771
        :param projector: Projector() instance of projector with updated information
766
772
        """
767
 
        log.debug('edit_projector_from_wizard(ip=%s)' % projector.ip)
 
773
        log.debug('edit_projector_from_wizard(ip={ip})'.format(ip=projector.ip))
768
774
        self.old_projector.link.name = projector.name
769
775
        self.old_projector.link.ip = projector.ip
770
776
        self.old_projector.link.pin = None if projector.pin == '' else projector.pin
816
822
        else:
817
823
            status_code = status
818
824
            message = ERROR_MSG[status] if msg is None else msg
819
 
        log.debug('(%s) updateStatus(status=%s) message: "%s"' % (item.link.name, status_code, message))
 
825
        log.debug('({name}) updateStatus(status={status}) message: "{message}"'.format(name=item.link.name,
 
826
                                                                                       status=status_code,
 
827
                                                                                       message=message))
820
828
        if status in STATUS_ICONS:
821
829
            if item.status == status:
822
830
                return
826
834
                status_code = ERROR_STRING[status]
827
835
            elif status in STATUS_STRING:
828
836
                status_code = STATUS_STRING[status]
829
 
            log.debug('(%s) Updating icon with %s' % (item.link.name, status_code))
 
837
            log.debug('({name}) Updating icon with {code}'.format(name=item.link.name, code=status_code))
830
838
            item.widget.setIcon(item.icon)
831
839
            self.update_icons()
832
840
 
833
841
    def get_toolbar_item(self, name, enabled=False, hidden=False):
834
842
        item = self.one_toolbar.findChild(QtWidgets.QAction, name)
835
843
        if item == 0:
836
 
            log.debug('No item found with name "%s"' % name)
 
844
            log.debug('No item found with name "{name}"'.format(name=name))
837
845
            return
838
846
        item.setVisible(False if hidden else True)
839
847
        item.setEnabled(True if enabled else False)
918
926
 
919
927
        :param name: Name from QListWidgetItem
920
928
        """
921
 
        QtWidgets.QMessageBox.warning(self, translate('OpenLP.ProjectorManager',
922
 
                                                      '"%s" Authentication Error' % name),
 
929
        title = '"{name} {message}" '.format(name=name,
 
930
                                             message=translate('OpenLP.ProjectorManager', 'Authentication Error'))
 
931
        QtWidgets.QMessageBox.warning(self, title,
923
932
                                      '<br />There was an authentication error while trying to connect.'
924
933
                                      '<br /><br />Please verify your PIN setting '
925
 
                                      'for projector item "%s"' % name)
 
934
                                      'for projector item "{name}"'.format(name=name))
926
935
 
927
936
    @pyqtSlot(str)
928
937
    def no_authentication_error(self, name):
932
941
 
933
942
        :param name: Name from QListWidgetItem
934
943
        """
935
 
        QtWidgets.QMessageBox.warning(self, translate('OpenLP.ProjectorManager',
936
 
                                                      '"%s" No Authentication Error' % name),
 
944
        title = '"{name} {message}" '.format(name=name,
 
945
                                             message=translate('OpenLP.ProjectorManager', 'No Authentication Error'))
 
946
        QtWidgets.QMessageBox.warning(self, title,
937
947
                                      '<br />PIN is set and projector does not require authentication.'
938
948
                                      '<br /><br />Please verify your PIN setting '
939
 
                                      'for projector item "%s"' % name)
 
949
                                      'for projector item "{name}"'.format(name=name))
940
950
 
941
951
 
942
952
class ProjectorItem(QObject):
972
982
    QtWidgets.QMessageBox.information(None,
973
983
                                      translate('OpenLP.ProjectorManager', 'Not Implemented Yet'),
974
984
                                      translate('OpenLP.ProjectorManager',
975
 
                                                'Function "%s"<br />has not been implemented yet.'
976
 
                                                '<br />Please check back again later.' % function))
 
985
                                                'Function "{function}"<br />has not been implemented yet.'
 
986
                                                '<br />Please check back again later.'.format(function=function)))