summaryrefslogtreecommitdiff
path: root/src/bookmarks/bookmarkstreeitem.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/bookmarks/bookmarkstreeitem.hpp')
-rw-r--r--src/bookmarks/bookmarkstreeitem.hpp108
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;
+};