1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
#include "newdvdgui.h"
#include "dvddrive.h"
#include "encodemp4job.h"
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QVBoxLayout>
#include <QSettings>
#include <QHBoxLayout>
#include <QtConcurrentRun>
NewDVDGui::NewDVDGui() :
m_insertDvd(tr("Please insert video DVD.")),
m_loadingTitles(tr("<i>%1 inserted. Scanning titles...</i>")),
m_ripping(tr("Created new video from DVD."))
{
m_watcher = new QFutureWatcher<QMap<int, QString> >;
m_watcher->setParent(this);
connect(m_watcher, SIGNAL(finished()), this, SLOT(loadedTitles()));
m_status = new QLabel;
m_dvdName = new QLineEdit;
connect(m_dvdName, SIGNAL(textChanged(QString)), this, SLOT(validateName(QString)));
m_rip = new QPushButton(tr("&Rip DVD"));
connect(m_rip, SIGNAL(clicked()), this, SLOT(rip()));
m_eject = new QPushButton(tr("&Eject"));
connect(m_eject, SIGNAL(clicked()), DVDDrive::instance(), SLOT(eject()));
QHBoxLayout *buttons = new QHBoxLayout;
buttons->addWidget(m_rip);
buttons->addWidget(m_eject);
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(m_status, 0, Qt::AlignHCenter);
layout->addWidget(m_dvdName);
layout->addLayout(buttons);
if (DVDDrive::instance()->dvdInserted())
dvdAdded();
else
dvdRemoved();
connect(DVDDrive::instance(), SIGNAL(dvdAdded()), this, SLOT(dvdAdded()));
connect(DVDDrive::instance(), SIGNAL(dvdRemoved()), this, SLOT(dvdRemoved()));
setTitle(tr("New Video from DVD"));
setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
setLayout(layout);
}
void NewDVDGui::dvdAdded()
{
QString name = DVDDrive::instance()->dvdName();
m_status->setText(m_loadingTitles.arg(name));
m_dvdName->setText(name); //Calls validateName
m_dvdName->setVisible(false);
m_status->setVisible(true);
m_rip->setVisible(false);
m_eject->setVisible(false);
m_watcher->setFuture(QtConcurrent::run(&EncodeMP4Job::titles, DVDDrive::instance()->dvdDevice()));
}
void NewDVDGui::validateName(const QString &name)
{
QSettings settings;
settings.beginGroup(QLatin1String("Videos"));
m_rip->setEnabled(!settings.childGroups().contains(name));
}
void NewDVDGui::loadedTitles()
{
m_titles = m_watcher->result();
m_rip->setVisible(true);
m_eject->setVisible(true);
m_status->setVisible(false);
m_dvdName->setVisible(true);
}
void NewDVDGui::rip()
{
m_rip->setEnabled(false);
m_dvdName->setVisible(false);
m_status->setText(m_ripping);
m_status->setVisible(true);
emit newDVD(m_dvdName->text(), m_titles);
}
void NewDVDGui::dvdRemoved()
{
m_status->setText(m_insertDvd);
m_status->setVisible(true);
m_dvdName->setVisible(false);
m_rip->setVisible(false);
m_eject->setVisible(false);
}
|