def setupUi(self): self.setObjectName('ImagesTab') super(ImageTab, self).setupUi() self.background_color_group_box = QtGui.QGroupBox(self.left_column) self.background_color_group_box.setObjectName( 'background_color_group_box') self.form_layout = QtGui.QFormLayout(self.background_color_group_box) self.form_layout.setObjectName('form_layout') self.color_layout = QtGui.QHBoxLayout() self.background_color_label = QtGui.QLabel( self.background_color_group_box) self.background_color_label.setObjectName('background_color_label') self.color_layout.addWidget(self.background_color_label) self.background_color_button = ColorButton( self.background_color_group_box) self.background_color_button.setObjectName('background_color_button') self.color_layout.addWidget(self.background_color_button) self.form_layout.addRow(self.color_layout) self.information_label = QtGui.QLabel(self.background_color_group_box) self.information_label.setObjectName('information_label') self.information_label.setWordWrap(True) self.form_layout.addRow(self.information_label) self.left_layout.addWidget(self.background_color_group_box) self.left_layout.addStretch() self.right_column.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred) self.right_layout.addStretch() # Signals and slots self.background_color_button.colorChanged.connect( self.on_background_color_changed)
def setupUi(self): self.setObjectName("AlertsTab") super(AlertsTab, self).setupUi() self.font_group_box = QtGui.QGroupBox(self.left_column) self.font_group_box.setObjectName("font_group_box") self.font_layout = QtGui.QFormLayout(self.font_group_box) self.font_layout.setObjectName("font_layout") self.font_label = QtGui.QLabel(self.font_group_box) self.font_label.setObjectName("font_label") self.font_combo_box = QtGui.QFontComboBox(self.font_group_box) self.font_combo_box.setObjectName("font_combo_box") self.font_layout.addRow(self.font_label, self.font_combo_box) self.font_color_label = QtGui.QLabel(self.font_group_box) self.font_color_label.setObjectName("font_color_label") self.color_layout = QtGui.QHBoxLayout() self.color_layout.setObjectName("color_layout") self.font_color_button = ColorButton(self.font_group_box) self.font_color_button.setObjectName("font_color_button") self.color_layout.addWidget(self.font_color_button) self.color_layout.addSpacing(20) self.background_color_label = QtGui.QLabel(self.font_group_box) self.background_color_label.setObjectName("background_color_label") self.color_layout.addWidget(self.background_color_label) self.background_color_button = ColorButton(self.font_group_box) self.background_color_button.setObjectName("background_color_button") self.color_layout.addWidget(self.background_color_button) self.font_layout.addRow(self.font_color_label, self.color_layout) self.font_size_label = QtGui.QLabel(self.font_group_box) self.font_size_label.setObjectName("font_size_label") self.font_size_spin_box = QtGui.QSpinBox(self.font_group_box) self.font_size_spin_box.setObjectName("font_size_spin_box") self.font_layout.addRow(self.font_size_label, self.font_size_spin_box) self.timeout_label = QtGui.QLabel(self.font_group_box) self.timeout_label.setObjectName("timeout_label") self.timeout_spin_box = QtGui.QSpinBox(self.font_group_box) self.timeout_spin_box.setMaximum(180) self.timeout_spin_box.setObjectName("timeout_spin_box") self.font_layout.addRow(self.timeout_label, self.timeout_spin_box) self.vertical_label, self.vertical_combo_box = create_valign_selection_widgets(self.font_group_box) self.vertical_label.setObjectName("vertical_label") self.vertical_combo_box.setObjectName("vertical_combo_box") self.font_layout.addRow(self.vertical_label, self.vertical_combo_box) self.left_layout.addWidget(self.font_group_box) self.left_layout.addStretch() self.preview_group_box = QtGui.QGroupBox(self.right_column) self.preview_group_box.setObjectName("preview_group_box") self.preview_layout = QtGui.QVBoxLayout(self.preview_group_box) self.preview_layout.setObjectName("preview_layout") self.font_preview = QtGui.QLineEdit(self.preview_group_box) self.font_preview.setObjectName("font_preview") self.preview_layout.addWidget(self.font_preview) self.right_layout.addWidget(self.preview_group_box) self.right_layout.addStretch() # Signals and slots self.background_color_button.colorChanged.connect(self.on_background_color_changed) self.font_color_button.colorChanged.connect(self.on_font_color_changed) self.font_combo_box.activated.connect(self.on_font_combo_box_clicked) self.timeout_spin_box.valueChanged.connect(self.on_timeout_spin_box_changed) self.font_size_spin_box.valueChanged.connect(self.on_font_size_spin_box_changed)
def setupUi(self): self.setObjectName('AlertsTab') super(AlertsTab, self).setupUi() self.font_group_box = QtGui.QGroupBox(self.left_column) self.font_group_box.setObjectName('font_group_box') self.font_layout = QtGui.QFormLayout(self.font_group_box) self.font_layout.setObjectName('font_layout') self.font_label = QtGui.QLabel(self.font_group_box) self.font_label.setObjectName('font_label') self.font_combo_box = QtGui.QFontComboBox(self.font_group_box) self.font_combo_box.setObjectName('font_combo_box') self.font_layout.addRow(self.font_label, self.font_combo_box) self.font_color_label = QtGui.QLabel(self.font_group_box) self.font_color_label.setObjectName('font_color_label') self.color_layout = QtGui.QHBoxLayout() self.color_layout.setObjectName('color_layout') self.font_color_button = ColorButton(self.font_group_box) self.font_color_button.setObjectName('font_color_button') self.color_layout.addWidget(self.font_color_button) self.color_layout.addSpacing(20) self.background_color_label = QtGui.QLabel(self.font_group_box) self.background_color_label.setObjectName('background_color_label') self.color_layout.addWidget(self.background_color_label) self.background_color_button = ColorButton(self.font_group_box) self.background_color_button.setObjectName('background_color_button') self.color_layout.addWidget(self.background_color_button) self.font_layout.addRow(self.font_color_label, self.color_layout) self.font_size_label = QtGui.QLabel(self.font_group_box) self.font_size_label.setObjectName('font_size_label') self.font_size_spin_box = QtGui.QSpinBox(self.font_group_box) self.font_size_spin_box.setObjectName('font_size_spin_box') self.font_layout.addRow(self.font_size_label, self.font_size_spin_box) self.timeout_label = QtGui.QLabel(self.font_group_box) self.timeout_label.setObjectName('timeout_label') self.timeout_spin_box = QtGui.QSpinBox(self.font_group_box) self.timeout_spin_box.setMaximum(180) self.timeout_spin_box.setObjectName('timeout_spin_box') self.font_layout.addRow(self.timeout_label, self.timeout_spin_box) self.vertical_label, self.vertical_combo_box = create_valign_selection_widgets(self.font_group_box) self.vertical_label.setObjectName('vertical_label') self.vertical_combo_box.setObjectName('vertical_combo_box') self.font_layout.addRow(self.vertical_label, self.vertical_combo_box) self.left_layout.addWidget(self.font_group_box) self.left_layout.addStretch() self.preview_group_box = QtGui.QGroupBox(self.right_column) self.preview_group_box.setObjectName('preview_group_box') self.preview_layout = QtGui.QVBoxLayout(self.preview_group_box) self.preview_layout.setObjectName('preview_layout') self.font_preview = QtGui.QLineEdit(self.preview_group_box) self.font_preview.setObjectName('font_preview') self.preview_layout.addWidget(self.font_preview) self.right_layout.addWidget(self.preview_group_box) self.right_layout.addStretch() # Signals and slots self.background_color_button.colorChanged.connect(self.on_background_color_changed) self.font_color_button.colorChanged.connect(self.on_font_color_changed) self.font_combo_box.activated.connect(self.on_font_combo_box_clicked) self.timeout_spin_box.valueChanged.connect(self.on_timeout_spin_box_changed) self.font_size_spin_box.valueChanged.connect(self.on_font_size_spin_box_changed)
class ImageTab(SettingsTab): """ ImageTab is the images settings tab in the settings dialog. """ def __init__(self, parent, name, visible_title, icon_path): super(ImageTab, self).__init__(parent, name, visible_title, icon_path) def setupUi(self): self.setObjectName('ImagesTab') super(ImageTab, self).setupUi() self.background_color_group_box = QtGui.QGroupBox(self.left_column) self.background_color_group_box.setObjectName('background_color_group_box') self.form_layout = QtGui.QFormLayout(self.background_color_group_box) self.form_layout.setObjectName('form_layout') self.color_layout = QtGui.QHBoxLayout() self.background_color_label = QtGui.QLabel(self.background_color_group_box) self.background_color_label.setObjectName('background_color_label') self.color_layout.addWidget(self.background_color_label) self.background_color_button = ColorButton(self.background_color_group_box) self.background_color_button.setObjectName('background_color_button') self.color_layout.addWidget(self.background_color_button) self.form_layout.addRow(self.color_layout) self.information_label = QtGui.QLabel(self.background_color_group_box) self.information_label.setObjectName('information_label') self.information_label.setWordWrap(True) self.form_layout.addRow(self.information_label) self.left_layout.addWidget(self.background_color_group_box) self.left_layout.addStretch() self.right_column.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred) self.right_layout.addStretch() # Signals and slots self.background_color_button.colorChanged.connect(self.on_background_color_changed) def retranslateUi(self): self.background_color_group_box.setTitle(UiStrings().BackgroundColor) self.background_color_label.setText(UiStrings().DefaultColor) self.information_label.setText( translate('ImagesPlugin.ImageTab', 'Visible background for images with aspect ratio different to screen.')) def on_background_color_changed(self, color): self.background_color = color def load(self): settings = Settings() settings.beginGroup(self.settings_section) self.background_color = settings.value('background color') self.initial_color = self.background_color settings.endGroup() self.background_color_button.color = self.background_color def save(self): settings = Settings() settings.beginGroup(self.settings_section) settings.setValue('background color', self.background_color) settings.endGroup() if self.initial_color != self.background_color: self.settings_form.register_post_process('images_config_updated')
def setupUi(self): self.setObjectName('ImagesTab') super(ImageTab, self).setupUi() self.background_color_group_box = QtGui.QGroupBox(self.left_column) self.background_color_group_box.setObjectName('background_color_group_box') self.form_layout = QtGui.QFormLayout(self.background_color_group_box) self.form_layout.setObjectName('form_layout') self.color_layout = QtGui.QHBoxLayout() self.background_color_label = QtGui.QLabel(self.background_color_group_box) self.background_color_label.setObjectName('background_color_label') self.color_layout.addWidget(self.background_color_label) self.background_color_button = ColorButton(self.background_color_group_box) self.background_color_button.setObjectName('background_color_button') self.color_layout.addWidget(self.background_color_button) self.form_layout.addRow(self.color_layout) self.information_label = QtGui.QLabel(self.background_color_group_box) self.information_label.setObjectName('information_label') self.information_label.setWordWrap(True) self.form_layout.addRow(self.information_label) self.left_layout.addWidget(self.background_color_group_box) self.left_layout.addStretch() self.right_column.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred) self.right_layout.addStretch() # Signals and slots self.background_color_button.colorChanged.connect(self.on_background_color_changed)
class ImageTab(SettingsTab): """ ImageTab is the images settings tab in the settings dialog. """ def __init__(self, parent, name, visible_title, icon_path): super(ImageTab, self).__init__(parent, name, visible_title, icon_path) def setupUi(self): self.setObjectName('ImagesTab') super(ImageTab, self).setupUi() self.background_color_group_box = QtGui.QGroupBox(self.left_column) self.background_color_group_box.setObjectName( 'background_color_group_box') self.form_layout = QtGui.QFormLayout(self.background_color_group_box) self.form_layout.setObjectName('form_layout') self.color_layout = QtGui.QHBoxLayout() self.background_color_label = QtGui.QLabel( self.background_color_group_box) self.background_color_label.setObjectName('background_color_label') self.color_layout.addWidget(self.background_color_label) self.background_color_button = ColorButton( self.background_color_group_box) self.background_color_button.setObjectName('background_color_button') self.color_layout.addWidget(self.background_color_button) self.form_layout.addRow(self.color_layout) self.information_label = QtGui.QLabel(self.background_color_group_box) self.information_label.setObjectName('information_label') self.information_label.setWordWrap(True) self.form_layout.addRow(self.information_label) self.left_layout.addWidget(self.background_color_group_box) self.left_layout.addStretch() self.right_column.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred) self.right_layout.addStretch() # Signals and slots self.background_color_button.colorChanged.connect( self.on_background_color_changed) def retranslateUi(self): self.background_color_group_box.setTitle(UiStrings().BackgroundColor) self.background_color_label.setText(UiStrings().DefaultColor) self.information_label.setText( translate( 'ImagesPlugin.ImageTab', 'Visible background for images with aspect ratio different to screen.' )) def on_background_color_changed(self, color): self.background_color = color def load(self): settings = Settings() settings.beginGroup(self.settings_section) self.background_color = settings.value('background color') self.initial_color = self.background_color settings.endGroup() self.background_color_button.color = self.background_color def save(self): settings = Settings() settings.beginGroup(self.settings_section) settings.setValue('background color', self.background_color) settings.endGroup() if self.initial_color != self.background_color: self.settings_form.register_post_process('images_config_updated')
class AdvancedTab(SettingsTab): """ The :class:`AdvancedTab` manages the advanced settings tab including the UI and the loading and saving of the displayed settings. """ def __init__(self, parent): """ Initialise the settings tab """ self.default_image = ':/graphics/openlp-splash-screen.png' self.default_color = '#ffffff' self.data_exists = False self.icon_path = ':/system/system_settings.png' advanced_translated = translate('OpenLP.AdvancedTab', 'Advanced') super(AdvancedTab, self).__init__(parent, 'Advanced', advanced_translated) def setupUi(self): """ Configure the UI elements for the tab. """ self.setObjectName('AdvancedTab') super(AdvancedTab, self).setupUi() self.ui_group_box = QtGui.QGroupBox(self.left_column) self.ui_group_box.setObjectName('ui_group_box') self.ui_layout = QtGui.QFormLayout(self.ui_group_box) self.ui_layout.setObjectName('ui_layout') self.recent_label = QtGui.QLabel(self.ui_group_box) self.recent_label.setObjectName('recent_label') self.recent_spin_box = QtGui.QSpinBox(self.ui_group_box) self.recent_spin_box.setObjectName('recent_spin_box') self.recent_spin_box.setMinimum(0) self.ui_layout.addRow(self.recent_label, self.recent_spin_box) self.media_plugin_check_box = QtGui.QCheckBox(self.ui_group_box) self.media_plugin_check_box.setObjectName('media_plugin_check_box') self.ui_layout.addRow(self.media_plugin_check_box) self.double_click_live_check_box = QtGui.QCheckBox(self.ui_group_box) self.double_click_live_check_box.setObjectName('double_click_live_check_box') self.ui_layout.addRow(self.double_click_live_check_box) self.single_click_preview_check_box = QtGui.QCheckBox(self.ui_group_box) self.single_click_preview_check_box.setObjectName('single_click_preview_check_box') self.ui_layout.addRow(self.single_click_preview_check_box) self.expand_service_item_check_box = QtGui.QCheckBox(self.ui_group_box) self.expand_service_item_check_box.setObjectName('expand_service_item_check_box') self.ui_layout.addRow(self.expand_service_item_check_box) self.enable_auto_close_check_box = QtGui.QCheckBox(self.ui_group_box) self.enable_auto_close_check_box.setObjectName('enable_auto_close_check_box') self.ui_layout.addRow(self.enable_auto_close_check_box) self.left_layout.addWidget(self.ui_group_box) # Default service name self.service_name_group_box = QtGui.QGroupBox(self.left_column) self.service_name_group_box.setObjectName('service_name_group_box') self.service_name_layout = QtGui.QFormLayout(self.service_name_group_box) self.service_name_check_box = QtGui.QCheckBox(self.service_name_group_box) self.service_name_check_box.setObjectName('service_name_check_box') self.service_name_layout.setObjectName('service_name_layout') self.service_name_layout.addRow(self.service_name_check_box) self.service_name_time_label = QtGui.QLabel(self.service_name_group_box) self.service_name_time_label.setObjectName('service_name_time_label') self.service_name_day = QtGui.QComboBox(self.service_name_group_box) self.service_name_day.addItems(['', '', '', '', '', '', '', '']) self.service_name_day.setObjectName('service_name_day') self.service_name_time = QtGui.QTimeEdit(self.service_name_group_box) self.service_name_time.setObjectName('service_name_time') self.service_name_time_layout = QtGui.QHBoxLayout() self.service_name_time_layout.setObjectName('service_name_time_layout') self.service_name_time_layout.addWidget(self.service_name_day) self.service_name_time_layout.addWidget(self.service_name_time) self.service_name_layout.addRow(self.service_name_time_label, self.service_name_time_layout) self.service_name_label = QtGui.QLabel(self.service_name_group_box) self.service_name_label.setObjectName('service_name_label') self.service_name_edit = QtGui.QLineEdit(self.service_name_group_box) self.service_name_edit.setObjectName('service_name_edit') self.service_name_edit.setValidator(QtGui.QRegExpValidator(QtCore.QRegExp(r'[^/\\?*|<>\[\]":+]+'), self)) self.service_name_revert_button = QtGui.QToolButton(self.service_name_group_box) self.service_name_revert_button.setObjectName('service_name_revert_button') self.service_name_revert_button.setIcon(build_icon(':/general/general_revert.png')) self.service_name_button_layout = QtGui.QHBoxLayout() self.service_name_button_layout.setObjectName('service_name_button_layout') self.service_name_button_layout.addWidget(self.service_name_edit) self.service_name_button_layout.addWidget(self.service_name_revert_button) self.service_name_layout.addRow(self.service_name_label, self.service_name_button_layout) self.service_name_example_label = QtGui.QLabel(self.service_name_group_box) self.service_name_example_label.setObjectName('service_name_example_label') self.service_name_example = QtGui.QLabel(self.service_name_group_box) self.service_name_example.setObjectName('service_name_example') self.service_name_layout.addRow(self.service_name_example_label, self.service_name_example) self.left_layout.addWidget(self.service_name_group_box) # Data Directory self.data_directory_group_box = QtGui.QGroupBox(self.left_column) self.data_directory_group_box.setObjectName('data_directory_group_box') self.data_directory_layout = QtGui.QFormLayout(self.data_directory_group_box) self.data_directory_layout.setObjectName('data_directory_layout') self.data_directory_current_label = QtGui.QLabel(self.data_directory_group_box) self.data_directory_current_label.setObjectName('data_directory_current_label') self.data_directory_label = QtGui.QLabel(self.data_directory_group_box) self.data_directory_label.setObjectName('data_directory_label') self.data_directory_new_label = QtGui.QLabel(self.data_directory_group_box) self.data_directory_new_label.setObjectName('data_directory_current_label') self.new_data_directory_edit = QtGui.QLineEdit(self.data_directory_group_box) self.new_data_directory_edit.setObjectName('new_data_directory_edit') self.new_data_directory_edit.setReadOnly(True) self.new_data_directory_has_files_label = QtGui.QLabel(self.data_directory_group_box) self.new_data_directory_has_files_label.setObjectName('new_data_directory_has_files_label') self.new_data_directory_has_files_label.setWordWrap(True) self.data_directory_browse_button = QtGui.QToolButton(self.data_directory_group_box) self.data_directory_browse_button.setObjectName('data_directory_browse_button') self.data_directory_browse_button.setIcon(build_icon(':/general/general_open.png')) self.data_directory_default_button = QtGui.QToolButton(self.data_directory_group_box) self.data_directory_default_button.setObjectName('data_directory_default_button') self.data_directory_default_button.setIcon(build_icon(':/general/general_revert.png')) self.data_directory_cancel_button = QtGui.QToolButton(self.data_directory_group_box) self.data_directory_cancel_button.setObjectName('data_directory_cancel_button') self.data_directory_cancel_button.setIcon(build_icon(':/general/general_delete.png')) self.new_data_directory_label_layout = QtGui.QHBoxLayout() self.new_data_directory_label_layout.setObjectName('new_data_directory_label_layout') self.new_data_directory_label_layout.addWidget(self.new_data_directory_edit) self.new_data_directory_label_layout.addWidget(self.data_directory_browse_button) self.new_data_directory_label_layout.addWidget(self.data_directory_default_button) self.data_directory_copy_check_layout = QtGui.QHBoxLayout() self.data_directory_copy_check_layout.setObjectName('data_directory_copy_check_layout') self.data_directory_copy_check_box = QtGui.QCheckBox(self.data_directory_group_box) self.data_directory_copy_check_box.setObjectName('data_directory_copy_check_box') self.data_directory_copy_check_layout.addWidget(self.data_directory_copy_check_box) self.data_directory_copy_check_layout.addStretch() self.data_directory_copy_check_layout.addWidget(self.data_directory_cancel_button) self.data_directory_layout.addRow(self.data_directory_current_label, self.data_directory_label) self.data_directory_layout.addRow(self.data_directory_new_label, self.new_data_directory_label_layout) self.data_directory_layout.addRow(self.data_directory_copy_check_layout) self.data_directory_layout.addRow(self.new_data_directory_has_files_label) self.left_layout.addWidget(self.data_directory_group_box) self.left_layout.addStretch() # Default Image self.default_image_group_box = QtGui.QGroupBox(self.right_column) self.default_image_group_box.setObjectName('default_image_group_box') self.default_image_layout = QtGui.QFormLayout(self.default_image_group_box) self.default_image_layout.setObjectName('default_image_layout') self.default_color_label = QtGui.QLabel(self.default_image_group_box) self.default_color_label.setObjectName('default_color_label') self.default_color_button = ColorButton(self.default_image_group_box) self.default_color_button.setObjectName('default_color_button') self.default_image_layout.addRow(self.default_color_label, self.default_color_button) self.default_file_label = QtGui.QLabel(self.default_image_group_box) self.default_file_label.setObjectName('default_file_label') self.default_file_edit = QtGui.QLineEdit(self.default_image_group_box) self.default_file_edit.setObjectName('default_file_edit') self.default_browse_button = QtGui.QToolButton(self.default_image_group_box) self.default_browse_button.setObjectName('default_browse_button') self.default_browse_button.setIcon(build_icon(':/general/general_open.png')) self.default_revert_button = QtGui.QToolButton(self.default_image_group_box) self.default_revert_button.setObjectName('default_revert_button') self.default_revert_button.setIcon(build_icon(':/general/general_revert.png')) self.default_file_layout = QtGui.QHBoxLayout() self.default_file_layout.setObjectName('default_file_layout') self.default_file_layout.addWidget(self.default_file_edit) self.default_file_layout.addWidget(self.default_browse_button) self.default_file_layout.addWidget(self.default_revert_button) self.default_image_layout.addRow(self.default_file_label, self.default_file_layout) self.right_layout.addWidget(self.default_image_group_box) # Hide mouse self.hide_mouse_group_box = QtGui.QGroupBox(self.right_column) self.hide_mouse_group_box.setObjectName('hide_mouse_group_box') self.hide_mouse_layout = QtGui.QVBoxLayout(self.hide_mouse_group_box) self.hide_mouse_layout.setObjectName('hide_mouse_layout') self.hide_mouse_check_box = QtGui.QCheckBox(self.hide_mouse_group_box) self.hide_mouse_check_box.setObjectName('hide_mouse_check_box') self.hide_mouse_layout.addWidget(self.hide_mouse_check_box) self.right_layout.addWidget(self.hide_mouse_group_box) # Service Item Slide Limits self.slide_group_box = QtGui.QGroupBox(self.right_column) self.slide_group_box.setObjectName('slide_group_box') self.slide_layout = QtGui.QVBoxLayout(self.slide_group_box) self.slide_layout.setObjectName('slide_layout') self.slide_label = QtGui.QLabel(self.slide_group_box) self.slide_label.setWordWrap(True) self.slide_layout.addWidget(self.slide_label) self.end_slide_radio_button = QtGui.QRadioButton(self.slide_group_box) self.end_slide_radio_button.setObjectName('end_slide_radio_button') self.slide_layout.addWidget(self.end_slide_radio_button) self.wrap_slide_radio_button = QtGui.QRadioButton(self.slide_group_box) self.wrap_slide_radio_button.setObjectName('wrap_slide_radio_button') self.slide_layout.addWidget(self.wrap_slide_radio_button) self.next_item_radio_button = QtGui.QRadioButton(self.slide_group_box) self.next_item_radio_button.setObjectName('next_item_radio_button') self.slide_layout.addWidget(self.next_item_radio_button) self.right_layout.addWidget(self.slide_group_box) # Display Workarounds self.display_workaround_group_box = QtGui.QGroupBox(self.left_column) self.display_workaround_group_box.setObjectName('display_workaround_group_box') self.display_workaround_layout = QtGui.QVBoxLayout(self.display_workaround_group_box) self.display_workaround_layout.setObjectName('display_workaround_layout') self.x11_bypass_check_box = QtGui.QCheckBox(self.display_workaround_group_box) self.x11_bypass_check_box.setObjectName('x11_bypass_check_box') self.display_workaround_layout.addWidget(self.x11_bypass_check_box) self.alternate_rows_check_box = QtGui.QCheckBox(self.display_workaround_group_box) self.alternate_rows_check_box.setObjectName('alternate_rows_check_box') self.display_workaround_layout.addWidget(self.alternate_rows_check_box) self.right_layout.addWidget(self.display_workaround_group_box) self.right_layout.addStretch() self.should_update_service_name_example = False self.service_name_check_box.toggled.connect(self.service_name_check_box_toggled) self.service_name_day.currentIndexChanged.connect(self.on_service_name_day_changed) self.service_name_time.timeChanged.connect(self.update_service_name_example) self.service_name_edit.textChanged.connect(self.update_service_name_example) self.service_name_revert_button.clicked.connect(self.on_service_name_revert_button_clicked) self.default_color_button.colorChanged.connect(self.on_background_color_changed) self.default_browse_button.clicked.connect(self.on_default_browse_button_clicked) self.default_revert_button.clicked.connect(self.on_default_revert_button_clicked) self.alternate_rows_check_box.toggled.connect(self.on_alternate_rows_check_box_toggled) self.data_directory_browse_button.clicked.connect(self.on_data_directory_browse_button_clicked) self.data_directory_default_button.clicked.connect(self.on_data_directory_default_button_clicked) self.data_directory_cancel_button.clicked.connect(self.on_data_directory_cancel_button_clicked) self.data_directory_copy_check_box.toggled.connect(self.on_data_directory_copy_check_box_toggled) self.end_slide_radio_button.clicked.connect(self.on_end_slide_button_clicked) self.wrap_slide_radio_button.clicked.connect(self.on_wrap_slide_button_clicked) self.next_item_radio_button.clicked.connect(self.on_next_item_button_clicked) def retranslateUi(self): """ Setup the interface translation strings. """ self.tab_title_visible = UiStrings().Advanced self.ui_group_box.setTitle(translate('OpenLP.AdvancedTab', 'UI Settings')) self.data_directory_group_box.setTitle(translate('OpenLP.AdvancedTab', 'Data Location')) self.recent_label.setText(translate('OpenLP.AdvancedTab', 'Number of recent files to display:')) self.media_plugin_check_box.setText(translate('OpenLP.AdvancedTab', 'Remember active media manager tab on startup')) self.double_click_live_check_box.setText(translate('OpenLP.AdvancedTab', 'Double-click to send items straight to live')) self.single_click_preview_check_box.setText(translate('OpenLP.AdvancedTab', 'Preview items when clicked in Media Manager')) self.expand_service_item_check_box.setText(translate('OpenLP.AdvancedTab', 'Expand new service items on creation')) self.enable_auto_close_check_box.setText(translate('OpenLP.AdvancedTab', 'Enable application exit confirmation')) self.service_name_group_box.setTitle(translate('OpenLP.AdvancedTab', 'Default Service Name')) self.service_name_check_box.setText(translate('OpenLP.AdvancedTab', 'Enable default service name')) self.service_name_time_label.setText(translate('OpenLP.AdvancedTab', 'Date and Time:')) self.service_name_day.setItemText(0, translate('OpenLP.AdvancedTab', 'Monday')) self.service_name_day.setItemText(1, translate('OpenLP.AdvancedTab', 'Tuesday')) self.service_name_day.setItemText(2, translate('OpenLP.AdvancedTab', 'Wednesday')) self.service_name_day.setItemText(3, translate('OpenLP.AdvancedTab', 'Thursday')) self.service_name_day.setItemText(4, translate('OpenLP.AdvancedTab', 'Friday')) self.service_name_day.setItemText(5, translate('OpenLP.AdvancedTab', 'Saturday')) self.service_name_day.setItemText(6, translate('OpenLP.AdvancedTab', 'Sunday')) self.service_name_day.setItemText(7, translate('OpenLP.AdvancedTab', 'Now')) self.service_name_time.setToolTip(translate('OpenLP.AdvancedTab', 'Time when usual service starts.')) self.service_name_label.setText(translate('OpenLP.AdvancedTab', 'Name:')) self.service_name_edit.setToolTip(translate('OpenLP.AdvancedTab', 'Consult the OpenLP manual for usage.')) self.service_name_revert_button.setToolTip( translate('OpenLP.AdvancedTab', 'Revert to the default service name "%s".') % UiStrings().DefaultServiceName) self.service_name_example_label.setText(translate('OpenLP.AdvancedTab', 'Example:')) self.hide_mouse_group_box.setTitle(translate('OpenLP.AdvancedTab', 'Mouse Cursor')) self.hide_mouse_check_box.setText(translate('OpenLP.AdvancedTab', 'Hide mouse cursor when over display window')) self.default_image_group_box.setTitle(translate('OpenLP.AdvancedTab', 'Default Image')) self.default_color_label.setText(translate('OpenLP.AdvancedTab', 'Background color:')) self.default_file_label.setText(translate('OpenLP.AdvancedTab', 'Image file:')) self.default_browse_button.setToolTip(translate('OpenLP.AdvancedTab', 'Browse for an image file to display.')) self.default_revert_button.setToolTip(translate('OpenLP.AdvancedTab', 'Revert to the default OpenLP logo.')) self.data_directory_current_label.setText(translate('OpenLP.AdvancedTab', 'Current path:')) self.data_directory_new_label.setText(translate('OpenLP.AdvancedTab', 'Custom path:')) self.data_directory_browse_button.setToolTip(translate('OpenLP.AdvancedTab', 'Browse for new data file location.')) self.data_directory_default_button.setToolTip( translate('OpenLP.AdvancedTab', 'Set the data location to the default.')) self.data_directory_cancel_button.setText(translate('OpenLP.AdvancedTab', 'Cancel')) self.data_directory_cancel_button.setToolTip( translate('OpenLP.AdvancedTab', 'Cancel OpenLP data directory location change.')) self.data_directory_copy_check_box.setText(translate('OpenLP.AdvancedTab', 'Copy data to new location.')) self.data_directory_copy_check_box.setToolTip(translate( 'OpenLP.AdvancedTab', 'Copy the OpenLP data files to the new location.')) self.new_data_directory_has_files_label.setText( translate('OpenLP.AdvancedTab', '<strong>WARNING:</strong> New data directory location contains ' 'OpenLP data files. These files WILL be replaced during a copy.')) self.display_workaround_group_box.setTitle(translate('OpenLP.AdvancedTab', 'Display Workarounds')) self.x11_bypass_check_box.setText(translate('OpenLP.AdvancedTab', 'Bypass X11 Window Manager')) self.alternate_rows_check_box.setText(translate('OpenLP.AdvancedTab', 'Use alternating row colours in lists')) # Slide Limits self.slide_group_box.setTitle(translate('OpenLP.GeneralTab', 'Service Item Slide Limits')) self.slide_label.setText(translate('OpenLP.GeneralTab', 'Behavior of next/previous on the last/first slide:')) self.end_slide_radio_button.setText(translate('OpenLP.GeneralTab', '&Remain on Slide')) self.wrap_slide_radio_button.setText(translate('OpenLP.GeneralTab', '&Wrap around')) self.next_item_radio_button.setText(translate('OpenLP.GeneralTab', '&Move to next/previous service item')) def load(self): """ Load settings from disk. """ settings = Settings() settings.beginGroup(self.settings_section) # The max recent files value does not have an interface and so never # gets actually stored in the settings therefore the default value of # 20 will always be used. self.recent_spin_box.setMaximum(settings.value('max recent files')) self.recent_spin_box.setValue(settings.value('recent file count')) self.media_plugin_check_box.setChecked(settings.value('save current plugin')) self.double_click_live_check_box.setChecked(settings.value('double click live')) self.single_click_preview_check_box.setChecked(settings.value('single click preview')) self.expand_service_item_check_box.setChecked(settings.value('expand service item')) self.enable_auto_close_check_box.setChecked(settings.value('enable exit confirmation')) self.hide_mouse_check_box.setChecked(settings.value('hide mouse')) self.service_name_day.setCurrentIndex(settings.value('default service day')) self.service_name_time.setTime(QtCore.QTime(settings.value('default service hour'), settings.value('default service minute'))) self.should_update_service_name_example = True self.service_name_edit.setText(settings.value('default service name')) default_service_enabled = settings.value('default service enabled') self.service_name_check_box.setChecked(default_service_enabled) self.service_name_check_box_toggled(default_service_enabled) self.x11_bypass_check_box.setChecked(settings.value('x11 bypass wm')) self.default_color = settings.value('default color') self.default_file_edit.setText(settings.value('default image')) self.slide_limits = settings.value('slide limits') # Prevent the dialog displayed by the alternate_rows_check_box to display. self.alternate_rows_check_box.blockSignals(True) self.alternate_rows_check_box.setChecked(settings.value('alternate rows')) self.alternate_rows_check_box.blockSignals(False) if self.slide_limits == SlideLimits.End: self.end_slide_radio_button.setChecked(True) elif self.slide_limits == SlideLimits.Wrap: self.wrap_slide_radio_button.setChecked(True) else: self.next_item_radio_button.setChecked(True) settings.endGroup() self.data_directory_copy_check_box.hide() self.new_data_directory_has_files_label.hide() self.data_directory_cancel_button.hide() # Since data location can be changed, make sure the path is present. self.current_data_path = AppLocation.get_data_path() if not os.path.exists(self.current_data_path): log.error('Data path not found %s' % self.current_data_path) answer = QtGui.QMessageBox.critical( self, translate('OpenLP.AdvancedTab', 'Data Directory Error'), translate('OpenLP.AdvancedTab', 'OpenLP data directory was not found\n\n%s\n\n' 'This data directory was previously changed from the OpenLP ' 'default location. If the new location was on removable ' 'media, that media needs to be made available.\n\n' 'Click "No" to stop loading OpenLP. allowing you to fix the the problem.\n\n' 'Click "Yes" to reset the data directory to the default ' 'location.').replace('%s', self.current_data_path), QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes | QtGui.QMessageBox.No), QtGui.QMessageBox.No) if answer == QtGui.QMessageBox.No: log.info('User requested termination') self.main_window.clean_up() sys.exit() # Set data location to default. settings.remove('advanced/data path') self.current_data_path = AppLocation.get_data_path() log.warning('User requested data path set to default %s' % self.current_data_path) self.data_directory_label.setText(os.path.abspath(self.current_data_path)) self.default_color_button.color = self.default_color # Don't allow data directory move if running portable. if settings.value('advanced/is portable'): self.data_directory_group_box.hide() def save(self): """ Save settings to disk. """ settings = Settings() settings.beginGroup(self.settings_section) settings.setValue('default service enabled', self.service_name_check_box.isChecked()) service_name = self.service_name_edit.text() preset_is_valid = self.generate_service_name_example()[0] if service_name == UiStrings().DefaultServiceName or not preset_is_valid: settings.remove('default service name') self.service_name_edit.setText(service_name) else: settings.setValue('default service name', service_name) settings.setValue('default service day', self.service_name_day.currentIndex()) settings.setValue('default service hour', self.service_name_time.time().hour()) settings.setValue('default service minute', self.service_name_time.time().minute()) settings.setValue('recent file count', self.recent_spin_box.value()) settings.setValue('save current plugin', self.media_plugin_check_box.isChecked()) settings.setValue('double click live', self.double_click_live_check_box.isChecked()) settings.setValue('single click preview', self.single_click_preview_check_box.isChecked()) settings.setValue('expand service item', self.expand_service_item_check_box.isChecked()) settings.setValue('enable exit confirmation', self.enable_auto_close_check_box.isChecked()) settings.setValue('hide mouse', self.hide_mouse_check_box.isChecked()) settings.setValue('alternate rows', self.alternate_rows_check_box.isChecked()) settings.setValue('default color', self.default_color) settings.setValue('default image', self.default_file_edit.text()) settings.setValue('slide limits', self.slide_limits) if self.x11_bypass_check_box.isChecked() != settings.value('x11 bypass wm'): settings.setValue('x11 bypass wm', self.x11_bypass_check_box.isChecked()) self.settings_form.register_post_process('config_screen_changed') self.settings_form.register_post_process('slidecontroller_update_slide_limits') settings.endGroup() def cancel(self): """ Dialogue was cancelled, remove any pending data path change. """ self.on_data_directory_cancel_button_clicked() SettingsTab.cancel(self) def service_name_check_box_toggled(self, default_service_enabled): """ Service Name options changed """ self.service_name_day.setEnabled(default_service_enabled) time_enabled = default_service_enabled and self.service_name_day.currentIndex() is not 7 self.service_name_time.setEnabled(time_enabled) self.service_name_edit.setEnabled(default_service_enabled) self.service_name_revert_button.setEnabled(default_service_enabled) def generate_service_name_example(self): """ Display an example of the template used """ preset_is_valid = True if self.service_name_day.currentIndex() == 7: local_time = datetime.now() else: now = datetime.now() day_delta = self.service_name_day.currentIndex() - now.weekday() if day_delta < 0: day_delta += 7 time = now + timedelta(days=day_delta) local_time = time.replace( hour=self.service_name_time.time().hour(), minute=self.service_name_time.time().minute() ) try: service_name_example = format_time(str(self.service_name_edit.text()), local_time) except ValueError: preset_is_valid = False service_name_example = translate('OpenLP.AdvancedTab', 'Syntax error.') return preset_is_valid, service_name_example def update_service_name_example(self, returned_value): """ Update the example service name. """ if not self.should_update_service_name_example: return name_example = self.generate_service_name_example()[1] self.service_name_example.setText(name_example) def on_service_name_day_changed(self, service_day): """ React to the day of the service name changing. """ self.service_name_time.setEnabled(service_day is not 7) self.update_service_name_example(None) def on_service_name_revert_button_clicked(self): """ Revert to the default service name. """ self.service_name_edit.setText(UiStrings().DefaultServiceName) self.service_name_edit.setFocus() def on_background_color_changed(self, color): """ Select the background colour of the default display screen. """ self.default_color = color def on_default_browse_button_clicked(self): """ Select an image for the default display screen. """ file_filters = '%s;;%s (*.*)' % (get_images_filter(), UiStrings().AllFiles) filename = QtGui.QFileDialog.getOpenFileName(self, translate('OpenLP.AdvancedTab', 'Open File'), '', file_filters) if filename: self.default_file_edit.setText(filename) self.default_file_edit.setFocus() def on_data_directory_browse_button_clicked(self): """ Browse for a new data directory location. """ old_root_path = str(self.data_directory_label.text()) # Get the new directory location. new_data_path = QtGui.QFileDialog.getExistingDirectory(self, translate('OpenLP.AdvancedTab', 'Select Data Directory Location'), old_root_path, options=QtGui.QFileDialog.ShowDirsOnly) # Set the new data path. if new_data_path: new_data_path = os.path.normpath(new_data_path) if self.current_data_path.lower() == new_data_path.lower(): self.on_data_directory_cancel_button_clicked() return else: return # Make sure they want to change the data. answer = QtGui.QMessageBox.question(self, translate('OpenLP.AdvancedTab', 'Confirm Data Directory Change'), translate('OpenLP.AdvancedTab', 'Are you sure you want to change the ' 'location of the OpenLP data directory to:\n\n%s\n\nThe data ' 'directory will be changed when OpenLP is closed.'). replace('%s', new_data_path), QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes | QtGui.QMessageBox.No), QtGui.QMessageBox.No) if answer != QtGui.QMessageBox.Yes: return # Check if data already exists here. self.check_data_overwrite(new_data_path) # Save the new location. self.main_window.set_new_data_path(new_data_path) self.new_data_directory_edit.setText(new_data_path) self.data_directory_cancel_button.show() def on_data_directory_default_button_clicked(self): """ Re-set the data directory location to the 'default' location. """ new_data_path = AppLocation.get_directory(AppLocation.DataDir) if self.current_data_path.lower() != new_data_path.lower(): # Make sure they want to change the data location back to the # default. answer = QtGui.QMessageBox.question(self, translate('OpenLP.AdvancedTab', 'Reset Data Directory'), translate('OpenLP.AdvancedTab', 'Are you sure you want to change the ' 'location of the OpenLP data directory to the default ' 'location?\n\nThis location will be used after OpenLP is ' 'closed.'), QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes | QtGui.QMessageBox.No), QtGui.QMessageBox.No) if answer != QtGui.QMessageBox.Yes: return self.check_data_overwrite(new_data_path) # Save the new location. self.main_window.set_new_data_path(new_data_path) self.new_data_directory_edit.setText(os.path.abspath(new_data_path)) self.data_directory_cancel_button.show() else: # We cancel the change in case user changed their mind. self.on_data_directory_cancel_button_clicked() def on_data_directory_copy_check_box_toggled(self): """ Copy existing data when you change your data directory. """ self.main_window.set_copy_data(self.data_directory_copy_check_box.isChecked()) if self.data_exists: if self.data_directory_copy_check_box.isChecked(): self.new_data_directory_has_files_label.show() else: self.new_data_directory_has_files_label.hide() def check_data_overwrite(self, data_path): """ Check if there's already data in the target directory. """ test_path = os.path.join(data_path, 'songs') self.data_directory_copy_check_box.show() if os.path.exists(test_path): self.data_exists = True # Check is they want to replace existing data. answer = QtGui.QMessageBox.warning(self, translate('OpenLP.AdvancedTab', 'Overwrite Existing Data'), translate('OpenLP.AdvancedTab', 'WARNING: \n\nThe location you have selected \n\n%s\n\n' 'appears to contain OpenLP data files. Do you wish to ' 'replace these files with the current data files?'). replace('%s', os.path.abspath(data_path,)), QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes | QtGui.QMessageBox.No), QtGui.QMessageBox.No) if answer == QtGui.QMessageBox.Yes: self.data_directory_copy_check_box.setChecked(True) self.new_data_directory_has_files_label.show() else: self.data_directory_copy_check_box.setChecked(False) self.new_data_directory_has_files_label.hide() else: self.data_exists = False self.data_directory_copy_check_box.setChecked(True) self.new_data_directory_has_files_label.hide() def on_data_directory_cancel_button_clicked(self): """ Cancel the data directory location change """ self.new_data_directory_edit.clear() self.data_directory_copy_check_box.setChecked(False) self.main_window.set_new_data_path(None) self.main_window.set_copy_data(False) self.data_directory_copy_check_box.hide() self.data_directory_cancel_button.hide() self.new_data_directory_has_files_label.hide() def on_default_revert_button_clicked(self): """ Revert the default screen back to the default settings. """ self.default_file_edit.setText(':/graphics/openlp-splash-screen.png') self.default_file_edit.setFocus() def on_alternate_rows_check_box_toggled(self, checked): """ Notify user about required restart. :param checked: The state of the check box (boolean). """ QtGui.QMessageBox.information(self, translate('OpenLP.AdvancedTab', 'Restart Required'), translate('OpenLP.AdvancedTab', 'This change will only take effect once OpenLP ' 'has been restarted.')) def on_end_slide_button_clicked(self): """ Stop at the end either top ot bottom """ self.slide_limits = SlideLimits.End def on_wrap_slide_button_clicked(self): """ Wrap round the service item """ self.slide_limits = SlideLimits.Wrap def on_next_item_button_clicked(self): """ Advance to the next service item """ self.slide_limits = SlideLimits.Next
class Ui_ThemeWizard(object): """ The Create/Edit theme wizard """ def setupUi(self, theme_wizard): """ Set up the UI """ 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 is_macosx(): theme_wizard.setPixmap(QtGui.QWizard.BackgroundPixmap, QtGui.QPixmap(':/wizards/openlp-osx-wizard.png')) theme_wizard.resize(646, 400) else: theme_wizard.setWizardStyle(QtGui.QWizard.ModernStyle) self.spacer = QtGui.QSpacerItem(10, 0, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Minimum) # Welcome Page add_welcome_page(theme_wizard, ':/wizards/wizard_createtheme.bmp') # Background Page self.background_page = QtGui.QWizardPage() self.background_page.setObjectName('background_page') self.background_layout = QtGui.QVBoxLayout(self.background_page) self.background_layout.setObjectName('background_layout') self.background_type_layout = QtGui.QFormLayout() self.background_type_layout.setObjectName('background_type_layout') self.background_label = QtGui.QLabel(self.background_page) self.background_label.setObjectName('background_label') self.background_combo_box = QtGui.QComboBox(self.background_page) self.background_combo_box.addItems(['', '', '', '']) self.background_combo_box.setObjectName('background_combo_box') self.background_type_layout.addRow(self.background_label, self.background_combo_box) self.background_type_layout.setItem(1, QtGui.QFormLayout.LabelRole, self.spacer) self.background_layout.addLayout(self.background_type_layout) self.background_stack = QtGui.QStackedLayout() self.background_stack.setObjectName('background_stack') self.color_widget = QtGui.QWidget(self.background_page) self.color_widget.setObjectName('color_widget') self.color_layout = QtGui.QFormLayout(self.color_widget) self.color_layout.setMargin(0) self.color_layout.setObjectName('color_layout') self.color_label = QtGui.QLabel(self.color_widget) self.color_label.setObjectName('color_label') self.color_button = ColorButton(self.color_widget) self.color_button.setObjectName('color_button') self.color_layout.addRow(self.color_label, self.color_button) self.color_layout.setItem(1, QtGui.QFormLayout.LabelRole, self.spacer) self.background_stack.addWidget(self.color_widget) self.gradient_widget = QtGui.QWidget(self.background_page) self.gradient_widget.setObjectName('Gradient_widget') self.gradient_layout = QtGui.QFormLayout(self.gradient_widget) self.gradient_layout.setMargin(0) self.gradient_layout.setObjectName('gradient_layout') self.gradient_start_label = QtGui.QLabel(self.gradient_widget) self.gradient_start_label.setObjectName('gradient_start_label') self.gradient_start_button = ColorButton(self.gradient_widget) self.gradient_start_button.setObjectName('gradient_start_button') self.gradient_layout.addRow(self.gradient_start_label, self.gradient_start_button) self.gradient_end_label = QtGui.QLabel(self.gradient_widget) self.gradient_end_label.setObjectName('gradient_end_label') self.gradient_end_button = ColorButton(self.gradient_widget) self.gradient_end_button.setObjectName('gradient_end_button') self.gradient_layout.addRow(self.gradient_end_label, self.gradient_end_button) self.gradient_type_label = QtGui.QLabel(self.gradient_widget) self.gradient_type_label.setObjectName('Gradient_type_label') self.gradient_combo_box = QtGui.QComboBox(self.gradient_widget) self.gradient_combo_box.setObjectName('gradient_combo_box') self.gradient_combo_box.addItems(['', '', '', '', '']) self.gradient_layout.addRow(self.gradient_type_label, self.gradient_combo_box) self.gradient_layout.setItem(3, QtGui.QFormLayout.LabelRole, self.spacer) self.background_stack.addWidget(self.gradient_widget) self.image_widget = QtGui.QWidget(self.background_page) self.image_widget.setObjectName('image_widget') self.image_layout = QtGui.QFormLayout(self.image_widget) self.image_layout.setMargin(0) self.image_layout.setObjectName('image_layout') self.image_color_label = QtGui.QLabel(self.color_widget) self.image_color_label.setObjectName('image_color_label') self.image_color_button = ColorButton(self.color_widget) self.image_color_button.setObjectName('image_color_button') self.image_layout.addRow(self.image_color_label, self.image_color_button) self.image_label = QtGui.QLabel(self.image_widget) self.image_label.setObjectName('image_label') self.image_file_layout = QtGui.QHBoxLayout() self.image_file_layout.setObjectName('image_file_layout') self.image_file_edit = QtGui.QLineEdit(self.image_widget) self.image_file_edit.setObjectName('image_file_edit') self.image_file_layout.addWidget(self.image_file_edit) self.image_browse_button = QtGui.QToolButton(self.image_widget) self.image_browse_button.setObjectName('image_browse_button') self.image_browse_button.setIcon(build_icon(':/general/general_open.png')) self.image_file_layout.addWidget(self.image_browse_button) self.image_layout.addRow(self.image_label, self.image_file_layout) self.image_layout.setItem(2, QtGui.QFormLayout.LabelRole, self.spacer) self.background_stack.addWidget(self.image_widget) self.transparent_widget = QtGui.QWidget(self.background_page) self.transparent_widget.setObjectName('TransparentWidget') self.transparent_layout = QtGui.QFormLayout(self.transparent_widget) self.transparent_layout.setMargin(0) self.transparent_layout.setObjectName('Transparent_layout') self.background_stack.addWidget(self.transparent_widget) self.background_layout.addLayout(self.background_stack) theme_wizard.addPage(self.background_page) # Main Area Page self.main_area_page = QtGui.QWizardPage() self.main_area_page.setObjectName('main_area_page') self.main_area_layout = QtGui.QFormLayout(self.main_area_page) self.main_area_layout.setObjectName('main_area_layout') self.main_font_label = QtGui.QLabel(self.main_area_page) self.main_font_label.setObjectName('main_font_label') self.main_font_combo_box = QtGui.QFontComboBox(self.main_area_page) self.main_font_combo_box.setObjectName('main_font_combo_box') self.main_area_layout.addRow(self.main_font_label, self.main_font_combo_box) self.main_color_label = QtGui.QLabel(self.main_area_page) self.main_color_label.setObjectName('main_color_label') self.main_properties_layout = QtGui.QHBoxLayout() self.main_properties_layout.setObjectName('main_properties_layout') self.main_color_button = ColorButton(self.main_area_page) self.main_color_button.setObjectName('main_color_button') self.main_properties_layout.addWidget(self.main_color_button) self.main_properties_layout.addSpacing(20) self.main_bold_check_box = QtGui.QCheckBox(self.main_area_page) self.main_bold_check_box.setObjectName('main_bold_check_box') self.main_properties_layout.addWidget(self.main_bold_check_box) self.main_properties_layout.addSpacing(20) self.main_italics_check_box = QtGui.QCheckBox(self.main_area_page) self.main_italics_check_box.setObjectName('MainItalicsCheckBox') self.main_properties_layout.addWidget(self.main_italics_check_box) self.main_area_layout.addRow(self.main_color_label, self.main_properties_layout) self.main_size_label = QtGui.QLabel(self.main_area_page) self.main_size_label.setObjectName('main_size_label') self.main_size_layout = QtGui.QHBoxLayout() self.main_size_layout.setObjectName('main_size_layout') self.main_size_spin_box = QtGui.QSpinBox(self.main_area_page) self.main_size_spin_box.setMaximum(999) self.main_size_spin_box.setValue(16) self.main_size_spin_box.setObjectName('main_size_spin_box') self.main_size_layout.addWidget(self.main_size_spin_box) self.main_line_count_label = QtGui.QLabel(self.main_area_page) self.main_line_count_label.setObjectName('main_line_count_label') self.main_size_layout.addWidget(self.main_line_count_label) self.main_area_layout.addRow(self.main_size_label, self.main_size_layout) self.line_spacing_label = QtGui.QLabel(self.main_area_page) self.line_spacing_label.setObjectName('line_spacing_label') self.line_spacing_spin_box = QtGui.QSpinBox(self.main_area_page) self.line_spacing_spin_box.setMinimum(-250) self.line_spacing_spin_box.setMaximum(250) self.line_spacing_spin_box.setObjectName('line_spacing_spin_box') self.main_area_layout.addRow(self.line_spacing_label, self.line_spacing_spin_box) self.outline_check_box = QtGui.QCheckBox(self.main_area_page) self.outline_check_box.setObjectName('outline_check_box') self.outline_layout = QtGui.QHBoxLayout() self.outline_layout.setObjectName('outline_layout') self.outline_color_button = ColorButton(self.main_area_page) self.outline_color_button.setEnabled(False) self.outline_color_button.setObjectName('Outline_color_button') self.outline_layout.addWidget(self.outline_color_button) self.outline_layout.addSpacing(20) self.outline_size_label = QtGui.QLabel(self.main_area_page) self.outline_size_label.setObjectName('outline_size_label') self.outline_layout.addWidget(self.outline_size_label) self.outline_size_spin_box = QtGui.QSpinBox(self.main_area_page) self.outline_size_spin_box.setEnabled(False) self.outline_size_spin_box.setObjectName('outline_size_spin_box') self.outline_layout.addWidget(self.outline_size_spin_box) self.main_area_layout.addRow(self.outline_check_box, self.outline_layout) self.shadow_check_box = QtGui.QCheckBox(self.main_area_page) self.shadow_check_box.setObjectName('shadow_check_box') self.shadow_layout = QtGui.QHBoxLayout() self.shadow_layout.setObjectName('shadow_layout') self.shadow_color_button = ColorButton(self.main_area_page) self.shadow_color_button.setEnabled(False) self.shadow_color_button.setObjectName('shadow_color_button') self.shadow_layout.addWidget(self.shadow_color_button) self.shadow_layout.addSpacing(20) self.shadow_size_label = QtGui.QLabel(self.main_area_page) self.shadow_size_label.setObjectName('shadow_size_label') self.shadow_layout.addWidget(self.shadow_size_label) self.shadow_size_spin_box = QtGui.QSpinBox(self.main_area_page) self.shadow_size_spin_box.setEnabled(False) 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) theme_wizard.addPage(self.main_area_page) # Footer Area Page self.footer_area_page = QtGui.QWizardPage() self.footer_area_page.setObjectName('footer_area_page') self.footer_area_layout = QtGui.QFormLayout(self.footer_area_page) self.footer_area_layout.setObjectName('footer_area_layout') self.footer_font_label = QtGui.QLabel(self.footer_area_page) self.footer_font_label.setObjectName('FooterFontLabel') self.footer_font_combo_box = QtGui.QFontComboBox(self.footer_area_page) self.footer_font_combo_box.setObjectName('footer_font_combo_box') self.footer_area_layout.addRow(self.footer_font_label, self.footer_font_combo_box) self.footer_color_label = QtGui.QLabel(self.footer_area_page) self.footer_color_label.setObjectName('footer_color_label') self.footer_color_button = ColorButton(self.footer_area_page) self.footer_color_button.setObjectName('footer_color_button') self.footer_area_layout.addRow(self.footer_color_label, self.footer_color_button) self.footer_size_label = QtGui.QLabel(self.footer_area_page) self.footer_size_label.setObjectName('footer_size_label') self.footer_size_spin_box = QtGui.QSpinBox(self.footer_area_page) self.footer_size_spin_box.setMaximum(999) self.footer_size_spin_box.setValue(10) 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) theme_wizard.addPage(self.footer_area_page) # Alignment Page self.alignment_page = QtGui.QWizardPage() self.alignment_page.setObjectName('alignment_page') self.alignment_layout = QtGui.QFormLayout(self.alignment_page) self.alignment_layout.setObjectName('alignment_layout') self.horizontal_label = QtGui.QLabel(self.alignment_page) self.horizontal_label.setObjectName('horizontal_label') self.horizontal_combo_box = QtGui.QComboBox(self.alignment_page) self.horizontal_combo_box.addItems(['', '', '', '']) self.horizontal_combo_box.setObjectName('horizontal_combo_box') self.alignment_layout.addRow(self.horizontal_label, self.horizontal_combo_box) self.vertical_label, self.vertical_combo_box = create_valign_selection_widgets(self.alignment_page) self.vertical_label.setObjectName('vertical_label') self.vertical_combo_box.setObjectName('vertical_combo_box') self.alignment_layout.addRow(self.vertical_label, self.vertical_combo_box) self.transitions_label = QtGui.QLabel(self.alignment_page) self.transitions_label.setObjectName('transitions_label') self.transitions_check_box = QtGui.QCheckBox(self.alignment_page) 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) theme_wizard.addPage(self.alignment_page) # Area Position Page self.area_position_page = QtGui.QWizardPage() self.area_position_page.setObjectName('area_position_page') self.area_position_layout = QtGui.QHBoxLayout(self.area_position_page) self.area_position_layout.setObjectName('area_position_layout') self.main_position_group_box = QtGui.QGroupBox(self.area_position_page) self.main_position_group_box.setObjectName('main_position_group_box') self.main_position_layout = QtGui.QFormLayout(self.main_position_group_box) self.main_position_layout.setObjectName('main_position_layout') self.main_position_check_box = QtGui.QCheckBox(self.main_position_group_box) self.main_position_check_box.setObjectName('main_position_check_box') self.main_position_layout.addRow(self.main_position_check_box) self.main_position_method_label = QtGui.QLabel(self.main_position_group_box) self.main_position_method_label.setObjectName('main_position_method_label') self.main_position_method = QtGui.QComboBox(self.main_position_group_box) self.main_position_method.addItems(['','','']) self.main_position_method.setObjectName('main_position_method') self.main_position_layout.addRow(self.main_position_method_label, self.main_position_method) self.main_x_label = QtGui.QLabel(self.main_position_group_box) self.main_x_label.setObjectName('main_x_label') self.main_x_spin_box = QtGui.QSpinBox(self.main_position_group_box) self.main_x_spin_box.setMaximum(9999) self.main_x_spin_box.setObjectName('main_x_spin_box') self.main_position_layout.addRow(self.main_x_label, self.main_x_spin_box) self.main_y_label = QtGui.QLabel(self.main_position_group_box) self.main_y_label.setObjectName('main_y_label') self.main_y_spin_box = QtGui.QSpinBox(self.main_position_group_box) self.main_y_spin_box.setMaximum(9999) self.main_y_spin_box.setObjectName('main_y_spin_box') self.main_position_layout.addRow(self.main_y_label, self.main_y_spin_box) self.main_width_label = QtGui.QLabel(self.main_position_group_box) self.main_width_label.setObjectName('main_width_label') self.main_width_spin_box = QtGui.QSpinBox(self.main_position_group_box) self.main_width_spin_box.setMaximum(9999) self.main_width_spin_box.setObjectName('main_width_spin_box') self.main_position_layout.addRow(self.main_width_label, self.main_width_spin_box) self.main_height_label = QtGui.QLabel(self.main_position_group_box) self.main_height_label.setObjectName('main_height_label') self.main_height_spin_box = QtGui.QSpinBox(self.main_position_group_box) self.main_height_spin_box.setMaximum(9999) self.main_height_spin_box.setObjectName('main_height_spin_box') self.main_position_layout.addRow(self.main_height_label, self.main_height_spin_box) self.area_position_layout.addWidget(self.main_position_group_box) self.footer_position_group_box = QtGui.QGroupBox(self.area_position_page) self.footer_position_group_box.setObjectName('footer_position_group_box') self.footer_position_layout = QtGui.QFormLayout(self.footer_position_group_box) self.footer_position_layout.setObjectName('footer_position_layout') self.footer_position_check_box = QtGui.QCheckBox(self.footer_position_group_box) self.footer_position_check_box.setObjectName('footer_position_check_box') self.footer_position_layout.addRow(self.footer_position_check_box) self.footer_x_label = QtGui.QLabel(self.footer_position_group_box) self.footer_x_label.setObjectName('footer_x_label') self.footer_x_spin_box = QtGui.QSpinBox(self.footer_position_group_box) self.footer_x_spin_box.setMaximum(9999) self.footer_x_spin_box.setObjectName('footer_x_spin_box') self.footer_position_layout.addRow(self.footer_x_label, self.footer_x_spin_box) self.footer_y_label = QtGui.QLabel(self.footer_position_group_box) self.footer_y_label.setObjectName('footer_y_label') self.footer_y_spin_box = QtGui.QSpinBox(self.footer_position_group_box) self.footer_y_spin_box.setMaximum(9999) self.footer_y_spin_box.setObjectName('footer_y_spin_box') self.footer_position_layout.addRow(self.footer_y_label, self.footer_y_spin_box) self.footer_width_label = QtGui.QLabel(self.footer_position_group_box) self.footer_width_label.setObjectName('footer_width_label') self.footer_width_spin_box = QtGui.QSpinBox(self.footer_position_group_box) self.footer_width_spin_box.setMaximum(9999) self.footer_width_spin_box.setObjectName('footer_width_spin_box') self.footer_position_layout.addRow(self.footer_width_label, self.footer_width_spin_box) self.footer_height_label = QtGui.QLabel(self.footer_position_group_box) self.footer_height_label.setObjectName('footer_height_label') self.footer_height_spin_box = QtGui.QSpinBox(self.footer_position_group_box) self.footer_height_spin_box.setMaximum(9999) 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) theme_wizard.addPage(self.area_position_page) # Preview Page self.preview_page = QtGui.QWizardPage() self.preview_page.setObjectName('preview_page') self.preview_layout = QtGui.QVBoxLayout(self.preview_page) self.preview_layout.setObjectName('preview_layout') self.theme_name_layout = QtGui.QFormLayout() self.theme_name_layout.setObjectName('theme_name_layout') self.theme_name_label = QtGui.QLabel(self.preview_page) self.theme_name_label.setObjectName('theme_name_label') self.theme_name_edit = QtGui.QLineEdit(self.preview_page) self.theme_name_edit.setValidator(QtGui.QRegExpValidator(QtCore.QRegExp(r'[^/\\?*|<>\[\]":<>+%]+'), self)) self.theme_name_edit.setObjectName('ThemeNameEdit') self.theme_name_layout.addRow(self.theme_name_label, self.theme_name_edit) self.preview_layout.addLayout(self.theme_name_layout) self.preview_area = QtGui.QWidget(self.preview_page) self.preview_area.setObjectName('PreviewArea') self.preview_area_layout = QtGui.QGridLayout(self.preview_area) self.preview_area_layout.setMargin(0) self.preview_area_layout.setColumnStretch(0, 1) self.preview_area_layout.setRowStretch(0, 1) self.preview_area_layout.setObjectName('preview_area_layout') self.preview_box_label = QtGui.QLabel(self.preview_area) self.preview_box_label.setFrameShape(QtGui.QFrame.Box) self.preview_box_label.setScaledContents(True) self.preview_box_label.setObjectName('preview_box_label') self.preview_area_layout.addWidget(self.preview_box_label) self.preview_layout.addWidget(self.preview_area) 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, QtCore.SLOT('setEnabled(bool)')) QtCore.QObject.connect(self.outline_check_box, QtCore.SIGNAL('toggled(bool)'), self.outline_size_spin_box, QtCore.SLOT('setEnabled(bool)')) QtCore.QObject.connect(self.shadow_check_box, QtCore.SIGNAL('toggled(bool)'), self.shadow_color_button, QtCore.SLOT('setEnabled(bool)')) QtCore.QObject.connect(self.shadow_check_box, QtCore.SIGNAL('toggled(bool)'), self.shadow_size_spin_box, QtCore.SLOT('setEnabled(bool)')) QtCore.QObject.connect(self.main_position_check_box, QtCore.SIGNAL('toggled(bool)'), self.main_position_method, QtCore.SLOT('setDisabled(bool)')) QtCore.QObject.connect(self.main_position_check_box, QtCore.SIGNAL('toggled(bool)'), self.main_x_spin_box, QtCore.SLOT('setDisabled(bool)')) QtCore.QObject.connect(self.main_position_check_box, QtCore.SIGNAL('toggled(bool)'), self.main_y_spin_box, QtCore.SLOT('setDisabled(bool)')) QtCore.QObject.connect(self.main_position_check_box, QtCore.SIGNAL('toggled(bool)'), self.main_width_spin_box, QtCore.SLOT('setDisabled(bool)')) QtCore.QObject.connect(self.main_position_check_box, QtCore.SIGNAL('toggled(bool)'), self.main_height_spin_box, QtCore.SLOT('setDisabled(bool)')) QtCore.QObject.connect(self.footer_position_check_box, QtCore.SIGNAL('toggled(bool)'), self.footer_x_spin_box, QtCore.SLOT('setDisabled(bool)')) QtCore.QObject.connect(self.footer_position_check_box, QtCore.SIGNAL('toggled(bool)'), self.footer_y_spin_box, QtCore.SLOT('setDisabled(bool)')) QtCore.QObject.connect(self.footer_position_check_box, QtCore.SIGNAL('toggled(bool)'), self.footer_width_spin_box, QtCore.SLOT('setDisabled(bool)')) QtCore.QObject.connect(self.footer_position_check_box, QtCore.SIGNAL('toggled(bool)'), self.footer_height_spin_box, QtCore.SLOT('setDisabled(bool)')) def retranslateUi(self, theme_wizard): """ Translate the UI on the fly """ theme_wizard.setWindowTitle(translate('OpenLP.ThemeWizard', 'Theme Wizard')) self.title_label.setText('<span style="font-size:14pt; font-weight:600;">%s</span>' % translate('OpenLP.ThemeWizard', 'Welcome to the Theme Wizard')) self.information_label.setText( translate('OpenLP.ThemeWizard', 'This wizard will help you to create and edit your themes. Click the next ' 'button below to start the process by setting up your background.')) self.background_page.setTitle(translate('OpenLP.ThemeWizard', 'Set Up Background')) self.background_page.setSubTitle(translate('OpenLP.ThemeWizard', 'Set up your theme\'s background ' 'according to the parameters below.')) self.background_label.setText(translate('OpenLP.ThemeWizard', 'Background type:')) self.background_combo_box.setItemText(BackgroundType.Solid, translate('OpenLP.ThemeWizard', 'Solid color')) self.background_combo_box.setItemText(BackgroundType.Gradient, translate('OpenLP.ThemeWizard', 'Gradient')) self.background_combo_box.setItemText(BackgroundType.Image, UiStrings().Image) self.background_combo_box.setItemText(BackgroundType.Transparent, translate('OpenLP.ThemeWizard', 'Transparent')) self.color_label.setText(translate('OpenLP.ThemeWizard', 'color:')) self.gradient_start_label.setText(translate('OpenLP.ThemeWizard', 'Starting color:')) self.gradient_end_label.setText(translate('OpenLP.ThemeWizard', 'Ending color:')) self.gradient_type_label.setText(translate('OpenLP.ThemeWizard', 'Gradient:')) self.gradient_combo_box.setItemText(BackgroundGradientType.Horizontal, translate('OpenLP.ThemeWizard', 'Horizontal')) self.gradient_combo_box.setItemText(BackgroundGradientType.Vertical, translate('OpenLP.ThemeWizard', 'Vertical')) self.gradient_combo_box.setItemText(BackgroundGradientType.Circular, translate('OpenLP.ThemeWizard', 'Circular')) self.gradient_combo_box.setItemText(BackgroundGradientType.LeftTop, translate('OpenLP.ThemeWizard', 'Top Left - Bottom Right')) self.gradient_combo_box.setItemText(BackgroundGradientType.LeftBottom, translate('OpenLP.ThemeWizard', 'Bottom Left - Top Right')) self.image_color_label.setText(translate('OpenLP.ThemeWizard', 'Background color:')) self.image_label.setText('%s:' % UiStrings().Image) self.main_area_page.setTitle(translate('OpenLP.ThemeWizard', 'Main Area Font Details')) self.main_area_page.setSubTitle(translate('OpenLP.ThemeWizard', 'Define the font and display ' 'characteristics for the Display text')) self.main_font_label.setText(translate('OpenLP.ThemeWizard', 'Font:')) self.main_color_label.setText(translate('OpenLP.ThemeWizard', 'color:')) self.main_size_label.setText(translate('OpenLP.ThemeWizard', 'Size:')) self.main_size_spin_box.setSuffix(UiStrings().FontSizePtUnit) self.line_spacing_label.setText(translate('OpenLP.ThemeWizard', 'Line Spacing:')) self.line_spacing_spin_box.setSuffix(UiStrings().FontSizePtUnit) self.outline_check_box.setText(translate('OpenLP.ThemeWizard', '&Outline:')) self.outline_size_label.setText(translate('OpenLP.ThemeWizard', 'Size:')) self.outline_size_spin_box.setSuffix(UiStrings().FontSizePtUnit) self.shadow_check_box.setText(translate('OpenLP.ThemeWizard', '&Shadow:')) self.shadow_size_label.setText(translate('OpenLP.ThemeWizard', 'Size:')) self.shadow_size_spin_box.setSuffix(UiStrings().FontSizePtUnit) self.main_bold_check_box.setText(translate('OpenLP.ThemeWizard', 'Bold')) self.main_italics_check_box.setText(translate('OpenLP.ThemeWizard', 'Italic')) self.footer_area_page.setTitle(translate('OpenLP.ThemeWizard', 'Footer Area Font Details')) self.footer_area_page.setSubTitle(translate('OpenLP.ThemeWizard', 'Define the font and display ' 'characteristics for the Footer text')) self.footer_font_label.setText(translate('OpenLP.ThemeWizard', 'Font:')) self.footer_color_label.setText(translate('OpenLP.ThemeWizard', 'color:')) self.footer_size_label.setText(translate('OpenLP.ThemeWizard', 'Size:')) self.footer_size_spin_box.setSuffix(UiStrings().FontSizePtUnit) self.alignment_page.setTitle(translate('OpenLP.ThemeWizard', 'Text Formatting Details')) self.alignment_page.setSubTitle(translate('OpenLP.ThemeWizard', 'Allows additional display ' 'formatting information to be defined')) self.horizontal_label.setText(translate('OpenLP.ThemeWizard', 'Horizontal Align:')) self.horizontal_combo_box.setItemText(HorizontalType.Left, translate('OpenLP.ThemeWizard', 'Left')) self.horizontal_combo_box.setItemText(HorizontalType.Right, translate('OpenLP.ThemeWizard', 'Right')) self.horizontal_combo_box.setItemText(HorizontalType.Center, translate('OpenLP.ThemeWizard', 'Center')) self.horizontal_combo_box.setItemText(HorizontalType.Justify, translate('OpenLP.ThemeWizard', 'Justify')) self.transitions_label.setText(translate('OpenLP.ThemeWizard', 'Transitions:')) self.area_position_page.setTitle(translate('OpenLP.ThemeWizard', 'Output Area Locations')) self.area_position_page.setSubTitle(translate('OpenLP.ThemeWizard', 'Allows you to change and move the' ' Main and Footer areas.')) self.main_position_group_box.setTitle(translate('OpenLP.ThemeWizard', '&Main Area')) self.main_position_check_box.setText(translate('OpenLP.ThemeWizard', '&Use default location')) self.main_position_method_label.setText(translate('OpenLP.ThemeWizard', 'Position method:')) self.main_position_method.setItemText(PositionType.Classic, translate('OpenLP.ThemeWizard', 'Classic')) self.main_position_method.setItemText(PositionType.Margins, translate('OpenLP.ThemeWizard', 'Margins')) self.main_position_method.setItemText(PositionType.Proportional, translate('OpenLP.ThemeWizard', 'Proportional')) self.main_x_label.setText(translate('OpenLP.ThemeWizard', 'X position:')) self.main_x_spin_box.setSuffix(translate('OpenLP.ThemeWizard', 'px')) self.main_y_spin_box.setSuffix(translate('OpenLP.ThemeWizard', 'px')) self.main_y_label.setText(translate('OpenLP.ThemeWizard', 'Y position:')) self.main_width_spin_box.setSuffix(translate('OpenLP.ThemeWizard', 'px')) self.main_width_label.setText(translate('OpenLP.ThemeWizard', 'Width:')) self.main_height_spin_box.setSuffix(translate('OpenLP.ThemeWizard', 'px')) self.main_height_label.setText(translate('OpenLP.ThemeWizard', 'Height:')) self.footer_position_group_box.setTitle(translate('OpenLP.ThemeWizard', '&Footer Area')) self.footer_x_label.setText(translate('OpenLP.ThemeWizard', 'X position:')) self.footer_x_spin_box.setSuffix(translate('OpenLP.ThemeWizard', 'px')) self.footer_y_label.setText(translate('OpenLP.ThemeWizard', 'Y position:')) self.footer_y_spin_box.setSuffix(translate('OpenLP.ThemeWizard', 'px')) self.footer_width_label.setText(translate('OpenLP.ThemeWizard', 'Width:')) self.footer_width_spin_box.setSuffix(translate('OpenLP.ThemeWizard', 'px')) 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')) 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:')) # Align all QFormLayouts towards each other. label_width = max(self.background_label.minimumSizeHint().width(), self.horizontal_label.minimumSizeHint().width()) self.spacer.changeSize(label_width, 0, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
def setupUi(self, theme_wizard): """ Set up the UI """ 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 is_macosx(): theme_wizard.setPixmap(QtGui.QWizard.BackgroundPixmap, QtGui.QPixmap(':/wizards/openlp-osx-wizard.png')) theme_wizard.resize(646, 400) else: theme_wizard.setWizardStyle(QtGui.QWizard.ModernStyle) self.spacer = QtGui.QSpacerItem(10, 0, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Minimum) # Welcome Page add_welcome_page(theme_wizard, ':/wizards/wizard_createtheme.bmp') # Background Page self.background_page = QtGui.QWizardPage() self.background_page.setObjectName('background_page') self.background_layout = QtGui.QVBoxLayout(self.background_page) self.background_layout.setObjectName('background_layout') self.background_type_layout = QtGui.QFormLayout() self.background_type_layout.setObjectName('background_type_layout') self.background_label = QtGui.QLabel(self.background_page) self.background_label.setObjectName('background_label') self.background_combo_box = QtGui.QComboBox(self.background_page) self.background_combo_box.addItems(['', '', '', '']) self.background_combo_box.setObjectName('background_combo_box') self.background_type_layout.addRow(self.background_label, self.background_combo_box) self.background_type_layout.setItem(1, QtGui.QFormLayout.LabelRole, self.spacer) self.background_layout.addLayout(self.background_type_layout) self.background_stack = QtGui.QStackedLayout() self.background_stack.setObjectName('background_stack') self.color_widget = QtGui.QWidget(self.background_page) self.color_widget.setObjectName('color_widget') self.color_layout = QtGui.QFormLayout(self.color_widget) self.color_layout.setMargin(0) self.color_layout.setObjectName('color_layout') self.color_label = QtGui.QLabel(self.color_widget) self.color_label.setObjectName('color_label') self.color_button = ColorButton(self.color_widget) self.color_button.setObjectName('color_button') self.color_layout.addRow(self.color_label, self.color_button) self.color_layout.setItem(1, QtGui.QFormLayout.LabelRole, self.spacer) self.background_stack.addWidget(self.color_widget) self.gradient_widget = QtGui.QWidget(self.background_page) self.gradient_widget.setObjectName('Gradient_widget') self.gradient_layout = QtGui.QFormLayout(self.gradient_widget) self.gradient_layout.setMargin(0) self.gradient_layout.setObjectName('gradient_layout') self.gradient_start_label = QtGui.QLabel(self.gradient_widget) self.gradient_start_label.setObjectName('gradient_start_label') self.gradient_start_button = ColorButton(self.gradient_widget) self.gradient_start_button.setObjectName('gradient_start_button') self.gradient_layout.addRow(self.gradient_start_label, self.gradient_start_button) self.gradient_end_label = QtGui.QLabel(self.gradient_widget) self.gradient_end_label.setObjectName('gradient_end_label') self.gradient_end_button = ColorButton(self.gradient_widget) self.gradient_end_button.setObjectName('gradient_end_button') self.gradient_layout.addRow(self.gradient_end_label, self.gradient_end_button) self.gradient_type_label = QtGui.QLabel(self.gradient_widget) self.gradient_type_label.setObjectName('Gradient_type_label') self.gradient_combo_box = QtGui.QComboBox(self.gradient_widget) self.gradient_combo_box.setObjectName('gradient_combo_box') self.gradient_combo_box.addItems(['', '', '', '', '']) self.gradient_layout.addRow(self.gradient_type_label, self.gradient_combo_box) self.gradient_layout.setItem(3, QtGui.QFormLayout.LabelRole, self.spacer) self.background_stack.addWidget(self.gradient_widget) self.image_widget = QtGui.QWidget(self.background_page) self.image_widget.setObjectName('image_widget') self.image_layout = QtGui.QFormLayout(self.image_widget) self.image_layout.setMargin(0) self.image_layout.setObjectName('image_layout') self.image_color_label = QtGui.QLabel(self.color_widget) self.image_color_label.setObjectName('image_color_label') self.image_color_button = ColorButton(self.color_widget) self.image_color_button.setObjectName('image_color_button') self.image_layout.addRow(self.image_color_label, self.image_color_button) self.image_label = QtGui.QLabel(self.image_widget) self.image_label.setObjectName('image_label') self.image_file_layout = QtGui.QHBoxLayout() self.image_file_layout.setObjectName('image_file_layout') self.image_file_edit = QtGui.QLineEdit(self.image_widget) self.image_file_edit.setObjectName('image_file_edit') self.image_file_layout.addWidget(self.image_file_edit) self.image_browse_button = QtGui.QToolButton(self.image_widget) self.image_browse_button.setObjectName('image_browse_button') self.image_browse_button.setIcon(build_icon(':/general/general_open.png')) self.image_file_layout.addWidget(self.image_browse_button) self.image_layout.addRow(self.image_label, self.image_file_layout) self.image_layout.setItem(2, QtGui.QFormLayout.LabelRole, self.spacer) self.background_stack.addWidget(self.image_widget) self.transparent_widget = QtGui.QWidget(self.background_page) self.transparent_widget.setObjectName('TransparentWidget') self.transparent_layout = QtGui.QFormLayout(self.transparent_widget) self.transparent_layout.setMargin(0) self.transparent_layout.setObjectName('Transparent_layout') self.background_stack.addWidget(self.transparent_widget) self.background_layout.addLayout(self.background_stack) theme_wizard.addPage(self.background_page) # Main Area Page self.main_area_page = QtGui.QWizardPage() self.main_area_page.setObjectName('main_area_page') self.main_area_layout = QtGui.QFormLayout(self.main_area_page) self.main_area_layout.setObjectName('main_area_layout') self.main_font_label = QtGui.QLabel(self.main_area_page) self.main_font_label.setObjectName('main_font_label') self.main_font_combo_box = QtGui.QFontComboBox(self.main_area_page) self.main_font_combo_box.setObjectName('main_font_combo_box') self.main_area_layout.addRow(self.main_font_label, self.main_font_combo_box) self.main_color_label = QtGui.QLabel(self.main_area_page) self.main_color_label.setObjectName('main_color_label') self.main_properties_layout = QtGui.QHBoxLayout() self.main_properties_layout.setObjectName('main_properties_layout') self.main_color_button = ColorButton(self.main_area_page) self.main_color_button.setObjectName('main_color_button') self.main_properties_layout.addWidget(self.main_color_button) self.main_properties_layout.addSpacing(20) self.main_bold_check_box = QtGui.QCheckBox(self.main_area_page) self.main_bold_check_box.setObjectName('main_bold_check_box') self.main_properties_layout.addWidget(self.main_bold_check_box) self.main_properties_layout.addSpacing(20) self.main_italics_check_box = QtGui.QCheckBox(self.main_area_page) self.main_italics_check_box.setObjectName('MainItalicsCheckBox') self.main_properties_layout.addWidget(self.main_italics_check_box) self.main_area_layout.addRow(self.main_color_label, self.main_properties_layout) self.main_size_label = QtGui.QLabel(self.main_area_page) self.main_size_label.setObjectName('main_size_label') self.main_size_layout = QtGui.QHBoxLayout() self.main_size_layout.setObjectName('main_size_layout') self.main_size_spin_box = QtGui.QSpinBox(self.main_area_page) self.main_size_spin_box.setMaximum(999) self.main_size_spin_box.setValue(16) self.main_size_spin_box.setObjectName('main_size_spin_box') self.main_size_layout.addWidget(self.main_size_spin_box) self.main_line_count_label = QtGui.QLabel(self.main_area_page) self.main_line_count_label.setObjectName('main_line_count_label') self.main_size_layout.addWidget(self.main_line_count_label) self.main_area_layout.addRow(self.main_size_label, self.main_size_layout) self.line_spacing_label = QtGui.QLabel(self.main_area_page) self.line_spacing_label.setObjectName('line_spacing_label') self.line_spacing_spin_box = QtGui.QSpinBox(self.main_area_page) self.line_spacing_spin_box.setMinimum(-250) self.line_spacing_spin_box.setMaximum(250) self.line_spacing_spin_box.setObjectName('line_spacing_spin_box') self.main_area_layout.addRow(self.line_spacing_label, self.line_spacing_spin_box) self.outline_check_box = QtGui.QCheckBox(self.main_area_page) self.outline_check_box.setObjectName('outline_check_box') self.outline_layout = QtGui.QHBoxLayout() self.outline_layout.setObjectName('outline_layout') self.outline_color_button = ColorButton(self.main_area_page) self.outline_color_button.setEnabled(False) self.outline_color_button.setObjectName('Outline_color_button') self.outline_layout.addWidget(self.outline_color_button) self.outline_layout.addSpacing(20) self.outline_size_label = QtGui.QLabel(self.main_area_page) self.outline_size_label.setObjectName('outline_size_label') self.outline_layout.addWidget(self.outline_size_label) self.outline_size_spin_box = QtGui.QSpinBox(self.main_area_page) self.outline_size_spin_box.setEnabled(False) self.outline_size_spin_box.setObjectName('outline_size_spin_box') self.outline_layout.addWidget(self.outline_size_spin_box) self.main_area_layout.addRow(self.outline_check_box, self.outline_layout) self.shadow_check_box = QtGui.QCheckBox(self.main_area_page) self.shadow_check_box.setObjectName('shadow_check_box') self.shadow_layout = QtGui.QHBoxLayout() self.shadow_layout.setObjectName('shadow_layout') self.shadow_color_button = ColorButton(self.main_area_page) self.shadow_color_button.setEnabled(False) self.shadow_color_button.setObjectName('shadow_color_button') self.shadow_layout.addWidget(self.shadow_color_button) self.shadow_layout.addSpacing(20) self.shadow_size_label = QtGui.QLabel(self.main_area_page) self.shadow_size_label.setObjectName('shadow_size_label') self.shadow_layout.addWidget(self.shadow_size_label) self.shadow_size_spin_box = QtGui.QSpinBox(self.main_area_page) self.shadow_size_spin_box.setEnabled(False) 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) theme_wizard.addPage(self.main_area_page) # Footer Area Page self.footer_area_page = QtGui.QWizardPage() self.footer_area_page.setObjectName('footer_area_page') self.footer_area_layout = QtGui.QFormLayout(self.footer_area_page) self.footer_area_layout.setObjectName('footer_area_layout') self.footer_font_label = QtGui.QLabel(self.footer_area_page) self.footer_font_label.setObjectName('FooterFontLabel') self.footer_font_combo_box = QtGui.QFontComboBox(self.footer_area_page) self.footer_font_combo_box.setObjectName('footer_font_combo_box') self.footer_area_layout.addRow(self.footer_font_label, self.footer_font_combo_box) self.footer_color_label = QtGui.QLabel(self.footer_area_page) self.footer_color_label.setObjectName('footer_color_label') self.footer_color_button = ColorButton(self.footer_area_page) self.footer_color_button.setObjectName('footer_color_button') self.footer_area_layout.addRow(self.footer_color_label, self.footer_color_button) self.footer_size_label = QtGui.QLabel(self.footer_area_page) self.footer_size_label.setObjectName('footer_size_label') self.footer_size_spin_box = QtGui.QSpinBox(self.footer_area_page) self.footer_size_spin_box.setMaximum(999) self.footer_size_spin_box.setValue(10) 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) theme_wizard.addPage(self.footer_area_page) # Alignment Page self.alignment_page = QtGui.QWizardPage() self.alignment_page.setObjectName('alignment_page') self.alignment_layout = QtGui.QFormLayout(self.alignment_page) self.alignment_layout.setObjectName('alignment_layout') self.horizontal_label = QtGui.QLabel(self.alignment_page) self.horizontal_label.setObjectName('horizontal_label') self.horizontal_combo_box = QtGui.QComboBox(self.alignment_page) self.horizontal_combo_box.addItems(['', '', '', '']) self.horizontal_combo_box.setObjectName('horizontal_combo_box') self.alignment_layout.addRow(self.horizontal_label, self.horizontal_combo_box) self.vertical_label, self.vertical_combo_box = create_valign_selection_widgets(self.alignment_page) self.vertical_label.setObjectName('vertical_label') self.vertical_combo_box.setObjectName('vertical_combo_box') self.alignment_layout.addRow(self.vertical_label, self.vertical_combo_box) self.transitions_label = QtGui.QLabel(self.alignment_page) self.transitions_label.setObjectName('transitions_label') self.transitions_check_box = QtGui.QCheckBox(self.alignment_page) 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) theme_wizard.addPage(self.alignment_page) # Area Position Page self.area_position_page = QtGui.QWizardPage() self.area_position_page.setObjectName('area_position_page') self.area_position_layout = QtGui.QHBoxLayout(self.area_position_page) self.area_position_layout.setObjectName('area_position_layout') self.main_position_group_box = QtGui.QGroupBox(self.area_position_page) self.main_position_group_box.setObjectName('main_position_group_box') self.main_position_layout = QtGui.QFormLayout(self.main_position_group_box) self.main_position_layout.setObjectName('main_position_layout') self.main_position_check_box = QtGui.QCheckBox(self.main_position_group_box) self.main_position_check_box.setObjectName('main_position_check_box') self.main_position_layout.addRow(self.main_position_check_box) self.main_position_method_label = QtGui.QLabel(self.main_position_group_box) self.main_position_method_label.setObjectName('main_position_method_label') self.main_position_method = QtGui.QComboBox(self.main_position_group_box) self.main_position_method.addItems(['','','']) self.main_position_method.setObjectName('main_position_method') self.main_position_layout.addRow(self.main_position_method_label, self.main_position_method) self.main_x_label = QtGui.QLabel(self.main_position_group_box) self.main_x_label.setObjectName('main_x_label') self.main_x_spin_box = QtGui.QSpinBox(self.main_position_group_box) self.main_x_spin_box.setMaximum(9999) self.main_x_spin_box.setObjectName('main_x_spin_box') self.main_position_layout.addRow(self.main_x_label, self.main_x_spin_box) self.main_y_label = QtGui.QLabel(self.main_position_group_box) self.main_y_label.setObjectName('main_y_label') self.main_y_spin_box = QtGui.QSpinBox(self.main_position_group_box) self.main_y_spin_box.setMaximum(9999) self.main_y_spin_box.setObjectName('main_y_spin_box') self.main_position_layout.addRow(self.main_y_label, self.main_y_spin_box) self.main_width_label = QtGui.QLabel(self.main_position_group_box) self.main_width_label.setObjectName('main_width_label') self.main_width_spin_box = QtGui.QSpinBox(self.main_position_group_box) self.main_width_spin_box.setMaximum(9999) self.main_width_spin_box.setObjectName('main_width_spin_box') self.main_position_layout.addRow(self.main_width_label, self.main_width_spin_box) self.main_height_label = QtGui.QLabel(self.main_position_group_box) self.main_height_label.setObjectName('main_height_label') self.main_height_spin_box = QtGui.QSpinBox(self.main_position_group_box) self.main_height_spin_box.setMaximum(9999) self.main_height_spin_box.setObjectName('main_height_spin_box') self.main_position_layout.addRow(self.main_height_label, self.main_height_spin_box) self.area_position_layout.addWidget(self.main_position_group_box) self.footer_position_group_box = QtGui.QGroupBox(self.area_position_page) self.footer_position_group_box.setObjectName('footer_position_group_box') self.footer_position_layout = QtGui.QFormLayout(self.footer_position_group_box) self.footer_position_layout.setObjectName('footer_position_layout') self.footer_position_check_box = QtGui.QCheckBox(self.footer_position_group_box) self.footer_position_check_box.setObjectName('footer_position_check_box') self.footer_position_layout.addRow(self.footer_position_check_box) self.footer_x_label = QtGui.QLabel(self.footer_position_group_box) self.footer_x_label.setObjectName('footer_x_label') self.footer_x_spin_box = QtGui.QSpinBox(self.footer_position_group_box) self.footer_x_spin_box.setMaximum(9999) self.footer_x_spin_box.setObjectName('footer_x_spin_box') self.footer_position_layout.addRow(self.footer_x_label, self.footer_x_spin_box) self.footer_y_label = QtGui.QLabel(self.footer_position_group_box) self.footer_y_label.setObjectName('footer_y_label') self.footer_y_spin_box = QtGui.QSpinBox(self.footer_position_group_box) self.footer_y_spin_box.setMaximum(9999) self.footer_y_spin_box.setObjectName('footer_y_spin_box') self.footer_position_layout.addRow(self.footer_y_label, self.footer_y_spin_box) self.footer_width_label = QtGui.QLabel(self.footer_position_group_box) self.footer_width_label.setObjectName('footer_width_label') self.footer_width_spin_box = QtGui.QSpinBox(self.footer_position_group_box) self.footer_width_spin_box.setMaximum(9999) self.footer_width_spin_box.setObjectName('footer_width_spin_box') self.footer_position_layout.addRow(self.footer_width_label, self.footer_width_spin_box) self.footer_height_label = QtGui.QLabel(self.footer_position_group_box) self.footer_height_label.setObjectName('footer_height_label') self.footer_height_spin_box = QtGui.QSpinBox(self.footer_position_group_box) self.footer_height_spin_box.setMaximum(9999) 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) theme_wizard.addPage(self.area_position_page) # Preview Page self.preview_page = QtGui.QWizardPage() self.preview_page.setObjectName('preview_page') self.preview_layout = QtGui.QVBoxLayout(self.preview_page) self.preview_layout.setObjectName('preview_layout') self.theme_name_layout = QtGui.QFormLayout() self.theme_name_layout.setObjectName('theme_name_layout') self.theme_name_label = QtGui.QLabel(self.preview_page) self.theme_name_label.setObjectName('theme_name_label') self.theme_name_edit = QtGui.QLineEdit(self.preview_page) self.theme_name_edit.setValidator(QtGui.QRegExpValidator(QtCore.QRegExp(r'[^/\\?*|<>\[\]":<>+%]+'), self)) self.theme_name_edit.setObjectName('ThemeNameEdit') self.theme_name_layout.addRow(self.theme_name_label, self.theme_name_edit) self.preview_layout.addLayout(self.theme_name_layout) self.preview_area = QtGui.QWidget(self.preview_page) self.preview_area.setObjectName('PreviewArea') self.preview_area_layout = QtGui.QGridLayout(self.preview_area) self.preview_area_layout.setMargin(0) self.preview_area_layout.setColumnStretch(0, 1) self.preview_area_layout.setRowStretch(0, 1) self.preview_area_layout.setObjectName('preview_area_layout') self.preview_box_label = QtGui.QLabel(self.preview_area) self.preview_box_label.setFrameShape(QtGui.QFrame.Box) self.preview_box_label.setScaledContents(True) self.preview_box_label.setObjectName('preview_box_label') self.preview_area_layout.addWidget(self.preview_box_label) self.preview_layout.addWidget(self.preview_area) 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, QtCore.SLOT('setEnabled(bool)')) QtCore.QObject.connect(self.outline_check_box, QtCore.SIGNAL('toggled(bool)'), self.outline_size_spin_box, QtCore.SLOT('setEnabled(bool)')) QtCore.QObject.connect(self.shadow_check_box, QtCore.SIGNAL('toggled(bool)'), self.shadow_color_button, QtCore.SLOT('setEnabled(bool)')) QtCore.QObject.connect(self.shadow_check_box, QtCore.SIGNAL('toggled(bool)'), self.shadow_size_spin_box, QtCore.SLOT('setEnabled(bool)')) QtCore.QObject.connect(self.main_position_check_box, QtCore.SIGNAL('toggled(bool)'), self.main_position_method, QtCore.SLOT('setDisabled(bool)')) QtCore.QObject.connect(self.main_position_check_box, QtCore.SIGNAL('toggled(bool)'), self.main_x_spin_box, QtCore.SLOT('setDisabled(bool)')) QtCore.QObject.connect(self.main_position_check_box, QtCore.SIGNAL('toggled(bool)'), self.main_y_spin_box, QtCore.SLOT('setDisabled(bool)')) QtCore.QObject.connect(self.main_position_check_box, QtCore.SIGNAL('toggled(bool)'), self.main_width_spin_box, QtCore.SLOT('setDisabled(bool)')) QtCore.QObject.connect(self.main_position_check_box, QtCore.SIGNAL('toggled(bool)'), self.main_height_spin_box, QtCore.SLOT('setDisabled(bool)')) QtCore.QObject.connect(self.footer_position_check_box, QtCore.SIGNAL('toggled(bool)'), self.footer_x_spin_box, QtCore.SLOT('setDisabled(bool)')) QtCore.QObject.connect(self.footer_position_check_box, QtCore.SIGNAL('toggled(bool)'), self.footer_y_spin_box, QtCore.SLOT('setDisabled(bool)')) QtCore.QObject.connect(self.footer_position_check_box, QtCore.SIGNAL('toggled(bool)'), self.footer_width_spin_box, QtCore.SLOT('setDisabled(bool)')) QtCore.QObject.connect(self.footer_position_check_box, QtCore.SIGNAL('toggled(bool)'), self.footer_height_spin_box, QtCore.SLOT('setDisabled(bool)'))
class Ui_ThemeWizard(object): """ The Create/Edit theme wizard """ def setupUi(self, theme_wizard): """ Set up the UI """ theme_wizard.setObjectName('OpenLP.ThemeWizard') theme_wizard.setWindowIcon(build_icon(u':/icon/openlp-logo.svg')) theme_wizard.setModal(True) theme_wizard.setOptions(QtWidgets.QWizard.IndependentPages | QtWidgets.QWizard.NoBackButtonOnStartPage | QtWidgets.QWizard.HaveCustomButton1) theme_wizard.setFixedWidth(640) if is_macosx(): theme_wizard.setPixmap(QtWidgets.QWizard.BackgroundPixmap, QtGui.QPixmap(':/wizards/openlp-osx-wizard.png')) else: theme_wizard.setWizardStyle(QtWidgets.QWizard.ModernStyle) self.spacer = QtWidgets.QSpacerItem(10, 0, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum) # Welcome Page add_welcome_page(theme_wizard, ':/wizards/wizard_createtheme.bmp') # Background Page self.background_page = QtWidgets.QWizardPage() self.background_page.setObjectName('background_page') self.background_layout = QtWidgets.QVBoxLayout(self.background_page) self.background_layout.setObjectName('background_layout') self.background_type_layout = QtWidgets.QFormLayout() self.background_type_layout.setObjectName('background_type_layout') self.background_label = QtWidgets.QLabel(self.background_page) self.background_label.setObjectName('background_label') self.background_combo_box = QtWidgets.QComboBox(self.background_page) self.background_combo_box.addItems(['', '', '', '']) self.background_combo_box.setObjectName('background_combo_box') self.background_type_layout.addRow(self.background_label, self.background_combo_box) self.background_type_layout.setItem(1, QtWidgets.QFormLayout.LabelRole, self.spacer) self.background_layout.addLayout(self.background_type_layout) self.background_stack = QtWidgets.QStackedLayout() self.background_stack.setObjectName('background_stack') self.color_widget = QtWidgets.QWidget(self.background_page) self.color_widget.setObjectName('color_widget') self.color_layout = QtWidgets.QFormLayout(self.color_widget) self.color_layout.setContentsMargins(0, 0, 0, 0) self.color_layout.setObjectName('color_layout') self.color_label = QtWidgets.QLabel(self.color_widget) self.color_label.setObjectName('color_label') self.color_button = ColorButton(self.color_widget) self.color_button.setObjectName('color_button') self.color_layout.addRow(self.color_label, self.color_button) self.color_layout.setItem(1, QtWidgets.QFormLayout.LabelRole, self.spacer) self.background_stack.addWidget(self.color_widget) self.gradient_widget = QtWidgets.QWidget(self.background_page) self.gradient_widget.setObjectName('Gradient_widget') self.gradient_layout = QtWidgets.QFormLayout(self.gradient_widget) self.gradient_layout.setContentsMargins(0, 0, 0, 0) self.gradient_layout.setObjectName('gradient_layout') self.gradient_start_label = QtWidgets.QLabel(self.gradient_widget) self.gradient_start_label.setObjectName('gradient_start_label') self.gradient_start_button = ColorButton(self.gradient_widget) self.gradient_start_button.setObjectName('gradient_start_button') self.gradient_layout.addRow(self.gradient_start_label, self.gradient_start_button) self.gradient_end_label = QtWidgets.QLabel(self.gradient_widget) self.gradient_end_label.setObjectName('gradient_end_label') self.gradient_end_button = ColorButton(self.gradient_widget) self.gradient_end_button.setObjectName('gradient_end_button') self.gradient_layout.addRow(self.gradient_end_label, self.gradient_end_button) self.gradient_type_label = QtWidgets.QLabel(self.gradient_widget) self.gradient_type_label.setObjectName('Gradient_type_label') self.gradient_combo_box = QtWidgets.QComboBox(self.gradient_widget) self.gradient_combo_box.setObjectName('gradient_combo_box') self.gradient_combo_box.addItems(['', '', '', '', '']) self.gradient_layout.addRow(self.gradient_type_label, self.gradient_combo_box) self.gradient_layout.setItem(3, QtWidgets.QFormLayout.LabelRole, self.spacer) self.background_stack.addWidget(self.gradient_widget) self.image_widget = QtWidgets.QWidget(self.background_page) self.image_widget.setObjectName('image_widget') self.image_layout = QtWidgets.QFormLayout(self.image_widget) self.image_layout.setContentsMargins(0, 0, 0, 0) self.image_layout.setObjectName('image_layout') self.image_color_label = QtWidgets.QLabel(self.color_widget) self.image_color_label.setObjectName('image_color_label') self.image_color_button = ColorButton(self.color_widget) self.image_color_button.setObjectName('image_color_button') self.image_layout.addRow(self.image_color_label, self.image_color_button) self.image_label = QtWidgets.QLabel(self.image_widget) self.image_label.setObjectName('image_label') self.image_file_layout = QtWidgets.QHBoxLayout() self.image_file_layout.setObjectName('image_file_layout') self.image_file_edit = QtWidgets.QLineEdit(self.image_widget) self.image_file_edit.setObjectName('image_file_edit') self.image_file_layout.addWidget(self.image_file_edit) self.image_browse_button = QtWidgets.QToolButton(self.image_widget) self.image_browse_button.setObjectName('image_browse_button') self.image_browse_button.setIcon(build_icon(':/general/general_open.png')) self.image_file_layout.addWidget(self.image_browse_button) self.image_layout.addRow(self.image_label, self.image_file_layout) self.image_layout.setItem(2, QtWidgets.QFormLayout.LabelRole, self.spacer) self.background_stack.addWidget(self.image_widget) self.transparent_widget = QtWidgets.QWidget(self.background_page) self.transparent_widget.setObjectName('TransparentWidget') self.transparent_layout = QtWidgets.QFormLayout(self.transparent_widget) self.transparent_layout.setContentsMargins(0, 0, 0, 0) self.transparent_layout.setObjectName('Transparent_layout') self.background_stack.addWidget(self.transparent_widget) self.background_layout.addLayout(self.background_stack) theme_wizard.addPage(self.background_page) # Main Area Page self.main_area_page = QtWidgets.QWizardPage() self.main_area_page.setObjectName('main_area_page') self.main_area_layout = QtWidgets.QFormLayout(self.main_area_page) self.main_area_layout.setObjectName('main_area_layout') self.main_font_label = QtWidgets.QLabel(self.main_area_page) self.main_font_label.setObjectName('main_font_label') self.main_font_combo_box = QtWidgets.QFontComboBox(self.main_area_page) self.main_font_combo_box.setObjectName('main_font_combo_box') self.main_area_layout.addRow(self.main_font_label, self.main_font_combo_box) self.main_color_label = QtWidgets.QLabel(self.main_area_page) self.main_color_label.setObjectName('main_color_label') self.main_properties_layout = QtWidgets.QHBoxLayout() self.main_properties_layout.setObjectName('main_properties_layout') self.main_color_button = ColorButton(self.main_area_page) self.main_color_button.setObjectName('main_color_button') self.main_properties_layout.addWidget(self.main_color_button) self.main_properties_layout.addSpacing(20) self.main_bold_check_box = QtWidgets.QCheckBox(self.main_area_page) self.main_bold_check_box.setObjectName('main_bold_check_box') self.main_properties_layout.addWidget(self.main_bold_check_box) self.main_properties_layout.addSpacing(20) self.main_italics_check_box = QtWidgets.QCheckBox(self.main_area_page) self.main_italics_check_box.setObjectName('MainItalicsCheckBox') self.main_properties_layout.addWidget(self.main_italics_check_box) self.main_area_layout.addRow(self.main_color_label, self.main_properties_layout) self.main_size_label = QtWidgets.QLabel(self.main_area_page) self.main_size_label.setObjectName('main_size_label') self.main_size_layout = QtWidgets.QHBoxLayout() self.main_size_layout.setObjectName('main_size_layout') self.main_size_spin_box = QtWidgets.QSpinBox(self.main_area_page) self.main_size_spin_box.setMaximum(999) self.main_size_spin_box.setValue(16) self.main_size_spin_box.setObjectName('main_size_spin_box') self.main_size_layout.addWidget(self.main_size_spin_box) self.main_line_count_label = QtWidgets.QLabel(self.main_area_page) self.main_line_count_label.setObjectName('main_line_count_label') self.main_size_layout.addWidget(self.main_line_count_label) self.main_area_layout.addRow(self.main_size_label, self.main_size_layout) self.line_spacing_label = QtWidgets.QLabel(self.main_area_page) self.line_spacing_label.setObjectName('line_spacing_label') self.line_spacing_spin_box = QtWidgets.QSpinBox(self.main_area_page) self.line_spacing_spin_box.setMinimum(-250) self.line_spacing_spin_box.setMaximum(250) self.line_spacing_spin_box.setObjectName('line_spacing_spin_box') self.main_area_layout.addRow(self.line_spacing_label, self.line_spacing_spin_box) self.outline_check_box = QtWidgets.QCheckBox(self.main_area_page) self.outline_check_box.setObjectName('outline_check_box') self.outline_layout = QtWidgets.QHBoxLayout() self.outline_layout.setObjectName('outline_layout') self.outline_color_button = ColorButton(self.main_area_page) self.outline_color_button.setEnabled(False) self.outline_color_button.setObjectName('Outline_color_button') self.outline_layout.addWidget(self.outline_color_button) self.outline_layout.addSpacing(20) self.outline_size_label = QtWidgets.QLabel(self.main_area_page) self.outline_size_label.setObjectName('outline_size_label') self.outline_layout.addWidget(self.outline_size_label) self.outline_size_spin_box = QtWidgets.QSpinBox(self.main_area_page) self.outline_size_spin_box.setEnabled(False) self.outline_size_spin_box.setObjectName('outline_size_spin_box') self.outline_layout.addWidget(self.outline_size_spin_box) self.main_area_layout.addRow(self.outline_check_box, self.outline_layout) self.shadow_check_box = QtWidgets.QCheckBox(self.main_area_page) self.shadow_check_box.setObjectName('shadow_check_box') self.shadow_layout = QtWidgets.QHBoxLayout() self.shadow_layout.setObjectName('shadow_layout') self.shadow_color_button = ColorButton(self.main_area_page) self.shadow_color_button.setEnabled(False) self.shadow_color_button.setObjectName('shadow_color_button') self.shadow_layout.addWidget(self.shadow_color_button) self.shadow_layout.addSpacing(20) self.shadow_size_label = QtWidgets.QLabel(self.main_area_page) self.shadow_size_label.setObjectName('shadow_size_label') self.shadow_layout.addWidget(self.shadow_size_label) self.shadow_size_spin_box = QtWidgets.QSpinBox(self.main_area_page) self.shadow_size_spin_box.setEnabled(False) 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) theme_wizard.addPage(self.main_area_page) # Footer Area Page self.footer_area_page = QtWidgets.QWizardPage() self.footer_area_page.setObjectName('footer_area_page') self.footer_area_layout = QtWidgets.QFormLayout(self.footer_area_page) self.footer_area_layout.setObjectName('footer_area_layout') self.footer_font_label = QtWidgets.QLabel(self.footer_area_page) self.footer_font_label.setObjectName('FooterFontLabel') self.footer_font_combo_box = QtWidgets.QFontComboBox(self.footer_area_page) self.footer_font_combo_box.setObjectName('footer_font_combo_box') self.footer_area_layout.addRow(self.footer_font_label, self.footer_font_combo_box) self.footer_color_label = QtWidgets.QLabel(self.footer_area_page) self.footer_color_label.setObjectName('footer_color_label') self.footer_color_button = ColorButton(self.footer_area_page) self.footer_color_button.setObjectName('footer_color_button') self.footer_area_layout.addRow(self.footer_color_label, self.footer_color_button) self.footer_size_label = QtWidgets.QLabel(self.footer_area_page) self.footer_size_label.setObjectName('footer_size_label') self.footer_size_spin_box = QtWidgets.QSpinBox(self.footer_area_page) self.footer_size_spin_box.setMaximum(999) self.footer_size_spin_box.setValue(10) 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, QtWidgets.QFormLayout.LabelRole, self.spacer) theme_wizard.addPage(self.footer_area_page) # Alignment Page self.alignment_page = QtWidgets.QWizardPage() self.alignment_page.setObjectName('alignment_page') self.alignment_layout = QtWidgets.QFormLayout(self.alignment_page) self.alignment_layout.setObjectName('alignment_layout') self.horizontal_label = QtWidgets.QLabel(self.alignment_page) self.horizontal_label.setObjectName('horizontal_label') self.horizontal_combo_box = QtWidgets.QComboBox(self.alignment_page) self.horizontal_combo_box.addItems(['', '', '', '']) self.horizontal_combo_box.setObjectName('horizontal_combo_box') self.alignment_layout.addRow(self.horizontal_label, self.horizontal_combo_box) self.vertical_label, self.vertical_combo_box = create_valign_selection_widgets(self.alignment_page) self.vertical_label.setObjectName('vertical_label') self.vertical_combo_box.setObjectName('vertical_combo_box') self.alignment_layout.addRow(self.vertical_label, self.vertical_combo_box) self.transitions_label = QtWidgets.QLabel(self.alignment_page) self.transitions_label.setObjectName('transitions_label') self.transitions_check_box = QtWidgets.QCheckBox(self.alignment_page) self.transitions_check_box.setObjectName('transitions_check_box') self.alignment_layout.addRow(self.transitions_label, self.transitions_check_box) self.alignment_layout.setItem(3, QtWidgets.QFormLayout.LabelRole, self.spacer) theme_wizard.addPage(self.alignment_page) # Area Position Page self.area_position_page = QtWidgets.QWizardPage() self.area_position_page.setObjectName('area_position_page') self.area_position_layout = QtWidgets.QHBoxLayout(self.area_position_page) self.area_position_layout.setObjectName('area_position_layout') self.main_position_group_box = QtWidgets.QGroupBox(self.area_position_page) self.main_position_group_box.setObjectName('main_position_group_box') self.main_position_layout = QtWidgets.QFormLayout(self.main_position_group_box) self.main_position_layout.setObjectName('main_position_layout') self.main_position_check_box = QtWidgets.QCheckBox(self.main_position_group_box) self.main_position_check_box.setObjectName('main_position_check_box') self.main_position_layout.addRow(self.main_position_check_box) self.main_x_label = QtWidgets.QLabel(self.main_position_group_box) self.main_x_label.setObjectName('main_x_label') self.main_x_spin_box = QtWidgets.QSpinBox(self.main_position_group_box) self.main_x_spin_box.setMaximum(9999) self.main_x_spin_box.setObjectName('main_x_spin_box') self.main_position_layout.addRow(self.main_x_label, self.main_x_spin_box) self.main_y_label = QtWidgets.QLabel(self.main_position_group_box) self.main_y_label.setObjectName('main_y_label') self.main_y_spin_box = QtWidgets.QSpinBox(self.main_position_group_box) self.main_y_spin_box.setMaximum(9999) self.main_y_spin_box.setObjectName('main_y_spin_box') self.main_position_layout.addRow(self.main_y_label, self.main_y_spin_box) self.main_width_label = QtWidgets.QLabel(self.main_position_group_box) self.main_width_label.setObjectName('main_width_label') self.main_width_spin_box = QtWidgets.QSpinBox(self.main_position_group_box) self.main_width_spin_box.setMaximum(9999) self.main_width_spin_box.setObjectName('main_width_spin_box') self.main_position_layout.addRow(self.main_width_label, self.main_width_spin_box) self.main_height_label = QtWidgets.QLabel(self.main_position_group_box) self.main_height_label.setObjectName('main_height_label') self.main_height_spin_box = QtWidgets.QSpinBox(self.main_position_group_box) self.main_height_spin_box.setMaximum(9999) self.main_height_spin_box.setObjectName('main_height_spin_box') self.main_position_layout.addRow(self.main_height_label, self.main_height_spin_box) self.area_position_layout.addWidget(self.main_position_group_box) self.footer_position_group_box = QtWidgets.QGroupBox(self.area_position_page) self.footer_position_group_box.setObjectName('footer_position_group_box') self.footer_position_layout = QtWidgets.QFormLayout(self.footer_position_group_box) self.footer_position_layout.setObjectName('footer_position_layout') self.footer_position_check_box = QtWidgets.QCheckBox(self.footer_position_group_box) self.footer_position_check_box.setObjectName('footer_position_check_box') self.footer_position_layout.addRow(self.footer_position_check_box) self.footer_x_label = QtWidgets.QLabel(self.footer_position_group_box) self.footer_x_label.setObjectName('footer_x_label') self.footer_x_spin_box = QtWidgets.QSpinBox(self.footer_position_group_box) self.footer_x_spin_box.setMaximum(9999) self.footer_x_spin_box.setObjectName('footer_x_spin_box') self.footer_position_layout.addRow(self.footer_x_label, self.footer_x_spin_box) self.footer_y_label = QtWidgets.QLabel(self.footer_position_group_box) self.footer_y_label.setObjectName('footer_y_label') self.footer_y_spin_box = QtWidgets.QSpinBox(self.footer_position_group_box) self.footer_y_spin_box.setMaximum(9999) self.footer_y_spin_box.setObjectName('footer_y_spin_box') self.footer_position_layout.addRow(self.footer_y_label, self.footer_y_spin_box) self.footer_width_label = QtWidgets.QLabel(self.footer_position_group_box) self.footer_width_label.setObjectName('footer_width_label') self.footer_width_spin_box = QtWidgets.QSpinBox(self.footer_position_group_box) self.footer_width_spin_box.setMaximum(9999) self.footer_width_spin_box.setObjectName('footer_width_spin_box') self.footer_position_layout.addRow(self.footer_width_label, self.footer_width_spin_box) self.footer_height_label = QtWidgets.QLabel(self.footer_position_group_box) self.footer_height_label.setObjectName('footer_height_label') self.footer_height_spin_box = QtWidgets.QSpinBox(self.footer_position_group_box) self.footer_height_spin_box.setMaximum(9999) 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) theme_wizard.addPage(self.area_position_page) # Preview Page self.preview_page = QtWidgets.QWizardPage() self.preview_page.setObjectName('preview_page') self.preview_layout = QtWidgets.QVBoxLayout(self.preview_page) self.preview_layout.setObjectName('preview_layout') self.theme_name_layout = QtWidgets.QFormLayout() self.theme_name_layout.setObjectName('theme_name_layout') self.theme_name_label = QtWidgets.QLabel(self.preview_page) self.theme_name_label.setObjectName('theme_name_label') self.theme_name_edit = QtWidgets.QLineEdit(self.preview_page) self.theme_name_edit.setValidator(QtGui.QRegExpValidator(QtCore.QRegExp(r'[^/\\?*|<>\[\]":<>+%]+'), self)) self.theme_name_edit.setObjectName('ThemeNameEdit') self.theme_name_layout.addRow(self.theme_name_label, self.theme_name_edit) self.preview_layout.addLayout(self.theme_name_layout) self.preview_area = QtWidgets.QWidget(self.preview_page) self.preview_area.setObjectName('PreviewArea') self.preview_area_layout = QtWidgets.QGridLayout(self.preview_area) self.preview_area_layout.setContentsMargins(0, 0, 0, 0) self.preview_area_layout.setColumnStretch(0, 1) self.preview_area_layout.setRowStretch(0, 1) self.preview_area_layout.setObjectName('preview_area_layout') self.preview_box_label = QtWidgets.QLabel(self.preview_area) self.preview_box_label.setFrameShape(QtWidgets.QFrame.Box) self.preview_box_label.setScaledContents(True) self.preview_box_label.setObjectName('preview_box_label') self.preview_area_layout.addWidget(self.preview_box_label) self.preview_layout.addWidget(self.preview_area) theme_wizard.addPage(self.preview_page) self.retranslateUi(theme_wizard) self.background_combo_box.currentIndexChanged.connect(self.background_stack.setCurrentIndex) self.outline_check_box.toggled.connect(self.outline_color_button.setEnabled) self.outline_check_box.toggled.connect(self.outline_size_spin_box.setEnabled) self.shadow_check_box.toggled.connect(self.shadow_color_button.setEnabled) self.shadow_check_box.toggled.connect(self.shadow_size_spin_box.setEnabled) self.main_position_check_box.toggled.connect(self.main_x_spin_box.setDisabled) self.main_position_check_box.toggled.connect(self.main_y_spin_box.setDisabled) self.main_position_check_box.toggled.connect(self.main_width_spin_box.setDisabled) self.main_position_check_box.toggled.connect(self.main_height_spin_box.setDisabled) self.footer_position_check_box.toggled.connect(self.footer_x_spin_box.setDisabled) self.footer_position_check_box.toggled.connect(self.footer_y_spin_box.setDisabled) self.footer_position_check_box.toggled.connect(self.footer_width_spin_box.setDisabled) self.footer_position_check_box.toggled.connect(self.footer_height_spin_box.setDisabled) def retranslateUi(self, theme_wizard): """ Translate the UI on the fly """ theme_wizard.setWindowTitle(translate('OpenLP.ThemeWizard', 'Theme Wizard')) self.title_label.setText('<span style="font-size:14pt; font-weight:600;">%s</span>' % translate('OpenLP.ThemeWizard', 'Welcome to the Theme Wizard')) self.information_label.setText( translate('OpenLP.ThemeWizard', 'This wizard will help you to create and edit your themes. Click the next ' 'button below to start the process by setting up your background.')) self.background_page.setTitle(translate('OpenLP.ThemeWizard', 'Set Up Background')) self.background_page.setSubTitle(translate('OpenLP.ThemeWizard', 'Set up your theme\'s background ' 'according to the parameters below.')) self.background_label.setText(translate('OpenLP.ThemeWizard', 'Background type:')) self.background_combo_box.setItemText(BackgroundType.Solid, translate('OpenLP.ThemeWizard', 'Solid color')) self.background_combo_box.setItemText(BackgroundType.Gradient, translate('OpenLP.ThemeWizard', 'Gradient')) self.background_combo_box.setItemText(BackgroundType.Image, UiStrings().Image) self.background_combo_box.setItemText(BackgroundType.Transparent, translate('OpenLP.ThemeWizard', 'Transparent')) self.color_label.setText(translate('OpenLP.ThemeWizard', 'color:')) self.gradient_start_label.setText(translate('OpenLP.ThemeWizard', 'Starting color:')) self.gradient_end_label.setText(translate('OpenLP.ThemeWizard', 'Ending color:')) self.gradient_type_label.setText(translate('OpenLP.ThemeWizard', 'Gradient:')) self.gradient_combo_box.setItemText(BackgroundGradientType.Horizontal, translate('OpenLP.ThemeWizard', 'Horizontal')) self.gradient_combo_box.setItemText(BackgroundGradientType.Vertical, translate('OpenLP.ThemeWizard', 'Vertical')) self.gradient_combo_box.setItemText(BackgroundGradientType.Circular, translate('OpenLP.ThemeWizard', 'Circular')) self.gradient_combo_box.setItemText(BackgroundGradientType.LeftTop, translate('OpenLP.ThemeWizard', 'Top Left - Bottom Right')) self.gradient_combo_box.setItemText(BackgroundGradientType.LeftBottom, translate('OpenLP.ThemeWizard', 'Bottom Left - Top Right')) self.image_color_label.setText(translate('OpenLP.ThemeWizard', 'Background color:')) self.image_label.setText('%s:' % UiStrings().Image) self.main_area_page.setTitle(translate('OpenLP.ThemeWizard', 'Main Area Font Details')) self.main_area_page.setSubTitle(translate('OpenLP.ThemeWizard', 'Define the font and display ' 'characteristics for the Display text')) self.main_font_label.setText(translate('OpenLP.ThemeWizard', 'Font:')) self.main_color_label.setText(translate('OpenLP.ThemeWizard', 'color:')) self.main_size_label.setText(translate('OpenLP.ThemeWizard', 'Size:')) self.main_size_spin_box.setSuffix(UiStrings().FontSizePtUnit) self.line_spacing_label.setText(translate('OpenLP.ThemeWizard', 'Line Spacing:')) self.line_spacing_spin_box.setSuffix(UiStrings().FontSizePtUnit) self.outline_check_box.setText(translate('OpenLP.ThemeWizard', '&Outline:')) self.outline_size_label.setText(translate('OpenLP.ThemeWizard', 'Size:')) self.outline_size_spin_box.setSuffix(UiStrings().FontSizePtUnit) self.shadow_check_box.setText(translate('OpenLP.ThemeWizard', '&Shadow:')) self.shadow_size_label.setText(translate('OpenLP.ThemeWizard', 'Size:')) self.shadow_size_spin_box.setSuffix(UiStrings().FontSizePtUnit) self.main_bold_check_box.setText(translate('OpenLP.ThemeWizard', 'Bold')) self.main_italics_check_box.setText(translate('OpenLP.ThemeWizard', 'Italic')) self.footer_area_page.setTitle(translate('OpenLP.ThemeWizard', 'Footer Area Font Details')) self.footer_area_page.setSubTitle(translate('OpenLP.ThemeWizard', 'Define the font and display ' 'characteristics for the Footer text')) self.footer_font_label.setText(translate('OpenLP.ThemeWizard', 'Font:')) self.footer_color_label.setText(translate('OpenLP.ThemeWizard', 'color:')) self.footer_size_label.setText(translate('OpenLP.ThemeWizard', 'Size:')) self.footer_size_spin_box.setSuffix(UiStrings().FontSizePtUnit) self.alignment_page.setTitle(translate('OpenLP.ThemeWizard', 'Text Formatting Details')) self.alignment_page.setSubTitle(translate('OpenLP.ThemeWizard', 'Allows additional display ' 'formatting information to be defined')) self.horizontal_label.setText(translate('OpenLP.ThemeWizard', 'Horizontal Align:')) self.horizontal_combo_box.setItemText(HorizontalType.Left, translate('OpenLP.ThemeWizard', 'Left')) self.horizontal_combo_box.setItemText(HorizontalType.Right, translate('OpenLP.ThemeWizard', 'Right')) self.horizontal_combo_box.setItemText(HorizontalType.Center, translate('OpenLP.ThemeWizard', 'Center')) self.horizontal_combo_box.setItemText(HorizontalType.Justify, translate('OpenLP.ThemeWizard', 'Justify')) self.transitions_label.setText(translate('OpenLP.ThemeWizard', 'Transitions:')) self.area_position_page.setTitle(translate('OpenLP.ThemeWizard', 'Output Area Locations')) self.area_position_page.setSubTitle(translate('OpenLP.ThemeWizard', 'Allows you to change and move the' ' Main and Footer areas.')) self.main_position_group_box.setTitle(translate('OpenLP.ThemeWizard', '&Main Area')) self.main_position_check_box.setText(translate('OpenLP.ThemeWizard', '&Use default location')) self.main_x_label.setText(translate('OpenLP.ThemeWizard', 'X position:')) self.main_x_spin_box.setSuffix(translate('OpenLP.ThemeWizard', 'px')) self.main_y_spin_box.setSuffix(translate('OpenLP.ThemeWizard', 'px')) self.main_y_label.setText(translate('OpenLP.ThemeWizard', 'Y position:')) self.main_width_spin_box.setSuffix(translate('OpenLP.ThemeWizard', 'px')) self.main_width_label.setText(translate('OpenLP.ThemeWizard', 'Width:')) self.main_height_spin_box.setSuffix(translate('OpenLP.ThemeWizard', 'px')) self.main_height_label.setText(translate('OpenLP.ThemeWizard', 'Height:')) self.footer_position_group_box.setTitle(translate('OpenLP.ThemeWizard', '&Footer Area')) self.footer_x_label.setText(translate('OpenLP.ThemeWizard', 'X position:')) self.footer_x_spin_box.setSuffix(translate('OpenLP.ThemeWizard', 'px')) self.footer_y_label.setText(translate('OpenLP.ThemeWizard', 'Y position:')) self.footer_y_spin_box.setSuffix(translate('OpenLP.ThemeWizard', 'px')) self.footer_width_label.setText(translate('OpenLP.ThemeWizard', 'Width:')) self.footer_width_spin_box.setSuffix(translate('OpenLP.ThemeWizard', 'px')) 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')) theme_wizard.setOption(QtWidgets.QWizard.HaveCustomButton1, False) theme_wizard.setButtonText(QtWidgets.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:')) # Align all QFormLayouts towards each other. label_width = max(self.background_label.minimumSizeHint().width(), self.horizontal_label.minimumSizeHint().width()) self.spacer.changeSize(label_width, 0, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
def setupUi(self, theme_wizard): """ Set up the UI """ theme_wizard.setObjectName('OpenLP.ThemeWizard') theme_wizard.setWindowIcon(build_icon(u':/icon/openlp-logo.svg')) theme_wizard.setModal(True) theme_wizard.setOptions(QtWidgets.QWizard.IndependentPages | QtWidgets.QWizard.NoBackButtonOnStartPage | QtWidgets.QWizard.HaveCustomButton1) theme_wizard.setFixedWidth(640) if is_macosx(): theme_wizard.setPixmap(QtWidgets.QWizard.BackgroundPixmap, QtGui.QPixmap(':/wizards/openlp-osx-wizard.png')) else: theme_wizard.setWizardStyle(QtWidgets.QWizard.ModernStyle) self.spacer = QtWidgets.QSpacerItem(10, 0, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum) # Welcome Page add_welcome_page(theme_wizard, ':/wizards/wizard_createtheme.bmp') # Background Page self.background_page = QtWidgets.QWizardPage() self.background_page.setObjectName('background_page') self.background_layout = QtWidgets.QVBoxLayout(self.background_page) self.background_layout.setObjectName('background_layout') self.background_type_layout = QtWidgets.QFormLayout() self.background_type_layout.setObjectName('background_type_layout') self.background_label = QtWidgets.QLabel(self.background_page) self.background_label.setObjectName('background_label') self.background_combo_box = QtWidgets.QComboBox(self.background_page) self.background_combo_box.addItems(['', '', '', '']) self.background_combo_box.setObjectName('background_combo_box') self.background_type_layout.addRow(self.background_label, self.background_combo_box) self.background_type_layout.setItem(1, QtWidgets.QFormLayout.LabelRole, self.spacer) self.background_layout.addLayout(self.background_type_layout) self.background_stack = QtWidgets.QStackedLayout() self.background_stack.setObjectName('background_stack') self.color_widget = QtWidgets.QWidget(self.background_page) self.color_widget.setObjectName('color_widget') self.color_layout = QtWidgets.QFormLayout(self.color_widget) self.color_layout.setContentsMargins(0, 0, 0, 0) self.color_layout.setObjectName('color_layout') self.color_label = QtWidgets.QLabel(self.color_widget) self.color_label.setObjectName('color_label') self.color_button = ColorButton(self.color_widget) self.color_button.setObjectName('color_button') self.color_layout.addRow(self.color_label, self.color_button) self.color_layout.setItem(1, QtWidgets.QFormLayout.LabelRole, self.spacer) self.background_stack.addWidget(self.color_widget) self.gradient_widget = QtWidgets.QWidget(self.background_page) self.gradient_widget.setObjectName('Gradient_widget') self.gradient_layout = QtWidgets.QFormLayout(self.gradient_widget) self.gradient_layout.setContentsMargins(0, 0, 0, 0) self.gradient_layout.setObjectName('gradient_layout') self.gradient_start_label = QtWidgets.QLabel(self.gradient_widget) self.gradient_start_label.setObjectName('gradient_start_label') self.gradient_start_button = ColorButton(self.gradient_widget) self.gradient_start_button.setObjectName('gradient_start_button') self.gradient_layout.addRow(self.gradient_start_label, self.gradient_start_button) self.gradient_end_label = QtWidgets.QLabel(self.gradient_widget) self.gradient_end_label.setObjectName('gradient_end_label') self.gradient_end_button = ColorButton(self.gradient_widget) self.gradient_end_button.setObjectName('gradient_end_button') self.gradient_layout.addRow(self.gradient_end_label, self.gradient_end_button) self.gradient_type_label = QtWidgets.QLabel(self.gradient_widget) self.gradient_type_label.setObjectName('Gradient_type_label') self.gradient_combo_box = QtWidgets.QComboBox(self.gradient_widget) self.gradient_combo_box.setObjectName('gradient_combo_box') self.gradient_combo_box.addItems(['', '', '', '', '']) self.gradient_layout.addRow(self.gradient_type_label, self.gradient_combo_box) self.gradient_layout.setItem(3, QtWidgets.QFormLayout.LabelRole, self.spacer) self.background_stack.addWidget(self.gradient_widget) self.image_widget = QtWidgets.QWidget(self.background_page) self.image_widget.setObjectName('image_widget') self.image_layout = QtWidgets.QFormLayout(self.image_widget) self.image_layout.setContentsMargins(0, 0, 0, 0) self.image_layout.setObjectName('image_layout') self.image_color_label = QtWidgets.QLabel(self.color_widget) self.image_color_label.setObjectName('image_color_label') self.image_color_button = ColorButton(self.color_widget) self.image_color_button.setObjectName('image_color_button') self.image_layout.addRow(self.image_color_label, self.image_color_button) self.image_label = QtWidgets.QLabel(self.image_widget) self.image_label.setObjectName('image_label') self.image_file_layout = QtWidgets.QHBoxLayout() self.image_file_layout.setObjectName('image_file_layout') self.image_file_edit = QtWidgets.QLineEdit(self.image_widget) self.image_file_edit.setObjectName('image_file_edit') self.image_file_layout.addWidget(self.image_file_edit) self.image_browse_button = QtWidgets.QToolButton(self.image_widget) self.image_browse_button.setObjectName('image_browse_button') self.image_browse_button.setIcon(build_icon(':/general/general_open.png')) self.image_file_layout.addWidget(self.image_browse_button) self.image_layout.addRow(self.image_label, self.image_file_layout) self.image_layout.setItem(2, QtWidgets.QFormLayout.LabelRole, self.spacer) self.background_stack.addWidget(self.image_widget) self.transparent_widget = QtWidgets.QWidget(self.background_page) self.transparent_widget.setObjectName('TransparentWidget') self.transparent_layout = QtWidgets.QFormLayout(self.transparent_widget) self.transparent_layout.setContentsMargins(0, 0, 0, 0) self.transparent_layout.setObjectName('Transparent_layout') self.background_stack.addWidget(self.transparent_widget) self.background_layout.addLayout(self.background_stack) theme_wizard.addPage(self.background_page) # Main Area Page self.main_area_page = QtWidgets.QWizardPage() self.main_area_page.setObjectName('main_area_page') self.main_area_layout = QtWidgets.QFormLayout(self.main_area_page) self.main_area_layout.setObjectName('main_area_layout') self.main_font_label = QtWidgets.QLabel(self.main_area_page) self.main_font_label.setObjectName('main_font_label') self.main_font_combo_box = QtWidgets.QFontComboBox(self.main_area_page) self.main_font_combo_box.setObjectName('main_font_combo_box') self.main_area_layout.addRow(self.main_font_label, self.main_font_combo_box) self.main_color_label = QtWidgets.QLabel(self.main_area_page) self.main_color_label.setObjectName('main_color_label') self.main_properties_layout = QtWidgets.QHBoxLayout() self.main_properties_layout.setObjectName('main_properties_layout') self.main_color_button = ColorButton(self.main_area_page) self.main_color_button.setObjectName('main_color_button') self.main_properties_layout.addWidget(self.main_color_button) self.main_properties_layout.addSpacing(20) self.main_bold_check_box = QtWidgets.QCheckBox(self.main_area_page) self.main_bold_check_box.setObjectName('main_bold_check_box') self.main_properties_layout.addWidget(self.main_bold_check_box) self.main_properties_layout.addSpacing(20) self.main_italics_check_box = QtWidgets.QCheckBox(self.main_area_page) self.main_italics_check_box.setObjectName('MainItalicsCheckBox') self.main_properties_layout.addWidget(self.main_italics_check_box) self.main_area_layout.addRow(self.main_color_label, self.main_properties_layout) self.main_size_label = QtWidgets.QLabel(self.main_area_page) self.main_size_label.setObjectName('main_size_label') self.main_size_layout = QtWidgets.QHBoxLayout() self.main_size_layout.setObjectName('main_size_layout') self.main_size_spin_box = QtWidgets.QSpinBox(self.main_area_page) self.main_size_spin_box.setMaximum(999) self.main_size_spin_box.setValue(16) self.main_size_spin_box.setObjectName('main_size_spin_box') self.main_size_layout.addWidget(self.main_size_spin_box) self.main_line_count_label = QtWidgets.QLabel(self.main_area_page) self.main_line_count_label.setObjectName('main_line_count_label') self.main_size_layout.addWidget(self.main_line_count_label) self.main_area_layout.addRow(self.main_size_label, self.main_size_layout) self.line_spacing_label = QtWidgets.QLabel(self.main_area_page) self.line_spacing_label.setObjectName('line_spacing_label') self.line_spacing_spin_box = QtWidgets.QSpinBox(self.main_area_page) self.line_spacing_spin_box.setMinimum(-250) self.line_spacing_spin_box.setMaximum(250) self.line_spacing_spin_box.setObjectName('line_spacing_spin_box') self.main_area_layout.addRow(self.line_spacing_label, self.line_spacing_spin_box) self.outline_check_box = QtWidgets.QCheckBox(self.main_area_page) self.outline_check_box.setObjectName('outline_check_box') self.outline_layout = QtWidgets.QHBoxLayout() self.outline_layout.setObjectName('outline_layout') self.outline_color_button = ColorButton(self.main_area_page) self.outline_color_button.setEnabled(False) self.outline_color_button.setObjectName('Outline_color_button') self.outline_layout.addWidget(self.outline_color_button) self.outline_layout.addSpacing(20) self.outline_size_label = QtWidgets.QLabel(self.main_area_page) self.outline_size_label.setObjectName('outline_size_label') self.outline_layout.addWidget(self.outline_size_label) self.outline_size_spin_box = QtWidgets.QSpinBox(self.main_area_page) self.outline_size_spin_box.setEnabled(False) self.outline_size_spin_box.setObjectName('outline_size_spin_box') self.outline_layout.addWidget(self.outline_size_spin_box) self.main_area_layout.addRow(self.outline_check_box, self.outline_layout) self.shadow_check_box = QtWidgets.QCheckBox(self.main_area_page) self.shadow_check_box.setObjectName('shadow_check_box') self.shadow_layout = QtWidgets.QHBoxLayout() self.shadow_layout.setObjectName('shadow_layout') self.shadow_color_button = ColorButton(self.main_area_page) self.shadow_color_button.setEnabled(False) self.shadow_color_button.setObjectName('shadow_color_button') self.shadow_layout.addWidget(self.shadow_color_button) self.shadow_layout.addSpacing(20) self.shadow_size_label = QtWidgets.QLabel(self.main_area_page) self.shadow_size_label.setObjectName('shadow_size_label') self.shadow_layout.addWidget(self.shadow_size_label) self.shadow_size_spin_box = QtWidgets.QSpinBox(self.main_area_page) self.shadow_size_spin_box.setEnabled(False) 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) theme_wizard.addPage(self.main_area_page) # Footer Area Page self.footer_area_page = QtWidgets.QWizardPage() self.footer_area_page.setObjectName('footer_area_page') self.footer_area_layout = QtWidgets.QFormLayout(self.footer_area_page) self.footer_area_layout.setObjectName('footer_area_layout') self.footer_font_label = QtWidgets.QLabel(self.footer_area_page) self.footer_font_label.setObjectName('FooterFontLabel') self.footer_font_combo_box = QtWidgets.QFontComboBox(self.footer_area_page) self.footer_font_combo_box.setObjectName('footer_font_combo_box') self.footer_area_layout.addRow(self.footer_font_label, self.footer_font_combo_box) self.footer_color_label = QtWidgets.QLabel(self.footer_area_page) self.footer_color_label.setObjectName('footer_color_label') self.footer_color_button = ColorButton(self.footer_area_page) self.footer_color_button.setObjectName('footer_color_button') self.footer_area_layout.addRow(self.footer_color_label, self.footer_color_button) self.footer_size_label = QtWidgets.QLabel(self.footer_area_page) self.footer_size_label.setObjectName('footer_size_label') self.footer_size_spin_box = QtWidgets.QSpinBox(self.footer_area_page) self.footer_size_spin_box.setMaximum(999) self.footer_size_spin_box.setValue(10) 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, QtWidgets.QFormLayout.LabelRole, self.spacer) theme_wizard.addPage(self.footer_area_page) # Alignment Page self.alignment_page = QtWidgets.QWizardPage() self.alignment_page.setObjectName('alignment_page') self.alignment_layout = QtWidgets.QFormLayout(self.alignment_page) self.alignment_layout.setObjectName('alignment_layout') self.horizontal_label = QtWidgets.QLabel(self.alignment_page) self.horizontal_label.setObjectName('horizontal_label') self.horizontal_combo_box = QtWidgets.QComboBox(self.alignment_page) self.horizontal_combo_box.addItems(['', '', '', '']) self.horizontal_combo_box.setObjectName('horizontal_combo_box') self.alignment_layout.addRow(self.horizontal_label, self.horizontal_combo_box) self.vertical_label, self.vertical_combo_box = create_valign_selection_widgets(self.alignment_page) self.vertical_label.setObjectName('vertical_label') self.vertical_combo_box.setObjectName('vertical_combo_box') self.alignment_layout.addRow(self.vertical_label, self.vertical_combo_box) self.transitions_label = QtWidgets.QLabel(self.alignment_page) self.transitions_label.setObjectName('transitions_label') self.transitions_check_box = QtWidgets.QCheckBox(self.alignment_page) self.transitions_check_box.setObjectName('transitions_check_box') self.alignment_layout.addRow(self.transitions_label, self.transitions_check_box) self.alignment_layout.setItem(3, QtWidgets.QFormLayout.LabelRole, self.spacer) theme_wizard.addPage(self.alignment_page) # Area Position Page self.area_position_page = QtWidgets.QWizardPage() self.area_position_page.setObjectName('area_position_page') self.area_position_layout = QtWidgets.QHBoxLayout(self.area_position_page) self.area_position_layout.setObjectName('area_position_layout') self.main_position_group_box = QtWidgets.QGroupBox(self.area_position_page) self.main_position_group_box.setObjectName('main_position_group_box') self.main_position_layout = QtWidgets.QFormLayout(self.main_position_group_box) self.main_position_layout.setObjectName('main_position_layout') self.main_position_check_box = QtWidgets.QCheckBox(self.main_position_group_box) self.main_position_check_box.setObjectName('main_position_check_box') self.main_position_layout.addRow(self.main_position_check_box) self.main_x_label = QtWidgets.QLabel(self.main_position_group_box) self.main_x_label.setObjectName('main_x_label') self.main_x_spin_box = QtWidgets.QSpinBox(self.main_position_group_box) self.main_x_spin_box.setMaximum(9999) self.main_x_spin_box.setObjectName('main_x_spin_box') self.main_position_layout.addRow(self.main_x_label, self.main_x_spin_box) self.main_y_label = QtWidgets.QLabel(self.main_position_group_box) self.main_y_label.setObjectName('main_y_label') self.main_y_spin_box = QtWidgets.QSpinBox(self.main_position_group_box) self.main_y_spin_box.setMaximum(9999) self.main_y_spin_box.setObjectName('main_y_spin_box') self.main_position_layout.addRow(self.main_y_label, self.main_y_spin_box) self.main_width_label = QtWidgets.QLabel(self.main_position_group_box) self.main_width_label.setObjectName('main_width_label') self.main_width_spin_box = QtWidgets.QSpinBox(self.main_position_group_box) self.main_width_spin_box.setMaximum(9999) self.main_width_spin_box.setObjectName('main_width_spin_box') self.main_position_layout.addRow(self.main_width_label, self.main_width_spin_box) self.main_height_label = QtWidgets.QLabel(self.main_position_group_box) self.main_height_label.setObjectName('main_height_label') self.main_height_spin_box = QtWidgets.QSpinBox(self.main_position_group_box) self.main_height_spin_box.setMaximum(9999) self.main_height_spin_box.setObjectName('main_height_spin_box') self.main_position_layout.addRow(self.main_height_label, self.main_height_spin_box) self.area_position_layout.addWidget(self.main_position_group_box) self.footer_position_group_box = QtWidgets.QGroupBox(self.area_position_page) self.footer_position_group_box.setObjectName('footer_position_group_box') self.footer_position_layout = QtWidgets.QFormLayout(self.footer_position_group_box) self.footer_position_layout.setObjectName('footer_position_layout') self.footer_position_check_box = QtWidgets.QCheckBox(self.footer_position_group_box) self.footer_position_check_box.setObjectName('footer_position_check_box') self.footer_position_layout.addRow(self.footer_position_check_box) self.footer_x_label = QtWidgets.QLabel(self.footer_position_group_box) self.footer_x_label.setObjectName('footer_x_label') self.footer_x_spin_box = QtWidgets.QSpinBox(self.footer_position_group_box) self.footer_x_spin_box.setMaximum(9999) self.footer_x_spin_box.setObjectName('footer_x_spin_box') self.footer_position_layout.addRow(self.footer_x_label, self.footer_x_spin_box) self.footer_y_label = QtWidgets.QLabel(self.footer_position_group_box) self.footer_y_label.setObjectName('footer_y_label') self.footer_y_spin_box = QtWidgets.QSpinBox(self.footer_position_group_box) self.footer_y_spin_box.setMaximum(9999) self.footer_y_spin_box.setObjectName('footer_y_spin_box') self.footer_position_layout.addRow(self.footer_y_label, self.footer_y_spin_box) self.footer_width_label = QtWidgets.QLabel(self.footer_position_group_box) self.footer_width_label.setObjectName('footer_width_label') self.footer_width_spin_box = QtWidgets.QSpinBox(self.footer_position_group_box) self.footer_width_spin_box.setMaximum(9999) self.footer_width_spin_box.setObjectName('footer_width_spin_box') self.footer_position_layout.addRow(self.footer_width_label, self.footer_width_spin_box) self.footer_height_label = QtWidgets.QLabel(self.footer_position_group_box) self.footer_height_label.setObjectName('footer_height_label') self.footer_height_spin_box = QtWidgets.QSpinBox(self.footer_position_group_box) self.footer_height_spin_box.setMaximum(9999) 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) theme_wizard.addPage(self.area_position_page) # Preview Page self.preview_page = QtWidgets.QWizardPage() self.preview_page.setObjectName('preview_page') self.preview_layout = QtWidgets.QVBoxLayout(self.preview_page) self.preview_layout.setObjectName('preview_layout') self.theme_name_layout = QtWidgets.QFormLayout() self.theme_name_layout.setObjectName('theme_name_layout') self.theme_name_label = QtWidgets.QLabel(self.preview_page) self.theme_name_label.setObjectName('theme_name_label') self.theme_name_edit = QtWidgets.QLineEdit(self.preview_page) self.theme_name_edit.setValidator(QtGui.QRegExpValidator(QtCore.QRegExp(r'[^/\\?*|<>\[\]":<>+%]+'), self)) self.theme_name_edit.setObjectName('ThemeNameEdit') self.theme_name_layout.addRow(self.theme_name_label, self.theme_name_edit) self.preview_layout.addLayout(self.theme_name_layout) self.preview_area = QtWidgets.QWidget(self.preview_page) self.preview_area.setObjectName('PreviewArea') self.preview_area_layout = QtWidgets.QGridLayout(self.preview_area) self.preview_area_layout.setContentsMargins(0, 0, 0, 0) self.preview_area_layout.setColumnStretch(0, 1) self.preview_area_layout.setRowStretch(0, 1) self.preview_area_layout.setObjectName('preview_area_layout') self.preview_box_label = QtWidgets.QLabel(self.preview_area) self.preview_box_label.setFrameShape(QtWidgets.QFrame.Box) self.preview_box_label.setScaledContents(True) self.preview_box_label.setObjectName('preview_box_label') self.preview_area_layout.addWidget(self.preview_box_label) self.preview_layout.addWidget(self.preview_area) theme_wizard.addPage(self.preview_page) self.retranslateUi(theme_wizard) self.background_combo_box.currentIndexChanged.connect(self.background_stack.setCurrentIndex) self.outline_check_box.toggled.connect(self.outline_color_button.setEnabled) self.outline_check_box.toggled.connect(self.outline_size_spin_box.setEnabled) self.shadow_check_box.toggled.connect(self.shadow_color_button.setEnabled) self.shadow_check_box.toggled.connect(self.shadow_size_spin_box.setEnabled) self.main_position_check_box.toggled.connect(self.main_x_spin_box.setDisabled) self.main_position_check_box.toggled.connect(self.main_y_spin_box.setDisabled) self.main_position_check_box.toggled.connect(self.main_width_spin_box.setDisabled) self.main_position_check_box.toggled.connect(self.main_height_spin_box.setDisabled) self.footer_position_check_box.toggled.connect(self.footer_x_spin_box.setDisabled) self.footer_position_check_box.toggled.connect(self.footer_y_spin_box.setDisabled) self.footer_position_check_box.toggled.connect(self.footer_width_spin_box.setDisabled) self.footer_position_check_box.toggled.connect(self.footer_height_spin_box.setDisabled)
class PlayerTab(SettingsTab): """ MediaTab is the Media settings tab in the settings dialog. """ def __init__(self, parent): """ Constructor """ self.media_players = Registry().get('media_controller').media_players self.saved_used_players = None self.icon_path = ':/media/multimedia-player.png' player_translated = translate('OpenLP.PlayerTab', 'Players') super(PlayerTab, self).__init__(parent, 'Players', player_translated) def setupUi(self): """ Set up the UI """ self.setObjectName('MediaTab') super(PlayerTab, self).setupUi() self.background_color_group_box = QtGui.QGroupBox(self.left_column) self.background_color_group_box.setObjectName('background_color_group_box') self.form_layout = QtGui.QFormLayout(self.background_color_group_box) self.form_layout.setObjectName('form_layout') self.color_layout = QtGui.QHBoxLayout() self.background_color_label = QtGui.QLabel(self.background_color_group_box) self.background_color_label.setObjectName('background_color_label') self.color_layout.addWidget(self.background_color_label) self.background_color_button = ColorButton(self.background_color_group_box) self.background_color_button.setObjectName('background_color_button') self.color_layout.addWidget(self.background_color_button) self.form_layout.addRow(self.color_layout) self.information_label = QtGui.QLabel(self.background_color_group_box) self.information_label.setObjectName('information_label') self.information_label.setWordWrap(True) self.form_layout.addRow(self.information_label) self.left_layout.addWidget(self.background_color_group_box) self.right_column.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred) self.media_player_group_box = QtGui.QGroupBox(self.left_column) self.media_player_group_box.setObjectName('media_player_group_box') self.media_player_layout = QtGui.QVBoxLayout(self.media_player_group_box) self.media_player_layout.setObjectName('media_player_layout') self.player_check_boxes = {} self.left_layout.addWidget(self.media_player_group_box) self.player_order_group_box = QtGui.QGroupBox(self.left_column) self.player_order_group_box.setObjectName('player_order_group_box') self.player_order_layout = QtGui.QHBoxLayout(self.player_order_group_box) self.player_order_layout.setObjectName('player_order_layout') self.player_order_list_widget = QtGui.QListWidget(self.player_order_group_box) size_policy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) size_policy.setHorizontalStretch(0) size_policy.setVerticalStretch(0) size_policy.setHeightForWidth(self.player_order_list_widget.sizePolicy().hasHeightForWidth()) self.player_order_list_widget.setSizePolicy(size_policy) self.player_order_list_widget.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded) self.player_order_list_widget.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.player_order_list_widget.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers) self.player_order_list_widget.setObjectName('player_order_list_widget') self.player_order_layout.addWidget(self.player_order_list_widget) self.ordering_button_layout = QtGui.QVBoxLayout() self.ordering_button_layout.setObjectName('ordering_button_layout') self.ordering_button_layout.addStretch(1) self.ordering_up_button = create_button(self, 'ordering_up_button', role='up', click=self.on_up_button_clicked) self.ordering_down_button = create_button(self, 'ordering_down_button', role='down', click=self.on_down_button_clicked) self.ordering_button_layout.addWidget(self.ordering_up_button) self.ordering_button_layout.addWidget(self.ordering_down_button) self.ordering_button_layout.addStretch(1) self.player_order_layout.addLayout(self.ordering_button_layout) self.left_layout.addWidget(self.player_order_group_box) self.left_layout.addStretch() self.right_layout.addStretch() # Signals and slots self.background_color_button.colorChanged.connect(self.on_background_color_changed) def retranslateUi(self): """ Translate the UI on the fly """ self.media_player_group_box.setTitle(translate('OpenLP.PlayerTab', 'Available Media Players')) self.player_order_group_box.setTitle(translate('OpenLP.PlayerTab', 'Player Search Order')) self.background_color_group_box.setTitle(UiStrings().BackgroundColor) self.background_color_label.setText(UiStrings().DefaultColor) self.information_label.setText(translate('OpenLP.PlayerTab', 'Visible background for videos with aspect ratio different to screen.')) self.retranslate_players() def on_background_color_changed(self, color): """ Set the background color """ self.background_color = color def on_player_check_box_changed(self, check_state): """ Add or remove players depending on their status """ player = self.sender().player_name if check_state == QtCore.Qt.Checked: if player not in self.used_players: self.used_players.append(player) else: if player in self.used_players: self.used_players.remove(player) self.update_player_list() def update_player_list(self): """ Update the list of media players """ self.player_order_list_widget.clear() for player in self.used_players: if player in list(self.player_check_boxes.keys()): if len(self.used_players) == 1: # At least one media player has to stay active self.player_check_boxes['%s' % player].setEnabled(False) else: self.player_check_boxes['%s' % player].setEnabled(True) self.player_order_list_widget.addItem(self.media_players[str(player)].original_name) def on_up_button_clicked(self): """ Move a media player up in the order """ row = self.player_order_list_widget.currentRow() if row <= 0: return item = self.player_order_list_widget.takeItem(row) self.player_order_list_widget.insertItem(row - 1, item) self.player_order_list_widget.setCurrentRow(row - 1) self.used_players.insert(row - 1, self.used_players.pop(row)) def on_down_button_clicked(self): """ Move a media player down in the order """ row = self.player_order_list_widget.currentRow() if row == -1 or row > self.player_order_list_widget.count() - 1: return item = self.player_order_list_widget.takeItem(row) self.player_order_list_widget.insertItem(row + 1, item) self.player_order_list_widget.setCurrentRow(row + 1) self.used_players.insert(row + 1, self.used_players.pop(row)) def load(self): """ Load the settings """ if self.saved_used_players: self.used_players = self.saved_used_players self.used_players = get_media_players()[0] self.saved_used_players = self.used_players settings = Settings() settings.beginGroup(self.settings_section) self.update_player_list() self.background_color = settings.value('background color') self.initial_color = self.background_color settings.endGroup() self.background_color_button.color = self.background_color def save(self): """ Save the settings """ settings = Settings() settings.beginGroup(self.settings_section) settings.setValue('background color', self.background_color) settings.endGroup() old_players, override_player = get_media_players() if self.used_players != old_players: # clean old Media stuff set_media_players(self.used_players, override_player) self.settings_form.register_post_process('mediaitem_suffix_reset') self.settings_form.register_post_process('mediaitem_media_rebuild') self.settings_form.register_post_process('config_screen_changed') def post_set_up(self): """ Late setup for players as the MediaController has to be initialised first. """ for key, player in self.media_players.items(): player = self.media_players[key] checkbox = MediaQCheckBox(self.media_player_group_box) checkbox.setEnabled(player.available) checkbox.setObjectName(player.name + '_check_box') checkbox.setToolTip(player.get_info()) checkbox.set_player_name(player.name) self.player_check_boxes[player.name] = checkbox checkbox.stateChanged.connect(self.on_player_check_box_changed) self.media_player_layout.addWidget(checkbox) if player.available and player.name in self.used_players: checkbox.setChecked(True) else: checkbox.setChecked(False) self.update_player_list() self.retranslate_players() def retranslate_players(self): """ Translations for players is dependent on their setup as well """ for key in self.media_players and self.player_check_boxes: player = self.media_players[key] checkbox = self.player_check_boxes[player.name] checkbox.set_player_name(player.name) if player.available: checkbox.setText(player.display_name) else: checkbox.setText(translate('OpenLP.PlayerTab', '%s (unavailable)') % player.display_name)
def setupUi(self): """ Set up the UI """ self.setObjectName('MediaTab') super(PlayerTab, self).setupUi() self.background_color_group_box = QtGui.QGroupBox(self.left_column) self.background_color_group_box.setObjectName('background_color_group_box') self.form_layout = QtGui.QFormLayout(self.background_color_group_box) self.form_layout.setObjectName('form_layout') self.color_layout = QtGui.QHBoxLayout() self.background_color_label = QtGui.QLabel(self.background_color_group_box) self.background_color_label.setObjectName('background_color_label') self.color_layout.addWidget(self.background_color_label) self.background_color_button = ColorButton(self.background_color_group_box) self.background_color_button.setObjectName('background_color_button') self.color_layout.addWidget(self.background_color_button) self.form_layout.addRow(self.color_layout) self.information_label = QtGui.QLabel(self.background_color_group_box) self.information_label.setObjectName('information_label') self.information_label.setWordWrap(True) self.form_layout.addRow(self.information_label) self.left_layout.addWidget(self.background_color_group_box) self.right_column.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred) self.media_player_group_box = QtGui.QGroupBox(self.left_column) self.media_player_group_box.setObjectName('media_player_group_box') self.media_player_layout = QtGui.QVBoxLayout(self.media_player_group_box) self.media_player_layout.setObjectName('media_player_layout') self.player_check_boxes = {} self.left_layout.addWidget(self.media_player_group_box) self.player_order_group_box = QtGui.QGroupBox(self.left_column) self.player_order_group_box.setObjectName('player_order_group_box') self.player_order_layout = QtGui.QHBoxLayout(self.player_order_group_box) self.player_order_layout.setObjectName('player_order_layout') self.player_order_list_widget = QtGui.QListWidget(self.player_order_group_box) size_policy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) size_policy.setHorizontalStretch(0) size_policy.setVerticalStretch(0) size_policy.setHeightForWidth(self.player_order_list_widget.sizePolicy().hasHeightForWidth()) self.player_order_list_widget.setSizePolicy(size_policy) self.player_order_list_widget.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded) self.player_order_list_widget.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.player_order_list_widget.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers) self.player_order_list_widget.setObjectName('player_order_list_widget') self.player_order_layout.addWidget(self.player_order_list_widget) self.ordering_button_layout = QtGui.QVBoxLayout() self.ordering_button_layout.setObjectName('ordering_button_layout') self.ordering_button_layout.addStretch(1) self.ordering_up_button = create_button(self, 'ordering_up_button', role='up', click=self.on_up_button_clicked) self.ordering_down_button = create_button(self, 'ordering_down_button', role='down', click=self.on_down_button_clicked) self.ordering_button_layout.addWidget(self.ordering_up_button) self.ordering_button_layout.addWidget(self.ordering_down_button) self.ordering_button_layout.addStretch(1) self.player_order_layout.addLayout(self.ordering_button_layout) self.left_layout.addWidget(self.player_order_group_box) self.left_layout.addStretch() self.right_layout.addStretch() # Signals and slots self.background_color_button.colorChanged.connect(self.on_background_color_changed)
def setupUi(self): """ Configure the UI elements for the tab. """ self.setObjectName('AdvancedTab') super(AdvancedTab, self).setupUi() self.ui_group_box = QtGui.QGroupBox(self.left_column) self.ui_group_box.setObjectName('ui_group_box') self.ui_layout = QtGui.QFormLayout(self.ui_group_box) self.ui_layout.setObjectName('ui_layout') self.recent_label = QtGui.QLabel(self.ui_group_box) self.recent_label.setObjectName('recent_label') self.recent_spin_box = QtGui.QSpinBox(self.ui_group_box) self.recent_spin_box.setObjectName('recent_spin_box') self.recent_spin_box.setMinimum(0) self.ui_layout.addRow(self.recent_label, self.recent_spin_box) self.media_plugin_check_box = QtGui.QCheckBox(self.ui_group_box) self.media_plugin_check_box.setObjectName('media_plugin_check_box') self.ui_layout.addRow(self.media_plugin_check_box) self.double_click_live_check_box = QtGui.QCheckBox(self.ui_group_box) self.double_click_live_check_box.setObjectName('double_click_live_check_box') self.ui_layout.addRow(self.double_click_live_check_box) self.single_click_preview_check_box = QtGui.QCheckBox(self.ui_group_box) self.single_click_preview_check_box.setObjectName('single_click_preview_check_box') self.ui_layout.addRow(self.single_click_preview_check_box) self.expand_service_item_check_box = QtGui.QCheckBox(self.ui_group_box) self.expand_service_item_check_box.setObjectName('expand_service_item_check_box') self.ui_layout.addRow(self.expand_service_item_check_box) self.enable_auto_close_check_box = QtGui.QCheckBox(self.ui_group_box) self.enable_auto_close_check_box.setObjectName('enable_auto_close_check_box') self.ui_layout.addRow(self.enable_auto_close_check_box) self.left_layout.addWidget(self.ui_group_box) # Default service name self.service_name_group_box = QtGui.QGroupBox(self.left_column) self.service_name_group_box.setObjectName('service_name_group_box') self.service_name_layout = QtGui.QFormLayout(self.service_name_group_box) self.service_name_check_box = QtGui.QCheckBox(self.service_name_group_box) self.service_name_check_box.setObjectName('service_name_check_box') self.service_name_layout.setObjectName('service_name_layout') self.service_name_layout.addRow(self.service_name_check_box) self.service_name_time_label = QtGui.QLabel(self.service_name_group_box) self.service_name_time_label.setObjectName('service_name_time_label') self.service_name_day = QtGui.QComboBox(self.service_name_group_box) self.service_name_day.addItems(['', '', '', '', '', '', '', '']) self.service_name_day.setObjectName('service_name_day') self.service_name_time = QtGui.QTimeEdit(self.service_name_group_box) self.service_name_time.setObjectName('service_name_time') self.service_name_time_layout = QtGui.QHBoxLayout() self.service_name_time_layout.setObjectName('service_name_time_layout') self.service_name_time_layout.addWidget(self.service_name_day) self.service_name_time_layout.addWidget(self.service_name_time) self.service_name_layout.addRow(self.service_name_time_label, self.service_name_time_layout) self.service_name_label = QtGui.QLabel(self.service_name_group_box) self.service_name_label.setObjectName('service_name_label') self.service_name_edit = QtGui.QLineEdit(self.service_name_group_box) self.service_name_edit.setObjectName('service_name_edit') self.service_name_edit.setValidator(QtGui.QRegExpValidator(QtCore.QRegExp(r'[^/\\?*|<>\[\]":+]+'), self)) self.service_name_revert_button = QtGui.QToolButton(self.service_name_group_box) self.service_name_revert_button.setObjectName('service_name_revert_button') self.service_name_revert_button.setIcon(build_icon(':/general/general_revert.png')) self.service_name_button_layout = QtGui.QHBoxLayout() self.service_name_button_layout.setObjectName('service_name_button_layout') self.service_name_button_layout.addWidget(self.service_name_edit) self.service_name_button_layout.addWidget(self.service_name_revert_button) self.service_name_layout.addRow(self.service_name_label, self.service_name_button_layout) self.service_name_example_label = QtGui.QLabel(self.service_name_group_box) self.service_name_example_label.setObjectName('service_name_example_label') self.service_name_example = QtGui.QLabel(self.service_name_group_box) self.service_name_example.setObjectName('service_name_example') self.service_name_layout.addRow(self.service_name_example_label, self.service_name_example) self.left_layout.addWidget(self.service_name_group_box) # Data Directory self.data_directory_group_box = QtGui.QGroupBox(self.left_column) self.data_directory_group_box.setObjectName('data_directory_group_box') self.data_directory_layout = QtGui.QFormLayout(self.data_directory_group_box) self.data_directory_layout.setObjectName('data_directory_layout') self.data_directory_current_label = QtGui.QLabel(self.data_directory_group_box) self.data_directory_current_label.setObjectName('data_directory_current_label') self.data_directory_label = QtGui.QLabel(self.data_directory_group_box) self.data_directory_label.setObjectName('data_directory_label') self.data_directory_new_label = QtGui.QLabel(self.data_directory_group_box) self.data_directory_new_label.setObjectName('data_directory_current_label') self.new_data_directory_edit = QtGui.QLineEdit(self.data_directory_group_box) self.new_data_directory_edit.setObjectName('new_data_directory_edit') self.new_data_directory_edit.setReadOnly(True) self.new_data_directory_has_files_label = QtGui.QLabel(self.data_directory_group_box) self.new_data_directory_has_files_label.setObjectName('new_data_directory_has_files_label') self.new_data_directory_has_files_label.setWordWrap(True) self.data_directory_browse_button = QtGui.QToolButton(self.data_directory_group_box) self.data_directory_browse_button.setObjectName('data_directory_browse_button') self.data_directory_browse_button.setIcon(build_icon(':/general/general_open.png')) self.data_directory_default_button = QtGui.QToolButton(self.data_directory_group_box) self.data_directory_default_button.setObjectName('data_directory_default_button') self.data_directory_default_button.setIcon(build_icon(':/general/general_revert.png')) self.data_directory_cancel_button = QtGui.QToolButton(self.data_directory_group_box) self.data_directory_cancel_button.setObjectName('data_directory_cancel_button') self.data_directory_cancel_button.setIcon(build_icon(':/general/general_delete.png')) self.new_data_directory_label_layout = QtGui.QHBoxLayout() self.new_data_directory_label_layout.setObjectName('new_data_directory_label_layout') self.new_data_directory_label_layout.addWidget(self.new_data_directory_edit) self.new_data_directory_label_layout.addWidget(self.data_directory_browse_button) self.new_data_directory_label_layout.addWidget(self.data_directory_default_button) self.data_directory_copy_check_layout = QtGui.QHBoxLayout() self.data_directory_copy_check_layout.setObjectName('data_directory_copy_check_layout') self.data_directory_copy_check_box = QtGui.QCheckBox(self.data_directory_group_box) self.data_directory_copy_check_box.setObjectName('data_directory_copy_check_box') self.data_directory_copy_check_layout.addWidget(self.data_directory_copy_check_box) self.data_directory_copy_check_layout.addStretch() self.data_directory_copy_check_layout.addWidget(self.data_directory_cancel_button) self.data_directory_layout.addRow(self.data_directory_current_label, self.data_directory_label) self.data_directory_layout.addRow(self.data_directory_new_label, self.new_data_directory_label_layout) self.data_directory_layout.addRow(self.data_directory_copy_check_layout) self.data_directory_layout.addRow(self.new_data_directory_has_files_label) self.left_layout.addWidget(self.data_directory_group_box) self.left_layout.addStretch() # Default Image self.default_image_group_box = QtGui.QGroupBox(self.right_column) self.default_image_group_box.setObjectName('default_image_group_box') self.default_image_layout = QtGui.QFormLayout(self.default_image_group_box) self.default_image_layout.setObjectName('default_image_layout') self.default_color_label = QtGui.QLabel(self.default_image_group_box) self.default_color_label.setObjectName('default_color_label') self.default_color_button = ColorButton(self.default_image_group_box) self.default_color_button.setObjectName('default_color_button') self.default_image_layout.addRow(self.default_color_label, self.default_color_button) self.default_file_label = QtGui.QLabel(self.default_image_group_box) self.default_file_label.setObjectName('default_file_label') self.default_file_edit = QtGui.QLineEdit(self.default_image_group_box) self.default_file_edit.setObjectName('default_file_edit') self.default_browse_button = QtGui.QToolButton(self.default_image_group_box) self.default_browse_button.setObjectName('default_browse_button') self.default_browse_button.setIcon(build_icon(':/general/general_open.png')) self.default_revert_button = QtGui.QToolButton(self.default_image_group_box) self.default_revert_button.setObjectName('default_revert_button') self.default_revert_button.setIcon(build_icon(':/general/general_revert.png')) self.default_file_layout = QtGui.QHBoxLayout() self.default_file_layout.setObjectName('default_file_layout') self.default_file_layout.addWidget(self.default_file_edit) self.default_file_layout.addWidget(self.default_browse_button) self.default_file_layout.addWidget(self.default_revert_button) self.default_image_layout.addRow(self.default_file_label, self.default_file_layout) self.right_layout.addWidget(self.default_image_group_box) # Hide mouse self.hide_mouse_group_box = QtGui.QGroupBox(self.right_column) self.hide_mouse_group_box.setObjectName('hide_mouse_group_box') self.hide_mouse_layout = QtGui.QVBoxLayout(self.hide_mouse_group_box) self.hide_mouse_layout.setObjectName('hide_mouse_layout') self.hide_mouse_check_box = QtGui.QCheckBox(self.hide_mouse_group_box) self.hide_mouse_check_box.setObjectName('hide_mouse_check_box') self.hide_mouse_layout.addWidget(self.hide_mouse_check_box) self.right_layout.addWidget(self.hide_mouse_group_box) # Service Item Slide Limits self.slide_group_box = QtGui.QGroupBox(self.right_column) self.slide_group_box.setObjectName('slide_group_box') self.slide_layout = QtGui.QVBoxLayout(self.slide_group_box) self.slide_layout.setObjectName('slide_layout') self.slide_label = QtGui.QLabel(self.slide_group_box) self.slide_label.setWordWrap(True) self.slide_layout.addWidget(self.slide_label) self.end_slide_radio_button = QtGui.QRadioButton(self.slide_group_box) self.end_slide_radio_button.setObjectName('end_slide_radio_button') self.slide_layout.addWidget(self.end_slide_radio_button) self.wrap_slide_radio_button = QtGui.QRadioButton(self.slide_group_box) self.wrap_slide_radio_button.setObjectName('wrap_slide_radio_button') self.slide_layout.addWidget(self.wrap_slide_radio_button) self.next_item_radio_button = QtGui.QRadioButton(self.slide_group_box) self.next_item_radio_button.setObjectName('next_item_radio_button') self.slide_layout.addWidget(self.next_item_radio_button) self.right_layout.addWidget(self.slide_group_box) # Display Workarounds self.display_workaround_group_box = QtGui.QGroupBox(self.left_column) self.display_workaround_group_box.setObjectName('display_workaround_group_box') self.display_workaround_layout = QtGui.QVBoxLayout(self.display_workaround_group_box) self.display_workaround_layout.setObjectName('display_workaround_layout') self.x11_bypass_check_box = QtGui.QCheckBox(self.display_workaround_group_box) self.x11_bypass_check_box.setObjectName('x11_bypass_check_box') self.display_workaround_layout.addWidget(self.x11_bypass_check_box) self.alternate_rows_check_box = QtGui.QCheckBox(self.display_workaround_group_box) self.alternate_rows_check_box.setObjectName('alternate_rows_check_box') self.display_workaround_layout.addWidget(self.alternate_rows_check_box) self.right_layout.addWidget(self.display_workaround_group_box) self.right_layout.addStretch() self.should_update_service_name_example = False self.service_name_check_box.toggled.connect(self.service_name_check_box_toggled) self.service_name_day.currentIndexChanged.connect(self.on_service_name_day_changed) self.service_name_time.timeChanged.connect(self.update_service_name_example) self.service_name_edit.textChanged.connect(self.update_service_name_example) self.service_name_revert_button.clicked.connect(self.on_service_name_revert_button_clicked) self.default_color_button.colorChanged.connect(self.on_background_color_changed) self.default_browse_button.clicked.connect(self.on_default_browse_button_clicked) self.default_revert_button.clicked.connect(self.on_default_revert_button_clicked) self.alternate_rows_check_box.toggled.connect(self.on_alternate_rows_check_box_toggled) self.data_directory_browse_button.clicked.connect(self.on_data_directory_browse_button_clicked) self.data_directory_default_button.clicked.connect(self.on_data_directory_default_button_clicked) self.data_directory_cancel_button.clicked.connect(self.on_data_directory_cancel_button_clicked) self.data_directory_copy_check_box.toggled.connect(self.on_data_directory_copy_check_box_toggled) self.end_slide_radio_button.clicked.connect(self.on_end_slide_button_clicked) self.wrap_slide_radio_button.clicked.connect(self.on_wrap_slide_button_clicked) self.next_item_radio_button.clicked.connect(self.on_next_item_button_clicked)
class AlertsTab(SettingsTab): """ AlertsTab is the alerts settings tab in the settings dialog. """ def __init__(self, parent, name, visible_title, icon_path): super(AlertsTab, self).__init__(parent, name, visible_title, icon_path) def setupUi(self): self.setObjectName('AlertsTab') super(AlertsTab, self).setupUi() self.font_group_box = QtGui.QGroupBox(self.left_column) self.font_group_box.setObjectName('font_group_box') self.font_layout = QtGui.QFormLayout(self.font_group_box) self.font_layout.setObjectName('font_layout') self.font_label = QtGui.QLabel(self.font_group_box) self.font_label.setObjectName('font_label') self.font_combo_box = QtGui.QFontComboBox(self.font_group_box) self.font_combo_box.setObjectName('font_combo_box') self.font_layout.addRow(self.font_label, self.font_combo_box) self.font_color_label = QtGui.QLabel(self.font_group_box) self.font_color_label.setObjectName('font_color_label') self.color_layout = QtGui.QHBoxLayout() self.color_layout.setObjectName('color_layout') self.font_color_button = ColorButton(self.font_group_box) self.font_color_button.setObjectName('font_color_button') self.color_layout.addWidget(self.font_color_button) self.color_layout.addSpacing(20) self.background_color_label = QtGui.QLabel(self.font_group_box) self.background_color_label.setObjectName('background_color_label') self.color_layout.addWidget(self.background_color_label) self.background_color_button = ColorButton(self.font_group_box) self.background_color_button.setObjectName('background_color_button') self.color_layout.addWidget(self.background_color_button) self.font_layout.addRow(self.font_color_label, self.color_layout) self.font_size_label = QtGui.QLabel(self.font_group_box) self.font_size_label.setObjectName('font_size_label') self.font_size_spin_box = QtGui.QSpinBox(self.font_group_box) self.font_size_spin_box.setObjectName('font_size_spin_box') self.font_layout.addRow(self.font_size_label, self.font_size_spin_box) self.timeout_label = QtGui.QLabel(self.font_group_box) self.timeout_label.setObjectName('timeout_label') self.timeout_spin_box = QtGui.QSpinBox(self.font_group_box) self.timeout_spin_box.setMaximum(180) self.timeout_spin_box.setObjectName('timeout_spin_box') self.font_layout.addRow(self.timeout_label, self.timeout_spin_box) self.vertical_label, self.vertical_combo_box = create_valign_selection_widgets(self.font_group_box) self.vertical_label.setObjectName('vertical_label') self.vertical_combo_box.setObjectName('vertical_combo_box') self.font_layout.addRow(self.vertical_label, self.vertical_combo_box) self.left_layout.addWidget(self.font_group_box) self.left_layout.addStretch() self.preview_group_box = QtGui.QGroupBox(self.right_column) self.preview_group_box.setObjectName('preview_group_box') self.preview_layout = QtGui.QVBoxLayout(self.preview_group_box) self.preview_layout.setObjectName('preview_layout') self.font_preview = QtGui.QLineEdit(self.preview_group_box) self.font_preview.setObjectName('font_preview') self.preview_layout.addWidget(self.font_preview) self.right_layout.addWidget(self.preview_group_box) self.right_layout.addStretch() # Signals and slots self.background_color_button.colorChanged.connect(self.on_background_color_changed) self.font_color_button.colorChanged.connect(self.on_font_color_changed) self.font_combo_box.activated.connect(self.on_font_combo_box_clicked) self.timeout_spin_box.valueChanged.connect(self.on_timeout_spin_box_changed) self.font_size_spin_box.valueChanged.connect(self.on_font_size_spin_box_changed) def retranslateUi(self): self.font_group_box.setTitle(translate('AlertsPlugin.AlertsTab', 'Font')) self.font_label.setText(translate('AlertsPlugin.AlertsTab', 'Font name:')) self.font_color_label.setText(translate('AlertsPlugin.AlertsTab', 'Font color:')) self.background_color_label.setText(translate('AlertsPlugin.AlertsTab', 'Background color:')) self.font_size_label.setText(translate('AlertsPlugin.AlertsTab', 'Font size:')) self.font_size_spin_box.setSuffix(UiStrings().FontSizePtUnit) self.timeout_label.setText(translate('AlertsPlugin.AlertsTab', 'Alert timeout:')) self.timeout_spin_box.setSuffix(UiStrings().Seconds) self.preview_group_box.setTitle(UiStrings().Preview) self.font_preview.setText(UiStrings().OLPV2x) def on_background_color_changed(self, color): """ The background color has been changed. """ self.background_color = color self.update_display() def on_font_combo_box_clicked(self): """ The Font Combo was changed. """ self.update_display() def on_font_color_changed(self, color): """ The Font Color button has clicked. """ self.font_color = color self.update_display() def on_timeout_spin_box_changed(self): """ The Time out spin box has changed. """ self.timeout = self.timeout_spin_box.value() self.changed = True def on_font_size_spin_box_changed(self): """ The font size spin box has changed. """ self.font_size = self.font_size_spin_box.value() self.update_display() def load(self): """ Load the settings into the UI. """ settings = Settings() settings.beginGroup(self.settings_section) self.timeout = settings.value('timeout') self.font_color = settings.value('font color') self.font_size = settings.value('font size') self.background_color = settings.value('background color') self.font_face = settings.value('font face') self.location = settings.value('location') settings.endGroup() self.font_size_spin_box.setValue(self.font_size) self.timeout_spin_box.setValue(self.timeout) self.font_color_button.color = self.font_color self.background_color_button.color = self.background_color self.vertical_combo_box.setCurrentIndex(self.location) font = QtGui.QFont() font.setFamily(self.font_face) self.font_combo_box.setCurrentFont(font) self.update_display() self.changed = False def save(self): """ Save the changes on exit of the Settings dialog. """ settings = Settings() settings.beginGroup(self.settings_section) # Check value has changed as no event handles this field if settings.value('location') != self.vertical_combo_box.currentIndex(): self.changed = True settings.setValue('background color', self.background_color) settings.setValue('font color', self.font_color) settings.setValue('font size', self.font_size) self.font_face = self.font_combo_box.currentFont().family() settings.setValue('font face', self.font_face) settings.setValue('timeout', self.timeout) self.location = self.vertical_combo_box.currentIndex() settings.setValue('location', self.location) settings.endGroup() if self.changed: self.settings_form.register_post_process('update_display_css') self.changed = False def update_display(self): """ Update the preview display after changes have been made, """ font = QtGui.QFont() font.setFamily(self.font_combo_box.currentFont().family()) font.setBold(True) font.setPointSize(self.font_size) self.font_preview.setFont(font) self.font_preview.setStyleSheet('background-color: %s; color: %s' % (self.background_color, self.font_color)) self.changed = True
class AdvancedTab(SettingsTab): """ The :class:`AdvancedTab` manages the advanced settings tab including the UI and the loading and saving of the displayed settings. """ def __init__(self, parent): """ Initialise the settings tab """ self.default_image = ':/graphics/openlp-splash-screen.png' self.default_color = '#ffffff' self.data_exists = False self.icon_path = ':/system/system_settings.png' advanced_translated = translate('OpenLP.AdvancedTab', 'Advanced') super(AdvancedTab, self).__init__(parent, 'Advanced', advanced_translated) def setupUi(self): """ Configure the UI elements for the tab. """ self.setObjectName('AdvancedTab') super(AdvancedTab, self).setupUi() self.ui_group_box = QtWidgets.QGroupBox(self.left_column) self.ui_group_box.setObjectName('ui_group_box') self.ui_layout = QtWidgets.QFormLayout(self.ui_group_box) self.ui_layout.setObjectName('ui_layout') self.recent_label = QtWidgets.QLabel(self.ui_group_box) self.recent_label.setObjectName('recent_label') self.recent_spin_box = QtWidgets.QSpinBox(self.ui_group_box) self.recent_spin_box.setObjectName('recent_spin_box') self.recent_spin_box.setMinimum(0) self.ui_layout.addRow(self.recent_label, self.recent_spin_box) self.media_plugin_check_box = QtWidgets.QCheckBox(self.ui_group_box) self.media_plugin_check_box.setObjectName('media_plugin_check_box') self.ui_layout.addRow(self.media_plugin_check_box) self.double_click_live_check_box = QtWidgets.QCheckBox(self.ui_group_box) self.double_click_live_check_box.setObjectName('double_click_live_check_box') self.ui_layout.addRow(self.double_click_live_check_box) self.single_click_preview_check_box = QtWidgets.QCheckBox(self.ui_group_box) self.single_click_preview_check_box.setObjectName('single_click_preview_check_box') self.ui_layout.addRow(self.single_click_preview_check_box) self.expand_service_item_check_box = QtWidgets.QCheckBox(self.ui_group_box) self.expand_service_item_check_box.setObjectName('expand_service_item_check_box') self.ui_layout.addRow(self.expand_service_item_check_box) self.search_as_type_check_box = QtWidgets.QCheckBox(self.ui_group_box) self.search_as_type_check_box.setObjectName('SearchAsType_check_box') self.ui_layout.addRow(self.search_as_type_check_box) self.enable_auto_close_check_box = QtWidgets.QCheckBox(self.ui_group_box) self.enable_auto_close_check_box.setObjectName('enable_auto_close_check_box') self.ui_layout.addRow(self.enable_auto_close_check_box) self.left_layout.addWidget(self.ui_group_box) # Default service name self.service_name_group_box = QtWidgets.QGroupBox(self.left_column) self.service_name_group_box.setObjectName('service_name_group_box') self.service_name_layout = QtWidgets.QFormLayout(self.service_name_group_box) self.service_name_check_box = QtWidgets.QCheckBox(self.service_name_group_box) self.service_name_check_box.setObjectName('service_name_check_box') self.service_name_layout.setObjectName('service_name_layout') self.service_name_layout.addRow(self.service_name_check_box) self.service_name_time_label = QtWidgets.QLabel(self.service_name_group_box) self.service_name_time_label.setObjectName('service_name_time_label') self.service_name_day = QtWidgets.QComboBox(self.service_name_group_box) self.service_name_day.addItems(['', '', '', '', '', '', '', '']) self.service_name_day.setObjectName('service_name_day') self.service_name_time = QtWidgets.QTimeEdit(self.service_name_group_box) self.service_name_time.setObjectName('service_name_time') self.service_name_time_layout = QtWidgets.QHBoxLayout() self.service_name_time_layout.setObjectName('service_name_time_layout') self.service_name_time_layout.addWidget(self.service_name_day) self.service_name_time_layout.addWidget(self.service_name_time) self.service_name_layout.addRow(self.service_name_time_label, self.service_name_time_layout) self.service_name_label = QtWidgets.QLabel(self.service_name_group_box) self.service_name_label.setObjectName('service_name_label') self.service_name_edit = QtWidgets.QLineEdit(self.service_name_group_box) self.service_name_edit.setObjectName('service_name_edit') self.service_name_edit.setValidator(QtGui.QRegExpValidator(QtCore.QRegExp(r'[^/\\?*|<>\[\]":+]+'), self)) self.service_name_revert_button = QtWidgets.QToolButton(self.service_name_group_box) self.service_name_revert_button.setObjectName('service_name_revert_button') self.service_name_revert_button.setIcon(build_icon(':/general/general_revert.png')) self.service_name_button_layout = QtWidgets.QHBoxLayout() self.service_name_button_layout.setObjectName('service_name_button_layout') self.service_name_button_layout.addWidget(self.service_name_edit) self.service_name_button_layout.addWidget(self.service_name_revert_button) self.service_name_layout.addRow(self.service_name_label, self.service_name_button_layout) self.service_name_example_label = QtWidgets.QLabel(self.service_name_group_box) self.service_name_example_label.setObjectName('service_name_example_label') self.service_name_example = QtWidgets.QLabel(self.service_name_group_box) self.service_name_example.setObjectName('service_name_example') self.service_name_layout.addRow(self.service_name_example_label, self.service_name_example) self.left_layout.addWidget(self.service_name_group_box) # Data Directory self.data_directory_group_box = QtWidgets.QGroupBox(self.left_column) self.data_directory_group_box.setObjectName('data_directory_group_box') self.data_directory_layout = QtWidgets.QFormLayout(self.data_directory_group_box) self.data_directory_layout.setObjectName('data_directory_layout') self.data_directory_current_label = QtWidgets.QLabel(self.data_directory_group_box) self.data_directory_current_label.setObjectName('data_directory_current_label') self.data_directory_label = QtWidgets.QLabel(self.data_directory_group_box) self.data_directory_label.setObjectName('data_directory_label') self.data_directory_new_label = QtWidgets.QLabel(self.data_directory_group_box) self.data_directory_new_label.setObjectName('data_directory_current_label') self.new_data_directory_edit = QtWidgets.QLineEdit(self.data_directory_group_box) self.new_data_directory_edit.setObjectName('new_data_directory_edit') self.new_data_directory_edit.setReadOnly(True) self.new_data_directory_has_files_label = QtWidgets.QLabel(self.data_directory_group_box) self.new_data_directory_has_files_label.setObjectName('new_data_directory_has_files_label') self.new_data_directory_has_files_label.setWordWrap(True) self.data_directory_browse_button = QtWidgets.QToolButton(self.data_directory_group_box) self.data_directory_browse_button.setObjectName('data_directory_browse_button') self.data_directory_browse_button.setIcon(build_icon(':/general/general_open.png')) self.data_directory_default_button = QtWidgets.QToolButton(self.data_directory_group_box) self.data_directory_default_button.setObjectName('data_directory_default_button') self.data_directory_default_button.setIcon(build_icon(':/general/general_revert.png')) self.data_directory_cancel_button = QtWidgets.QToolButton(self.data_directory_group_box) self.data_directory_cancel_button.setObjectName('data_directory_cancel_button') self.data_directory_cancel_button.setIcon(build_icon(':/general/general_delete.png')) self.new_data_directory_label_layout = QtWidgets.QHBoxLayout() self.new_data_directory_label_layout.setObjectName('new_data_directory_label_layout') self.new_data_directory_label_layout.addWidget(self.new_data_directory_edit) self.new_data_directory_label_layout.addWidget(self.data_directory_browse_button) self.new_data_directory_label_layout.addWidget(self.data_directory_default_button) self.data_directory_copy_check_layout = QtWidgets.QHBoxLayout() self.data_directory_copy_check_layout.setObjectName('data_directory_copy_check_layout') self.data_directory_copy_check_box = QtWidgets.QCheckBox(self.data_directory_group_box) self.data_directory_copy_check_box.setObjectName('data_directory_copy_check_box') self.data_directory_copy_check_layout.addWidget(self.data_directory_copy_check_box) self.data_directory_copy_check_layout.addStretch() self.data_directory_copy_check_layout.addWidget(self.data_directory_cancel_button) self.data_directory_layout.addRow(self.data_directory_current_label, self.data_directory_label) self.data_directory_layout.addRow(self.data_directory_new_label, self.new_data_directory_label_layout) self.data_directory_layout.addRow(self.data_directory_copy_check_layout) self.data_directory_layout.addRow(self.new_data_directory_has_files_label) self.left_layout.addWidget(self.data_directory_group_box) self.left_layout.addStretch() # Default Image self.default_image_group_box = QtWidgets.QGroupBox(self.right_column) self.default_image_group_box.setObjectName('default_image_group_box') self.default_image_layout = QtWidgets.QFormLayout(self.default_image_group_box) self.default_image_layout.setObjectName('default_image_layout') self.default_color_label = QtWidgets.QLabel(self.default_image_group_box) self.default_color_label.setObjectName('default_color_label') self.default_color_button = ColorButton(self.default_image_group_box) self.default_color_button.setObjectName('default_color_button') self.default_image_layout.addRow(self.default_color_label, self.default_color_button) self.default_file_label = QtWidgets.QLabel(self.default_image_group_box) self.default_file_label.setObjectName('default_file_label') self.default_file_edit = QtWidgets.QLineEdit(self.default_image_group_box) self.default_file_edit.setObjectName('default_file_edit') self.default_browse_button = QtWidgets.QToolButton(self.default_image_group_box) self.default_browse_button.setObjectName('default_browse_button') self.default_browse_button.setIcon(build_icon(':/general/general_open.png')) self.default_revert_button = QtWidgets.QToolButton(self.default_image_group_box) self.default_revert_button.setObjectName('default_revert_button') self.default_revert_button.setIcon(build_icon(':/general/general_revert.png')) self.default_file_layout = QtWidgets.QHBoxLayout() self.default_file_layout.setObjectName('default_file_layout') self.default_file_layout.addWidget(self.default_file_edit) self.default_file_layout.addWidget(self.default_browse_button) self.default_file_layout.addWidget(self.default_revert_button) self.default_image_layout.addRow(self.default_file_label, self.default_file_layout) self.right_layout.addWidget(self.default_image_group_box) # Hide mouse self.hide_mouse_group_box = QtWidgets.QGroupBox(self.right_column) self.hide_mouse_group_box.setObjectName('hide_mouse_group_box') self.hide_mouse_layout = QtWidgets.QVBoxLayout(self.hide_mouse_group_box) self.hide_mouse_layout.setObjectName('hide_mouse_layout') self.hide_mouse_check_box = QtWidgets.QCheckBox(self.hide_mouse_group_box) self.hide_mouse_check_box.setObjectName('hide_mouse_check_box') self.hide_mouse_layout.addWidget(self.hide_mouse_check_box) self.right_layout.addWidget(self.hide_mouse_group_box) # Service Item Slide Limits self.slide_group_box = QtWidgets.QGroupBox(self.right_column) self.slide_group_box.setObjectName('slide_group_box') self.slide_layout = QtWidgets.QVBoxLayout(self.slide_group_box) self.slide_layout.setObjectName('slide_layout') self.slide_label = QtWidgets.QLabel(self.slide_group_box) self.slide_label.setWordWrap(True) self.slide_layout.addWidget(self.slide_label) self.end_slide_radio_button = QtWidgets.QRadioButton(self.slide_group_box) self.end_slide_radio_button.setObjectName('end_slide_radio_button') self.slide_layout.addWidget(self.end_slide_radio_button) self.wrap_slide_radio_button = QtWidgets.QRadioButton(self.slide_group_box) self.wrap_slide_radio_button.setObjectName('wrap_slide_radio_button') self.slide_layout.addWidget(self.wrap_slide_radio_button) self.next_item_radio_button = QtWidgets.QRadioButton(self.slide_group_box) self.next_item_radio_button.setObjectName('next_item_radio_button') self.slide_layout.addWidget(self.next_item_radio_button) self.right_layout.addWidget(self.slide_group_box) # Display Workarounds self.display_workaround_group_box = QtWidgets.QGroupBox(self.left_column) self.display_workaround_group_box.setObjectName('display_workaround_group_box') self.display_workaround_layout = QtWidgets.QVBoxLayout(self.display_workaround_group_box) self.display_workaround_layout.setObjectName('display_workaround_layout') self.x11_bypass_check_box = QtWidgets.QCheckBox(self.display_workaround_group_box) self.x11_bypass_check_box.setObjectName('x11_bypass_check_box') self.display_workaround_layout.addWidget(self.x11_bypass_check_box) self.alternate_rows_check_box = QtWidgets.QCheckBox(self.display_workaround_group_box) self.alternate_rows_check_box.setObjectName('alternate_rows_check_box') self.display_workaround_layout.addWidget(self.alternate_rows_check_box) self.right_layout.addWidget(self.display_workaround_group_box) self.right_layout.addStretch() self.should_update_service_name_example = False self.service_name_check_box.toggled.connect(self.service_name_check_box_toggled) self.service_name_day.currentIndexChanged.connect(self.on_service_name_day_changed) self.service_name_time.timeChanged.connect(self.update_service_name_example) self.service_name_edit.textChanged.connect(self.update_service_name_example) self.service_name_revert_button.clicked.connect(self.on_service_name_revert_button_clicked) self.default_color_button.colorChanged.connect(self.on_background_color_changed) self.default_browse_button.clicked.connect(self.on_default_browse_button_clicked) self.default_revert_button.clicked.connect(self.on_default_revert_button_clicked) self.alternate_rows_check_box.toggled.connect(self.on_alternate_rows_check_box_toggled) self.data_directory_browse_button.clicked.connect(self.on_data_directory_browse_button_clicked) self.data_directory_default_button.clicked.connect(self.on_data_directory_default_button_clicked) self.data_directory_cancel_button.clicked.connect(self.on_data_directory_cancel_button_clicked) self.data_directory_copy_check_box.toggled.connect(self.on_data_directory_copy_check_box_toggled) self.end_slide_radio_button.clicked.connect(self.on_end_slide_button_clicked) self.wrap_slide_radio_button.clicked.connect(self.on_wrap_slide_button_clicked) self.next_item_radio_button.clicked.connect(self.on_next_item_button_clicked) self.search_as_type_check_box.stateChanged.connect(self.on_search_as_type_check_box_changed) def retranslateUi(self): """ Setup the interface translation strings. """ self.tab_title_visible = UiStrings().Advanced self.ui_group_box.setTitle(translate('OpenLP.AdvancedTab', 'UI Settings')) self.data_directory_group_box.setTitle(translate('OpenLP.AdvancedTab', 'Data Location')) self.recent_label.setText(translate('OpenLP.AdvancedTab', 'Number of recent files to display:')) self.media_plugin_check_box.setText(translate('OpenLP.AdvancedTab', 'Remember active media manager tab on startup')) self.double_click_live_check_box.setText(translate('OpenLP.AdvancedTab', 'Double-click to send items straight to live')) self.single_click_preview_check_box.setText(translate('OpenLP.AdvancedTab', 'Preview items when clicked in Media Manager')) self.expand_service_item_check_box.setText(translate('OpenLP.AdvancedTab', 'Expand new service items on creation')) self.enable_auto_close_check_box.setText(translate('OpenLP.AdvancedTab', 'Enable application exit confirmation')) self.service_name_group_box.setTitle(translate('OpenLP.AdvancedTab', 'Default Service Name')) self.service_name_check_box.setText(translate('OpenLP.AdvancedTab', 'Enable default service name')) self.service_name_time_label.setText(translate('OpenLP.AdvancedTab', 'Date and Time:')) self.service_name_day.setItemText(0, translate('OpenLP.AdvancedTab', 'Monday')) self.service_name_day.setItemText(1, translate('OpenLP.AdvancedTab', 'Tuesday')) self.service_name_day.setItemText(2, translate('OpenLP.AdvancedTab', 'Wednesday')) self.service_name_day.setItemText(3, translate('OpenLP.AdvancedTab', 'Thursday')) self.service_name_day.setItemText(4, translate('OpenLP.AdvancedTab', 'Friday')) self.service_name_day.setItemText(5, translate('OpenLP.AdvancedTab', 'Saturday')) self.service_name_day.setItemText(6, translate('OpenLP.AdvancedTab', 'Sunday')) self.service_name_day.setItemText(7, translate('OpenLP.AdvancedTab', 'Now')) self.service_name_time.setToolTip(translate('OpenLP.AdvancedTab', 'Time when usual service starts.')) self.service_name_label.setText(translate('OpenLP.AdvancedTab', 'Name:')) self.service_name_edit.setToolTip(translate('OpenLP.AdvancedTab', 'Consult the OpenLP manual for usage.')) self.service_name_revert_button.setToolTip( translate('OpenLP.AdvancedTab', 'Revert to the default service name "%s".') % UiStrings().DefaultServiceName) self.service_name_example_label.setText(translate('OpenLP.AdvancedTab', 'Example:')) self.hide_mouse_group_box.setTitle(translate('OpenLP.AdvancedTab', 'Mouse Cursor')) self.hide_mouse_check_box.setText(translate('OpenLP.AdvancedTab', 'Hide mouse cursor when over display window')) self.default_image_group_box.setTitle(translate('OpenLP.AdvancedTab', 'Default Image')) self.default_color_label.setText(translate('OpenLP.AdvancedTab', 'Background color:')) self.default_file_label.setText(translate('OpenLP.AdvancedTab', 'Image file:')) self.default_browse_button.setToolTip(translate('OpenLP.AdvancedTab', 'Browse for an image file to display.')) self.default_revert_button.setToolTip(translate('OpenLP.AdvancedTab', 'Revert to the default OpenLP logo.')) self.data_directory_current_label.setText(translate('OpenLP.AdvancedTab', 'Current path:')) self.data_directory_new_label.setText(translate('OpenLP.AdvancedTab', 'Custom path:')) self.data_directory_browse_button.setToolTip(translate('OpenLP.AdvancedTab', 'Browse for new data file location.')) self.data_directory_default_button.setToolTip( translate('OpenLP.AdvancedTab', 'Set the data location to the default.')) self.data_directory_cancel_button.setText(translate('OpenLP.AdvancedTab', 'Cancel')) self.data_directory_cancel_button.setToolTip( translate('OpenLP.AdvancedTab', 'Cancel OpenLP data directory location change.')) self.data_directory_copy_check_box.setText(translate('OpenLP.AdvancedTab', 'Copy data to new location.')) self.data_directory_copy_check_box.setToolTip(translate( 'OpenLP.AdvancedTab', 'Copy the OpenLP data files to the new location.')) self.new_data_directory_has_files_label.setText( translate('OpenLP.AdvancedTab', '<strong>WARNING:</strong> New data directory location contains ' 'OpenLP data files. These files WILL be replaced during a copy.')) self.display_workaround_group_box.setTitle(translate('OpenLP.AdvancedTab', 'Display Workarounds')) self.x11_bypass_check_box.setText(translate('OpenLP.AdvancedTab', 'Bypass X11 Window Manager')) self.alternate_rows_check_box.setText(translate('OpenLP.AdvancedTab', 'Use alternating row colours in lists')) # Slide Limits self.slide_group_box.setTitle(translate('OpenLP.GeneralTab', 'Service Item Slide Limits')) self.slide_label.setText(translate('OpenLP.GeneralTab', 'Behavior of next/previous on the last/first slide:')) self.end_slide_radio_button.setText(translate('OpenLP.GeneralTab', '&Remain on Slide')) self.wrap_slide_radio_button.setText(translate('OpenLP.GeneralTab', '&Wrap around')) self.next_item_radio_button.setText(translate('OpenLP.GeneralTab', '&Move to next/previous service item')) self.search_as_type_check_box.setText(translate('SongsPlugin.GeneralTab', 'Enable search as you type')) def load(self): """ Load settings from disk. """ settings = Settings() settings.beginGroup(self.settings_section) # The max recent files value does not have an interface and so never # gets actually stored in the settings therefore the default value of # 20 will always be used. self.recent_spin_box.setMaximum(settings.value('max recent files')) self.recent_spin_box.setValue(settings.value('recent file count')) self.media_plugin_check_box.setChecked(settings.value('save current plugin')) self.double_click_live_check_box.setChecked(settings.value('double click live')) self.single_click_preview_check_box.setChecked(settings.value('single click preview')) self.expand_service_item_check_box.setChecked(settings.value('expand service item')) self.enable_auto_close_check_box.setChecked(settings.value('enable exit confirmation')) self.hide_mouse_check_box.setChecked(settings.value('hide mouse')) self.service_name_day.setCurrentIndex(settings.value('default service day')) self.service_name_time.setTime(QtCore.QTime(settings.value('default service hour'), settings.value('default service minute'))) self.should_update_service_name_example = True self.service_name_edit.setText(settings.value('default service name')) default_service_enabled = settings.value('default service enabled') self.service_name_check_box.setChecked(default_service_enabled) self.service_name_check_box_toggled(default_service_enabled) self.x11_bypass_check_box.setChecked(settings.value('x11 bypass wm')) self.default_color = settings.value('default color') self.default_file_edit.setText(settings.value('default image')) self.slide_limits = settings.value('slide limits') self.is_search_as_you_type_enabled = settings.value('search as type') self.search_as_type_check_box.setChecked(self.is_search_as_you_type_enabled) # Prevent the dialog displayed by the alternate_rows_check_box to display. self.alternate_rows_check_box.blockSignals(True) self.alternate_rows_check_box.setChecked(settings.value('alternate rows')) self.alternate_rows_check_box.blockSignals(False) if self.slide_limits == SlideLimits.End: self.end_slide_radio_button.setChecked(True) elif self.slide_limits == SlideLimits.Wrap: self.wrap_slide_radio_button.setChecked(True) else: self.next_item_radio_button.setChecked(True) settings.endGroup() self.data_directory_copy_check_box.hide() self.new_data_directory_has_files_label.hide() self.data_directory_cancel_button.hide() # Since data location can be changed, make sure the path is present. self.current_data_path = AppLocation.get_data_path() if not os.path.exists(self.current_data_path): log.error('Data path not found %s' % self.current_data_path) answer = QtWidgets.QMessageBox.critical( self, translate('OpenLP.AdvancedTab', 'Data Directory Error'), translate('OpenLP.AdvancedTab', 'OpenLP data directory was not found\n\n%s\n\n' 'This data directory was previously changed from the OpenLP ' 'default location. If the new location was on removable ' 'media, that media needs to be made available.\n\n' 'Click "No" to stop loading OpenLP. allowing you to fix the the problem.\n\n' 'Click "Yes" to reset the data directory to the default ' 'location.').replace('%s', self.current_data_path), QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No), QtWidgets.QMessageBox.No) if answer == QtWidgets.QMessageBox.No: log.info('User requested termination') self.main_window.clean_up() sys.exit() # Set data location to default. settings.remove('advanced/data path') self.current_data_path = AppLocation.get_data_path() log.warning('User requested data path set to default %s' % self.current_data_path) self.data_directory_label.setText(os.path.abspath(self.current_data_path)) self.default_color_button.color = self.default_color # Don't allow data directory move if running portable. if settings.value('advanced/is portable'): self.data_directory_group_box.hide() def save(self): """ Save settings to disk. """ settings = Settings() settings.beginGroup(self.settings_section) settings.setValue('default service enabled', self.service_name_check_box.isChecked()) service_name = self.service_name_edit.text() preset_is_valid = self.generate_service_name_example()[0] if service_name == UiStrings().DefaultServiceName or not preset_is_valid: settings.remove('default service name') self.service_name_edit.setText(service_name) else: settings.setValue('default service name', service_name) settings.setValue('default service day', self.service_name_day.currentIndex()) settings.setValue('default service hour', self.service_name_time.time().hour()) settings.setValue('default service minute', self.service_name_time.time().minute()) settings.setValue('recent file count', self.recent_spin_box.value()) settings.setValue('save current plugin', self.media_plugin_check_box.isChecked()) settings.setValue('double click live', self.double_click_live_check_box.isChecked()) settings.setValue('single click preview', self.single_click_preview_check_box.isChecked()) settings.setValue('expand service item', self.expand_service_item_check_box.isChecked()) settings.setValue('enable exit confirmation', self.enable_auto_close_check_box.isChecked()) settings.setValue('hide mouse', self.hide_mouse_check_box.isChecked()) settings.setValue('alternate rows', self.alternate_rows_check_box.isChecked()) settings.setValue('default color', self.default_color) settings.setValue('default image', self.default_file_edit.text()) settings.setValue('slide limits', self.slide_limits) if self.x11_bypass_check_box.isChecked() != settings.value('x11 bypass wm'): settings.setValue('x11 bypass wm', self.x11_bypass_check_box.isChecked()) self.settings_form.register_post_process('config_screen_changed') self.settings_form.register_post_process('slidecontroller_update_slide_limits') settings.setValue('search as type', self.is_search_as_you_type_enabled) settings.endGroup() def on_search_as_type_check_box_changed(self, check_state): self.is_search_as_you_type_enabled = (check_state == QtCore.Qt.Checked) self.settings_form.register_post_process('songs_config_updated') self.settings_form.register_post_process('custom_config_updated') def cancel(self): """ Dialogue was cancelled, remove any pending data path change. """ self.on_data_directory_cancel_button_clicked() SettingsTab.cancel(self) def service_name_check_box_toggled(self, default_service_enabled): """ Service Name options changed """ self.service_name_day.setEnabled(default_service_enabled) time_enabled = default_service_enabled and self.service_name_day.currentIndex() is not 7 self.service_name_time.setEnabled(time_enabled) self.service_name_edit.setEnabled(default_service_enabled) self.service_name_revert_button.setEnabled(default_service_enabled) def generate_service_name_example(self): """ Display an example of the template used """ preset_is_valid = True if self.service_name_day.currentIndex() == 7: local_time = datetime.now() else: now = datetime.now() day_delta = self.service_name_day.currentIndex() - now.weekday() if day_delta < 0: day_delta += 7 time = now + timedelta(days=day_delta) local_time = time.replace( hour=self.service_name_time.time().hour(), minute=self.service_name_time.time().minute() ) try: service_name_example = format_time(str(self.service_name_edit.text()), local_time) except ValueError: preset_is_valid = False service_name_example = translate('OpenLP.AdvancedTab', 'Syntax error.') return preset_is_valid, service_name_example def update_service_name_example(self, returned_value): """ Update the example service name. """ if not self.should_update_service_name_example: return name_example = self.generate_service_name_example()[1] self.service_name_example.setText(name_example) def on_service_name_day_changed(self, service_day): """ React to the day of the service name changing. """ self.service_name_time.setEnabled(service_day is not 7) self.update_service_name_example(None) def on_service_name_revert_button_clicked(self): """ Revert to the default service name. """ self.service_name_edit.setText(UiStrings().DefaultServiceName) self.service_name_edit.setFocus() def on_background_color_changed(self, color): """ Select the background colour of the default display screen. """ self.default_color = color def on_default_browse_button_clicked(self): """ Select an image for the default display screen. """ file_filters = '%s;;%s (*.*)' % (get_images_filter(), UiStrings().AllFiles) filename, filter_used = QtWidgets.QFileDialog.getOpenFileName(self, translate('OpenLP.AdvancedTab', 'Open File'), '', file_filters) if filename: self.default_file_edit.setText(filename) self.default_file_edit.setFocus() def on_data_directory_browse_button_clicked(self): """ Browse for a new data directory location. """ old_root_path = str(self.data_directory_label.text()) # Get the new directory location. new_data_path = QtWidgets.QFileDialog.getExistingDirectory(self, translate('OpenLP.AdvancedTab', 'Select Data Directory Location'), old_root_path, options=QtWidgets.QFileDialog.ShowDirsOnly) # Set the new data path. if new_data_path: new_data_path = os.path.normpath(new_data_path) if self.current_data_path.lower() == new_data_path.lower(): self.on_data_directory_cancel_button_clicked() return else: return # Make sure they want to change the data. answer = QtWidgets.QMessageBox.question(self, translate('OpenLP.AdvancedTab', 'Confirm Data Directory Change'), translate('OpenLP.AdvancedTab', 'Are you sure you want to change the ' 'location of the OpenLP data directory to:\n\n%s\n\nThe data ' 'directory will be changed when OpenLP is closed.'). replace('%s', new_data_path), QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No), QtWidgets.QMessageBox.No) if answer != QtWidgets.QMessageBox.Yes: return # Check if data already exists here. self.check_data_overwrite(new_data_path) # Save the new location. self.main_window.set_new_data_path(new_data_path) self.new_data_directory_edit.setText(new_data_path) self.data_directory_cancel_button.show() def on_data_directory_default_button_clicked(self): """ Re-set the data directory location to the 'default' location. """ new_data_path = AppLocation.get_directory(AppLocation.DataDir) if self.current_data_path.lower() != new_data_path.lower(): # Make sure they want to change the data location back to the # default. answer = QtWidgets.QMessageBox.question(self, translate('OpenLP.AdvancedTab', 'Reset Data Directory'), translate('OpenLP.AdvancedTab', 'Are you sure you want to change ' 'the location of the OpenLP data ' 'directory to the default location?' '\n\nThis location will be used ' 'after OpenLP is closed.'), QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No), QtWidgets.QMessageBox.No) if answer != QtWidgets.QMessageBox.Yes: return self.check_data_overwrite(new_data_path) # Save the new location. self.main_window.set_new_data_path(new_data_path) self.new_data_directory_edit.setText(os.path.abspath(new_data_path)) self.data_directory_cancel_button.show() else: # We cancel the change in case user changed their mind. self.on_data_directory_cancel_button_clicked() def on_data_directory_copy_check_box_toggled(self): """ Copy existing data when you change your data directory. """ self.main_window.set_copy_data(self.data_directory_copy_check_box.isChecked()) if self.data_exists: if self.data_directory_copy_check_box.isChecked(): self.new_data_directory_has_files_label.show() else: self.new_data_directory_has_files_label.hide() def check_data_overwrite(self, data_path): """ Check if there's already data in the target directory. """ test_path = os.path.join(data_path, 'songs') self.data_directory_copy_check_box.show() if os.path.exists(test_path): self.data_exists = True # Check is they want to replace existing data. answer = QtWidgets.QMessageBox.warning(self, translate('OpenLP.AdvancedTab', 'Overwrite Existing Data'), translate('OpenLP.AdvancedTab', 'WARNING: \n\nThe location you have selected \n\n%s\n\n' 'appears to contain OpenLP data files. Do you wish to ' 'replace these files with the current data files?'). replace('%s', os.path.abspath(data_path,)), QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No), QtWidgets.QMessageBox.No) if answer == QtWidgets.QMessageBox.Yes: self.data_directory_copy_check_box.setChecked(True) self.new_data_directory_has_files_label.show() else: self.data_directory_copy_check_box.setChecked(False) self.new_data_directory_has_files_label.hide() else: self.data_exists = False self.data_directory_copy_check_box.setChecked(True) self.new_data_directory_has_files_label.hide() def on_data_directory_cancel_button_clicked(self): """ Cancel the data directory location change """ self.new_data_directory_edit.clear() self.data_directory_copy_check_box.setChecked(False) self.main_window.set_new_data_path(None) self.main_window.set_copy_data(False) self.data_directory_copy_check_box.hide() self.data_directory_cancel_button.hide() self.new_data_directory_has_files_label.hide() def on_default_revert_button_clicked(self): """ Revert the default screen back to the default settings. """ self.default_file_edit.setText(':/graphics/openlp-splash-screen.png') self.default_file_edit.setFocus() def on_alternate_rows_check_box_toggled(self, checked): """ Notify user about required restart. :param checked: The state of the check box (boolean). """ QtWidgets.QMessageBox.information(self, translate('OpenLP.AdvancedTab', 'Restart Required'), translate('OpenLP.AdvancedTab', 'This change will only take effect once OpenLP ' 'has been restarted.')) def on_end_slide_button_clicked(self): """ Stop at the end either top ot bottom """ self.slide_limits = SlideLimits.End def on_wrap_slide_button_clicked(self): """ Wrap round the service item """ self.slide_limits = SlideLimits.Wrap def on_next_item_button_clicked(self): """ Advance to the next service item """ self.slide_limits = SlideLimits.Next
class AlertsTab(SettingsTab): """ AlertsTab is the alerts settings tab in the settings dialog. """ def __init__(self, parent, name, visible_title, icon_path): super(AlertsTab, self).__init__(parent, name, visible_title, icon_path) def setupUi(self): self.setObjectName("AlertsTab") super(AlertsTab, self).setupUi() self.font_group_box = QtGui.QGroupBox(self.left_column) self.font_group_box.setObjectName("font_group_box") self.font_layout = QtGui.QFormLayout(self.font_group_box) self.font_layout.setObjectName("font_layout") self.font_label = QtGui.QLabel(self.font_group_box) self.font_label.setObjectName("font_label") self.font_combo_box = QtGui.QFontComboBox(self.font_group_box) self.font_combo_box.setObjectName("font_combo_box") self.font_layout.addRow(self.font_label, self.font_combo_box) self.font_color_label = QtGui.QLabel(self.font_group_box) self.font_color_label.setObjectName("font_color_label") self.color_layout = QtGui.QHBoxLayout() self.color_layout.setObjectName("color_layout") self.font_color_button = ColorButton(self.font_group_box) self.font_color_button.setObjectName("font_color_button") self.color_layout.addWidget(self.font_color_button) self.color_layout.addSpacing(20) self.background_color_label = QtGui.QLabel(self.font_group_box) self.background_color_label.setObjectName("background_color_label") self.color_layout.addWidget(self.background_color_label) self.background_color_button = ColorButton(self.font_group_box) self.background_color_button.setObjectName("background_color_button") self.color_layout.addWidget(self.background_color_button) self.font_layout.addRow(self.font_color_label, self.color_layout) self.font_size_label = QtGui.QLabel(self.font_group_box) self.font_size_label.setObjectName("font_size_label") self.font_size_spin_box = QtGui.QSpinBox(self.font_group_box) self.font_size_spin_box.setObjectName("font_size_spin_box") self.font_layout.addRow(self.font_size_label, self.font_size_spin_box) self.timeout_label = QtGui.QLabel(self.font_group_box) self.timeout_label.setObjectName("timeout_label") self.timeout_spin_box = QtGui.QSpinBox(self.font_group_box) self.timeout_spin_box.setMaximum(180) self.timeout_spin_box.setObjectName("timeout_spin_box") self.font_layout.addRow(self.timeout_label, self.timeout_spin_box) self.vertical_label, self.vertical_combo_box = create_valign_selection_widgets(self.font_group_box) self.vertical_label.setObjectName("vertical_label") self.vertical_combo_box.setObjectName("vertical_combo_box") self.font_layout.addRow(self.vertical_label, self.vertical_combo_box) self.left_layout.addWidget(self.font_group_box) self.left_layout.addStretch() self.preview_group_box = QtGui.QGroupBox(self.right_column) self.preview_group_box.setObjectName("preview_group_box") self.preview_layout = QtGui.QVBoxLayout(self.preview_group_box) self.preview_layout.setObjectName("preview_layout") self.font_preview = QtGui.QLineEdit(self.preview_group_box) self.font_preview.setObjectName("font_preview") self.preview_layout.addWidget(self.font_preview) self.right_layout.addWidget(self.preview_group_box) self.right_layout.addStretch() # Signals and slots self.background_color_button.colorChanged.connect(self.on_background_color_changed) self.font_color_button.colorChanged.connect(self.on_font_color_changed) self.font_combo_box.activated.connect(self.on_font_combo_box_clicked) self.timeout_spin_box.valueChanged.connect(self.on_timeout_spin_box_changed) self.font_size_spin_box.valueChanged.connect(self.on_font_size_spin_box_changed) def retranslateUi(self): self.font_group_box.setTitle(translate("AlertsPlugin.AlertsTab", "Font")) self.font_label.setText(translate("AlertsPlugin.AlertsTab", "Font name:")) self.font_color_label.setText(translate("AlertsPlugin.AlertsTab", "Font color:")) self.background_color_label.setText(translate("AlertsPlugin.AlertsTab", "Background color:")) self.font_size_label.setText(translate("AlertsPlugin.AlertsTab", "Font size:")) self.font_size_spin_box.setSuffix(UiStrings().FontSizePtUnit) self.timeout_label.setText(translate("AlertsPlugin.AlertsTab", "Alert timeout:")) self.timeout_spin_box.setSuffix(UiStrings().Seconds) self.preview_group_box.setTitle(UiStrings().Preview) self.font_preview.setText(UiStrings().OLPV2x) def on_background_color_changed(self, color): """ The background color has been changed. """ self.background_color = color self.update_display() def on_font_combo_box_clicked(self): """ The Font Combo was changed. """ self.update_display() def on_font_color_changed(self, color): """ The Font Color button has clicked. """ self.font_color = color self.update_display() def on_timeout_spin_box_changed(self): """ The Time out spin box has changed. """ self.timeout = self.timeout_spin_box.value() self.changed = True def on_font_size_spin_box_changed(self): """ The font size spin box has changed. """ self.font_size = self.font_size_spin_box.value() self.update_display() def load(self): """ Load the settings into the UI. """ settings = Settings() settings.beginGroup(self.settings_section) self.timeout = settings.value("timeout") self.font_color = settings.value("font color") self.font_size = settings.value("font size") self.background_color = settings.value("background color") self.font_face = settings.value("font face") self.location = settings.value("location") settings.endGroup() self.font_size_spin_box.setValue(self.font_size) self.timeout_spin_box.setValue(self.timeout) self.font_color_button.color = self.font_color self.background_color_button.color = self.background_color self.vertical_combo_box.setCurrentIndex(self.location) font = QtGui.QFont() font.setFamily(self.font_face) self.font_combo_box.setCurrentFont(font) self.update_display() self.changed = False def save(self): """ Save the changes on exit of the Settings dialog. """ settings = Settings() settings.beginGroup(self.settings_section) # Check value has changed as no event handles this field if settings.value("location") != self.vertical_combo_box.currentIndex(): self.changed = True settings.setValue("background color", self.background_color) settings.setValue("font color", self.font_color) settings.setValue("font size", self.font_size) self.font_face = self.font_combo_box.currentFont().family() settings.setValue("font face", self.font_face) settings.setValue("timeout", self.timeout) self.location = self.vertical_combo_box.currentIndex() settings.setValue("location", self.location) settings.endGroup() if self.changed: self.settings_form.register_post_process("update_display_css") self.changed = False def update_display(self): """ Update the preview display after changes have been made, """ font = QtGui.QFont() font.setFamily(self.font_combo_box.currentFont().family()) font.setBold(True) font.setPointSize(self.font_size) self.font_preview.setFont(font) self.font_preview.setStyleSheet("background-color: %s; color: %s" % (self.background_color, self.font_color)) self.changed = True
def setupUi(self): """ Configure the UI elements for the tab. """ self.setObjectName('AdvancedTab') super(AdvancedTab, self).setupUi() self.ui_group_box = QtWidgets.QGroupBox(self.left_column) self.ui_group_box.setObjectName('ui_group_box') self.ui_layout = QtWidgets.QFormLayout(self.ui_group_box) self.ui_layout.setObjectName('ui_layout') self.recent_label = QtWidgets.QLabel(self.ui_group_box) self.recent_label.setObjectName('recent_label') self.recent_spin_box = QtWidgets.QSpinBox(self.ui_group_box) self.recent_spin_box.setObjectName('recent_spin_box') self.recent_spin_box.setMinimum(0) self.ui_layout.addRow(self.recent_label, self.recent_spin_box) self.media_plugin_check_box = QtWidgets.QCheckBox(self.ui_group_box) self.media_plugin_check_box.setObjectName('media_plugin_check_box') self.ui_layout.addRow(self.media_plugin_check_box) self.double_click_live_check_box = QtWidgets.QCheckBox(self.ui_group_box) self.double_click_live_check_box.setObjectName('double_click_live_check_box') self.ui_layout.addRow(self.double_click_live_check_box) self.single_click_preview_check_box = QtWidgets.QCheckBox(self.ui_group_box) self.single_click_preview_check_box.setObjectName('single_click_preview_check_box') self.ui_layout.addRow(self.single_click_preview_check_box) self.expand_service_item_check_box = QtWidgets.QCheckBox(self.ui_group_box) self.expand_service_item_check_box.setObjectName('expand_service_item_check_box') self.ui_layout.addRow(self.expand_service_item_check_box) self.search_as_type_check_box = QtWidgets.QCheckBox(self.ui_group_box) self.search_as_type_check_box.setObjectName('SearchAsType_check_box') self.ui_layout.addRow(self.search_as_type_check_box) self.enable_auto_close_check_box = QtWidgets.QCheckBox(self.ui_group_box) self.enable_auto_close_check_box.setObjectName('enable_auto_close_check_box') self.ui_layout.addRow(self.enable_auto_close_check_box) self.left_layout.addWidget(self.ui_group_box) # Default service name self.service_name_group_box = QtWidgets.QGroupBox(self.left_column) self.service_name_group_box.setObjectName('service_name_group_box') self.service_name_layout = QtWidgets.QFormLayout(self.service_name_group_box) self.service_name_check_box = QtWidgets.QCheckBox(self.service_name_group_box) self.service_name_check_box.setObjectName('service_name_check_box') self.service_name_layout.setObjectName('service_name_layout') self.service_name_layout.addRow(self.service_name_check_box) self.service_name_time_label = QtWidgets.QLabel(self.service_name_group_box) self.service_name_time_label.setObjectName('service_name_time_label') self.service_name_day = QtWidgets.QComboBox(self.service_name_group_box) self.service_name_day.addItems(['', '', '', '', '', '', '', '']) self.service_name_day.setObjectName('service_name_day') self.service_name_time = QtWidgets.QTimeEdit(self.service_name_group_box) self.service_name_time.setObjectName('service_name_time') self.service_name_time_layout = QtWidgets.QHBoxLayout() self.service_name_time_layout.setObjectName('service_name_time_layout') self.service_name_time_layout.addWidget(self.service_name_day) self.service_name_time_layout.addWidget(self.service_name_time) self.service_name_layout.addRow(self.service_name_time_label, self.service_name_time_layout) self.service_name_label = QtWidgets.QLabel(self.service_name_group_box) self.service_name_label.setObjectName('service_name_label') self.service_name_edit = QtWidgets.QLineEdit(self.service_name_group_box) self.service_name_edit.setObjectName('service_name_edit') self.service_name_edit.setValidator(QtGui.QRegExpValidator(QtCore.QRegExp(r'[^/\\?*|<>\[\]":+]+'), self)) self.service_name_revert_button = QtWidgets.QToolButton(self.service_name_group_box) self.service_name_revert_button.setObjectName('service_name_revert_button') self.service_name_revert_button.setIcon(build_icon(':/general/general_revert.png')) self.service_name_button_layout = QtWidgets.QHBoxLayout() self.service_name_button_layout.setObjectName('service_name_button_layout') self.service_name_button_layout.addWidget(self.service_name_edit) self.service_name_button_layout.addWidget(self.service_name_revert_button) self.service_name_layout.addRow(self.service_name_label, self.service_name_button_layout) self.service_name_example_label = QtWidgets.QLabel(self.service_name_group_box) self.service_name_example_label.setObjectName('service_name_example_label') self.service_name_example = QtWidgets.QLabel(self.service_name_group_box) self.service_name_example.setObjectName('service_name_example') self.service_name_layout.addRow(self.service_name_example_label, self.service_name_example) self.left_layout.addWidget(self.service_name_group_box) # Data Directory self.data_directory_group_box = QtWidgets.QGroupBox(self.left_column) self.data_directory_group_box.setObjectName('data_directory_group_box') self.data_directory_layout = QtWidgets.QFormLayout(self.data_directory_group_box) self.data_directory_layout.setObjectName('data_directory_layout') self.data_directory_current_label = QtWidgets.QLabel(self.data_directory_group_box) self.data_directory_current_label.setObjectName('data_directory_current_label') self.data_directory_label = QtWidgets.QLabel(self.data_directory_group_box) self.data_directory_label.setObjectName('data_directory_label') self.data_directory_new_label = QtWidgets.QLabel(self.data_directory_group_box) self.data_directory_new_label.setObjectName('data_directory_current_label') self.new_data_directory_edit = QtWidgets.QLineEdit(self.data_directory_group_box) self.new_data_directory_edit.setObjectName('new_data_directory_edit') self.new_data_directory_edit.setReadOnly(True) self.new_data_directory_has_files_label = QtWidgets.QLabel(self.data_directory_group_box) self.new_data_directory_has_files_label.setObjectName('new_data_directory_has_files_label') self.new_data_directory_has_files_label.setWordWrap(True) self.data_directory_browse_button = QtWidgets.QToolButton(self.data_directory_group_box) self.data_directory_browse_button.setObjectName('data_directory_browse_button') self.data_directory_browse_button.setIcon(build_icon(':/general/general_open.png')) self.data_directory_default_button = QtWidgets.QToolButton(self.data_directory_group_box) self.data_directory_default_button.setObjectName('data_directory_default_button') self.data_directory_default_button.setIcon(build_icon(':/general/general_revert.png')) self.data_directory_cancel_button = QtWidgets.QToolButton(self.data_directory_group_box) self.data_directory_cancel_button.setObjectName('data_directory_cancel_button') self.data_directory_cancel_button.setIcon(build_icon(':/general/general_delete.png')) self.new_data_directory_label_layout = QtWidgets.QHBoxLayout() self.new_data_directory_label_layout.setObjectName('new_data_directory_label_layout') self.new_data_directory_label_layout.addWidget(self.new_data_directory_edit) self.new_data_directory_label_layout.addWidget(self.data_directory_browse_button) self.new_data_directory_label_layout.addWidget(self.data_directory_default_button) self.data_directory_copy_check_layout = QtWidgets.QHBoxLayout() self.data_directory_copy_check_layout.setObjectName('data_directory_copy_check_layout') self.data_directory_copy_check_box = QtWidgets.QCheckBox(self.data_directory_group_box) self.data_directory_copy_check_box.setObjectName('data_directory_copy_check_box') self.data_directory_copy_check_layout.addWidget(self.data_directory_copy_check_box) self.data_directory_copy_check_layout.addStretch() self.data_directory_copy_check_layout.addWidget(self.data_directory_cancel_button) self.data_directory_layout.addRow(self.data_directory_current_label, self.data_directory_label) self.data_directory_layout.addRow(self.data_directory_new_label, self.new_data_directory_label_layout) self.data_directory_layout.addRow(self.data_directory_copy_check_layout) self.data_directory_layout.addRow(self.new_data_directory_has_files_label) self.left_layout.addWidget(self.data_directory_group_box) self.left_layout.addStretch() # Default Image self.default_image_group_box = QtWidgets.QGroupBox(self.right_column) self.default_image_group_box.setObjectName('default_image_group_box') self.default_image_layout = QtWidgets.QFormLayout(self.default_image_group_box) self.default_image_layout.setObjectName('default_image_layout') self.default_color_label = QtWidgets.QLabel(self.default_image_group_box) self.default_color_label.setObjectName('default_color_label') self.default_color_button = ColorButton(self.default_image_group_box) self.default_color_button.setObjectName('default_color_button') self.default_image_layout.addRow(self.default_color_label, self.default_color_button) self.default_file_label = QtWidgets.QLabel(self.default_image_group_box) self.default_file_label.setObjectName('default_file_label') self.default_file_edit = QtWidgets.QLineEdit(self.default_image_group_box) self.default_file_edit.setObjectName('default_file_edit') self.default_browse_button = QtWidgets.QToolButton(self.default_image_group_box) self.default_browse_button.setObjectName('default_browse_button') self.default_browse_button.setIcon(build_icon(':/general/general_open.png')) self.default_revert_button = QtWidgets.QToolButton(self.default_image_group_box) self.default_revert_button.setObjectName('default_revert_button') self.default_revert_button.setIcon(build_icon(':/general/general_revert.png')) self.default_file_layout = QtWidgets.QHBoxLayout() self.default_file_layout.setObjectName('default_file_layout') self.default_file_layout.addWidget(self.default_file_edit) self.default_file_layout.addWidget(self.default_browse_button) self.default_file_layout.addWidget(self.default_revert_button) self.default_image_layout.addRow(self.default_file_label, self.default_file_layout) self.right_layout.addWidget(self.default_image_group_box) # Hide mouse self.hide_mouse_group_box = QtWidgets.QGroupBox(self.right_column) self.hide_mouse_group_box.setObjectName('hide_mouse_group_box') self.hide_mouse_layout = QtWidgets.QVBoxLayout(self.hide_mouse_group_box) self.hide_mouse_layout.setObjectName('hide_mouse_layout') self.hide_mouse_check_box = QtWidgets.QCheckBox(self.hide_mouse_group_box) self.hide_mouse_check_box.setObjectName('hide_mouse_check_box') self.hide_mouse_layout.addWidget(self.hide_mouse_check_box) self.right_layout.addWidget(self.hide_mouse_group_box) # Service Item Slide Limits self.slide_group_box = QtWidgets.QGroupBox(self.right_column) self.slide_group_box.setObjectName('slide_group_box') self.slide_layout = QtWidgets.QVBoxLayout(self.slide_group_box) self.slide_layout.setObjectName('slide_layout') self.slide_label = QtWidgets.QLabel(self.slide_group_box) self.slide_label.setWordWrap(True) self.slide_layout.addWidget(self.slide_label) self.end_slide_radio_button = QtWidgets.QRadioButton(self.slide_group_box) self.end_slide_radio_button.setObjectName('end_slide_radio_button') self.slide_layout.addWidget(self.end_slide_radio_button) self.wrap_slide_radio_button = QtWidgets.QRadioButton(self.slide_group_box) self.wrap_slide_radio_button.setObjectName('wrap_slide_radio_button') self.slide_layout.addWidget(self.wrap_slide_radio_button) self.next_item_radio_button = QtWidgets.QRadioButton(self.slide_group_box) self.next_item_radio_button.setObjectName('next_item_radio_button') self.slide_layout.addWidget(self.next_item_radio_button) self.right_layout.addWidget(self.slide_group_box) # Display Workarounds self.display_workaround_group_box = QtWidgets.QGroupBox(self.left_column) self.display_workaround_group_box.setObjectName('display_workaround_group_box') self.display_workaround_layout = QtWidgets.QVBoxLayout(self.display_workaround_group_box) self.display_workaround_layout.setObjectName('display_workaround_layout') self.x11_bypass_check_box = QtWidgets.QCheckBox(self.display_workaround_group_box) self.x11_bypass_check_box.setObjectName('x11_bypass_check_box') self.display_workaround_layout.addWidget(self.x11_bypass_check_box) self.alternate_rows_check_box = QtWidgets.QCheckBox(self.display_workaround_group_box) self.alternate_rows_check_box.setObjectName('alternate_rows_check_box') self.display_workaround_layout.addWidget(self.alternate_rows_check_box) self.right_layout.addWidget(self.display_workaround_group_box) self.right_layout.addStretch() self.should_update_service_name_example = False self.service_name_check_box.toggled.connect(self.service_name_check_box_toggled) self.service_name_day.currentIndexChanged.connect(self.on_service_name_day_changed) self.service_name_time.timeChanged.connect(self.update_service_name_example) self.service_name_edit.textChanged.connect(self.update_service_name_example) self.service_name_revert_button.clicked.connect(self.on_service_name_revert_button_clicked) self.default_color_button.colorChanged.connect(self.on_background_color_changed) self.default_browse_button.clicked.connect(self.on_default_browse_button_clicked) self.default_revert_button.clicked.connect(self.on_default_revert_button_clicked) self.alternate_rows_check_box.toggled.connect(self.on_alternate_rows_check_box_toggled) self.data_directory_browse_button.clicked.connect(self.on_data_directory_browse_button_clicked) self.data_directory_default_button.clicked.connect(self.on_data_directory_default_button_clicked) self.data_directory_cancel_button.clicked.connect(self.on_data_directory_cancel_button_clicked) self.data_directory_copy_check_box.toggled.connect(self.on_data_directory_copy_check_box_toggled) self.end_slide_radio_button.clicked.connect(self.on_end_slide_button_clicked) self.wrap_slide_radio_button.clicked.connect(self.on_wrap_slide_button_clicked) self.next_item_radio_button.clicked.connect(self.on_next_item_button_clicked) self.search_as_type_check_box.stateChanged.connect(self.on_search_as_type_check_box_changed)