From 80656491581e541c818061de406c2877e3ae51b5 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Sat, 23 Aug 2014 00:12:35 +0200 Subject: [PATCH 1/9] Make the wizards look right on OS X --- openlp/core/ui/firsttimeform.py | 12 ++++++++---- openlp/core/ui/firsttimewizard.py | 10 +++++++--- openlp/core/ui/themewizard.py | 6 +++++- openlp/core/ui/wizard.py | 5 ++++- resources/images/openlp-2.qrc | 7 ++++--- resources/images/openlp-osx-wizard.png | Bin 0 -> 38669 bytes scripts/generate_resources.sh | 2 +- 7 files changed, 29 insertions(+), 13 deletions(-) create mode 100644 resources/images/openlp-osx-wizard.png diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index d7c16f0d3..8599c8d35 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -387,17 +387,21 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard, RegistryProperties): self.progress_bar.setValue(self.progress_bar.maximum()) if self.has_run_wizard: self.progress_label.setText(translate('OpenLP.FirstTimeWizard', - 'Download complete. Click the finish button to return to OpenLP.')) + 'Download complete. Click the %s button to return to OpenLP.') % + self.buttonText(QtGui.QWizard.FinishButton)) else: self.progress_label.setText(translate('OpenLP.FirstTimeWizard', - 'Download complete. Click the finish button to start OpenLP.')) + 'Download complete. Click the %s button to start OpenLP.') % + self.buttonText(QtGui.QWizard.FinishButton)) else: if self.has_run_wizard: self.progress_label.setText(translate('OpenLP.FirstTimeWizard', - 'Click the finish button to return to OpenLP.')) + 'Click the %s button to return to OpenLP.') % + self.buttonText(QtGui.QWizard.FinishButton)) else: self.progress_label.setText(translate('OpenLP.FirstTimeWizard', - 'Click the finish button to start OpenLP.')) + 'Click the %s button to start OpenLP.') % + self.buttonText(QtGui.QWizard.FinishButton)) self.finish_button.setVisible(True) self.finish_button.setEnabled(True) self.cancel_button.setVisible(False) diff --git a/openlp/core/ui/firsttimewizard.py b/openlp/core/ui/firsttimewizard.py index ff1675ff5..3e7f057ea 100644 --- a/openlp/core/ui/firsttimewizard.py +++ b/openlp/core/ui/firsttimewizard.py @@ -64,9 +64,12 @@ class Ui_FirstTimeWizard(object): first_time_wizard.setWindowIcon(build_icon(u':/icon/openlp-logo.svg')) first_time_wizard.resize(550, 386) first_time_wizard.setModal(True) - first_time_wizard.setWizardStyle(QtGui.QWizard.ModernStyle) first_time_wizard.setOptions(QtGui.QWizard.IndependentPages | QtGui.QWizard.NoBackButtonOnStartPage | QtGui.QWizard.NoBackButtonOnLastPage | QtGui.QWizard.HaveCustomButton1) + if sys.platform == 'darwin': + first_time_wizard.setPixmap(QtGui.QWizard.BackgroundPixmap, + QtGui.QPixmap(':/wizards/openlp-osx-wizard.png')) + first_time_wizard.resize(634, 386) self.finish_button = self.button(QtGui.QWizard.FinishButton) self.no_internet_finish_button = self.button(QtGui.QWizard.CustomButton1) self.cancel_button = self.button(QtGui.QWizard.CancelButton) @@ -212,7 +215,8 @@ class Ui_FirstTimeWizard(object): translate('OpenLP.FirstTimeWizard', 'Welcome to the First Time Wizard')) self.information_label.setText( translate('OpenLP.FirstTimeWizard', 'This wizard will help you to configure OpenLP for initial use. ' - 'Click the next button below to start.')) + 'Click the %s button below to start.') % + self.buttonText(QtGui.QWizard.NextButton)) self.plugin_page.setTitle(translate('OpenLP.FirstTimeWizard', 'Activate required Plugins')) self.plugin_page.setSubTitle(translate('OpenLP.FirstTimeWizard', 'Select the Plugins you wish to use. ')) self.songs_check_box.setText(translate('OpenLP.FirstTimeWizard', 'Songs')) @@ -236,7 +240,7 @@ class Ui_FirstTimeWizard(object): 'wizard by selecting "Tools/Re-run First Time Wizard" from OpenLP.') self.cancelWizardText = translate('OpenLP.FirstTimeWizard', '\n\nTo cancel the First Time Wizard completely (and not start OpenLP), ' - 'click the Cancel button now.') + 'click the %s button now.') % self.buttonText(QtGui.QWizard.CancelButton) self.songs_page.setTitle(translate('OpenLP.FirstTimeWizard', 'Sample Songs')) self.songs_page.setSubTitle(translate('OpenLP.FirstTimeWizard', 'Select and download public domain songs.')) self.bibles_page.setTitle(translate('OpenLP.FirstTimeWizard', 'Sample Bibles')) diff --git a/openlp/core/ui/themewizard.py b/openlp/core/ui/themewizard.py index bda52c807..60878536a 100644 --- a/openlp/core/ui/themewizard.py +++ b/openlp/core/ui/themewizard.py @@ -29,6 +29,8 @@ """ The Create/Edit theme wizard """ +import sys + from PyQt4 import QtCore, QtGui from openlp.core.common import UiStrings, translate @@ -48,9 +50,11 @@ class Ui_ThemeWizard(object): themeWizard.setObjectName('OpenLP.ThemeWizard') themeWizard.setWindowIcon(build_icon(u':/icon/openlp-logo.svg')) themeWizard.setModal(True) - themeWizard.setWizardStyle(QtGui.QWizard.ModernStyle) themeWizard.setOptions(QtGui.QWizard.IndependentPages | QtGui.QWizard.NoBackButtonOnStartPage | QtGui.QWizard.HaveCustomButton1) + if sys.platform == 'darwin': + themeWizard.setPixmap(QtGui.QWizard.BackgroundPixmap, QtGui.QPixmap(':/wizards/openlp-osx-wizard.png')) + #themeWizard.resize(634, 386) self.spacer = QtGui.QSpacerItem(10, 0, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Minimum) # Welcome Page add_welcome_page(themeWizard, ':/wizards/wizard_createtheme.bmp') diff --git a/openlp/core/ui/wizard.py b/openlp/core/ui/wizard.py index 23bc0a9e1..4ba258780 100644 --- a/openlp/core/ui/wizard.py +++ b/openlp/core/ui/wizard.py @@ -31,6 +31,7 @@ The :mod:``wizard`` module provides generic wizard tools for OpenLP. """ import logging import os +import sys from PyQt4 import QtGui @@ -121,9 +122,11 @@ class OpenLPWizard(QtGui.QWizard, RegistryProperties): """ self.setWindowIcon(build_icon(u':/icon/openlp-logo.svg')) self.setModal(True) - self.setWizardStyle(QtGui.QWizard.ModernStyle) self.setOptions(QtGui.QWizard.IndependentPages | QtGui.QWizard.NoBackButtonOnStartPage | QtGui.QWizard.NoBackButtonOnLastPage) + if sys.platform == 'darwin': + self.setPixmap(QtGui.QWizard.BackgroundPixmap, QtGui.QPixmap(':/wizards/openlp-osx-wizard.png')) + #self.resize(634, 386) add_welcome_page(self, image) self.add_custom_pages() if self.with_progress_page: diff --git a/resources/images/openlp-2.qrc b/resources/images/openlp-2.qrc index 79036f08f..1196fedd0 100644 --- a/resources/images/openlp-2.qrc +++ b/resources/images/openlp-2.qrc @@ -99,6 +99,7 @@ export_load.png + openlp-osx-wizard.png wizard_exportsong.bmp wizard_importsong.bmp wizard_importbible.bmp @@ -150,10 +151,10 @@ messagebox_warning.png - network_server.png + network_server.png network_ssl.png - network_auth.png - + network_auth.png + song_usage_active.png song_usage_inactive.png diff --git a/resources/images/openlp-osx-wizard.png b/resources/images/openlp-osx-wizard.png new file mode 100644 index 0000000000000000000000000000000000000000..e748ba4508371809f596c1cda5d25abac25f9491 GIT binary patch literal 38669 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 openlp/core/resources.py From cf8f15964c0f898ee6a3abd9a9ea988ab51b00e5 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Tue, 2 Sep 2014 23:15:58 +0200 Subject: [PATCH 2/9] Move to use the new is_macosx() method, and tweak the theme wizard a little more. --- openlp/core/ui/firsttimewizard.py | 6 ++--- openlp/core/ui/themeform.py | 1 + openlp/core/ui/themewizard.py | 44 +++++++++++++++---------------- openlp/core/ui/wizard.py | 5 ++-- 4 files changed, 26 insertions(+), 30 deletions(-) diff --git a/openlp/core/ui/firsttimewizard.py b/openlp/core/ui/firsttimewizard.py index 3e7f057ea..c5098eda6 100644 --- a/openlp/core/ui/firsttimewizard.py +++ b/openlp/core/ui/firsttimewizard.py @@ -31,9 +31,7 @@ The UI widgets for the first time wizard. """ from PyQt4 import QtCore, QtGui -import sys - -from openlp.core.common import translate +from openlp.core.common import translate, is_macosx from openlp.core.lib import build_icon from openlp.core.lib.ui import add_welcome_page @@ -66,7 +64,7 @@ class Ui_FirstTimeWizard(object): first_time_wizard.setModal(True) first_time_wizard.setOptions(QtGui.QWizard.IndependentPages | QtGui.QWizard.NoBackButtonOnStartPage | QtGui.QWizard.NoBackButtonOnLastPage | QtGui.QWizard.HaveCustomButton1) - if sys.platform == 'darwin': + if is_macosx(): first_time_wizard.setPixmap(QtGui.QWizard.BackgroundPixmap, QtGui.QPixmap(':/wizards/openlp-osx-wizard.png')) first_time_wizard.resize(634, 386) diff --git a/openlp/core/ui/themeform.py b/openlp/core/ui/themeform.py index 46fd227dd..dcf081f8b 100644 --- a/openlp/core/ui/themeform.py +++ b/openlp/core/ui/themeform.py @@ -170,6 +170,7 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard, RegistryProperties): else: pixmap_width = int(pixmap_height * self.display_aspect_ratio + 0.5) self.preview_box_label.setFixedSize(pixmap_width + 2 * frame_width, pixmap_height + 2 * frame_width) + print(self.size()) def validateCurrentPage(self): """ diff --git a/openlp/core/ui/themewizard.py b/openlp/core/ui/themewizard.py index 60878536a..0046e3e1d 100644 --- a/openlp/core/ui/themewizard.py +++ b/openlp/core/ui/themewizard.py @@ -29,11 +29,9 @@ """ The Create/Edit theme wizard """ -import sys - from PyQt4 import QtCore, QtGui -from openlp.core.common import UiStrings, translate +from openlp.core.common import UiStrings, translate, is_macosx from openlp.core.lib import build_icon from openlp.core.lib.theme import HorizontalType, BackgroundType, BackgroundGradientType from openlp.core.lib.ui import add_welcome_page, create_valign_selection_widgets @@ -43,21 +41,21 @@ class Ui_ThemeWizard(object): """ The Create/Edit theme wizard """ - def setupUi(self, themeWizard): + def setupUi(self, theme_wizard): """ Set up the UI """ - themeWizard.setObjectName('OpenLP.ThemeWizard') - themeWizard.setWindowIcon(build_icon(u':/icon/openlp-logo.svg')) - themeWizard.setModal(True) - themeWizard.setOptions(QtGui.QWizard.IndependentPages | + theme_wizard.setObjectName('OpenLP.ThemeWizard') + theme_wizard.setWindowIcon(build_icon(u':/icon/openlp-logo.svg')) + theme_wizard.setModal(True) + theme_wizard.setOptions(QtGui.QWizard.IndependentPages | QtGui.QWizard.NoBackButtonOnStartPage | QtGui.QWizard.HaveCustomButton1) - if sys.platform == 'darwin': - themeWizard.setPixmap(QtGui.QWizard.BackgroundPixmap, QtGui.QPixmap(':/wizards/openlp-osx-wizard.png')) - #themeWizard.resize(634, 386) + if is_macosx(): + theme_wizard.setPixmap(QtGui.QWizard.BackgroundPixmap, QtGui.QPixmap(':/wizards/openlp-osx-wizard.png')) + theme_wizard.resize(646, 386) self.spacer = QtGui.QSpacerItem(10, 0, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Minimum) # Welcome Page - add_welcome_page(themeWizard, ':/wizards/wizard_createtheme.bmp') + add_welcome_page(theme_wizard, ':/wizards/wizard_createtheme.bmp') # Background Page self.background_page = QtGui.QWizardPage() self.background_page.setObjectName('background_page') @@ -141,7 +139,7 @@ class Ui_ThemeWizard(object): self.transparent_layout.setObjectName('Transparent_layout') self.background_stack.addWidget(self.transparent_widget) self.background_layout.addLayout(self.background_stack) - themeWizard.addPage(self.background_page) + theme_wizard.addPage(self.background_page) # Main Area Page self.main_area_page = QtGui.QWizardPage() self.main_area_page.setObjectName('main_area_page') @@ -222,7 +220,7 @@ class Ui_ThemeWizard(object): self.shadow_size_spin_box.setObjectName('shadow_size_spin_box') self.shadow_layout.addWidget(self.shadow_size_spin_box) self.main_area_layout.addRow(self.shadow_check_box, self.shadow_layout) - themeWizard.addPage(self.main_area_page) + theme_wizard.addPage(self.main_area_page) # Footer Area Page self.footer_area_page = QtGui.QWizardPage() self.footer_area_page.setObjectName('footer_area_page') @@ -246,7 +244,7 @@ class Ui_ThemeWizard(object): self.footer_size_spin_box.setObjectName('FooterSizeSpinBox') self.footer_area_layout.addRow(self.footer_size_label, self.footer_size_spin_box) self.footer_area_layout.setItem(3, QtGui.QFormLayout.LabelRole, self.spacer) - themeWizard.addPage(self.footer_area_page) + theme_wizard.addPage(self.footer_area_page) # Alignment Page self.alignment_page = QtGui.QWizardPage() self.alignment_page.setObjectName('alignment_page') @@ -268,7 +266,7 @@ class Ui_ThemeWizard(object): self.transitions_check_box.setObjectName('transitions_check_box') self.alignment_layout.addRow(self.transitions_label, self.transitions_check_box) self.alignment_layout.setItem(3, QtGui.QFormLayout.LabelRole, self.spacer) - themeWizard.addPage(self.alignment_page) + theme_wizard.addPage(self.alignment_page) # Area Position Page self.area_position_page = QtGui.QWizardPage() self.area_position_page.setObjectName('area_position_page') @@ -338,7 +336,7 @@ class Ui_ThemeWizard(object): self.footer_height_spin_box.setObjectName('footer_height_spin_box') self.footer_position_layout.addRow(self.footer_height_label, self.footer_height_spin_box) self.area_position_layout.addWidget(self.footer_position_group_box) - themeWizard.addPage(self.area_position_page) + theme_wizard.addPage(self.area_position_page) # Preview Page self.preview_page = QtGui.QWizardPage() self.preview_page.setObjectName('preview_page') @@ -366,8 +364,8 @@ class Ui_ThemeWizard(object): self.preview_box_label.setObjectName('preview_box_label') self.preview_area_layout.addWidget(self.preview_box_label) self.preview_layout.addWidget(self.preview_area) - themeWizard.addPage(self.preview_page) - self.retranslateUi(themeWizard) + theme_wizard.addPage(self.preview_page) + self.retranslateUi(theme_wizard) QtCore.QObject.connect(self.background_combo_box, QtCore.SIGNAL('currentIndexChanged(int)'), self.background_stack, QtCore.SLOT('setCurrentIndex(int)')) QtCore.QObject.connect(self.outline_check_box, QtCore.SIGNAL('toggled(bool)'), self.outline_color_button, @@ -395,11 +393,11 @@ class Ui_ThemeWizard(object): QtCore.QObject.connect(self.footer_position_check_box, QtCore.SIGNAL('toggled(bool)'), self.footer_height_spin_box, QtCore.SLOT('setDisabled(bool)')) - def retranslateUi(self, themeWizard): + def retranslateUi(self, theme_wizard): """ Translate the UI on the fly """ - themeWizard.setWindowTitle(translate('OpenLP.ThemeWizard', 'Theme Wizard')) + theme_wizard.setWindowTitle(translate('OpenLP.ThemeWizard', 'Theme Wizard')) self.title_label.setText('%s' % translate('OpenLP.ThemeWizard', 'Welcome to the Theme Wizard')) self.information_label.setText( @@ -488,8 +486,8 @@ class Ui_ThemeWizard(object): self.footer_height_label.setText(translate('OpenLP.ThemeWizard', 'Height:')) self.footer_height_spin_box.setSuffix(translate('OpenLP.ThemeWizard', 'px')) self.footer_position_check_box.setText(translate('OpenLP.ThemeWizard', 'Use default location')) - themeWizard.setOption(QtGui.QWizard.HaveCustomButton1, False) - themeWizard.setButtonText(QtGui.QWizard.CustomButton1, translate('OpenLP.ThemeWizard', 'Layout Preview')) + theme_wizard.setOption(QtGui.QWizard.HaveCustomButton1, False) + theme_wizard.setButtonText(QtGui.QWizard.CustomButton1, translate('OpenLP.ThemeWizard', 'Layout Preview')) self.preview_page.setTitle(translate('OpenLP.ThemeWizard', 'Preview and Save')) self.preview_page.setSubTitle(translate('OpenLP.ThemeWizard', 'Preview the theme and save it.')) self.theme_name_label.setText(translate('OpenLP.ThemeWizard', 'Theme name:')) diff --git a/openlp/core/ui/wizard.py b/openlp/core/ui/wizard.py index 4ba258780..c5a969f9e 100644 --- a/openlp/core/ui/wizard.py +++ b/openlp/core/ui/wizard.py @@ -31,11 +31,10 @@ The :mod:``wizard`` module provides generic wizard tools for OpenLP. """ import logging import os -import sys from PyQt4 import QtGui -from openlp.core.common import Registry, RegistryProperties, Settings, UiStrings, translate +from openlp.core.common import Registry, RegistryProperties, Settings, UiStrings, translate, is_macosx from openlp.core.lib import build_icon from openlp.core.lib.ui import add_welcome_page @@ -124,7 +123,7 @@ class OpenLPWizard(QtGui.QWizard, RegistryProperties): self.setModal(True) self.setOptions(QtGui.QWizard.IndependentPages | QtGui.QWizard.NoBackButtonOnStartPage | QtGui.QWizard.NoBackButtonOnLastPage) - if sys.platform == 'darwin': + if is_macosx(): self.setPixmap(QtGui.QWizard.BackgroundPixmap, QtGui.QPixmap(':/wizards/openlp-osx-wizard.png')) #self.resize(634, 386) add_welcome_page(self, image) From ceeb1b011876cf409177c0dfbb2affed469102ac Mon Sep 17 00:00:00 2001 From: Jonathan Springer Date: Thu, 4 Sep 2014 20:27:21 +0200 Subject: [PATCH 3/9] Removed icons from menu items on Mac OS X --- openlp/core/lib/ui.py | 4 +++- openlp/core/ui/mainwindow.py | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/openlp/core/lib/ui.py b/openlp/core/lib/ui.py index cbc35e28d..af4b263d3 100644 --- a/openlp/core/lib/ui.py +++ b/openlp/core/lib/ui.py @@ -33,7 +33,7 @@ import logging from PyQt4 import QtCore, QtGui -from openlp.core.common import Registry, UiStrings, translate +from openlp.core.common import Registry, UiStrings, translate, is_macosx from openlp.core.lib import build_icon from openlp.core.utils.actions import ActionList @@ -247,6 +247,8 @@ def create_action(parent, name, **kwargs): """ action = QtGui.QAction(parent) action.setObjectName(name) + if is_macosx(): + action.setIconVisibleInMenu(False) if kwargs.get('text'): action.setText(kwargs.pop('text')) if kwargs.get('icon'): diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 1a6b688c7..be2902b9b 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -118,10 +118,12 @@ class Ui_MainWindow(object): self.recent_files_menu = QtGui.QMenu(self.file_menu) self.recent_files_menu.setObjectName('recentFilesMenu') self.file_import_menu = QtGui.QMenu(self.file_menu) - self.file_import_menu.setIcon(build_icon(u':/general/general_import.png')) + if not is_macosx(): + self.file_import_menu.setIcon(build_icon(u':/general/general_import.png')) self.file_import_menu.setObjectName('file_import_menu') self.file_export_menu = QtGui.QMenu(self.file_menu) - self.file_export_menu.setIcon(build_icon(u':/general/general_export.png')) + if not is_macosx(): + self.file_export_menu.setIcon(build_icon(u':/general/general_export.png')) self.file_export_menu.setObjectName('file_export_menu') # View Menu self.view_menu = QtGui.QMenu(self.menu_bar) From 496c12b2db478097b198d6c7f108c6ea43e1275e Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Thu, 4 Sep 2014 22:10:34 +0200 Subject: [PATCH 4/9] Reformatted a comment; Renamed NT to WIN; Made OpenLPMixin constructor slightly more robust. --- openlp.py | 7 +++---- openlp/core/__init__.py | 4 ++-- openlp/core/common/openlpmixin.py | 8 +++----- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/openlp.py b/openlp.py index 8a53fe965..5d507606d 100755 --- a/openlp.py +++ b/openlp.py @@ -36,10 +36,9 @@ if __name__ == '__main__': """ Instantiate and run the application. """ - # Mac OS X passes arguments like '-psn_XXXX' to gui application. - # This argument is process serial number. However, this causes - # conflict with other OpenLP arguments. Since we do not use this - # argument we can delete it to avoid any potential conflicts. + # Mac OS X passes arguments like '-psn_XXXX' to the application. This argument is actually a process serial number. + # However, this causes a conflict with other OpenLP arguments. Since we do not use this argument we can delete it + # to avoid any potential conflicts. if sys.platform.startswith('darwin'): sys.argv = [x for x in sys.argv if not x.startswith('-psn')] main() diff --git a/openlp/core/__init__.py b/openlp/core/__init__.py index 32ef5c5a3..cb9105797 100644 --- a/openlp/core/__init__.py +++ b/openlp/core/__init__.py @@ -59,7 +59,7 @@ __all__ = ['OpenLP', 'main'] log = logging.getLogger() -NT_REPAIR_STYLESHEET = """ +WIN_REPAIR_STYLESHEET = """ QMainWindow::separator { border: none; @@ -127,7 +127,7 @@ class OpenLP(OpenLPMixin, QtGui.QApplication): 'QTableWidget, QListWidget, QTreeWidget {alternate-background-color: ' + base_color.name() + ';}\n' application_stylesheet += alternate_rows_repair_stylesheet if is_win(): - application_stylesheet += NT_REPAIR_STYLESHEET + application_stylesheet += WIN_REPAIR_STYLESHEET if application_stylesheet: self.setStyleSheet(application_stylesheet) show_splash = Settings().value('core/show splash') diff --git a/openlp/core/common/openlpmixin.py b/openlp/core/common/openlpmixin.py index 1c7fe7d5a..3e8a8926a 100644 --- a/openlp/core/common/openlpmixin.py +++ b/openlp/core/common/openlpmixin.py @@ -33,6 +33,7 @@ import logging import inspect from openlp.core.common import trace_error_handler + DO_NOT_TRACE_EVENTS = ['timerEvent', 'paintEvent', 'drag_enter_event', 'drop_event', 'on_controller_size_changed', 'preview_size_changed', 'resizeEvent'] @@ -41,11 +42,8 @@ class OpenLPMixin(object): """ Base Calling object for OpenLP classes. """ - def __init__(self, parent): - try: - super(OpenLPMixin, self).__init__(parent) - except TypeError: - super(OpenLPMixin, self).__init__() + def __init__(self, *args, **kwargs): + super(OpenLPMixin, self).__init__(*args, **kwargs) self.logger = logging.getLogger("%s.%s" % (self.__module__, self.__class__.__name__)) if self.logger.getEffectiveLevel() == logging.DEBUG: for name, m in inspect.getmembers(self, inspect.ismethod): From 1f9c0a31f88f19d4a07abf632ceb0a05b8620de1 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Thu, 4 Sep 2014 22:25:23 +0200 Subject: [PATCH 5/9] Made wizard image bigger, and made Theme wizard bigger --- openlp/core/ui/themeform.py | 1 - openlp/core/ui/themewizard.py | 2 +- resources/images/openlp-osx-wizard.png | Bin 38669 -> 39507 bytes 3 files changed, 1 insertion(+), 2 deletions(-) diff --git a/openlp/core/ui/themeform.py b/openlp/core/ui/themeform.py index dcf081f8b..46fd227dd 100644 --- a/openlp/core/ui/themeform.py +++ b/openlp/core/ui/themeform.py @@ -170,7 +170,6 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard, RegistryProperties): else: pixmap_width = int(pixmap_height * self.display_aspect_ratio + 0.5) self.preview_box_label.setFixedSize(pixmap_width + 2 * frame_width, pixmap_height + 2 * frame_width) - print(self.size()) def validateCurrentPage(self): """ diff --git a/openlp/core/ui/themewizard.py b/openlp/core/ui/themewizard.py index 0046e3e1d..c9c6f7e35 100644 --- a/openlp/core/ui/themewizard.py +++ b/openlp/core/ui/themewizard.py @@ -52,7 +52,7 @@ class Ui_ThemeWizard(object): QtGui.QWizard.NoBackButtonOnStartPage | QtGui.QWizard.HaveCustomButton1) if is_macosx(): theme_wizard.setPixmap(QtGui.QWizard.BackgroundPixmap, QtGui.QPixmap(':/wizards/openlp-osx-wizard.png')) - theme_wizard.resize(646, 386) + theme_wizard.resize(646, 400) self.spacer = QtGui.QSpacerItem(10, 0, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Minimum) # Welcome Page add_welcome_page(theme_wizard, ':/wizards/wizard_createtheme.bmp') diff --git a/resources/images/openlp-osx-wizard.png b/resources/images/openlp-osx-wizard.png index e748ba4508371809f596c1cda5d25abac25f9491..79437b5ed3ab50cde8632397bcf452412c3030b5 100644 GIT binary patch literal 39507 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 DEDbyx literal 38669 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 Date: Thu, 4 Sep 2014 23:38:39 +0200 Subject: [PATCH 6/9] Make tabbed docks look better by using document mode --- openlp/core/ui/mainwindow.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index be2902b9b..77a903c5f 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -92,6 +92,8 @@ class Ui_MainWindow(object): main_window.setObjectName('MainWindow') main_window.setWindowIcon(build_icon(':/icon/openlp-logo.svg')) main_window.setDockNestingEnabled(True) + if is_macosx(): + main_window.setDocumentMode(True) # Set up the main container, which contains all the other form widgets. self.main_content = QtGui.QWidget(main_window) self.main_content.setObjectName('main_content') From bf488da5168b0d1a7a8367bc95327dcacda56500 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Mon, 8 Sep 2014 00:17:20 +0200 Subject: [PATCH 7/9] Added tests for with and without os x menu icon, renamed some tests to use our test name convention, fixed up and added more tests for the FormattingTagsForm. --- openlp/core/ui/formattingtagform.py | 6 ++ .../functional/openlp_core_lib/test_theme.py | 2 +- tests/functional/openlp_core_lib/test_ui.py | 65 +++++++++++++--- .../openlp_core_ui/test_firsttimeform.py | 4 +- .../test_formattingtagscontroller.py | 8 +- .../openlp_core_ui/test_formattingtagsform.py | 76 +++++++++++++------ 6 files changed, 119 insertions(+), 42 deletions(-) diff --git a/openlp/core/ui/formattingtagform.py b/openlp/core/ui/formattingtagform.py index 4f3d5d251..96e25c27d 100644 --- a/openlp/core/ui/formattingtagform.py +++ b/openlp/core/ui/formattingtagform.py @@ -60,6 +60,12 @@ class FormattingTagForm(QtGui.QDialog, Ui_FormattingTagDialog, FormattingTagCont """ super(FormattingTagForm, self).__init__(parent) self.setupUi(self) + self._setup() + + def _setup(self): + """ + Set up the class. This method is mocked out by the tests. + """ self.services = FormattingTagController() self.tag_table_widget.itemSelectionChanged.connect(self.on_row_selected) self.new_button.clicked.connect(self.on_new_clicked) diff --git a/tests/functional/openlp_core_lib/test_theme.py b/tests/functional/openlp_core_lib/test_theme.py index bcdced35f..7b09135dc 100644 --- a/tests/functional/openlp_core_lib/test_theme.py +++ b/tests/functional/openlp_core_lib/test_theme.py @@ -51,7 +51,7 @@ class TestTheme(TestCase): """ pass - def test_new_theme(self): + def new_theme_test(self): """ Test the theme creation - basic test """ diff --git a/tests/functional/openlp_core_lib/test_ui.py b/tests/functional/openlp_core_lib/test_ui.py index 591762947..c17c4f8bf 100644 --- a/tests/functional/openlp_core_lib/test_ui.py +++ b/tests/functional/openlp_core_lib/test_ui.py @@ -29,10 +29,14 @@ """ Package to test the openlp.core.lib.ui package. """ -from PyQt4 import QtGui +from PyQt4 import QtCore, QtGui from unittest import TestCase -from openlp.core.lib.ui import * +from openlp.core.common import UiStrings, translate +from openlp.core.lib.ui import add_welcome_page, create_button_box, create_horizontal_adjusting_combo_box, \ + create_button, create_action, create_valign_selection_widgets, find_and_set_in_combo_box, create_widget_action, \ + set_case_insensitive_completer +from tests.functional import MagicMock, patch class TestUi(TestCase): @@ -40,7 +44,7 @@ class TestUi(TestCase): Test the functions in the ui module """ - def test_add_welcome_page(self): + def add_welcome_page_test(self): """ Test appending a welcome page to a wizard """ @@ -54,7 +58,7 @@ class TestUi(TestCase): self.assertEqual(1, len(wizard.pageIds()), 'The wizard should have one page.') self.assertIsInstance(wizard.page(0).pixmap(QtGui.QWizard.WatermarkPixmap), QtGui.QPixmap) - def test_create_button_box(self): + def create_button_box_test(self): """ Test creating a button box for a dialog """ @@ -82,7 +86,7 @@ class TestUi(TestCase): self.assertEqual(1, len(btnbox.buttons())) self.assertEqual(QtGui.QDialogButtonBox.HelpRole, btnbox.buttonRole(btnbox.buttons()[0])) - def test_create_horizontal_adjusting_combo_box(self): + def create_horizontal_adjusting_combo_box_test(self): """ Test creating a horizontal adjusting combo box """ @@ -97,7 +101,7 @@ class TestUi(TestCase): self.assertEqual('combo1', combo.objectName()) self.assertEqual(QtGui.QComboBox.AdjustToMinimumContentsLength, combo.sizeAdjustPolicy()) - def test_create_button(self): + def create_button_test(self): """ Test creating a button """ @@ -129,7 +133,7 @@ class TestUi(TestCase): self.assertEqual('my_btn', btn.objectName()) self.assertTrue(btn.isEnabled()) - def test_create_action(self): + def create_action_test(self): """ Test creating an action """ @@ -154,7 +158,44 @@ class TestUi(TestCase): self.assertEqual('my tooltip', action.toolTip()) self.assertEqual('my statustip', action.statusTip()) - def test_create_checked_enabled_visible_action(self): + def create_action_on_mac_osx_test(self): + """ + Test creating an action on OS X calls the correct method + """ + # GIVEN: A dialog and a mocked out is_macosx() method to always return True + with patch('openlp.core.lib.ui.is_macosx') as mocked_is_macosx, \ + patch('openlp.core.lib.ui.QtGui.QAction') as MockedQAction: + mocked_is_macosx.return_value = True + mocked_action = MagicMock() + MockedQAction.return_value = mocked_action + dialog = QtGui.QDialog() + + # WHEN: An action is created + create_action(dialog, 'my_action') + + # THEN: setIconVisibleInMenu should be called + mocked_action.setIconVisibleInMenu.assert_called_with(False) + + def create_action_not_on_mac_osx_test(self): + """ + Test creating an action on something other than OS X doesn't call the method + """ + # GIVEN: A dialog and a mocked out is_macosx() method to always return True + with patch('openlp.core.lib.ui.is_macosx') as mocked_is_macosx, \ + patch('openlp.core.lib.ui.QtGui.QAction') as MockedQAction: + mocked_is_macosx.return_value = False + mocked_action = MagicMock() + MockedQAction.return_value = mocked_action + dialog = QtGui.QDialog() + + # WHEN: An action is created + create_action(dialog, 'my_action') + + # THEN: setIconVisibleInMenu should not be called + self.assertEqual(0, mocked_action.setIconVisibleInMenu.call_count, + 'setIconVisibleInMenu should not have been called') + + def create_checked_enabled_visible_action_test(self): """ Test creating an action with the 'checked', 'enabled' and 'visible' properties. """ @@ -169,7 +210,7 @@ class TestUi(TestCase): self.assertEqual(False, action.isEnabled()) self.assertEqual(False, action.isVisible()) - def test_create_valign_selection_widgets(self): + def create_valign_selection_widgets_test(self): """ Test creating a combo box for valign selection """ @@ -186,7 +227,7 @@ class TestUi(TestCase): for text in [UiStrings().Top, UiStrings().Middle, UiStrings().Bottom]: self.assertTrue(combo.findText(text) >= 0) - def test_find_and_set_in_combo_box(self): + def find_and_set_in_combo_box_test(self): """ Test finding a string in a combo box and setting it as the selected item if present """ @@ -213,7 +254,7 @@ class TestUi(TestCase): # THEN: The index should have changed self.assertEqual(2, combo.currentIndex()) - def test_create_widget_action(self): + def create_widget_action_test(self): """ Test creating an action for a widget """ @@ -227,7 +268,7 @@ class TestUi(TestCase): self.assertIsInstance(action, QtGui.QAction) self.assertEqual(action.objectName(), 'some action') - def test_set_case_insensitive_completer(self): + def set_case_insensitive_completer_test(self): """ Test setting a case insensitive completer on a widget """ diff --git a/tests/functional/openlp_core_ui/test_firsttimeform.py b/tests/functional/openlp_core_ui/test_firsttimeform.py index 2e26c286a..35bd1675d 100644 --- a/tests/functional/openlp_core_ui/test_firsttimeform.py +++ b/tests/functional/openlp_core_ui/test_firsttimeform.py @@ -47,7 +47,7 @@ class TestFirstTimeForm(TestCase, TestMixin): Registry().register('application', self.app) self.first_time_form = FirstTimeForm(screens) - def test_access_to_config(self): + def access_to_config_test(self): """ Test if we can access the First Time Form's config file """ @@ -59,7 +59,7 @@ class TestFirstTimeForm(TestCase, TestMixin): self.assertTrue(self.first_time_form.web_access, 'First Time Wizard\'s web configuration file should be available') - def test_parsable_config(self): + def parsable_config_test(self): """ Test if the First Time Form's config file is parsable """ diff --git a/tests/functional/openlp_core_ui/test_formattingtagscontroller.py b/tests/functional/openlp_core_ui/test_formattingtagscontroller.py index 1d8512940..38cae0bf4 100644 --- a/tests/functional/openlp_core_ui/test_formattingtagscontroller.py +++ b/tests/functional/openlp_core_ui/test_formattingtagscontroller.py @@ -39,7 +39,7 @@ class TestFormattingTagController(TestCase): def setUp(self): self.services = FormattingTagController() - def test_strip(self): + def strip_test(self): """ Test that the _strip strips the correct chars """ @@ -52,7 +52,7 @@ class TestFormattingTagController(TestCase): # THEN: The tag should be returned with the wrappers removed. self.assertEqual(result, 'tag', 'FormattingTagForm._strip should return u\'tag\' when called with u\'{tag}\'') - def test_end_tag_changed_processes_correctly(self): + def end_tag_changed_processes_correctly_test(self): """ Test that the end html tags are generated correctly """ @@ -77,7 +77,7 @@ class TestFormattingTagController(TestCase): self.assertTrue(error == test['valid'], 'Function should not generate unexpected error messages : %s ' % error) - def test_start_tag_changed_processes_correctly(self): + def start_tag_changed_processes_correctly_test(self): """ Test that the end html tags are generated correctly """ @@ -100,7 +100,7 @@ class TestFormattingTagController(TestCase): self.assertTrue(error == test['valid'], 'Function should not generate unexpected error messages : %s ' % error) - def test_start_html_to_end_html(self): + def start_html_to_end_html_test(self): """ Test that the end html tags are generated correctly """ diff --git a/tests/functional/openlp_core_ui/test_formattingtagsform.py b/tests/functional/openlp_core_ui/test_formattingtagsform.py index e71a75651..736a306c3 100644 --- a/tests/functional/openlp_core_ui/test_formattingtagsform.py +++ b/tests/functional/openlp_core_ui/test_formattingtagsform.py @@ -29,17 +29,17 @@ """ Package to test the openlp.core.ui.formattingtagsform package. """ +from PyQt4 import QtGui from unittest import TestCase +from openlp.core.common import translate -from tests.functional import MagicMock, patch +from tests.functional import MagicMock, patch, call from openlp.core.ui.formattingtagform import FormattingTagForm # TODO: Tests Still TODO # __init__ # exec_ -# on_new_clicked -# on_delete_clicked # on_saved_clicked # _reloadTable @@ -47,30 +47,60 @@ from openlp.core.ui.formattingtagform import FormattingTagForm class TestFormattingTagForm(TestCase): def setUp(self): - self.init_patcher = patch('openlp.core.ui.formattingtagform.FormattingTagForm.__init__') - self.qdialog_patcher = patch('openlp.core.ui.formattingtagform.QtGui.QDialog') - self.ui_formatting_tag_dialog_patcher = patch('openlp.core.ui.formattingtagform.Ui_FormattingTagDialog') - self.mocked_init = self.init_patcher.start() - self.mocked_qdialog = self.qdialog_patcher.start() - self.mocked_ui_formatting_tag_dialog = self.ui_formatting_tag_dialog_patcher.start() - self.mocked_init.return_value = None + """ + Mock out stuff for all the tests + """ + self.setup_patcher = patch('openlp.core.ui.formattingtagform.FormattingTagForm._setup') + self.setup_patcher.start() def tearDown(self): - self.init_patcher.stop() - self.qdialog_patcher.stop() - self.ui_formatting_tag_dialog_patcher.stop() - - def test_on_text_edited(self): """ - Test that the appropriate actions are preformed when on_text_edited is called + Remove the mocks + """ + self.setup_patcher.stop() + + def on_row_selected_test(self): + """ + Test that the appropriate actions are preformed when on_row_selected is called + """ + # GIVEN: An instance of the Formatting Tag Form and a mocked delete_button + form = FormattingTagForm(None) + form.delete_button = MagicMock() + + # WHEN: on_row_selected is called + form.on_row_selected() + + # THEN: setEnabled and should have been called on delete_button + form.delete_button.setEnabled.assert_called_with(True) + + def on_new_clicked_test(self): + """ + Test that clicking the Add a new tag button does the right thing """ - # GIVEN: An instance of the Formatting Tag Form and a mocked save_push_button - form = FormattingTagForm() - form.save_button = MagicMock() + # GIVEN: A formatting tag form and a mocked out tag table widget + form = FormattingTagForm(None) + form.tag_table_widget = MagicMock() + row_count = 5 + form.tag_table_widget.rowCount.return_value = row_count - # WHEN: on_text_edited is called with an arbitrary value - # form.on_text_edited('text') + # WHEN: on_new_clicked is run (i.e. the Add new button was clicked) + with patch('openlp.core.ui.formattingtagform.QtGui.QTableWidgetItem') as MockedQTableWidgetItem: + mocked_table_widget = MagicMock() + MockedQTableWidgetItem.return_value = mocked_table_widget + form.on_new_clicked() - # THEN: setEnabled and setDefault should have been called on save_push_button - # form.save_button.setEnabled.assert_called_with(True) + # THEN: A new row should be added to the table + form.tag_table_widget.rowCount.assert_called_with() + form.tag_table_widget.insertRow.assert_called_with(row_count) + expected_set_item_calls = [ + call(row_count, 0, mocked_table_widget), + call(row_count, 1, mocked_table_widget), + call(row_count, 2, mocked_table_widget), + call(row_count, 3, mocked_table_widget) + ] + self.assertEqual(expected_set_item_calls, form.tag_table_widget.setItem.call_args_list, + 'setItem should have been called correctly') + form.tag_table_widget.resizeRowsToContents.assert_called_with() + form.tag_table_widget.scrollToBottom.assert_called_with() + form.tag_table_widget.selectRow.assert_called_with(row_count) From 40edebdab0b5ef72d1f856dd72657be2114e9102 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Mon, 8 Sep 2014 00:30:21 +0200 Subject: [PATCH 8/9] Style fixes --- openlp/core/ui/themewizard.py | 2 +- openlp/core/ui/wizard.py | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/openlp/core/ui/themewizard.py b/openlp/core/ui/themewizard.py index c9c6f7e35..50200313f 100644 --- a/openlp/core/ui/themewizard.py +++ b/openlp/core/ui/themewizard.py @@ -49,7 +49,7 @@ class Ui_ThemeWizard(object): theme_wizard.setWindowIcon(build_icon(u':/icon/openlp-logo.svg')) theme_wizard.setModal(True) theme_wizard.setOptions(QtGui.QWizard.IndependentPages | - QtGui.QWizard.NoBackButtonOnStartPage | QtGui.QWizard.HaveCustomButton1) + QtGui.QWizard.NoBackButtonOnStartPage | QtGui.QWizard.HaveCustomButton1) if is_macosx(): theme_wizard.setPixmap(QtGui.QWizard.BackgroundPixmap, QtGui.QPixmap(':/wizards/openlp-osx-wizard.png')) theme_wizard.resize(646, 400) diff --git a/openlp/core/ui/wizard.py b/openlp/core/ui/wizard.py index c5a969f9e..7199d1742 100644 --- a/openlp/core/ui/wizard.py +++ b/openlp/core/ui/wizard.py @@ -125,7 +125,6 @@ class OpenLPWizard(QtGui.QWizard, RegistryProperties): QtGui.QWizard.NoBackButtonOnStartPage | QtGui.QWizard.NoBackButtonOnLastPage) if is_macosx(): self.setPixmap(QtGui.QWizard.BackgroundPixmap, QtGui.QPixmap(':/wizards/openlp-osx-wizard.png')) - #self.resize(634, 386) add_welcome_page(self, image) self.add_custom_pages() if self.with_progress_page: From 08bacf69b2000b1fee9e7ee4df1ef4a0b524a7cd Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Mon, 8 Sep 2014 22:43:21 +0200 Subject: [PATCH 9/9] Revert accidental commit of my local changes --- scripts/generate_resources.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/generate_resources.sh b/scripts/generate_resources.sh index 76ace1bb6..eb2cd7c46 100755 --- a/scripts/generate_resources.sh +++ b/scripts/generate_resources.sh @@ -44,7 +44,7 @@ mv openlp/core/resources.py openlp/core/resources.py.old # Create the new data from the updated qrc -pyrcc4-3.3 -py3 -o openlp/core/resources.py.new resources/images/openlp-2.qrc +pyrcc4 -py3 -o openlp/core/resources.py.new resources/images/openlp-2.qrc # Remove patch breaking lines cat openlp/core/resources.py.new | sed '/# Created: /d;/# by: /d' > openlp/core/resources.py