diff options
author | 2009-10-02 01:02:06 -0400 | |
---|---|---|
committer | 2009-10-02 01:02:46 -0400 | |
commit | 9805164f8879564e2db847c8b08377a7ace042b9 (patch) | |
tree | 0ae566e94c3490834932c8186126f1123db98239 | |
parent | Sizing fixes. (diff) | |
download | AnyRip-9805164f8879564e2db847c8b08377a7ace042b9.tar.xz AnyRip-9805164f8879564e2db847c8b08377a7ace042b9.zip |
Better termination conditions. StatusLabel.
-rw-r--r-- | AnyRip.pro | 6 | ||||
-rw-r--r-- | dvdimagejob.cpp | 7 | ||||
-rw-r--r-- | dvdimagejob.h | 2 | ||||
-rw-r--r-- | encodemp4job.cpp | 19 | ||||
-rw-r--r-- | encodemp4job.h | 3 | ||||
-rw-r--r-- | encodemp4jobgui.cpp | 14 | ||||
-rw-r--r-- | job.cpp | 17 | ||||
-rw-r--r-- | job.h | 5 | ||||
-rw-r--r-- | jobqueue.cpp | 13 | ||||
-rw-r--r-- | jobqueue.h | 1 | ||||
-rw-r--r-- | mainwindow.cpp | 1 | ||||
-rw-r--r-- | statuslabel.cpp | 23 | ||||
-rw-r--r-- | statuslabel.h | 16 | ||||
-rw-r--r-- | titleloadjob.cpp | 3 | ||||
-rw-r--r-- | titleloadjob.h | 2 | ||||
-rw-r--r-- | uploadjob.cpp | 3 | ||||
-rw-r--r-- | uploadjob.h | 2 | ||||
-rw-r--r-- | video.cpp | 59 | ||||
-rw-r--r-- | video.h | 8 | ||||
-rw-r--r-- | videogui.cpp | 63 | ||||
-rw-r--r-- | videogui.h | 14 | ||||
-rw-r--r-- | videoqueue.cpp | 1 |
22 files changed, 183 insertions, 99 deletions
@@ -14,7 +14,8 @@ SOURCES += main.cpp \ encodemp4jobgui.cpp \ newdvdgui.cpp \ newimagegui.cpp \ - titleloader.cpp + titleloader.cpp \ + statuslabel.cpp HEADERS += dvdimagejob.h \ dvdimagejobgui.h \ job.h \ @@ -30,7 +31,8 @@ HEADERS += dvdimagejob.h \ encodemp4jobgui.h \ newdvdgui.h \ newimagegui.h \ - titleloader.h + titleloader.h \ + statuslabel.h LIBS += -ldvdcss \ -ldvdread QT += dbus diff --git a/dvdimagejob.cpp b/dvdimagejob.cpp index ebc818a..12c0ce0 100644 --- a/dvdimagejob.cpp +++ b/dvdimagejob.cpp @@ -20,7 +20,7 @@ DVDImageJob::DVDImageJob(Video *video) DVDImageJob::~DVDImageJob() { disconnect(this, 0, 0, 0); - terminate(); + kill(); } int DVDImageJob::cmpvob(const void *p1, const void *p2) @@ -37,6 +37,9 @@ int DVDImageJob::cmpvob(const void *p1, const void *p2) bool DVDImageJob::executeJob() { + m_locker.lockForWrite(); + m_terminate = false; + m_locker.unlock(); return saveImageToPath(video()->imagePath()); } @@ -245,7 +248,7 @@ QWidget* DVDImageJob::gui() return new DVDImageJobGui(this); } -void DVDImageJob::terminate() +void DVDImageJob::kill() { m_locker.lockForWrite(); m_terminate = true; diff --git a/dvdimagejob.h b/dvdimagejob.h index 53050db..0d29b56 100644 --- a/dvdimagejob.h +++ b/dvdimagejob.h @@ -15,7 +15,7 @@ public: bool saveImageToPath(const QString &path); Video::Jobs jobType() const; public slots: - void terminate(); + void kill(); private: static int cmpvob(const void *p1, const void *p2); typedef struct vobfile { diff --git a/encodemp4job.cpp b/encodemp4job.cpp index 49c7042..217c071 100644 --- a/encodemp4job.cpp +++ b/encodemp4job.cpp @@ -15,7 +15,7 @@ EncodeMP4Job::EncodeMP4Job(Video *video) : EncodeMP4Job::~EncodeMP4Job() { disconnect(this, 0, 0, 0); - terminate(); + kill(); } Video::Jobs EncodeMP4Job::jobType() const { @@ -24,7 +24,7 @@ Video::Jobs EncodeMP4Job::jobType() const bool EncodeMP4Job::executeJob() { m_process = new QProcess(this); - connect(m_process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(terminate())); + connect(m_process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(error())); connect(m_process, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(finished(int,QProcess::ExitStatus))); connect(m_process, SIGNAL(readyRead()), this, SLOT(readyRead())); QStringList arguments; @@ -73,27 +73,34 @@ void EncodeMP4Job::readyRead() } } } -void EncodeMP4Job::terminate() +void EncodeMP4Job::kill() { if (m_process) { disconnect(m_process, 0, 0, 0); - delete m_process; + m_process->terminate(); + m_process->deleteLater(); m_process = 0; QFile::remove(m_encodePath); } - emit completed(false); } void EncodeMP4Job::finished(int exitCode, QProcess::ExitStatus exitStatus) { + if (!m_process) return; if (exitCode == 0 && exitStatus == QProcess::NormalExit) { disconnect(m_process, 0, 0, 0); - delete m_process; + m_process->terminate(); + m_process->deleteLater(); m_process = 0; emit completed(true); } else terminate(); } +void EncodeMP4Job::error() +{ + kill(); + emit completed(false); +} QWidget* EncodeMP4Job::gui() { return new EncodeMP4JobGui(this); diff --git a/encodemp4job.h b/encodemp4job.h index 97d3e50..66e2d81 100644 --- a/encodemp4job.h +++ b/encodemp4job.h @@ -23,8 +23,9 @@ private: private slots: void finished(int exitCode, QProcess::ExitStatus exitStats); void readyRead(); + void error(); public slots: - void terminate(); + void kill(); signals: void encodeProgress(int currentTask, int totalTasks, float percent, float currentFps, float avgFps, QTime timeRemaining); }; diff --git a/encodemp4jobgui.cpp b/encodemp4jobgui.cpp index a9b1f14..680bbba 100644 --- a/encodemp4jobgui.cpp +++ b/encodemp4jobgui.cpp @@ -1,16 +1,23 @@ #include "encodemp4jobgui.h" #include "encodemp4job.h" #include <QVBoxLayout> +#include <QHBoxLayout> #include <QLabel> #include <QProgressBar> +#include <QPushButton> +#include <QStyle> EncodeMP4JobGui::EncodeMP4JobGui(EncodeMP4Job *job) { m_progressBar = new QProgressBar; - m_progressBar->setMaximum(10000); m_progressLabel = new QLabel; + QPushButton *cancel = new QPushButton(style()->standardIcon(QStyle::SP_DialogCancelButton), QString()); + connect(cancel, SIGNAL(clicked()), job, SLOT(terminate())); QVBoxLayout *layout = new QVBoxLayout; - layout->addWidget(m_progressBar); + QHBoxLayout *progressCancel = new QHBoxLayout; + progressCancel->addWidget(m_progressBar); + progressCancel->addWidget(cancel); + layout->addLayout(progressCancel); layout->addWidget(m_progressLabel); setLayout(layout); setTitle(tr("Encoding MP4 of %1").arg(job->video()->title())); @@ -19,7 +26,8 @@ EncodeMP4JobGui::EncodeMP4JobGui(EncodeMP4Job *job) } void EncodeMP4JobGui::encodeProgress(int currentTask, int totalTasks, float percent, float currentFps, float avgFps, QTime timeRemaining) { - m_progressBar->setValue((int)(percent * 100)); + m_progressBar->setValue((int)(percent * 100) + (currentTask - 1) * 10000); + m_progressBar->setMaximum(10000 * totalTasks); if (!timeRemaining.isNull() && avgFps != -1 && currentFps != -1) m_progressLabel->setText(tr("task %1 of %2, %4 fps (avg %5 fps), %3 remaining") .arg(QString::number(currentTask)) @@ -5,7 +5,8 @@ Job::Job(Video *parent, bool threaded) : QObject(parent), m_gui(0), - m_video(parent) + m_video(parent), + m_terminated(false) { if (threaded) { m_watcher = new QFutureWatcher<bool>; @@ -20,6 +21,7 @@ Video* Job::video() const } void Job::runJob() { + m_terminated = false; if (m_watcher) m_watcher->setFuture(QtConcurrent::run(this, &Job::executeJob)); else @@ -27,7 +29,8 @@ void Job::runJob() } void Job::jobFinished() { - emit completed(m_watcher->future().result()); + if (!m_terminated) + emit completed(m_watcher->future().result()); } QWidget* Job::widget() { @@ -39,3 +42,13 @@ QFutureWatcher<bool>* Job::watcher() const { return m_watcher; } +void Job::terminate() +{ + m_terminated = true; + kill(); + emit completed(false); +} +bool Job::terminated() const +{ + return m_terminated; +} @@ -14,19 +14,22 @@ public: virtual Video::Jobs jobType() const = 0; QWidget* widget(); Video* video() const; + bool terminated() const; protected: Job(Video *parent, bool threaded); virtual bool executeJob() = 0; virtual QWidget* gui() = 0; + virtual void kill() = 0; QFutureWatcher<bool>* watcher() const; private: QFutureWatcher<bool> *m_watcher; QWidget *m_gui; Video *m_video; + bool m_terminated; private slots: void jobFinished(); public slots: - virtual void terminate() = 0; + void terminate(); signals: void completed(bool result); }; diff --git a/jobqueue.cpp b/jobqueue.cpp index be747d2..10bfa4e 100644 --- a/jobqueue.cpp +++ b/jobqueue.cpp @@ -5,7 +5,8 @@ JobQueue::JobQueue(QObject *parent) : QObject(parent), - m_jobIsRunning(false) + m_jobIsRunning(false), + m_currentJob(0) { } void JobQueue::addJob(Job *job) @@ -20,6 +21,7 @@ void JobQueue::runNextJob() return; m_jobIsRunning = true; Job *job = m_queue.dequeue(); + m_currentJob = job; qDebug() << "running job" << job->jobType() << "for video" << qobject_cast<Video*>(job->parent())->title(); connect(job, SIGNAL(completed(bool)), this, SLOT(jobCompleted())); emit runningJob(job); @@ -27,6 +29,11 @@ void JobQueue::runNextJob() } void JobQueue::jobCompleted() { - m_jobIsRunning = false; - runNextJob(); + Job *job = qobject_cast<Job*>(sender()); + if (job == m_currentJob) { + m_jobIsRunning = false; + m_currentJob = 0; + runNextJob(); + } else + m_queue.removeAll(job); } @@ -16,6 +16,7 @@ private: QQueue<Job*> m_queue; bool m_jobIsRunning; void runNextJob(); + Job *m_currentJob; private slots: void jobCompleted(); signals: diff --git a/mainwindow.cpp b/mainwindow.cpp index 72dad38..0c2040b 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -78,6 +78,5 @@ void MainWindow::runningJob(Job *job) } void MainWindow::completedJob(bool success) { - //TODO: do something with [lack of] success delete qobject_cast<Job*>(sender())->widget(); } diff --git a/statuslabel.cpp b/statuslabel.cpp new file mode 100644 index 0000000..8312caa --- /dev/null +++ b/statuslabel.cpp @@ -0,0 +1,23 @@ +#include "statuslabel.h" +#include <QStyle> +#include <QLabel> +#include <QHBoxLayout> + +StatusLabel::StatusLabel(const QString &text, QWidget *parent) : + QWidget(parent) +{ + QHBoxLayout *layout = new QHBoxLayout; + m_pixmap = new QLabel; + setCompleted(false); + layout->addWidget(m_pixmap); + layout->addWidget(new QLabel(text)); + setLayout(layout); + setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); +} +void StatusLabel::setCompleted(bool complete) +{ + if (complete) + m_pixmap->setPixmap(style()->standardIcon(QStyle::SP_DialogApplyButton).pixmap(QSize(16, 16))); + else + m_pixmap->setPixmap(style()->standardIcon(QStyle::SP_DialogCancelButton).pixmap(QSize(16, 16))); +} diff --git a/statuslabel.h b/statuslabel.h new file mode 100644 index 0000000..8fa8e07 --- /dev/null +++ b/statuslabel.h @@ -0,0 +1,16 @@ +#ifndef STATUSLABEL_H +#define STATUSLABEL_H + +#include <QWidget> +class QLabel; + +class StatusLabel : public QWidget +{ +public: + StatusLabel(const QString &text, QWidget *parent = 0); + void setCompleted(bool complete); +private: + QLabel *m_pixmap; +}; + +#endif // STATUSLABEL_H diff --git a/titleloadjob.cpp b/titleloadjob.cpp index b59470a..0bb960b 100644 --- a/titleloadjob.cpp +++ b/titleloadjob.cpp @@ -14,6 +14,7 @@ bool TitleLoadJob::executeJob() { //TODO: title load the whole thing sleep(5); + emit completed(true); return true; } QWidget* TitleLoadJob::gui() @@ -21,7 +22,7 @@ QWidget* TitleLoadJob::gui() //TODO: make a gui return new QLabel("Bet your ass this is title loading."); } -void TitleLoadJob::terminate() +void TitleLoadJob::kill() { //TODO: implement terminating } diff --git a/titleloadjob.h b/titleloadjob.h index a2119da..feb9c64 100644 --- a/titleloadjob.h +++ b/titleloadjob.h @@ -14,7 +14,7 @@ protected: bool executeJob(); QWidget* gui(); public slots: - void terminate(); + void kill(); }; #endif // TITLELOADJOB_H diff --git a/uploadjob.cpp b/uploadjob.cpp index 786ce52..70f3beb 100644 --- a/uploadjob.cpp +++ b/uploadjob.cpp @@ -14,6 +14,7 @@ bool UploadJob::executeJob() { //TODO: upload the mp4! sleep(5); + emit completed(true); return true; } QWidget* UploadJob::gui() @@ -21,7 +22,7 @@ QWidget* UploadJob::gui() //TODO: make a gui return new QLabel("Endoplasmic sludge in your upload house"); } -void UploadJob::terminate() +void UploadJob::kill() { //TODO: implement terminating } diff --git a/uploadjob.h b/uploadjob.h index 0bf2989..bac2b26 100644 --- a/uploadjob.h +++ b/uploadjob.h @@ -14,7 +14,7 @@ protected: bool executeJob(); QWidget* gui(); public slots: - void terminate(); + void kill(); }; #endif // UPLOADJOB_H @@ -14,7 +14,6 @@ Video::Video(QString title, QObject *parent) : QObject(parent), m_jobsCompleted(QBitArray(6)), - m_jobsInProgress(QBitArray(6)), m_dvdTitle(1) { title.replace(QChar('/'), QChar('-')); @@ -54,49 +53,49 @@ void Video::saveState() void Video::completedJob(bool success) { Job *job = qobject_cast<Job*>(sender()); - qDebug() << "Job code" << job->jobType() << "completed" << success; + qDebug() << "Job code" << job->jobType() << "completed" << success << "terminated: " << job->terminated(); m_jobsCompleted.setBit(job->jobType(), success); saveState(); - m_jobsInProgress.setBit(job->jobType(), false); + m_jobsInProgress.remove(job->jobType(), job); emit jobCompleted(job->jobType(), success); job->deleteLater(); } DVDImageJob* Video::dvdImageJob() { - if (!m_jobsInProgress.at(Video::DVDImage) && !m_jobsCompleted.at(Video::DVDImage) && DVDDrive::instance()->dvdInserted()) { + if (!m_jobsInProgress.contains(DVDImage) && !m_jobsCompleted.at(DVDImage) && DVDDrive::instance()->dvdInserted()) { DVDImageJob *job = new DVDImageJob(this); connect(job, SIGNAL(completed(bool)), this, SLOT(completedJob(bool))); - m_jobsInProgress.setBit(Video::DVDImage, true); + m_jobsInProgress.insert(DVDImage, job); return job; } return 0; } EncodeMP4Job* Video::encodeMP4Job() { - if (!m_jobsInProgress.at(Video::EncodeMP4) && !m_jobsCompleted.at(Video::EncodeMP4) && m_jobsCompleted.at(Video::DVDImage)) { + if (!m_jobsInProgress.contains(EncodeMP4) && !m_jobsCompleted.at(EncodeMP4) && m_jobsCompleted.at(DVDImage)) { EncodeMP4Job *job = new EncodeMP4Job(this); connect(job, SIGNAL(completed(bool)), this, SLOT(completedJob(bool))); - m_jobsInProgress.setBit(Video::EncodeMP4, true); + m_jobsInProgress.insert(EncodeMP4, job); return job; } return 0; } UploadJob* Video::uploadJob() { - if (!m_jobsInProgress.at(Video::Upload) && !m_jobsCompleted.at(Video::Upload) && m_jobsCompleted.at(Video::EncodeMP4)) { + if (!m_jobsInProgress.contains(Upload) && !m_jobsCompleted.at(Upload) && m_jobsCompleted.at(EncodeMP4)) { UploadJob *job = new UploadJob(this); connect(job, SIGNAL(completed(bool)), this, SLOT(completedJob(bool))); - m_jobsInProgress.setBit(Video::Upload, true); + m_jobsInProgress.insert(Upload, job); return job; } return 0; } TitleLoadJob* Video::titleLoadJob() { - if (!m_jobsInProgress.at(Video::TitleLoad) && !m_jobsCompleted.at(Video::TitleLoad) && m_jobsCompleted.at(Video::Upload) && m_jobsCompleted.at(Video::Subtitle) && m_jobsCompleted.at(Video::Poster)) { + if (!m_jobsInProgress.contains(TitleLoad) && !m_jobsCompleted.at(TitleLoad) && m_jobsCompleted.at(Upload) && m_jobsCompleted.at(Subtitle) && m_jobsCompleted.at(Poster)) { TitleLoadJob *job = new TitleLoadJob(this); connect(job, SIGNAL(completed(bool)), this, SLOT(completedJob(bool))); - m_jobsInProgress.setBit(Video::TitleLoad, true); + m_jobsInProgress.insert(TitleLoad, job); return job; } return 0; @@ -117,33 +116,27 @@ QList<Job*> Video::availableJobs() } void Video::setSubtitle(const QIODevice &input) { - m_jobsInProgress.setBit(Video::Subtitle, true); //TODO: save input to subtitle file - m_jobsCompleted.setBit(Video::Subtitle, true); + m_jobsCompleted.setBit(Subtitle, true); saveState(); - m_jobsInProgress.setBit(Video::Subtitle, false); - emit jobCompleted(Video::Subtitle, true); + emit jobCompleted(Subtitle, true); } void Video::setDvdImage(const QString &path) { - m_jobsInProgress.setBit(Video::DVDImage, true); QFileInfo image(m_imagePath); if (image.exists() && image != QFileInfo(path)) QFile::remove(m_imagePath); QFile::rename(path, m_imagePath); - m_jobsCompleted.setBit(Video::DVDImage, true); + m_jobsCompleted.setBit(DVDImage, true); saveState(); - m_jobsInProgress.setBit(Video::DVDImage, false); - emit jobCompleted(Video::DVDImage, true); + emit jobCompleted(DVDImage, true); } void Video::setPoster(const QIODevice &input) { - m_jobsInProgress.setBit(Video::Poster, true); //TODO: save input to subtitle file - m_jobsCompleted.setBit(Video::Poster, true); + m_jobsCompleted.setBit(Poster, true); saveState(); - m_jobsInProgress.setBit(Video::Poster, false); - emit jobCompleted(Video::Poster, true); + emit jobCompleted(Poster, true); } QString Video::title() const { @@ -166,17 +159,23 @@ void Video::setDvdTitle(int title) if (m_dvdTitle == title) return; m_dvdTitle = title; - if (m_jobsCompleted.at(Video::EncodeMP4)) { - m_jobsCompleted.setBit(Video::EncodeMP4, false); - emit jobCompleted(Video::EncodeMP4, false); - if(m_jobsCompleted.at(Video::Upload)) { - m_jobsCompleted.setBit(Video::Upload, false); - emit jobCompleted(Video::Upload, false); + if (m_jobsCompleted.at(EncodeMP4)) { + m_jobsCompleted.setBit(EncodeMP4, false); + emit jobCompleted(EncodeMP4, false); + if(m_jobsCompleted.at(Upload)) { + m_jobsCompleted.setBit(Upload, false); + emit jobCompleted(Upload, false); } - //TODO: if its already encoding or uploading, cancel those jobs } + terminateJobs(EncodeMP4); + terminateJobs(Upload); saveState(); } +void Video::terminateJobs(Jobs jobType) +{ + foreach(Job* job, m_jobsInProgress.values(jobType)) + job->terminate(); +} QMap<int, QString> Video::dvdTitles() const { return m_dvdTitles; @@ -5,6 +5,7 @@ #include <QBitArray> #include <QList> #include <QMap> +#include <QMultiHash> class QIODevice; class DVDImageJob; @@ -32,7 +33,7 @@ public: int dvdTitle() const; void setDvdTitle(int title); VideoGui* widget(); - bool isJobCompleted(Video::Jobs job) const; + bool isJobCompleted(Jobs job) const; void setDvdTitles(QMap<int, QString> titles); QMap<int, QString> dvdTitles() const; QString imagePath() const; @@ -41,7 +42,7 @@ public: QString posterPath() const; private: QBitArray m_jobsCompleted; - QBitArray m_jobsInProgress; + QMultiHash<Jobs, Job*> m_jobsInProgress; QString m_title; QString m_rootPath; QString m_imagePath; @@ -52,10 +53,11 @@ private: QMap<int, QString> m_dvdTitles; int m_dvdTitle; void saveState(); + void terminateJobs(Jobs jobType); private slots: void completedJob(bool success); signals: - void jobCompleted(Video::Jobs job, bool success); + void jobCompleted(Video::Jobs jobType, bool success); }; #endif // VIDEO_H diff --git a/videogui.cpp b/videogui.cpp index 79a382e..12f1269 100644 --- a/videogui.cpp +++ b/videogui.cpp @@ -1,54 +1,53 @@ #include "videogui.h" +#include "statuslabel.h" #include <QCheckBox> #include <QHBoxLayout> #include <QGridLayout> #include <QLabel> #include <QComboBox> #include <QMap> +#include <QPushButton> VideoGui::VideoGui(Video *video) : m_video(video) { //TODO: disable first 4 without them going grey - m_imageCheck = new QCheckBox(tr("Copied DVD ISO"), this); - m_imageCheck->setChecked(video->isJobCompleted(Video::DVDImage)); - m_imageCheck->setEnabled(false); - m_encodeCheck = new QCheckBox(tr("Encoded MP4"), this); - m_encodeCheck->setChecked(video->isJobCompleted(Video::EncodeMP4)); - m_encodeCheck->setEnabled(false); - m_uploadCheck = new QCheckBox(tr("Uploaded MP4"), this); - m_uploadCheck->setChecked(video->isJobCompleted(Video::Upload)); - m_uploadCheck->setEnabled(false); - m_titleLoadCheck = new QCheckBox(tr("Title-Loaded"), this); - m_titleLoadCheck->setChecked(video->isJobCompleted(Video::TitleLoad)); - m_titleLoadCheck->setEnabled(false); + m_imageStatus = new StatusLabel(tr("Copied DVD ISO"), this); + m_imageStatus->setCompleted(video->isJobCompleted(Video::DVDImage)); + m_encodeStatus = new StatusLabel(tr("Encoded MP4"), this); + m_encodeStatus->setCompleted(video->isJobCompleted(Video::EncodeMP4)); + m_uploadStatus = new StatusLabel(tr("Uploaded MP4"), this); + m_uploadStatus->setCompleted(video->isJobCompleted(Video::Upload)); + m_titleLoadStatus = new StatusLabel(tr("Title-Loaded"), this); + m_titleLoadStatus->setCompleted(video->isJobCompleted(Video::TitleLoad)); m_titleSelector = new QComboBox; QMapIterator<int, QString> i(video->dvdTitles()); while (i.hasNext()) { i.next(); - m_titleSelector->addItem(QString("Title %1: %2").arg(QString::number(i.key())).arg(i.value()), i.key()); + m_titleSelector->addItem(tr("Title %1: %2").arg(QString::number(i.key())).arg(i.value()), i.key()); } int currentIndex = m_titleSelector->findData(video->dvdTitle()); if (currentIndex == -1) currentIndex = 0; m_titleSelector->setCurrentIndex(currentIndex); connect(m_titleSelector, SIGNAL(currentIndexChanged(int)), this, SLOT(titleChanged(int))); - QGridLayout *checkGrid = new QGridLayout; - checkGrid->addWidget(m_imageCheck, 0, 0); - checkGrid->addWidget(m_encodeCheck, 0, 1); - checkGrid->addWidget(m_uploadCheck, 1, 0); - checkGrid->addWidget(m_titleLoadCheck, 1, 1); - checkGrid->addWidget(m_titleSelector, 0, 2); - m_subtitleCheck = new QCheckBox(tr("Found Subtitle"), this); - m_subtitleCheck->setChecked(video->isJobCompleted(Video::Subtitle)); - m_posterCheck = new QCheckBox(tr("Found Poster"), this); - m_posterCheck->setChecked(video->isJobCompleted(Video::Poster)); + QGridLayout *statusGrid = new QGridLayout; + statusGrid->addWidget(m_imageStatus, 0, 0); + statusGrid->addWidget(m_encodeStatus, 0, 1); + statusGrid->addWidget(m_uploadStatus, 1, 0); + statusGrid->addWidget(m_titleLoadStatus, 1, 1); + statusGrid->addWidget(m_titleSelector, 0, 2); + statusGrid->addWidget(new QPushButton("&Change Title Information"), 1, 2); //TODO: this is a placeholder + m_subtitleStatus = new StatusLabel(tr("Found Subtitle"), this); + m_subtitleStatus->setCompleted(video->isJobCompleted(Video::Subtitle)); + m_posterStatus = new StatusLabel(tr("Found Poster"), this); + m_posterStatus->setCompleted(video->isJobCompleted(Video::Poster)); //TODO: actions for checking subtitle and poster check to actually do it connect(video, SIGNAL(jobCompleted(Video::Jobs,bool)), this, SLOT(jobCompleted(Video::Jobs,bool))); QHBoxLayout *layout = new QHBoxLayout; - layout->addLayout(checkGrid); - layout->addWidget(m_subtitleCheck); - layout->addWidget(m_posterCheck); + layout->addLayout(statusGrid); + layout->addWidget(m_subtitleStatus); + layout->addWidget(m_posterStatus); setLayout(layout); setTitle(video->title()); setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); @@ -57,22 +56,22 @@ void VideoGui::jobCompleted(Video::Jobs jobType, bool success) { switch (jobType) { case Video::DVDImage: - m_imageCheck->setChecked(success); + m_imageStatus->setCompleted(success); break; case Video::EncodeMP4: - m_encodeCheck->setChecked(success); + m_encodeStatus->setCompleted(success); break; case Video::Upload: - m_uploadCheck->setChecked(success); + m_uploadStatus->setCompleted(success); break; case Video::TitleLoad: - m_titleLoadCheck->setChecked(success); + m_titleLoadStatus->setCompleted(success); break; case Video::Subtitle: - m_subtitleCheck->setChecked(success); + m_subtitleStatus->setCompleted(success); break; case Video::Poster: - m_posterCheck->setChecked(success); + m_posterStatus->setCompleted(success); break; } } @@ -3,7 +3,7 @@ #include <QGroupBox> #include "video.h" -class QCheckBox; +class StatusLabel; class QComboBox; class Video; @@ -13,12 +13,12 @@ class VideoGui : public QGroupBox public: VideoGui(Video *video); private: - QCheckBox *m_imageCheck; - QCheckBox *m_encodeCheck; - QCheckBox *m_uploadCheck; - QCheckBox *m_titleLoadCheck; - QCheckBox *m_subtitleCheck; - QCheckBox *m_posterCheck; + StatusLabel *m_imageStatus; + StatusLabel *m_encodeStatus; + StatusLabel *m_uploadStatus; + StatusLabel *m_titleLoadStatus; + StatusLabel *m_subtitleStatus; + StatusLabel *m_posterStatus; QComboBox *m_titleSelector; Video *m_video; private slots: diff --git a/videoqueue.cpp b/videoqueue.cpp index 468d17a..5a1db06 100644 --- a/videoqueue.cpp +++ b/videoqueue.cpp @@ -2,7 +2,6 @@ #include "video.h" #include "jobqueue.h" #include "job.h" - #include <QDebug> VideoQueue::VideoQueue(QObject *parent) : |