From cb65db90c8f0cfcb72835ce57a9839bbc80ce44c Mon Sep 17 00:00:00 2001 From: "craig.p.drummond" Date: Tue, 28 Jan 2014 20:23:04 +0000 Subject: [PATCH] Playlists model ALWAYS needs to return a columnCount of 6. In TreeView, set a flag 'forceSingleColumn' when model is set, TreeView will hide all bar 1st column. This is better than resetting the proxy each time - as this messes up the column stretching. BUG: 397 --- gui/playlistspage.cpp | 9 +-------- models/playlistsmodel.h | 2 +- widgets/groupedview.cpp | 7 +------ widgets/treeview.cpp | 12 ++++++++++++ widgets/treeview.h | 2 ++ 5 files changed, 17 insertions(+), 15 deletions(-) diff --git a/gui/playlistspage.cpp b/gui/playlistspage.cpp index 307ff7243..c7ac34ee1 100644 --- a/gui/playlistspage.cpp +++ b/gui/playlistspage.cpp @@ -162,7 +162,7 @@ PlaylistsPage::PlaylistsPage(QWidget *p) connect(PlaylistsModel::self(), SIGNAL(updateGenres(const QSet &)), genreCombo, SLOT(update(const QSet &))); view->allowGroupedView(); - view->allowTableView(new PlaylistTableView(this)); + view->allowTableView(new PlaylistTableView(view)); view->addAction(StdActions::self()->addToPlayQueueAction); view->addAction(StdActions::self()->replacePlayQueueAction); view->addAction(StdActions::self()->addWithPriorityAction); @@ -273,15 +273,8 @@ void PlaylistsPage::addSelectionToPlaylist(const QString &name, bool replace, qu void PlaylistsPage::setView(int mode) { //bool diff=view->viewMode()!=mode; - bool needToReset=ItemView::Mode_Table==view->viewMode() || ItemView::Mode_Table==mode; - if (needToReset) { - proxy.setSourceModel(0); - } PlaylistsModel::self()->setMultiColumn(ItemView::Mode_Table==mode); view->setMode((ItemView::Mode)mode); - if (needToReset) { - proxy.setSourceModel(PlaylistsModel::self()); - } //if (diff) { // clear(); // refresh(); diff --git a/models/playlistsmodel.h b/models/playlistsmodel.h index b6c593a1d..03c7fadde 100644 --- a/models/playlistsmodel.h +++ b/models/playlistsmodel.h @@ -97,7 +97,7 @@ public: PlaylistsModel(QObject *parent = 0); ~PlaylistsModel(); int rowCount(const QModelIndex &parent = QModelIndex()) const; - int columnCount(const QModelIndex &parent = QModelIndex()) const { Q_UNUSED(parent); return multiCol ? COL_COUNT : 1; } + int columnCount(const QModelIndex &parent = QModelIndex()) const { Q_UNUSED(parent); return COL_COUNT; } bool canFetchMore(const QModelIndex &index) const; void fetchMore(const QModelIndex &index); bool hasChildren(const QModelIndex &parent = QModelIndex()) const; diff --git a/widgets/groupedview.cpp b/widgets/groupedview.cpp index 7c00ba6f0..20d563b60 100644 --- a/widgets/groupedview.cpp +++ b/widgets/groupedview.cpp @@ -484,14 +484,9 @@ GroupedView::~GroupedView() void GroupedView::setModel(QAbstractItemModel *model) { - QTreeView::setModel(model); + TreeView::setModel(model); if (model) { connect(Covers::self(), SIGNAL(coverRetrieved(const Song &)), this, SLOT(coverRetrieved(const Song &))); - int columnCount=model->columnCount(); - QHeaderView *hdr=header(); - for (int i=1; isetSectionHidden(i, true); - } } else { disconnect(Covers::self(), SIGNAL(coverRetrieved(const Song &)), this, SLOT(coverRetrieved(const Song &))); } diff --git a/widgets/treeview.cpp b/widgets/treeview.cpp index 3e38f7bf2..812b80af3 100644 --- a/widgets/treeview.cpp +++ b/widgets/treeview.cpp @@ -90,6 +90,7 @@ bool TreeView::getForceSingleClick() TreeView::TreeView(QWidget *parent, bool menuAlwaysAllowed) : QTreeView(parent) + , forceSingleColumn(false) , alwaysAllowMenu(menuAlwaysAllowed) { setDragEnabled(true); @@ -121,6 +122,7 @@ void TreeView::setPageDefaults() setDragDropMode(QAbstractItemView::DragOnly); setSortingEnabled(true); setAnimated(true); + forceSingleColumn=true; } void TreeView::setExpandOnClick() @@ -357,6 +359,16 @@ void TreeView::setModel(QAbstractItemModel *m) QAbstractItemModel *old=model(); QTreeView::setModel(m); + if (forceSingleColumn && m) { + int columnCount=m->columnCount(); + if (columnCount>1) { + QHeaderView *hdr=header(); + for (int i=1; isetSectionHidden(i, true); + } + } + } + if (old) { disconnect(old, SIGNAL(layoutChanged()), this, SLOT(correctSelection())); } diff --git a/widgets/treeview.h b/widgets/treeview.h index 13e203bdb..d52340331 100644 --- a/widgets/treeview.h +++ b/widgets/treeview.h @@ -62,6 +62,7 @@ public: void setUseSimpleDelegate(); void setBackgroundImage(const QIcon &icon); void paintEvent(QPaintEvent *e); + void setForceSingleColumn(bool f) { forceSingleColumn=f; } private Q_SLOTS: void correctSelection(); @@ -73,6 +74,7 @@ Q_SIGNALS: void itemActivated(const QModelIndex &index); // Only emitted if view is set to single-click private: + bool forceSingleColumn; bool alwaysAllowMenu; QPixmap bgnd; };