diff options
author | Nicolas Werner <nicolas.werner@hotmail.de> | 2019-10-25 11:46:25 +0200 |
---|---|---|
committer | Nicolas Werner <nicolas.werner@hotmail.de> | 2019-11-23 20:06:15 +0100 |
commit | c8f97216faa74b9d3f1f92af7acc509dbe6b5647 (patch) | |
tree | aa9e68c03bc79800cb108bbb19654a75d7634d80 | |
parent | Use a basic implementation of a DelegateChooser for compat with older Qt (diff) | |
download | nheko-c8f97216faa74b9d3f1f92af7acc509dbe6b5647.tar.xz |
Small fixes to delegate chooser implementation
-rw-r--r-- | resources/qml/RowDelegateChooser.qml | 3 | ||||
-rw-r--r-- | resources/qml/TimelineView.qml | 10 | ||||
-rw-r--r-- | src/timeline2/DelegateChooser.cpp | 40 | ||||
-rw-r--r-- | src/timeline2/DelegateChooser.h | 7 |
4 files changed, 10 insertions, 50 deletions
diff --git a/resources/qml/RowDelegateChooser.qml b/resources/qml/RowDelegateChooser.qml index b7b6bdf4..bacd970a 100644 --- a/resources/qml/RowDelegateChooser.qml +++ b/resources/qml/RowDelegateChooser.qml @@ -5,7 +5,7 @@ import com.github.nheko 1.0 import "./delegates" DelegateChooser { - role: "type" + //role: "type" //< not supported in our custom implementation, have to use roleValue width: chat.width roleValue: model.type @@ -46,7 +46,6 @@ DelegateChooser { TimelineRow { view: chat; Redacted { id: kid } } } DelegateChoice { - //roleValue: MtxEvent.Redacted TimelineRow { view: chat; Placeholder { id: kid } } } } diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml index e09b9ed3..4e379567 100644 --- a/resources/qml/TimelineView.qml +++ b/resources/qml/TimelineView.qml @@ -90,7 +90,15 @@ Rectangle { onMovementEnded: updatePosition() spacing: 4 - delegate: RowDelegateChooser {} + delegate: RowDelegateChooser { + function isFullyVisible() { + return height > 1 && (y - chat.contentY - 1) + height < chat.height + } + function getIndex() { + return index; + } + + } section { property: "section" diff --git a/src/timeline2/DelegateChooser.cpp b/src/timeline2/DelegateChooser.cpp index ddde93e1..b86fc6cc 100644 --- a/src/timeline2/DelegateChooser.cpp +++ b/src/timeline2/DelegateChooser.cpp @@ -5,11 +5,6 @@ // uses private API, which moved between versions #include <QQmlEngine> #include <QtGlobal> -#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) -#include <QtQmlModels/private/qqmladaptormodel_p.h> -#else -#include <QtQml/private/qqmladaptormodel_p.h> -#endif QQmlComponent * DelegateChoice::delegate() const @@ -70,44 +65,11 @@ DelegateChooser::choices() &DelegateChooser::clearChoices); } -QString -DelegateChooser::role() const -{ - return role_; -} - -void -DelegateChooser::setRole(const QString &role) -{ - if (role != role_) { - role_ = role; - emit roleChanged(); - } -} - -QQmlComponent * -DelegateChooser::delegate(QQmlAdaptorModel *adaptorModel, int row, int column) const -{ - auto value = adaptorModel->value(adaptorModel->indexAt(row, column), role_); - - for (const auto choice : choices_) { - auto choiceValue = choice->roleValue(); - if (!value.isValid() || choiceValue == value) { - nhlog::ui()->debug("Returned delegate for {}", role_.toStdString()); - return choice->delegate(); - } - } - - nhlog::ui()->debug("Returned null delegate"); - return nullptr; -} - void DelegateChooser::appendChoice(QQmlListProperty<DelegateChoice> *p, DelegateChoice *c) { DelegateChooser *dc = static_cast<DelegateChooser *>(p->object); dc->choices_.append(c); - // dc->recalcChild(); } int @@ -132,8 +94,6 @@ DelegateChooser::recalcChild() for (const auto choice : choices_) { auto choiceValue = choice->roleValue(); if (!roleValue_.isValid() || !choiceValue.isValid() || choiceValue == roleValue_) { - nhlog::ui()->debug("Returned delegate for {}", role_.toStdString()); - if (child) { // delete child; child = nullptr; diff --git a/src/timeline2/DelegateChooser.h b/src/timeline2/DelegateChooser.h index d2a1cf59..7350e0d3 100644 --- a/src/timeline2/DelegateChooser.h +++ b/src/timeline2/DelegateChooser.h @@ -44,19 +44,13 @@ class DelegateChooser : public QQuickItem public: Q_PROPERTY(QQmlListProperty<DelegateChoice> choices READ choices CONSTANT) - Q_PROPERTY(QString role READ role WRITE setRole NOTIFY roleChanged) Q_PROPERTY(QVariant roleValue READ roleValue WRITE setRoleValue NOTIFY roleValueChanged) QQmlListProperty<DelegateChoice> choices(); - QString role() const; - void setRole(const QString &role); - QVariant roleValue() const; void setRoleValue(const QVariant &value); - QQmlComponent *delegate(QQmlAdaptorModel *adaptorModel, int row, int column = 0) const; - void recalcChild(); void componentComplete() override; @@ -65,7 +59,6 @@ signals: void roleValueChanged(); private: - QString role_; QVariant roleValue_; QList<DelegateChoice *> choices_; QQuickItem *child; |