summaryrefslogtreecommitdiffstats
path: root/mainwindow.cpp
blob: 72dad38bcfb1547a8a3027b6b7a1309619d429bc (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
#include "mainwindow.h"
#include "video.h"
#include "videogui.h"
#include "videoqueue.h"
#include "dvddrive.h"
#include "job.h"
#include "newdvdgui.h"
#include "newimagegui.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QSettings>
#include <QLabel>
#include <QPushButton>
#include <QGroupBox>
#include <QDebug>

MainWindow::MainWindow()
{
	QSettings settings;
	settings.beginGroup(QLatin1String("Videos"));
	//We delay adding because addVideo needs things to be contructed.
	//We need to remove bad entries though because other constructors here rely on our settings
	QList<Video*> toAdd;
	foreach(QString title, settings.childGroups()) {
		Video *video = new Video(title, this);
		if (video->isJobCompleted(Video::DVDImage))
			toAdd.append(video);
		else
			settings.remove(title);
	}
	m_queue = new VideoQueue;
	connect(m_queue, SIGNAL(runningJob(Job*)), this, SLOT(runningJob(Job*)));
	m_videoGuis = new QVBoxLayout;
	m_jobGuis = new QVBoxLayout;
	QGroupBox *videoGuiBox = new QGroupBox;
	videoGuiBox->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
	videoGuiBox->setTitle(tr("Video Queue"));
	videoGuiBox->setLayout(m_videoGuis);
	QGroupBox *jobsGuiBox = new QGroupBox;
	jobsGuiBox->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
	jobsGuiBox->setTitle(tr("Job Queue"));
	jobsGuiBox->setLayout(m_jobGuis);
	QHBoxLayout *layout = new QHBoxLayout;
	layout->addWidget(videoGuiBox, 0, Qt::AlignTop);
	layout->addWidget(jobsGuiBox, 0, Qt::AlignTop);
	NewDVDGui *newDvdGui = new NewDVDGui;
	connect(newDvdGui, SIGNAL(newDVD(QString,QMap<int,QString>)), this, SLOT(newVideoFromDVD(QString,QMap<int,QString>)));
	m_jobGuis->addWidget(newDvdGui, 0, Qt::AlignTop);
	NewImageGui *newImageGui = new NewImageGui;
	connect(newImageGui, SIGNAL(newImage(QString,QString,QMap<int,QString>)), this, SLOT(newVideoFromImage(QString,QString,QMap<int,QString>)));
	m_jobGuis->addWidget(newImageGui, 0, Qt::AlignTop);
	foreach (Video *video, toAdd)
		addVideo(video);
	setLayout(layout);
}
void MainWindow::addVideo(Video *video)
{
	m_videoGuis->addWidget(video->widget(), 0, Qt::AlignTop);
	m_queue->newVideo(video);
}
void MainWindow::newVideoFromDVD(const QString &name, QMap<int, QString> 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, QMap<int, QString> titles)
{
	Video *video = new Video(name, this);
	video->setDvdImage(path);
	video->setDvdTitles(titles);
	addVideo(video);
}
void MainWindow::runningJob(Job *job)
{
	connect(job, SIGNAL(completed(bool)), this, SLOT(completedJob(bool)));
	m_jobGuis->addWidget(job->widget(), 0, Qt::AlignTop);
}
void MainWindow::completedJob(bool success)
{
	//TODO: do something with [lack of] success
	delete qobject_cast<Job*>(sender())->widget();
}