X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Flibraryform.cpp;h=248db204cd70d6685b75cd913ba816582950b6d8;hb=4dc7e3946d08432d4f9dfe234baa8c5955a848d6;hp=2e303999cb379ac5f3504b3140a320fd695c5d77;hpb=ad2844b6242ada6d6a166608d3585ae54ff69eb5;p=someplayer diff --git a/src/libraryform.cpp b/src/libraryform.cpp index 2e30399..248db20 100644 --- a/src/libraryform.cpp +++ b/src/libraryform.cpp @@ -27,9 +27,12 @@ #include "track.h" #include "playlist.h" #include +#include #include #include #include "config.h" +#include +#include using namespace SomePlayer::DataObjects; using namespace SomePlayer::Storage; @@ -42,26 +45,64 @@ inline QString __format_track_string(TrackMetadata meta) { } -inline void __fill_model(QStandardItemModel *model, QList data) { +inline void __fill_model(QStandardItemModel *model, QList data, QString icons_theme) { model->clear(); int count = data.count(); model->setRowCount(count); for (int i = 0; i < count; i++) { - model->setItem(i, 0, new QStandardItem(data.at(i))); + model->setItem(i, 0, new QStandardItem(QIcon(":/icons/"+icons_theme+"/deselect_all.png"), "")); + model->setItem(i, 1, new QStandardItem(data.at(i))); } } -inline void __fill_model_tracks (QStandardItemModel *model, QList tracks) { +inline void __fill_model_album(QStandardItemModel *model, QMap data, QString icons_theme) { + model->clear(); + int count = data.count(); + model->setRowCount(count+1); + int i = 0; + Config config; + model->setItem(i, 0, new QStandardItem(QIcon(":/icons/"+icons_theme+"/deselect_all.png"), "")); + model->setItem(i, 1, new QStandardItem(QObject::tr("All tracks"))); + i++; + if (config.getValue("ui/albumsorting").toString() == "date") { + QMap > years; + foreach (QString name, data.keys()) { + years[data[name]].append(name); + } + QList keys = years.keys(); + qSort(keys); + + foreach (int year, keys) { + foreach (QString name, years[year]) { + model->setItem(i, 0, new QStandardItem(QIcon(":/icons/"+icons_theme+"/deselect_all.png"), "")); + model->setItem(i, 1, new QStandardItem(QString("[%1] %2").arg(year).arg(name))); + i++; + } + } + } else { + QList names = data.keys(); + foreach (QString name, names) { + model->setItem(i, 0, new QStandardItem(QIcon(":/icons/"+icons_theme+"/deselect_all.png"), "")); + model->setItem(i, 1, new QStandardItem(QString("[%1] %2").arg(data[name]).arg(name))); + i++; + } + } +} + +inline void __fill_model_tracks (QStandardItemModel *model, QList tracks, QString icons_theme) { int count = tracks.count(); model->setRowCount(count); Config config; bool show_lenght = (config.getValue("ui/showtracklenght").toString() != "no"); for (int i = 0; i < count; i++) { TrackMetadata meta = tracks.at(i).metadata(); - if (show_lenght) - model->setItem(i, 0, new QStandardItem(__format_track_string(meta))); - else - model->setItem(i, 0, new QStandardItem(meta.title())); + if (show_lenght) { + model->setItem(i, 0, new QStandardItem(QIcon(":/icons/"+icons_theme+"/deselect_all.png"), "")); + model->setItem(i, 1, new QStandardItem(__format_track_string(meta))); + } else { + model->setItem(i, 0, new QStandardItem(QIcon(":/icons/"+icons_theme+"/deselect_all.png"), "")); + model->setItem(i, 1, new QStandardItem(meta.title())); + } } } @@ -70,94 +111,155 @@ LibraryForm::LibraryForm(Library *lib, QWidget *parent) : ui(new Ui::LibraryForm) { _lib = lib; + Config config; + _icons_theme = config.getValue("ui/iconstheme").toString(); _model = new QStandardItemModel(this); + _model->setColumnCount(2); _state = STATE_NONE; + _tools_widget = new ToolsWidget(this); + _search_in_library_button = new QPushButton(QIcon(":/icons/"+_icons_theme+"/search.png"), "", _tools_widget); + _search_in_library_button->setFlat(true); + _search_in_library_button->setCheckable(true); + _tools_widget->layout()->addItem(new QSpacerItem(20, 20)); + _tools_widget->layout()->addWidget(_search_in_library_button); ui->setupUi(this); - connect(ui->playerButton, SIGNAL(clicked()), this, SLOT(_player())); + ui->listView->setModel(_model); + ui->listView->setColumnWidth(0, 70); + ui->toolsLayout->addWidget(_tools_widget); + _tools_widget->hideFSButton(); + _tools_widget->hide(); connect(ui->viewButton, SIGNAL(clicked()), this, SLOT(_view_button())); connect(ui->playlistsButton, SIGNAL(clicked()), this, SLOT(_playlists_button())); connect(ui->dynamicButton, SIGNAL(clicked()), this, SLOT(_dynamic_button())); connect(ui->listView, SIGNAL(clicked(QModelIndex)), this, SLOT(_process_list_click(QModelIndex))); + connect(ui->listView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(_process_dblclick(QModelIndex))); + connect(ui->listView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), + this, SLOT(_process_selection(QItemSelection,QItemSelection))); connect(ui->addButton, SIGNAL(clicked()), this, SLOT(_add_button())); connect(ui->selectAllButton, SIGNAL(clicked()), this, SLOT(_toggle_select_all_button())); connect(ui->backButton, SIGNAL(clicked()), this, SLOT(_back_button())); connect(ui->deleteButton, SIGNAL(clicked()), this, SLOT(_delete_button())); connect(ui->useButton, SIGNAL(clicked()), this, SLOT(_use_button())); + connect(_tools_widget, SIGNAL(search(QString)), this, SLOT(search(QString))); + connect(_tools_widget, SIGNAL(nextSearch()), this, SLOT(nextItem())); + connect(_tools_widget, SIGNAL(prevSearch()), this, SLOT(prevItem())); + connect(ui->moreButton, SIGNAL(clicked()), this, SLOT(_more_button())); + connect(_search_in_library_button, SIGNAL(toggled(bool)), this, SLOT(_search_button(bool))); + connect(ui->playerButton, SIGNAL(clicked()), this, SLOT(hide())); _view_button(); - Config config; - _icons_theme = config.getValue("ui/iconstheme").toString(); - _current_playlist_changed = true; + _top_gradient = ui->topWidget->styleSheet(); + _bottom_gradient = ui->bottomWidget->styleSheet(); + _is_dynamic = false; + setAttribute(Qt::WA_Maemo5StackedWindow); + setWindowFlags(Qt::Window | windowFlags()); + ui->addButton->setEnabled(false); + ui->addButton->setIcon(QIcon()); + ui->deleteButton->setEnabled(false); + ui->deleteButton->setIcon(QIcon()); } LibraryForm::~LibraryForm() { - _lib->saveCurrentPlaylist(_lib->getCurrentPlaylist()); // wtf? - _current_playlist_changed = true; delete ui; } -void LibraryForm::_player() { - emit player(_current_playlist_changed); - _current_playlist_changed = false; -} - void LibraryForm::_view_button() { QList artitst = _lib->getArtists(); - __fill_model(_model, artitst); - ui->listView->setModel(_model); + __fill_model(_model, artitst, _icons_theme); + ui->listView->setColumnWidth(0, 70); _state = STATE_ARTIST; - ui->backButton->hide(); + ui->backButton->setEnabled(false); + ui->backButton->setIcon(QIcon()); ui->listLabel->setText("Artists"); - ui->addButton->show(); - ui->deleteButton->hide(); - ui->useButton->hide(); + ui->useButton->setEnabled(false); + ui->useButton->setIcon(QIcon()); + ui->addButton->setEnabled(false); + ui->addButton->setIcon(QIcon()); + ui->deleteButton->setEnabled(false); + ui->deleteButton->setIcon(QIcon()); } void LibraryForm::_dynamic_button() { - ui->useButton->hide(); - ui->backButton->hide(); - ui->addButton->show(); - ui->deleteButton->hide(); + ui->useButton->setEnabled(false); + ui->useButton->setIcon(QIcon()); + ui->backButton->setEnabled(false); + ui->backButton->setIcon(QIcon()); + ui->deleteButton->setEnabled(false); + ui->deleteButton->setIcon(QIcon()); _model->clear(); _model->setRowCount(4); - _model->setItem(0, new QStandardItem("Favorites")); - _model->setItem(1, new QStandardItem("Most played")); - _model->setItem(2, new QStandardItem("Never played")); - _model->setItem(3, new QStandardItem("Recently added")); + _model->setItem(0, 0, new QStandardItem(QIcon(":/icons/"+_icons_theme+"/deselect_all.png"), "")); + _model->setItem(0, 1, new QStandardItem("Favorites")); + _model->setItem(1, 0, new QStandardItem(QIcon(":/icons/"+_icons_theme+"/deselect_all.png"), "")); + _model->setItem(1, 1, new QStandardItem("Most played")); + _model->setItem(2, 0, new QStandardItem(QIcon(":/icons/"+_icons_theme+"/deselect_all.png"), "")); + _model->setItem(2, 1, new QStandardItem("Never played")); + _model->setItem(3, 0, new QStandardItem(QIcon(":/icons/"+_icons_theme+"/deselect_all.png"), "")); + _model->setItem(3, 1, new QStandardItem("Recently added")); + ui->listView->setColumnWidth(0, 70); + ui->listLabel->setText("Dynamic playlists"); _state = STATE_DYNAMIC; + ui->addButton->setEnabled(false); + ui->addButton->setIcon(QIcon()); + ui->deleteButton->setEnabled(false); + ui->deleteButton->setIcon(QIcon()); } void LibraryForm::_process_list_click(QModelIndex index) { + if (index.column() == 0) { + return; + } if (_state == STATE_NONE) return; QString data = index.data().toString(); + QRegExp regexp("\\[\\d+\\]\\ (.*)"); switch (_state) { case STATE_ARTIST: - __fill_model(_model, _lib->getAlbumsForArtist(data)); + __fill_model_album(_model, _lib->getAlbumsForArtist(data), _icons_theme); + ui->listView->setColumnWidth(0, 70); ui->listView->scrollToTop(); _current_artist = data; _state = STATE_ALBUM; - ui->backButton->show(); + ui->backButton->setEnabled(true); + ui->backButton->setIcon(QIcon(":/icons/"+_icons_theme+"/back.png")); ui->listLabel->setText(QString("Albums by \"%1\"").arg(_current_artist)); break; case STATE_ALBUM: - _current_album = data; - _current_tracks = _lib->getTracksForAlbum(data, _current_artist); - __fill_model_tracks(_model, _current_tracks); - ui->listView->scrollToTop(); - _state = STATE_TRACK; - ui->backButton->show(); - ui->listLabel->setText(QString("Tracks from \"%1\" by \"%2\"").arg(_current_album).arg(_current_artist)); + if (regexp.indexIn(data) != -1) { + _current_album = regexp.cap(1).trimmed(); + _current_tracks = _lib->getTracksForAlbum(_current_album, _current_artist); + __fill_model_tracks(_model, _current_tracks, _icons_theme); + ui->listView->setColumnWidth(0, 70); + ui->listView->scrollToTop(); + _state = STATE_TRACK; + ui->backButton->setEnabled(true); + ui->backButton->setIcon(QIcon(":/icons/"+_icons_theme+"/back.png")); + ui->listLabel->setText(QString("Tracks from \"%1\" by \"%2\"").arg(_current_album).arg(_current_artist)); + } else { + if (index.row() == 0) { // all tracks + _current_tracks = _lib->getAllTracksForArtist(_current_artist); + __fill_model_tracks(_model, _current_tracks, _icons_theme); + ui->listView->setColumnWidth(0, 70); + ui->listView->scrollToTop(); + _state = STATE_TRACK; + ui->backButton->setEnabled(true); + ui->backButton->setIcon(QIcon(":/icons/"+_icons_theme+"/back.png")); + ui->listLabel->setText(QString("All tracks by \"%1\"").arg(_current_artist)); + } + } break; case STATE_PLAYLIST: { _current_playlist = _lib->getPlaylist(data); _current_tracks = _current_playlist.tracks(); - __fill_model_tracks(_model, _current_tracks); + __fill_model_tracks(_model, _current_tracks, _icons_theme); + ui->listView->setColumnWidth(0, 70); ui->listView->scrollToTop(); _state = STATE_PLAYLIST_TRACK; - ui->backButton->show(); - ui->deleteButton->show(); - ui->useButton->show(); + _is_dynamic = false; + ui->backButton->setEnabled(true); + ui->backButton->setIcon(QIcon(":/icons/"+_icons_theme+"/back.png")); + ui->useButton->setEnabled(true); + ui->useButton->setIcon(QIcon(":/icons/"+_icons_theme+"/use.png")); ui->listLabel->setText(QString("Tracks in playlist \"%1\"").arg(data)); } break; @@ -179,84 +281,107 @@ void LibraryForm::_process_list_click(QModelIndex index) { return; } _current_tracks = _current_playlist.tracks(); - __fill_model_tracks(_model, _current_tracks); + __fill_model_tracks(_model, _current_tracks, _icons_theme); + ui->listView->setColumnWidth(0, 70); ui->listView->scrollToTop(); _state = STATE_PLAYLIST_TRACK; - ui->backButton->show(); - ui->useButton->show(); - ui->addButton->show(); + _is_dynamic = true; + ui->backButton->setEnabled(true); + ui->backButton->setIcon(QIcon(":/icons/"+_icons_theme+"/back.png")); + ui->useButton->setEnabled(true); + ui->useButton->setIcon(QIcon(":/icons/"+_icons_theme+"/use.png")); ui->listLabel->setText(_current_playlist.name()); } default: return; } + ui->addButton->setEnabled(false); + ui->addButton->setIcon(QIcon()); + ui->deleteButton->setEnabled(false); + ui->deleteButton->setIcon(QIcon()); + QTimer::singleShot(100, ui->listView, SLOT(clearSelection())); // workaround } void LibraryForm::_add_button() { if (_state == STATE_NONE) return; QModelIndexList selected = ui->listView->selectionModel()->selectedIndexes(); ui->listView->selectionModel()->clearSelection(); - emit busy(QString("

Adding... Please wait

")); + Playlist cur = _lib->getCurrentPlaylist(); + QRegExp regexp("\\[\\d+\\]\\ (.*)"); switch (_state) { case STATE_ARTIST: foreach (QModelIndex id, selected) { - _add_artist(id.data().toString()); + _add_artist(&cur, id.data().toString()); } + _lib->saveCurrentPlaylist(cur); + emit refreshPlayer(); break; case STATE_ALBUM: foreach (QModelIndex id, selected) { - _add_album(_current_artist, id.data().toString()); + if (regexp.indexIn(id.data().toString()) != -1) { + _add_album(&cur, _current_artist, regexp.cap(1).trimmed()); + } } + _lib->saveCurrentPlaylist(cur); + emit refreshPlayer(); break; case STATE_TRACK: foreach (QModelIndex id, selected) { - _add_track(_current_tracks.at(id.row())); + _add_track(&cur, _current_tracks.at(id.row())); } + _lib->saveCurrentPlaylist(cur); + emit refreshPlayer(); break; case STATE_PLAYLIST: foreach (QModelIndex id, selected) { - _add_playlist(id.data().toString()); + _add_playlist(&cur, id.data().toString()); } + _lib->saveCurrentPlaylist(cur); + emit refreshPlayer(); break; case STATE_PLAYLIST_TRACK: foreach (QModelIndex id, selected) { - _add_track(_current_tracks.at(id.row())); + _add_track(&cur, _current_tracks.at(id.row())); } + _lib->saveCurrentPlaylist(cur); + emit refreshPlayer(); + break; + case STATE_SEARCH: + foreach (QModelIndex id, selected) { + _add_track(&cur, _current_tracks.at(id.row())); + } + _lib->saveCurrentPlaylist(cur); + emit refreshPlayer(); break; default: - emit done(); return; } - emit done(); } -void LibraryForm::_add_artist(QString artist) { - QList albums = _lib->getAlbumsForArtist(artist); - foreach(QString album, albums) { - _add_album(artist, album); +void LibraryForm::_add_artist(Playlist *cur, QString artist) { + QMap albums = _lib->getAlbumsForArtist(artist); + foreach(QString album, albums.keys()) { + _add_album(cur, artist, album); } } -void LibraryForm::_add_album(QString artist, QString album) { +void LibraryForm::_add_album(Playlist *cur, QString artist, QString album) { QList tracks = _lib->getTracksForAlbum(album, artist); foreach(Track track, tracks) { - _add_track(track); + _add_track(cur, track); } } -void LibraryForm::_add_track(Track track) { - Playlist current = _lib->getCurrentPlaylist(); - current.addTrack(track); - _lib->saveCurrentPlaylist(current); - _current_playlist_changed = true; +void LibraryForm::_add_track(Playlist *cur, Track track) { + cur->addTrack(track); } -void LibraryForm::_add_playlist(QString name) { +void LibraryForm::_add_playlist(Playlist *cur, QString name) { Playlist playlist = _lib->getPlaylist(name); QList tracks = playlist.tracks(); foreach (Track track, tracks) { - _add_track(track); + _add_track(cur, track); } } @@ -267,13 +392,19 @@ void LibraryForm::_back_button() { ui->listView->scrollToTop(); break; case STATE_TRACK: - __fill_model(_model, _lib->getAlbumsForArtist(_current_artist)); + __fill_model_album(_model, _lib->getAlbumsForArtist(_current_artist), _icons_theme); + ui->listView->setColumnWidth(0, 70); ui->listView->scrollToTop(); _state = STATE_ALBUM; ui->listLabel->setText(QString("Albums by \"%1\"").arg(_current_artist)); break; case STATE_PLAYLIST_TRACK: - _playlists_button(); + if (_is_dynamic) { + _dynamic_button(); + _is_dynamic = false; + } else { + _playlists_button(); + } ui->listView->scrollToTop(); default: return; @@ -282,14 +413,18 @@ void LibraryForm::_back_button() { void LibraryForm::_playlists_button() { QList playlists = _lib->getPlaylistsNames(); - __fill_model(_model, playlists); - ui->listView->setModel(_model); + __fill_model(_model, playlists, _icons_theme); + ui->listView->setColumnWidth(0, 70); _state = STATE_PLAYLIST; - ui->backButton->hide(); + ui->backButton->setEnabled(false); + ui->backButton->setIcon(QIcon()); ui->listLabel->setText("Playlists"); - ui->addButton->hide(); - ui->deleteButton->show(); - ui->useButton->hide(); + ui->useButton->setEnabled(false); + ui->useButton->setIcon(QIcon()); + ui->addButton->setEnabled(false); + ui->addButton->setIcon(QIcon()); + ui->deleteButton->setEnabled(false); + ui->deleteButton->setIcon(QIcon()); } void LibraryForm::_delete_button() { @@ -298,7 +433,8 @@ void LibraryForm::_delete_button() { ui->listView->selectionModel()->clearSelection(); QQueue to_delete; foreach (QModelIndex id, selected) { - to_delete.append(id.row()); + if (!to_delete.contains(id.row())) + to_delete.append(id.row()); } qSort(to_delete); int count = to_delete.count(); @@ -307,17 +443,20 @@ void LibraryForm::_delete_button() { } _current_tracks = _current_playlist.tracks(); _lib->savePlaylist(_current_playlist); - __fill_model_tracks(_model, _current_tracks); + emit refreshPlayer(); + __fill_model_tracks(_model, _current_tracks, _icons_theme); + ui->listView->setColumnWidth(0, 70); } else if (_state == STATE_PLAYLIST) { QModelIndexList selected = ui->listView->selectionModel()->selectedIndexes(); QQueue to_delete; foreach (QModelIndex id, selected) { - to_delete.append(id.row()); + if (!to_delete.contains(id.row())) + to_delete.append(id.row()); } qSort(to_delete); int count = to_delete.count(); for (int i = count-1; i >= 0; i--) { - QString name = _model->item(to_delete.at(i))->text(); + QString name = _model->item(to_delete.at(i), 1)->text(); if (name != _CURRENT_PLAYLIST_SUBST_) { _lib->removePlaylist(name); _model->removeRow(to_delete.at(i)); @@ -330,16 +469,16 @@ void LibraryForm::_delete_track(Track track) { Playlist current = _lib->getCurrentPlaylist(); current.removeTrack(track); _lib->saveCurrentPlaylist(current); - _current_playlist_changed = true; + emit refreshPlayer(); } void LibraryForm::_use_button() { _lib->saveCurrentPlaylist(_current_playlist); - _current_playlist_changed = true; + emit refreshPlayer(); _current_playlist = _lib->getCurrentPlaylist(); } -void LibraryForm::search(QString &pattern) { +void LibraryForm::search(QString pattern) { _search_pattern = pattern; _search_current_id = -1; nextItem(); @@ -348,30 +487,30 @@ void LibraryForm::search(QString &pattern) { void LibraryForm::nextItem() { QString data = _model->index(_search_current_id, 0).data().toString(); for (int i = _search_current_id+1; i < _model->rowCount(); i++) { - data = _model->index(i, 0).data().toString(); + data = _model->index(i, 1).data().toString(); if (data.contains(_search_pattern, Qt::CaseInsensitive)) { _search_current_id = i; break; } } - QModelIndex id = _model->index(_search_current_id, 0); + QModelIndex id = _model->index(_search_current_id, 1); ui->listView->selectionModel()->clearSelection(); - ui->listView->selectionModel()->select(id, QItemSelectionModel::Select); + ui->listView->selectRow(id.row()); ui->listView->scrollTo(id); } void LibraryForm::prevItem() { QString data = _model->index(_search_current_id, 0).data().toString(); for (int i = _search_current_id-1; i >= 0; i--) { - data = _model->index(i, 0).data().toString(); + data = _model->index(i, 1).data().toString(); if (data.contains(_search_pattern, Qt::CaseInsensitive)) { _search_current_id = i; break; } } - QModelIndex id = _model->index(_search_current_id, 0); + QModelIndex id = _model->index(_search_current_id, 1); ui->listView->selectionModel()->clearSelection(); - ui->listView->selectionModel()->select(id, QItemSelectionModel::Select); + ui->listView->selectRow(id.row()); ui->listView->scrollTo(id); } @@ -386,7 +525,8 @@ void LibraryForm::refresh() { _view_button(); break; case STATE_ALBUM: - __fill_model(_model, _lib->getAlbumsForArtist(_current_artist)); + __fill_model_album(_model, _lib->getAlbumsForArtist(_current_artist), _icons_theme); + ui->listView->setColumnWidth(0, 70); break; case STATE_PLAYLIST: _playlists_button(); @@ -397,11 +537,12 @@ void LibraryForm::refresh() { case STATE_PLAYLIST_TRACK: _current_playlist = _lib->getPlaylist(_current_playlist.name()); _current_tracks = _current_playlist.tracks(); - __fill_model_tracks(_model, _current_tracks); + __fill_model_tracks(_model, _current_tracks, _icons_theme); + ui->listView->setColumnWidth(0, 70); break; case STATE_TRACK: _current_tracks = _lib->getTracksForAlbum(_current_album, _current_artist); - __fill_model_tracks(_model, _current_tracks); + __fill_model_tracks(_model, _current_tracks, _icons_theme); break; default: return; @@ -409,28 +550,267 @@ void LibraryForm::refresh() { } void LibraryForm::_toggle_select_all_button() { - if (ui->listView->selectionModel()->selectedIndexes().count() == ui->listView->model()->rowCount()) { + if (ui->listView->selectionModel()->selectedIndexes().count() == _model->rowCount() * _model->columnCount()) { ui->listView->selectionModel()->clearSelection(); ui->selectAllButton->setIcon(QIcon(":/icons/"+_icons_theme+"/select_all.png")); } else { + disconnect(ui->listView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), + this, SLOT(_process_selection(QItemSelection,QItemSelection))); ui->listView->selectAll(); + int cnt = _model->rowCount(); + for (int i = 0; i < cnt; i++) { + _model->item(i)->setIcon(QIcon(":/icons/"+_icons_theme+"/select_all.png")); + } + connect(ui->listView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), + this, SLOT(_process_selection(QItemSelection,QItemSelection))); ui->selectAllButton->setIcon(QIcon(":/icons/"+_icons_theme+"/deselect_all.png")); + ui->addButton->setIcon(QIcon(":/icons/"+_icons_theme+"/add.png")); + ui->addButton->setEnabled(true); } } +void LibraryForm::landscapeMode() { + landscape = true; + ui->topWidget->hide(); + ui->bottomWidget->hide(); + + ui->lverticalLayout->removeItem(ui->lverticalSpacer_0); + ui->lverticalLayout->removeItem(ui->lverticalSpacer_1); + ui->lverticalLayout->removeItem(ui->lverticalSpacer_2); + ui->lverticalLayout->removeItem(ui->lverticalSpacer_3); + ui->lverticalLayout->addWidget(ui->backButton); + ui->lverticalLayout->addItem(ui->lverticalSpacer_0); + ui->lverticalLayout->addWidget(ui->addButton); + ui->lverticalLayout->addItem(ui->lverticalSpacer_1); + ui->lverticalLayout->addWidget(ui->deleteButton); + ui->lverticalLayout->addItem(ui->lverticalSpacer_2); + ui->lverticalLayout->addWidget(ui->useButton); + ui->lverticalLayout->addItem(ui->lverticalSpacer_3); + ui->lverticalLayout->addWidget(ui->playerButton); + + ui->rverticalLayout->removeItem(ui->rverticalSpacer_0); + ui->rverticalLayout->removeItem(ui->rverticalSpacer_1); + ui->rverticalLayout->removeItem(ui->rverticalSpacer_2); + ui->rverticalLayout->removeItem(ui->rverticalSpacer_3); + ui->rverticalLayout->addWidget(ui->moreButton); + ui->rverticalLayout->addItem(ui->rverticalSpacer_0); + ui->rverticalLayout->addWidget(ui->selectAllButton); + ui->rverticalLayout->addItem(ui->rverticalSpacer_1); + ui->rverticalLayout->addWidget(ui->viewButton); + ui->rverticalLayout->addItem(ui->rverticalSpacer_2); + ui->rverticalLayout->addWidget(ui->dynamicButton); + ui->rverticalLayout->addItem(ui->rverticalSpacer_3); + ui->rverticalLayout->addWidget(ui->playlistsButton); + + if (_tools_widget->isVisible()) { + ui->moreButton->setIcon(QIcon(":/icons/"+_icons_theme+"/more_l.png")); + } else { + ui->moreButton->setIcon(QIcon(":/icons/"+_icons_theme+"/unmore_l.png")); + } +} + +void LibraryForm::portraitMode() { + landscape = false; + + ui->topWidget->show(); + ui->bottomWidget->show(); + + ui->lverticalLayout->removeItem(ui->lverticalSpacer_0); + ui->lverticalLayout->removeItem(ui->lverticalSpacer_1); + ui->lverticalLayout->removeItem(ui->lverticalSpacer_2); + ui->lverticalLayout->removeItem(ui->lverticalSpacer_3); + + ui->rverticalLayout->removeItem(ui->rverticalSpacer_0); + ui->rverticalLayout->removeItem(ui->rverticalSpacer_1); + ui->rverticalLayout->removeItem(ui->rverticalSpacer_2); + ui->rverticalLayout->removeItem(ui->rverticalSpacer_3); + + ui->topWidget->layout()->removeItem(ui->thorizontalSpacer_0); + ui->topWidget->layout()->removeItem(ui->thorizontalSpacer_1); + ui->topWidget->layout()->removeItem(ui->thorizontalSpacer_2); + ui->topWidget->layout()->removeItem(ui->thorizontalSpacer_3); + ui->topWidget->layout()->removeItem(ui->thorizontalSpacer_4); + ui->topWidget->layout()->addWidget(ui->backButton); + ui->topWidget->layout()->addItem(ui->thorizontalSpacer_0); + ui->topWidget->layout()->addWidget(ui->deleteButton); + ui->topWidget->layout()->addItem(ui->thorizontalSpacer_1); + ui->topWidget->layout()->addWidget(ui->addButton); + ui->topWidget->layout()->addItem(ui->thorizontalSpacer_2); + ui->topWidget->layout()->addWidget(ui->useButton); + ui->topWidget->layout()->addItem(ui->thorizontalSpacer_3); + ui->topWidget->layout()->addWidget(ui->selectAllButton); + ui->topWidget->layout()->addItem(ui->thorizontalSpacer_4); + ui->topWidget->layout()->addWidget(ui->moreButton); + + ui->bottomWidget->layout()->removeItem(ui->bhorizontalSpacer_0); + ui->bottomWidget->layout()->removeItem(ui->bhorizontalSpacer_1); + ui->bottomWidget->layout()->removeItem(ui->bhorizontalSpacer_2); + ui->bottomWidget->layout()->addWidget(ui->playerButton); + ui->bottomWidget->layout()->addItem(ui->bhorizontalSpacer_0); + ui->bottomWidget->layout()->addWidget(ui->viewButton); + ui->bottomWidget->layout()->addItem(ui->bhorizontalSpacer_1); + ui->bottomWidget->layout()->addWidget(ui->dynamicButton); + ui->bottomWidget->layout()->addItem(ui->bhorizontalSpacer_2); + ui->bottomWidget->layout()->addWidget(ui->playlistsButton); + + if (_tools_widget->isVisible()) { + ui->moreButton->setIcon(QIcon(":/icons/"+_icons_theme+"/unmore.png")); + } else { + ui->moreButton->setIcon(QIcon(":/icons/"+_icons_theme+"/more.png")); + } +} + +void LibraryForm::_more_button() { + if (_tools_widget->isVisible()) { + ui->moreButton->setIcon(QIcon(landscape ? ":/icons/"+_icons_theme+"/unmore_l.png" : ":/icons/"+_icons_theme+"/more.png")); + _tools_widget->hide(); + _tools_widget->reset(); + cancelSearch(); + } else { + ui->moreButton->setIcon(QIcon(landscape ? ":/icons/"+_icons_theme+"/more_l.png" : ":/icons/"+_icons_theme+"/unmore.png")); + _tools_widget->show(); + _tools_widget->setFocus(); + } +} + + void LibraryForm::updateIcons() { Config config; _icons_theme = config.getValue("ui/iconstheme").toString(); - ui->backButton->setIcon(QIcon(":/icons/"+_icons_theme+"/back.png")); - if (ui->listView->selectionModel()->selectedIndexes().count() == ui->listView->model()->rowCount()) + _tools_widget->updateIcons(); + if (!ui->addButton->icon().isNull()) { + ui->addButton->setIcon(QIcon(":/icons/"+_icons_theme+"/add.png")); + } + if (!ui->deleteButton->icon().isNull()) { + ui->deleteButton->setIcon(QIcon(":/icons/"+_icons_theme+"/delete.png")); + } + if (!ui->useButton->icon().isNull()) { + ui->useButton->setIcon(QIcon(":/icons/"+_icons_theme+"/use.png")); + } + if (!ui->backButton->icon().isNull()) { + ui->backButton->setIcon(QIcon(":/icons/"+_icons_theme+"/back.png")); + } + if (!ui->dynamicButton->icon().isNull()) { + ui->dynamicButton->setIcon(QIcon(":/icons/"+_icons_theme+"/dynamic.png")); + } + if (_tools_widget->isVisible()) { + ui->moreButton->setIcon(QIcon(landscape ? ":/icons/"+_icons_theme+"/more_l.png" : ":/icons/"+_icons_theme+"/unmore.png")); + } else { + ui->moreButton->setIcon(QIcon(landscape ? ":/icons/"+_icons_theme+"/unmore_l.png" : ":/icons/"+_icons_theme+"/more.png")); + } + if (!ui->playlistsButton->icon().isNull()) { + ui->playlistsButton->setIcon(QIcon(":/icons/"+_icons_theme+"/playlists.png")); + } + ui->playerButton->setIcon(QIcon(":/icons/"+_icons_theme+"/player.png")); + if (!ui->viewButton->icon().isNull()) { + ui->viewButton->setIcon(QIcon(":/icons/"+_icons_theme+"/artists.png")); + } + if (ui->listView->selectionModel()->selectedRows().count() == _model->rowCount()) { ui->selectAllButton->setIcon(QIcon(":/icons/"+_icons_theme+"/deselect_all.png")); - else + } else { ui->selectAllButton->setIcon(QIcon(":/icons/"+_icons_theme+"/select_all.png")); - ui->addButton->setIcon(QIcon(":/icons/"+_icons_theme+"/add.png")); - ui->deleteButton->setIcon(QIcon(":/icons/"+_icons_theme+"/delete.png")); - ui->useButton->setIcon(QIcon(":/icons/"+_icons_theme+"/use.png")); - ui->playerButton->setIcon(QIcon(":/icons/"+_icons_theme+"/player.png")); - ui->viewButton->setIcon(QIcon(":/icons/"+_icons_theme+"/artists.png")); - ui->dynamicButton->setIcon(QIcon(":/icons/"+_icons_theme+"/dynamic.png")); - ui->playlistsButton->setIcon(QIcon(":/icons/"+_icons_theme+"/playlists.png")); + } + _search_in_library_button->setIcon(QIcon(":/icons/"+_icons_theme+"/search.png")); + refresh(); +} + +void LibraryForm::checkGradient() { + Config config; + if (config.getValue("ui/gradient").toString() == "yes") { + ui->bottomWidget->setStyleSheet(_bottom_gradient); + ui->topWidget->setStyleSheet(_top_gradient); + } else { + ui->topWidget->setStyleSheet(""); + ui->bottomWidget->setStyleSheet(""); + } +} + +void LibraryForm::_process_selection(QItemSelection selected, QItemSelection deselected) { + foreach (QModelIndex id, selected.indexes()) { + if (id.column() == 0) { + _model->item(id.row())->setIcon(QIcon(":/icons/"+_icons_theme+"/select_all.png")); + } + ui->listView->selectionModel()->select(id, QItemSelectionModel::Select); + } + foreach (QModelIndex id, deselected.indexes()) { + if (id.column() == 0) { + _model->item(id.row())->setIcon(QIcon(":/icons/"+_icons_theme+"/deselect_all.png")); + } + ui->listView->selectionModel()->select(id, QItemSelectionModel::Deselect); + } + if (ui->listView->selectionModel()->selectedRows().count() > 0) { + ui->addButton->setEnabled(true); + ui->addButton->setIcon(QIcon(":/icons/"+_icons_theme+"/add.png")); + if (_state == STATE_PLAYLIST || (_state == STATE_PLAYLIST_TRACK && !_is_dynamic)) { + ui->deleteButton->setEnabled(true); + ui->deleteButton->setIcon(QIcon(":/icons/"+_icons_theme+"/delete.png")); + } + } else { + ui->addButton->setEnabled(false); + ui->addButton->setIcon(QIcon()); + ui->deleteButton->setEnabled(false); + ui->deleteButton->setIcon(QIcon()); + } +} + +void LibraryForm::_process_dblclick(QModelIndex id) { + if (id.column() == 0) + return; + if (_state == STATE_TRACK || _state == STATE_PLAYLIST_TRACK || _state == STATE_SEARCH) { + Playlist cur = _lib->getCurrentPlaylist(); + Track track = _current_tracks.at(id.row()); + cur.addTrack(track); + _lib->saveCurrentPlaylist(cur); + emit refreshPlayer(); + emit addAndPlay(track); + ui->listView->clearSelection(); + } +} + +void LibraryForm::_search_button(bool state) { + ui->moreButton->setEnabled(!state); + _tools_widget->toggleArrows(!state); + ui->backButton->setEnabled(!state); + ui->backButton->setIcon(state ? QIcon() : QIcon(":/icons/"+_icons_theme+"/back.png")); + _tools_widget->setFocus(); + _tools_widget->reset(); + if (state) { + ui->listLabel->setText("Search in library"); + ui->deleteButton->setIcon(QIcon()); + ui->deleteButton->setEnabled(false); + ui->useButton->setIcon(QIcon()); + ui->useButton->setEnabled(false); + ui->viewButton->setIcon(QIcon()); + ui->viewButton->setEnabled(false); + ui->dynamicButton->setIcon(QIcon()); + ui->dynamicButton->setEnabled(false); + ui->playlistsButton->setIcon(QIcon()); + ui->playlistsButton->setEnabled(false); + disconnect(_tools_widget, SIGNAL(search(QString)), this, SLOT(search(QString))); + connect(_tools_widget, SIGNAL(search(QString)), this, SLOT(_search_in_library(QString))); + _model->clear(); + _state = STATE_SEARCH; + } else { + ui->viewButton->setIcon(QIcon(":/icons/"+_icons_theme+"/artists.png")); + ui->viewButton->setEnabled(true); + ui->dynamicButton->setIcon(QIcon(":/icons/"+_icons_theme+"/dynamic.png")); + ui->dynamicButton->setEnabled(true); + ui->playlistsButton->setIcon(QIcon(":/icons/"+_icons_theme+"/playlists.png")); + ui->playlistsButton->setEnabled(true); + _view_button(); + connect(_tools_widget, SIGNAL(search(QString)), this, SLOT(search(QString))); + disconnect(_tools_widget, SIGNAL(search(QString)), this, SLOT(_search_in_library(QString))); + } +} + +void LibraryForm::_search_in_library(QString pattern) { + pattern = pattern.trimmed(); + if (pattern.isEmpty()) { + _model->clear(); + return; + } + _current_tracks = _lib->search(pattern); + __fill_model_tracks(_model, _current_tracks, _icons_theme); + ui->listView->setColumnWidth(0, 70); + ui->listView->scrollToTop(); }