diff options
Diffstat (limited to 'src/panels/places/placesitemmodel.h')
| -rw-r--r-- | src/panels/places/placesitemmodel.h | 205 |
1 files changed, 72 insertions, 133 deletions
diff --git a/src/panels/places/placesitemmodel.h b/src/panels/places/placesitemmodel.h index 7dd49bf5a..a1b23b220 100644 --- a/src/panels/places/placesitemmodel.h +++ b/src/panels/places/placesitemmodel.h @@ -20,9 +20,8 @@ #ifndef PLACESITEMMODEL_H #define PLACESITEMMODEL_H -#include <config-baloo.h> - #include <kitemviews/kstandarditemmodel.h> +#include <KFilePlacesModel> #include <QUrl> #include <QHash> @@ -35,7 +34,6 @@ class KBookmark; class KBookmarkManager; class PlacesItem; class QAction; -class QTimer; // #define PLACESITEMMODEL_DEBUG @@ -50,20 +48,27 @@ class PlacesItemModel: public KStandardItemModel Q_OBJECT public: - explicit PlacesItemModel(QObject* parent = 0); - virtual ~PlacesItemModel(); + explicit PlacesItemModel(QObject* parent = nullptr); + ~PlacesItemModel() override; /** - * @return A new instance of a places item with the given - * attributes. + * @brief Create a new place entry in the bookmark file + * and add it to the model */ - PlacesItem* createPlacesItem(const QString& text, - const QUrl& url, - const QString& iconName = QString()); + void createPlacesItem(const QString& text, + const QUrl& url, + const QString& iconName = QString(), + int after = -1); PlacesItem* placesItem(int index) const; /** + * @brief Mark an item as hiden + * @param index of the item to be hidden + */ + void hideItem(int index); + + /** * If set to true, all items that are marked as hidden * will be shown in the view. The items will * stay marked as hidden, which is visually indicated @@ -89,15 +94,6 @@ public: */ int closestItem(const QUrl& 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; @@ -107,9 +103,9 @@ public: bool storageSetupNeeded(int index) const; void requestStorageSetup(int index); - virtual QMimeData* createMimeData(const KItemSet& indexes) const Q_DECL_OVERRIDE; + QMimeData* createMimeData(const KItemSet& indexes) const override; - virtual bool supportsDropping(int index) const Q_DECL_OVERRIDE; + bool supportsDropping(int index) const override; void dropMimeDataBefore(int index, const QMimeData* mimeData); @@ -121,18 +117,32 @@ public: */ static QUrl convertedUrl(const QUrl& url); - virtual void clear() Q_DECL_OVERRIDE; + void clear() override; void proceedWithTearDown(); /** - * Saves the bookmarks and indicates to other applications that the - * state of the bookmarks has been changed. Is only called by the - * timeout of m_saveBookmarksTimer to prevent unnecessary savings. + * @brief Remove item from bookmark + * + * This function remove the index from bookmark file permanently + * + * @param index - the item to be removed */ - void saveBookmarks(); + void deleteItem(int index); + + /** + * Force a sync on the bookmarks and indicates to other applications that the + * state of the bookmarks has been changed. + */ + void refresh(); + + bool isDir(int index) const override; + + + KFilePlacesModel::GroupType groupType(int row) const; + bool isGroupHidden(KFilePlacesModel::GroupType type) const; + void setGroupHidden(KFilePlacesModel::GroupType type, bool hidden); - bool isDir(int index) const Q_DECL_OVERRIDE; signals: void errorMessage(const QString& message); void storageSetupDone(int index, bool success); @@ -140,26 +150,28 @@ signals: void storageTearDownExternallyRequested(const QString& mountPath); protected: - virtual void onItemInserted(int index) Q_DECL_OVERRIDE; - virtual void onItemRemoved(int index, KStandardItem* removedItem) Q_DECL_OVERRIDE; - virtual void onItemChanged(int index, const QSet<QByteArray>& changedRoles) Q_DECL_OVERRIDE; + void onItemInserted(int index) override; + void onItemRemoved(int index, KStandardItem* removedItem) override; + void onItemChanged(int index, const QSet<QByteArray>& changedRoles) override; private slots: - void slotDeviceAdded(const QString& udi); - void slotDeviceRemoved(const QString& udi); void slotStorageTearDownDone(Solid::ErrorType error, const QVariant& errorData); void slotStorageSetupDone(Solid::ErrorType error, const QVariant& errorData, const QString& udi); - void hideItem(); - /** - * Updates the bookmarks from the model corresponding to the changed - * bookmarks stored by the bookmark-manager. Is called whenever the bookmarks - * have been changed by another application. - */ - void updateBookmarks(); + // source model control + void onSourceModelRowsInserted(const QModelIndex &parent, int first, int last); + void onSourceModelRowsAboutToBeRemoved(const QModelIndex &parent, int first, int last); + void onSourceModelRowsAboutToBeMoved(const QModelIndex &parent, int start, int end, const QModelIndex &destination, int row); + void onSourceModelRowsMoved(const QModelIndex &parent, int start, int end, const QModelIndex &destination, int row); + void onSourceModelDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles); + void onSourceModelGroupHiddenChanged(KFilePlacesModel::GroupType group, bool hidden); private: - struct SystemBookmarkData; + /** + * Remove bookmarks created by the previous version of dolphin that are + * not valid anymore + */ + void cleanupBookmarks(); /** * Loads the bookmarks from the bookmark-manager and creates items for @@ -167,43 +179,6 @@ private: */ void loadBookmarks(); - /** - * @return True, if the bookmark can be accepted in the context of the - * current application (e.g. bookmarks from other applications - * will be ignored). - */ - bool acceptBookmark(const KBookmark& bookmark, - const QSet<QString>& availableDevices) const; - - /** - * Creates a PlacesItem for a system-bookmark: - * - PlacesItem::isSystemItem() will return true - * - Default view-properties will be created for "Search For" items - * The item is not inserted to the model yet. - */ - PlacesItem* createSystemPlacesItem(const SystemBookmarkData& data); - - /** - * Creates system bookmarks that are shown per default and can - * only be hidden but not removed. The result will be stored - * in m_systemBookmarks. - */ - void createSystemBookmarks(); - - void initializeAvailableDevices(); - - /** - * @param index Item index related to the model. - * @return Corresponding index related to m_bookmarkedItems. - */ - int bookmarkIndex(int index) const; - - /** - * Marks the item with the index \a index as hidden and - * removes it from the model so that it gets invisible. - */ - void hideItem(int index); - QString internalMimeType() const; /** @@ -220,77 +195,41 @@ private: static bool equalBookmarkIdentifiers(const KBookmark& b1, const KBookmark& b2); /** - * @return URL using the timeline-protocol for searching (see convertedUrl()). - */ - static QUrl createTimelineUrl(const QUrl& url); - - /** - * Helper method for createTimelineUrl(). - * @return String that represents a date-path in the format that - * the timeline-protocol expects. - */ - static QString timelineDateString(int year, int month, int day = 0); - - /** - * @return URL that can be listed by KIO and results in searching - * for a given term. The URL \a url represents a places-internal - * URL like e.g. "search:/documents" (see convertedUrl()). - */ - static QUrl createSearchUrl(const QUrl& url); - -#ifdef HAVE_BALOO - /** - * Helper method for createSearchUrl() - * @return URL that can be listed by KIO and results in searching - * for the given type + * 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. */ - static QUrl searchUrlForType(const QString& type); -#endif + void insertSortedItem(PlacesItem* item); #ifdef PLACESITEMMODEL_DEBUG void showModelState(); #endif -private: - bool m_fileIndexingEnabled; - bool m_hiddenItemsShown; + PlacesItem *itemFromBookmark(const KBookmark &bookmark) const; - QSet<QString> m_availableDevices; - Solid::Predicate m_predicate; - KBookmarkManager* m_bookmarkManager; + void addItemFromSourceModel(const QModelIndex &index); + void removeItemByIndex(const QModelIndex &mapToSource); - struct SystemBookmarkData - { - SystemBookmarkData(const QUrl& url, - const QString& icon, - const QString& text) : - url(url), icon(icon), text(text) {} - QUrl url; - QString icon; - QString text; - }; + QString bookmarkId(const KBookmark &bookmark) const; + void initializeDefaultViewProperties() const; - QList<SystemBookmarkData> m_systemBookmarks; - QHash<QUrl, int> m_systemBookmarksIndexes; + int mapFromSource(const QModelIndex &index) const; + QModelIndex mapToSource(int row) const; - // Contains hidden and unhidden items that are stored as - // bookmark (the model itself only contains items that - // are shown in the view). If an entry is 0, then the - // places-item is part of the model. If an entry is not - // 0, the item is hidden and not part of the model. - QList<PlacesItem*> m_bookmarkedItems; + static void updateItem(PlacesItem *item, const QModelIndex &index); - // Index of the hidden item that should be removed in - // removeHiddenItem(). The removing must be done - // asynchronously as in the scope of onItemChanged() - // removing an item is not allowed. - int m_hiddenItemToRemove; +private: + bool m_hiddenItemsShown; Solid::StorageAccess *m_deviceToTearDown; - QTimer* m_updateBookmarksTimer; - QHash<QObject*, int> m_storageSetupInProgress; + + QScopedPointer<KFilePlacesModel> m_sourceModel; + + QVector<QPersistentModelIndex> m_indexMap; }; #endif |
