From 12215d6f0f7768fc943347a349d9817844e0528a Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Sat, 2 Jun 2012 15:02:34 +0200 Subject: [PATCH] Use PlacesItemModel instead of KFilePlacesModel This allows inserting items to the corresponding group. --- src/dolphincontextmenu.cpp | 24 ++++++++----- src/dolphinmainwindow.cpp | 1 - .../information/informationpanelcontent.cpp | 18 +++++----- .../information/informationpanelcontent.h | 4 +-- src/panels/places/placesitem.cpp | 16 +++++++-- src/panels/places/placesitemmodel.cpp | 34 +++++++++++++++---- src/panels/places/placesitemmodel.h | 11 +++++- src/panels/places/placespanel.cpp | 20 +---------- 8 files changed, 80 insertions(+), 48 deletions(-) diff --git a/src/dolphincontextmenu.cpp b/src/dolphincontextmenu.cpp index ab91a9ba6..539c28035 100644 --- a/src/dolphincontextmenu.cpp +++ b/src/dolphincontextmenu.cpp @@ -31,7 +31,6 @@ #include #include #include -#include #include #include #include @@ -50,6 +49,9 @@ #include #include +#include +#include + #include #include #include @@ -292,8 +294,10 @@ void DolphinContextMenu::openItemContextMenu() if (activatedAction == addToPlacesAction) { const KUrl selectedUrl(m_fileInfo.url()); if (selectedUrl.isValid()) { - KFilePlacesModel model; - model.addPlace(placesName(selectedUrl), selectedUrl); + PlacesItemModel model; + PlacesItem* item = model.createPlacesItem(placesName(selectedUrl), + selectedUrl); + model.appendItemToGroup(item); } } else if (activatedAction == openParentInNewWindowAction) { m_command = OpenParentFolderInNewWindow; @@ -353,8 +357,9 @@ void DolphinContextMenu::openViewportContextMenu() if (addToPlacesAction && (action == addToPlacesAction)) { const KUrl url = m_mainWindow->activeViewContainer()->url(); if (url.isValid()) { - KFilePlacesModel model; - model.addPlace(placesName(url), url); + PlacesItemModel model; + PlacesItem* item = model.createPlacesItem(placesName(url), url); + model.appendItemToGroup(item); } } } @@ -405,15 +410,16 @@ QString DolphinContextMenu::placesName(const KUrl& url) const bool DolphinContextMenu::placeExists(const KUrl& url) const { - KFilePlacesModel model; + PlacesItemModel model; - const int count = model.rowCount(); + const int count = model.count(); for (int i = 0; i < count; ++i) { - const QModelIndex index = model.index(i, 0); - if (url.equals(model.url(index), KUrl::CompareWithoutTrailingSlash)) { + const KUrl placeUrl = model.placesItem(i)->url(); + if (placeUrl.equals(url, KUrl::CompareWithoutTrailingSlash)) { return true; } } + return false; } diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index df1954d07..1ce51935f 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -51,7 +51,6 @@ #include #include #include -#include #include #include #include diff --git a/src/panels/information/informationpanelcontent.cpp b/src/panels/information/informationpanelcontent.cpp index c535d3d6a..c03a5a4e2 100644 --- a/src/panels/information/informationpanelcontent.cpp +++ b/src/panels/information/informationpanelcontent.cpp @@ -22,7 +22,6 @@ #include #include #include -#include #include #include #include @@ -33,6 +32,9 @@ #include #include +#include +#include + #include #include #include @@ -64,7 +66,7 @@ InformationPanelContent::InformationPanelContent(QWidget* parent) : m_nameLabel(0), m_metaDataWidget(0), m_metaDataArea(0), - m_placesModel(0) + m_placesItemModel(0) { parent->installEventFilter(this); @@ -137,7 +139,7 @@ InformationPanelContent::InformationPanelContent(QWidget* parent) : layout->addWidget(new KSeparator()); layout->addWidget(m_metaDataArea); - m_placesModel = new KFilePlacesModel(this); + m_placesItemModel = new PlacesItemModel(this); } InformationPanelContent::~InformationPanelContent() @@ -348,12 +350,12 @@ void InformationPanelContent::refreshMetaData() bool InformationPanelContent::applyPlace(const KUrl& url) { - const int count = m_placesModel->rowCount(); + const int count = m_placesItemModel->count(); for (int i = 0; i < count; ++i) { - QModelIndex index = m_placesModel->index(i, 0); - if (url.equals(m_placesModel->url(index), KUrl::CompareWithoutTrailingSlash)) { - setNameLabelText(m_placesModel->text(index)); - m_preview->setPixmap(m_placesModel->icon(index).pixmap(128, 128)); + const PlacesItem* item = m_placesItemModel->placesItem(i); + if (item->url().equals(url, KUrl::CompareWithoutTrailingSlash)) { + setNameLabelText(item->text()); + m_preview->setPixmap(KIcon(item->icon()).pixmap(128, 128)); return true; } } diff --git a/src/panels/information/informationpanelcontent.h b/src/panels/information/informationpanelcontent.h index 234060749..c0412e567 100644 --- a/src/panels/information/informationpanelcontent.h +++ b/src/panels/information/informationpanelcontent.h @@ -27,9 +27,9 @@ class KFileItemList; class KFileMetaDataWidget; -class KFilePlacesModel; class PhononWidget; class PixmapViewer; +class PlacesItemModel; class QPixmap; class QString; class QLabel; @@ -136,7 +136,7 @@ private: KFileMetaDataWidget* m_metaDataWidget; QScrollArea* m_metaDataArea; - KFilePlacesModel* m_placesModel; + PlacesItemModel* m_placesItemModel; }; #endif // INFORMATIONPANELCONTENT_H diff --git a/src/panels/places/placesitem.cpp b/src/panels/places/placesitem.cpp index 7a5daff8e..191f8b277 100644 --- a/src/panels/places/placesitem.cpp +++ b/src/panels/places/placesitem.cpp @@ -125,6 +125,7 @@ void PlacesItem::setBookmark(const KBookmark& bookmark) delete m_volume; delete m_disc; + const QString udi = bookmark.metaDataItem("UDI"); if (udi.isEmpty()) { setIcon(bookmark.icon()); @@ -134,7 +135,18 @@ void PlacesItem::setBookmark(const KBookmark& bookmark) initializeDevice(udi); } - switch (groupType()) { + const GroupType type = groupType(); + if (icon().isEmpty()) { + switch (type) { + case RecentlyAccessedType: setIcon("package_utility_time"); break; + case SearchForType: setIcon("nepomuk"); break; + case PlacesType: + default: setIcon("folder"); + } + + } + + switch (type) { case PlacesType: setGroup(i18nc("@item", "Places")); break; case RecentlyAccessedType: setGroup(i18nc("@item", "Recently Accessed")); break; case SearchForType: setGroup(i18nc("@item", "Search For")); break; @@ -158,7 +170,7 @@ PlacesItem::GroupType PlacesItem::groupType() const return RecentlyAccessedType; } - if (protocol == QLatin1String("search")) { + if (protocol.contains(QLatin1String("search"))) { return SearchForType; } diff --git a/src/panels/places/placesitemmodel.cpp b/src/panels/places/placesitemmodel.cpp index c1a5426af..02e1944bd 100644 --- a/src/panels/places/placesitemmodel.cpp +++ b/src/panels/places/placesitemmodel.cpp @@ -226,6 +226,32 @@ int PlacesItemModel::closestItem(const KUrl& url) const return foundIndex; } +void PlacesItemModel::appendItemToGroup(PlacesItem* item) +{ + if (!item) { + return; + } + + int i = 0; + while (i < count() && placesItem(i)->group() != item->group()) { + ++i; + } + + bool inserted = false; + while (!inserted && i < count()) { + if (placesItem(i)->group() != item->group()) { + insertItem(i, item); + inserted = true; + } + ++i; + } + + if (!inserted) { + appendItem(item); + } +} + + QAction* PlacesItemModel::ejectAction(int index) const { const PlacesItem* item = placesItem(index); @@ -370,11 +396,7 @@ void PlacesItemModel::dropMimeData(int index, const QMimeData* mimeData) text = url.host(); } - KBookmark bookmark = PlacesItem::createBookmark(m_bookmarkManager, - text, - url, - "folder"); - PlacesItem* newItem = new PlacesItem(bookmark); + PlacesItem* newItem = createPlacesItem(text, url); const int dropIndex = groupedDropIndex(index, newItem); insertItem(dropIndex, newItem); } @@ -567,7 +589,7 @@ void PlacesItemModel::updateBookmarks() if (item->isHidden() && !m_hiddenItemsShown) { m_bookmarkedItems.append(item); } else { - appendItem(item); + appendItemToGroup(item); } } } diff --git a/src/panels/places/placesitemmodel.h b/src/panels/places/placesitemmodel.h index b850f356f..89a111730 100644 --- a/src/panels/places/placesitemmodel.h +++ b/src/panels/places/placesitemmodel.h @@ -69,7 +69,7 @@ public: */ PlacesItem* createPlacesItem(const QString& text, const KUrl& url, - const QString& iconName); + const QString& iconName = QString()); PlacesItem* placesItem(int index) const; @@ -99,6 +99,15 @@ public: */ int closestItem(const KUrl& url) const; + /** + * Appends the item \a item as last element of the group + * the item belongs to. If no item with the same group is + * present, the item gets appended as last element of the + * model. PlacesItemModel takes the ownership + * of the item. + */ + void appendItemToGroup(PlacesItem* item); + QAction* ejectAction(int index) const; QAction* teardownAction(int index) const; diff --git a/src/panels/places/placespanel.cpp b/src/panels/places/placespanel.cpp index 613046025..7016b039d 100644 --- a/src/panels/places/placespanel.cpp +++ b/src/panels/places/placespanel.cpp @@ -309,25 +309,7 @@ void PlacesPanel::addEntry() dialog->setUrl(url); if (dialog->exec() == QDialog::Accepted) { PlacesItem* item = m_model->createPlacesItem(dialog->text(), dialog->url(), dialog->icon()); - - // Insert the item as last item of the corresponding group. - int i = 0; - while (i < m_model->count() && m_model->placesItem(i)->group() != item->group()) { - ++i; - } - - bool inserted = false; - while (!inserted && i < m_model->count()) { - if (m_model->placesItem(i)->group() != item->group()) { - m_model->insertItem(i, item); - inserted = true; - } - ++i; - } - - if (!inserted) { - m_model->appendItem(item); - } + m_model->appendItemToGroup(item); } delete dialog; -- 2.47.3