Make play list menu order consistent with view order

This commit is contained in:
craig
2012-03-23 20:35:34 +00:00
committed by craig
parent 91b8379525
commit 2c8f3d4d61
4 changed files with 13 additions and 6 deletions

View File

@@ -28,6 +28,7 @@
#include <QtCore/QMimeData>
#include <QtGui/QMenu>
#include "playlistsmodel.h"
#include "playlistsproxymodel.h"
#include "itemview.h"
#include "groupedview.h"
#ifdef ENABLE_KDE_SUPPORT
@@ -729,7 +730,7 @@ void PlaylistsModel::updateItemMenu()
foreach (const PlaylistItem *p, items) {
names << p->name;
}
qSort(names);
qSort(names.begin(), names.end(), PlaylistsProxyModel::compareNames);
foreach (const QString &n, names) {
itemMenu->addAction(n, this, SLOT(emitAddToExisting()));
}

View File

@@ -76,13 +76,18 @@ bool PlaylistsProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sou
return false;
}
bool PlaylistsProxyModel::compareNames(const QString &l, const QString &r)
{
return compareStrings(l, r)<0;
}
bool PlaylistsProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const
{
PlaylistsModel::Item *l=static_cast<PlaylistsModel::Item *>(left.internalPointer());
PlaylistsModel::Item *r=static_cast<PlaylistsModel::Item *>(right.internalPointer());
if (l->isPlaylist() && r->isPlaylist()) {
return compareStrings(static_cast<PlaylistsModel::PlaylistItem *>(l)->name, static_cast<PlaylistsModel::PlaylistItem *>(r)->name)<0;
return compareNames(static_cast<PlaylistsModel::PlaylistItem *>(l)->name, static_cast<PlaylistsModel::PlaylistItem *>(r)->name);
} else if(!l->isPlaylist() && !r->isPlaylist()) {
return left.row()<right.row();
}

View File

@@ -35,6 +35,7 @@ class PlaylistsProxyModel : public ProxyModel
public:
PlaylistsProxyModel(QObject *parent = 0);
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const;
static bool compareNames(const QString &l, const QString &r);
bool lessThan(const QModelIndex &left, const QModelIndex &right) const;
};

View File

@@ -49,11 +49,11 @@ public:
}
static int compareStrings(const QString &a, const QString &b) {
#ifdef ENABLE_KDE_SUPPORT
return KStringHandler::naturalCompare(a, b, Qt::CaseInsensitive) < 0;
#else
// #ifdef ENABLE_KDE_SUPPORT
// return KStringHandler::naturalCompare(a, b, Qt::CaseInsensitive) < 0;
// #else
return a.localeAwareCompare(b);
#endif
// #endif
}
protected: