2 * SomePlayer - An alternate music player for Maemo 5
3 * Copyright (C) 2010 Nikolay (somebody) Tischenko <niktischenko@gmail.com>
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2
8 * of the License, or (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 #include "libraryform.h"
21 #include "ui_libraryform.h"
23 #include <QStandardItemModel>
24 #include <QStandardItem>
25 #include <QModelIndex>
26 #include <QModelIndexList>
32 #include <QMessageBox>
34 #include <QSpacerItem>
37 using namespace SomePlayer::DataObjects;
38 using namespace SomePlayer::Storage;
40 inline QString __format_track_string(TrackMetadata meta) {
41 int minutes = meta.length() / 60;
42 int seconds = meta.length() % 60;
43 QTime time(0, minutes, seconds);
44 return QString("[%1] %2").arg(time.toString("mm:ss")).arg(meta.title());
48 inline void __fill_model(QStandardItemModel *model, QList<QString> data, QString icons_theme) {
50 int count = data.count();
51 model->setRowCount(count);
52 for (int i = 0; i < count; i++) {
53 model->setItem(i, 0, new QStandardItem(QIcon(":/icons/"+icons_theme+"/deselect_all.png"), ""));
54 model->setItem(i, 1, new QStandardItem(data.at(i)));
58 inline void __fill_model_album(QStandardItemModel *model, QMap<QString, int> data, QString icons_theme) {
60 int count = data.count();
61 model->setRowCount(count);
62 QMap<int, QList<QString> > years;
63 foreach (QString name, data.keys()) {
64 years[data[name]].append(name);
66 QList<int> keys = years.keys();
70 foreach (int year, keys) {
71 foreach (QString name, years[year]) {
72 model->setItem(i, 0, new QStandardItem(QIcon(":/icons/"+icons_theme+"/deselect_all.png"), ""));
73 model->setItem(i, 1, new QStandardItem(QString("[%1] %2").arg(year).arg(name)));
79 inline void __fill_model_tracks (QStandardItemModel *model, QList<Track> tracks, QString icons_theme) {
80 int count = tracks.count();
81 model->setRowCount(count);
83 bool show_lenght = (config.getValue("ui/showtracklenght").toString() != "no");
84 for (int i = 0; i < count; i++) {
85 TrackMetadata meta = tracks.at(i).metadata();
87 model->setItem(i, 0, new QStandardItem(QIcon(":/icons/"+icons_theme+"/deselect_all.png"), ""));
88 model->setItem(i, 1, new QStandardItem(__format_track_string(meta)));
90 model->setItem(i, 0, new QStandardItem(QIcon(":/icons/"+icons_theme+"/deselect_all.png"), ""));
91 model->setItem(i, 1, new QStandardItem(meta.title()));
96 LibraryForm::LibraryForm(Library *lib, QWidget *parent) :
98 ui(new Ui::LibraryForm)
102 _icons_theme = config.getValue("ui/iconstheme").toString();
103 _model = new QStandardItemModel(this);
104 _model->setColumnCount(2);
106 _tools_widget = new ToolsWidget(this);
108 ui->listView->setModel(_model);
109 ui->listView->setColumnWidth(0, 70);
110 ui->toolsLayout->addWidget(_tools_widget);
111 _tools_widget->hide();
112 connect(ui->playerButton, SIGNAL(clicked()), this, SLOT(_player()));
113 connect(ui->viewButton, SIGNAL(clicked()), this, SLOT(_view_button()));
114 connect(ui->playlistsButton, SIGNAL(clicked()), this, SLOT(_playlists_button()));
115 connect(ui->dynamicButton, SIGNAL(clicked()), this, SLOT(_dynamic_button()));
116 connect(ui->listView, SIGNAL(clicked(QModelIndex)), this, SLOT(_process_list_click(QModelIndex)));
117 connect(ui->listView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(_process_dblclick(QModelIndex)));
118 connect(ui->listView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
119 this, SLOT(_process_selection(QItemSelection,QItemSelection)));
120 connect(ui->addButton, SIGNAL(clicked()), this, SLOT(_add_button()));
121 connect(ui->selectAllButton, SIGNAL(clicked()), this, SLOT(_toggle_select_all_button()));
122 connect(ui->backButton, SIGNAL(clicked()), this, SLOT(_back_button()));
123 connect(ui->deleteButton, SIGNAL(clicked()), this, SLOT(_delete_button()));
124 connect(ui->useButton, SIGNAL(clicked()), this, SLOT(_use_button()));
125 connect(_tools_widget, SIGNAL(search(QString)), this, SLOT(search(QString)));
126 connect(_tools_widget, SIGNAL(nextSearch()), this, SLOT(nextItem()));
127 connect(_tools_widget, SIGNAL(prevSearch()), this, SLOT(prevItem()));
128 connect(_tools_widget, SIGNAL(toggleFullscreen(bool)), this, SIGNAL(fullscreen(bool)));
129 connect(ui->moreButton, SIGNAL(clicked()), this, SLOT(_more_button()));
131 _current_playlist_changed = true;
132 _top_gradient = ui->topWidget->styleSheet();
133 _bottom_gradient = ui->bottomWidget->styleSheet();
136 LibraryForm::~LibraryForm()
138 _lib->saveCurrentPlaylist(_lib->getCurrentPlaylist()); // wtf?
139 _current_playlist_changed = true;
143 void LibraryForm::_player() {
144 emit player(_current_playlist_changed);
145 _current_playlist_changed = false;
148 void LibraryForm::_view_button() {
149 QList<QString> artitst = _lib->getArtists();
150 __fill_model(_model, artitst, _icons_theme);
151 ui->listView->setColumnWidth(0, 70);
152 _state = STATE_ARTIST;
153 ui->backButton->setEnabled(false);
154 ui->listLabel->setText("Artists");
155 ui->addButton->setEnabled(true);
156 ui->addButton->setIcon(QIcon(":/icons/"+_icons_theme+"/add.png"));
157 ui->deleteButton->setEnabled(false);
158 ui->deleteButton->setIcon(QIcon());
159 ui->useButton->setEnabled(false);
160 ui->useButton->setIcon(QIcon());
163 void LibraryForm::_dynamic_button() {
164 ui->useButton->setEnabled(false);
165 ui->useButton->setIcon(QIcon());
166 ui->backButton->setEnabled(false);
167 ui->addButton->setEnabled(true);
168 ui->addButton->setIcon(QIcon(":/icons/"+_icons_theme+"/add.png"));
169 ui->deleteButton->setEnabled(false);
170 ui->deleteButton->setIcon(QIcon());
172 _model->setRowCount(4);
173 _model->setItem(0, 0, new QStandardItem(QIcon(":/icons/"+_icons_theme+"/deselect_all.png"), ""));
174 _model->setItem(0, 1, new QStandardItem("Favorites"));
175 _model->setItem(1, 0, new QStandardItem(QIcon(":/icons/"+_icons_theme+"/deselect_all.png"), ""));
176 _model->setItem(1, 1, new QStandardItem("Most played"));
177 _model->setItem(2, 0, new QStandardItem(QIcon(":/icons/"+_icons_theme+"/deselect_all.png"), ""));
178 _model->setItem(2, 1, new QStandardItem("Never played"));
179 _model->setItem(3, 0, new QStandardItem(QIcon(":/icons/"+_icons_theme+"/deselect_all.png"), ""));
180 _model->setItem(3, 1, new QStandardItem("Recently added"));
181 ui->listView->setColumnWidth(0, 70);
182 ui->listLabel->setText("Dynamic playlists");
183 _state = STATE_DYNAMIC;
186 void LibraryForm::_process_list_click(QModelIndex index) {
187 if (index.column() == 0) {
190 if (_state == STATE_NONE) return;
191 QString data = index.data().toString();
192 QRegExp regexp("\\[\\d+\\]\\ (.*)");
195 __fill_model_album(_model, _lib->getAlbumsForArtist(data), _icons_theme);
196 ui->listView->setColumnWidth(0, 70);
197 ui->listView->scrollToTop();
198 _current_artist = data;
199 _state = STATE_ALBUM;
200 ui->backButton->setEnabled(true);
201 ui->listLabel->setText(QString("Albums by \"%1\"").arg(_current_artist));
204 if (regexp.indexIn(data) != -1) {
205 _current_album = regexp.cap(1).trimmed();
206 _current_tracks = _lib->getTracksForAlbum(_current_album, _current_artist);
207 __fill_model_tracks(_model, _current_tracks, _icons_theme);
208 ui->listView->setColumnWidth(0, 70);
209 ui->listView->scrollToTop();
210 _state = STATE_TRACK;
211 ui->backButton->setEnabled(true);
212 ui->listLabel->setText(QString("Tracks from \"%1\" by \"%2\"").arg(_current_album).arg(_current_artist));
217 _current_playlist = _lib->getPlaylist(data);
218 _current_tracks = _current_playlist.tracks();
219 __fill_model_tracks(_model, _current_tracks, _icons_theme);
220 ui->listView->setColumnWidth(0, 70);
221 ui->listView->scrollToTop();
222 _state = STATE_PLAYLIST_TRACK;
223 ui->backButton->setEnabled(true);
224 ui->deleteButton->setEnabled(true);
225 ui->deleteButton->setIcon(QIcon(":/icons/"+_icons_theme+"/delete.png"));
226 ui->useButton->setEnabled(true);
227 ui->useButton->setIcon(QIcon(":/icons/"+_icons_theme+"/use.png"));
228 ui->listLabel->setText(QString("Tracks in playlist \"%1\"").arg(data));
233 switch(index.row()) {
235 _current_playlist = _lib->getFavorites();
237 case 1: //most played
238 _current_playlist = _lib->getMostPlayed();
240 case 2: //never played
241 _current_playlist = _lib->getNeverPlayed();
242 case 3: //recently added
243 _current_playlist = _lib->getRecentlyAdded();
248 _current_tracks = _current_playlist.tracks();
249 __fill_model_tracks(_model, _current_tracks, _icons_theme);
250 ui->listView->setColumnWidth(0, 70);
251 ui->listView->scrollToTop();
252 _state = STATE_PLAYLIST_TRACK;
254 ui->backButton->setEnabled(true);
255 ui->useButton->setEnabled(true);
256 ui->useButton->setIcon(QIcon(":/icons/"+_icons_theme+"/use.png"));
257 ui->addButton->setEnabled(true);
258 ui->addButton->setIcon(QIcon(":/icons/"+_icons_theme+"/add.png"));
259 ui->listLabel->setText(_current_playlist.name());
264 QTimer::singleShot(100, ui->listView, SLOT(clearSelection())); // workaround
267 void LibraryForm::_add_button() {
268 if (_state == STATE_NONE) return;
269 QModelIndexList selected = ui->listView->selectionModel()->selectedIndexes();
270 ui->listView->selectionModel()->clearSelection();
271 emit busy(QString("<H1>Adding... Please wait</H1>"));
272 Playlist cur = _lib->getCurrentPlaylist();
275 foreach (QModelIndex id, selected) {
276 _add_artist(&cur, id.data().toString());
278 _lib->saveCurrentPlaylist(cur);
279 _current_playlist_changed = true;
282 foreach (QModelIndex id, selected) {
283 _add_album(&cur, _current_artist, id.data().toString());
285 _lib->saveCurrentPlaylist(cur);
286 _current_playlist_changed = true;
289 foreach (QModelIndex id, selected) {
290 _add_track(&cur, _current_tracks.at(id.row()));
292 _lib->saveCurrentPlaylist(cur);
293 _current_playlist_changed = true;
296 foreach (QModelIndex id, selected) {
297 _add_playlist(&cur, id.data().toString());
299 _lib->saveCurrentPlaylist(cur);
300 _current_playlist_changed = true;
302 case STATE_PLAYLIST_TRACK:
303 foreach (QModelIndex id, selected) {
304 _add_track(&cur, _current_tracks.at(id.row()));
306 _lib->saveCurrentPlaylist(cur);
307 _current_playlist_changed = true;
317 void LibraryForm::_add_artist(Playlist *cur, QString artist) {
318 QMap<QString, int> albums = _lib->getAlbumsForArtist(artist);
319 foreach(QString album, albums.keys()) {
320 _add_album(cur, artist, album);
324 void LibraryForm::_add_album(Playlist *cur, QString artist, QString album) {
325 QList<Track> tracks = _lib->getTracksForAlbum(album, artist);
326 foreach(Track track, tracks) {
327 _add_track(cur, track);
331 void LibraryForm::_add_track(Playlist *cur, Track track) {
332 cur->addTrack(track);
335 void LibraryForm::_add_playlist(Playlist *cur, QString name) {
336 Playlist playlist = _lib->getPlaylist(name);
337 QList<Track> tracks = playlist.tracks();
338 foreach (Track track, tracks) {
339 _add_track(cur, track);
343 void LibraryForm::_back_button() {
347 ui->listView->scrollToTop();
350 __fill_model_album(_model, _lib->getAlbumsForArtist(_current_artist), _icons_theme);
351 ui->listView->setColumnWidth(0, 70);
352 ui->listView->scrollToTop();
353 _state = STATE_ALBUM;
354 ui->listLabel->setText(QString("Albums by \"%1\"").arg(_current_artist));
356 case STATE_PLAYLIST_TRACK:
363 ui->listView->scrollToTop();
369 void LibraryForm::_playlists_button() {
370 QList<QString> playlists = _lib->getPlaylistsNames();
371 __fill_model(_model, playlists, _icons_theme);
372 ui->listView->setColumnWidth(0, 70);
373 _state = STATE_PLAYLIST;
374 ui->backButton->setEnabled(false);
375 ui->listLabel->setText("Playlists");
376 ui->addButton->setEnabled(true);
377 ui->addButton->setIcon(QIcon(":/icons/"+_icons_theme+"/add.png"));
378 ui->deleteButton->setEnabled(true);
379 ui->deleteButton->setIcon(QIcon(":/icons/"+_icons_theme+"/delete.png"));
380 ui->useButton->setEnabled(false);
381 ui->useButton->setIcon(QIcon());
384 void LibraryForm::_delete_button() {
385 if (_state == STATE_PLAYLIST_TRACK) {
386 QModelIndexList selected = ui->listView->selectionModel()->selectedIndexes();
387 ui->listView->selectionModel()->clearSelection();
388 QQueue<int> to_delete;
389 foreach (QModelIndex id, selected) {
390 to_delete.append(id.row());
393 int count = to_delete.count();
394 for (int i = count-1; i >= 0; i--) {
395 _current_playlist.removeTrackAt(to_delete.at(i));
397 _current_tracks = _current_playlist.tracks();
398 _lib->savePlaylist(_current_playlist);
399 _current_playlist_changed = true;
400 __fill_model_tracks(_model, _current_tracks, _icons_theme);
401 ui->listView->setColumnWidth(0, 70);
402 } else if (_state == STATE_PLAYLIST) {
403 QModelIndexList selected = ui->listView->selectionModel()->selectedIndexes();
404 QQueue<int> to_delete;
405 foreach (QModelIndex id, selected) {
406 to_delete.append(id.row());
409 int count = to_delete.count();
410 for (int i = count-1; i >= 0; i--) {
411 QString name = _model->item(to_delete.at(i))->text();
412 if (name != _CURRENT_PLAYLIST_SUBST_) {
413 _lib->removePlaylist(name);
414 _model->removeRow(to_delete.at(i));
420 void LibraryForm::_delete_track(Track track) {
421 Playlist current = _lib->getCurrentPlaylist();
422 current.removeTrack(track);
423 _lib->saveCurrentPlaylist(current);
424 _current_playlist_changed = true;
427 void LibraryForm::_use_button() {
428 _lib->saveCurrentPlaylist(_current_playlist);
429 _current_playlist_changed = true;
430 _current_playlist = _lib->getCurrentPlaylist();
433 void LibraryForm::search(QString pattern) {
434 _search_pattern = pattern;
435 _search_current_id = -1;
439 void LibraryForm::nextItem() {
440 QString data = _model->index(_search_current_id, 0).data().toString();
441 for (int i = _search_current_id+1; i < _model->rowCount(); i++) {
442 data = _model->index(i, 1).data().toString();
443 if (data.contains(_search_pattern, Qt::CaseInsensitive)) {
444 _search_current_id = i;
448 QModelIndex id = _model->index(_search_current_id, 1);
449 ui->listView->selectionModel()->clearSelection();
450 ui->listView->selectRow(id.row());
451 ui->listView->scrollTo(id);
454 void LibraryForm::prevItem() {
455 QString data = _model->index(_search_current_id, 0).data().toString();
456 for (int i = _search_current_id-1; i >= 0; i--) {
457 data = _model->index(i, 1).data().toString();
458 if (data.contains(_search_pattern, Qt::CaseInsensitive)) {
459 _search_current_id = i;
463 QModelIndex id = _model->index(_search_current_id, 1);
464 ui->listView->selectionModel()->clearSelection();
465 ui->listView->selectRow(id.row());
466 ui->listView->scrollTo(id);
469 void LibraryForm::cancelSearch() {
470 _search_pattern = "";
471 ui->listView->selectionModel()->clearSelection();
474 void LibraryForm::refresh() {
480 __fill_model_album(_model, _lib->getAlbumsForArtist(_current_artist), _icons_theme);
481 ui->listView->setColumnWidth(0, 70);
489 case STATE_PLAYLIST_TRACK:
490 _current_playlist = _lib->getPlaylist(_current_playlist.name());
491 _current_tracks = _current_playlist.tracks();
492 __fill_model_tracks(_model, _current_tracks, _icons_theme);
493 ui->listView->setColumnWidth(0, 70);
496 _current_tracks = _lib->getTracksForAlbum(_current_album, _current_artist);
497 __fill_model_tracks(_model, _current_tracks, _icons_theme);
504 void LibraryForm::_toggle_select_all_button() {
505 if (ui->listView->selectionModel()->selectedIndexes().count() == _model->rowCount() * _model->columnCount()) {
506 ui->listView->selectionModel()->clearSelection();
507 ui->selectAllButton->setIcon(QIcon(":/icons/"+_icons_theme+"/select_all.png"));
509 ui->listView->selectAll();
510 ui->selectAllButton->setIcon(QIcon(":/icons/"+_icons_theme+"/deselect_all.png"));
514 void LibraryForm::landscapeMode() {
516 ui->topWidget->hide();
517 ui->bottomWidget->hide();
519 ui->lverticalLayout->removeItem(ui->lverticalSpacer_0);
520 ui->lverticalLayout->removeItem(ui->lverticalSpacer_1);
521 ui->lverticalLayout->removeItem(ui->lverticalSpacer_2);
522 ui->lverticalLayout->removeItem(ui->lverticalSpacer_3);
523 ui->lverticalLayout->addWidget(ui->backButton);
524 ui->lverticalLayout->addItem(ui->lverticalSpacer_0);
525 ui->lverticalLayout->addWidget(ui->addButton);
526 ui->lverticalLayout->addItem(ui->lverticalSpacer_1);
527 ui->lverticalLayout->addWidget(ui->deleteButton);
528 ui->lverticalLayout->addItem(ui->lverticalSpacer_2);
529 ui->lverticalLayout->addWidget(ui->useButton);
530 ui->lverticalLayout->addItem(ui->lverticalSpacer_3);
531 ui->lverticalLayout->addWidget(ui->playerButton);
533 ui->rverticalLayout->removeItem(ui->rverticalSpacer_0);
534 ui->rverticalLayout->removeItem(ui->rverticalSpacer_1);
535 ui->rverticalLayout->removeItem(ui->rverticalSpacer_2);
536 ui->rverticalLayout->removeItem(ui->rverticalSpacer_3);
537 ui->rverticalLayout->addWidget(ui->moreButton);
538 ui->rverticalLayout->addItem(ui->rverticalSpacer_0);
539 ui->rverticalLayout->addWidget(ui->selectAllButton);
540 ui->rverticalLayout->addItem(ui->rverticalSpacer_1);
541 ui->rverticalLayout->addWidget(ui->viewButton);
542 ui->rverticalLayout->addItem(ui->rverticalSpacer_2);
543 ui->rverticalLayout->addWidget(ui->dynamicButton);
544 ui->rverticalLayout->addItem(ui->rverticalSpacer_3);
545 ui->rverticalLayout->addWidget(ui->playlistsButton);
547 if (_tools_widget->isVisible()) {
548 ui->moreButton->setIcon(QIcon(":/icons/"+_icons_theme+"/more_l.png"));
550 ui->moreButton->setIcon(QIcon(":/icons/"+_icons_theme+"/unmore_l.png"));
554 void LibraryForm::portraitMode() {
557 ui->topWidget->show();
558 ui->bottomWidget->show();
560 ui->lverticalLayout->removeItem(ui->lverticalSpacer_0);
561 ui->lverticalLayout->removeItem(ui->lverticalSpacer_1);
562 ui->lverticalLayout->removeItem(ui->lverticalSpacer_2);
563 ui->lverticalLayout->removeItem(ui->lverticalSpacer_3);
565 ui->rverticalLayout->removeItem(ui->rverticalSpacer_0);
566 ui->rverticalLayout->removeItem(ui->rverticalSpacer_1);
567 ui->rverticalLayout->removeItem(ui->rverticalSpacer_2);
568 ui->rverticalLayout->removeItem(ui->rverticalSpacer_3);
570 ui->topWidget->layout()->removeItem(ui->thorizontalSpacer_0);
571 ui->topWidget->layout()->removeItem(ui->thorizontalSpacer_1);
572 ui->topWidget->layout()->removeItem(ui->thorizontalSpacer_2);
573 ui->topWidget->layout()->removeItem(ui->thorizontalSpacer_3);
574 ui->topWidget->layout()->removeItem(ui->thorizontalSpacer_4);
575 ui->topWidget->layout()->addWidget(ui->backButton);
576 ui->topWidget->layout()->addItem(ui->thorizontalSpacer_0);
577 ui->topWidget->layout()->addWidget(ui->deleteButton);
578 ui->topWidget->layout()->addItem(ui->thorizontalSpacer_1);
579 ui->topWidget->layout()->addWidget(ui->addButton);
580 ui->topWidget->layout()->addItem(ui->thorizontalSpacer_2);
581 ui->topWidget->layout()->addWidget(ui->useButton);
582 ui->topWidget->layout()->addItem(ui->thorizontalSpacer_3);
583 ui->topWidget->layout()->addWidget(ui->selectAllButton);
584 ui->topWidget->layout()->addItem(ui->thorizontalSpacer_4);
585 ui->topWidget->layout()->addWidget(ui->moreButton);
587 ui->bottomWidget->layout()->removeItem(ui->bhorizontalSpacer_0);
588 ui->bottomWidget->layout()->removeItem(ui->bhorizontalSpacer_1);
589 ui->bottomWidget->layout()->removeItem(ui->bhorizontalSpacer_2);
590 ui->bottomWidget->layout()->addWidget(ui->playerButton);
591 ui->bottomWidget->layout()->addItem(ui->bhorizontalSpacer_0);
592 ui->bottomWidget->layout()->addWidget(ui->viewButton);
593 ui->bottomWidget->layout()->addItem(ui->bhorizontalSpacer_1);
594 ui->bottomWidget->layout()->addWidget(ui->dynamicButton);
595 ui->bottomWidget->layout()->addItem(ui->bhorizontalSpacer_2);
596 ui->bottomWidget->layout()->addWidget(ui->playlistsButton);
598 if (_tools_widget->isVisible()) {
599 ui->moreButton->setIcon(QIcon(":/icons/"+_icons_theme+"/unmore.png"));
601 ui->moreButton->setIcon(QIcon(":/icons/"+_icons_theme+"/more.png"));
605 void LibraryForm::_more_button() {
606 if (_tools_widget->isVisible()) {
607 ui->moreButton->setIcon(QIcon(landscape ? ":/icons/"+_icons_theme+"/unmore_l.png" : ":/icons/"+_icons_theme+"/more.png"));
608 _tools_widget->hide();
609 _tools_widget->reset();
612 ui->moreButton->setIcon(QIcon(landscape ? ":/icons/"+_icons_theme+"/more_l.png" : ":/icons/"+_icons_theme+"/unmore.png"));
613 _tools_widget->show();
614 _tools_widget->setFocus();
619 void LibraryForm::updateIcons() {
621 _icons_theme = config.getValue("ui/iconstheme").toString();
622 _tools_widget->updateIcons();
623 if (!ui->addButton->icon().isNull()) {
624 ui->addButton->setIcon(QIcon(":/icons/"+_icons_theme+"/add.png"));
626 if (!ui->deleteButton->icon().isNull()) {
627 ui->deleteButton->setIcon(QIcon(":/icons/"+_icons_theme+"/delete.png"));
629 if (!ui->useButton->icon().isNull()) {
630 ui->useButton->setIcon(QIcon(":/icons/"+_icons_theme+"/use.png"));
632 ui->backButton->setIcon(QIcon(":/icons/"+_icons_theme+"/back.png"));
633 ui->dynamicButton->setIcon(QIcon(":/icons/"+_icons_theme+"/dynamic.png"));
634 if (_tools_widget->isVisible()) {
635 ui->moreButton->setIcon(QIcon(landscape ? ":/icons/"+_icons_theme+"/more_l.png" : ":/icons/"+_icons_theme+"/unmore.png"));
637 ui->moreButton->setIcon(QIcon(landscape ? ":/icons/"+_icons_theme+"/unmore_l.png" : ":/icons/"+_icons_theme+"/more.png"));
639 ui->playerButton->setIcon(QIcon(":/icons/"+_icons_theme+"/player.png"));
640 ui->playlistsButton->setIcon(QIcon(":/icons/"+_icons_theme+"/playlists.png"));
641 ui->viewButton->setIcon(QIcon(":/icons/"+_icons_theme+"/artists.png"));
642 if (ui->listView->selectionModel()->selectedRows().count() == _model->rowCount()) {
643 ui->selectAllButton->setIcon(QIcon(":/icons/"+_icons_theme+"/unselect_all.png"));
645 ui->selectAllButton->setIcon(QIcon(":/icons/"+_icons_theme+"/select_all.png"));
650 void LibraryForm::checkGradient() {
652 if (config.getValue("ui/gradient").toString() == "yes") {
653 ui->bottomWidget->setStyleSheet(_bottom_gradient);
654 ui->topWidget->setStyleSheet(_top_gradient);
656 ui->topWidget->setStyleSheet("");
657 ui->bottomWidget->setStyleSheet("");
661 void LibraryForm::_process_selection(QItemSelection selected, QItemSelection deselected) {
662 foreach (QModelIndex id, selected.indexes()) {
663 if (id.column() == 0) {
664 _model->item(id.row())->setIcon(QIcon(":/icons/"+_icons_theme+"/select_all.png"));
666 ui->listView->selectionModel()->select(id, QItemSelectionModel::Select);
668 foreach (QModelIndex id, deselected.indexes()) {
669 if (id.column() == 0) {
670 _model->item(id.row())->setIcon(QIcon(":/icons/"+_icons_theme+"/deselect_all.png"));
672 ui->listView->selectionModel()->select(id, QItemSelectionModel::Deselect);
676 void LibraryForm::_process_dblclick(QModelIndex id) {
677 if (id.column() == 0)
679 if (_state == STATE_TRACK || _state == STATE_PLAYLIST_TRACK) {
680 Playlist cur = _lib->getCurrentPlaylist();
681 Track track = _current_tracks.at(id.row());
683 _lib->saveCurrentPlaylist(cur);
684 _current_playlist_changed = true;
685 emit addAndPlay(track);
686 ui->listView->clearSelection();