Black icons came back
[someplayer] / src / libraryform.cpp
1 /*
2  * SomePlayer - An alternate music player for Maemo 5
3  * Copyright (C) 2010 Nikolay (somebody) Tischenko <niktischenko@gmail.com>
4  *
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.
9  *
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.
14  *
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.
18  */
19
20 #include "libraryform.h"
21 #include "ui_libraryform.h"
22 #include "library.h"
23 #include <QStandardItemModel>
24 #include <QStandardItem>
25 #include <QModelIndex>
26 #include <QModelIndexList>
27 #include "track.h"
28 #include "playlist.h"
29 #include <QTime>
30 #include <QTimer>
31 #include <QQueue>
32 #include <QMessageBox>
33 #include "config.h"
34 #include <QSpacerItem>
35 #include <QDebug>
36
37 using namespace SomePlayer::DataObjects;
38 using namespace SomePlayer::Storage;
39
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());
45
46 }
47
48 inline void __fill_model(QStandardItemModel *model, QList<QString> data) {
49         model->clear();
50         int count = data.count();
51         model->setRowCount(count);
52         for (int i = 0; i < count; i++) {
53                 model->setItem(i, 0, new QStandardItem(data.at(i)));
54         }
55 }
56
57 inline void __fill_model_tracks (QStandardItemModel *model, QList<Track> tracks) {
58         int count = tracks.count();
59         model->setRowCount(count);
60         Config config;
61         bool show_lenght = (config.getValue("ui/showtracklenght").toString() != "no");
62         for (int i = 0; i < count; i++) {
63                 TrackMetadata meta = tracks.at(i).metadata();
64                 if (show_lenght)
65                         model->setItem(i, 0, new QStandardItem(__format_track_string(meta)));
66                 else
67                         model->setItem(i, 0, new QStandardItem(meta.title()));
68         }
69 }
70
71 LibraryForm::LibraryForm(Library *lib, QWidget *parent) :
72     QWidget(parent),
73     ui(new Ui::LibraryForm)
74 {
75         _lib = lib;
76         Config config;
77         _icons_theme = config.getValue("ui/iconstheme").toString();
78         _model = new QStandardItemModel(this);
79         _state = STATE_NONE;
80         _tools_widget = new ToolsWidget(this);
81         ui->setupUi(this);
82         ui->toolsLayout->addWidget(_tools_widget);
83         _tools_widget->hide();
84         connect(ui->playerButton, SIGNAL(clicked()), this, SLOT(_player()));
85         connect(ui->viewButton, SIGNAL(clicked()), this, SLOT(_view_button()));
86         connect(ui->playlistsButton, SIGNAL(clicked()), this, SLOT(_playlists_button()));
87         connect(ui->dynamicButton, SIGNAL(clicked()), this, SLOT(_dynamic_button()));
88         connect(ui->listView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(_process_list_click(QModelIndex)));
89         connect(ui->addButton, SIGNAL(clicked()), this, SLOT(_add_button()));
90         connect(ui->selectAllButton, SIGNAL(clicked()), this, SLOT(_toggle_select_all_button()));
91         connect(ui->backButton, SIGNAL(clicked()), this, SLOT(_back_button()));
92         connect(ui->deleteButton, SIGNAL(clicked()), this, SLOT(_delete_button()));
93         connect(ui->useButton, SIGNAL(clicked()), this, SLOT(_use_button()));
94         connect(_tools_widget, SIGNAL(search(QString)), this, SLOT(search(QString)));
95         connect(_tools_widget, SIGNAL(nextSearch()), this, SLOT(nextItem()));
96         connect(_tools_widget, SIGNAL(prevSearch()), this, SLOT(prevItem()));
97         connect(_tools_widget, SIGNAL(toggleFullscreen(bool)), this, SIGNAL(fullscreen(bool)));
98         connect(ui->moreButton, SIGNAL(clicked()), this, SLOT(_more_button()));
99         _view_button();
100         _current_playlist_changed = true;
101         _top_gradient = ui->topWidget->styleSheet();
102         _bottom_gradient = ui->bottomWidget->styleSheet();
103 }
104
105 LibraryForm::~LibraryForm()
106 {
107         _lib->saveCurrentPlaylist(_lib->getCurrentPlaylist()); // wtf?
108         _current_playlist_changed = true;
109         delete ui;
110 }
111
112 void LibraryForm::_player() {
113         emit player(_current_playlist_changed);
114         _current_playlist_changed = false;
115 }
116
117 void LibraryForm::_view_button() {
118         QList<QString> artitst = _lib->getArtists();
119         __fill_model(_model, artitst);
120         ui->listView->setModel(_model);
121         _state = STATE_ARTIST;
122         ui->backButton->setEnabled(false);
123         ui->listLabel->setText("Artists");
124         ui->addButton->setEnabled(true);
125         ui->addButton->setIcon(QIcon(":/icons/"+_icons_theme+"/add.png"));
126         ui->deleteButton->setEnabled(false);
127         ui->deleteButton->setIcon(QIcon());
128         ui->useButton->setEnabled(false);
129         ui->useButton->setIcon(QIcon());
130 }
131
132 void LibraryForm::_dynamic_button() {
133         ui->useButton->setEnabled(false);
134         ui->useButton->setIcon(QIcon());
135         ui->backButton->setEnabled(false);
136         ui->addButton->setEnabled(true);
137         ui->addButton->setIcon(QIcon(":/icons/"+_icons_theme+"/add.png"));
138         ui->deleteButton->setEnabled(false);
139         ui->deleteButton->setIcon(QIcon());
140         _model->clear();
141         _model->setRowCount(4);
142         _model->setItem(0, new QStandardItem("Favorites"));
143         _model->setItem(1, new QStandardItem("Most played"));
144         _model->setItem(2, new QStandardItem("Never played"));
145         _model->setItem(3, new QStandardItem("Recently added"));
146         ui->listLabel->setText("Dynamic playlists");
147         _state = STATE_DYNAMIC;
148 }
149
150 void LibraryForm::_process_list_click(QModelIndex index) {
151         if (_state == STATE_NONE) return;
152         QString data = index.data().toString();
153         switch (_state) {
154         case STATE_ARTIST:
155                 __fill_model(_model, _lib->getAlbumsForArtist(data));
156                 ui->listView->scrollToTop();
157                 _current_artist = data;
158                 _state = STATE_ALBUM;
159                 ui->backButton->setEnabled(true);
160                 ui->listLabel->setText(QString("Albums by \"%1\"").arg(_current_artist));
161                 break;
162         case STATE_ALBUM:
163                 _current_album = data;
164                 _current_tracks = _lib->getTracksForAlbum(data, _current_artist);
165                 __fill_model_tracks(_model, _current_tracks);
166                 ui->listView->scrollToTop();
167                 _state = STATE_TRACK;
168                 ui->backButton->setEnabled(true);
169                 ui->listLabel->setText(QString("Tracks from \"%1\" by \"%2\"").arg(_current_album).arg(_current_artist));
170                 break;
171         case STATE_PLAYLIST:
172                 {
173                         _current_playlist = _lib->getPlaylist(data);
174                         _current_tracks = _current_playlist.tracks();
175                         __fill_model_tracks(_model, _current_tracks);
176                         ui->listView->scrollToTop();
177                         _state = STATE_PLAYLIST_TRACK;
178                         ui->backButton->setEnabled(true);
179                         ui->deleteButton->setEnabled(true);
180                         ui->deleteButton->setIcon(QIcon(":/icons/"+_icons_theme+"/delete.png"));
181                         ui->useButton->setEnabled(true);
182                         ui->useButton->setIcon(QIcon(":/icons/"+_icons_theme+"/use.png"));
183                         ui->listLabel->setText(QString("Tracks in playlist \"%1\"").arg(data));
184                 }
185                 break;
186         case STATE_DYNAMIC:
187                 {
188                         switch(index.row()) {
189                         case 0: //favorites
190                                 _current_playlist = _lib->getFavorites();
191                                 break;
192                         case 1: //most played
193                                 _current_playlist = _lib->getMostPlayed();
194                                 break;
195                         case 2: //never played
196                                 _current_playlist = _lib->getNeverPlayed();
197                         case 3: //recently added
198                                 _current_playlist = _lib->getRecentlyAdded();
199                                 break;
200                         default:
201                                 return;
202                         }
203                         _current_tracks = _current_playlist.tracks();
204                         __fill_model_tracks(_model, _current_tracks);
205                         ui->listView->scrollToTop();
206                         _state = STATE_PLAYLIST_TRACK;
207                         ui->backButton->setEnabled(true);
208                         ui->useButton->setEnabled(true);
209                         ui->useButton->setIcon(QIcon(":/icons/"+_icons_theme+"/use.png"));
210                         ui->addButton->setEnabled(true);
211                         ui->addButton->setIcon(QIcon(":/icons/"+_icons_theme+"/add.png"));
212                         ui->listLabel->setText(_current_playlist.name());
213                 }
214         default:
215                 return;
216         }
217         QTimer::singleShot(100, ui->listView, SLOT(clearSelection())); // workaround
218 }
219
220 void LibraryForm::_add_button() {
221         if (_state == STATE_NONE) return;
222         QModelIndexList selected = ui->listView->selectionModel()->selectedIndexes();
223         ui->listView->selectionModel()->clearSelection();
224         emit busy(QString("<H1>Adding... Please wait</H1>"));
225         Playlist cur = _lib->getCurrentPlaylist();
226         switch (_state) {
227         case STATE_ARTIST:
228                 foreach (QModelIndex id, selected) {
229                         _add_artist(&cur, id.data().toString());
230                 }
231                 _lib->saveCurrentPlaylist(cur);
232                 _current_playlist_changed = true;
233                 break;
234         case STATE_ALBUM:
235                 foreach (QModelIndex id, selected) {
236                         _add_album(&cur, _current_artist, id.data().toString());
237                 }
238                 _lib->saveCurrentPlaylist(cur);
239                 _current_playlist_changed = true;
240                 break;
241         case STATE_TRACK:
242                 foreach (QModelIndex id, selected) {
243                         _add_track(&cur, _current_tracks.at(id.row()));
244                 }
245                 _lib->saveCurrentPlaylist(cur);
246                 _current_playlist_changed = true;
247                 break;
248         case STATE_PLAYLIST:
249                 foreach (QModelIndex id, selected) {
250                         _add_playlist(&cur, id.data().toString());
251                 }
252                 _lib->saveCurrentPlaylist(cur);
253                 _current_playlist_changed = true;
254                 break;
255         case STATE_PLAYLIST_TRACK:
256                 foreach (QModelIndex id, selected) {
257                         _add_track(&cur, _current_tracks.at(id.row()));
258                 }
259                 _lib->saveCurrentPlaylist(cur);
260                 _current_playlist_changed = true;
261                 break;
262         default:
263                 emit done();
264                 return;
265         }
266         emit done();
267 }
268
269
270 void LibraryForm::_add_artist(Playlist *cur, QString artist) {
271         QList<QString> albums = _lib->getAlbumsForArtist(artist);
272         foreach(QString album, albums) {
273                 _add_album(cur, artist, album);
274         }
275 }
276
277 void LibraryForm::_add_album(Playlist *cur, QString artist, QString album) {
278         QList<Track> tracks = _lib->getTracksForAlbum(album, artist);
279         foreach(Track track, tracks) {
280                 _add_track(cur, track);
281         }
282 }
283
284 void LibraryForm::_add_track(Playlist *cur, Track track) {
285         cur->addTrack(track);
286 }
287
288 void LibraryForm::_add_playlist(Playlist *cur, QString name) {
289         Playlist playlist = _lib->getPlaylist(name);
290         QList<Track> tracks = playlist.tracks();
291         foreach (Track track, tracks) {
292                 _add_track(cur, track);
293         }
294 }
295
296 void LibraryForm::_back_button() {
297         switch (_state) {
298         case STATE_ALBUM:
299                 _view_button();
300                 ui->listView->scrollToTop();
301                 break;
302         case STATE_TRACK:
303                 __fill_model(_model, _lib->getAlbumsForArtist(_current_artist));
304                 ui->listView->scrollToTop();
305                 _state = STATE_ALBUM;
306                 ui->listLabel->setText(QString("Albums by \"%1\"").arg(_current_artist));
307                 break;
308         case STATE_PLAYLIST_TRACK:
309                 _playlists_button();
310                 ui->listView->scrollToTop();
311         default:
312                 return;
313         }
314 }
315
316 void LibraryForm::_playlists_button() {
317         QList<QString> playlists = _lib->getPlaylistsNames();
318         __fill_model(_model, playlists);
319         ui->listView->setModel(_model);
320         _state = STATE_PLAYLIST;
321         ui->backButton->setEnabled(false);
322         ui->listLabel->setText("Playlists");
323         ui->addButton->setEnabled(true);
324         ui->addButton->setIcon(QIcon(":/icons/"+_icons_theme+"/add.png"));
325         ui->deleteButton->setEnabled(true);
326         ui->deleteButton->setIcon(QIcon(":/icons/"+_icons_theme+"/delete.png"));
327         ui->useButton->setEnabled(false);
328         ui->useButton->setIcon(QIcon());
329 }
330
331 void LibraryForm::_delete_button() {
332         if (_state == STATE_PLAYLIST_TRACK) {
333                 QModelIndexList selected = ui->listView->selectionModel()->selectedIndexes();
334                 ui->listView->selectionModel()->clearSelection();
335                 QQueue<int> to_delete;
336                 foreach (QModelIndex id, selected) {
337                         to_delete.append(id.row());
338                 }
339                 qSort(to_delete);
340                 int count = to_delete.count();
341                 for (int i = count-1; i >= 0; i--) {
342                         _current_playlist.removeTrackAt(to_delete.at(i));
343                 }
344                 _current_tracks = _current_playlist.tracks();
345                 _lib->savePlaylist(_current_playlist);
346                 _current_playlist_changed = true;
347                 __fill_model_tracks(_model, _current_tracks);
348         } else if (_state == STATE_PLAYLIST) {
349                 QModelIndexList selected = ui->listView->selectionModel()->selectedIndexes();
350                 QQueue<int> to_delete;
351                 foreach (QModelIndex id, selected) {
352                         to_delete.append(id.row());
353                 }
354                 qSort(to_delete);
355                 int count = to_delete.count();
356                 for (int i = count-1; i >= 0; i--) {
357                         QString name = _model->item(to_delete.at(i))->text();
358                         if (name != _CURRENT_PLAYLIST_SUBST_) {
359                                 _lib->removePlaylist(name);
360                                 _model->removeRow(to_delete.at(i));
361                         }
362                 }
363         }
364 }
365
366 void LibraryForm::_delete_track(Track track) {
367         Playlist current = _lib->getCurrentPlaylist();
368         current.removeTrack(track);
369         _lib->saveCurrentPlaylist(current);
370         _current_playlist_changed = true;
371 }
372
373 void LibraryForm::_use_button() {
374         _lib->saveCurrentPlaylist(_current_playlist);
375         _current_playlist_changed = true;
376         _current_playlist = _lib->getCurrentPlaylist();
377 }
378
379 void LibraryForm::search(QString pattern) {
380         _search_pattern = pattern;
381         _search_current_id = -1;
382         nextItem();
383 }
384
385 void LibraryForm::nextItem() {
386         QString data = _model->index(_search_current_id, 0).data().toString();
387         for (int i = _search_current_id+1; i < _model->rowCount(); i++) {
388                 data = _model->index(i, 0).data().toString();
389                 if (data.contains(_search_pattern, Qt::CaseInsensitive)) {
390                         _search_current_id = i;
391                         break;
392                 }
393         }
394         QModelIndex id = _model->index(_search_current_id, 0);
395         ui->listView->selectionModel()->clearSelection();
396         ui->listView->selectionModel()->select(id, QItemSelectionModel::Select);
397         ui->listView->scrollTo(id);
398 }
399
400 void LibraryForm::prevItem() {
401         QString data = _model->index(_search_current_id, 0).data().toString();
402         for (int i = _search_current_id-1; i >= 0; i--) {
403                 data = _model->index(i, 0).data().toString();
404                 if (data.contains(_search_pattern, Qt::CaseInsensitive)) {
405                         _search_current_id = i;
406                         break;
407                 }
408         }
409         QModelIndex id = _model->index(_search_current_id, 0);
410         ui->listView->selectionModel()->clearSelection();
411         ui->listView->selectionModel()->select(id, QItemSelectionModel::Select);
412         ui->listView->scrollTo(id);
413 }
414
415 void LibraryForm::cancelSearch() {
416         _search_pattern = "";
417         ui->listView->selectionModel()->clearSelection();
418 }
419
420 void LibraryForm::refresh() {
421         switch (_state) {
422         case STATE_ARTIST:
423                 _view_button();
424                 break;
425         case STATE_ALBUM:
426                 __fill_model(_model, _lib->getAlbumsForArtist(_current_artist));
427                 break;
428         case STATE_PLAYLIST:
429                 _playlists_button();
430                 break;
431         case STATE_DYNAMIC:
432                 _dynamic_button();
433                 break;
434         case STATE_PLAYLIST_TRACK:
435                 _current_playlist = _lib->getPlaylist(_current_playlist.name());
436                 _current_tracks = _current_playlist.tracks();
437                 __fill_model_tracks(_model, _current_tracks);
438                 break;
439         case STATE_TRACK:
440                 _current_tracks = _lib->getTracksForAlbum(_current_album, _current_artist);
441                 __fill_model_tracks(_model, _current_tracks);
442                 break;
443         default:
444                 return;
445         }
446 }
447
448 void LibraryForm::_toggle_select_all_button() {
449         if (ui->listView->selectionModel()->selectedIndexes().count() == ui->listView->model()->rowCount()) {
450                 ui->listView->selectionModel()->clearSelection();
451                 ui->selectAllButton->setIcon(QIcon(":/icons/"+_icons_theme+"/select_all.png"));
452         } else {
453                 ui->listView->selectAll();
454                 ui->selectAllButton->setIcon(QIcon(":/icons/"+_icons_theme+"/deselect_all.png"));
455         }
456 }
457
458 void LibraryForm::landscapeMode() {
459         landscape = true;
460         ui->topWidget->hide();
461         ui->bottomWidget->hide();
462
463         ui->lverticalLayout->removeItem(ui->lverticalSpacer_0);
464         ui->lverticalLayout->removeItem(ui->lverticalSpacer_1);
465         ui->lverticalLayout->removeItem(ui->lverticalSpacer_2);
466         ui->lverticalLayout->removeItem(ui->lverticalSpacer_3);
467         ui->lverticalLayout->addWidget(ui->backButton);
468         ui->lverticalLayout->addItem(ui->lverticalSpacer_0);
469         ui->lverticalLayout->addWidget(ui->addButton);
470         ui->lverticalLayout->addItem(ui->lverticalSpacer_1);
471         ui->lverticalLayout->addWidget(ui->deleteButton);
472         ui->lverticalLayout->addItem(ui->lverticalSpacer_2);
473         ui->lverticalLayout->addWidget(ui->useButton);
474         ui->lverticalLayout->addItem(ui->lverticalSpacer_3);
475         ui->lverticalLayout->addWidget(ui->playerButton);
476
477         ui->rverticalLayout->removeItem(ui->rverticalSpacer_0);
478         ui->rverticalLayout->removeItem(ui->rverticalSpacer_1);
479         ui->rverticalLayout->removeItem(ui->rverticalSpacer_2);
480         ui->rverticalLayout->removeItem(ui->rverticalSpacer_3);
481         ui->rverticalLayout->addWidget(ui->moreButton);
482         ui->rverticalLayout->addItem(ui->rverticalSpacer_0);
483         ui->rverticalLayout->addWidget(ui->selectAllButton);
484         ui->rverticalLayout->addItem(ui->rverticalSpacer_1);
485         ui->rverticalLayout->addWidget(ui->viewButton);
486         ui->rverticalLayout->addItem(ui->rverticalSpacer_2);
487         ui->rverticalLayout->addWidget(ui->dynamicButton);
488         ui->rverticalLayout->addItem(ui->rverticalSpacer_3);
489         ui->rverticalLayout->addWidget(ui->playlistsButton);
490
491         if (_tools_widget->isVisible()) {
492                 ui->moreButton->setIcon(QIcon(":/icons/"+_icons_theme+"/more_l.png"));
493         } else {
494                 ui->moreButton->setIcon(QIcon(":/icons/"+_icons_theme+"/unmore_l.png"));
495         }
496 }
497
498 void LibraryForm::portraitMode() {
499         landscape = false;
500
501         ui->topWidget->show();
502         ui->bottomWidget->show();
503
504         ui->lverticalLayout->removeItem(ui->lverticalSpacer_0);
505         ui->lverticalLayout->removeItem(ui->lverticalSpacer_1);
506         ui->lverticalLayout->removeItem(ui->lverticalSpacer_2);
507         ui->lverticalLayout->removeItem(ui->lverticalSpacer_3);
508
509         ui->rverticalLayout->removeItem(ui->rverticalSpacer_0);
510         ui->rverticalLayout->removeItem(ui->rverticalSpacer_1);
511         ui->rverticalLayout->removeItem(ui->rverticalSpacer_2);
512         ui->rverticalLayout->removeItem(ui->rverticalSpacer_3);
513
514         ui->topWidget->layout()->removeItem(ui->thorizontalSpacer_0);
515         ui->topWidget->layout()->removeItem(ui->thorizontalSpacer_1);
516         ui->topWidget->layout()->removeItem(ui->thorizontalSpacer_2);
517         ui->topWidget->layout()->removeItem(ui->thorizontalSpacer_3);
518         ui->topWidget->layout()->removeItem(ui->thorizontalSpacer_4);
519         ui->topWidget->layout()->addWidget(ui->backButton);
520         ui->topWidget->layout()->addItem(ui->thorizontalSpacer_0);
521         ui->topWidget->layout()->addWidget(ui->deleteButton);
522         ui->topWidget->layout()->addItem(ui->thorizontalSpacer_1);
523         ui->topWidget->layout()->addWidget(ui->addButton);
524         ui->topWidget->layout()->addItem(ui->thorizontalSpacer_2);
525         ui->topWidget->layout()->addWidget(ui->useButton);
526         ui->topWidget->layout()->addItem(ui->thorizontalSpacer_3);
527         ui->topWidget->layout()->addWidget(ui->selectAllButton);
528         ui->topWidget->layout()->addItem(ui->thorizontalSpacer_4);
529         ui->topWidget->layout()->addWidget(ui->moreButton);
530
531         ui->bottomWidget->layout()->removeItem(ui->bhorizontalSpacer_0);
532         ui->bottomWidget->layout()->removeItem(ui->bhorizontalSpacer_1);
533         ui->bottomWidget->layout()->removeItem(ui->bhorizontalSpacer_2);
534         ui->bottomWidget->layout()->addWidget(ui->playerButton);
535         ui->bottomWidget->layout()->addItem(ui->bhorizontalSpacer_0);
536         ui->bottomWidget->layout()->addWidget(ui->viewButton);
537         ui->bottomWidget->layout()->addItem(ui->bhorizontalSpacer_1);
538         ui->bottomWidget->layout()->addWidget(ui->dynamicButton);
539         ui->bottomWidget->layout()->addItem(ui->bhorizontalSpacer_2);
540         ui->bottomWidget->layout()->addWidget(ui->playlistsButton);
541
542         if (_tools_widget->isVisible()) {
543                 ui->moreButton->setIcon(QIcon(":/icons/"+_icons_theme+"/unmore.png"));
544         } else {
545                 ui->moreButton->setIcon(QIcon(":/icons/"+_icons_theme+"/more.png"));
546         }
547 }
548
549 void LibraryForm::_more_button() {
550         if (_tools_widget->isVisible()) {
551                 ui->moreButton->setIcon(QIcon(landscape ? ":/icons/"+_icons_theme+"/unmore_l.png" : ":/icons/"+_icons_theme+"/more.png"));
552                 _tools_widget->hide();
553                 _tools_widget->reset();
554                 cancelSearch();
555         } else {
556                 ui->moreButton->setIcon(QIcon(landscape ? ":/icons/"+_icons_theme+"/more_l.png" : ":/icons/"+_icons_theme+"/unmore.png"));
557                 _tools_widget->show();
558                 _tools_widget->setFocus();
559         }
560 }
561
562
563 void LibraryForm::updateIcons() {
564         Config config;
565         _icons_theme = config.getValue("ui/iconstheme").toString();
566         _tools_widget->updateIcons();
567         if (!ui->addButton->icon().isNull()) {
568                 ui->addButton->setIcon(QIcon(":/icons/"+_icons_theme+"/add.png"));
569         }
570         if (!ui->deleteButton->icon().isNull()) {
571                 ui->deleteButton->setIcon(QIcon(":/icons/"+_icons_theme+"/delete.png"));
572         }
573         if (!ui->useButton->icon().isNull()) {
574                 ui->useButton->setIcon(QIcon(":/icons/"+_icons_theme+"/use.png"));
575         }
576         ui->backButton->setIcon(QIcon(":/icons/"+_icons_theme+"/back.png"));
577         ui->dynamicButton->setIcon(QIcon(":/icons/"+_icons_theme+"/dynamic.png"));
578         if (_tools_widget->isVisible()) {
579                 ui->moreButton->setIcon(QIcon(landscape ? ":/icons/"+_icons_theme+"/more_l.png" : ":/icons/"+_icons_theme+"/unmore.png"));
580         } else {
581                 ui->moreButton->setIcon(QIcon(landscape ? ":/icons/"+_icons_theme+"/unmore_l.png" : ":/icons/"+_icons_theme+"/more.png"));
582         }
583         ui->playerButton->setIcon(QIcon(":/icons/"+_icons_theme+"/player.png"));
584         ui->playlistsButton->setIcon(QIcon(":/icons/"+_icons_theme+"/playlists.png"));
585         ui->viewButton->setIcon(QIcon(":/icons/"+_icons_theme+"/artists.png"));
586         if (ui->listView->selectionModel()->selectedRows().count() == _model->rowCount()) {
587                 ui->selectAllButton->setIcon(QIcon(":/icons/"+_icons_theme+"/unselect_all.png"));
588         } else {
589                 ui->selectAllButton->setIcon(QIcon(":/icons/"+_icons_theme+"/select_all.png"));
590         }
591 }
592
593 void LibraryForm::checkGradient() {
594         Config config;
595         if (config.getValue("ui/gradient").toString() == "yes") {
596                 ui->bottomWidget->setStyleSheet(_bottom_gradient);
597                 ui->topWidget->setStyleSheet(_top_gradient);
598         } else {
599                 ui->topWidget->setStyleSheet("");
600                 ui->bottomWidget->setStyleSheet("");
601         }
602 }