restructured project to include packaging files
[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(this)),
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.setAttribute(Qt::WA_TransparentForMouseEvents);
37     m_statuslbl.setAutoFillBackground(true);
38     m_statuslbl.setBackgroundRole(QPalette::Background);
39     m_statuslbl.setAlignment(Qt::AlignCenter);
40
41     m_statuslbl.setFont(f);
42
43     // table
44     m_statuslbl.show();
45
46     this->setLayout(&m_layout);
47     m_layout.addWidget(&m_statuslbl);
48     m_layout.addWidget(m_scoretbl);
49
50     connect(m_settingsdlg, SIGNAL(accepted()),
51             this, SLOT(update()));
52
53     connect(m_backend, SIGNAL(updateFinished(int)),
54             this, SLOT(onBackendUpdateFinished(int)));
55
56     connect(m_backend, SIGNAL(updateStarted()),
57             this, SLOT(onBackendUpdateStarted()));
58
59     connect(m_backend, SIGNAL(matchAdded(Match*)),
60            this, SLOT(onMatchAdded(Match*)));
61
62     m_mediaObject_tor->setCurrentSource(Phonon::MediaSource("/usr/share/buliscores/tor.wav"));
63     m_mediaObject_pfeife->setCurrentSource(Phonon::MediaSource("/usr/share/buliscores/trillerpfeife.wav"));
64
65     Phonon::createPath(m_mediaObject_tor,     m_audioOutput_tor);
66     Phonon::createPath(m_mediaObject_pfeife,  m_audioOutput_pfeife);
67 }
68
69 // only needed for testing on desktop
70 void MainWidget::mousePressEvent(QMouseEvent* event)
71 {
72     if (event->button() == Qt::RightButton) {
73         this->showSettingsDialog();
74     }
75 }
76
77 void MainWidget::update(void)
78 {
79     m_backend->selectLeague(m_settings.value("League", "1. Bundesliga").toString());
80 }
81
82 void MainWidget::onBackendUpdateStarted()
83 {
84
85 }
86
87 void MainWidget::onBackendUpdateFinished(int error)
88 {
89     if (error > 0) {
90         m_statuslbl.setText(tr("Error occured\nRetry pending..."));
91         m_statuslbl.show();
92         m_scoretbl->hide();
93     } else {
94         m_scoretbl->show();
95         m_statuslbl.hide();
96     }
97 }
98
99 void MainWidget::onMatchAdded(Match* match) {
100     connect(match, SIGNAL(scoreChanged(int,int,int,int)),
101             this, SLOT(onScoreChange()));
102
103     connect(match, SIGNAL(stateChanged(Match::MatchState)),
104             this, SLOT(onMatchStateChanged(Match::MatchState)));
105     qDebug() << "Match (" << match->homeTeam() << " vs "
106              << match->awayTeam() << ") : registering signals";
107 }
108
109 void MainWidget::onScoreChange()
110 {
111     m_mediaObject_tor->play();
112     qDebug() << "Playing sound: tor";
113 }
114
115 void MainWidget::onMatchStateChanged(Match::MatchState)
116 {
117     m_mediaObject_pfeife->play();
118     qDebug() << "Playing sound: trillerpfeife";
119 }
120
121 void MainWidget::showSettingsDialog()
122 {
123     m_settingsdlg->show();
124 }
125