#include #include #include #include #include #include #include #include #include #include "beetplayer.h" #include "configurationdialog.h" #include "playerwidget.h" #include "globals.h" BeetPlayer::BeetPlayer(QWidget *parent, Qt::WindowFlags f) : QMainWindow(parent, f) { //general setup qApp->setWindowIcon(QIcon(":/beetplayer32.png")); setMinimumWidth(1024); setMinimumHeight(768); openDatabase(); createGlobalActions(); mPlayerWidget = new PlayerWidget; connect(mPlayerWidget, SIGNAL(viewModeChanged(QString)), this, SLOT(setViewMode(QString))); connect(mPlayerWidget->player(), SIGNAL(stateChanged(QMediaPlayer::State)), this, SLOT(setPlayMode(QMediaPlayer::State))); connect(mPlayerWidget, SIGNAL(numFilesChanged(int)), this, SLOT(setNumFiles(int))); connect(mPlayerWidget, SIGNAL(playListLengthChanged(quint64)), this, SLOT(setPlayListLength(quint64))); createStatusbar(); setCentralWidget(mPlayerWidget); } void BeetPlayer::openDatabase(){ QSettings s; QString dbhost = s.value("dbhost").toString(); QString dbuser = s.value("dbuser").toString(); QString dbpass = s.value("dbpass").toString(); QString dbname = s.value("dbname").toString(); if(!QSqlDatabase::contains("beetplayerdb")){ QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL", "beetplayerdb"); db.setHostName(dbhost); db.setUserName(dbuser); db.setPassword(dbpass); db.setDatabaseName(dbname); if(!db.open()){ int res = ConfigurationDialog(this).exec(); if(res == QDialog::Accepted){ openDatabase(); }else{ QMessageBox::critical(this, tr("Error"), tr("Could not open database. Giving up!")); qApp->closeAllWindows(); } } } } void BeetPlayer::createGlobalActions(){ QAction *quitA = new QAction(tr("Quit"), this); quitA->setShortcut(tr("CTRL+Q")); connect(quitA, SIGNAL(triggered()), qApp, SLOT(closeAllWindows())); quitA->setData(Globals::QuitAction); Globals::instance()->addAction(quitA); QAction *configA = new QAction(QIcon(":/chastity_belt.png"), tr("Configure..."), this); connect(configA, SIGNAL(triggered()), this, SLOT(configure())); configA->setData(Globals::ConfigAction); Globals::instance()->addAction(configA); } void BeetPlayer::configure(){ ConfigurationDialog w(this); int res = w.exec(); if(res == QDialog::Accepted){ openDatabase(); } } void BeetPlayer::setViewMode(const QString &viewMode){ mModeL->setText(viewMode); } void BeetPlayer::setPlayMode(QMediaPlayer::State state){ if(state == QMediaPlayer::StoppedState){ mActionL->setText(tr("Stopped")); }else if(state == QMediaPlayer::PlayingState){ mActionL->setText("Playing"); }else if(state == QMediaPlayer::PausedState){ mActionL->setText("Paused"); }else{ mActionL->setText(tr("Unknown")); } } void BeetPlayer::setNumFiles(int numFiles){ QString n = QString("%1").arg(numFiles, 4, 10, QChar('0')); mFilesL->setText(n); } void BeetPlayer::setPlayListLength(quint64 seconds){ int h = (seconds / 60 / 60); int min = (seconds / 60) % 60; int secs = seconds % 60; QString r = QString("%1:%2:%3").arg(h, 3, 10, QChar('0')).arg(min, 2, 10, QChar('0')).arg(secs, 2, 10, QChar('0')); mPlaylistDurL->setText(r); } void BeetPlayer::createStatusbar(){ QLabel *l1 = new QLabel(tr("View:")); mModeL = new QLabel; mModeL->setFrameStyle(QFrame::Panel | QFrame::Sunken); mModeL->setFont(QFont("courier")); mModeL->setText(tr("(none)")); statusBar()->addPermanentWidget(l1); statusBar()->addPermanentWidget(mModeL); mGeneralL = new QLabel; mGeneralL->setFrameStyle(QFrame::Panel | QFrame::Sunken); statusBar()->addPermanentWidget(mGeneralL, 20); //20 is an arbitray value, stretch to max QLabel *l2 = new QLabel(tr("Status:")); mActionL = new QLabel; mActionL->setFrameStyle(QFrame::Panel | QFrame::Sunken); mActionL->setFont(QFont("courier")); mActionL->setText(tr("Stopped")); statusBar()->addPermanentWidget(l2); statusBar()->addPermanentWidget(mActionL); QLabel *l3 = new QLabel(tr("NumFiles:")); mFilesL = new QLabel; mFilesL->setFrameStyle(QFrame::Panel | QFrame::Sunken); mFilesL->setFont(QFont("courier")); mFilesL->setText(tr("0000")); statusBar()->addPermanentWidget(l3); statusBar()->addPermanentWidget(mFilesL); QLabel *l4 = new QLabel(tr("Dur:")); mPlaylistDurL = new QLabel; mPlaylistDurL->setFrameStyle(QFrame::Panel | QFrame::Sunken); mPlaylistDurL->setFont(QFont("courier")); mPlaylistDurL->setText("000:00:00"); statusBar()->addPermanentWidget(l4); statusBar()->addPermanentWidget(mPlaylistDurL); }