Implemented dynamic playlists
[someplayer] / src / mainwindow.cpp
1 #include "mainwindow.h"
2 #include "ui_mainwindow.h"
3 #include <QFileDialog>
4 #include <QMessageBox>
5 #include <QInputDialog>
6 #include <QFile>
7
8 #include "player/player.h"
9
10 #include "library.h"
11
12 using namespace SomePlayer::DataObjects;
13
14 MainWindow::MainWindow(QWidget *parent) :
15         QMainWindow(parent),
16         ui(new Ui::MainWindow)
17 {
18         _library = new Library(_DATABASE_PATH_, _PLAYLISTS_PATH_);
19         ui->setupUi(this);
20         connect(ui->actionOpen, SIGNAL(triggered()), this, SLOT(openMedia()));
21         connect(ui->actionAbout_Qt, SIGNAL(triggered()), this, SLOT(aboutQt()));
22         connect(ui->actionAbout, SIGNAL(triggered()), this, SLOT(about()));
23         connect(ui->actionPlayer, SIGNAL(triggered()), this, SLOT(player()));
24         connect(ui->actionLibrary, SIGNAL(triggered()), this, SLOT(library()));
25         setAnimated(true);
26         _player_form = new PlayerForm(_library, ui->stackedWidget);
27         _library_form = new LibraryForm(_library, ui->stackedWidget);
28         _busy_widget = new BusyWidget(ui->stackedWidget);
29         ui->stackedWidget->insertWidget(0, _player_form);
30         ui->stackedWidget->insertWidget(1, _library_form);
31         ui->stackedWidget->insertWidget(2, _busy_widget);
32         _library_menu = new QMenu("Lirary");
33         QAction *add_directory = _library_menu->addAction("Add directory");
34         QAction *save_playlist = _library_menu->addAction("Save playlist");
35         QAction *clear_playlist = _library_menu->addAction("Clear current playlist");
36         _player_menu = new QMenu("Player");
37         connect(_player_form, SIGNAL(library()), this, SLOT(library()));
38         connect(_library_form, SIGNAL(player()), this, SLOT(player()));
39         connect(add_directory, SIGNAL(triggered()), this, SLOT(_add_directory()));
40         connect(save_playlist, SIGNAL(triggered()), this, SLOT(_save_playlist()));
41         connect(clear_playlist, SIGNAL(triggered()), this, SLOT(_clear_current_playlist()));
42         connect(_library, SIGNAL(done()), this, SLOT(library()));
43         connect(_library_form, SIGNAL(done()), this, SLOT(library()));
44         connect(_library_form, SIGNAL(busy(QString)), this, SLOT(showBusyWidget(QString)));
45         library();
46 }
47
48 MainWindow::~MainWindow()
49 {
50         delete _player_form;
51         delete _library_form;
52         delete ui;
53 }
54
55 void MainWindow::openMedia()
56 {
57 //      SomePlayer::DataObjects::Library *l = new SomePlayer::DataObjects::Library("/tmp", "/tmp");
58 //      l->addDirectory("/mnt/music/Three Days Grace");
59 }
60
61 void MainWindow::aboutQt() {
62         QMessageBox::aboutQt(this, "About Qt");
63 }
64
65 void MainWindow::about() {
66         QMessageBox::about(this, "About SomePlayer", "Alternate music player for Maemo 5 "
67                                            "written in C++ with Qt4\n\n"
68                                            "Author: Nikolay Tischenko aka \"somebody\" <niktischenko@gmail.com>");
69 }
70
71 void MainWindow::player() {
72         ui->stackedWidget->setCurrentIndex(0);
73         _player_form->reload();
74         setWindowTitle("SomePlayer");
75 }
76
77 void MainWindow::library() {
78         ui->menuBar->setEnabled(true);
79         ui->stackedWidget->setCurrentIndex(1);
80         setWindowTitle("SomePlayer Library");
81         ui->menuBar->addMenu(_library_menu);
82 }
83
84 void MainWindow::_add_directory() {
85         QString directory = QFileDialog::getExistingDirectory (this, "Select directory", "/home/user/MyDocs", QFileDialog::ShowDirsOnly );
86         if (!directory.isEmpty()) {
87                 showBusyWidget("<H1>Scanning... Please wait</H1>");
88                 _library->addDirectory(directory);
89         }
90 }
91
92 void MainWindow::_save_playlist() {
93         QString name = QInputDialog::getText(this, "Playlist name", "Name:");
94         Playlist playlist = _library->getCurrentPlaylist();
95         playlist.setName(name);
96         _library->savePlaylist(playlist);
97 }
98
99 void MainWindow::_clear_current_playlist() {
100         Playlist playlist = _library->getCurrentPlaylist();
101         playlist.clear();
102         _library->saveCurrentPlaylist(playlist);
103         _player_form->reload();
104 }
105
106 void MainWindow::showBusyWidget(QString caption) {
107         _busy_widget->setText(caption);
108         ui->menuBar->setEnabled(false);
109         ui->stackedWidget->setCurrentIndex(2);
110 }