diff --git a/Quelea/icons/uppercase-light.png b/Quelea/icons/uppercase-light.png new file mode 100644 index 000000000..eae33fa22 Binary files /dev/null and b/Quelea/icons/uppercase-light.png differ diff --git a/Quelea/icons/uppercase.png b/Quelea/icons/uppercase.png new file mode 100644 index 000000000..6daced852 Binary files /dev/null and b/Quelea/icons/uppercase.png differ diff --git a/Quelea/src/main/java/org/quelea/data/ThemeDTO.java b/Quelea/src/main/java/org/quelea/data/ThemeDTO.java index ae3f40869..b309263bd 100644 --- a/Quelea/src/main/java/org/quelea/data/ThemeDTO.java +++ b/Quelea/src/main/java/org/quelea/data/ThemeDTO.java @@ -47,7 +47,7 @@ public class ThemeDTO implements Serializable { public static final Color DEFAULT_TRANSLATE_FONT_COLOR = Color.WHITESMOKE; public static final SerializableDropShadow DEFAULT_SHADOW = new SerializableDropShadow(Color.BLACK, 0, 0, 2, 0, true); public static final ColourBackground DEFAULT_BACKGROUND = new ColourBackground(Color.BLACK); - public static final ThemeDTO DEFAULT_THEME = new ThemeDTO(DEFAULT_FONT, DEFAULT_FONT_COLOR, DEFAULT_FONT, DEFAULT_TRANSLATE_FONT_COLOR, DEFAULT_BACKGROUND, DEFAULT_SHADOW, DEFAULT_FONT.getFont().getStyle().toLowerCase().contains("bold"), DEFAULT_FONT.getFont().getStyle().toLowerCase().contains("italic"), DEFAULT_FONT.getFont().getStyle().toLowerCase().contains("bold"), true, -1, 0); + public static final ThemeDTO DEFAULT_THEME = new ThemeDTO(DEFAULT_FONT, DEFAULT_FONT_COLOR, DEFAULT_FONT, DEFAULT_TRANSLATE_FONT_COLOR, DEFAULT_BACKGROUND, DEFAULT_SHADOW, DEFAULT_FONT.getFont().getStyle().toLowerCase().contains("bold"), DEFAULT_FONT.getFont().getStyle().toLowerCase().contains("italic"), false, DEFAULT_FONT.getFont().getStyle().toLowerCase().contains("bold"), true, false, -1, 0); private final SerializableFont font; private final SerializableColor fontColor; private final SerializableFont translateFont; @@ -58,8 +58,10 @@ public class ThemeDTO implements Serializable { private File file; private Boolean isFontBold = false; private Boolean isFontItalic = false; + private Boolean isFontUppercase = false; private Boolean isTranslateFontBold = false; private Boolean isTranslateFontItalic = false; + private Boolean isTranslateFontUppercase = false; private int textPosition = -1; private int textAlignment = 0; @@ -71,7 +73,7 @@ public class ThemeDTO implements Serializable { * @param background the background to use for the page. */ public ThemeDTO(SerializableFont font, Color fontPaint, SerializableFont translatefont, Color translatefontPaint, Background background, - SerializableDropShadow shadow, Boolean isFontBold, Boolean isFontItalic, Boolean isTranslateFontBold, Boolean isTranslateFontItalic, + SerializableDropShadow shadow, Boolean isFontBold, Boolean isFontItalic, Boolean isFontUppercase, Boolean isTranslateFontBold, Boolean isTranslateFontItalic, Boolean isTranslateFontUppercase, Integer textPosition, Integer textAlignment) { this.font = font; this.translateFont = translatefont; @@ -82,8 +84,10 @@ public ThemeDTO(SerializableFont font, Color fontPaint, SerializableFont transla this.textShadow = shadow; this.isFontBold = isFontBold; this.isFontItalic = isFontItalic; + this.isFontUppercase = isFontUppercase; this.isTranslateFontBold = isTranslateFontBold; this.isTranslateFontItalic = isTranslateFontItalic; + this.isTranslateFontUppercase = isTranslateFontUppercase; this.textPosition = textPosition; this.textAlignment = textAlignment; } @@ -292,7 +296,7 @@ public Theme getTheme() { final TextShadow shadow = new TextShadow(textShadow.getColor().toString(), textShadow.getOffsetX(), textShadow.getOffsetY(), textShadow.getRadius(), textShadow.getSpread(), textShadow.getUse()); final Theme theme = new Theme(themeName, font.getFont().getName(), fontColor.toString(), translateFont.getFont().getName(), translateFontColor.toString(), backgroundColor, - backgroundVideo, backgroundImage, shadow, isFontBold, isFontItalic, isTranslateFontBold, isTranslateFontItalic, vidHue, vidStretch, textPosition, textAlignment); + backgroundVideo, backgroundImage, shadow, isFontBold, isFontItalic, isFontUppercase, isTranslateFontBold, isTranslateFontItalic, isTranslateFontUppercase,vidHue, vidStretch, textPosition, textAlignment); return theme; } @@ -317,7 +321,7 @@ public static ThemeDTO getDTO(Theme theme) { SerializableDropShadow shadow = new SerializableDropShadow(Utils.parseColour(givenShadow.getShadowColor()), givenShadow.getOffsetX(), givenShadow.getOffsetY(), givenShadow.getRadius(), givenShadow.getSpread(), givenShadow.getUse()); ThemeDTO ret = new ThemeDTO(font, Utils.parseColour(theme.getFontcolour()), translateFont, Utils.parseColour(theme.getTranslateFontcolour()), - background, shadow, theme.isFontBold(), theme.isFontItalic(), theme.isTranslateFontBold(), theme.isTranslateFontItalic(), theme.getTextPosition(), theme.getTextAlignment()); + background, shadow, theme.isFontBold(), theme.isFontItalic(), theme.isFontUppercase(), theme.isTranslateFontBold(), theme.isTranslateFontItalic(), theme.isTranslateFontUppercase(),theme.getTextPosition(), theme.getTextAlignment()); ret.themeName = theme.getName(); return ret; } @@ -343,8 +347,10 @@ public String asString() { } ret.append("$isFontBold:").append(isFontBold); ret.append("$isFontItalic:").append(isFontItalic); + ret.append("$isFontUppercase:").append(isFontUppercase); ret.append("$isTranslateFontBold:").append(isTranslateFontBold); ret.append("$isTranslateFontItalic:").append(isTranslateFontItalic); + ret.append("$isTranslateFontUppercase:").append(isTranslateFontUppercase); if (background instanceof VideoBackground) { ret.append("$backgroundvideo:").append(((VideoBackground) background).getString()); ret.append("$vidhue:").append(((VideoBackground) background).getHue()); @@ -385,8 +391,10 @@ public static ThemeDTO fromString(String content) { String translatefontcolour = ""; String isFontBold = ""; String isFontItalic = ""; + String isFontUppercase = ""; String isTranslateFontBold = ""; String isTranslateFontItalic = ""; + String isTranslateFontUppercase = ""; String backgroundcolour = ""; String backgroundvid = ""; String backgroundimage = ""; @@ -420,8 +428,12 @@ public static ThemeDTO fromString(String content) { isTranslateFontBold = parts[1]; } else if (parts[0].equalsIgnoreCase("isTranslateFontItalic")) { isTranslateFontItalic = parts[1]; + } else if (parts[0].equalsIgnoreCase("isTranslateFontUppercase")) { + isTranslateFontUppercase = parts[1]; } else if (parts[0].equalsIgnoreCase("isFontItalic")) { isFontItalic = parts[1]; + } else if (parts[0].equalsIgnoreCase("isFontUppercase")) { + isFontUppercase = parts[1]; } else if (parts[0].equalsIgnoreCase("backgroundcolour")) { backgroundcolour = parts[1]; } else if (parts[0].equalsIgnoreCase("backgroundimage")) { @@ -475,8 +487,8 @@ public static ThemeDTO fromString(String content) { } SerializableDropShadow shadow = new SerializableDropShadow(Utils.parseColour(shadowColor), Double.parseDouble(shadowOffsetX), Double.parseDouble(shadowOffsetY), Double.parseDouble(shadowRadius), Double.parseDouble(shadowSpread), Boolean.parseBoolean(shadowUse)); ThemeDTO ret = new ThemeDTO(font, Utils.parseColour(fontcolour), translateFont, Utils.parseColour(translatefontcolour), - background, shadow, Boolean.valueOf(isFontBold), Boolean.valueOf(isFontItalic), - Boolean.valueOf(isTranslateFontBold), Boolean.valueOf(isTranslateFontItalic), Integer.parseInt(textPosition), Integer.parseInt(textAlignment.trim())); + background, shadow, Boolean.valueOf(isFontBold), Boolean.valueOf(isFontItalic), Boolean.valueOf(isFontUppercase), + Boolean.valueOf(isTranslateFontBold), Boolean.valueOf(isTranslateFontItalic), Boolean.valueOf(isTranslateFontUppercase), Integer.parseInt(textPosition), Integer.parseInt(textAlignment.trim())); ret.themeName = themeName; return ret; } @@ -512,6 +524,13 @@ public boolean isBold() { return isFontBold; } + /** + * @return the uppercase + */ + public boolean isUppercase() { + return isFontUppercase; + } + /** * @return the italic */ @@ -526,6 +545,13 @@ public boolean isTranslateBold() { return isTranslateFontBold; } + /** + * @return the uppercase + */ + public boolean isTranslateUppercase() { + return isTranslateFontUppercase; + } + @Override public String toString() { return themeName; diff --git a/Quelea/src/main/java/org/quelea/data/db/model/Theme.java b/Quelea/src/main/java/org/quelea/data/db/model/Theme.java index 88f9899e6..a3478f018 100644 --- a/Quelea/src/main/java/org/quelea/data/db/model/Theme.java +++ b/Quelea/src/main/java/org/quelea/data/db/model/Theme.java @@ -31,8 +31,10 @@ public class Theme { private String backgroundimage; private Boolean fontBold; private Boolean fontItalic; + private Boolean fontUpperCase; private Boolean translateFontBold; private Boolean translateFontItalic; + private Boolean translateFontUppercase; private Double videoHue; private Boolean videoStretch; private Integer textPosition; @@ -44,7 +46,7 @@ public Theme() { public Theme(String name, String fontname, String fontcolour, String translateFontname, String translateFontcolour, String backgroundcolour, String backgroundvid, String backgroundimage, - TextShadow shadow, boolean isFontBold, boolean isFontitalic, boolean isTranslateFontBold, boolean isTranslateFontitalic, double videoHue, boolean videoStretch, int textPosition, int textAlignment) { + TextShadow shadow, boolean isFontBold, boolean isFontitalic, boolean isFontUpperCase, boolean isTranslateFontBold, boolean isTranslateFontitalic, boolean isTranslateFontUppercase, double videoHue, boolean videoStretch, int textPosition, int textAlignment) { this.name = name; this.fontname = fontname; this.fontcolour = fontcolour; @@ -56,14 +58,45 @@ public Theme(String name, String fontname, String fontcolour, String translateFo this.textShadow = shadow; this.fontBold = isFontBold; this.fontItalic = isFontitalic; + this.fontUpperCase = isFontUpperCase; this.translateFontBold = isTranslateFontBold; this.translateFontItalic = isTranslateFontitalic; + this.translateFontUppercase = isTranslateFontUppercase; this.videoHue = videoHue; this.videoStretch = videoStretch; this.textPosition = textPosition; this.textAlignment = textAlignment; } + /**This is the original constructer, just for backwards compatibily + * Sets fontUppercase and translateFontUppercase to false + */ + public Theme(String name, String fontname, String fontcolour, String translateFontname, String translateFontcolour, + String backgroundcolour, String backgroundvid, String backgroundimage, + TextShadow shadow, boolean isFontBold, boolean isFontitalic, boolean isTranslateFontBold, boolean isTranslateFontitalic, double videoHue, boolean videoStretch, int textPosition, int textAlignment) { + this.name = name; + this.fontname = fontname; + this.fontcolour = fontcolour; + this.translateFontname = translateFontname; + this.translateFontcolour = translateFontcolour; + this.backgroundcolour = backgroundcolour; + this.backgroundvid = backgroundvid; + this.backgroundimage = backgroundimage; + this.textShadow = shadow; + this.fontBold = isFontBold; + this.fontItalic = isFontitalic; + this.fontUpperCase = false; + this.translateFontBold = isTranslateFontBold; + this.translateFontItalic = isTranslateFontitalic; + this.translateFontUppercase = false; + this.videoHue = videoHue; + this.videoStretch = videoStretch; + this.textPosition = textPosition; + this.textAlignment = textAlignment; + } + + + public Theme(Theme theme) { this.name = theme.name; this.fontname = theme.fontname; @@ -76,8 +109,10 @@ public Theme(Theme theme) { this.textShadow = theme.textShadow; this.fontBold = theme.fontBold; this.fontItalic = theme.fontItalic; + this.fontUpperCase = theme.fontUpperCase; this.translateFontBold = theme.translateFontBold; this.translateFontItalic = theme.translateFontItalic; + this.translateFontUppercase = theme.translateFontUppercase; this.videoHue = theme.videoHue; this.videoStretch = theme.videoStretch; this.textPosition = theme.textPosition; @@ -314,6 +349,21 @@ public void setFontItalic(Boolean isFontItalic) { this.fontItalic = isFontItalic; } + /** + * @return the isFontUpperCase + */ + @Column(name = "isfontuppercase") + public Boolean isFontUppercase() { + return fontUpperCase == null ? false : fontUpperCase; + } + + /** + * @param isFontUppercase the isFontUppercase to set + */ + public void setFontUppercase(Boolean isFontUppercase) { + this.fontUpperCase = isFontUppercase; + } + /** * @return the isFontBold */ @@ -344,6 +394,21 @@ public void setTranslateFontItalic(Boolean translateFontItalic) { this.translateFontItalic = translateFontItalic; } + /** + * @return the isTranslateFontUppercase + */ + @Column(name = "istranslatefontuppercase") + public Boolean isTranslateFontUppercase() { + return translateFontUppercase == null ? false : translateFontUppercase; + } + + /** + * @param translateFontUppercase the translateFontUppercase to set + */ + public void setTranslateFontUppercase(Boolean translateFontUppercase) { + this.translateFontUppercase = translateFontUppercase; + } + @Override public String toString() { return ThemeDTO.getDTO(this).asString(); diff --git a/Quelea/src/main/java/org/quelea/data/displayable/BiblePassage.java b/Quelea/src/main/java/org/quelea/data/displayable/BiblePassage.java index 3d20d0633..d64262f5e 100644 --- a/Quelea/src/main/java/org/quelea/data/displayable/BiblePassage.java +++ b/Quelea/src/main/java/org/quelea/data/displayable/BiblePassage.java @@ -67,7 +67,7 @@ public class BiblePassage implements TextDisplayable, Serializable { public BiblePassage(String biblename, String location, BibleVerse[] verses, boolean multi) { this(location + "\n" + biblename, verses, new ThemeDTO(ThemeDTO.DEFAULT_FONT, ThemeDTO.DEFAULT_FONT_COLOR, ThemeDTO.DEFAULT_FONT, ThemeDTO.DEFAULT_TRANSLATE_FONT_COLOR, - ThemeDTO.DEFAULT_BACKGROUND, ThemeDTO.DEFAULT_SHADOW, false, false, false, true, 3, -1), multi); + ThemeDTO.DEFAULT_BACKGROUND, ThemeDTO.DEFAULT_SHADOW, false, false, false,false, true, false, 3, -1), multi); } /** diff --git a/Quelea/src/main/java/org/quelea/data/displayable/SongDisplayable.java b/Quelea/src/main/java/org/quelea/data/displayable/SongDisplayable.java index 8e383a063..47230d3e4 100644 --- a/Quelea/src/main/java/org/quelea/data/displayable/SongDisplayable.java +++ b/Quelea/src/main/java/org/quelea/data/displayable/SongDisplayable.java @@ -282,7 +282,7 @@ public SongDisplayable(SongDisplayable song) { public SongDisplayable(String title, String author) { this(title, author, new ThemeDTO(ThemeDTO.DEFAULT_FONT, ThemeDTO.DEFAULT_FONT_COLOR, ThemeDTO.DEFAULT_FONT, ThemeDTO.DEFAULT_TRANSLATE_FONT_COLOR, - ThemeDTO.DEFAULT_BACKGROUND, ThemeDTO.DEFAULT_SHADOW, false, false, false, true, -1, 0)); + ThemeDTO.DEFAULT_BACKGROUND, ThemeDTO.DEFAULT_SHADOW, false, false, false, false, true, false, -1, 0)); } /** @@ -684,6 +684,7 @@ public String getLyrics(boolean chords, boolean comments) { } ret.append("\n"); } + return ret.toString().replaceAll("\\s+$", "").replace(" ", "<>"); } @@ -1100,7 +1101,7 @@ public static SongDisplayable parseXML(Node song) { } SongDisplayable ret = new SongDisplayable(title, author, new ThemeDTO(ThemeDTO.DEFAULT_FONT, ThemeDTO.DEFAULT_FONT_COLOR, ThemeDTO.DEFAULT_FONT, ThemeDTO.DEFAULT_TRANSLATE_FONT_COLOR, - ThemeDTO.DEFAULT_BACKGROUND, ThemeDTO.DEFAULT_SHADOW, false, false, false, true, -1, 0)); + ThemeDTO.DEFAULT_BACKGROUND, ThemeDTO.DEFAULT_SHADOW, false, false, false,false, true, false, -1, 0)); if (!updateInDB) { ret.setNoDBUpdate(); } diff --git a/Quelea/src/main/java/org/quelea/windows/lyrics/LyricDrawer.java b/Quelea/src/main/java/org/quelea/windows/lyrics/LyricDrawer.java index d7fb48a37..311e17fe8 100644 --- a/Quelea/src/main/java/org/quelea/windows/lyrics/LyricDrawer.java +++ b/Quelea/src/main/java/org/quelea/windows/lyrics/LyricDrawer.java @@ -457,7 +457,11 @@ private List sanctifyText(String[] linesArr, String[] translationArr) List finalLines = new ArrayList<>(); int translationOffset = 0; for (int i = 0; i < linesArr.length; i++) { - finalLines.add(new LyricLine(linesArr[i])); + if(this.theme.isUppercase()) { + finalLines.add(new LyricLine(linesArr[i].toUpperCase())); + } else { + finalLines.add(new LyricLine(linesArr[i])); + } if (new LineTypeChecker(linesArr[i]).getLineType() == Type.NONBREAK) { continue; } @@ -466,7 +470,11 @@ private List sanctifyText(String[] linesArr, String[] translationArr) translationOffset++; } if (i + translationOffset < translationArr.length && new LineTypeChecker(translationArr[i + translationOffset]).getLineType() == Type.NORMAL) { - finalLines.add(new LyricLine(true, translationArr[i + translationOffset])); + if(this.theme.isTranslateUppercase()) { + finalLines.add(new LyricLine(true, translationArr[i + translationOffset].toUpperCase())); + } else { + finalLines.add(new LyricLine(true, translationArr[i + translationOffset])); + } } } } diff --git a/Quelea/src/main/java/org/quelea/windows/main/schedule/ScheduleList.java b/Quelea/src/main/java/org/quelea/windows/main/schedule/ScheduleList.java index a57a8a952..8f6eaa574 100644 --- a/Quelea/src/main/java/org/quelea/windows/main/schedule/ScheduleList.java +++ b/Quelea/src/main/java/org/quelea/windows/main/schedule/ScheduleList.java @@ -334,7 +334,7 @@ public void run() { if (dropShadow == null || (dropShadow.getColor().equals(Color.WHITE) && dropShadow.getOffsetX() == 0 && dropShadow.getOffsetY() == 0)) { dropShadow = new SerializableDropShadow(Color.BLACK, 3, 3, 2, 0, true); } - ThemeDTO newTheme = new ThemeDTO(theme.getSerializableFont(), theme.getFontPaint(), theme.getTranslateSerializableFont(), theme.getTranslateFontPaint(), new ImageBackground(new File(imageLocation).getName()), dropShadow, theme.getSerializableFont().isBold(), theme.getSerializableFont().isItalic(), theme.getTranslateSerializableFont().isBold(), theme.getTranslateSerializableFont().isItalic(), theme.getTextPosition(), theme.getTextAlignment()); + ThemeDTO newTheme = new ThemeDTO(theme.getSerializableFont(), theme.getFontPaint(), theme.getTranslateSerializableFont(), theme.getTranslateFontPaint(), new ImageBackground(new File(imageLocation).getName()), dropShadow, theme.getSerializableFont().isBold(), theme.getSerializableFont().isItalic(), theme.isUppercase(), theme.getTranslateSerializableFont().isBold(), theme.getTranslateSerializableFont().isItalic(), theme.isTranslateUppercase(),theme.getTextPosition(), theme.getTextAlignment()); for (TextSection section : textDisplayable.getSections()) { section.setTheme(newTheme); } diff --git a/Quelea/src/main/java/org/quelea/windows/newsong/EditThemeDialog.java b/Quelea/src/main/java/org/quelea/windows/newsong/EditThemeDialog.java index d85308306..a7e6a20f1 100644 --- a/Quelea/src/main/java/org/quelea/windows/newsong/EditThemeDialog.java +++ b/Quelea/src/main/java/org/quelea/windows/newsong/EditThemeDialog.java @@ -155,7 +155,7 @@ public ThemeDTO getTheme() { public void setTheme(ThemeDTO theme) { if (theme == null) { theme = new ThemeDTO(ThemeDTO.DEFAULT_FONT, ThemeDTO.DEFAULT_FONT_COLOR, ThemeDTO.DEFAULT_FONT, ThemeDTO.DEFAULT_TRANSLATE_FONT_COLOR, - ThemeDTO.DEFAULT_BACKGROUND, ThemeDTO.DEFAULT_SHADOW, false, false, false, true, -1, 0); + ThemeDTO.DEFAULT_BACKGROUND, ThemeDTO.DEFAULT_SHADOW, false, false, false,false, true, false,-1, 0); theme.setThemeName(""); } if (theme.getFile() == null) { diff --git a/Quelea/src/main/java/org/quelea/windows/newsong/FontOptionsDialog.java b/Quelea/src/main/java/org/quelea/windows/newsong/FontOptionsDialog.java index ec6b8217a..c98a92b77 100644 --- a/Quelea/src/main/java/org/quelea/windows/newsong/FontOptionsDialog.java +++ b/Quelea/src/main/java/org/quelea/windows/newsong/FontOptionsDialog.java @@ -73,6 +73,7 @@ public class FontOptionsDialog extends Stage { private final ColorPicker shadowColor; private final ToggleButton boldButton; private final ToggleButton italicButton; + private final ToggleButton uppercaseButton; private final CheckBox useShadowCheckbox; private final Slider shadowOffsetSlider; private final NumberTextField shadowOffsetText; @@ -137,6 +138,8 @@ public void handle(ActionEvent t) { Utils.setToolbarButtonStyle(boldButton); italicButton = new ToggleButton("", new ImageView(new Image("file:icons/italic.png", 15, 15, false, true))); Utils.setToolbarButtonStyle(italicButton); + uppercaseButton = new ToggleButton("", new ImageView(new Image("file:icons/uppercase.png", 15, 15, false, true))); + Utils.setToolbarButtonStyle(uppercaseButton); BorderPane root = new BorderPane(); VBox controlRoot = new VBox(10); @@ -148,6 +151,7 @@ public void handle(ActionEvent t) { HBox fontButtonBox = new HBox(10); fontButtonBox.getChildren().add(boldButton); fontButtonBox.getChildren().add(italicButton); + fontButtonBox.getChildren().add(uppercaseButton); fontButtonBox.getChildren().add(fontColor); controlRoot.getChildren().add(fontButtonBox); controlRoot.getChildren().add(new Label(LabelGrabber.INSTANCE.getLabel("shadow.text") + ":")); @@ -280,6 +284,7 @@ public void setTheme(ThemeDTO theme) { fontColor.fireEvent(new ActionEvent()); boldButton.setSelected(theme.isTranslateBold()); italicButton.setSelected(theme.isTranslateItalic()); + uppercaseButton.setSelected(theme.isTranslateUppercase()); shadowColor.setValue(theme.getShadow().getColor()); shadowColor.fireEvent(new ActionEvent()); shadowOffsetSlider.setValue(theme.getShadow().getOffsetX()); @@ -336,6 +341,15 @@ public boolean isTranslateItalic() { return italicButton.isSelected(); } + /** + * Determine whether the font is uppercase. + * + * @return true if uppercase, false otherwise. + */ + public boolean isTranslateUppercase() { + return uppercaseButton.isSelected(); + } + } class NumberTextField extends TextField { diff --git a/Quelea/src/main/java/org/quelea/windows/newsong/ImageButton.java b/Quelea/src/main/java/org/quelea/windows/newsong/ImageButton.java index e943a21a8..715a5b188 100644 --- a/Quelea/src/main/java/org/quelea/windows/newsong/ImageButton.java +++ b/Quelea/src/main/java/org/quelea/windows/newsong/ImageButton.java @@ -95,8 +95,8 @@ public void handle(javafx.event.ActionEvent t) { drawer.getTheme().getFontPaint(), new SerializableFont(drawer.getTheme().getTranslateFont()), drawer.getTheme().getTranslateFontPaint(), new ImageBackground(imageLocation), drawer.getTheme().getShadow(), drawer.getTheme().isBold(), - drawer.getTheme().isItalic(), drawer.getTheme().isTranslateBold(), - drawer.getTheme().isTranslateItalic(), drawer.getTheme().getTextPosition(), + drawer.getTheme().isItalic(), drawer.getTheme().isUppercase(), drawer.getTheme().isTranslateBold(), + drawer.getTheme().isTranslateItalic(), drawer.getTheme().isUppercase(), drawer.getTheme().getTextPosition(), drawer.getTheme().getTextAlignment()); drawer.setTheme(theme); diff --git a/Quelea/src/main/java/org/quelea/windows/newsong/ThemeToolbar.java b/Quelea/src/main/java/org/quelea/windows/newsong/ThemeToolbar.java index 8c87e27a0..b419447bc 100644 --- a/Quelea/src/main/java/org/quelea/windows/newsong/ThemeToolbar.java +++ b/Quelea/src/main/java/org/quelea/windows/newsong/ThemeToolbar.java @@ -79,6 +79,7 @@ public class ThemeToolbar extends HBox { private final FontOptionsDialog moreFontOptionsDialog; private final ToggleButton boldButton; private final ToggleButton italicButton; + private final ToggleButton uppercaseButton; private final ToggleButton leftAlignButton; private final ToggleButton centreAlignButton; private final ToggleButton rightAlignButton; @@ -163,6 +164,14 @@ public void handle(javafx.event.ActionEvent t) { themePanel.updateTheme(false); } }); + uppercaseButton = new ToggleButton("", new ImageView(new Image(darkTheme ? "file:icons/uppercase-light.png" : "file:icons/uppercase.png", 15, 15, false, true))); + Utils.setToolbarButtonStyle(uppercaseButton); + uppercaseButton.setOnAction(new EventHandler() { + @Override + public void handle(javafx.event.ActionEvent t) { + themePanel.updateTheme(false); + } + }); ToggleGroup alignGroup = new ToggleGroup(); leftAlignButton = new ToggleButton("", new ImageView(new Image(darkTheme ? "file:icons/leftalign-light.png" : "file:icons/leftalign.png", 15, 15, false, true))); Utils.setToolbarButtonStyle(leftAlignButton); @@ -202,6 +211,7 @@ public void handle(ActionEvent t) { }); fontMid.getChildren().add(boldButton); fontMid.getChildren().add(italicButton); + fontMid.getChildren().add(uppercaseButton); fontMid.getChildren().add(leftAlignButton); fontMid.getChildren().add(centreAlignButton); fontMid.getChildren().add(rightAlignButton); @@ -391,6 +401,7 @@ public void setTheme(ThemeDTO theme) { fontColor.fireEvent(new ActionEvent()); boldButton.setSelected(theme.isBold()); italicButton.setSelected(theme.isItalic()); + uppercaseButton.setSelected(theme.isUppercase()); int align = theme.getTextAlignment(); if (align == -1) { leftAlignButton.setSelected(true); @@ -451,7 +462,7 @@ public ThemeDTO getTheme() { } final SerializableDropShadow shadow = moreFontOptionsDialog.getShadow(); ThemeDTO resultTheme = new ThemeDTO(new SerializableFont(font), fontColor.getValue(), moreFontOptionsDialog.getTranslateFont(), moreFontOptionsDialog.getTranslateColour(), - background, shadow, boldButton.isSelected(), italicButton.isSelected(), moreFontOptionsDialog.isTranslateBold(), moreFontOptionsDialog.isTranslateItalic(), -1, getAlignmentVal()); + background, shadow, boldButton.isSelected(), italicButton.isSelected(), uppercaseButton.isSelected(), moreFontOptionsDialog.isTranslateBold(), moreFontOptionsDialog.isTranslateItalic(), moreFontOptionsDialog.isTranslateUppercase(),-1, getAlignmentVal()); return resultTheme; } diff --git a/Quelea/src/main/java/org/quelea/windows/newsong/VideoButton.java b/Quelea/src/main/java/org/quelea/windows/newsong/VideoButton.java index eca611538..8e616efa9 100644 --- a/Quelea/src/main/java/org/quelea/windows/newsong/VideoButton.java +++ b/Quelea/src/main/java/org/quelea/windows/newsong/VideoButton.java @@ -106,8 +106,10 @@ public void run() { drawer.getTheme().getShadow(), drawer.getTheme().isBold(), drawer.getTheme().isItalic(), + drawer.getTheme().isUppercase(), drawer.getTheme().isTranslateBold(), drawer.getTheme().isTranslateItalic(), + drawer.getTheme().isTranslateUppercase(), drawer.getTheme().getTextPosition(), drawer.getTheme().getTextAlignment()); drawer.setTheme(theme);