diff options
author | aqua <aqua@iserlohn-fortress.net> | 2022-08-14 18:47:37 +0300 |
---|---|---|
committer | aqua <aqua@iserlohn-fortress.net> | 2022-09-14 08:51:09 +0300 |
commit | c2d18d73b0e1a74525ec0cda36a2e2e7e5b4ff4c (patch) | |
tree | d5b9febb29ef801faa08fce4e56c4f453ddb38d0 /src/bookmarks/bookmarkstreeitem.hpp | |
parent | Add clazy cmake preset (diff) | |
download | rekonq-c2d18d73b0e1a74525ec0cda36a2e2e7e5b4ff4c.tar.xz |
Import BookmarkModel from poi
Diffstat (limited to 'src/bookmarks/bookmarkstreeitem.hpp')
-rw-r--r-- | src/bookmarks/bookmarkstreeitem.hpp | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/src/bookmarks/bookmarkstreeitem.hpp b/src/bookmarks/bookmarkstreeitem.hpp new file mode 100644 index 00000000..e8cd5a90 --- /dev/null +++ b/src/bookmarks/bookmarkstreeitem.hpp @@ -0,0 +1,108 @@ +/* ============================================================ + * rekonq + * ============================================================ + * SPDX-License-Identifier: GPL-3.0-only + * Copyright (C) 2022 aqua <aqua@iserlohn-fortress.net> + * ============================================================ + * Description: rekonq bookmarks model + * ============================================================ */ + +#pragma once + +#include "rekonq.hpp" +#include <QDateTime> +#include <QIcon> +#include <QUrl> +#include <QVariant> +#include <QVector> +#include <utility> + +class BookmarksTreeItem { +public: + enum Types { Root, Folder, Bookmark, Separator, Alias }; + constexpr static int TypesCount = 5; + + struct Attributes_t { + QString title{}; + QUrl href{}; + QDateTime added{}; + QDateTime visited{}; + QDateTime modified{}; + QString description{}; + QString id{}; + }; + enum Attributes { Title = 0, Href = 1, Added = 2, Visited = 3, Modified = 4, Description = 5, Id = 6 }; + constexpr static int AttributeCount = 7; + + explicit BookmarksTreeItem(Types type, Attributes_t &&args, BookmarksTreeItem *parent); + ~BookmarksTreeItem(); + + [[nodiscard]] BookmarksTreeItem *parent() const { return m_parent; } + + /** + * Add an item to the end of the children list, if the item can have children + * @return true if the item was added, false otherwise + */ + bool appendChild(BookmarksTreeItem *childItem); + bool insertChild(int position, BookmarksTreeItem *childItem); + bool removeChildAt(int index, int count = 1); + [[nodiscard]] BookmarksTreeItem *takeChild(int index) { return m_children.takeAt(index); } + + [[nodiscard]] BookmarksTreeItem *child(int index) const { return m_children.value(index); } + [[nodiscard]] auto childCount() const { return m_children.count(); } + + [[nodiscard]] BookmarksTreeItem *findChild(const QString &id) + { + if (id.isEmpty()) return nullptr; + if (m_data.id == id) return this; + + for (auto *child : qAsConst(m_children)) + if (child->m_data.id == id) return child; + for (auto *child : qAsConst(m_children)) + if (auto *grandchild = child->findChild(id)) return grandchild; + + return nullptr; + } + + [[nodiscard]] QVariant data(Attributes column) const + { + switch (column) { + case Title: + return m_data.title; + case Href: + return m_data.href; + case Added: + return m_data.added; + case Visited: + return m_data.visited; + case Modified: + return m_data.modified; + case Description: + return m_data.description; + case Id: + return m_data.id; + } + return {}; + } + bool setData(Attributes column, const QVariant &data); + + [[nodiscard]] auto icon() const { return m_icon; } + [[nodiscard]] bool isExpanded() const { return m_isExpanded; } + void setExpanded(bool expanded); + + [[nodiscard]] QString tooltip() const; + [[nodiscard]] Types type() const { return m_type; } + [[nodiscard]] int row() const; + + QStringList metadata; + +private: + BookmarksTreeItem *m_parent; + QVector<BookmarksTreeItem *> m_children; + + const Types m_type; + QIcon m_icon; + bool m_isExpanded = false; + + Attributes_t m_data; +}; |