Related improvements: When loading the bookmarks assure in any
case that items having the same group are inserted as one single
group.
setText(bookmark.description());
setUrl(bookmark.url());
setDataValue("address", bookmark.address());
setText(bookmark.description());
setUrl(bookmark.url());
setDataValue("address", bookmark.address());
- setGroup(i18nc("@item", "Places"));
} else {
initializeDevice(udi);
}
} else {
initializeDevice(udi);
}
+
+ switch (groupType()) {
+ case PlacesType: setGroup(i18nc("@item", "Places")); break;
+ case RecentlyAccessedType: setGroup(i18nc("@item", "Recently Accessed")); break;
+ case SearchForType: setGroup(i18nc("@item", "Search For")); break;
+ case DevicesType: setGroup(i18nc("@item", "Devices")); break;
+ default: Q_ASSERT(false); break;
+ }
+
setHidden(bookmark.metaDataItem("IsHidden") == QLatin1String("true"));
}
setHidden(bookmark.metaDataItem("IsHidden") == QLatin1String("true"));
}
+PlacesItem::GroupType PlacesItem::groupType() const
+{
+ if (udi().isEmpty()) {
+ const QString protocol = url().protocol();
+ if (protocol == QLatin1String("timeline")) {
+ return RecentlyAccessedType;
+ }
+
+ if (protocol == QLatin1String("search")) {
+ return SearchForType;
+ }
+
+ return PlacesType;
+ }
+
+ return DevicesType;
+}
+
KBookmark PlacesItem::createBookmark(KBookmarkManager* manager,
const QString& text,
const KUrl& url,
KBookmark PlacesItem::createBookmark(KBookmarkManager* manager,
const QString& text,
const KUrl& url,
setIcon(m_device.icon());
setIconOverlays(m_device.emblems());
setUdi(udi);
setIcon(m_device.icon());
setIconOverlays(m_device.emblems());
setUdi(udi);
- setGroup(i18nc("@item", "Devices"));
if (m_access) {
setUrl(m_access->filePath());
if (m_access) {
setUrl(m_access->filePath());
+ enum GroupType
+ {
+ PlacesType,
+ SearchForType,
+ RecentlyAccessedType,
+ DevicesType
+ };
+
explicit PlacesItem(const KBookmark& bookmark, PlacesItem* parent = 0);
explicit PlacesItem(const PlacesItem& item);
virtual ~PlacesItem();
explicit PlacesItem(const KBookmark& bookmark, PlacesItem* parent = 0);
explicit PlacesItem(const PlacesItem& item);
virtual ~PlacesItem();
void setBookmark(const KBookmark& bookmark);
KBookmark bookmark() const;
void setBookmark(const KBookmark& bookmark);
KBookmark bookmark() const;
+ GroupType groupType() const;
+
static KBookmark createBookmark(KBookmarkManager* manager,
const QString& text,
const KUrl& url,
static KBookmark createBookmark(KBookmarkManager* manager,
const QString& text,
const KUrl& url,
const QString& iconName)
{
const KBookmark bookmark = PlacesItem::createBookmark(m_bookmarkManager, text, url, iconName);
const QString& iconName)
{
const KBookmark bookmark = PlacesItem::createBookmark(m_bookmarkManager, text, url, iconName);
- PlacesItem* item = new PlacesItem(bookmark);
- item->setGroup(groupName(url));
- return item;
+ return new PlacesItem(bookmark);
}
PlacesItem* PlacesItemModel::placesItem(int index) const
}
PlacesItem* PlacesItemModel::placesItem(int index) const
// m_hiddenItems.
Q_ASSERT(m_hiddenItems.count() == count());
for (int i = count() - 1; i >= 0; --i) {
// m_hiddenItems.
Q_ASSERT(m_hiddenItems.count() == count());
for (int i = count() - 1; i >= 0; --i) {
- PlacesItem* visibleItem = placesItem(i);
+ const PlacesItem* visibleItem = placesItem(i);
if (visibleItem->isHidden()) {
if (visibleItem->isHidden()) {
- PlacesItem* hiddenItem = new PlacesItem(*visibleItem);
- removeItem(i);
- m_hiddenItems.insert(i, hiddenItem);
-QString PlacesItemModel::groupName(const KUrl &url) const
-{
- const QString protocol = url.protocol();
-
- if (protocol.contains(QLatin1String("search"))) {
- return searchForGroupName();
- }
-
- if (protocol == QLatin1String("timeline")) {
- return recentlyAccessedGroupName();
- }
-
- return placesGroupName();
-}
-
QAction* PlacesItemModel::ejectAction(int index) const
{
const PlacesItem* item = placesItem(index);
QAction* PlacesItemModel::ejectAction(int index) const
{
const PlacesItem* item = placesItem(index);
void PlacesItemModel::removeHiddenItem()
{
void PlacesItemModel::removeHiddenItem()
{
- const PlacesItem* shownItem = placesItem(m_hiddenItemToRemove);
- const int newIndex = hiddenIndex(m_hiddenItemToRemove);
- if (shownItem && newIndex >= 0) {
- PlacesItem* hiddenItem = new PlacesItem(*shownItem);
- removeItem(m_hiddenItemToRemove);
- m_hiddenItems.insert(newIndex, hiddenItem);
- m_saveBookmarksTimer->start();
- }
+ removeHiddenItem(m_hiddenItemToRemove);
m_hiddenItemToRemove = -1;
}
m_hiddenItemToRemove = -1;
}
missingSystemBookmarks.insert(data.url);
}
missingSystemBookmarks.insert(data.url);
}
- // The bookmarks might have a mixed order of "places" and "devices". In
- // Dolphin's places panel the devices should always be appended as last
- // group, so they are collected as separate lists.
+ // The bookmarks might have a mixed order of places, devices and search-groups due
+ // to the compatibility with the KFilePlacesPanel. In Dolphin's places panel the
+ // items should always be collected in one group so the items are collected first
+ // in separate lists before inserting them.
QList<PlacesItem*> placesItems;
QList<PlacesItem*> placesItems;
+ QList<PlacesItem*> recentlyAccessedItems;
+ QList<PlacesItem*> searchForItems;
QList<PlacesItem*> devicesItems;
while (!bookmark.isNull()) {
QList<PlacesItem*> devicesItems;
while (!bookmark.isNull()) {
if (deviceAvailable) {
devicesItems.append(item);
} else {
if (deviceAvailable) {
devicesItems.append(item);
} else {
- placesItems.append(item);
-
if (missingSystemBookmarks.contains(url)) {
missingSystemBookmarks.remove(url);
if (missingSystemBookmarks.contains(url)) {
missingSystemBookmarks.remove(url);
const int index = m_systemBookmarksIndexes.value(url);
item->setText(m_systemBookmarks[index].text);
item->setSystemItem(true);
const int index = m_systemBookmarksIndexes.value(url);
item->setText(m_systemBookmarks[index].text);
item->setSystemItem(true);
- item->setGroup(m_systemBookmarks[index].group);
+ }
+
+ switch (item->groupType()) {
+ case PlacesItem::PlacesType: placesItems.append(item); break;
+ case PlacesItem::RecentlyAccessedType: recentlyAccessedItems.append(item); break;
+ case PlacesItem::SearchForType: searchForItems.append(item); break;
+ case PlacesItem::DevicesType:
+ default: Q_ASSERT(false); break;
bookmark = root.next(bookmark);
}
bookmark = root.next(bookmark);
}
- addItems(placesItems);
-
if (!missingSystemBookmarks.isEmpty()) {
// The current bookmarks don't contain all system-bookmarks. Add the missing
// bookmarks.
if (!missingSystemBookmarks.isEmpty()) {
// The current bookmarks don't contain all system-bookmarks. Add the missing
// bookmarks.
PlacesItem* item = new PlacesItem(bookmark);
item->setSystemItem(true);
PlacesItem* item = new PlacesItem(bookmark);
item->setSystemItem(true);
- item->setGroup(data.group);
- appendItem(item);
+
+ switch (item->groupType()) {
+ case PlacesItem::PlacesType: placesItems.append(item); break;
+ case PlacesItem::RecentlyAccessedType: recentlyAccessedItems.append(item); break;
+ case PlacesItem::SearchForType: searchForItems.append(item); break;
+ case PlacesItem::DevicesType:
+ default: Q_ASSERT(false); break;
+ }
+ addItems(placesItems);
+ addItems(recentlyAccessedItems);
+ addItems(searchForItems);
+
// Create items for devices that have not stored as bookmark yet
foreach (const QString& udi, devices) {
const KBookmark bookmark = PlacesItem::createDeviceBookmark(m_bookmarkManager, udi);
// Create items for devices that have not stored as bookmark yet
foreach (const QString& udi, devices) {
const KBookmark bookmark = PlacesItem::createDeviceBookmark(m_bookmarkManager, udi);
Q_ASSERT(m_systemBookmarks.isEmpty());
Q_ASSERT(m_systemBookmarksIndexes.isEmpty());
Q_ASSERT(m_systemBookmarks.isEmpty());
Q_ASSERT(m_systemBookmarksIndexes.isEmpty());
- 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_systemBookmarks.append(SystemBookmarkData(KUrl(KUser().homeDir()),
"user-home",
const QString timeLineIcon = "package_utility_time"; // TODO: Ask the Oxygen team to create
// a custom icon for the timeline-protocol
m_systemBookmarks.append(SystemBookmarkData(KUrl(KUser().homeDir()),
"user-home",
- i18nc("@item", "Home"),
- placesGroup));
+ i18nc("@item", "Home")));
m_systemBookmarks.append(SystemBookmarkData(KUrl("remote:/"),
"network-workgroup",
m_systemBookmarks.append(SystemBookmarkData(KUrl("remote:/"),
"network-workgroup",
- i18nc("@item", "Network"),
- placesGroup));
+ i18nc("@item", "Network")));
m_systemBookmarks.append(SystemBookmarkData(KUrl("/"),
"folder-red",
m_systemBookmarks.append(SystemBookmarkData(KUrl("/"),
"folder-red",
- i18nc("@item", "Root"),
- placesGroup));
+ i18nc("@item", "Root")));
m_systemBookmarks.append(SystemBookmarkData(KUrl("trash:/"),
"user-trash",
m_systemBookmarks.append(SystemBookmarkData(KUrl("trash:/"),
"user-trash",
- i18nc("@item", "Trash"),
- placesGroup));
+ i18nc("@item", "Trash")));
if (m_nepomukRunning) {
m_systemBookmarks.append(SystemBookmarkData(KUrl("timeline:/today"),
timeLineIcon,
if (m_nepomukRunning) {
m_systemBookmarks.append(SystemBookmarkData(KUrl("timeline:/today"),
timeLineIcon,
- i18nc("@item Recently Accessed", "Today"),
- recentlyAccessedGroup));
+ i18nc("@item Recently Accessed", "Today")));
m_systemBookmarks.append(SystemBookmarkData(KUrl("timeline:/yesterday"),
timeLineIcon,
m_systemBookmarks.append(SystemBookmarkData(KUrl("timeline:/yesterday"),
timeLineIcon,
- i18nc("@item Recently Accessed", "Yesterday"),
- recentlyAccessedGroup));
+ i18nc("@item Recently Accessed", "Yesterday")));
m_systemBookmarks.append(SystemBookmarkData(KUrl("timeline:/thismonth"),
timeLineIcon,
m_systemBookmarks.append(SystemBookmarkData(KUrl("timeline:/thismonth"),
timeLineIcon,
- i18nc("@item Recently Accessed", "This Month"),
- recentlyAccessedGroup));
+ i18nc("@item Recently Accessed", "This Month")));
m_systemBookmarks.append(SystemBookmarkData(KUrl("timeline:/lastmonth"),
timeLineIcon,
m_systemBookmarks.append(SystemBookmarkData(KUrl("timeline:/lastmonth"),
timeLineIcon,
- i18nc("@item Recently Accessed", "Last Month"),
- recentlyAccessedGroup));
+ i18nc("@item Recently Accessed", "Last Month")));
m_systemBookmarks.append(SystemBookmarkData(KUrl("search:/documents"),
"folder-txt",
m_systemBookmarks.append(SystemBookmarkData(KUrl("search:/documents"),
"folder-txt",
- i18nc("@item Commonly Accessed", "Documents"),
- searchForGroup));
+ i18nc("@item Commonly Accessed", "Documents")));
m_systemBookmarks.append(SystemBookmarkData(KUrl("search:/images"),
"folder-image",
m_systemBookmarks.append(SystemBookmarkData(KUrl("search:/images"),
"folder-image",
- i18nc("@item Commonly Accessed", "Images"),
- searchForGroup));
+ i18nc("@item Commonly Accessed", "Images")));
m_systemBookmarks.append(SystemBookmarkData(KUrl("search:/audio"),
"folder-sound",
m_systemBookmarks.append(SystemBookmarkData(KUrl("search:/audio"),
"folder-sound",
- i18nc("@item Commonly Accessed", "Audio Files"),
- searchForGroup));
+ i18nc("@item Commonly Accessed", "Audio Files")));
m_systemBookmarks.append(SystemBookmarkData(KUrl("search:/videos"),
"folder-video",
m_systemBookmarks.append(SystemBookmarkData(KUrl("search:/videos"),
"folder-video",
- i18nc("@item Commonly Accessed", "Videos"),
- searchForGroup));
+ i18nc("@item Commonly Accessed", "Videos")));
}
for (int i = 0; i < m_systemBookmarks.count(); ++i) {
}
for (int i = 0; i < m_systemBookmarks.count(); ++i) {
return hiddenIndex >= m_hiddenItems.count() ? -1 : hiddenIndex;
}
return hiddenIndex >= m_hiddenItems.count() ? -1 : hiddenIndex;
}
-QString PlacesItemModel::placesGroupName()
+void PlacesItemModel::removeHiddenItem(int index)
- return i18nc("@item", "Places");
-}
+ const PlacesItem* shownItem = placesItem(index);
+ const int newIndex = hiddenIndex(index);
+ if (shownItem && newIndex >= 0) {
+ PlacesItem* hiddenItem = new PlacesItem(*shownItem);
+ const KBookmark hiddenBookmark = hiddenItem->bookmark();
-QString PlacesItemModel::recentlyAccessedGroupName()
-{
- return i18nc("@item", "Recently Accessed");
-}
+ const PlacesItem* previousItem = placesItem(index - 1);
+ KBookmark previousBookmark;
+ if (previousItem) {
+ previousBookmark = previousItem->bookmark();
+ }
-QString PlacesItemModel::searchForGroupName()
-{
- return i18nc("@item", "Search For");
+ removeItem(index);
+
+ // removeItem() also removed the bookmark from m_bookmarkManager in
+ // PlacesItemModel::onItemRemoved(). However for hidden items the
+ // bookmark should still be remembered, so readd it again:
+ m_bookmarkManager->root().addBookmark(hiddenBookmark);
+ m_bookmarkManager->root().moveBookmark(hiddenBookmark, previousBookmark);
+
+ m_hiddenItems.insert(newIndex, hiddenItem);
+ m_saveBookmarksTimer->start();
+ }
}
#ifdef PLACESITEMMODEL_DEBUG
}
#ifdef PLACESITEMMODEL_DEBUG
*/
int closestItem(const KUrl& url) const;
*/
int closestItem(const KUrl& url) const;
- /**
- * @return Name of the group where the item with the URL
- * \a URL belongs to.
- */
- QString groupName(const KUrl& url) const;
-
QAction* ejectAction(int index) const;
QAction* teardownAction(int index) const;
QAction* ejectAction(int index) const;
QAction* teardownAction(int index) const;
*/
int hiddenIndex(int index) const;
*/
int hiddenIndex(int index) const;
- static QString placesGroupName();
- static QString recentlyAccessedGroupName();
- static QString searchForGroupName();
+ void removeHiddenItem(int index);
#ifdef PLACESITEMMODEL_DEBUG
void showModelState();
#ifdef PLACESITEMMODEL_DEBUG
void showModelState();
struct SystemBookmarkData
{
SystemBookmarkData(const KUrl& url,
struct SystemBookmarkData
{
SystemBookmarkData(const KUrl& url,
- const QString& icon,
- const QString& text,
- const QString& group) :
- url(url), icon(icon), text(text), group(group) {}
+ const QString& icon,
+ const QString& text) :
+ url(url), icon(icon), text(text) {}
KUrl url;
QString icon;
QString text;
KUrl url;
QString icon;
QString text;
};
QList<SystemBookmarkData> m_systemBookmarks;
};
QList<SystemBookmarkData> m_systemBookmarks;