Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 9 additions & 5 deletions Quelea/src/main/java/org/quelea/windows/main/DisplayStage.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
*/
public class DisplayStage extends Stage {

private static final Logger LOGGER = LoggerUtils.getLogger();
protected static final Logger LOGGER = LoggerUtils.getLogger();
private static final Cursor BLANK_CURSOR;
private final DisplayCanvas canvas;
private final TestImage testImage;
Expand Down Expand Up @@ -109,30 +109,34 @@ public void changed(ObservableValue<? extends Number> ov, Number t, Number t1) {
addVLCListeners();
}
}

protected void windowChanged() {
// do nothing on purpose
}

private void addVLCListeners() {
widthProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
VLCWindow.INSTANCE.refreshPosition();
windowChanged();
}
});
heightProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
VLCWindow.INSTANCE.refreshPosition();
windowChanged();
}
});
xProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
VLCWindow.INSTANCE.refreshPosition();
windowChanged();
}
});
yProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
VLCWindow.INSTANCE.refreshPosition();
windowChanged();
}
});
}
Expand Down
94 changes: 24 additions & 70 deletions Quelea/src/main/java/org/quelea/windows/main/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ public final class Main extends Application {

private static Logger LOGGER;
private MainWindow mainWindow;
private DisplayStage fullScreenWindow;
private DisplayStage stageWindow;
private ProjectorWindow projectorWindow;
private StageWindow stageWindow;
private Dialog vlcWarningDialog;

public static void main(String[] args) {
Expand Down Expand Up @@ -104,6 +104,11 @@ public void start(Stage stage) {
@Override
public void run() {
try {

final ObservableList<Screen> monitors = Screen.getScreens();
LOGGER.log(Level.INFO, "Number of displays: {0}", monitors.size());
final int monitorNumber = monitors.size();

boolean vlcOk = false;
try {
vlcOk = new VLCDiscovery().getNativeDiscovery().discover();
Expand All @@ -114,32 +119,15 @@ public void run() {
final boolean VLC_INIT;
if (VLC_OK) {
VLC_INIT = VLCWindow.INSTANCE.isInit();
if (ProjectorWindow.needsHidding()) {
VLCWindow.INSTANCE.hide();
}
} else {
VLC_INIT = false;
}
}
new FontInstaller().setupBundledFonts();
new UserFileChecker(QueleaProperties.get().getQueleaUserHome()).checkUserFiles();

final ObservableList<Screen> monitors = Screen.getScreens();
LOGGER.log(Level.INFO, "Number of displays: {0}", monitors.size());

final int projectorScreen = QueleaProperties.get().getProjectorScreen();
final int stageScreen = QueleaProperties.get().getStageScreen();
final int monitorNumber = monitors.size();

final boolean lyricsHidden;
if (!QueleaProperties.get().isProjectorModeCoords() && (projectorScreen >= monitorNumber || projectorScreen < 0)) {
lyricsHidden = true;
} else {
lyricsHidden = false;
}
final boolean stageHidden;
if (!QueleaProperties.get().isStageModeCoords() && (stageScreen >= monitorNumber || stageScreen < 0)) {
stageHidden = true;
} else {
stageHidden = false;
}

if (QueleaProperties.get().getUseMobLyrics()) {
LOGGER.log(Level.INFO, "Starting lyric server on {0}", QueleaProperties.get().getMobLyricsPort());
try {
Expand Down Expand Up @@ -185,51 +173,17 @@ public void run() {
System.setProperty("http.proxyUser", QueleaProperties.get().getWebProxyUser());
System.setProperty("http.proxyPassword", QueleaProperties.get().getWebProxyPassword());
}
if (lyricsHidden) {
LOGGER.log(Level.INFO, "Hiding projector display on monitor 0 (base 0!)");
Platform.runLater(() -> {
fullScreenWindow = new DisplayStage(Utils.getBoundsFromRect2D(monitors.get(0).getVisualBounds()), false);
fullScreenWindow.hide();
});
} else if (QueleaProperties.get().isProjectorModeCoords()) {
LOGGER.log(Level.INFO, "Starting projector display: ", QueleaProperties.get().getProjectorCoords());
Platform.runLater(() -> {
fullScreenWindow = new DisplayStage(QueleaProperties.get().getProjectorCoords(), false);
});
} else {
LOGGER.log(Level.INFO, "Starting projector display on monitor {0} (base 0!)", projectorScreen);
Platform.runLater(() -> {
fullScreenWindow = new DisplayStage(Utils.getBoundsFromRect2D(monitors.get(projectorScreen).getBounds()), false);
fullScreenWindow.setFullScreenAlwaysOnTop(true);
});
}


Platform.runLater(() -> {
QueleaApp.get().setProjectionWindow(fullScreenWindow);
projectorWindow = ProjectorWindow.create();
QueleaApp.get().setProjectionWindow(projectorWindow);
});

if (stageHidden) {
LOGGER.log(Level.INFO, "Hiding stage display on monitor 0 (base 0!)");
Platform.runLater(() -> {
stageWindow = new DisplayStage(Utils.getBoundsFromRect2D(monitors.get(0).getVisualBounds()), true);
stageWindow.hide();
});
} else if (QueleaProperties.get().isStageModeCoords()) {
Platform.runLater(() -> {
LOGGER.log(Level.INFO, "Starting stage display: ", QueleaProperties.get().getStageCoords());
stageWindow = new DisplayStage(QueleaProperties.get().getStageCoords(), true);
});
} else {
Platform.runLater(() -> {
LOGGER.log(Level.INFO, "Starting stage display on monitor {0} (base 0!)", stageScreen);
stageWindow = new DisplayStage(Utils.getBoundsFromRect2D(monitors.get(stageScreen).getVisualBounds()), true);
});
}


Platform.runLater(() -> {
stageWindow = StageWindow.create();
QueleaApp.get().setStageWindow(stageWindow);
});

backgroundExecutor.submit(() -> {
LOGGER.log(Level.INFO, "Loading bibles");
BibleManager.get();
Expand All @@ -253,17 +207,17 @@ public void run() {

LOGGER.log(Level.INFO, "Registering canvases");
Platform.runLater(() -> {
mainWindow.getMainPanel().getLivePanel().registerDisplayCanvas(fullScreenWindow.getCanvas());
mainWindow.getMainPanel().getLivePanel().registerDisplayWindow(fullScreenWindow);
mainWindow.getNoticeDialog().registerCanvas(fullScreenWindow.getCanvas());
if (lyricsHidden) {
fullScreenWindow.hide();
mainWindow.getMainPanel().getLivePanel().registerDisplayCanvas(projectorWindow.getCanvas());
mainWindow.getMainPanel().getLivePanel().registerDisplayWindow(projectorWindow);
mainWindow.getNoticeDialog().registerCanvas(projectorWindow.getCanvas());
if (ProjectorWindow.needsHidding()) {
projectorWindow.hide();
} else {
fullScreenWindow.show();
projectorWindow.show();
}
mainWindow.getMainPanel().getLivePanel().registerDisplayCanvas(stageWindow.getCanvas());
mainWindow.getMainPanel().getLivePanel().registerDisplayWindow(stageWindow);
if (stageHidden) {
if (stageWindow.needsHidding()) {
stageWindow.hide();
} else {
stageWindow.show();
Expand Down
89 changes: 89 additions & 0 deletions Quelea/src/main/java/org/quelea/windows/main/ProjectorWindow.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
/*
* This file is part of Quelea, free projection software for churches.
*
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.quelea.windows.main;

import java.util.logging.Level;
import javafx.application.Platform;
import javafx.collections.ObservableList;
import javafx.geometry.Bounds;
import javafx.stage.Screen;
import org.quelea.services.utils.QueleaProperties;
import org.quelea.services.utils.Utils;
import org.quelea.windows.multimedia.VLCWindow;
import org.quelea.services.utils.LoggerUtils;
import java.util.logging.Logger;

/**
*
* @author Fabian
*/
public class ProjectorWindow extends DisplayStage {

public static ProjectorWindow create() {
final ObservableList<Screen> monitors = Screen.getScreens();
final int projectorScreen = QueleaProperties.get().getProjectorScreen();
ProjectorWindow window = null;
if (needsHidding()) {
LOGGER.log(Level.INFO, "Hiding projector display on monitor 0 (base 0!)");
window = new ProjectorWindow(Utils.getBoundsFromRect2D(monitors.get(0).getVisualBounds()), false);
window.hide();
} else if (QueleaProperties.get().isProjectorModeCoords()) {
LOGGER.log(Level.INFO, "Starting projector display: ", QueleaProperties.get().getProjectorCoords());
window = new ProjectorWindow(QueleaProperties.get().getProjectorCoords(), false);
} else {
LOGGER.log(Level.INFO, "Starting projector display on monitor {0} (base 0!)", projectorScreen);
window = new ProjectorWindow(Utils.getBoundsFromRect2D(monitors.get(projectorScreen).getBounds()), false);
window.setFullScreenAlwaysOnTop(true);
}

return window;
}

public ProjectorWindow(Bounds area, boolean stageView) {
super(area, stageView);
}

public static boolean needsHidding() {
final ObservableList<Screen> monitors = Screen.getScreens();
final int projectorScreen = QueleaProperties.get().getProjectorScreen();
final int monitorNumber = monitors.size();

final boolean windowNeedsHidding;
if (!QueleaProperties.get().isProjectorModeCoords() && (projectorScreen >= monitorNumber || projectorScreen < 0)) {
windowNeedsHidding = true;
} else {
windowNeedsHidding = false;
}

return windowNeedsHidding;
}

@Override
protected void windowChanged() {

// this is here incase the projector monitor drops out
// which often happens at my church when another TV is plugged in or out
if (needsHidding()) {
hide();
VLCWindow.INSTANCE.hide();
}
else {
VLCWindow.INSTANCE.refreshPosition();
}
}
}
12 changes: 6 additions & 6 deletions Quelea/src/main/java/org/quelea/windows/main/QueleaApp.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ public class QueleaApp {

private static final QueleaApp INSTANCE = new QueleaApp();
private MainWindow mainWindow;
private DisplayStage projectionWindow;
private DisplayStage stageWindow;
private ProjectorWindow projectionWindow;
private StageWindow stageWindow;
private MobileLyricsServer mls;
private RemoteControlServer rcs;
private AutoDetectServer ads;
Expand Down Expand Up @@ -85,15 +85,15 @@ public void openSchedule(File file) {
* Get the projection window.
* @return the projection window.
*/
public DisplayStage getProjectionWindow() {
public ProjectorWindow getProjectionWindow() {
return projectionWindow;
}

/**
* Get the stage window.
* @return the stage window.
*/
public DisplayStage getStageWindow() {
public StageWindow getStageWindow() {
return stageWindow;
}

Expand Down Expand Up @@ -150,15 +150,15 @@ public void setRemoteControlServer(RemoteControlServer rcs) {
* Set the projection window.
* @param projectionWindow the projection window.
*/
public void setProjectionWindow(DisplayStage projectionWindow) {
public void setProjectionWindow(ProjectorWindow projectionWindow) {
this.projectionWindow = projectionWindow;
}

/**
* Set the stage window.
* @param lyricWindow the stage window.
*/
public void setStageWindow(DisplayStage lyricWindow) {
public void setStageWindow(StageWindow lyricWindow) {
this.stageWindow = lyricWindow;
}

Expand Down
Loading