X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fdirectoryview.cpp;h=4e347ed7185943293d54590093b8c06d63568a81;hb=72c235815ae8022c229849becc2f9dadae5649de;hp=f58e4593eaae6de7493af3274d260ba1e85fd1ac;hpb=9d2d4bdd19da6c68ac764d6b6ce5cf94bd81c147;p=someplayer diff --git a/src/directoryview.cpp b/src/directoryview.cpp index f58e459..4e347ed 100644 --- a/src/directoryview.cpp +++ b/src/directoryview.cpp @@ -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"; setWindowFlags(windowFlags() | Qt::Window); setAttribute(Qt::WA_Maemo5StackedWindow); _model = new QStandardItemModel(0, 2, this); @@ -51,7 +51,7 @@ DirectoryView::DirectoryView(QWidget *parent) : 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))); @@ -71,18 +71,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 dirnames; QList 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 +101,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 +112,34 @@ void DirectoryView::readDir(QString path) { ui->dirView->setColumnWidth(0, 70); ui->addButton->setEnabled(false); ui->addButton->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 +148,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); @@ -160,7 +181,8 @@ void DirectoryView::_process_selection(QItemSelection selected, QItemSelection d void DirectoryView::_home() { _current_dir = QDir::homePath(); - readDir(_current_dir); + homeScreen(); + _nav_history.clear(); } void DirectoryView::_toggle_selection() { @@ -178,7 +200,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()); @@ -219,10 +241,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); @@ -271,3 +293,20 @@ void DirectoryView::portraitMode() { void DirectoryView::updateTranslations() { ui->retranslateUi(this); } + +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("Inner 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()); +}