summaryrefslogtreecommitdiffstats
path: root/newdvdgui.cpp
blob: 3bceaa20b2cd227cb30b64b06990cd577ec27603 (plain) (blame)
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);
}