qTox  Version: nightly | Commit: bc751c8e1cac455f9690654fcfe0f560d2d7dfdd
groupinviteform.cpp
Go to the documentation of this file.
1 /*
2  Copyright © 2015-2019 by The qTox Project Contributors
3 
4  This file is part of qTox, a Qt-based graphical interface for Tox.
5 
6  qTox is libre software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  qTox is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with qTox. If not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 #include "groupinviteform.h"
21 
22 #include "ui_mainwindow.h"
23 #include "src/core/core.h"
24 #include "src/model/groupinvite.h"
28 #include "src/widget/translator.h"
29 
30 #include <QDateTime>
31 #include <QDebug>
32 #include <QGroupBox>
33 #include <QLabel>
34 #include <QPushButton>
35 #include <QSignalMapper>
36 #include <QVBoxLayout>
37 #include <QWindow>
38 
39 #include <algorithm>
40 #include <tox/tox.h>
41 
49  : headWidget(new QWidget(this))
50  , headLabel(new QLabel(this))
51  , createButton(new QPushButton(this))
52  , inviteBox(new QGroupBox(this))
53  , scroll(new QScrollArea(this))
54 {
55  QVBoxLayout* layout = new QVBoxLayout(this);
56  connect(createButton, &QPushButton::clicked,
57  [this]() { emit groupCreate(TOX_CONFERENCE_TYPE_AV); });
58 
59  QWidget* innerWidget = new QWidget(scroll);
60  innerWidget->setLayout(new QVBoxLayout());
61  innerWidget->layout()->setAlignment(Qt::AlignTop);
62  scroll->setWidget(innerWidget);
63  scroll->setWidgetResizable(true);
64 
65  QVBoxLayout* inviteLayout = new QVBoxLayout(inviteBox);
66  inviteLayout->addWidget(scroll);
67 
68  layout->addWidget(createButton);
69  layout->addWidget(inviteBox);
70 
71  QFont bold;
72  bold.setBold(true);
73 
74  headLabel->setFont(bold);
75  QHBoxLayout* headLayout = new QHBoxLayout(headWidget);
76  headLayout->addWidget(headLabel);
77 
78  retranslateUi();
80 }
81 
83 {
85 }
86 
92 {
93  bool result = isVisible();
94  if (result) {
95  headWidget->window()->windowHandle()->alert(0);
96  }
97  return result;
98 }
99 
105 {
106  contentLayout->mainContent->layout()->addWidget(this);
107  contentLayout->mainHead->layout()->addWidget(headWidget);
108  QWidget::show();
109  headWidget->show();
110 }
111 
118 {
119  // supress duplicate invite messages
120  for (GroupInviteWidget* existing : invites) {
121  if (existing->getInviteInfo().getInvite() == inviteInfo.getInvite()) {
122  return false;
123  }
124  }
125 
126  GroupInviteWidget* widget = new GroupInviteWidget(this, inviteInfo);
127  scroll->widget()->layout()->addWidget(widget);
128  invites.append(widget);
129  connect(widget, &GroupInviteWidget::accepted, [this] (const GroupInvite& inviteInfo) {
130  deleteInviteWidget(inviteInfo);
131  emit groupInviteAccepted(inviteInfo);
132  });
133 
134  connect(widget, &GroupInviteWidget::rejected, [this] (const GroupInvite& inviteInfo) {
135  deleteInviteWidget(inviteInfo);
136  });
137  if (isVisible()) {
138  emit groupInvitesSeen();
139  return false;
140  }
141  return true;
142 }
143 
144 void GroupInviteForm::showEvent(QShowEvent* event)
145 {
146  QWidget::showEvent(event);
147  emit groupInvitesSeen();
148 }
149 
155 {
156  auto deletingWidget =
157  std::find_if(invites.begin(), invites.end(), [=](const GroupInviteWidget* widget) {
158  return inviteInfo == widget->getInviteInfo();
159  });
160  (*deletingWidget)->deleteLater();
161  scroll->widget()->layout()->removeWidget(*deletingWidget);
162  invites.erase(deletingWidget);
163 }
164 
166 {
167  headLabel->setText(tr("Groups"));
168  if (createButton) {
169  createButton->setText(tr("Create new group"));
170  }
171  inviteBox->setTitle(tr("Group invites"));
172  for (GroupInviteWidget* invite : invites) {
173  invite->retranslateUi();
174  }
175 }
GroupInviteWidget::accepted
void accepted(const GroupInvite &invite)
settings.h
groupinvitewidget.h
GroupInvite
This class contains information needed to create a group invite.
Definition: groupinvite.h:26
GroupInviteForm::groupInviteAccepted
void groupInviteAccepted(const GroupInvite &inviteInfo)
Translator::unregister
static void unregister(void *owner)
Unregisters all handlers of an owner.
Definition: translator.cpp:103
GroupInviteForm::GroupInviteForm
GroupInviteForm()
Definition: groupinviteform.cpp:48
GroupInviteForm::deleteInviteWidget
void deleteInviteWidget(const GroupInvite &inviteInfo)
Deletes accepted/declined group invite widget.
Definition: groupinviteform.cpp:154
GroupInviteWidget
This class shows information about single group invite and provides buttons to accept/reject it.
Definition: groupinvitewidget.h:31
GroupInviteForm::isShown
bool isShown() const
Detects that form is shown.
Definition: groupinviteform.cpp:91
GroupInviteForm::show
void show(ContentLayout *contentLayout)
Shows the form.
Definition: groupinviteform.cpp:104
GroupInviteWidget::rejected
void rejected(const GroupInvite &invite)
GroupInviteForm::groupCreate
void groupCreate(uint8_t type)
GroupInviteForm::~GroupInviteForm
~GroupInviteForm()
Definition: groupinviteform.cpp:82
GroupInviteForm::createButton
QPushButton * createButton
Definition: groupinviteform.h:66
ContentLayout::mainHead
QWidget * mainHead
Definition: contentlayout.h:37
groupinvite.h
Translator::registerHandler
static void registerHandler(const std::function< void()> &, void *owner)
Register a function to be called when the UI needs to be retranslated.
Definition: translator.cpp:93
GroupInviteForm::inviteBox
QGroupBox * inviteBox
Definition: groupinviteform.h:67
contentlayout.h
GroupInviteForm::retranslateUi
void retranslateUi()
Definition: groupinviteform.cpp:165
GroupInviteForm::addGroupInvite
bool addGroupInvite(const GroupInvite &inviteInfo)
Adds group invite.
Definition: groupinviteform.cpp:117
core.h
ContentLayout::mainContent
QWidget * mainContent
Definition: contentlayout.h:36
ContentLayout
Definition: contentlayout.h:25
GroupInviteForm::headLabel
QLabel * headLabel
Definition: groupinviteform.h:65
GroupInviteForm::showEvent
void showEvent(QShowEvent *event) final
Definition: groupinviteform.cpp:144
GroupInviteForm::scroll
QScrollArea * scroll
Definition: groupinviteform.h:69
GroupInviteForm::headWidget
QWidget * headWidget
Definition: groupinviteform.h:64
translator.h
GroupInvite::getInvite
QByteArray getInvite() const
Definition: groupinvite.cpp:52
GroupInviteForm::groupInvitesSeen
void groupInvitesSeen()
GroupInviteForm::invites
QList< GroupInviteWidget * > invites
Definition: groupinviteform.h:68
groupinviteform.h