diff --git a/openlp/plugins/remotes/lib/remotetab.py b/openlp/plugins/remotes/lib/remotetab.py index 76ee65571..af64e401f 100644 --- a/openlp/plugins/remotes/lib/remotetab.py +++ b/openlp/plugins/remotes/lib/remotetab.py @@ -144,18 +144,33 @@ class RemoteTab(SettingsTab): self.android_app_group_box = QtWidgets.QGroupBox(self.right_column) self.android_app_group_box.setObjectName('android_app_group_box') self.right_layout.addWidget(self.android_app_group_box) - self.qr_layout = QtWidgets.QVBoxLayout(self.android_app_group_box) - self.qr_layout.setObjectName('qr_layout') - self.qr_code_label = QtWidgets.QLabel(self.android_app_group_box) - self.qr_code_label.setPixmap(QtGui.QPixmap(':/remotes/android_app_qr.png')) - self.qr_code_label.setAlignment(QtCore.Qt.AlignCenter) - self.qr_code_label.setObjectName('qr_code_label') - self.qr_layout.addWidget(self.qr_code_label) - self.qr_description_label = QtWidgets.QLabel(self.android_app_group_box) - self.qr_description_label.setObjectName('qr_description_label') - self.qr_description_label.setOpenExternalLinks(True) - self.qr_description_label.setWordWrap(True) - self.qr_layout.addWidget(self.qr_description_label) + self.android_qr_layout = QtWidgets.QVBoxLayout(self.android_app_group_box) + self.android_qr_layout.setObjectName('android_qr_layout') + self.android_qr_code_label = QtWidgets.QLabel(self.android_app_group_box) + self.android_qr_code_label.setPixmap(QtGui.QPixmap(':/remotes/android_app_qr.png')) + self.android_qr_code_label.setAlignment(QtCore.Qt.AlignCenter) + self.android_qr_code_label.setObjectName('android_qr_code_label') + self.android_qr_layout.addWidget(self.android_qr_code_label) + self.android_qr_description_label = QtWidgets.QLabel(self.android_app_group_box) + self.android_qr_description_label.setObjectName('android_qr_description_label') + self.android_qr_description_label.setOpenExternalLinks(True) + self.android_qr_description_label.setWordWrap(True) + self.android_qr_layout.addWidget(self.android_qr_description_label) + self.ios_app_group_box = QtWidgets.QGroupBox(self.right_column) + self.ios_app_group_box.setObjectName('ios_app_group_box') + self.right_layout.addWidget(self.ios_app_group_box) + self.ios_qr_layout = QtWidgets.QVBoxLayout(self.ios_app_group_box) + self.ios_qr_layout.setObjectName('ios_qr_layout') + self.ios_qr_code_label = QtWidgets.QLabel(self.ios_app_group_box) + self.ios_qr_code_label.setPixmap(QtGui.QPixmap(':/remotes/ios_app_qr.png')) + self.ios_qr_code_label.setAlignment(QtCore.Qt.AlignCenter) + self.ios_qr_code_label.setObjectName('ios_qr_code_label') + self.ios_qr_layout.addWidget(self.ios_qr_code_label) + self.ios_qr_description_label = QtWidgets.QLabel(self.ios_app_group_box) + self.ios_qr_description_label.setObjectName('ios_qr_description_label') + self.ios_qr_description_label.setOpenExternalLinks(True) + self.ios_qr_description_label.setWordWrap(True) + self.ios_qr_layout.addWidget(self.ios_qr_description_label) self.left_layout.addStretch() self.right_layout.addStretch() self.twelve_hour_check_box.stateChanged.connect(self.on_twelve_hour_check_box_changed) @@ -176,10 +191,15 @@ class RemoteTab(SettingsTab): self.thumbnails_check_box.setText(translate('RemotePlugin.RemoteTab', 'Show thumbnails of non-text slides in remote and stage view.')) self.android_app_group_box.setTitle(translate('RemotePlugin.RemoteTab', 'Android App')) - self.qr_description_label.setText( + self.android_qr_description_label.setText( translate('RemotePlugin.RemoteTab', 'Scan the QR code or click download to install the ' 'Android app from Google Play.') % 'https://play.google.com/store/apps/details?id=org.openlp.android2') + self.ios_app_group_box.setTitle(translate('RemotePlugin.RemoteTab', 'iOS App')) + self.ios_qr_description_label.setText( + translate('RemotePlugin.RemoteTab', 'Scan the QR code or click download to install the ' + 'iOS app from the App Store.') % + 'https://itunes.apple.com/app/id1096218725') self.https_settings_group_box.setTitle(translate('RemotePlugin.RemoteTab', 'HTTPS Server')) self.https_error_label.setText( translate('RemotePlugin.RemoteTab', 'Could not find an SSL certificate. The HTTPS server will not be ' diff --git a/resources/images/ios_app_qr.png b/resources/images/ios_app_qr.png new file mode 100644 index 000000000..c7244fc33 Binary files /dev/null and b/resources/images/ios_app_qr.png differ diff --git a/resources/images/openlp-2.qrc b/resources/images/openlp-2.qrc index 370473673..f2619b0c7 100644 --- a/resources/images/openlp-2.qrc +++ b/resources/images/openlp-2.qrc @@ -206,5 +206,6 @@ android_app_qr.png + ios_app_qr.png diff --git a/tests/functional/openlp_core_lib/test_htmlbuilder.py b/tests/functional/openlp_core_lib/test_htmlbuilder.py index 8ca98060d..58841eb90 100644 --- a/tests/functional/openlp_core_lib/test_htmlbuilder.py +++ b/tests/functional/openlp_core_lib/test_htmlbuilder.py @@ -197,6 +197,7 @@ FOOTER_CSS_BASE = """ """ FOOTER_CSS = FOOTER_CSS_BASE % ('nowrap') FOOTER_CSS_WRAP = FOOTER_CSS_BASE % ('normal') +FOOTER_CSS_INVALID = '' class Htmbuilder(TestCase, TestMixin): @@ -359,6 +360,27 @@ class Htmbuilder(TestCase, TestMixin): # THEN: Footer should wrap self.assertEqual(FOOTER_CSS_WRAP, css, 'The footer strings should be equal.') + def build_footer_invalid_test(self): + """ + Test the build_footer_css() function + """ + # GIVEN: Create a theme. + css = [] + item = MagicMock() + item.theme_data = None + item.footer = 'FAIL' + height = 1024 + + # WHEN: Settings say that footer should wrap + css.append(build_footer_css(item, height)) + item.theme_data = 'TEST' + item.footer = None + css.append(build_footer_css(item, height)) + + # THEN: Footer should wrap + self.assertEqual(FOOTER_CSS_INVALID, css[0], 'The footer strings should be blank.') + self.assertEqual(FOOTER_CSS_INVALID, css[1], 'The footer strings should be blank.') + def webkit_version_test(self): """ Test the webkit_version() function