mirror of
https://github.com/qTox/qTox.git
synced 2024-03-22 14:00:36 +08:00
refactor(circlewidget): link CircleWidget ContentDialogs using signals
This commit is contained in:
parent
adab063a49
commit
7fca93bde9
|
@ -113,8 +113,8 @@ void CircleWidget::contextMenuEvent(QContextMenuEvent* event)
|
||||||
|
|
||||||
circleList.remove(replacedCircle);
|
circleList.remove(replacedCircle);
|
||||||
} else if (selectedItem == openAction) {
|
} else if (selectedItem == openAction) {
|
||||||
ContentDialog* dialog = Widget::getInstance()->createContentDialog();
|
ContentDialog* dialog = new ContentDialog();
|
||||||
|
emit newContentDialog(*dialog);
|
||||||
for (int i = 0; i < friendOnlineLayout()->count(); ++i) {
|
for (int i = 0; i < friendOnlineLayout()->count(); ++i) {
|
||||||
QWidget* const widget = friendOnlineLayout()->itemAt(i)->widget();
|
QWidget* const widget = friendOnlineLayout()->itemAt(i)->widget();
|
||||||
FriendWidget* const friendWidget = qobject_cast<FriendWidget*>(widget);
|
FriendWidget* const friendWidget = qobject_cast<FriendWidget*>(widget);
|
||||||
|
|
|
@ -22,6 +22,8 @@
|
||||||
|
|
||||||
#include "categorywidget.h"
|
#include "categorywidget.h"
|
||||||
|
|
||||||
|
class ContentDialog;
|
||||||
|
|
||||||
class CircleWidget final : public CategoryWidget
|
class CircleWidget final : public CategoryWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
@ -35,6 +37,7 @@ public:
|
||||||
signals:
|
signals:
|
||||||
void renameRequested(CircleWidget* circleWidget, const QString& newName);
|
void renameRequested(CircleWidget* circleWidget, const QString& newName);
|
||||||
void searchCircle(CircleWidget& circletWidget);
|
void searchCircle(CircleWidget& circletWidget);
|
||||||
|
void newContentDialog(ContentDialog& contentDialog);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void contextMenuEvent(QContextMenuEvent* event) final override;
|
void contextMenuEvent(QContextMenuEvent* event) final override;
|
||||||
|
|
|
@ -19,17 +19,16 @@
|
||||||
|
|
||||||
#include "contentdialogmanager.h"
|
#include "contentdialogmanager.h"
|
||||||
|
|
||||||
#include "src/widget/friendwidget.h"
|
|
||||||
#include "src/widget/groupwidget.h"
|
|
||||||
#include "src/friendlist.h"
|
#include "src/friendlist.h"
|
||||||
#include "src/grouplist.h"
|
#include "src/grouplist.h"
|
||||||
#include "src/model/friend.h"
|
#include "src/model/friend.h"
|
||||||
#include "src/model/group.h"
|
#include "src/model/group.h"
|
||||||
|
#include "src/widget/friendwidget.h"
|
||||||
|
#include "src/widget/groupwidget.h"
|
||||||
|
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
|
|
||||||
namespace
|
namespace {
|
||||||
{
|
|
||||||
void removeDialog(ContentDialog* dialog, QHash<const ContactId&, ContentDialog*>& dialogs)
|
void removeDialog(ContentDialog* dialog, QHash<const ContactId&, ContentDialog*>& dialogs)
|
||||||
{
|
{
|
||||||
for (auto it = dialogs.begin(); it != dialogs.end();) {
|
for (auto it = dialogs.begin(); it != dialogs.end();) {
|
||||||
|
@ -40,7 +39,7 @@ void removeDialog(ContentDialog* dialog, QHash<const ContactId&, ContentDialog*>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} // namespace
|
||||||
|
|
||||||
ContentDialogManager* ContentDialogManager::instance;
|
ContentDialogManager* ContentDialogManager::instance;
|
||||||
|
|
||||||
|
@ -60,7 +59,8 @@ bool ContentDialogManager::contactWidgetExists(const ContactId& contactId)
|
||||||
}
|
}
|
||||||
|
|
||||||
FriendWidget* ContentDialogManager::addFriendToDialog(ContentDialog* dialog,
|
FriendWidget* ContentDialogManager::addFriendToDialog(ContentDialog* dialog,
|
||||||
std::shared_ptr<FriendChatroom> chatroom, GenericChatForm* form)
|
std::shared_ptr<FriendChatroom> chatroom,
|
||||||
|
GenericChatForm* form)
|
||||||
{
|
{
|
||||||
auto friendWidget = dialog->addFriend(chatroom, form);
|
auto friendWidget = dialog->addFriend(chatroom, form);
|
||||||
const auto friendPk = friendWidget->getFriend()->getPublicKey();
|
const auto friendPk = friendWidget->getFriend()->getPublicKey();
|
||||||
|
@ -75,7 +75,8 @@ FriendWidget* ContentDialogManager::addFriendToDialog(ContentDialog* dialog,
|
||||||
}
|
}
|
||||||
|
|
||||||
GroupWidget* ContentDialogManager::addGroupToDialog(ContentDialog* dialog,
|
GroupWidget* ContentDialogManager::addGroupToDialog(ContentDialog* dialog,
|
||||||
std::shared_ptr<GroupChatroom> chatroom, GenericChatForm* form)
|
std::shared_ptr<GroupChatroom> chatroom,
|
||||||
|
GenericChatForm* form)
|
||||||
{
|
{
|
||||||
auto groupWidget = dialog->addGroup(chatroom, form);
|
auto groupWidget = dialog->addGroup(chatroom, form);
|
||||||
const auto& groupId = groupWidget->getGroup()->getPersistentId();
|
const auto& groupId = groupWidget->getGroup()->getPersistentId();
|
||||||
|
@ -103,7 +104,8 @@ void ContentDialogManager::focusContact(const ContactId& contactId)
|
||||||
* @param list List with dialogs
|
* @param list List with dialogs
|
||||||
* @return ContentDialog if found, nullptr otherwise
|
* @return ContentDialog if found, nullptr otherwise
|
||||||
*/
|
*/
|
||||||
ContentDialog* ContentDialogManager::focusDialog(const ContactId& id, const QHash<const ContactId&, ContentDialog*>& list)
|
ContentDialog* ContentDialogManager::focusDialog(const ContactId& id,
|
||||||
|
const QHash<const ContactId&, ContentDialog*>& list)
|
||||||
{
|
{
|
||||||
auto iter = list.find(id);
|
auto iter = list.find(id);
|
||||||
if (iter == list.end()) {
|
if (iter == list.end()) {
|
||||||
|
@ -178,11 +180,11 @@ ContentDialogManager* ContentDialogManager::getInstance()
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ContentDialogManager::addContentDialog(ContentDialog* dialog)
|
void ContentDialogManager::addContentDialog(ContentDialog& dialog)
|
||||||
{
|
{
|
||||||
currentDialog = dialog;
|
currentDialog = &dialog;
|
||||||
connect(dialog, &ContentDialog::willClose, this, &ContentDialogManager::onDialogClose);
|
connect(&dialog, &ContentDialog::willClose, this, &ContentDialogManager::onDialogClose);
|
||||||
connect(dialog, &ContentDialog::activated, this, &ContentDialogManager::onDialogActivate);
|
connect(&dialog, &ContentDialog::activated, this, &ContentDialogManager::onDialogActivate);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ContentDialogManager::onDialogActivate()
|
void ContentDialogManager::onDialogActivate()
|
||||||
|
@ -203,10 +205,10 @@ void ContentDialogManager::onDialogClose()
|
||||||
|
|
||||||
IDialogs* ContentDialogManager::getFriendDialogs(const ToxPk& friendPk) const
|
IDialogs* ContentDialogManager::getFriendDialogs(const ToxPk& friendPk) const
|
||||||
{
|
{
|
||||||
return getFriendDialog(friendPk);
|
return getFriendDialog(friendPk);
|
||||||
}
|
}
|
||||||
|
|
||||||
IDialogs* ContentDialogManager::getGroupDialogs(const GroupId& groupId) const
|
IDialogs* ContentDialogManager::getGroupDialogs(const GroupId& groupId) const
|
||||||
{
|
{
|
||||||
return getGroupDialog(groupId);
|
return getGroupDialog(groupId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,11 +20,11 @@
|
||||||
#ifndef _CONTENT_DIALOG_MANAGER_H_
|
#ifndef _CONTENT_DIALOG_MANAGER_H_
|
||||||
#define _CONTENT_DIALOG_MANAGER_H_
|
#define _CONTENT_DIALOG_MANAGER_H_
|
||||||
|
|
||||||
#include "src/core/contactid.h"
|
|
||||||
#include "src/core/toxpk.h"
|
|
||||||
#include "src/core/groupid.h"
|
|
||||||
#include "src/model/dialogs/idialogsmanager.h"
|
|
||||||
#include "contentdialog.h"
|
#include "contentdialog.h"
|
||||||
|
#include "src/core/contactid.h"
|
||||||
|
#include "src/core/groupid.h"
|
||||||
|
#include "src/core/toxpk.h"
|
||||||
|
#include "src/model/dialogs/idialogsmanager.h"
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
|
@ -47,10 +47,12 @@ public:
|
||||||
IDialogs* getFriendDialogs(const ToxPk& friendPk) const;
|
IDialogs* getFriendDialogs(const ToxPk& friendPk) const;
|
||||||
IDialogs* getGroupDialogs(const GroupId& groupId) const;
|
IDialogs* getGroupDialogs(const GroupId& groupId) const;
|
||||||
|
|
||||||
FriendWidget* addFriendToDialog(ContentDialog* dialog, std::shared_ptr<FriendChatroom> chatroom, GenericChatForm* form);
|
FriendWidget* addFriendToDialog(ContentDialog* dialog, std::shared_ptr<FriendChatroom> chatroom,
|
||||||
GroupWidget* addGroupToDialog(ContentDialog* dialog, std::shared_ptr<GroupChatroom> chatroom, GenericChatForm* form);
|
GenericChatForm* form);
|
||||||
|
GroupWidget* addGroupToDialog(ContentDialog* dialog, std::shared_ptr<GroupChatroom> chatroom,
|
||||||
|
GenericChatForm* form);
|
||||||
|
|
||||||
void addContentDialog(ContentDialog* dialog);
|
void addContentDialog(ContentDialog& dialog);
|
||||||
|
|
||||||
static ContentDialogManager* getInstance();
|
static ContentDialogManager* getInstance();
|
||||||
|
|
||||||
|
@ -59,7 +61,8 @@ private slots:
|
||||||
void onDialogActivate();
|
void onDialogActivate();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ContentDialog* focusDialog(const ContactId& id, const QHash<const ContactId&, ContentDialog*>& list);
|
ContentDialog* focusDialog(const ContactId& id,
|
||||||
|
const QHash<const ContactId&, ContentDialog*>& list);
|
||||||
|
|
||||||
ContentDialog* currentDialog = nullptr;
|
ContentDialog* currentDialog = nullptr;
|
||||||
|
|
||||||
|
|
|
@ -1818,26 +1818,30 @@ void Widget::onUpdateAvailable(QString /*latestVersion*/, QUrl /*link*/)
|
||||||
ContentDialog* Widget::createContentDialog() const
|
ContentDialog* Widget::createContentDialog() const
|
||||||
{
|
{
|
||||||
ContentDialog* contentDialog = new ContentDialog();
|
ContentDialog* contentDialog = new ContentDialog();
|
||||||
ContentDialogManager::getInstance()->addContentDialog(contentDialog);
|
|
||||||
|
|
||||||
connect(contentDialog, &ContentDialog::friendDialogShown, this, &Widget::onFriendDialogShown);
|
registerContentDialog(*contentDialog);
|
||||||
connect(contentDialog, &ContentDialog::groupDialogShown, this, &Widget::onGroupDialogShown);
|
return contentDialog;
|
||||||
connect(core, &Core::usernameSet, contentDialog, &ContentDialog::setUsername);
|
}
|
||||||
connect(&settings, &Settings::groupchatPositionChanged, contentDialog,
|
|
||||||
|
void Widget::registerContentDialog(ContentDialog& contentDialog) const
|
||||||
|
{
|
||||||
|
ContentDialogManager::getInstance()->addContentDialog(contentDialog);
|
||||||
|
connect(&contentDialog, &ContentDialog::friendDialogShown, this, &Widget::onFriendDialogShown);
|
||||||
|
connect(&contentDialog, &ContentDialog::groupDialogShown, this, &Widget::onGroupDialogShown);
|
||||||
|
connect(core, &Core::usernameSet, &contentDialog, &ContentDialog::setUsername);
|
||||||
|
connect(&settings, &Settings::groupchatPositionChanged, &contentDialog,
|
||||||
&ContentDialog::reorderLayouts);
|
&ContentDialog::reorderLayouts);
|
||||||
connect(contentDialog, &ContentDialog::addFriendDialog, this, &Widget::addFriendDialog);
|
connect(&contentDialog, &ContentDialog::addFriendDialog, this, &Widget::addFriendDialog);
|
||||||
connect(contentDialog, &ContentDialog::addGroupDialog, this, &Widget::addGroupDialog);
|
connect(&contentDialog, &ContentDialog::addGroupDialog, this, &Widget::addGroupDialog);
|
||||||
connect(contentDialog, &ContentDialog::connectFriendWidget, this, &Widget::connectFriendWidget);
|
connect(&contentDialog, &ContentDialog::connectFriendWidget, this, &Widget::connectFriendWidget);
|
||||||
|
|
||||||
#ifdef Q_OS_MAC
|
#ifdef Q_OS_MAC
|
||||||
Nexus& n = Nexus::getInstance();
|
Nexus& n = Nexus::getInstance();
|
||||||
connect(contentDialog, &ContentDialog::destroyed, &n, &Nexus::updateWindowsClosed);
|
connect(&contentDialog, &ContentDialog::destroyed, &n, &Nexus::updateWindowsClosed);
|
||||||
connect(contentDialog, &ContentDialog::windowStateChanged, &n, &Nexus::onWindowStateChanged);
|
connect(&contentDialog, &ContentDialog::windowStateChanged, &n, &Nexus::onWindowStateChanged);
|
||||||
connect(contentDialog->windowHandle(), &QWindow::windowTitleChanged, &n, &Nexus::updateWindows);
|
connect(contentDialog.windowHandle(), &QWindow::windowTitleChanged, &n, &Nexus::updateWindows);
|
||||||
n.updateWindows();
|
n.updateWindows();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return contentDialog;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ContentLayout* Widget::createContentDialog(DialogType type) const
|
ContentLayout* Widget::createContentDialog(DialogType type) const
|
||||||
|
@ -2702,6 +2706,7 @@ void Widget::refreshPeerListsLocal(const QString& username)
|
||||||
void Widget::connectCircleWidget(CircleWidget& circleWidget)
|
void Widget::connectCircleWidget(CircleWidget& circleWidget)
|
||||||
{
|
{
|
||||||
connect(&circleWidget, &CircleWidget::searchCircle, this, &Widget::searchCircle);
|
connect(&circleWidget, &CircleWidget::searchCircle, this, &Widget::searchCircle);
|
||||||
|
connect(&circleWidget, &CircleWidget::newContentDialog, this, &Widget::registerContentDialog);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Widget::connectFriendWidget(FriendWidget& friendWidget)
|
void Widget::connectFriendWidget(FriendWidget& friendWidget)
|
||||||
|
|
|
@ -243,6 +243,7 @@ private slots:
|
||||||
void connectFriendWidget(FriendWidget& friendWidget);
|
void connectFriendWidget(FriendWidget& friendWidget);
|
||||||
void searchCircle(CircleWidget& circleWidget);
|
void searchCircle(CircleWidget& circleWidget);
|
||||||
void updateFriendActivity(const Friend& frnd);
|
void updateFriendActivity(const Friend& frnd);
|
||||||
|
void registerContentDialog(ContentDialog& contentDialog) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// QMainWindow overrides
|
// QMainWindow overrides
|
||||||
|
|
Loading…
Reference in New Issue
Block a user