Browse Source

refactor(friendlist): deduplicate time category widget logic

reviewable/pr5667/r4
Anthony Bilinski 6 years ago
parent
commit
08a646e456
No known key found for this signature in database
GPG Key ID: 2AA8E0DA1B31FB3C
  1. 33
      src/widget/friendlistwidget.cpp
  2. 3
      src/widget/friendlistwidget.h

33
src/widget/friendlistwidget.cpp

@ -28,6 +28,8 @@
#include "src/model/group.h" #include "src/model/group.h"
#include "src/model/status.h" #include "src/model/status.h"
#include "src/persistence/settings.h" #include "src/persistence/settings.h"
#include "src/widget/categorywidget.h"
#include <QDragEnterEvent> #include <QDragEnterEvent>
#include <QDragLeaveEvent> #include <QDragLeaveEvent>
#include <QGridLayout> #include <QGridLayout>
@ -263,16 +265,20 @@ void FriendListWidget::moveFriends(QLayout* layout)
circleWidget->moveFriendWidgets(this); circleWidget->moveFriendWidgets(this);
} else if (friendWidget) { } else if (friendWidget) {
const Friend* contact = friendWidget->getFriend(); const Friend* contact = friendWidget->getFriend();
const auto activityTime = getActiveTimeFriend(contact); auto* categoryWidget = getTimeCategoryWidget(contact);
int timeIndex = static_cast<int>(getTimeBucket(activityTime));
QWidget* w = activityLayout->itemAt(timeIndex)->widget();
CategoryWidget* categoryWidget = qobject_cast<CategoryWidget*>(w);
categoryWidget->addFriendWidget(friendWidget, contact->getStatus()); 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 FriendListWidget::Mode FriendListWidget::getMode() const
{ {
return mode; return mode;
@ -309,10 +315,7 @@ void FriendListWidget::removeFriendWidget(FriendWidget* w)
{ {
const Friend* contact = w->getFriend(); const Friend* contact = w->getFriend();
if (mode == Activity) { if (mode == Activity) {
const auto activityTime = getActiveTimeFriend(contact); auto* categoryWidget = getTimeCategoryWidget(contact);
int timeIndex = static_cast<int>(getTimeBucket(activityTime));
QWidget* widget = activityLayout->itemAt(timeIndex)->widget();
CategoryWidget* categoryWidget = qobject_cast<CategoryWidget*>(widget);
categoryWidget->removeFriendWidget(w, contact->getStatus()); categoryWidget->removeFriendWidget(w, contact->getStatus());
categoryWidget->setVisible(categoryWidget->hasChatrooms()); categoryWidget->setVisible(categoryWidget->hasChatrooms());
} else { } else {
@ -401,10 +404,7 @@ void FriendListWidget::onFriendWidgetRenamed(FriendWidget* friendWidget)
const Friend* contact = friendWidget->getFriend(); const Friend* contact = friendWidget->getFriend();
auto status = contact->getStatus(); auto status = contact->getStatus();
if (mode == Activity) { if (mode == Activity) {
const auto activityTime = getActiveTimeFriend(contact); auto* categoryWidget = getTimeCategoryWidget(contact);
int timeIndex = static_cast<int>(getTimeBucket(activityTime));
QWidget* widget = activityLayout->itemAt(timeIndex)->widget();
CategoryWidget* categoryWidget = qobject_cast<CategoryWidget*>(widget);
categoryWidget->removeFriendWidget(friendWidget, status); categoryWidget->removeFriendWidget(friendWidget, status);
categoryWidget->addFriendWidget(friendWidget, status); categoryWidget->addFriendWidget(friendWidget, status);
} else { } else {
@ -473,7 +473,7 @@ void FriendListWidget::cycleContacts(GenericChatroomWidget* activeChatroomWidget
continue; continue;
} }
widget = activityLayout->itemAt(index)->widget(); auto* widget = activityLayout->itemAt(index)->widget();
categoryWidget = qobject_cast<CategoryWidget*>(widget); categoryWidget = qobject_cast<CategoryWidget*>(widget);
if (categoryWidget != nullptr) { if (categoryWidget != nullptr) {
@ -627,10 +627,7 @@ void FriendListWidget::moveWidget(FriendWidget* widget, Status::Status s, bool a
circleWidget->addFriendWidget(widget, s); circleWidget->addFriendWidget(widget, s);
} else { } else {
const Friend* contact = widget->getFriend(); const Friend* contact = widget->getFriend();
const auto activityTime = getActiveTimeFriend(contact); auto* categoryWidget = getTimeCategoryWidget(contact);
int timeIndex = static_cast<int>(getTimeBucket(activityTime));
QWidget* w = activityLayout->itemAt(timeIndex)->widget();
CategoryWidget* categoryWidget = qobject_cast<CategoryWidget*>(w);
categoryWidget->addFriendWidget(widget, contact->getStatus()); categoryWidget->addFriendWidget(widget, contact->getStatus());
categoryWidget->show(); categoryWidget->show();
} }

3
src/widget/friendlistwidget.h

@ -34,6 +34,8 @@ class GroupWidget;
class CircleWidget; class CircleWidget;
class FriendListLayout; class FriendListLayout;
class GenericChatroomWidget; class GenericChatroomWidget;
class CategoryWidget;
class Friend;
class FriendListWidget : public QWidget class FriendListWidget : public QWidget
{ {
@ -86,6 +88,7 @@ private:
CircleWidget* createCircleWidget(int id = -1); CircleWidget* createCircleWidget(int id = -1);
QLayout* nextLayout(QLayout* layout, bool forward) const; QLayout* nextLayout(QLayout* layout, bool forward) const;
void moveFriends(QLayout* layout); void moveFriends(QLayout* layout);
CategoryWidget* getTimeCategoryWidget(const Friend* frd) const;
Mode mode; Mode mode;
bool groupsOnTop; bool groupsOnTop;

Loading…
Cancel
Save