Version bump
[someplayer] / src / directoryview.cpp
index f58e459..9ed4090 100644 (file)
@@ -36,7 +36,7 @@ DirectoryView::DirectoryView(QWidget *parent) :
        ui->setupUi(this);
        Config config;
        _icons_theme = config.getValue("ui/iconstheme").toString();
-       REGISTERED_FILE_EXTENSIONS << "mp3" << "flac" << "wma" << "aac" << "ogg";
+       REGISTERED_FILE_EXTENSIONS << "mp3" << "flac" << "wma" << "aac" << "ogg" << "asf" << "ape" << "wav" << "m4a";
        setWindowFlags(windowFlags() | Qt::Window);
        setAttribute(Qt::WA_Maemo5StackedWindow);
        _model = new QStandardItemModel(0, 2, this);
@@ -48,10 +48,12 @@ DirectoryView::DirectoryView(QWidget *parent) :
 
        ui->addButton->setEnabled(false);
        ui->addButton->setIcon(QIcon());
+       ui->useButton->setEnabled(false);
+       ui->useButton->setIcon(QIcon());
 
        ui->progressBar->hide();
 
-       readDir(_current_dir);
+       _home();
        connect(ui->backButton, SIGNAL(clicked()), this, SLOT(_back()));
        connect(ui->dirView, SIGNAL(clicked(QModelIndex)), this, SLOT(_process_click(QModelIndex)));
        connect(ui->dirView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(_process_dblclick(QModelIndex)));
@@ -60,8 +62,10 @@ DirectoryView::DirectoryView(QWidget *parent) :
        connect(ui->homeButton, SIGNAL(clicked()), this, SLOT(_home()));
        connect(ui->selectToggleButton, SIGNAL(clicked()), this, SLOT(_toggle_selection()));
        connect(ui->addButton, SIGNAL(clicked()), this, SLOT(_add()));
+       connect(ui->useButton, SIGNAL(clicked()), this, SLOT(_use()));
        connect(_tagresolver, SIGNAL(decoded(Track)), this, SLOT(_add_track(Track)));
        connect(_tagresolver, SIGNAL(done()), this, SLOT(_done()));
+       connect(ui->playerButton, SIGNAL(clicked()), this, SLOT(hide()));
        _top_gradient = ui->topWidget->styleSheet();
        _bottom_gradient = ui->bottomWidget->styleSheet();
 }
@@ -71,18 +75,25 @@ DirectoryView::~DirectoryView()
        delete ui;
 }
 
-void DirectoryView::readDir(QString path) {
+void DirectoryView::readDir(QString path, QString pathToScroll) {
        QDir dir(path);
        _current_dir = dir.absoluteFilePath(path);
        _directories.clear();
        _files.clear();
        QList<QString> dirnames;
        QList<QString> filenames;
-       QFileInfoList items = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);
+       QFileInfoList items = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot | QDir::Hidden);
        foreach (QFileInfo info, items) {
                if (info.isDir()) {
-                       _directories << info.absoluteFilePath();
-                       dirnames << info.fileName();
+                       if (info.fileName().startsWith(".")) {
+                               if (info.fileName() == ".sounds") {
+                                       _directories << info.absoluteFilePath();
+                                       dirnames << tr("Audioclips");
+                               }
+                       } else {
+                               _directories << info.absoluteFilePath();
+                               dirnames << info.fileName();
+                       }
                } else {
                        if (REGISTERED_FILE_EXTENSIONS.contains(info.suffix().toLower())) {
                                _files << info.absoluteFilePath();
@@ -94,7 +105,7 @@ void DirectoryView::readDir(QString path) {
        int i = 0;
        foreach (QString str, dirnames) {
                _model->setItem(i, 0, new QStandardItem(QIcon(":/icons/"+_icons_theme+"/deselect_all.png"), ""));
-               _model->setItem(i, 1, new QStandardItem(QIcon(":/icons/"+_icons_theme+"/folder.png"), str+"/"));
+               _model->setItem(i, 1, new QStandardItem(QIcon(":/icons/"+_icons_theme+"/folder.png"), str));
                i++;
        }
        foreach (QString str, filenames) {
@@ -105,19 +116,36 @@ void DirectoryView::readDir(QString path) {
        ui->dirView->setColumnWidth(0, 70);
        ui->addButton->setEnabled(false);
        ui->addButton->setIcon(QIcon());
+       ui->useButton->setEnabled(false);
+       ui->useButton->setIcon(QIcon());
+       if (pathToScroll.isEmpty()) {
+               ui->dirView->scrollToTop();
+               return;
+       }
+       int row = _directories.indexOf(pathToScroll);
+       if (row >= 0 && row < _model->rowCount()) {
+               QModelIndex id = _model->index(row, 1);
+               ui->dirView->scrollTo(id, QAbstractItemView::PositionAtCenter);
+       }
 }
 
 void DirectoryView::_back() {
-       readDir(_current_dir+"/..");
+       QDir current(_current_dir);
+       current.cdUp();
+       QString dir_to_center = "";
+       if (_nav_history.size() > 0) {
+               dir_to_center = _nav_history.pop();
+       }
+       readDir(current.path(), dir_to_center);
 }
 
 void DirectoryView::_process_click(QModelIndex index) {
        if (index.column() == 0) {
        } else {
-               QString data = index.data().toString();
-               if (data.endsWith("/")) {
+               if (index.row() < _directories.count()) {
                        _current_dir = _directories.at(index.row());
                        readDir(_current_dir);
+                       _nav_history.push(_current_dir);
                        return;
                }
        }
@@ -126,8 +154,7 @@ void DirectoryView::_process_click(QModelIndex index) {
 void DirectoryView::_process_dblclick(QModelIndex index) {
        if (index.column() == 0) {
        } else {
-               QString data = index.data().toString();
-               if (!data.endsWith("/")) {
+               if (index.row() >= _directories.count()) {
                        QString filename = _files.at(index.row() - _directories.count());
                        Track track = _tagresolver->decodeOne(filename);
                        emit addAndPlay(track);
@@ -152,15 +179,20 @@ void DirectoryView::_process_selection(QItemSelection selected, QItemSelection d
        if (ui->dirView->selectionModel()->selectedRows().count() > 0) {
                ui->addButton->setEnabled(true);
                ui->addButton->setIcon(QIcon(":/icons/"+_icons_theme+"/add.png"));
+               ui->useButton->setEnabled(true);
+               ui->useButton->setIcon(QIcon(":/icons/"+_icons_theme+"/use.png"));
        } else {
                ui->addButton->setEnabled(false);
                ui->addButton->setIcon(QIcon());
+               ui->useButton->setEnabled(false);
+               ui->useButton->setIcon(QIcon());
        }
 }
 
 void DirectoryView::_home() {
        _current_dir = QDir::homePath();
-       readDir(_current_dir);
+       homeScreen();
+       _nav_history.clear();
 }
 
 void DirectoryView::_toggle_selection() {
@@ -178,7 +210,7 @@ void DirectoryView::_add() {
        QStringList files;
        QStringList directories;
        foreach (QModelIndex index, selected) {
-               if (!index.data().toString().endsWith("/")) {
+               if (index.row() >= _directories.count()) {
                        files << _files.at(index.row() - _directories.count());
                } else {
                        directories << _directories.at(index.row());
@@ -211,6 +243,8 @@ void DirectoryView::updateIcons() {
        _icons_theme = config.getValue("ui/iconstheme").toString();
        if (!ui->addButton->icon().isNull())
                ui->addButton->setIcon(QIcon(":/icons/"+_icons_theme+"/add.png"));
+       if (!ui->useButton->icon().isNull())
+               ui->useButton->setIcon(QIcon(":/icons/"+_icons_theme+"/add.png"));
        ui->homeButton->setIcon(QIcon(":/icons/"+_icons_theme+"/home.png"));
        ui->backButton->setIcon(QIcon(":/icons/"+_icons_theme+"/back.png"));
        if (ui->dirView->selectionModel()->selectedRows().count() == _model->rowCount()) {
@@ -219,10 +253,10 @@ void DirectoryView::updateIcons() {
                ui->selectToggleButton->setIcon(QIcon(":/icons/"+_icons_theme+"/select_all.png"));
        }
        ui->playerButton->setIcon(QIcon(":/icons/"+_icons_theme+"/player.png"));
-       readDir(_current_dir);
+       _home();
 }
 
-void DirectoryView::updateGradient() {
+void DirectoryView::checkGradient() {
        Config config;
        if (config.getValue("ui/gradient").toString() == "yes") {
                ui->bottomWidget->setStyleSheet(_bottom_gradient);
@@ -243,16 +277,23 @@ void DirectoryView::lanscapeMode() {
        ui->lverticalLayout->addWidget(ui->homeButton);
        ui->lverticalLayout->addItem(ui->lverticalSpacer_1);
        ui->lverticalLayout->addWidget(ui->playerButton);
-       ui->rverticalLayout->removeItem(ui->rverticalSpacer);
+       ui->rverticalLayout->removeItem(ui->rverticalSpacer_0);
+       ui->rverticalLayout->removeItem(ui->rverticalSpacer_1);
        ui->rverticalLayout->addWidget(ui->addButton);
-       ui->rverticalLayout->addItem(ui->rverticalSpacer);
+       ui->rverticalLayout->addItem(ui->rverticalSpacer_0);
+       ui->rverticalLayout->addWidget(ui->useButton);
+       ui->rverticalLayout->addItem(ui->rverticalSpacer_1);
        ui->rverticalLayout->addWidget(ui->selectToggleButton);
+       ui->lverticalWidget->show();
+       ui->rverticalWidget->show();
 }
 
 void DirectoryView::portraitMode() {
+       ui->lverticalWidget->hide();
+       ui->rverticalWidget->hide();
        ui->lverticalLayout->removeItem(ui->lverticalSpacer_0);
        ui->lverticalLayout->removeItem(ui->lverticalSpacer_1);
-       ui->rverticalLayout->removeItem(ui->rverticalSpacer);
+       ui->rverticalLayout->removeItem(ui->rverticalSpacer_0);
        ui->topWidget->layout()->removeItem(ui->thorizontalSpacer_0);
        ui->topWidget->layout()->removeItem(ui->thorizontalSpacer_1);
        ui->topWidget->layout()->addWidget(ui->backButton);
@@ -260,9 +301,12 @@ void DirectoryView::portraitMode() {
        ui->topWidget->layout()->addWidget(ui->homeButton);
        ui->topWidget->layout()->addItem(ui->thorizontalSpacer_1);
        ui->topWidget->layout()->addWidget(ui->addButton);
-       ui->bottomWidget->layout()->removeItem(ui->bhorizontalSpacer);
+       ui->bottomWidget->layout()->removeItem(ui->bhorizontalSpacer_0);
+       ui->bottomWidget->layout()->removeItem(ui->bhorizontalSpacer_1);
        ui->bottomWidget->layout()->addWidget(ui->playerButton);
-       ui->bottomWidget->layout()->addItem(ui->bhorizontalSpacer);
+       ui->bottomWidget->layout()->addItem(ui->bhorizontalSpacer_0);
+       ui->bottomWidget->layout()->addWidget(ui->useButton);
+       ui->bottomWidget->layout()->addItem(ui->bhorizontalSpacer_1);
        ui->bottomWidget->layout()->addWidget(ui->selectToggleButton);
        ui->topWidget->show();
        ui->bottomWidget->show();
@@ -270,4 +314,29 @@ void DirectoryView::portraitMode() {
 
 void DirectoryView::updateTranslations() {
        ui->retranslateUi(this);
+       homeScreen();
+}
+
+void DirectoryView::homeScreen() {
+       _directories.clear();
+       _files.clear();
+       _model->clear();
+       _model->setRowCount(2);
+       _model->setColumnCount(2);
+       _model->setItem(0, 0, new QStandardItem(QIcon(":/icons/"+_icons_theme+"/deselect_all.png"), ""));
+       _model->setItem(0, 1, new QStandardItem(tr("Internal memory")));
+       _model->setItem(1, 0, new QStandardItem(QIcon(":/icons/"+_icons_theme+"/deselect_all.png"), ""));
+       _model->setItem(1, 1, new QStandardItem(tr("Memory card")));
+       _directories << QDir::homePath()+"/MyDocs/";
+       _directories << "/media/mmc1/";
+       ui->dirView->setColumnWidth(0, 70);
+       ui->addButton->setEnabled(false);
+       ui->addButton->setIcon(QIcon());
+       ui->useButton->setEnabled(false);
+       ui->useButton->setIcon(QIcon());
+}
+
+void DirectoryView::_use() {
+       emit clearCurrent();
+       _add();
 }