Skip to content

Commit

Permalink
Merge pull request #4177 from ronso0/lib-selection-state
Browse files Browse the repository at this point in the history
Fix library track selection, save model state
  • Loading branch information
daschuer authored Nov 20, 2021
2 parents dfef281 + 7bc610f commit a7a6a08
Show file tree
Hide file tree
Showing 44 changed files with 458 additions and 161 deletions.
8 changes: 8 additions & 0 deletions src/library/autodj/dlgautodj.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -385,3 +385,11 @@ bool DlgAutoDJ::hasFocus() const {
void DlgAutoDJ::setFocus() {
m_pTrackTableView->setFocus();
}

void DlgAutoDJ::saveCurrentViewState() {
m_pTrackTableView->saveCurrentViewState();
}

void DlgAutoDJ::restoreCurrentViewState() {
m_pTrackTableView->restoreCurrentViewState();
}
2 changes: 2 additions & 0 deletions src/library/autodj/dlgautodj.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ class DlgAutoDJ : public QWidget, public Ui::DlgAutoDJ, public LibraryView {
void loadSelectedTrack() override;
void loadSelectedTrackToGroup(const QString& group, bool play) override;
void moveSelection(int delta) override;
void saveCurrentViewState() override;
void restoreCurrentViewState() override;

public slots:
void shufflePlaylistButton(bool buttonChecked);
Expand Down
21 changes: 20 additions & 1 deletion src/library/baseexternalplaylistmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@
#include "moc_baseexternalplaylistmodel.cpp"
#include "track/track.h"

namespace {

const QString kModelName = "external:";

} // anonymous namespace

BaseExternalPlaylistModel::BaseExternalPlaylistModel(QObject* parent,
TrackCollectionManager* pTrackCollectionManager,
const char* settingsNamespace,
Expand All @@ -17,7 +23,8 @@ BaseExternalPlaylistModel::BaseExternalPlaylistModel(QObject* parent,
: BaseSqlTableModel(parent, pTrackCollectionManager, settingsNamespace),
m_playlistsTable(playlistsTable),
m_playlistTracksTable(playlistTracksTable),
m_trackSource(trackSource) {
m_trackSource(trackSource),
m_currentPlaylistId(-1) {
}

BaseExternalPlaylistModel::~BaseExternalPlaylistModel() {
Expand Down Expand Up @@ -134,6 +141,7 @@ void BaseExternalPlaylistModel::setPlaylist(const QString& playlist_path) {
return;
}

m_currentPlaylistId = playlistId;
playlistViewColumns.last() = LIBRARYTABLE_PREVIEW;
setTable(playlistViewTable, playlistViewColumns.first(), playlistViewColumns, m_trackSource);
setDefaultSort(fieldIndex(ColumnCache::COLUMN_PLAYLISTTRACKSTABLE_POSITION),
Expand Down Expand Up @@ -163,3 +171,14 @@ TrackModel::Capabilities BaseExternalPlaylistModel::getCapabilities() const {
Capability::LoadToPreviewDeck |
Capability::LoadToSampler;
}

QString BaseExternalPlaylistModel::modelKey(bool noSearch) const {
if (noSearch) {
return kModelName +
QString::number(m_currentPlaylistId);
}
return kModelName +
QString::number(m_currentPlaylistId) +
QStringLiteral("#") +
currentSearch();
}
12 changes: 7 additions & 5 deletions src/library/baseexternalplaylistmodel.h
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
#pragma once

#include <QtSql>
#include <QItemDelegate>
#include <QString>
#include <QObject>
#include <QModelIndex>
#include <QObject>
#include <QString>
#include <QtSql>

#include "library/trackmodel.h"
#include "library/basesqltablemodel.h"
#include "library/librarytablemodel.h"
#include "library/dao/playlistdao.h"
#include "library/dao/trackdao.h"
#include "library/librarytablemodel.h"
#include "library/trackmodel.h"

class BaseExternalPlaylistModel : public BaseSqlTableModel {
Q_OBJECT
Expand All @@ -28,11 +28,13 @@ class BaseExternalPlaylistModel : public BaseSqlTableModel {
bool isColumnInternal(int column) override;
Qt::ItemFlags flags(const QModelIndex &index) const override;
Capabilities getCapabilities() const override;
QString modelKey(bool noSearch) const override;

private:
TrackId doGetTrackId(const TrackPointer& pTrack) const override;

QString m_playlistsTable;
QString m_playlistTracksTable;
QSharedPointer<BaseTrackCache> m_trackSource;
int m_currentPlaylistId;
};
11 changes: 11 additions & 0 deletions src/library/basesqltablemodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ constexpr int kMaxSortColumns = 3;
// Constant for getModelSetting(name)
const QString COLUMNS_SORTING = QStringLiteral("ColumnsSorting");

const QString kModelName = "table:";

} // anonymous namespace

BaseSqlTableModel::BaseSqlTableModel(
Expand Down Expand Up @@ -613,6 +615,15 @@ int BaseSqlTableModel::fieldIndex(const QString& fieldName) const {
return tableIndex;
}

QString BaseSqlTableModel::modelKey(bool noSearch) const {
if (noSearch) {
return kModelName + m_tableName;
}
return kModelName + m_tableName +
QStringLiteral("#") +
currentSearch();
}

QVariant BaseSqlTableModel::rawValue(
const QModelIndex& index) const {
DEBUG_ASSERT(index.isValid());
Expand Down
4 changes: 3 additions & 1 deletion src/library/basesqltablemodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@ class BaseSqlTableModel : public BaseTrackTableModel {
int fieldIndex(
ColumnCache::Column column) const final;

QString modelKey(bool noSearch) const override;

protected:
///////////////////////////////////////////////////////////////////////////
// Inherited from BaseTrackTableModel
Expand All @@ -98,6 +100,7 @@ class BaseSqlTableModel : public BaseTrackTableModel {
QList<TrackRef> getTrackRefs(const QModelIndexList& indices) const;

QSqlDatabase m_database;
QString m_tableName;

QString m_tableOrderBy;
int m_columnIndexBySortColumnId[static_cast<int>(TrackModel::SortColumnId::IdMax)];
Expand Down Expand Up @@ -140,7 +143,6 @@ class BaseSqlTableModel : public BaseTrackTableModel {

QVector<RowInfo> m_rowInfo;

QString m_tableName;
QString m_idColumn;
QSharedPointer<BaseTrackCache> m_trackSource;
QStringList m_tableColumns;
Expand Down
6 changes: 6 additions & 0 deletions src/library/browse/browsefeature.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@ BrowseFeature::BrowseFeature(
&BrowseFeature::requestAddDir,
pLibrary,
&Library::slotRequestAddDir);
connect(&m_browseModel,
&BrowseTableModel::restoreModelState,
this,
&LibraryFeature::restoreModelState);

m_pAddQuickLinkAction = new QAction(tr("Add to Quick Links"),this);
connect(m_pAddQuickLinkAction,
Expand Down Expand Up @@ -245,6 +249,7 @@ void BrowseFeature::activateChild(const QModelIndex& index) {

QString path = item->getData().toString();
if (path == QUICK_LINK_NODE || path == DEVICE_NODE) {
emit saveModelState();
m_browseModel.setPath({});
} else {
// Open a security token for this path and if we do not have access, ask
Expand All @@ -260,6 +265,7 @@ void BrowseFeature::activateChild(const QModelIndex& index) {
return;
}
}
emit saveModelState();
m_browseModel.setPath(std::move(dirAccess));
}
emit showTrackModel(&m_proxyModel);
Expand Down
12 changes: 12 additions & 0 deletions src/library/browse/browsetablemodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,11 @@ void BrowseTableModel::addSearchColumn(int index) {
}

void BrowseTableModel::setPath(mixxx::FileAccess path) {
if (path.info().hasLocation()) {
m_currentDirectory = path.info().locationPath();
} else {
m_currentDirectory = QString();
}
m_pBrowseThread->executePopulation(std::move(path), this);
}

Expand Down Expand Up @@ -360,6 +365,7 @@ void BrowseTableModel::slotInsert(const QList<QList<QStandardItem*> >& rows,
appendRow(rows.at(i));
}
}
emit restoreModelState();
}

TrackModel::Capabilities BrowseTableModel::getCapabilities() const {
Expand All @@ -370,6 +376,12 @@ TrackModel::Capabilities BrowseTableModel::getCapabilities() const {
Capability::LoadToSampler;
}

QString BrowseTableModel::modelKey(bool noSearch) const {
// Browse feature does currently not support searching.
Q_UNUSED(noSearch);
return QStringLiteral("browse:") + m_currentDirectory;
}

Qt::ItemFlags BrowseTableModel::flags(const QModelIndex& index) const {
Qt::ItemFlags defaultFlags = QAbstractItemModel::flags(index);

Expand Down
6 changes: 6 additions & 0 deletions src/library/browse/browsetablemodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ class BrowseTableModel final : public QStandardItemModel, public virtual TrackMo
BrowseTableModel(QObject* parent, TrackCollectionManager* pTrackCollectionManager, RecordingManager* pRec);
virtual ~BrowseTableModel();

// initiate table population, store path
void setPath(mixxx::FileAccess path);

TrackPointer getTrack(const QModelIndex& index) const override;
Expand All @@ -78,6 +79,7 @@ class BrowseTableModel final : public QStandardItemModel, public virtual TrackMo
bool isColumnSortable(int column) const override;
TrackModel::SortColumnId sortColumnIdFromColumnIndex(int index) const override;
int columnIndexFromSortColumnId(TrackModel::SortColumnId sortColumn) const override;
QString modelKey(bool noSearch) const override;

bool updateTrackGenre(
Track* pTrack,
Expand All @@ -88,6 +90,9 @@ class BrowseTableModel final : public QStandardItemModel, public virtual TrackMo
const QString& mood) const override;
#endif // __EXTRA_METADATA__

signals:
void restoreModelState();

public slots:
void slotClear(BrowseTableModel*);
void slotInsert(const QList< QList<QStandardItem*> >&, BrowseTableModel*);
Expand All @@ -101,6 +106,7 @@ class BrowseTableModel final : public QStandardItemModel, public virtual TrackMo
QList<int> m_searchColumns;
RecordingManager* m_pRecordingManager;
BrowseThreadPointer m_pBrowseThread;
QString m_currentDirectory;
QString m_previewDeckGroup;
int m_columnIndexBySortColumnId[static_cast<int>(TrackModel::SortColumnId::IdMax)];
QMap<int, TrackModel::SortColumnId> m_sortColumnIdByColumnIndex;
Expand Down
8 changes: 8 additions & 0 deletions src/library/dlganalysis.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -229,3 +229,11 @@ void DlgAnalysis::installEventFilter(QObject* pFilter) {
QWidget::installEventFilter(pFilter);
m_pAnalysisLibraryTableView->installEventFilter(pFilter);
}

void DlgAnalysis::saveCurrentViewState() {
m_pAnalysisLibraryTableView->saveCurrentViewState();
}

void DlgAnalysis::restoreCurrentViewState() {
m_pAnalysisLibraryTableView->restoreCurrentViewState();
}
6 changes: 4 additions & 2 deletions src/library/dlganalysis.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
#include <QButtonGroup>
#include <QItemSelection>

#include "preferences/usersettings.h"
#include "analyzer/analyzerprogress.h"
#include "library/analysislibrarytablemodel.h"
#include "library/libraryview.h"
#include "library/ui_dlganalysis.h"
#include "analyzer/analyzerprogress.h"
#include "preferences/usersettings.h"

class AnalysisLibraryTableModel;
class WAnalysisLibraryTableView;
Expand Down Expand Up @@ -35,6 +35,8 @@ class DlgAnalysis : public QWidget, public Ui::DlgAnalysis, public virtual Libra
inline const QString currentSearch() {
return m_pAnalysisLibraryTableModel->currentSearch();
}
void saveCurrentViewState() override;
void restoreCurrentViewState() override;

public slots:
void tableSelectionChanged(const QItemSelection& selected,
Expand Down
8 changes: 8 additions & 0 deletions src/library/dlghidden.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,14 @@ bool DlgHidden::hasFocus() const {
return m_pTrackTableView->hasFocus();
}

void DlgHidden::saveCurrentViewState() {
m_pTrackTableView->saveCurrentViewState();
}

void DlgHidden::restoreCurrentViewState() {
m_pTrackTableView->restoreCurrentViewState();
}

void DlgHidden::setFocus() {
m_pTrackTableView->setFocus();
}
8 changes: 5 additions & 3 deletions src/library/dlghidden.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

#include <QItemSelection>

#include "library/ui_dlghidden.h"
#include "preferences/usersettings.h"
#include "controllers/keyboard/keyboardeventfilter.h"
#include "library/library.h"
#include "library/libraryview.h"
#include "controllers/keyboard/keyboardeventfilter.h"
#include "library/ui_dlghidden.h"
#include "preferences/usersettings.h"

class WLibrary;
class WTrackTableView;
Expand All @@ -26,6 +26,8 @@ class DlgHidden : public QWidget, public Ui::DlgHidden, public LibraryView {
void setFocus() override;
void onSearch(const QString& text) override;
QString currentSearch();
void saveCurrentViewState() override;
void restoreCurrentViewState() override;

public slots:
void clicked();
Expand Down
7 changes: 7 additions & 0 deletions src/library/dlgmissing.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,13 @@ bool DlgMissing::hasFocus() const {
return m_pTrackTableView->hasFocus();
}

void DlgMissing::saveCurrentViewState() {
m_pTrackTableView->saveCurrentViewState();
};
void DlgMissing::restoreCurrentViewState() {
m_pTrackTableView->restoreCurrentViewState();
};

void DlgMissing::setFocus() {
m_pTrackTableView->setFocus();
}
8 changes: 5 additions & 3 deletions src/library/dlgmissing.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

#include <QItemSelection>

#include "library/ui_dlgmissing.h"
#include "preferences/usersettings.h"
#include "controllers/keyboard/keyboardeventfilter.h"
#include "library/library.h"
#include "library/libraryview.h"
#include "controllers/keyboard/keyboardeventfilter.h"
#include "library/ui_dlgmissing.h"
#include "preferences/usersettings.h"

class WLibrary;
class WTrackTableView;
Expand All @@ -26,6 +26,8 @@ class DlgMissing : public QWidget, public Ui::DlgMissing, public LibraryView {
void setFocus() override;
void onSearch(const QString& text) override;
QString currentSearch();
void saveCurrentViewState() override;
void restoreCurrentViewState() override;

public slots:
void clicked();
Expand Down
15 changes: 15 additions & 0 deletions src/library/hiddentablemodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@
#include "library/trackcollectionmanager.h"
#include "moc_hiddentablemodel.cpp"

namespace {

const QString kModelName = "hidden:";

} // anonymous namespace

HiddenTableModel::HiddenTableModel(QObject* parent,
TrackCollectionManager* pTrackCollectionManager)
: BaseSqlTableModel(parent, pTrackCollectionManager, "mixxx.db.model.missing") {
Expand Down Expand Up @@ -91,3 +97,12 @@ Qt::ItemFlags HiddenTableModel::flags(const QModelIndex& index) const {
TrackModel::Capabilities HiddenTableModel::getCapabilities() const {
return Capability::Purge | Capability::Unhide;
}

QString HiddenTableModel::modelKey(bool noSearch) const {
if (noSearch) {
return kModelName + m_tableName;
}
return kModelName + m_tableName +
QStringLiteral("#") +
currentSearch();
}
2 changes: 2 additions & 0 deletions src/library/hiddentablemodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,6 @@ class HiddenTableModel final : public BaseSqlTableModel {
void unhideTracks(const QModelIndexList& indices) final;
Qt::ItemFlags flags(const QModelIndex &index) const final;
Capabilities getCapabilities() const final;

QString modelKey(bool noSearch) const override;
};
Loading

0 comments on commit a7a6a08

Please sign in to comment.