qTox  Version: nightly | Commit: bc751c8e1cac455f9690654fcfe0f560d2d7dfdd
contentdialog.h
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 #pragma once
21 
22 #include "src/core/groupid.h"
23 #include "src/core/toxpk.h"
25 #include "src/model/status.h"
28 
29 #include <memory>
30 
31 template <typename K, typename V>
32 class QHash;
33 
34 class ContentLayout;
35 class Core;
36 class Friend;
37 class FriendChatroom;
38 class FriendListLayout;
39 class FriendWidget;
40 class GenericChatForm;
42 class Group;
43 class GroupChatroom;
44 class GroupWidget;
45 class QCloseEvent;
46 class QSplitter;
47 class QScrollArea;
48 
49 class ContentDialog : public ActivateDialog, public IDialogs
50 {
51  Q_OBJECT
52 public:
53  explicit ContentDialog(const Core& core, QWidget* parent = nullptr);
54  ~ContentDialog() override;
55 
56  FriendWidget* addFriend(std::shared_ptr<FriendChatroom> chatroom, GenericChatForm* form);
57  GroupWidget* addGroup(std::shared_ptr<GroupChatroom> chatroom, GenericChatForm* form);
58  void removeFriend(const ToxPk& friendPk) override;
59  void removeGroup(const GroupId& groupId) override;
60  int chatroomCount() const override;
61  void ensureSplitterVisible();
63 
64  void cycleContacts(bool forward, bool loop = true);
65  void onVideoShow(QSize size);
66  void onVideoHide();
67 
68  void addFriendWidget(FriendWidget* widget, Status::Status status);
70 
71  bool hasContact(const ContactId& contactId) const override;
72  bool isContactActive(const ContactId& contactId) const override;
73 
74  void focusContact(const ContactId& friendPk);
75  void updateFriendStatus(const ToxPk& friendPk, Status::Status status);
76  void updateContactStatusLight(const ContactId& contactId);
77 
78  void setStatusMessage(const ToxPk& friendPk, const QString& message);
79 
80 signals:
81  void friendDialogShown(const Friend* f);
82  void groupDialogShown(Group* g);
83  void addFriendDialog(Friend* frnd, ContentDialog* contentDialog);
84  void addGroupDialog(Group* group, ContentDialog* contentDialog);
85  void activated();
86  void willClose();
87  void connectFriendWidget(FriendWidget& friendWidget);
88 
89 public slots:
90  void reorderLayouts(bool newGroupOnTop);
91  void previousContact();
92  void nextContact();
93  void setUsername(const QString& newName);
94  void reloadTheme() override;
95 
96 protected:
97  bool event(QEvent* event) final;
98  void dragEnterEvent(QDragEnterEvent* event) final;
99  void dropEvent(QDropEvent* event) final;
100  void changeEvent(QEvent* event) override;
101  void resizeEvent(QResizeEvent* event) override;
102  void moveEvent(QMoveEvent* event) override;
103  void keyPressEvent(QKeyEvent* event) override;
104 
105 public slots:
106  void activate(GenericChatroomWidget* widget);
107 
108 private slots:
109  void updateFriendWidget(const ToxPk& friendPk, QString alias);
110  void onGroupchatPositionChanged(bool top);
111 
112 private:
113  void closeIfEmpty();
114  void closeEvent(QCloseEvent* event) override;
115 
116  void retranslateUi();
117  void saveDialogGeometry();
118  void saveSplitterState();
119  QLayout* nextLayout(QLayout* layout, bool forward) const;
120  int getCurrentLayout(QLayout*& layout);
122 
123 private:
125  QSplitter* splitter;
126  QScrollArea* friendScroll;
133 
136 
137  QString username;
138 };
ContentDialog::nextLayout
QLayout * nextLayout(QLayout *layout, bool forward) const
Find the next or previous layout in layout list.
Definition: contentdialog.cpp:699
ContentDialog::updateContactStatusLight
void updateContactStatusLight(const ContactId &contactId)
Definition: contentdialog.cpp:611
Status::Status
Status
Definition: status.h:28
ContentDialog::saveSplitterState
void saveSplitterState()
Save state of splitter between dialog and dialog list.
Definition: contentdialog.cpp:683
ContentDialog::nextContact
void nextContact()
Enable next contact.
Definition: contentdialog.cpp:423
GenericChatForm
Parent class for all chatforms. It's provide the minimum required UI elements and methods to work wit...
Definition: genericchatform.h:67
ContentDialog::isContactActive
bool isContactActive(const ContactId &contactId) const override
Definition: contentdialog.cpp:619
ContentDialog::dropEvent
void dropEvent(QDropEvent *event) final
Definition: contentdialog.cpp:505
ContentDialog::layouts
QList< QLayout * > layouts
Definition: contentdialog.h:124
ContentDialog::closeIfEmpty
void closeIfEmpty()
Definition: contentdialog.cpp:247
ContentDialog::onVideoShow
void onVideoShow(QSize size)
Definition: contentdialog.cpp:351
ContentDialog::onVideoHide
void onVideoHide()
Definition: contentdialog.cpp:363
idialogs.h
ContentDialog::removeGroup
void removeGroup(const GroupId &groupId) override
Definition: contentdialog.cpp:223
ContentDialog::resizeEvent
void resizeEvent(QResizeEvent *event) override
Definition: contentdialog.cpp:543
ContentDialog::chatroomCount
int chatroomCount() const override
Definition: contentdialog.cpp:254
ContentDialog::activated
void activated()
QList< QLayout * >
toxpk.h
GroupChatroom
Definition: groupchatroom.h:31
ContentDialog::changeEvent
void changeEvent(QEvent *event) override
Definition: contentdialog.cpp:533
ContentDialog::updateFriendStatus
void updateFriendStatus(const ToxPk &friendPk, Status::Status status)
Definition: contentdialog.cpp:605
ContentDialog::addFriendWidget
void addFriendWidget(FriendWidget *widget, Status::Status status)
Definition: contentdialog.cpp:713
ContentDialog::reorderLayouts
void reorderLayouts(bool newGroupOnTop)
Update layouts order according to settings.
Definition: contentdialog.cpp:402
ContentDialog::willClose
void willClose()
ContentDialog::activeChatroomWidget
GenericChatroomWidget * activeChatroomWidget
Definition: contentdialog.h:130
ContentDialog::friendLayout
FriendListLayout * friendLayout
Definition: contentdialog.h:127
ContentDialog::retranslateUi
void retranslateUi()
Retranslate all elements in the form.
Definition: contentdialog.cpp:667
ContentDialog::ensureSplitterVisible
void ensureSplitterVisible()
Definition: contentdialog.cpp:259
ContentDialog::friendDialogShown
void friendDialogShown(const Friend *f)
GenericChatItemLayout
Definition: genericchatitemlayout.h:28
ContentDialog::isActiveWidget
bool isActiveWidget(GenericChatroomWidget *widget)
Definition: contentdialog.cpp:718
ContentDialog::setUsername
void setUsername(const QString &newName)
Update username to show in the title.
Definition: contentdialog.cpp:432
ContentDialog
Definition: contentdialog.h:49
HistMessageContentType::message
@ message
ContentDialog::updateTitleAndStatusIcon
void updateTitleAndStatusIcon()
Update window title and icon.
Definition: contentdialog.cpp:379
ToxPk
This class represents a Tox Public Key, which is a part of Tox ID.
Definition: toxpk.h:26
Friend
Definition: friend.h:31
ContentDialog::reloadTheme
void reloadTheme() override
Definition: contentdialog.cpp:438
ContentDialog::getCurrentLayout
int getCurrentLayout(QLayout *&layout)
Get current layout and index of current wiget in it. Current layout – layout contains activated widge...
Definition: contentdialog.cpp:275
ContentDialog::moveEvent
void moveEvent(QMoveEvent *event) override
Definition: contentdialog.cpp:549
ContentDialog::keyPressEvent
void keyPressEvent(QKeyEvent *event) override
Definition: contentdialog.cpp:555
IDialogs
Definition: idialogs.h:26
ContentDialog::addFriendDialog
void addFriendDialog(Friend *frnd, ContentDialog *contentDialog)
ContentDialog::updateFriendWidget
void updateFriendWidget(const ToxPk &friendPk, QString alias)
Update friend widget name and position.
Definition: contentdialog.cpp:643
ContentDialog::onGroupchatPositionChanged
void onGroupchatPositionChanged(bool top)
Handler of groupchatPositionChanged action. Move group layout on the top or on the buttom.
Definition: contentdialog.cpp:658
QHash
Definition: friendlist.h:27
FriendListLayout
Definition: friendlistlayout.h:30
ContentDialog::connectFriendWidget
void connectFriendWidget(FriendWidget &friendWidget)
ContentDialog::cycleContacts
void cycleContacts(bool forward, bool loop=true)
Activate next/previous contact.
Definition: contentdialog.cpp:304
ContentDialog::focusContact
void focusContact(const ContactId &friendPk)
Definition: contentdialog.cpp:563
ContentDialog::videoCount
int videoCount
Definition: contentdialog.h:132
GroupWidget
Definition: groupwidget.h:30
ContentDialog::setStatusMessage
void setStatusMessage(const ToxPk &friendPk, const QString &message)
Definition: contentdialog.cpp:630
ContentDialog::friendScroll
QScrollArea * friendScroll
Definition: contentdialog.h:126
ContentDialog::dragEnterEvent
void dragEnterEvent(QDragEnterEvent *event) final
Definition: contentdialog.cpp:472
ContentDialog::groupLayout
GenericChatItemLayout groupLayout
Definition: contentdialog.h:128
ContentDialog::contentLayout
ContentLayout * contentLayout
Definition: contentdialog.h:129
groupid.h
GroupId
This class represents a long term persistent group identifier.
Definition: groupid.h:26
Group
Definition: group.h:34
ContentDialog::addGroup
GroupWidget * addGroup(std::shared_ptr< GroupChatroom > chatroom, GenericChatForm *form)
Definition: contentdialog.cpp:176
ContentDialog::previousContact
void previousContact()
Definition: contentdialog.cpp:415
ContentDialog::username
QString username
Definition: contentdialog.h:137
ContentDialog::groupDialogShown
void groupDialogShown(Group *g)
ContentDialog::contactWidgets
QHash< const ContactId &, GenericChatroomWidget * > contactWidgets
Definition: contentdialog.h:134
ContentDialog::contactChatForms
QHash< const ContactId &, GenericChatForm * > contactChatForms
Definition: contentdialog.h:135
ContentDialog::closeEvent
void closeEvent(QCloseEvent *event) override
Definition: contentdialog.cpp:148
activatedialog.h
ContactId
Definition: contactid.h:28
ContentDialog::removeFriend
void removeFriend(const ToxPk &friendPk) override
Definition: contentdialog.cpp:194
ContentDialog::focusCommon
void focusCommon(const ContactId &id, QHash< const ContactId &, GenericChatroomWidget * > list)
Definition: contentdialog.cpp:568
ActivateDialog
Definition: activatedialog.h:24
ContentDialog::splitter
QSplitter * splitter
Definition: contentdialog.h:125
ContentDialog::videoSurfaceSize
QSize videoSurfaceSize
Definition: contentdialog.h:131
genericchatitemlayout.h
ContentDialog::event
bool event(QEvent *event) final
Definition: contentdialog.cpp:444
ContentLayout
Definition: contentlayout.h:25
ContentDialog::~ContentDialog
~ContentDialog() override
Definition: contentdialog.cpp:143
ContentDialog::addGroupDialog
void addGroupDialog(Group *group, ContentDialog *contentDialog)
ContentDialog::activate
void activate(GenericChatroomWidget *widget)
Show ContentDialog, activate chatroom widget.
Definition: contentdialog.cpp:582
GenericChatroomWidget
Definition: genericchatroomwidget.h:32
ContentDialog::addFriend
FriendWidget * addFriend(std::shared_ptr< FriendChatroom > chatroom, GenericChatForm *form)
Definition: contentdialog.cpp:154
ContentDialog::saveDialogGeometry
void saveDialogGeometry()
Save size of dialog window.
Definition: contentdialog.cpp:675
status.h
FriendWidget
Definition: friendwidget.h:33
ContentDialog::hasContact
bool hasContact(const ContactId &contactId) const override
Definition: contentdialog.cpp:688
Core
Definition: core.h:59
ContentDialog::ContentDialog
ContentDialog(const Core &core, QWidget *parent=nullptr)
Definition: contentdialog.cpp:54
FriendChatroom
Definition: friendchatroom.h:45