2015-06-19 22:58:48 +08:00
|
|
|
/*
|
|
|
|
Copyright © 2015 by The qTox Project
|
|
|
|
|
|
|
|
This file is part of qTox, a Qt-based graphical interface for Tox.
|
|
|
|
|
|
|
|
qTox is libre software: you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
qTox is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with qTox. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef CONTENTDIALOG_H
|
|
|
|
#define CONTENTDIALOG_H
|
|
|
|
|
|
|
|
#include <QDialog>
|
|
|
|
#include <tuple>
|
2015-06-23 02:01:50 +08:00
|
|
|
#include "src/core/corestructs.h"
|
2015-06-30 00:26:49 +08:00
|
|
|
#include "src/widget/genericchatitemlayout.h"
|
2015-06-19 22:58:48 +08:00
|
|
|
|
|
|
|
template <typename K, typename V> class QHash;
|
|
|
|
|
|
|
|
class QSplitter;
|
|
|
|
class QVBoxLayout;
|
|
|
|
class ContentLayout;
|
|
|
|
class GenericChatroomWidget;
|
2015-06-23 02:01:50 +08:00
|
|
|
class FriendWidget;
|
|
|
|
class GroupWidget;
|
2015-06-27 04:13:20 +08:00
|
|
|
class FriendListLayout;
|
2015-06-30 00:26:49 +08:00
|
|
|
class SettingsWidget;
|
2015-06-19 22:58:48 +08:00
|
|
|
|
|
|
|
class ContentDialog : public QDialog
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
public:
|
2015-06-30 00:26:49 +08:00
|
|
|
ContentDialog(SettingsWidget* settingsWidget, QWidget* parent = 0);
|
2015-06-19 22:58:48 +08:00
|
|
|
~ContentDialog();
|
2015-06-23 02:01:50 +08:00
|
|
|
|
|
|
|
FriendWidget* addFriend(int friendId, QString id);
|
|
|
|
GroupWidget* addGroup(int groupId, const QString& name);
|
|
|
|
void removeFriend(int friendId);
|
|
|
|
void removeGroup(int groupId);
|
|
|
|
bool hasFriendWidget(int friendId, GenericChatroomWidget* chatroomWidget);
|
|
|
|
bool hasGroupWidget(int groupId, GenericChatroomWidget* chatroomWidget);
|
|
|
|
int chatroomWidgetCount() const;
|
2015-07-01 19:49:36 +08:00
|
|
|
void ensureSplitterVisible();
|
2015-06-23 02:01:50 +08:00
|
|
|
|
2015-06-30 00:26:49 +08:00
|
|
|
void cycleContacts(bool forward, bool loop = true);
|
|
|
|
|
2015-06-19 22:58:48 +08:00
|
|
|
static ContentDialog* current();
|
2015-06-23 02:01:50 +08:00
|
|
|
static bool existsFriendWidget(int friendId, bool focus);
|
|
|
|
static bool existsGroupWidget(int groupId, bool focus);
|
|
|
|
static void updateFriendStatus(int friendId);
|
|
|
|
static void updateFriendStatusMessage(int friendId, const QString &message);
|
|
|
|
static void updateGroupStatus(int groupId);
|
|
|
|
static bool isFriendWidgetActive(int friendId);
|
|
|
|
static bool isGroupWidgetActive(int groupId);
|
|
|
|
static ContentDialog* getFriendDialog(int friendId);
|
|
|
|
static ContentDialog* getGroupDialog(int groupId);
|
2015-06-19 22:58:48 +08:00
|
|
|
|
2015-06-30 00:26:49 +08:00
|
|
|
public slots:
|
|
|
|
void previousContact();
|
|
|
|
void nextContact();
|
|
|
|
|
2015-06-19 22:58:48 +08:00
|
|
|
protected:
|
2015-07-01 19:49:36 +08:00
|
|
|
bool event(QEvent* event) final override;
|
2015-06-23 02:01:50 +08:00
|
|
|
void dragEnterEvent(QDragEnterEvent* event) final override;
|
|
|
|
void dropEvent(QDropEvent* event) final override;
|
|
|
|
void changeEvent(QEvent* event) override;
|
2015-06-19 22:58:48 +08:00
|
|
|
void resizeEvent(QResizeEvent* event) override;
|
|
|
|
|
|
|
|
private slots:
|
2015-06-23 02:01:50 +08:00
|
|
|
void onChatroomWidgetClicked(GenericChatroomWidget* widget, bool group);
|
|
|
|
void updateFriendWidget(FriendWidget* w, Status s);
|
|
|
|
void updateGroupWidget(GroupWidget* w);
|
2015-06-30 00:26:49 +08:00
|
|
|
void onGroupchatPositionChanged(bool top);
|
2015-06-19 22:58:48 +08:00
|
|
|
|
|
|
|
private:
|
|
|
|
void saveDialogGeometry();
|
|
|
|
void saveSplitterState();
|
2015-06-30 00:26:49 +08:00
|
|
|
QLayout* nextLayout(QLayout* layout, bool forward) const;
|
2015-06-19 22:58:48 +08:00
|
|
|
|
2015-06-23 02:01:50 +08:00
|
|
|
void remove(int id, const QHash<int, std::tuple<ContentDialog*, GenericChatroomWidget*>>& list);
|
|
|
|
bool hasWidget(int id, GenericChatroomWidget* chatroomWidget, const QHash<int, std::tuple<ContentDialog*, GenericChatroomWidget*>>& list);
|
|
|
|
static bool existsWidget(int id, bool focus, const QHash<int, std::tuple<ContentDialog*, GenericChatroomWidget*>>& list);
|
|
|
|
static void updateStatus(int id, const QHash<int, std::tuple<ContentDialog*, GenericChatroomWidget*>>& list);
|
|
|
|
static bool isWidgetActive(int id, const QHash<int, std::tuple<ContentDialog*, GenericChatroomWidget*>>& list);
|
|
|
|
static ContentDialog* getDialog(int id, const QHash<int, std::tuple<ContentDialog*, GenericChatroomWidget*>>& list);
|
|
|
|
|
2015-06-19 22:58:48 +08:00
|
|
|
QSplitter* splitter;
|
2015-06-27 04:13:20 +08:00
|
|
|
FriendListLayout* friendLayout;
|
2015-06-30 00:26:49 +08:00
|
|
|
GenericChatItemLayout groupLayout;
|
2015-06-19 22:58:48 +08:00
|
|
|
ContentLayout* contentLayout;
|
|
|
|
GenericChatroomWidget* activeChatroomWidget;
|
2015-06-30 00:26:49 +08:00
|
|
|
SettingsWidget* settingsWidget;
|
2015-06-19 22:58:48 +08:00
|
|
|
static ContentDialog* currentDialog;
|
|
|
|
static QHash<int, std::tuple<ContentDialog*, GenericChatroomWidget*>> friendList;
|
2015-06-23 02:01:50 +08:00
|
|
|
static QHash<int, std::tuple<ContentDialog*, GenericChatroomWidget*>> groupList;
|
2015-06-19 22:58:48 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif // CONTENTDIALOG_H
|