- fix sound playback
[buliscores] / src / src / mainwidget.cpp
1 #include <QSettings>
2 #include <QMouseEvent>
3 #include <QApplication>
4 #include <QProcess>
5
6 #include "mainwidget.h"
7 #include "backendkicker.h"
8 #include "matchdaymodel.h"
9 #include "settingsdialog.h"
10
11 MainWidget::MainWidget(QWidget *parent) :
12     QWidget(parent),
13     m_mediaObject_tor(new Phonon::MediaObject(this)),
14     m_mediaObject_pfeife(new Phonon::MediaObject(this)),
15     m_audioOutput(new Phonon::AudioOutput(Phonon::MusicCategory, this)),
16     m_backend(new BackendKicker(this)),
17     m_datamodel(new MatchDayModel(this, m_backend)),
18     m_scoretbl(new ScoreTable(m_datamodel)),
19     m_settingsdlg(new SettingsDialog()),
20     m_settings(qApp->organizationName(), qApp->applicationName())
21 {
22     QFont f;
23     QPalette palette;
24
25     this->hide();
26     this->setAttribute(Qt::WA_TranslucentBackground);
27
28     // label
29     m_statuslbl.hide();
30     m_statuslbl.setText(tr("BuLi Scores!"));
31     f.setPixelSize(40);
32     palette.setColor(QPalette::Background, QColor(0, 0, 0, 127));
33     palette.setColor(QPalette::Foreground, QColor(255, 255, 255, 127));
34     m_statuslbl.setPalette(palette);
35     m_statuslbl.setAutoFillBackground(true);
36     m_statuslbl.setBackgroundRole(QPalette::Background);
37     m_statuslbl.setAlignment(Qt::AlignCenter);
38
39     m_statuslbl.setGeometry(0, 0, 400, 200);
40     m_statuslbl.setFont(f);
41
42     // table
43     m_layout.addWidget(&m_statuslbl);
44     m_layout.addWidget(m_scoretbl);
45     this->setLayout(&m_layout);
46     m_statuslbl.show();
47
48     connect(m_settingsdlg, SIGNAL(accepted()),
49             this, SLOT(onSettingsAccepted()));
50
51     connect(m_backend, SIGNAL(updateFinished(int)),
52             this, SLOT(onBackendUpdateFinished(int)));
53
54     connect(m_backend, SIGNAL(updateStarted()),
55             this, SLOT(onBackendUpdateStarted()));
56
57     connect(m_backend, SIGNAL(matchAdded(Match*)),
58            this, SLOT(onMatchAdded(Match*)));
59
60     m_mediaObject_tor->setCurrentSource(Phonon::MediaSource("/usr/share/buliscores/tor.wav"));
61     m_mediaObject_pfeife->setCurrentSource(Phonon::MediaSource("/usr/share/buliscores/trillerpfeife.wav"));
62
63     Phonon::createPath(m_mediaObject_tor,     m_audioOutput);
64     Phonon::createPath(m_mediaObject_pfeife,  m_audioOutput);
65 }
66
67 void MainWidget::mousePressEvent(QMouseEvent* event)
68 {
69     qDebug() << "widget tapped";
70
71     // only needed for testing on desktop
72     if (event->button() == Qt::RightButton) {
73         this->showSettingsDialog();
74     } else {
75 //        qDebug() << "current volume: " << m_audioOutput->volumeDecibel();
76 //        qDebug() << "MO state: " << m_mediaObject_pfeife->state();
77 //        m_mediaObject_pfeife->seek(0);
78 //        m_mediaObject_pfeife->play();
79 //        qDebug() << "MO state 2: " << m_mediaObject_pfeife->state();
80     }
81 }
82
83 void MainWidget::onSettingsAccepted()
84 {
85     m_backend->selectLeague(m_settings.value("League", "1. Bundesliga").toString());
86 }
87
88 void MainWidget::onBackendUpdateStarted()
89 {
90
91 }
92
93 void MainWidget::onBackendUpdateFinished(int)
94 {
95     if (m_statuslbl.isHidden() == false) {
96         this->hide();
97         m_statuslbl.hide();
98         m_scoretbl->show();
99         this->show();
100     }
101 }
102
103 void MainWidget::onMatchAdded(Match* match) {
104     connect(match, SIGNAL(scoreChanged(int,int,int,int)),
105             this, SLOT(onScoreChange()));
106
107     connect(match, SIGNAL(stateChanged(Match::MatchState)),
108             this, SLOT(onMatchStateChanged(Match::MatchState)));
109     qDebug() << "Match (" << match->homeTeam() << " vs "
110              << match->awayTeam() << ") : registering signals";
111 }
112
113 void MainWidget::onScoreChange()
114 {
115     if (m_settings.value("Sounds", false).toBool()) {
116         m_mediaObject_tor->seek(0);
117         m_mediaObject_tor->play();
118         qDebug() << "Playing sound: tor";
119     }
120 }
121
122 void MainWidget::onMatchStateChanged(Match::MatchState)
123 {
124     if (m_settings.value("Sounds", false).toBool()) {
125         m_mediaObject_pfeife->seek(0);
126         m_mediaObject_pfeife->play();
127         qDebug() << "Playing sound: trillerpfeife";
128     }
129 }
130
131 void MainWidget::showSettingsDialog()
132 {
133     m_settingsdlg->show();
134 }
135