From aa6a66c3b380005f53a13e1ef732d9ca1d656dab Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Mon, 28 Sep 2009 02:13:44 -0400 Subject: Better dvdimage gui and main gui --- mainwindow.cpp | 24 +++++++++++++++--------- mainwindow.h | 4 ++-- newdvdgui.h | 2 +- newimagegui.cpp | 56 ++++++++++++++++++++++++++++++++------------------------ newimagegui.h | 14 +++++++++++--- titleloader.cpp | 9 +++++++++ titleloader.h | 2 ++ 7 files changed, 72 insertions(+), 39 deletions(-) diff --git a/mainwindow.cpp b/mainwindow.cpp index e89df5a..d7d7efb 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -6,11 +6,12 @@ #include "job.h" #include "newdvdgui.h" #include "newimagegui.h" -#include +#include #include #include #include #include +#include #include MainWindow::MainWindow() @@ -31,16 +32,20 @@ MainWindow::MainWindow() connect(m_queue, SIGNAL(runningJob(Job*)), this, SLOT(runningJob(Job*))); m_videoGuis = new QVBoxLayout; m_jobGuis = new QVBoxLayout; - QGridLayout *layout = new QGridLayout; - layout->addWidget(new QLabel(tr("Video Queue")), 0, 0, Qt::AlignTop | Qt::AlignHCenter); - layout->addWidget(new QLabel(tr("Job Queue")), 0, 1, Qt::AlignTop | Qt::AlignHCenter); - layout->addLayout(m_videoGuis, 1, 0, Qt::AlignTop); - layout->addLayout(m_jobGuis, 1, 1, Qt::AlignTop); + QGroupBox *videoGuiBox = new QGroupBox; + videoGuiBox->setTitle(tr("Video Queue")); + videoGuiBox->setLayout(m_videoGuis); + QGroupBox *jobsGuiBox = new QGroupBox; + jobsGuiBox->setTitle(tr("Job Queue")); + jobsGuiBox->setLayout(m_jobGuis); + QHBoxLayout *layout = new QHBoxLayout; + layout->addWidget(videoGuiBox); + layout->addWidget(jobsGuiBox); NewDVDGui *newDvdGui = new NewDVDGui; connect(newDvdGui, SIGNAL(newDVD(QString,QMap)), this, SLOT(newVideoFromDVD(QString,QMap))); m_jobGuis->addWidget(newDvdGui, 0, Qt::AlignTop); NewImageGui *newImageGui = new NewImageGui; - connect(newImageGui, SIGNAL(newImage(QString,QString)), this, SLOT(newVideoFromImage(QString,QString))); + connect(newImageGui, SIGNAL(newImage(QString,QString,QMap)), this, SLOT(newVideoFromImage(QString,QString,QMap))); m_jobGuis->addWidget(newImageGui, 0, Qt::AlignTop); foreach (Video *video, toAdd) addVideo(video); @@ -51,16 +56,17 @@ void MainWindow::addVideo(Video *video) m_videoGuis->addWidget(video->widget(), 0, Qt::AlignTop); m_queue->newVideo(video); } -void MainWindow::newVideoFromDVD(QString name, QMap titles) //TODO: use const QString &name +void MainWindow::newVideoFromDVD(const QString &name, QMap titles) //TODO: use const QString &name { Video *video = new Video(name, this); video->setDvdTitles(titles); addVideo(video); } -void MainWindow::newVideoFromImage(const QString &path, const QString &name) +void MainWindow::newVideoFromImage(const QString &path, const QString &name, QMap titles) { Video *video = new Video(name, this); video->setDvdImage(path); + video->setDvdTitles(titles); addVideo(video); } void MainWindow::runningJob(Job *job) diff --git a/mainwindow.h b/mainwindow.h index f2f0af7..a24dc5b 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -21,8 +21,8 @@ private: VideoQueue *m_queue; void addVideo(Video *video); private slots: - void newVideoFromDVD(QString name, QMap titles); - void newVideoFromImage(const QString &path, const QString &name); + void newVideoFromDVD(const QString &name, QMap titles); + void newVideoFromImage(const QString &path, const QString &name, QMap titles); void runningJob(Job *job); void completedJob(bool success); }; diff --git a/newdvdgui.h b/newdvdgui.h index d7f7505..b7b3285 100644 --- a/newdvdgui.h +++ b/newdvdgui.h @@ -30,7 +30,7 @@ private slots: void rip(); void loadedTitles(QMap titles); signals: - void newDVD(QString name, QMap titles); + void newDVD(const QString &name, QMap titles); }; #endif // NEWDVDGUI_H diff --git a/newimagegui.cpp b/newimagegui.cpp index 69298ad..898ed79 100644 --- a/newimagegui.cpp +++ b/newimagegui.cpp @@ -1,4 +1,5 @@ #include "newimagegui.h" +#include "titleloader.h" #include #include #include @@ -11,38 +12,32 @@ NewImageGui::NewImageGui() { + m_titleLoader = new TitleLoader(this); + connect(m_titleLoader, SIGNAL(loadedTitles(QMap)), this, SLOT(loadedTitles(QMap))); m_dvdName = new QLineEdit; - m_dvdName->setVisible(false); connect(m_dvdName, SIGNAL(textChanged(QString)), this, SLOT(validateName(QString))); - m_imagePath = new QLineEdit(tr("Select a DVD image")); - m_imagePath->setEnabled(false); - connect(m_imagePath, SIGNAL(textChanged(QString)), this, SLOT(validatePath(QString))); - QPushButton *browseButton = new QPushButton(tr("&Browse")); - connect(browseButton, SIGNAL(clicked()), this, SLOT(browse())); + m_status = new QLabel; + m_status->setText(tr("Scanning titles...")); + m_browseButton = new QPushButton(tr("&Select File")); + connect(m_browseButton, SIGNAL(clicked()), this, SLOT(browse())); m_importImageButton = new QPushButton(tr("&Import Image")); - m_importImageButton->setEnabled(false); connect(m_importImageButton, SIGNAL(clicked()), this, SLOT(importImage())); - QHBoxLayout *pathArea = new QHBoxLayout; - pathArea->addWidget(m_imagePath); - pathArea->addWidget(browseButton); QVBoxLayout *layout = new QVBoxLayout; - layout->addLayout(pathArea); + layout->addWidget(m_status); layout->addWidget(m_dvdName); + layout->addWidget(m_browseButton); layout->addWidget(m_importImageButton); + initialState(); setLayout(layout); setTitle(tr("New Video from DVD Image")); setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); } -void NewImageGui::validatePath(const QString &path) +void NewImageGui::initialState() { - if (path.toLower().endsWith(".iso") && QFile::exists(path)) { - m_dvdName->setText(QFileInfo(path).baseName()); - m_dvdName->setVisible(true); - } else { - m_dvdName->setText(QString()); - m_dvdName->setVisible(false); - m_importImageButton->setEnabled(false); - } + m_status->setVisible(false); + m_dvdName->setVisible(false); + m_importImageButton->setVisible(false); + m_browseButton->setVisible(true); } void NewImageGui::validateName(const QString &name) { @@ -53,11 +48,24 @@ void NewImageGui::validateName(const QString &name) void NewImageGui::browse() { QString path = QFileDialog::getOpenFileName(this, tr("Select DVD Image"), QString(), tr("DVD Images (*.iso)")); - if (!path.isNull()) - m_imagePath->setText(path); + if (!path.isNull()) { + m_path = path; + m_browseButton->setVisible(false); + m_titleLoader->setLocation(path); + m_status->setVisible(true); + m_titleLoader->loadTitles(); + } +} +void NewImageGui::loadedTitles(QMap titles) +{ + m_dvdName->setVisible(true); + m_dvdName->setText(QFileInfo(m_path).baseName()); + m_status->setVisible(false); + m_importImageButton->setVisible(true); + m_titles = titles; } void NewImageGui::importImage() { - m_importImageButton->setEnabled(false); - emit newImage(m_imagePath->text(), m_dvdName->text()); + initialState(); + emit newImage(m_path, m_dvdName->text(), m_titles); } diff --git a/newimagegui.h b/newimagegui.h index bc43668..f6d2b8e 100644 --- a/newimagegui.h +++ b/newimagegui.h @@ -2,8 +2,11 @@ #define NEWIMAGEGUI_H #include +#include class QLineEdit; class QPushButton; +class QLabel; +class TitleLoader; class NewImageGui : public QGroupBox { @@ -12,15 +15,20 @@ public: NewImageGui(); private: QLineEdit *m_dvdName; - QLineEdit *m_imagePath; + QLabel *m_status; QPushButton *m_importImageButton; + QPushButton *m_browseButton; + TitleLoader *m_titleLoader; + QString m_path; + QMap m_titles; + void initialState(); private slots: - void validatePath(const QString &path); void validateName(const QString &name); void browse(); void importImage(); + void loadedTitles(QMap titles); signals: - void newImage(const QString &path, const QString &name); + void newImage(const QString &path, const QString &name, QMap titles); }; #endif // NEWIMAGEGUI_H diff --git a/titleloader.cpp b/titleloader.cpp index c67517d..3c15fd1 100644 --- a/titleloader.cpp +++ b/titleloader.cpp @@ -5,6 +5,15 @@ TitleLoader::TitleLoader(const QString &location, QObject *parent) : m_location(location) { } +TitleLoader::TitleLoader(QObject *parent) : + QObject(parent), + m_location(QString()) +{ +} +void TitleLoader::setLocation(const QString &location) +{ + m_location = location; +} void TitleLoader::loadTitles() { m_process = new QProcess(this); diff --git a/titleloader.h b/titleloader.h index 52e9b37..599c0d4 100644 --- a/titleloader.h +++ b/titleloader.h @@ -10,7 +10,9 @@ class TitleLoader : public QObject Q_OBJECT public: TitleLoader(const QString &location, QObject *parent = 0); + TitleLoader(QObject *parent = 0); void loadTitles(); + void setLocation(const QString &location); private: QString m_location; QProcess *m_process; -- cgit v1.2.3-59-g8ed1b