forked from mirror/nheko
parent
19bae2a2e6
commit
ef0b0f6879
@ -0,0 +1,27 @@ |
|||||||
|
#pragma once |
||||||
|
|
||||||
|
#include <QLabel> |
||||||
|
#include <QWidget> |
||||||
|
|
||||||
|
#include "mtx.hpp" |
||||||
|
|
||||||
|
class FlatButton; |
||||||
|
|
||||||
|
class InviteeItem : public QWidget |
||||||
|
{ |
||||||
|
Q_OBJECT |
||||||
|
|
||||||
|
public: |
||||||
|
InviteeItem(mtx::identifiers::User user, QWidget *parent = nullptr); |
||||||
|
|
||||||
|
QString userID() { return user_; } |
||||||
|
|
||||||
|
signals: |
||||||
|
void removeItem(); |
||||||
|
|
||||||
|
private: |
||||||
|
QString user_; |
||||||
|
|
||||||
|
QLabel *name_; |
||||||
|
FlatButton *removeUserBtn_; |
||||||
|
}; |
@ -0,0 +1,41 @@ |
|||||||
|
#pragma once |
||||||
|
|
||||||
|
#include <QFrame> |
||||||
|
#include <QLabel> |
||||||
|
#include <QListWidgetItem> |
||||||
|
#include <QStringList> |
||||||
|
|
||||||
|
class FlatButton; |
||||||
|
class TextField; |
||||||
|
class QListWidget; |
||||||
|
|
||||||
|
namespace dialogs { |
||||||
|
|
||||||
|
class InviteUsers : public QFrame |
||||||
|
{ |
||||||
|
Q_OBJECT |
||||||
|
public: |
||||||
|
explicit InviteUsers(QWidget *parent = nullptr); |
||||||
|
|
||||||
|
protected: |
||||||
|
void paintEvent(QPaintEvent *event) override; |
||||||
|
|
||||||
|
signals: |
||||||
|
void closing(bool isLeaving, QStringList invitees); |
||||||
|
|
||||||
|
private slots: |
||||||
|
void removeInvitee(QListWidgetItem *item); |
||||||
|
|
||||||
|
private: |
||||||
|
void addUser(); |
||||||
|
QStringList invitedUsers() const; |
||||||
|
|
||||||
|
FlatButton *confirmBtn_; |
||||||
|
FlatButton *cancelBtn_; |
||||||
|
|
||||||
|
TextField *inviteeInput_; |
||||||
|
QLabel *errorLabel_; |
||||||
|
|
||||||
|
QListWidget *inviteeList_; |
||||||
|
}; |
||||||
|
} // dialogs
|
After Width: | Height: | Size: 533 B |
After Width: | Height: | Size: 699 B |
@ -0,0 +1,37 @@ |
|||||||
|
#include <QHBoxLayout> |
||||||
|
|
||||||
|
#include "FlatButton.h" |
||||||
|
#include "InviteeItem.h" |
||||||
|
#include "Theme.h" |
||||||
|
|
||||||
|
constexpr int SidePadding = 10; |
||||||
|
constexpr int IconSize = 13; |
||||||
|
|
||||||
|
InviteeItem::InviteeItem(mtx::identifiers::User user, QWidget *parent) |
||||||
|
: QWidget{parent} |
||||||
|
, user_{QString::fromStdString(user.toString())} |
||||||
|
{ |
||||||
|
auto topLayout_ = new QHBoxLayout(this); |
||||||
|
topLayout_->setSpacing(0); |
||||||
|
topLayout_->setContentsMargins(SidePadding, 0, 3 * SidePadding, 0); |
||||||
|
|
||||||
|
QFont font; |
||||||
|
font.setPixelSize(15); |
||||||
|
|
||||||
|
name_ = new QLabel(user_, this); |
||||||
|
name_->setFont(font); |
||||||
|
|
||||||
|
QIcon removeUserIcon; |
||||||
|
removeUserIcon.addFile(":/icons/icons/ui/remove-symbol.png"); |
||||||
|
|
||||||
|
removeUserBtn_ = new FlatButton(this); |
||||||
|
removeUserBtn_->setIcon(removeUserIcon); |
||||||
|
removeUserBtn_->setIconSize(QSize(IconSize, IconSize)); |
||||||
|
removeUserBtn_->setFixedSize(QSize(IconSize, IconSize)); |
||||||
|
removeUserBtn_->setRippleStyle(ui::RippleStyle::NoRipple); |
||||||
|
|
||||||
|
topLayout_->addWidget(name_); |
||||||
|
topLayout_->addWidget(removeUserBtn_); |
||||||
|
|
||||||
|
connect(removeUserBtn_, &FlatButton::clicked, this, &InviteeItem::removeItem); |
||||||
|
} |
@ -0,0 +1,149 @@ |
|||||||
|
#include <QDebug> |
||||||
|
#include <QIcon> |
||||||
|
#include <QListWidget> |
||||||
|
#include <QListWidgetItem> |
||||||
|
#include <QStyleOption> |
||||||
|
#include <QTimer> |
||||||
|
#include <QVBoxLayout> |
||||||
|
|
||||||
|
#include "Config.h" |
||||||
|
#include "FlatButton.h" |
||||||
|
#include "TextField.h" |
||||||
|
|
||||||
|
#include "InviteeItem.h" |
||||||
|
#include "dialogs/InviteUsers.h" |
||||||
|
|
||||||
|
#include "mtx.hpp" |
||||||
|
|
||||||
|
using namespace dialogs; |
||||||
|
|
||||||
|
InviteUsers::InviteUsers(QWidget *parent) |
||||||
|
: QFrame(parent) |
||||||
|
{ |
||||||
|
setMaximumSize(400, 350); |
||||||
|
|
||||||
|
auto layout = new QVBoxLayout(this); |
||||||
|
layout->setSpacing(30); |
||||||
|
layout->setMargin(20); |
||||||
|
|
||||||
|
auto buttonLayout = new QHBoxLayout(); |
||||||
|
buttonLayout->setSpacing(0); |
||||||
|
buttonLayout->setMargin(0); |
||||||
|
|
||||||
|
confirmBtn_ = new FlatButton("INVITE", this); |
||||||
|
confirmBtn_->setFontSize(conf::btn::fontSize); |
||||||
|
|
||||||
|
cancelBtn_ = new FlatButton(tr("CANCEL"), this); |
||||||
|
cancelBtn_->setFontSize(conf::btn::fontSize); |
||||||
|
|
||||||
|
buttonLayout->addStretch(1); |
||||||
|
buttonLayout->addWidget(confirmBtn_); |
||||||
|
buttonLayout->addWidget(cancelBtn_); |
||||||
|
|
||||||
|
QFont font; |
||||||
|
font.setPixelSize(conf::headerFontSize); |
||||||
|
|
||||||
|
inviteeInput_ = new TextField(this); |
||||||
|
inviteeInput_->setLabel(tr("User ID to invite")); |
||||||
|
|
||||||
|
inviteeList_ = new QListWidget; |
||||||
|
inviteeList_->setFrameStyle(QFrame::NoFrame); |
||||||
|
inviteeList_->setSelectionMode(QAbstractItemView::NoSelection); |
||||||
|
inviteeList_->setAttribute(Qt::WA_MacShowFocusRect, 0); |
||||||
|
inviteeList_->setSpacing(5); |
||||||
|
|
||||||
|
errorLabel_ = new QLabel(this); |
||||||
|
errorLabel_->setAlignment(Qt::AlignCenter); |
||||||
|
font.setPixelSize(12); |
||||||
|
errorLabel_->setFont(font); |
||||||
|
|
||||||
|
layout->addWidget(inviteeInput_); |
||||||
|
layout->addWidget(errorLabel_); |
||||||
|
layout->addWidget(inviteeList_); |
||||||
|
layout->addLayout(buttonLayout); |
||||||
|
|
||||||
|
connect(inviteeInput_, &TextField::returnPressed, this, &InviteUsers::addUser); |
||||||
|
connect(confirmBtn_, &QPushButton::clicked, [=]() { |
||||||
|
emit closing(true, invitedUsers()); |
||||||
|
|
||||||
|
inviteeInput_->clear(); |
||||||
|
inviteeList_->clear(); |
||||||
|
errorLabel_->hide(); |
||||||
|
}); |
||||||
|
|
||||||
|
connect(cancelBtn_, &QPushButton::clicked, [=]() { |
||||||
|
QStringList emptyList; |
||||||
|
emit closing(false, emptyList); |
||||||
|
|
||||||
|
inviteeInput_->clear(); |
||||||
|
inviteeList_->clear(); |
||||||
|
errorLabel_->hide(); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
void |
||||||
|
InviteUsers::addUser() |
||||||
|
{ |
||||||
|
auto user_id = inviteeInput_->text(); |
||||||
|
|
||||||
|
try { |
||||||
|
namespace ids = mtx::identifiers; |
||||||
|
auto user = ids::parse<ids::User>(user_id.toStdString()); |
||||||
|
|
||||||
|
auto item = new QListWidgetItem(inviteeList_); |
||||||
|
auto invitee = new InviteeItem(user, this); |
||||||
|
|
||||||
|
item->setSizeHint(invitee->minimumSizeHint()); |
||||||
|
item->setFlags(Qt::NoItemFlags); |
||||||
|
item->setTextAlignment(Qt::AlignCenter); |
||||||
|
|
||||||
|
inviteeList_->setItemWidget(item, invitee); |
||||||
|
|
||||||
|
connect(invitee, &InviteeItem::removeItem, this, [this, item]() { |
||||||
|
emit removeInvitee(item); |
||||||
|
}); |
||||||
|
|
||||||
|
errorLabel_->hide(); |
||||||
|
inviteeInput_->clear(); |
||||||
|
} catch (std::exception &e) { |
||||||
|
errorLabel_->setText(e.what()); |
||||||
|
errorLabel_->show(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void |
||||||
|
InviteUsers::removeInvitee(QListWidgetItem *item) |
||||||
|
{ |
||||||
|
int row = inviteeList_->row(item); |
||||||
|
auto widget = inviteeList_->takeItem(row); |
||||||
|
|
||||||
|
inviteeList_->removeItemWidget(widget); |
||||||
|
} |
||||||
|
|
||||||
|
void |
||||||
|
InviteUsers::paintEvent(QPaintEvent *) |
||||||
|
{ |
||||||
|
QStyleOption opt; |
||||||
|
opt.init(this); |
||||||
|
QPainter p(this); |
||||||
|
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); |
||||||
|
} |
||||||
|
|
||||||
|
QStringList |
||||||
|
InviteUsers::invitedUsers() const |
||||||
|
{ |
||||||
|
QStringList users; |
||||||
|
|
||||||
|
for (int ii = 0; ii < inviteeList_->count(); ++ii) { |
||||||
|
auto item = inviteeList_->item(ii); |
||||||
|
auto widget = inviteeList_->itemWidget(item); |
||||||
|
auto invitee = qobject_cast<InviteeItem *>(widget); |
||||||
|
|
||||||
|
if (invitee) |
||||||
|
users << invitee->userID(); |
||||||
|
else |
||||||
|
qDebug() << "Cast InviteeItem failed"; |
||||||
|
} |
||||||
|
|
||||||
|
return users; |
||||||
|
} |
Loading…
Reference in new issue