Skip to content
Snippets Groups Projects
Commit d68b2418 authored by Nicolas Werner's avatar Nicolas Werner
Browse files

Size reply background by contents

parent d2e49553
No related branches found
No related tags found
No related merge requests found
......@@ -11,6 +11,7 @@ Item {
property alias modelData: model.data
height: chooser.childrenRect.height
property real implicitWidth: (chooser.child && chooser.child.implicitWidth) ? chooser.child.implicitWidth : width
DelegateChooser {
id: chooser
......
......@@ -54,5 +54,13 @@ Rectangle {
}
}
color: Qt.rgba(userColor.r, userColor.g, userColor.b, 0.2)
color: "transparent"
Rectangle {
id: backgroundItem
z: -1
height: replyContainer.height
width: Math.min(Math.max(reply.implicitWidth, userName.implicitWidth) + 8 + 4, parent.width)
color: Qt.rgba(userColor.r, userColor.g, userColor.b, 0.2)
}
}
......@@ -94,9 +94,9 @@ DelegateChooser::recalcChild()
for (const auto choice : qAsConst(choices_)) {
auto choiceValue = choice->roleValue();
if (!roleValue_.isValid() || !choiceValue.isValid() || choiceValue == roleValue_) {
if (child) {
child->setParentItem(nullptr);
child = nullptr;
if (child_) {
child_->setParentItem(nullptr);
child_ = nullptr;
}
choice->delegate()->create(incubator, QQmlEngine::contextForObject(this));
......@@ -116,19 +116,20 @@ void
DelegateChooser::DelegateIncubator::statusChanged(QQmlIncubator::Status status)
{
if (status == QQmlIncubator::Ready) {
chooser.child = dynamic_cast<QQuickItem *>(object());
if (chooser.child == nullptr) {
chooser.child_ = dynamic_cast<QQuickItem *>(object());
if (chooser.child_ == nullptr) {
nhlog::ui()->error("Delegate has to be derived of Item!");
return;
}
chooser.child->setParentItem(&chooser);
connect(chooser.child, &QQuickItem::heightChanged, &chooser, [this]() {
chooser.setHeight(chooser.child->height());
chooser.child_->setParentItem(&chooser);
connect(chooser.child_, &QQuickItem::heightChanged, &chooser, [this]() {
chooser.setHeight(chooser.child_->height());
});
chooser.setHeight(chooser.child->height());
QQmlEngine::setObjectOwnership(chooser.child,
chooser.setHeight(chooser.child_->height());
QQmlEngine::setObjectOwnership(chooser.child_,
QQmlEngine::ObjectOwnership::JavaScriptOwnership);
emit chooser.childChanged();
} else if (status == QQmlIncubator::Error) {
for (const auto &e : errors())
......
......@@ -45,18 +45,22 @@ class DelegateChooser : public QQuickItem
public:
Q_PROPERTY(QQmlListProperty<DelegateChoice> choices READ choices CONSTANT)
Q_PROPERTY(QVariant roleValue READ roleValue WRITE setRoleValue NOTIFY roleValueChanged)
Q_PROPERTY(QQuickItem *child READ child NOTIFY childChanged)
QQmlListProperty<DelegateChoice> choices();
QVariant roleValue() const;
void setRoleValue(const QVariant &value);
QQuickItem *child() const { return child_; }
void recalcChild();
void componentComplete() override;
signals:
void roleChanged();
void roleValueChanged();
void childChanged();
private:
struct DelegateIncubator : public QQmlIncubator
......@@ -72,7 +76,7 @@ private:
QVariant roleValue_;
QList<DelegateChoice *> choices_;
QQuickItem *child = nullptr;
QQuickItem *child_ = nullptr;
DelegateIncubator incubator{*this};
static void appendChoice(QQmlListProperty<DelegateChoice> *, DelegateChoice *);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment