mirror of
https://github.com/qTox/qTox.git
synced 2024-03-22 14:00:36 +08:00
refactor(friendlist): deduplicate time category widget logic
This commit is contained in:
parent
d55332ee0a
commit
08a646e456
@ -28,6 +28,8 @@
|
||||
#include "src/model/group.h"
|
||||
#include "src/model/status.h"
|
||||
#include "src/persistence/settings.h"
|
||||
#include "src/widget/categorywidget.h"
|
||||
|
||||
#include <QDragEnterEvent>
|
||||
#include <QDragLeaveEvent>
|
||||
#include <QGridLayout>
|
||||
@ -263,16 +265,20 @@ void FriendListWidget::moveFriends(QLayout* layout)
|
||||
circleWidget->moveFriendWidgets(this);
|
||||
} else if (friendWidget) {
|
||||
const Friend* contact = friendWidget->getFriend();
|
||||
const auto activityTime = getActiveTimeFriend(contact);
|
||||
int timeIndex = static_cast<int>(getTimeBucket(activityTime));
|
||||
|
||||
QWidget* w = activityLayout->itemAt(timeIndex)->widget();
|
||||
CategoryWidget* categoryWidget = qobject_cast<CategoryWidget*>(w);
|
||||
auto* categoryWidget = getTimeCategoryWidget(contact);
|
||||
categoryWidget->addFriendWidget(friendWidget, contact->getStatus());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CategoryWidget* FriendListWidget::getTimeCategoryWidget(const Friend* frd) const
|
||||
{
|
||||
const auto activityTime = getActiveTimeFriend(frd);
|
||||
int timeIndex = static_cast<int>(getTimeBucket(activityTime));
|
||||
QWidget* widget = activityLayout->itemAt(timeIndex)->widget();
|
||||
return qobject_cast<CategoryWidget*>(widget);
|
||||
}
|
||||
|
||||
FriendListWidget::Mode FriendListWidget::getMode() const
|
||||
{
|
||||
return mode;
|
||||
@ -309,10 +315,7 @@ void FriendListWidget::removeFriendWidget(FriendWidget* w)
|
||||
{
|
||||
const Friend* contact = w->getFriend();
|
||||
if (mode == Activity) {
|
||||
const auto activityTime = getActiveTimeFriend(contact);
|
||||
int timeIndex = static_cast<int>(getTimeBucket(activityTime));
|
||||
QWidget* widget = activityLayout->itemAt(timeIndex)->widget();
|
||||
CategoryWidget* categoryWidget = qobject_cast<CategoryWidget*>(widget);
|
||||
auto* categoryWidget = getTimeCategoryWidget(contact);
|
||||
categoryWidget->removeFriendWidget(w, contact->getStatus());
|
||||
categoryWidget->setVisible(categoryWidget->hasChatrooms());
|
||||
} else {
|
||||
@ -401,10 +404,7 @@ void FriendListWidget::onFriendWidgetRenamed(FriendWidget* friendWidget)
|
||||
const Friend* contact = friendWidget->getFriend();
|
||||
auto status = contact->getStatus();
|
||||
if (mode == Activity) {
|
||||
const auto activityTime = getActiveTimeFriend(contact);
|
||||
int timeIndex = static_cast<int>(getTimeBucket(activityTime));
|
||||
QWidget* widget = activityLayout->itemAt(timeIndex)->widget();
|
||||
CategoryWidget* categoryWidget = qobject_cast<CategoryWidget*>(widget);
|
||||
auto* categoryWidget = getTimeCategoryWidget(contact);
|
||||
categoryWidget->removeFriendWidget(friendWidget, status);
|
||||
categoryWidget->addFriendWidget(friendWidget, status);
|
||||
} else {
|
||||
@ -473,7 +473,7 @@ void FriendListWidget::cycleContacts(GenericChatroomWidget* activeChatroomWidget
|
||||
continue;
|
||||
}
|
||||
|
||||
widget = activityLayout->itemAt(index)->widget();
|
||||
auto* widget = activityLayout->itemAt(index)->widget();
|
||||
categoryWidget = qobject_cast<CategoryWidget*>(widget);
|
||||
|
||||
if (categoryWidget != nullptr) {
|
||||
@ -627,10 +627,7 @@ void FriendListWidget::moveWidget(FriendWidget* widget, Status::Status s, bool a
|
||||
circleWidget->addFriendWidget(widget, s);
|
||||
} else {
|
||||
const Friend* contact = widget->getFriend();
|
||||
const auto activityTime = getActiveTimeFriend(contact);
|
||||
int timeIndex = static_cast<int>(getTimeBucket(activityTime));
|
||||
QWidget* w = activityLayout->itemAt(timeIndex)->widget();
|
||||
CategoryWidget* categoryWidget = qobject_cast<CategoryWidget*>(w);
|
||||
auto* categoryWidget = getTimeCategoryWidget(contact);
|
||||
categoryWidget->addFriendWidget(widget, contact->getStatus());
|
||||
categoryWidget->show();
|
||||
}
|
||||
|
@ -34,6 +34,8 @@ class GroupWidget;
|
||||
class CircleWidget;
|
||||
class FriendListLayout;
|
||||
class GenericChatroomWidget;
|
||||
class CategoryWidget;
|
||||
class Friend;
|
||||
|
||||
class FriendListWidget : public QWidget
|
||||
{
|
||||
@ -86,6 +88,7 @@ private:
|
||||
CircleWidget* createCircleWidget(int id = -1);
|
||||
QLayout* nextLayout(QLayout* layout, bool forward) const;
|
||||
void moveFriends(QLayout* layout);
|
||||
CategoryWidget* getTimeCategoryWidget(const Friend* frd) const;
|
||||
|
||||
Mode mode;
|
||||
bool groupsOnTop;
|
||||
|
Loading…
x
Reference in New Issue
Block a user