diff options
Diffstat (limited to 'src/panels/places/placesitemmodel.cpp')
| -rw-r--r-- | src/panels/places/placesitemmodel.cpp | 192 |
1 files changed, 118 insertions, 74 deletions
diff --git a/src/panels/places/placesitemmodel.cpp b/src/panels/places/placesitemmodel.cpp index f3162e7b2..ae6163e03 100644 --- a/src/panels/places/placesitemmodel.cpp +++ b/src/panels/places/placesitemmodel.cpp @@ -49,8 +49,8 @@ PlacesItemModel::PlacesItemModel(QObject* parent) : m_nepomukRunning(false), m_availableDevices(), m_bookmarkManager(0), - m_defaultBookmarks(), - m_defaultBookmarksIndexes() + m_systemBookmarks(), + m_systemBookmarksIndexes() { #ifdef HAVE_NEPOMUK m_nepomukRunning = (Nepomuk::ResourceManager::instance()->initialized()); @@ -58,7 +58,7 @@ PlacesItemModel::PlacesItemModel(QObject* parent) : const QString file = KStandardDirs::locateLocal("data", "kfileplaces/bookmarks.xml"); m_bookmarkManager = KBookmarkManager::managerForFile(file, "kfilePlaces"); - createDefaultBookmarks(); + createSystemBookmarks(); loadBookmarks(); } @@ -71,6 +71,49 @@ int PlacesItemModel::hiddenCount() const return 0; } +bool PlacesItemModel::isSystemItem(int index) const +{ + if (index >= 0 && index < count()) { + const KUrl url = data(index).value("url").value<KUrl>(); + return m_systemBookmarksIndexes.contains(url); + } + return false; +} + +int PlacesItemModel::closestItem(const KUrl& url) const +{ + int foundIndex = -1; + int maxLength = 0; + + for (int i = 0; i < count(); ++i) { + const KUrl itemUrl = data(i).value("url").value<KUrl>(); + if (itemUrl.isParentOf(url)) { + const int length = itemUrl.prettyUrl().length(); + if (length > maxLength) { + foundIndex = i; + maxLength = length; + } + } + } + + return foundIndex; +} + +QString PlacesItemModel::placesGroupName() const +{ + return i18nc("@item", "Places"); +} + +QString PlacesItemModel::recentlyAccessedGroupName() const +{ + return i18nc("@item", "Recently Accessed"); +} + +QString PlacesItemModel::searchForGroupName() const +{ + return i18nc("@item", "Search For"); +} + QAction* PlacesItemModel::ejectAction(int index) const { Q_UNUSED(index); @@ -89,9 +132,9 @@ void PlacesItemModel::loadBookmarks() KBookmark bookmark = root.first(); QSet<QString> devices = m_availableDevices; - QSet<KUrl> missingDefaultBookmarks; - foreach (const DefaultBookmarkData& data, m_defaultBookmarks) { - missingDefaultBookmarks.insert(data.url); + QSet<KUrl> missingSystemBookmarks; + foreach (const SystemBookmarkData& data, m_systemBookmarks) { + missingSystemBookmarks.insert(data.url); } while (!bookmark.isNull()) { @@ -109,16 +152,16 @@ void PlacesItemModel::loadBookmarks() item->setDataValue("address", bookmark.address()); item->setDataValue("url", url); - if (missingDefaultBookmarks.contains(url)) { - missingDefaultBookmarks.remove(url); - // Apply the translated text to the default bookmarks, otherwise an outdated + if (missingSystemBookmarks.contains(url)) { + missingSystemBookmarks.remove(url); + // Apply the translated text to the system bookmarks, otherwise an outdated // translation might be shown. - const int index = m_defaultBookmarksIndexes.value(url); - item->setText(m_defaultBookmarks[index].text); + const int index = m_systemBookmarksIndexes.value(url); + item->setText(m_systemBookmarks[index].text); - // The default bookmarks don't contain "real" queries stored as URLs, so + // The system bookmarks don't contain "real" queries stored as URLs, so // they must be translated first. - item->setDataValue("url", translatedDefaultBookmarkUrl(url)); + item->setDataValue("url", translatedSystemBookmarkUrl(url)); } else { item->setText(bookmark.text()); } @@ -136,13 +179,13 @@ void PlacesItemModel::loadBookmarks() bookmark = root.next(bookmark); } - if (!missingDefaultBookmarks.isEmpty()) { - foreach (const DefaultBookmarkData& data, m_defaultBookmarks) { - if (missingDefaultBookmarks.contains(data.url)) { + if (!missingSystemBookmarks.isEmpty()) { + foreach (const SystemBookmarkData& data, m_systemBookmarks) { + if (missingSystemBookmarks.contains(data.url)) { KStandardItem* item = new KStandardItem(); item->setIcon(KIcon(data.icon)); item->setText(data.text); - item->setDataValue("url", translatedDefaultBookmarkUrl(data.url)); + item->setDataValue("url", translatedSystemBookmarkUrl(data.url)); item->setGroup(data.group); appendItem(item); } @@ -150,76 +193,77 @@ void PlacesItemModel::loadBookmarks() } } -void PlacesItemModel::createDefaultBookmarks() +void PlacesItemModel::createSystemBookmarks() { - Q_ASSERT(m_defaultBookmarks.isEmpty()); - Q_ASSERT(m_defaultBookmarksIndexes.isEmpty()); + Q_ASSERT(m_systemBookmarks.isEmpty()); + Q_ASSERT(m_systemBookmarksIndexes.isEmpty()); - const QString placesGroup = i18nc("@item", "Places"); - const QString recentlyAccessedGroup = i18nc("@item", "Recently Accessed"); - const QString searchForGroup = i18nc("@item", "Search For"); + const QString placesGroup = placesGroupName(); + const QString recentlyAccessedGroup = recentlyAccessedGroupName(); + const QString searchForGroup = searchForGroupName(); const QString timeLineIcon = "package_utility_time"; // TODO: Ask the Oxygen team to create // a custom icon for the timeline-protocol - m_defaultBookmarks.append(DefaultBookmarkData(KUrl(KUser().homeDir()), - "user-home", - i18nc("@item", "Home"), - placesGroup)); - m_defaultBookmarks.append(DefaultBookmarkData(KUrl("remote:/"), - "network-workgroup", - i18nc("@item", "Network"), - placesGroup)); - m_defaultBookmarks.append(DefaultBookmarkData(KUrl("/"), - "folder-red", - i18nc("@item", "Root"), - placesGroup)); - m_defaultBookmarks.append(DefaultBookmarkData(KUrl("trash:/"), - "user-trash", - i18nc("@item", "Trash"), - placesGroup)); + m_systemBookmarks.append(SystemBookmarkData(KUrl(KUser().homeDir()), + "user-home", + i18nc("@item", "Home"), + placesGroup)); + m_systemBookmarks.append(SystemBookmarkData(KUrl("remote:/"), + "network-workgroup", + i18nc("@item", "Network"), + placesGroup)); + m_systemBookmarks.append(SystemBookmarkData(KUrl("/"), + "folder-red", + i18nc("@item", "Root"), + placesGroup)); + m_systemBookmarks.append(SystemBookmarkData(KUrl("trash:/"), + "user-trash", + i18nc("@item", "Trash"), + placesGroup)); if (m_nepomukRunning) { - m_defaultBookmarks.append(DefaultBookmarkData(KUrl("timeline:/today"), - timeLineIcon, - i18nc("@item Recently Accessed", "Today"), - recentlyAccessedGroup)); - m_defaultBookmarks.append(DefaultBookmarkData(KUrl("timeline:/yesterday"), - timeLineIcon, - i18nc("@item Recently Accessed", "Yesterday"), - recentlyAccessedGroup)); - m_defaultBookmarks.append(DefaultBookmarkData(KUrl("timeline:/thismonth"), - timeLineIcon, - i18nc("@item Recently Accessed", "This Month"), - recentlyAccessedGroup)); - m_defaultBookmarks.append(DefaultBookmarkData(KUrl("timeline:/lastmonth"), - timeLineIcon, - i18nc("@item Recently Accessed", "Last Month"), - recentlyAccessedGroup)); - m_defaultBookmarks.append(DefaultBookmarkData(KUrl("search:/documents"), - "folder-txt", - i18nc("@item Commonly Accessed", "Documents"), - searchForGroup)); - m_defaultBookmarks.append(DefaultBookmarkData(KUrl("search:/images"), - "folder-image", - i18nc("@item Commonly Accessed", "Images"), - searchForGroup)); - m_defaultBookmarks.append(DefaultBookmarkData(KUrl("search:/audio"), - "folder-sound", - i18nc("@item Commonly Accessed", "Audio"), - searchForGroup)); - m_defaultBookmarks.append(DefaultBookmarkData(KUrl("search:/videos"), - "folder-video", - i18nc("@item Commonly Accessed", "Videos"), - searchForGroup)); + m_systemBookmarks.append(SystemBookmarkData(KUrl("timeline:/today"), + timeLineIcon, + i18nc("@item Recently Accessed", "Today"), + recentlyAccessedGroup)); + m_systemBookmarks.append(SystemBookmarkData(KUrl("timeline:/yesterday"), + timeLineIcon, + i18nc("@item Recently Accessed", "Yesterday"), + recentlyAccessedGroup)); + m_systemBookmarks.append(SystemBookmarkData(KUrl("timeline:/thismonth"), + timeLineIcon, + i18nc("@item Recently Accessed", "This Month"), + recentlyAccessedGroup)); + m_systemBookmarks.append(SystemBookmarkData(KUrl("timeline:/lastmonth"), + timeLineIcon, + i18nc("@item Recently Accessed", "Last Month"), + recentlyAccessedGroup)); + m_systemBookmarks.append(SystemBookmarkData(KUrl("search:/documents"), + "folder-txt", + i18nc("@item Commonly Accessed", "Documents"), + searchForGroup)); + m_systemBookmarks.append(SystemBookmarkData(KUrl("search:/images"), + "folder-image", + i18nc("@item Commonly Accessed", "Images"), + searchForGroup)); + m_systemBookmarks.append(SystemBookmarkData(KUrl("search:/audio"), + "folder-sound", + i18nc("@item Commonly Accessed", "Audio"), + searchForGroup)); + m_systemBookmarks.append(SystemBookmarkData(KUrl("search:/videos"), + "folder-video", + i18nc("@item Commonly Accessed", "Videos"), + searchForGroup)); } - for (int i = 0; i < m_defaultBookmarks.count(); ++i) { - m_defaultBookmarksIndexes.insert(m_defaultBookmarks[i].url, i); + for (int i = 0; i < m_systemBookmarks.count(); ++i) { + const KUrl url = translatedSystemBookmarkUrl(m_systemBookmarks[i].url); + m_systemBookmarksIndexes.insert(url, i); } } -KUrl PlacesItemModel::translatedDefaultBookmarkUrl(const KUrl& url) const +KUrl PlacesItemModel::translatedSystemBookmarkUrl(const KUrl& url) const { KUrl translatedUrl = url; if (url.protocol() == QLatin1String("timeline")) { |
