diff --git a/src/popups/PopupItem.cpp b/src/popups/PopupItem.cpp
index 94de3a92..f905983a 100644
--- a/src/popups/PopupItem.cpp
+++ b/src/popups/PopupItem.cpp
@@ -36,6 +36,16 @@ PopupItem::paintEvent(QPaintEvent *)
p.fillRect(rect(), hoverColor_);
}
+UserItem::UserItem(QWidget *parent)
+ : PopupItem(parent)
+{
+ userName_ = new QLabel("Placeholder", this);
+ avatar_->setSize(conf::popup::avatar);
+ avatar_->setLetter("P");
+ topLayout_->addWidget(avatar_);
+ topLayout_->addWidget(userName_, 1);
+}
+
UserItem::UserItem(QWidget *parent, const QString &user_id)
: PopupItem(parent)
, userId_{user_id}
diff --git a/src/popups/PopupItem.h b/src/popups/PopupItem.h
index 1fc54bf7..cab73a9d 100644
--- a/src/popups/PopupItem.h
+++ b/src/popups/PopupItem.h
@@ -50,6 +50,7 @@ class UserItem : public PopupItem
Q_OBJECT
public:
+ UserItem(QWidget *parent);
UserItem(QWidget *parent, const QString &user_id);
QString selectedText() const { return userId_; }
void updateItem(const QString &user_id);
diff --git a/src/popups/ReplyPopup.cpp b/src/popups/ReplyPopup.cpp
index 04c3cea5..3c7c482a 100644
--- a/src/popups/ReplyPopup.cpp
+++ b/src/popups/ReplyPopup.cpp
@@ -11,41 +11,69 @@
ReplyPopup::ReplyPopup(QWidget *parent)
: QWidget(parent)
+ , userItem_{0}
+ , msgLabel_{0}
+ , eventLabel_{0}
{
setAttribute(Qt::WA_ShowWithoutActivating, true);
setWindowFlags(Qt::ToolTip | Qt::NoDropShadowWindowHint);
- layout_ = new QVBoxLayout(this);
- layout_->setMargin(0);
- layout_->setSpacing(0);
+ mainLayout_ = new QVBoxLayout(this);
+ mainLayout_->setMargin(0);
+ mainLayout_->setSpacing(0);
+
+ topLayout_ = new QHBoxLayout();
+ topLayout_->setSpacing(0);
+ topLayout_->setContentsMargins(13, 1, 13, 0);
+
+ userItem_ = new UserItem(this);
+ connect(userItem_, &UserItem::clicked, this, &ReplyPopup::userSelected);
+ topLayout_->addWidget(userItem_);
+
+ buttonLayout_ = new QHBoxLayout();
+ buttonLayout_->setSpacing(0);
+ buttonLayout_->setMargin(0);
+
+ topLayout_->addLayout(buttonLayout_);
+ QFont f;
+ f.setPointSizeF(f.pointSizeF());
+ const int fontHeight = QFontMetrics(f).height();
+ buttonSize_ = std::min(fontHeight, 20);
+
+ closeBtn_ = new FlatButton(this);
+ closeBtn_->setToolTip(tr("Logout"));
+ closeBtn_->setCornerRadius(buttonSize_ / 2);
+ closeBtn_->setText("X");
+
+ QIcon icon;
+ icon.addFile(":/icons/icons/ui/remove-symbol.png");
+
+ closeBtn_->setIcon(icon);
+ closeBtn_->setIconSize(QSize(buttonSize_, buttonSize_));
+ connect(closeBtn_, &FlatButton::clicked, this, [this]() { emit cancel(); });
+
+ buttonLayout_->addWidget(closeBtn_);
+
+ topLayout_->addLayout(buttonLayout_);
+
+ mainLayout_->addLayout(topLayout_);
+ msgLabel_ = new QLabel(this);
+ mainLayout_->addWidget(msgLabel_);
+ eventLabel_ = new QLabel(this);
+ mainLayout_->addWidget(eventLabel_);
+
+ setLayout(mainLayout_);
}
void
ReplyPopup::setReplyContent(const QString &user, const QString &msg, const QString &srcEvent)
{
- QLayoutItem *child;
- while ((child = layout_->takeAt(0)) != 0) {
- delete child->widget();
- delete child;
- }
- // Create a new widget if there isn't already one in that
- // layout position.
- // if (!item) {
- auto userItem = new UserItem(this, user);
- auto *text = new QLabel(this);
- text->setText(msg);
- auto *event = new QLabel(this);
- event->setText(srcEvent);
- connect(userItem, &UserItem::clicked, this, &ReplyPopup::userSelected);
- layout_->addWidget(userItem);
- layout_->addWidget(text);
- layout_->addWidget(event);
- // } else {
// Update the current widget with the new data.
- // auto userWidget = qobject_cast<UserItem *>(item->widget());
- // if (userWidget)
- // userWidget->updateItem(users.at(i).user_id);
- // }
+ userItem_->updateItem(user);
+
+ msgLabel_->setText(msg);
+
+ eventLabel_->setText(srcEvent);
adjustSize();
}
@@ -58,3 +86,13 @@ ReplyPopup::paintEvent(QPaintEvent *)
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
+
+void
+ReplyPopup::mousePressEvent(QMouseEvent *event)
+{
+ if (event->buttons() != Qt::RightButton) {
+ emit clicked(eventLabel_->text());
+ }
+
+ QWidget::mousePressEvent(event);
+}
diff --git a/src/popups/ReplyPopup.h b/src/popups/ReplyPopup.h
index 57c2bc8a..829f707b 100644
--- a/src/popups/ReplyPopup.h
+++ b/src/popups/ReplyPopup.h
@@ -3,11 +3,13 @@
#include <QHBoxLayout>
#include <QLabel>
#include <QPoint>
+#include <QVBoxLayout>
#include <QWidget>
#include "../AvatarProvider.h"
#include "../Cache.h"
#include "../ChatPage.h"
+#include "../ui/FlatButton.h"
#include "PopupItem.h"
class ReplyPopup : public QWidget
@@ -22,10 +24,22 @@ public slots:
protected:
void paintEvent(QPaintEvent *event) override;
+ void mousePressEvent(QMouseEvent *event) override;
signals:
void userSelected(const QString &user);
+ void clicked(const QString &text);
+ void cancel();
private:
- QVBoxLayout *layout_;
+ QHBoxLayout *topLayout_;
+ QVBoxLayout *mainLayout_;
+ QHBoxLayout *buttonLayout_;
+
+ UserItem *userItem_;
+ FlatButton *closeBtn_;
+ QLabel *msgLabel_;
+ QLabel *eventLabel_;
+
+ int buttonSize_;
};
|