2014-08-22 23:19:16 +08:00
|
|
|
/*
|
|
|
|
Copyright (C) 2014 by Project Tox <https://tox.im>
|
|
|
|
|
|
|
|
This file is part of qTox, a Qt-based graphical interface for Tox.
|
|
|
|
|
|
|
|
This program is libre software: you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
|
|
|
|
See the COPYING file for more details.
|
|
|
|
*/
|
|
|
|
#include "friendlistwidget.h"
|
2014-08-30 21:15:23 +08:00
|
|
|
#include <QDebug>
|
2014-09-11 21:44:34 +08:00
|
|
|
#include <QGridLayout>
|
2015-03-12 08:23:22 +08:00
|
|
|
#include "src/friend.h"
|
|
|
|
#include "src/friendlist.h"
|
|
|
|
#include "src/widget/friendwidget.h"
|
2014-08-22 23:19:16 +08:00
|
|
|
|
|
|
|
FriendListWidget::FriendListWidget(QWidget *parent) :
|
|
|
|
QWidget(parent)
|
|
|
|
{
|
|
|
|
mainLayout = new QGridLayout();
|
|
|
|
setLayout(mainLayout);
|
|
|
|
setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
|
|
|
|
layout()->setSpacing(0);
|
|
|
|
layout()->setMargin(0);
|
|
|
|
|
|
|
|
groupLayout = new QVBoxLayout();
|
|
|
|
groupLayout->setSpacing(0);
|
|
|
|
groupLayout->setMargin(0);
|
|
|
|
|
|
|
|
for (Status s : {Status::Online, Status::Away, Status::Busy, Status::Offline})
|
|
|
|
{
|
2015-01-02 08:57:31 +08:00
|
|
|
QVBoxLayout *l = new QVBoxLayout();
|
2014-08-22 23:19:16 +08:00
|
|
|
l->setSpacing(0);
|
|
|
|
l->setMargin(0);
|
|
|
|
|
|
|
|
layouts[static_cast<int>(s)] = l;
|
|
|
|
}
|
|
|
|
|
|
|
|
mainLayout->addLayout(layouts[static_cast<int>(Status::Online)], 0, 0);
|
|
|
|
mainLayout->addLayout(groupLayout, 1, 0);
|
|
|
|
mainLayout->addLayout(layouts[static_cast<int>(Status::Away)], 2, 0);
|
|
|
|
mainLayout->addLayout(layouts[static_cast<int>(Status::Busy)], 3, 0);
|
|
|
|
mainLayout->addLayout(layouts[static_cast<int>(Status::Offline)], 4, 0);
|
|
|
|
}
|
|
|
|
|
2015-01-02 08:57:31 +08:00
|
|
|
QVBoxLayout* FriendListWidget::getGroupLayout()
|
2014-08-22 23:19:16 +08:00
|
|
|
{
|
|
|
|
return groupLayout;
|
|
|
|
}
|
|
|
|
|
2015-01-02 08:57:31 +08:00
|
|
|
QVBoxLayout* FriendListWidget::getFriendLayout(Status s)
|
2014-08-22 23:19:16 +08:00
|
|
|
{
|
|
|
|
auto res = layouts.find(static_cast<int>(s));
|
|
|
|
if (res != layouts.end())
|
|
|
|
return res.value();
|
|
|
|
|
|
|
|
qDebug() << "Friend Status: " << static_cast<int>(s) << " not found!";
|
|
|
|
return layouts[static_cast<int>(Status::Online)];
|
|
|
|
}
|
|
|
|
|
2015-01-02 08:57:31 +08:00
|
|
|
void FriendListWidget::moveWidget(QWidget *w, Status s, int hasNewEvents)
|
2014-08-22 23:19:16 +08:00
|
|
|
{
|
2015-03-12 08:23:22 +08:00
|
|
|
getFriendLayout(s)->removeWidget(w);
|
|
|
|
QVBoxLayout* l = getFriendLayout(s);
|
|
|
|
Friend* g = FriendList::findFriend(dynamic_cast<FriendWidget*>(w)->friendId);
|
|
|
|
for(int i = 0; i < l->count(); i++){
|
|
|
|
FriendWidget* w1 = dynamic_cast<FriendWidget*>(l->itemAt(i)->widget());
|
|
|
|
if(w1 != NULL){
|
|
|
|
Friend* f = FriendList::findFriend(w1->friendId);
|
|
|
|
if(f->getDisplayedName().localeAwareCompare(g->getDisplayedName()) > 0){
|
|
|
|
l->insertWidget(i,w);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
l->addWidget(w);
|
2014-08-22 23:19:16 +08:00
|
|
|
}
|