summary refs log tree commit diff
path: root/src/dialogs/CreateRoom.cpp
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2018-07-17 16:37:25 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2018-07-17 16:37:25 +0300
commit0e814da91c8e041897a4c3f7e6e9234bbc7c6f7a (patch)
tree21f655d30630fe77ba48d07e4b357e2b6c6a5730 /src/dialogs/CreateRoom.cpp
parentMerge pull request #372 from bebehei/notification (diff)
downloadnheko-0e814da91c8e041897a4c3f7e6e9234bbc7c6f7a.tar.xz
Move all files under src/
Diffstat (limited to 'src/dialogs/CreateRoom.cpp')
-rw-r--r--src/dialogs/CreateRoom.cpp162
1 files changed, 162 insertions, 0 deletions
diff --git a/src/dialogs/CreateRoom.cpp b/src/dialogs/CreateRoom.cpp
new file mode 100644

index 00000000..3c538b49 --- /dev/null +++ b/src/dialogs/CreateRoom.cpp
@@ -0,0 +1,162 @@ +#include <QComboBox> +#include <QLabel> +#include <QStyleOption> +#include <QVBoxLayout> + +#include "dialogs/CreateRoom.h" + +#include "Config.h" +#include "ui/FlatButton.h" +#include "ui/TextField.h" +#include "ui/Theme.h" +#include "ui/ToggleButton.h" + +using namespace dialogs; + +CreateRoom::CreateRoom(QWidget *parent) + : QFrame(parent) +{ + setMaximumSize(520, 600); + + auto layout = new QVBoxLayout(this); + layout->setSpacing(30); + layout->setMargin(20); + + auto buttonLayout = new QHBoxLayout(); + buttonLayout->setSpacing(0); + buttonLayout->setMargin(0); + + confirmBtn_ = new FlatButton("CREATE", 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); + + nameInput_ = new TextField(this); + nameInput_->setLabel(tr("Name")); + + topicInput_ = new TextField(this); + topicInput_->setLabel(tr("Topic")); + + aliasInput_ = new TextField(this); + aliasInput_->setLabel(tr("Alias")); + + auto visibilityLayout = new QHBoxLayout; + visibilityLayout->setContentsMargins(0, 10, 0, 10); + + auto presetLayout = new QHBoxLayout; + presetLayout->setContentsMargins(0, 10, 0, 10); + + auto visibilityLabel = new QLabel(tr("Room Visibility"), this); + visibilityLabel->setStyleSheet(QString("font-size: %1px;").arg(conf::dialogs::labelSize)); + visibilityCombo_ = new QComboBox(this); + visibilityCombo_->addItem("Private"); + visibilityCombo_->addItem("Public"); + + visibilityLayout->addWidget(visibilityLabel); + visibilityLayout->addWidget(visibilityCombo_, 0, Qt::AlignBottom | Qt::AlignRight); + + auto presetLabel = new QLabel(tr("Room Preset"), this); + presetLabel->setStyleSheet(QString("font-size: %1px;").arg(conf::dialogs::labelSize)); + presetCombo_ = new QComboBox(this); + presetCombo_->addItem("Private Chat"); + presetCombo_->addItem("Public Chat"); + presetCombo_->addItem("Trusted Private Chat"); + + presetLayout->addWidget(presetLabel); + presetLayout->addWidget(presetCombo_, 0, Qt::AlignBottom | Qt::AlignRight); + + auto directLabel_ = new QLabel(tr("Direct Chat"), this); + directLabel_->setStyleSheet(QString("font-size: %1px;").arg(conf::dialogs::labelSize)); + directToggle_ = new Toggle(this); + directToggle_->setActiveColor(QColor("#38A3D8")); + directToggle_->setInactiveColor(QColor("gray")); + directToggle_->setState(true); + + auto directLayout = new QHBoxLayout; + directLayout->setContentsMargins(0, 10, 0, 10); + directLayout->addWidget(directLabel_); + directLayout->addWidget(directToggle_, 0, Qt::AlignBottom | Qt::AlignRight); + + layout->addWidget(nameInput_); + layout->addWidget(topicInput_); + layout->addWidget(aliasInput_); + layout->addLayout(visibilityLayout); + layout->addLayout(presetLayout); + layout->addLayout(directLayout); + layout->addLayout(buttonLayout); + + connect(confirmBtn_, &QPushButton::clicked, this, [this]() { + request_.name = nameInput_->text().toStdString(); + request_.topic = topicInput_->text().toStdString(); + request_.room_alias_name = aliasInput_->text().toStdString(); + + emit closing(true, request_); + + clearFields(); + }); + + connect(cancelBtn_, &QPushButton::clicked, this, [this]() { + emit closing(false, request_); + + clearFields(); + }); + + connect(visibilityCombo_, + static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::activated), + [this](const QString &text) { + if (text == "Private") { + request_.visibility = mtx::requests::Visibility::Private; + } else { + request_.visibility = mtx::requests::Visibility::Public; + } + }); + + connect(presetCombo_, + static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::activated), + [this](const QString &text) { + if (text == "Private Chat") { + request_.preset = mtx::requests::Preset::PrivateChat; + } else if (text == "Public Chat") { + request_.preset = mtx::requests::Preset::PublicChat; + } else { + request_.preset = mtx::requests::Preset::TrustedPrivateChat; + } + }); + + connect(directToggle_, &Toggle::toggled, this, [this](bool isDisabled) { + request_.is_direct = !isDisabled; + }); +} + +void +CreateRoom::clearFields() +{ + nameInput_->clear(); + topicInput_->clear(); + aliasInput_->clear(); +} + +void +CreateRoom::paintEvent(QPaintEvent *) +{ + QStyleOption opt; + opt.init(this); + QPainter p(this); + style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); +} + +void +CreateRoom::showEvent(QShowEvent *event) +{ + nameInput_->setFocus(); + + QFrame::showEvent(event); +}