added support for 3. Liga; fix resize bug
[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_tor(new Phonon::AudioOutput(Phonon::MusicCategory, this)),
16     m_audioOutput_pfeife(new Phonon::AudioOutput(Phonon::MusicCategory, this)),
17     m_backend(new BackendKicker(this)),
18     m_datamodel(new MatchDayModel(this, m_backend)),
19     m_scoretbl(new ScoreTable(m_datamodel)),
20     m_settingsdlg(new SettingsDialog()),
21     m_settings(qApp->organizationName(), qApp->applicationName())
22 {
23     QFont f;
24     QPalette palette;
25
26     this->hide();
27     this->setAttribute(Qt::WA_TranslucentBackground);
28
29     // label
30     m_statuslbl.hide();
31     m_statuslbl.setText(tr("BuLi Scores!"));
32     f.setPixelSize(40);
33     palette.setColor(QPalette::Background, QColor(0, 0, 0, 127));
34     palette.setColor(QPalette::Foreground, QColor(255, 255, 255, 127));
35     m_statuslbl.setPalette(palette);
36     m_statuslbl.setAutoFillBackground(true);
37     m_statuslbl.setBackgroundRole(QPalette::Background);
38     m_statuslbl.setAlignment(Qt::AlignCenter);
39
40     m_statuslbl.setGeometry(0, 0, 400, 200);
41     m_statuslbl.setFont(f);
42
43     // table
44     m_layout.addWidget(&m_statuslbl);
45     m_layout.addWidget(m_scoretbl);
46     m_layout.setSizeConstraint(QLayout::SetFixedSize);
47     this->setLayout(&m_layout);
48     this->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
49
50     m_statuslbl.show();
51
52     connect(m_settingsdlg, SIGNAL(accepted()),
53             this, SLOT(onSettingsAccepted()));
54
55     connect(m_backend, SIGNAL(updateFinished(int)),
56             this, SLOT(onBackendUpdateFinished(int)));
57
58     connect(m_backend, SIGNAL(updateStarted()),
59             this, SLOT(onBackendUpdateStarted()));
60
61     connect(m_backend, SIGNAL(matchAdded(Match*)),
62            this, SLOT(onMatchAdded(Match*)));
63
64     m_mediaObject_tor->setCurrentSource(Phonon::MediaSource("/usr/share/buliscores/tor.mp3"));
65     m_mediaObject_pfeife->setCurrentSource(Phonon::MediaSource("/usr/share/buliscores/trillerpfeife.mp3"));
66
67     Phonon::createPath(m_mediaObject_tor,     m_audioOutput_tor);
68     Phonon::createPath(m_mediaObject_pfeife,  m_audioOutput_pfeife);
69 }
70
71 void MainWidget::mousePressEvent(QMouseEvent* event)
72 {
73     qDebug() << "widget tapped";
74
75     // only needed for testing on desktop
76     if (event->button() == Qt::RightButton) {
77         this->showSettingsDialog();
78     } else {
79 //        qDebug() << "pfeife volume: " << m_audioOutput_pfeife->volume();
80 //        qDebug() << "tor volume: " << m_audioOutput_tor->volume();
81 //        qDebug() << "pfeife state: " << m_mediaObject_pfeife->state();
82 //        qDebug() << "tor state: " << m_mediaObject_pfeife->state();
83 //        m_mediaObject_pfeife->seek(0);
84 //        if (m_settings.value("Sounds", false).toBool()) {
85 //            m_mediaObject_pfeife->play();
86 //        }
87 //        m_mediaObject_tor->seek(0);
88 //        if (m_settings.value("Sounds", false).toBool()) {
89 //            m_mediaObject_tor->play();
90 //        }
91 //        qDebug() << "pfeife state 2: " << m_mediaObject_pfeife->state();
92 //        qDebug() << "tor state 2: " << m_mediaObject_pfeife->state();
93     }
94 }
95
96 void MainWidget::onSettingsAccepted()
97 {
98     m_backend->selectLeague(m_settings.value("League", "1. Bundesliga").toString());
99 }
100
101 void MainWidget::onBackendUpdateStarted()
102 {
103
104 }
105
106 void MainWidget::onBackendUpdateFinished(int)
107 {
108     if (m_statuslbl.isHidden() == false) {
109         this->hide();
110         m_statuslbl.hide();
111         m_scoretbl->show();
112         this->show();
113     }
114 }
115
116 void MainWidget::onMatchAdded(Match* match) {
117     connect(match, SIGNAL(scoreChanged(int,int,int,int)),
118             this, SLOT(onScoreChange()));
119
120     connect(match, SIGNAL(stateChanged(Match::MatchState)),
121             this, SLOT(onMatchStateChanged(Match::MatchState)));
122
123     qDebug() << "Match (" << match->homeTeam() << " vs "
124              << match->awayTeam() << ") : registering signals";
125 }
126
127 void MainWidget::onScoreChange()
128 {
129     if (m_settings.value("Sounds", false).toBool()) {
130         m_mediaObject_tor->seek(0);
131         m_mediaObject_tor->play();
132         qDebug() << "Playing sound: tor";
133     }
134 }
135
136 void MainWidget::onMatchStateChanged(Match::MatchState)
137 {
138     if (m_settings.value("Sounds", false).toBool()) {
139         m_mediaObject_pfeife->seek(0);
140         m_mediaObject_pfeife->play();
141         qDebug() << "Playing sound: trillerpfeife";
142     }
143 }
144
145 void MainWidget::showSettingsDialog()
146 {
147     m_settingsdlg->show();
148 }
149