33 #include <QDragEnterEvent>
34 #include <QDragLeaveEvent>
35 #include <QGridLayout>
55 static const int LAST_TIME =
static_cast<int>(
Time::Never);
59 if (date == QDateTime()) {
63 QDate today = QDate::currentDate();
65 const QMap<Time, QDate> dates {
78 for (
Time time : dates.keys()) {
79 if (dates[time] <= date.date()) {
94 QDateTime now = QDateTime::currentDateTime();
95 QDateTime tomorrow = now.addDays(1);
96 tomorrow.setTime(QTime());
97 return now.msecsTo(tomorrow);
106 manager->setGroupsOnTop(groupsOnTop);
109 listLayout =
new QVBoxLayout;
110 setLayout(listLayout);
111 setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
112 listLayout->setSpacing(0);
113 listLayout->setMargin(0);
117 dayTimer =
new QTimer(
this);
118 dayTimer->setTimerType(Qt::VeryCoarseTimer);
122 setAcceptDrops(
true);
135 if (this->mode ==
mode)
158 QVector<std::shared_ptr<IFriendListItem>> itemsTmp =
manager->
getItems();
159 QVector<IFriendListItem*> friendItems;
162 for (
int i = 0; i < itemsTmp.size(); ++i) {
163 if (itemsTmp[i]->isFriend() && itemsTmp[i]->getCircleId() >= 0) {
165 if (circleWgt !=
nullptr) {
168 qobject_cast<FriendWidget*>((itemsTmp[i].get())->getWidget());
174 itemsTmp[i]->setNameSortedPos(posByName++);
175 friendItems.push_back(itemsTmp[i].get());
179 for (
int i = 0; i < friendItems.size(); ++i) {
180 listLayout->addWidget(friendItems[i]->getWidget());
188 QVector<CircleWidget*> circles;
193 std::sort(circles.begin(), circles.end(),
195 return a->getName().toUpper() < b->getName().toUpper();
198 for (
int i = 0; i < circles.size(); ++i) {
200 QVector<std::shared_ptr<IFriendListItem>> itemsInCircle =
getItemsFromCircle(circles.at(i));
201 for (
int i = 0; i < itemsInCircle.size(); ++i) {
202 itemsInCircle.at(i)->setNameSortedPos(posByName++);
217 QDate today = QDate::currentDate();
218 #define COMMENT "Category for sorting friends by activity"
220 const QMap<Time, QString> names {
236 QVector<std::shared_ptr<IFriendListItem>> itemsTmp =
manager->
getItems();
238 for (
int i = 0; i < itemsTmp.size(); ++i) {
239 listLayout->addWidget(itemsTmp[i]->getWidget());
244 for (
Time t : names.keys()) {
254 for (
int i = 0; i < itemsTmp.size(); ++i) {
255 if (itemsTmp[i]->isFriend()) {
256 int timeIndex =
static_cast<int>(
getTimeBucket(itemsTmp[i]->getLastActivity()));
258 CategoryWidget* categoryWidget = qobject_cast<CategoryWidget*>(widget);
259 FriendWidget* frnd = qobject_cast<FriendWidget*>((itemsTmp[i].get())->getWidget());
260 if (!isVisible() || (isVisible() && frnd->isVisible())) {
269 CategoryWidget* categoryWidget = qobject_cast<CategoryWidget*>(widget);
270 categoryWidget->setVisible(categoryWidget->
hasChatrooms());
284 QLayoutItem* itemForDel;
285 while ((itemForDel =
listLayout->takeAt(0)) !=
nullptr) {
286 listLayout->removeWidget(itemForDel->widget());
287 QWidget* wgt = itemForDel->widget();
288 if (wgt !=
nullptr) {
289 wgt->setParent(
nullptr);
290 }
else if (itemForDel->layout() !=
nullptr) {
291 QLayout* layout = itemForDel->layout();
292 QLayoutItem* itemTmp;
293 while ((itemTmp = layout->takeAt(0)) !=
nullptr) {
294 wgt = itemTmp->widget();
306 int nextPos = forward ? pos + 1 : pos - 1;
309 }
else if (nextPos < 0) {
321 QVector<std::shared_ptr<IFriendListItem>>
324 QVector<std::shared_ptr<IFriendListItem>> itemsTmp =
manager->
getItems();
325 QVector<std::shared_ptr<IFriendListItem>> itemsInCircle;
326 for (
int i = 0; i < itemsTmp.size(); ++i) {
327 int circleId = itemsTmp.at(i)->getCircleId();
329 itemsInCircle.push_back(itemsTmp.at(i));
332 return itemsInCircle;
338 int timeIndex =
static_cast<int>(
getTimeBucket(activityTime));
340 return qobject_cast<CategoryWidget*>(widget);
374 if (circleWidget !=
nullptr) {
390 if (circleWidget !=
nullptr) {
391 if (friendWidget !=
nullptr) {
397 if (window()->isActiveWindow())
406 widget->deleteLater();
410 bool hideOffline,
bool hideGroups)
422 circleWidget->
setName(newName);
441 if (!activeChatroomWidget) {
446 FriendWidget* friendWidget = qobject_cast<FriendWidget*>(activeChatroomWidget);
456 CategoryWidget* categoryWidget = qobject_cast<CategoryWidget*>(widget);
458 if (categoryWidget ==
nullptr || categoryWidget->
cycleContacts(friendWidget, forward)) {
462 index += forward ? 1 : -1;
469 }
else if (index > LAST_TIME) {
475 categoryWidget = qobject_cast<CategoryWidget*>(widget);
477 if (categoryWidget !=
nullptr) {
480 index += forward ? 1 : -1;
491 QWidget* wgt =
nullptr;
493 if (friendWidget !=
nullptr) {
496 GroupWidget* groupWidget = qobject_cast<GroupWidget*>(activeChatroomWidget);
500 FriendWidget* friendTmp = qobject_cast<FriendWidget*>(wgt);
501 if (friendTmp !=
nullptr) {
503 if (circleWidget !=
nullptr) {
509 if (chatWidget !=
nullptr)
515 if (!event->mimeData()->hasFormat(
"toxPk")) {
518 ToxPk toxPk(event->mimeData()->data(
"toxPk"));
521 event->acceptProposedAction();
527 QObject* o =
event->source();
533 assert(event->mimeData()->hasFormat(
"toxPk"));
534 const ToxPk toxPk{
event->mimeData()->data(
"toxPk")};
570 if (circleWidget ==
nullptr || add) {
571 if (circleId != -1) {
584 categoryWidget->addFriendWidget(widget, contact->getStatus());
585 categoryWidget->show();
600 categoryWidget->setVisible(categoryWidget->
hasChatrooms());