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