m_roles = roles;
if (count() > 0) {
- const bool supportedExpanding = m_requestRole[IsExpandedRole] && m_requestRole[ExpansionLevelRole];
- const bool willSupportExpanding = roles.contains("isExpanded") && roles.contains("expansionLevel");
+ const bool supportedExpanding = m_requestRole[ExpansionLevelRole];
+ const bool willSupportExpanding = roles.contains("expansionLevel");
if (supportedExpanding && !willSupportExpanding) {
// No expanding is supported anymore. Take care to delete all items that have an expansion level
// that is not 0 (and hence are part of an expanded item).
bool KFileItemModel::setExpanded(int index, bool expanded)
{
- if (isExpanded(index) == expanded || index < 0 || index >= count()) {
+ if (!isExpandable(index) || isExpanded(index) == expanded) {
return false;
}
bool KFileItemModel::isExpandable(int index) const
{
if (index >= 0 && index < count()) {
- return m_itemData.at(index)->item.isDir();
+ return m_itemData.at(index)->values.value("isExpandable").toBool();
}
return false;
}
void KFileItemModel::setExpanded(const QSet<KUrl>& urls)
{
-
const KDirLister* dirLister = m_dirLister.data();
if (!dirLister) {
return;
rolesHash.insert("rating", RatingRole);
rolesHash.insert("isDir", IsDirRole);
rolesHash.insert("isExpanded", IsExpandedRole);
+ rolesHash.insert("isExpandable", IsExpandableRole);
rolesHash.insert("expansionLevel", ExpansionLevelRole);
}
return rolesHash.value(role, NoRole);
data.insert("isExpanded", false);
}
+ if (m_requestRole[IsExpandableRole]) {
+ data.insert("isExpandable", item.isDir() && item.url() == item.targetUrl());
+ }
+
if (m_requestRole[ExpansionLevelRole]) {
if (m_rootExpansionLevel == UninitializedRootExpansionLevel && m_dirLister.data()) {
const KUrl rootUrl = m_dirLister.data()->url();