// #define KFILEITEMMODEL_DEBUG
KFileItemModel::KFileItemModel(QObject *parent)
- : KItemModelBase("text", "text", parent)
+ : KItemModelBase("text", "none", parent)
, m_dirLister(nullptr)
, m_sortDirsFirst(true)
, m_sortHiddenLast(false)
QElapsedTimer timer;
timer.start();
#endif
- switch (typeForRole(groupRole())) {
+ QByteArray role = groupRole();
+ if (typeForRole(role) == NoRole) {
+ // Handle extra grouping information
+ if (m_groupExtraInfo == "followSort") {
+ role = sortRole();
+ }
+ }
+ switch (typeForRole(role)) {
case NoRole:
m_groups.clear();
break;
m_groups = ratingRoleGroups();
break;
default:
- m_groups = genericStringRoleGroups(groupRole());
+ m_groups = genericStringRoleGroups(role);
break;
}
{
Q_UNUSED(previous)
m_sortRole = typeForRole(current);
+ if (m_sortRole == NoRole) {
+ // Requested role not in list of roles. This could
+ // be used for indicating non-trivial sorting behavior
+ m_sortExtraInfo = current;
+ } else {
+ m_sortExtraInfo.clear();
+ }
if (!m_requestRole[m_sortRole]) {
QSet<QByteArray> newRoles = m_roles;
{
Q_UNUSED(previous)
m_groupRole = typeForRole(current);
+ if (m_groupRole == NoRole) {
+ // Requested role not in list of roles. This could
+ // be used for indicating non-trivial grouping behavior
+ m_groupExtraInfo = current;
+ } else {
+ m_groupExtraInfo.clear();
+ }
- if (!m_requestRole[m_sortRole]) {
+ if (!m_requestRole[m_groupRole]) {
QSet<QByteArray> newRoles = m_roles;
newRoles << current;
setRoles(newRoles);
int groupA, groupB;
switch (m_groupRole) {
case NoRole:
- break;
+ // Non-trivial grouping behavior might be handled there in the future.
+ return 0;
case NameRole:
groupA = nameRoleGroup(a, false).comparable;
groupB = nameRoleGroup(b, false).comparable;