void LibraryForm::_use_button() {
_lib->saveCurrentPlaylist(_current_playlist);
}
+
+void LibraryForm::search(QString &pattern) {
+ _search_pattern = pattern;
+ _search_current_id = -1;
+ nextItem();
+}
+
+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();
+ if (data.contains(_search_pattern, Qt::CaseInsensitive)) {
+ _search_current_id = i;
+ break;
+ }
+ }
+ QModelIndex id = _model->index(_search_current_id, 0);
+ ui->listView->selectionModel()->clearSelection();
+ ui->listView->selectionModel()->select(id, QItemSelectionModel::Select);
+ 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();
+ if (data.contains(_search_pattern, Qt::CaseInsensitive)) {
+ _search_current_id = i;
+ break;
+ }
+ }
+ QModelIndex id = _model->index(_search_current_id, 0);
+ ui->listView->selectionModel()->clearSelection();
+ ui->listView->selectionModel()->select(id, QItemSelectionModel::Select);
+ ui->listView->scrollTo(id);
+}
+
+void LibraryForm::cancelSearch() {
+ _search_pattern = "";
+ ui->listView->selectionModel()->clearSelection();
+}
void player();
void busy(QString);
void done();
+public slots:
+ void search(QString &);
+ void nextItem();
+ void prevItem();
+ void cancelSearch();
private slots:
void _player();
void _view_button();
QString _current_album;
Playlist _current_playlist;
QList<Track> _current_tracks;
+ QString _search_pattern;
+ int _search_current_id;
void _add_artist(QString artist);
void _add_album(QString artist, QString album);
void MainWindow::showSearchPanel() {
ui->searchButton->show();
+ ui->searchLine->setFocus();
}
void MainWindow::hideSearchPanel() {
void MainWindow::_search(QString pattern) {
if (ui->stackedWidget->currentIndex() == 0) { // player
_player_form->search(pattern);
+ } else if (ui->stackedWidget->currentIndex() == 1) { // library
+ _library_form->search(pattern);
}
}
void MainWindow::_nextItem() {
if (ui->stackedWidget->currentIndex() == 0) { // player
_player_form->nextItem();
+ } else if (ui->stackedWidget->currentIndex() == 1) { // library
+ _library_form->nextItem();
}
}
void MainWindow::_prevItem() {
if (ui->stackedWidget->currentIndex() == 0) { // player
_player_form->prevItem();
+ } else if (ui->stackedWidget->currentIndex() == 1) { // library
+ _library_form->prevItem();
}
}
void MainWindow::_cancelSearch() {
if (ui->stackedWidget->currentIndex() == 0) { // player
_player_form->cancelSearch();
+ } else if (ui->stackedWidget->currentIndex() == 1) { // library
+ _library_form->cancelSearch();
}
}
void PlayerForm::search(QString &pattern) {
_search_pattern = pattern;
+ _search_current_id = -1;
+ nextItem();
}
void PlayerForm::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();
+ if (data.contains(_search_pattern, Qt::CaseInsensitive)) {
+ _search_current_id = i;
+ break;
+ }
+ }
+ QModelIndex id = _model->index(_search_current_id, 0);
+ _track_renderer->setSearchRow(_search_current_id);
+ ui->playlistView->scrollTo(id);
+ ui->playlistView->hide();
+ ui->playlistView->show();
}
void PlayerForm::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();
+ if (data.contains(_search_pattern, Qt::CaseInsensitive)) {
+ _search_current_id = i;
+ break;
+ }
+ }
+ QModelIndex id = _model->index(_search_current_id, 0);
+ _track_renderer->setSearchRow(_search_current_id);
+ ui->playlistView->scrollTo(id);
+ ui->playlistView->hide();
+ ui->playlistView->show();
}
void PlayerForm::cancelSearch() {
_search_pattern = "";
+ _track_renderer->setSearchRow(-1);
+ ui->playlistView->scrollTo(_model->index(_track_renderer->activeRow(), 0));
+ ui->playlistView->hide();
+ ui->playlistView->show();
}
TrackRenderer *_track_renderer;
void _display_track(Track);
+ int _search_current_id;
};
#endif // PLAYERFORM_H
QPen npen (QColor::fromRgb(80, 130, 255, 50));
QPen apen (QColor::fromRgb(255, 255, 255, 128));
QPen spen (QColor::fromRgb(100, 150, 220));
+ QPen sspen (QColor::fromRgb(100, 220, 150));
f.setBold(true);
painter->setFont(f);
f.setBold(false);
painter->setPen(npen);
painter->drawLine(x1, y1, x2, y1);
- if (index.row() == _active_row) {
+ if (index.row() == _search_row) {
+ painter->setPen(sspen);
+ } else if (index.row() == _active_row) {
painter->setPen(spen);
} else {
painter->setPen(pen);
void TrackRenderer::setActiveRow(int r) {
_active_row = r;
}
+
+void TrackRenderer::setSearchRow(int r) {
+ _search_row = r;
+}
public slots:
void setActiveRow(int);
+ void setSearchRow(int);
+ int activeRow() {return _active_row;}
+ int searchRow() {return _search_row;}
private:
int _active_row;
+ int _search_row;
};