Added new values to theme.json and added logic for ui

Also fixed normal speed not working and changed "Default" to "Normal" in the enums as it makes more sense.
This commit is contained in:
Daniel 2019-10-26 09:57:00 +00:00 committed by Philip Ridout
parent 1b9e68023e
commit d2e31c26e9
9 changed files with 305 additions and 24 deletions

View File

@ -43,6 +43,26 @@ var VerticalAlign = {
Bottom: 2
};
/**
* Transition type enumeration
*/
var TransitionType = {
Fade: 0,
Slide: 1,
Convex: 2,
Concave: 3,
Zoom: 4
};
/**
* Transition speed enumeration
*/
var TransitionSpeed = {
Normal: 0,
Fast: 1,
Slow: 2
};
/**
* Audio state enumeration
*/
@ -329,6 +349,7 @@ var Display = {
_alertState: AlertState.NotDisplaying,
_transitionState: TransitionState.NoTransition,
_animationState: AnimationState.NoAnimation,
_doTransitions: false,
_revealConfig: {
margin: 0.0,
minScale: 1.0,
@ -348,7 +369,8 @@ var Display = {
/**
* Start up reveal and do any other initialisation
*/
init: function () {
init: function (doTransitions=false) {
Display._doTransitions = doTransitions;
Reveal.initialize(Display._revealConfig);
},
/**
@ -360,9 +382,10 @@ var Display = {
/**
* Set the transition type
* @param {string} transitionType - Can be one of "none", "fade", "slide", "convex", "concave", "zoom"
* @param {string} transitionSpeed - Can be one of "default", "fast", "slow"
*/
setTransition: function (transitionType) {
Reveal.configure({"transition": transitionType});
setTransition: function (transitionType, transitionSpeed) {
Reveal.configure({"transition": transitionType, "transitionSpeed": transitionSpeed});
},
/**
* Clear the current list of slides
@ -869,6 +892,44 @@ var Display = {
},
setTheme: function (theme) {
Display._theme = theme;
// Set slide transitions
var new_transition_type = "none",
new_transition_speed = "default";
if (!!theme.display_slide_transition && Display._doTransitions) {
switch (theme.display_slide_transition_type) {
case TransitionType.Fade:
new_transition_type = "fade";
break;
case TransitionType.Slide:
new_transition_type = "slide";
break;
case TransitionType.Convex:
new_transition_type = "convex";
break;
case TransitionType.Concave:
new_transition_type = "concave";
break;
case TransitionType.Zoom:
new_transition_type = "zoom";
break;
default:
new_transition_type = "fade";
}
switch (theme.display_slide_transition_speed) {
case TransitionSpeed.Normal:
new_transition_speed = "default";
break;
case TransitionSpeed.Fast:
new_transition_speed = "fast";
break;
case TransitionSpeed.Slow:
new_transition_speed = "slow";
break;
default:
new_transition_speed = "default";
}
}
Display.setTransition(new_transition_type, new_transition_speed);
// Set the background
var globalBackground = $("#global-background")[0];
var backgroundStyle = {};

View File

@ -198,7 +198,8 @@ class DisplayWindow(QtWidgets.QWidget):
"""
Add stuff after page initialisation
"""
self.run_javascript('Display.init();')
js_is_display = str(self.is_display).lower()
self.run_javascript('Display.init({do_transitions});'.format(do_transitions=js_is_display))
self._is_initialised = True
if self._can_show_startup_screen:
self.set_startup_screen()

View File

@ -11,6 +11,8 @@
"display" :{
"horizontal_align": 0,
"slide_transition": false,
"slide_transition_type": 0,
"slide_transition_speed": 0,
"vertical_align": 0
},
"font": {

View File

@ -127,6 +127,82 @@ class BackgroundGradientType(object):
return BackgroundGradientType.LeftBottom
class TransitionType(object):
"""
Type enumeration for transition types.
"""
Fade = 0
Slide = 1
Convex = 2
Concave = 3
Zoom = 4
@staticmethod
def to_string(transition_type):
"""
Return a string representation of a transition type.
"""
if transition_type == TransitionType.Fade:
return 'fade'
elif transition_type == TransitionType.Slide:
return 'slide'
elif transition_type == TransitionType.Convex:
return 'convex'
elif transition_type == TransitionType.Concave:
return 'concave'
elif transition_type == TransitionType.Zoom:
return 'zoom'
@staticmethod
def from_string(type_string):
"""
Return a transition type for the given string.
"""
if type_string == 'fade':
return TransitionType.Fade
elif type_string == 'slide':
return TransitionType.Slide
elif type_string == 'convex':
return TransitionType.Convex
elif type_string == 'concave':
return TransitionType.Concave
elif type_string == 'zoom':
return TransitionType.Zoom
class TransitionSpeed(object):
"""
Type enumeration for transition types.
"""
Normal = 0
Fast = 1
Slow = 2
@staticmethod
def to_string(transition_speed):
"""
Return a string representation of a transition type.
"""
if transition_speed == TransitionSpeed.Normal:
return 'normal'
elif transition_speed == TransitionSpeed.Fast:
return 'fast'
elif transition_speed == TransitionSpeed.Slow:
return 'slow'
@staticmethod
def from_string(type_string):
"""
Return a transition type for the given string.
"""
if type_string == 'normal':
return TransitionSpeed.Normal
if type_string == 'fast':
return TransitionSpeed.Fast
elif type_string == 'slow':
return TransitionSpeed.Slow
class HorizontalType(object):
"""
Type enumeration for horizontal alignment.
@ -153,7 +229,7 @@ class VerticalType(object):
BOOLEAN_LIST = ['bold', 'italics', 'override', 'outline', 'shadow', 'slide_transition']
INTEGER_LIST = ['size', 'line_adjustment', 'x', 'height', 'y', 'width', 'shadow_size', 'outline_size',
'horizontal_align', 'vertical_align', 'wrap_style']
'horizontal_align', 'vertical_align', 'wrap_style', 'slide_transition_type', 'slide_transition_speed']
class Theme(object):

View File

@ -98,6 +98,7 @@ class ThemeForm(QtWidgets.QWizard, Ui_ThemeWizard, RegistryProperties):
self.main_font_combo_box.activated.connect(self.calculate_lines)
self.footer_font_combo_box.activated.connect(self.update_theme)
self.footer_size_spin_box.valueChanged.connect(self.update_theme)
self.transitions_check_box.stateChanged.connect(self.on_transitions_check_box_state_changed)
def set_defaults(self):
"""
@ -145,6 +146,8 @@ class ThemeForm(QtWidgets.QWizard, Ui_ThemeWizard, RegistryProperties):
self.background_page.registerField('horizontal', self.horizontal_combo_box)
self.background_page.registerField('vertical', self.vertical_combo_box)
self.background_page.registerField('slide_transition', self.transitions_check_box)
self.background_page.registerField('slide_transition_type', self.transition_combo_box)
self.background_page.registerField('slide_transition_speed', self.transition_speed_combo_box)
self.background_page.registerField('name', self.theme_name_edit)
def calculate_lines(self):
@ -251,10 +254,7 @@ class ThemeForm(QtWidgets.QWizard, Ui_ThemeWizard, RegistryProperties):
Change state as Shadow check box changed
"""
if self.update_theme_allowed:
if state == QtCore.Qt.Checked:
self.theme.font_main_shadow = True
else:
self.theme.font_main_shadow = False
self.theme.font_main_shadow = state == QtCore.Qt.Checked
self.shadow_color_button.setEnabled(self.theme.font_main_shadow)
self.shadow_size_spin_box.setEnabled(self.theme.font_main_shadow)
self.calculate_lines()
@ -275,6 +275,16 @@ class ThemeForm(QtWidgets.QWizard, Ui_ThemeWizard, RegistryProperties):
if self.update_theme_allowed:
self.theme.font_footer_override = (value != QtCore.Qt.Checked)
def on_transitions_check_box_state_changed(self, state):
"""
Change state as Transitions check box is changed
"""
if self.update_theme_allowed:
self.theme.display_slide_transition = state == QtCore.Qt.Checked
self.transition_combo_box.setEnabled(self.theme.display_slide_transition)
self.transition_speed_combo_box.setEnabled(self.theme.display_slide_transition)
self.calculate_lines()
def exec(self, edit=False):
"""
Run the wizard.
@ -395,6 +405,8 @@ class ThemeForm(QtWidgets.QWizard, Ui_ThemeWizard, RegistryProperties):
self.setField('horizontal', self.theme.display_horizontal_align)
self.setField('vertical', self.theme.display_vertical_align)
self.setField('slide_transition', self.theme.display_slide_transition)
self.setField('slide_transition_type', self.theme.display_slide_transition_type)
self.setField('slide_transition_speed', self.theme.display_slide_transition_speed)
def set_preview_page_values(self):
"""
@ -538,6 +550,8 @@ class ThemeForm(QtWidgets.QWizard, Ui_ThemeWizard, RegistryProperties):
self.theme.display_horizontal_align = self.horizontal_combo_box.currentIndex()
self.theme.display_vertical_align = self.vertical_combo_box.currentIndex()
self.theme.display_slide_transition = self.field('slide_transition')
self.theme.display_slide_transition_type = self.field('slide_transition_type')
self.theme.display_slide_transition_speed = self.field('slide_transition_speed')
def accept(self):
"""

View File

@ -25,7 +25,13 @@ from PyQt5 import QtCore, QtGui, QtWidgets
from openlp.core.common import is_macosx
from openlp.core.common.i18n import UiStrings, translate
from openlp.core.lib.theme import BackgroundGradientType, BackgroundType, HorizontalType
from openlp.core.lib.theme import (
BackgroundGradientType,
BackgroundType,
HorizontalType,
TransitionType,
TransitionSpeed
)
from openlp.core.lib.ui import add_welcome_page, create_valign_selection_widgets
from openlp.core.ui.icons import UiIcons
from openlp.core.widgets.buttons import ColorButton
@ -271,12 +277,22 @@ class Ui_ThemeWizard(object):
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)
self.transition_layout = QtWidgets.QHBoxLayout()
self.transition_layout.setObjectName("transition_layout")
self.transition_combo_box = QtWidgets.QComboBox(self.alignment_page)
self.transition_combo_box.setObjectName("transition_combo_box")
self.transition_combo_box.addItems(['', '', '', '', ''])
self.transition_layout.addWidget(self.transition_combo_box)
self.transition_speed_label = QtWidgets.QLabel(self.alignment_page)
self.transition_speed_label.setObjectName("transition_speed_label")
self.transition_layout.addWidget(self.transition_speed_label)
self.transition_speed_combo_box = QtWidgets.QComboBox(self.alignment_page)
self.transition_speed_combo_box.setObjectName("transition_speed_combo_box")
self.transition_speed_combo_box.addItems(['', '', ''])
self.transition_layout.addWidget(self.transition_speed_combo_box)
self.alignment_layout.addRow(self.transitions_check_box, self.transition_layout)
theme_wizard.addPage(self.alignment_page)
# Area Position Page
self.area_position_page = QtWidgets.QWizardPage()
@ -460,7 +476,16 @@ class Ui_ThemeWizard(object):
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.transitions_check_box.setText(translate('OpenLP.ThemeWizard', 'Transitions:'))
self.transition_combo_box.setItemText(TransitionType.Fade, translate('OpenLP.ThemeWizard', 'Fade'))
self.transition_combo_box.setItemText(TransitionType.Slide, translate('OpenLP.ThemeWizard', 'Slide'))
self.transition_combo_box.setItemText(TransitionType.Concave, translate('OpenLP.ThemeWizard', 'Concave'))
self.transition_combo_box.setItemText(TransitionType.Convex, translate('OpenLP.ThemeWizard', 'Convex'))
self.transition_combo_box.setItemText(TransitionType.Zoom, translate('OpenLP.ThemeWizard', 'Zoom'))
self.transition_speed_label.setText(translate('OpenLP.ThemeWizard', 'Speed:'))
self.transition_speed_combo_box.setItemText(TransitionSpeed.Normal, translate('OpenLP.ThemeWizard', 'Normal'))
self.transition_speed_combo_box.setItemText(TransitionSpeed.Fast, translate('OpenLP.ThemeWizard', 'Fast'))
self.transition_speed_combo_box.setItemText(TransitionSpeed.Slow, translate('OpenLP.ThemeWizard', 'Slow'))
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.'))

View File

@ -765,13 +765,72 @@ p, li { white-space: pre-wrap; }
</item>
</widget>
</item>
<item row="2" column="1">
<item row="2" column="0">
<widget class="QCheckBox" name="transitionsCheckBox">
<property name="text">
<string>Transitions</string>
<string>Transitions:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<layout class="QHBoxLayout" name="transitionLayout">
<item>
<widget class="QComboBox" name="transitionComboBox">
<item>
<property name="text">
<string>Fade</string>
</property>
</item>
<item>
<property name="text">
<string>Slide</string>
</property>
</item>
<item>
<property name="text">
<string>Convex</string>
</property>
</item>
<item>
<property name="text">
<string>Concave</string>
</property>
</item>
<item>
<property name="text">
<string>Zoom</string>
</property>
</item>
</widget>
</item>
<item>
<widget class="QLabel" name="transitionSpeedLabel">
<property name="text">
<string>Speed:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="transitionSpeedComboBox">
<item>
<property name="text">
<string>Normal</string>
</property>
</item>
<item>
<property name="text">
<string>Fast</string>
</property>
</item>
<item>
<property name="text">
<string>Slow</string>
</property>
</item>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QWizardPage" name="areaPositionPage">

View File

@ -181,4 +181,4 @@ class TestTheme(TestCase):
assert 0 == theme.display_vertical_align, 'display_vertical_align should be 0'
assert theme.font_footer_bold is False, 'font_footer_bold should be False'
assert 'Arial' == theme.font_main_name, 'font_main_name should be "Arial"'
assert 49 == len(theme.__dict__), 'The theme should have 49 attributes'
assert 51 == len(theme.__dict__), 'The theme should have 51 attributes'

View File

@ -123,12 +123,6 @@ describe("The Display object", function () {
expect(Display.setTransition).toBeDefined();
});
it("should have a correctly functioning setTransition() method", function () {
spyOn(Reveal, "configure");
Display.setTransition("fade");
expect(Reveal.configure).toHaveBeenCalledWith({"transition": "fade"});
});
it("should have a correctly functioning clearSlides() method", function () {
expect(Display.clearSlides).toBeDefined();
@ -156,6 +150,55 @@ describe("The Display object", function () {
});
describe("Transitions", function () {
beforeEach(function() {
document.body.innerHTML = "";
_createDiv({"class": "slides"});
_createDiv({"class": "footer"});
_createDiv({"id": "global-background"});
Display._slides = {};
});
afterEach(function() {
// Reset theme
Display._theme = null;
});
it("should have a correctly functioning setTransition() method", function () {
spyOn(Reveal, "configure");
Display.setTransition("fade", "slow");
expect(Reveal.configure).toHaveBeenCalledWith({"transition": "fade", "transitionSpeed": "slow"});
});
it("should have enabled transitions when _doTransitions is true and setTheme is run", function () {
spyOn(Display, "setTransition");
Display._doTransitions = true;
var theme = {
"display_slide_transition": true,
"display_slide_transition_type": TransitionType.Slide,
"display_slide_transition_speed": TransitionSpeed.Fast
}
Display.setTheme(theme);
expect(Display.setTransition).toHaveBeenCalledWith("slide", "fast");
});
it("should have not enabled transitions when init() with no transitions and setTheme is run", function () {
spyOn(Display, "setTransition");
Display._doTransitions = false;
var theme = {
"display_slide_transition": true,
"display_slide_transition_type": TransitionType.Slide,
"display_slide_transition_speed": TransitionSpeed.Fast,
}
Display.setTheme(theme);
expect(Display.setTransition).toHaveBeenCalledWith("none", "default");
});
});
describe("Display.alert", function () {
var alertContainer, alertBackground, alertText, settings, text;