1 #include "testswapscreen.h"
2 #include "testhelpers.hh"
3 
4 #include <QDesktopWidget>
5 #include <QRect>
6 
7 using namespace std;
8 using namespace TestHelpers;
9 
SwapScreensAndCheckAlign(DSPDFViewer & d)10 SwapScreensAndCheckAlign::SwapScreensAndCheckAlign(DSPDFViewer& d):
11 	dspdfviewer(d),
12 	screenPrimary( QApplication::desktop()->screenGeometry( 0 ) ),
13 	screenSecondary( QApplication::desktop()->screenGeometry( 1 ) ),
14 	verify(true)
15 {
16 	DEBUGOUT << "Number of screens:" << QApplication::desktop()->numScreens() ;
17 
18 	DEBUGOUT << "screen 0 [pri]:" << screenPrimary;
19 	DEBUGOUT << "screen 1 [sec]:" << screenSecondary;
20 
21 
22 	if ( QApplication::desktop()->numScreens() != 2 ) {
23 		WARNINGOUT << "Not running in a dual-screen environment";
24 		verify = false;
25 	} else if ( screenPrimary == screenSecondary ) {
26 		WARNINGOUT << "Cannot tell the screens apart";
27 		verify = false;
28 	} else if ( screenPrimary.width() == 0 || screenPrimary.height() == 0 ) {
29 		WARNINGOUT << "Cannot query primary screen size";
30 		verify = false;
31 	} else if ( screenSecondary.width() == 0 || screenSecondary.height() == 0 ) {
32 		WARNINGOUT << "Cannot query secondary screen size";
33 		verify = false;
34 	}
35 	if ( ! verify ) {
36 		WARNINGOUT << "Disabling verification.";
37 	}
38 	// 1 Second time to boot
39 	QTimer::singleShot(1000, this, SLOT(checkStartPositions()));
40 }
41 
checkStartPositions()42 void SwapScreensAndCheckAlign::checkStartPositions() {
43 	DEBUGOUT << "Start positions";
44 	if ( verify ) {
45 		check(dspdfviewer.audienceGeometry(), screenSecondary); // Audience starts on external
46 		check(dspdfviewer.secondGeometry(), screenPrimary); // Presenter starts on internal
47 	}
48 	DEBUGOUT << "Firing screen swap event";
49 	emit screenSwapRequested();
50 	// 0.5 sec to swap
51 	QTimer::singleShot(500, this, SLOT(checkAfterFirstSwap()));
52 }
53 
checkAfterFirstSwap()54 void SwapScreensAndCheckAlign::checkAfterFirstSwap() {
55 	DEBUGOUT << "Check after first swap";
56 	if ( verify ) {
57 		check(dspdfviewer.audienceGeometry(), screenPrimary); // Audience window on laptop
58 		check(dspdfviewer.secondGeometry(), screenSecondary); // Presenter window on beamer
59 	}
60 	emit screenSwapRequested();
61 	// 0.5 sec time to swap
62 	QTimer::singleShot(500, this, SLOT(checkAfterSwapBack()));
63 }
64 
checkAfterSwapBack()65 void SwapScreensAndCheckAlign::checkAfterSwapBack() {
66 	DEBUGOUT << "Check after swapping back";
67 	if ( verify ) {
68 		check(dspdfviewer.audienceGeometry(), screenSecondary);
69 		check(dspdfviewer.secondGeometry(), screenPrimary);
70 		emit quitRequested();
71 	}
72 	else {
73 		QCoreApplication::exit(77);
74 	}
75 }
76