void FriendListWidget::moveWidget(FriendWidget* widget, Status s, bool add) { if (mode == Name) { Friend* f = FriendList::findFriend(widget->friendId); int circleId = Settings::getInstance().getFriendCircleID(f->getPublicKey()); CircleWidget* circleWidget = CircleWidget::getFromID(circleId); if (circleWidget == nullptr || add) { if (circleId != -1) Settings::getInstance().setFriendCircleID(f->getPublicKey(), -1); listLayout->addFriendWidget(widget, s); return; } circleWidget->addFriendWidget(widget, s); } else { Friend* contact = FriendList::findFriend(widget->friendId); QDate activityDate = getDateFriend(contact); int time = static_cast<int>(getTime(activityDate)); QWidget* w = activityLayout->itemAt(time)->widget(); CategoryWidget* categoryWidget = qobject_cast<CategoryWidget*>(w); categoryWidget->addFriendWidget(widget, contact->getStatus()); categoryWidget->show(); } }
void FriendListWidget::removeFriendWidget(FriendWidget* w) { Friend* contact = FriendList::findFriend(w->friendId); if (mode == Activity) { QDate activityDate = getDateFriend(contact); int time = static_cast<int>(getTime(activityDate)); QWidget* widget = activityLayout->itemAt(time)->widget(); CategoryWidget* categoryWidget = qobject_cast<CategoryWidget*>(widget); categoryWidget->removeFriendWidget(w, contact->getStatus()); categoryWidget->setVisible(categoryWidget->hasChatrooms()); } else { int id = Settings::getInstance().getFriendCircleID(contact->getPublicKey()); CircleWidget* circleWidget = CircleWidget::getFromID(id); if (circleWidget != nullptr) { circleWidget->removeFriendWidget(w, contact->getStatus()); Widget::getInstance()->searchCircle(circleWidget); } } }
void FriendListWidget::dropEvent(QDropEvent* event) { // Check, that the element is dropped from qTox QObject* o = event->source(); FriendWidget* widget = qobject_cast<FriendWidget*>(o); if (!widget) return; // Check, that the user has a friend with the same ToxId ToxId toxId(event->mimeData()->text()); Friend* f = FriendList::findFriend(toxId.getPublicKey()); if (!f) return; // Save CircleWidget before changing the Id int circleId = Settings::getInstance().getFriendCircleID(f->getPublicKey()); CircleWidget* circleWidget = CircleWidget::getFromID(circleId); moveWidget(widget, f->getStatus(), true); if (circleWidget) circleWidget->updateStatus(); }
void FriendListWidget::addCircleWidget(FriendWidget* friendWidget) { CircleWidget* circleWidget = createCircleWidget(); if (circleWidget != nullptr) { if (friendWidget != nullptr) { Friend* f = FriendList::findFriend(friendWidget->friendId); ToxPk toxPk = f->getPublicKey(); int circleId = Settings::getInstance().getFriendCircleID(toxPk); CircleWidget* circleOriginal = CircleWidget::getFromID(circleId); circleWidget->addFriendWidget(friendWidget, f->getStatus()); circleWidget->setExpanded(true); if (circleOriginal != nullptr) Widget::getInstance()->searchCircle(circleOriginal); } Widget::getInstance()->searchCircle(circleWidget); if (window()->isActiveWindow()) circleWidget->editName(); } reDraw(); }