/** Add a new playlist tab. */ Playlist* TabPlaylist::addPlaylist() { QString newPlaylistName = tr("Playlist %1").arg(count() + 1); QByteArray ba; if (playlists().isEmpty()) { ba = SettingsPrivate::instance()->lastActivePlaylistGeometry(); } else { ba = currentPlayList()->horizontalHeader()->saveState(); } // Then append a new empty playlist to the others Playlist *p = new Playlist(_mediaPlayer, this); p->installEventFilter(this); if (!ba.isEmpty()) { p->horizontalHeader()->restoreState(ba); } // Always create an icon in Disabled mode. It will be enabled when one will provide some tracks int i = addTab(p, newPlaylistName); this->setTabIcon(i, this->defaultIcon(QIcon::Disabled)); connect(p->mediaPlaylist(), &QMediaPlaylist::mediaRemoved, this, [=](int start, int) { if (_mediaPlayer.data()->playlist() == p->mediaPlaylist() && p->mediaPlaylist()->currentIndex() == start) { _mediaPlayer.data()->stop(); } }); // Forward from inner class to MainWindow the signals connect(p, &Playlist::aboutToSendToTagEditor, this, &TabPlaylist::aboutToSendToTagEditor); connect(p, &Playlist::selectionChanged, this, &TabPlaylist::selectionChanged); // Check if tab icon should indicate that playlist has changed or not connect(p, &Playlist::contentHasChanged, this, [=]() { int playlistTabIndex = -1; for (int i = 0; i < playlists().count(); i++) { if (p == playlist(i)) { playlistTabIndex = i; break; } } if (playlistTabIndex != -1) { if (p->hash() != p->generateNewHash()) { this->setTabIcon(playlistTabIndex, this->defaultIcon(QIcon::Normal)); } } }); // Select the new empty playlist setCurrentIndex(i); uint hash = qHash(p); this->tabBar()->setTabData(i, hash); emit playlistCreated(); return p; }