Skip to content
Snippets Groups Projects
Commit 97f565e9 authored by Emmanuel Lepage Vallee's avatar Emmanuel Lepage Vallee
Browse files

bookmark: Port internal structure to Qt5

The old wrapper is not longer necessary as QMetaObject::Connection
now support lamdbas. This will reduce the memory usage and allow
the extra indirection, which is necessary to fix the issue.

Refs #73492

Change-Id: I503ac3c1ffff806a1c891675738f374939e1d3e4
parent c130e11a
No related branches found
No related tags found
No related merge requests found
...@@ -68,7 +68,7 @@ public: ...@@ -68,7 +68,7 @@ public:
QVector<ContactMethod*> bookmarkList () const; QVector<ContactMethod*> bookmarkList () const;
static QVector<ContactMethod*> serialisedToList(const QStringList& list); static QVector<ContactMethod*> serialisedToList(const QStringList& list);
private Q_SLOTS: public Q_SLOTS:
void slotRequest(const QString& uri); void slotRequest(const QString& uri);
void slotIndexChanged(const QModelIndex& idx); void slotIndexChanged(const QModelIndex& idx);
...@@ -78,14 +78,17 @@ private: ...@@ -78,14 +78,17 @@ private:
CategorizedBookmarkModel* CategorizedBookmarkModel::m_spInstance = nullptr; CategorizedBookmarkModel* CategorizedBookmarkModel::m_spInstance = nullptr;
class BookmarkItemNode;
static bool test = false; static bool test = false;
//Model item/index //Model item/index
class NumberTreeBackend final : public CategorizedCompositeNode class NumberTreeBackend final : public CategorizedCompositeNode
{ {
friend class CategorizedBookmarkModel; friend class CategorizedBookmarkModel;
public: public:
enum class Type {
BOOKMARK,
POPULAR,
};
NumberTreeBackend(ContactMethod* number); NumberTreeBackend(ContactMethod* number);
virtual ~NumberTreeBackend(); virtual ~NumberTreeBackend();
virtual QObject* getSelf() const override { return nullptr; } virtual QObject* getSelf() const override { return nullptr; }
...@@ -93,21 +96,9 @@ class NumberTreeBackend final : public CategorizedCompositeNode ...@@ -93,21 +96,9 @@ class NumberTreeBackend final : public CategorizedCompositeNode
ContactMethod* m_pNumber; ContactMethod* m_pNumber;
BookmarkTopLevelItem* m_pParent; BookmarkTopLevelItem* m_pParent;
int m_Index; int m_Index;
BookmarkItemNode* m_pNode; Type m_Type;
}; int m_PopularIdx;
QMetaObject::Connection m_Conn;
class BookmarkItemNode final : public QObject //TODO remove this once Qt4 support is dropped
{
Q_OBJECT
public:
BookmarkItemNode(CategorizedBookmarkModel* m, ContactMethod* n, NumberTreeBackend* backend);
private:
NumberTreeBackend* m_pBackend;
CategorizedBookmarkModel* m_pModel;
private Q_SLOTS:
void slotNumberChanged();
Q_SIGNALS:
void changed(const QModelIndex& idx);
}; };
CategorizedBookmarkModelPrivate::CategorizedBookmarkModelPrivate(CategorizedBookmarkModel* parent) : QObject(parent), q_ptr(parent) CategorizedBookmarkModelPrivate::CategorizedBookmarkModelPrivate(CategorizedBookmarkModel* parent) : QObject(parent), q_ptr(parent)
...@@ -116,22 +107,13 @@ CategorizedBookmarkModelPrivate::CategorizedBookmarkModelPrivate(CategorizedBook ...@@ -116,22 +107,13 @@ CategorizedBookmarkModelPrivate::CategorizedBookmarkModelPrivate(CategorizedBook
} }
NumberTreeBackend::NumberTreeBackend(ContactMethod* number): CategorizedCompositeNode(CategorizedCompositeNode::Type::BOOKMARK), NumberTreeBackend::NumberTreeBackend(ContactMethod* number): CategorizedCompositeNode(CategorizedCompositeNode::Type::BOOKMARK),
m_pNumber(number),m_pParent(nullptr),m_pNode(nullptr),m_Index(-1){ m_pNumber(number),m_pParent(nullptr),m_Index(-1), m_Type(NumberTreeBackend::Type::BOOKMARK), m_PopularIdx(-1){
Q_ASSERT(number != nullptr); Q_ASSERT(number != nullptr);
} }
NumberTreeBackend::~NumberTreeBackend() { NumberTreeBackend::~NumberTreeBackend()
if (m_pNode) delete m_pNode;
}
BookmarkItemNode::BookmarkItemNode(CategorizedBookmarkModel* m, ContactMethod* n, NumberTreeBackend* backend) :
m_pBackend(backend),m_pModel(m){
connect(n,SIGNAL(changed()),this,SLOT(slotNumberChanged()));
}
void BookmarkItemNode::slotNumberChanged()
{ {
emit changed(m_pModel->index(m_pBackend->m_Index,0,m_pModel->index(m_pBackend->m_pParent->m_Row,0))); QObject::disconnect(m_Conn);
} }
QObject* BookmarkTopLevelItem::getSelf() const QObject* BookmarkTopLevelItem::getSelf() const
...@@ -205,9 +187,14 @@ void CategorizedBookmarkModel::reloadCategories() ...@@ -205,9 +187,14 @@ void CategorizedBookmarkModel::reloadCategories()
ContactMethod* n = cl[i]; ContactMethod* n = cl[i];
NumberTreeBackend* bm = new NumberTreeBackend(n); NumberTreeBackend* bm = new NumberTreeBackend(n);
bm->m_pParent = item; bm->m_pParent = item;
bm->m_Type = NumberTreeBackend::Type::POPULAR;
bm->m_PopularIdx = i;
bm->m_Index = item->m_lChildren.size(); bm->m_Index = item->m_lChildren.size();
bm->m_pNode = new BookmarkItemNode(this,n,bm);
connect(bm->m_pNode,SIGNAL(changed(QModelIndex)),d_ptr,SLOT(slotIndexChanged(QModelIndex))); bm->m_Conn = connect(n, &ContactMethod::changed, [this,bm]() {
d_ptr->slotIndexChanged(index(bm->m_Index,0,index(bm->m_pParent->m_Row,0)));
});
item->m_lChildren << bm; item->m_lChildren << bm;
} }
...@@ -227,8 +214,9 @@ void CategorizedBookmarkModel::reloadCategories() ...@@ -227,8 +214,9 @@ void CategorizedBookmarkModel::reloadCategories()
bookmark->setBookmarked(true); bookmark->setBookmarked(true);
bm->m_pParent = item; bm->m_pParent = item;
bm->m_Index = item->m_lChildren.size(); bm->m_Index = item->m_lChildren.size();
bm->m_pNode = new BookmarkItemNode(this,bookmark,bm); bm->m_Conn = connect(bookmark, &ContactMethod::changed, [this,bm]() {
connect(bm->m_pNode,SIGNAL(changed(QModelIndex)),d_ptr,SLOT(slotIndexChanged(QModelIndex))); d_ptr->slotIndexChanged(index(bm->m_Index,0,index(bm->m_pParent->m_Row,0)));
});
item->m_lChildren << bm; item->m_lChildren << bm;
if (!d_ptr->m_Tracked[bookmark]) { if (!d_ptr->m_Tracked[bookmark]) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment