lint
This commit is contained in:
parent
4040fd3901
commit
0f76f0115e
@ -1,44 +1,42 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <QWidget>
|
|
||||||
#include <QScrollArea>
|
#include <QScrollArea>
|
||||||
#include <QSharedPointer>
|
#include <QSharedPointer>
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
#include "MatrixClient.h"
|
|
||||||
#include "CommunitiesListItem.h"
|
#include "CommunitiesListItem.h"
|
||||||
#include "Community.h"
|
#include "Community.h"
|
||||||
|
#include "MatrixClient.h"
|
||||||
#include "ui/Theme.h"
|
#include "ui/Theme.h"
|
||||||
|
|
||||||
class CommunitiesList : public QWidget
|
class CommunitiesList : public QWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CommunitiesList(QSharedPointer<MatrixClient> client, QWidget *parent = nullptr);
|
CommunitiesList(QSharedPointer<MatrixClient> client, QWidget *parent = nullptr);
|
||||||
~CommunitiesList();
|
~CommunitiesList();
|
||||||
|
|
||||||
void setCommunities(const QMap<QString, QSharedPointer<Community>> &communities);
|
void setCommunities(const QMap<QString, QSharedPointer<Community>> &communities);
|
||||||
void clear();
|
void clear();
|
||||||
|
|
||||||
void addCommunity(QSharedPointer<Community> community,
|
void addCommunity(QSharedPointer<Community> community, const QString &community_id);
|
||||||
const QString &community_id);
|
void removeCommunity(const QString &community_id);
|
||||||
void removeCommunity(const QString &community_id);
|
|
||||||
signals:
|
signals:
|
||||||
void communityChanged(const QString &community_id);
|
void communityChanged(const QString &community_id);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void updateCommunityAvatar(const QString &community_id,
|
void updateCommunityAvatar(const QString &community_id, const QPixmap &img);
|
||||||
const QPixmap &img);
|
void highlightSelectedCommunity(const QString &community_id);
|
||||||
void highlightSelectedCommunity(const QString &community_id);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QVBoxLayout *topLayout_;
|
QVBoxLayout *topLayout_;
|
||||||
QVBoxLayout *contentsLayout_;
|
QVBoxLayout *contentsLayout_;
|
||||||
QWidget *scrollAreaContents_;
|
QWidget *scrollAreaContents_;
|
||||||
QScrollArea *scrollArea_;
|
QScrollArea *scrollArea_;
|
||||||
|
|
||||||
QMap<QString, QSharedPointer<CommunitiesListItem>> communities_;
|
QMap<QString, QSharedPointer<CommunitiesListItem>> communities_;
|
||||||
|
|
||||||
QSharedPointer<MatrixClient> client_;
|
QSharedPointer<MatrixClient> client_;
|
||||||
};
|
};
|
||||||
|
@ -1,83 +1,81 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <QWidget>
|
#include <QDebug>
|
||||||
#include <QSharedPointer>
|
|
||||||
#include <QMouseEvent>
|
#include <QMouseEvent>
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
#include <QDebug>
|
#include <QSharedPointer>
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
#include "ui/Theme.h"
|
|
||||||
#include "Menu.h"
|
|
||||||
#include "Community.h"
|
#include "Community.h"
|
||||||
|
#include "Menu.h"
|
||||||
|
#include "ui/Theme.h"
|
||||||
|
|
||||||
class CommunitiesListItem : public QWidget
|
class CommunitiesListItem : public QWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CommunitiesListItem(QSharedPointer<Community> community,
|
CommunitiesListItem(QSharedPointer<Community> community,
|
||||||
QString community_id,
|
QString community_id,
|
||||||
QWidget *parent = nullptr);
|
QWidget *parent = nullptr);
|
||||||
|
|
||||||
~CommunitiesListItem();
|
~CommunitiesListItem();
|
||||||
|
|
||||||
void setCommunity(QSharedPointer<Community> community);
|
void setCommunity(QSharedPointer<Community> community);
|
||||||
|
|
||||||
inline bool isPressed() const;
|
inline bool isPressed() const;
|
||||||
inline void setAvatar(const QImage &avatar_image);
|
inline void setAvatar(const QImage &avatar_image);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void clicked(const QString &community_id);
|
void clicked(const QString &community_id);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void setPressedState(bool state);
|
void setPressedState(bool state);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void mousePressEvent(QMouseEvent *event) override;
|
void mousePressEvent(QMouseEvent *event) override;
|
||||||
void paintEvent(QPaintEvent *event) override;
|
void paintEvent(QPaintEvent *event) override;
|
||||||
void contextMenuEvent(QContextMenuEvent *event) override;
|
void contextMenuEvent(QContextMenuEvent *event) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const int IconSize = 55;
|
const int IconSize = 55;
|
||||||
|
|
||||||
QSharedPointer<Community> community_;
|
QSharedPointer<Community> community_;
|
||||||
QString communityId_;
|
QString communityId_;
|
||||||
QString communityName_;
|
QString communityName_;
|
||||||
QString communityShortDescription;
|
QString communityShortDescription;
|
||||||
|
|
||||||
QPixmap communityAvatar_;
|
QPixmap communityAvatar_;
|
||||||
|
|
||||||
Menu *menu_;
|
Menu *menu_;
|
||||||
bool isPressed_ = false;
|
bool isPressed_ = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline bool
|
inline bool
|
||||||
CommunitiesListItem::isPressed() const
|
CommunitiesListItem::isPressed() const
|
||||||
{
|
{
|
||||||
return isPressed_;
|
return isPressed_;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void
|
inline void
|
||||||
CommunitiesListItem::setAvatar(const QImage &avatar_image)
|
CommunitiesListItem::setAvatar(const QImage &avatar_image)
|
||||||
{
|
{
|
||||||
communityAvatar_ = QPixmap::fromImage(
|
communityAvatar_ = QPixmap::fromImage(
|
||||||
avatar_image.scaled(IconSize,
|
avatar_image.scaled(IconSize, IconSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
|
||||||
IconSize,
|
update();
|
||||||
Qt::IgnoreAspectRatio,
|
|
||||||
Qt::SmoothTransformation));
|
|
||||||
update();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class WorldCommunityListItem : public CommunitiesListItem
|
class WorldCommunityListItem : public CommunitiesListItem
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
WorldCommunityListItem(QWidget *parent = nullptr);
|
WorldCommunityListItem(QWidget *parent = nullptr);
|
||||||
~WorldCommunityListItem();
|
~WorldCommunityListItem();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void mousePressEvent(QMouseEvent *event) override;
|
void mousePressEvent(QMouseEvent *event) override;
|
||||||
void paintEvent(QPaintEvent *event) override;
|
void paintEvent(QPaintEvent *event) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const int IconSize = 55;
|
const int IconSize = 55;
|
||||||
};
|
};
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <QObject>
|
|
||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
#include <QUrl>
|
#include <QObject>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
#include <QUrl>
|
||||||
|
|
||||||
class Community : public QObject
|
class Community : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void parseProfile(const QJsonObject &profile);
|
void parseProfile(const QJsonObject &profile);
|
||||||
@ -55,7 +55,6 @@ Community::getLongDescription() const
|
|||||||
return long_description_;
|
return long_description_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline const QList<QString>
|
inline const QList<QString>
|
||||||
Community::getRoomList() const
|
Community::getRoomList() const
|
||||||
{
|
{
|
||||||
|
@ -87,8 +87,8 @@ private:
|
|||||||
QMap<QString, QSharedPointer<RoomInfoListItem>> rooms_;
|
QMap<QString, QSharedPointer<RoomInfoListItem>> rooms_;
|
||||||
QString selectedRoom_;
|
QString selectedRoom_;
|
||||||
|
|
||||||
bool filterRooms_ = false;
|
bool filterRooms_ = false;
|
||||||
QList<QString> roomFilter_ = QList<QString>(); //which rooms to include in the room list
|
QList<QString> roomFilter_ = QList<QString>(); // which rooms to include in the room list
|
||||||
|
|
||||||
QSharedPointer<MatrixClient> client_;
|
QSharedPointer<MatrixClient> client_;
|
||||||
};
|
};
|
||||||
|
@ -13,8 +13,8 @@ enum class AvatarType
|
|||||||
};
|
};
|
||||||
|
|
||||||
namespace sidebar {
|
namespace sidebar {
|
||||||
static const int SmallSize = 60;
|
static const int SmallSize = 60;
|
||||||
static const int NormalSize = 300;
|
static const int NormalSize = 300;
|
||||||
static const int CommunitiesSidebarSize = 64;
|
static const int CommunitiesSidebarSize = 64;
|
||||||
}
|
}
|
||||||
// Default font size.
|
// Default font size.
|
||||||
|
@ -63,7 +63,7 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, QWidget *parent)
|
|||||||
|
|
||||||
communitiesList_ = new CommunitiesList(client, this);
|
communitiesList_ = new CommunitiesList(client, this);
|
||||||
communitiesSideBarLayout_->addWidget(communitiesList_);
|
communitiesSideBarLayout_->addWidget(communitiesList_);
|
||||||
//communitiesSideBarLayout_->addStretch(1);
|
// communitiesSideBarLayout_->addStretch(1);
|
||||||
topLayout_->addWidget(communitiesSideBar_);
|
topLayout_->addWidget(communitiesSideBar_);
|
||||||
|
|
||||||
auto splitter = new Splitter(this);
|
auto splitter = new Splitter(this);
|
||||||
@ -256,22 +256,27 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, QWidget *parent)
|
|||||||
SIGNAL(getOwnCommunitiesResponse(QList<QString>)),
|
SIGNAL(getOwnCommunitiesResponse(QList<QString>)),
|
||||||
this,
|
this,
|
||||||
SLOT(updateOwnCommunitiesInfo(QList<QString>)));
|
SLOT(updateOwnCommunitiesInfo(QList<QString>)));
|
||||||
connect(client_.data(), &MatrixClient::communityProfileRetrieved, this,
|
connect(client_.data(),
|
||||||
|
&MatrixClient::communityProfileRetrieved,
|
||||||
|
this,
|
||||||
[=](QString communityId, QJsonObject profile) {
|
[=](QString communityId, QJsonObject profile) {
|
||||||
communityManager_[communityId]->parseProfile(profile);
|
communityManager_[communityId]->parseProfile(profile);
|
||||||
});
|
});
|
||||||
connect(client_.data(), &MatrixClient::communityRoomsRetrieved, this,
|
connect(client_.data(),
|
||||||
|
&MatrixClient::communityRoomsRetrieved,
|
||||||
|
this,
|
||||||
[=](QString communityId, QJsonObject rooms) {
|
[=](QString communityId, QJsonObject rooms) {
|
||||||
communityManager_[communityId]->parseRooms(rooms);
|
communityManager_[communityId]->parseRooms(rooms);
|
||||||
|
|
||||||
if (communityId == current_community_) {
|
if (communityId == current_community_) {
|
||||||
if (communityId == "world") {
|
if (communityId == "world") {
|
||||||
room_list_->setFilterRooms(false);
|
room_list_->setFilterRooms(false);
|
||||||
} else {
|
} else {
|
||||||
room_list_->setRoomFilter(communityManager_[communityId]->getRoomList());
|
room_list_->setRoomFilter(
|
||||||
}
|
communityManager_[communityId]->getRoomList());
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
});
|
||||||
connect(client_.data(),
|
connect(client_.data(),
|
||||||
SIGNAL(ownAvatarRetrieved(const QPixmap &)),
|
SIGNAL(ownAvatarRetrieved(const QPixmap &)),
|
||||||
this,
|
this,
|
||||||
@ -301,14 +306,18 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, QWidget *parent)
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(communitiesList_, &CommunitiesList::communityChanged, this, [=](const QString &communityId) {
|
connect(communitiesList_,
|
||||||
current_community_ = communityId;
|
&CommunitiesList::communityChanged,
|
||||||
if (communityId == "world") {
|
this,
|
||||||
room_list_->setFilterRooms(false);
|
[=](const QString &communityId) {
|
||||||
} else {
|
current_community_ = communityId;
|
||||||
room_list_->setRoomFilter(communityManager_[communityId]->getRoomList());
|
if (communityId == "world") {
|
||||||
}
|
room_list_->setFilterRooms(false);
|
||||||
});
|
} else {
|
||||||
|
room_list_->setRoomFilter(
|
||||||
|
communityManager_[communityId]->getRoomList());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
AvatarProvider::init(client);
|
AvatarProvider::init(client);
|
||||||
}
|
}
|
||||||
@ -489,13 +498,13 @@ ChatPage::updateOwnProfileInfo(const QUrl &avatar_url, const QString &display_na
|
|||||||
void
|
void
|
||||||
ChatPage::updateOwnCommunitiesInfo(const QList<QString> &own_communities)
|
ChatPage::updateOwnCommunitiesInfo(const QList<QString> &own_communities)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < own_communities.size(); i++) {
|
for (int i = 0; i < own_communities.size(); i++) {
|
||||||
QSharedPointer<Community> community = QSharedPointer<Community>(new Community());
|
QSharedPointer<Community> community = QSharedPointer<Community>(new Community());
|
||||||
|
|
||||||
communityManager_[own_communities[i]] = community;
|
communityManager_[own_communities[i]] = community;
|
||||||
}
|
}
|
||||||
|
|
||||||
communitiesList_->setCommunities(communityManager_);
|
communitiesList_->setCommunities(communityManager_);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -3,53 +3,58 @@
|
|||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
|
|
||||||
CommunitiesList::CommunitiesList(QSharedPointer<MatrixClient> client, QWidget *parent)
|
CommunitiesList::CommunitiesList(QSharedPointer<MatrixClient> client, QWidget *parent)
|
||||||
: QWidget(parent)
|
: QWidget(parent)
|
||||||
, client_(client)
|
, client_(client)
|
||||||
{
|
{
|
||||||
QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
|
QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
|
||||||
sizePolicy.setHorizontalStretch(0);
|
sizePolicy.setHorizontalStretch(0);
|
||||||
sizePolicy.setVerticalStretch(1);
|
sizePolicy.setVerticalStretch(1);
|
||||||
setSizePolicy(sizePolicy);
|
setSizePolicy(sizePolicy);
|
||||||
|
|
||||||
setStyleSheet("border-style: none;");
|
setStyleSheet("border-style: none;");
|
||||||
|
|
||||||
topLayout_ = new QVBoxLayout(this);
|
topLayout_ = new QVBoxLayout(this);
|
||||||
topLayout_->setSpacing(0);
|
topLayout_->setSpacing(0);
|
||||||
topLayout_->setMargin(0);
|
topLayout_->setMargin(0);
|
||||||
|
|
||||||
setFixedWidth(ui::sidebar::CommunitiesSidebarSize);
|
setFixedWidth(ui::sidebar::CommunitiesSidebarSize);
|
||||||
|
|
||||||
scrollArea_ = new QScrollArea(this);
|
scrollArea_ = new QScrollArea(this);
|
||||||
scrollArea_->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
scrollArea_->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||||
scrollArea_->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
scrollArea_->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||||
scrollArea_->setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents);
|
scrollArea_->setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents);
|
||||||
scrollArea_->setWidgetResizable(true);
|
scrollArea_->setWidgetResizable(true);
|
||||||
scrollArea_->setAlignment(Qt::AlignLeading | Qt::AlignTop | Qt::AlignVCenter);
|
scrollArea_->setAlignment(Qt::AlignLeading | Qt::AlignTop | Qt::AlignVCenter);
|
||||||
|
|
||||||
scrollAreaContents_ = new QWidget();
|
scrollAreaContents_ = new QWidget();
|
||||||
|
|
||||||
contentsLayout_ = new QVBoxLayout(scrollAreaContents_);
|
contentsLayout_ = new QVBoxLayout(scrollAreaContents_);
|
||||||
contentsLayout_->setSpacing(0);
|
contentsLayout_->setSpacing(0);
|
||||||
contentsLayout_->setMargin(0);
|
contentsLayout_->setMargin(0);
|
||||||
|
|
||||||
WorldCommunityListItem *world_list_item = new WorldCommunityListItem();
|
WorldCommunityListItem *world_list_item = new WorldCommunityListItem();
|
||||||
contentsLayout_->addWidget(world_list_item);
|
contentsLayout_->addWidget(world_list_item);
|
||||||
communities_.insert("world", QSharedPointer<CommunitiesListItem>(world_list_item));
|
communities_.insert("world", QSharedPointer<CommunitiesListItem>(world_list_item));
|
||||||
connect(world_list_item, &WorldCommunityListItem::clicked,
|
connect(world_list_item,
|
||||||
this, &CommunitiesList::highlightSelectedCommunity);
|
&WorldCommunityListItem::clicked,
|
||||||
contentsLayout_->addStretch(1);
|
this,
|
||||||
|
&CommunitiesList::highlightSelectedCommunity);
|
||||||
|
contentsLayout_->addStretch(1);
|
||||||
|
|
||||||
scrollArea_->setWidget(scrollAreaContents_);
|
scrollArea_->setWidget(scrollAreaContents_);
|
||||||
topLayout_->addWidget(scrollArea_);
|
topLayout_->addWidget(scrollArea_);
|
||||||
|
|
||||||
connect(client_.data(), &MatrixClient::communityProfileRetrieved, this,
|
connect(client_.data(),
|
||||||
[=](QString communityId, QJsonObject profile) {
|
&MatrixClient::communityProfileRetrieved,
|
||||||
client_->fetchCommunityAvatar(communityId, QUrl(profile["avatar_url"].toString()));
|
this,
|
||||||
});
|
[=](QString communityId, QJsonObject profile) {
|
||||||
connect(client_.data(),
|
client_->fetchCommunityAvatar(communityId,
|
||||||
SIGNAL(communityAvatarRetrieved(const QString &, const QPixmap &)),
|
QUrl(profile["avatar_url"].toString()));
|
||||||
this,
|
});
|
||||||
SLOT(updateCommunityAvatar(const QString &,const QPixmap &)));
|
connect(client_.data(),
|
||||||
|
SIGNAL(communityAvatarRetrieved(const QString &, const QPixmap &)),
|
||||||
|
this,
|
||||||
|
SLOT(updateCommunityAvatar(const QString &, const QPixmap &)));
|
||||||
}
|
}
|
||||||
|
|
||||||
CommunitiesList::~CommunitiesList() {}
|
CommunitiesList::~CommunitiesList() {}
|
||||||
@ -57,87 +62,89 @@ CommunitiesList::~CommunitiesList() {}
|
|||||||
void
|
void
|
||||||
CommunitiesList::setCommunities(const QMap<QString, QSharedPointer<Community>> &communities)
|
CommunitiesList::setCommunities(const QMap<QString, QSharedPointer<Community>> &communities)
|
||||||
{
|
{
|
||||||
communities_.clear();
|
communities_.clear();
|
||||||
|
|
||||||
//TODO: still not sure how to handle the "world" special-case
|
// TODO: still not sure how to handle the "world" special-case
|
||||||
WorldCommunityListItem *world_list_item = new WorldCommunityListItem();
|
WorldCommunityListItem *world_list_item = new WorldCommunityListItem();
|
||||||
communities_.insert("world", QSharedPointer<CommunitiesListItem>(world_list_item));
|
communities_.insert("world", QSharedPointer<CommunitiesListItem>(world_list_item));
|
||||||
connect(world_list_item, &WorldCommunityListItem::clicked,
|
connect(world_list_item,
|
||||||
this, &CommunitiesList::highlightSelectedCommunity);
|
&WorldCommunityListItem::clicked,
|
||||||
contentsLayout_->insertWidget(0, world_list_item);
|
this,
|
||||||
|
&CommunitiesList::highlightSelectedCommunity);
|
||||||
|
contentsLayout_->insertWidget(0, world_list_item);
|
||||||
|
|
||||||
for (auto it = communities.constBegin(); it != communities.constEnd(); it++) {
|
for (auto it = communities.constBegin(); it != communities.constEnd(); it++) {
|
||||||
const auto community_id = it.key();
|
const auto community_id = it.key();
|
||||||
const auto community = it.value();
|
const auto community = it.value();
|
||||||
|
|
||||||
addCommunity(community, community_id);
|
addCommunity(community, community_id);
|
||||||
|
|
||||||
client_->fetchCommunityProfile(community_id);
|
client_->fetchCommunityProfile(community_id);
|
||||||
client_->fetchCommunityRooms(community_id);
|
client_->fetchCommunityRooms(community_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
world_list_item->setPressedState(true);
|
world_list_item->setPressedState(true);
|
||||||
emit communityChanged("world");
|
emit communityChanged("world");
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CommunitiesList::clear()
|
CommunitiesList::clear()
|
||||||
{
|
{
|
||||||
communities_.clear();
|
communities_.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CommunitiesList::addCommunity(QSharedPointer<Community> community, const QString &community_id)
|
CommunitiesList::addCommunity(QSharedPointer<Community> community, const QString &community_id)
|
||||||
{
|
{
|
||||||
CommunitiesListItem *list_item = new CommunitiesListItem(community,
|
CommunitiesListItem *list_item =
|
||||||
community_id,
|
new CommunitiesListItem(community, community_id, scrollArea_);
|
||||||
scrollArea_);
|
|
||||||
|
|
||||||
communities_.insert(community_id, QSharedPointer<CommunitiesListItem>(list_item));
|
communities_.insert(community_id, QSharedPointer<CommunitiesListItem>(list_item));
|
||||||
|
|
||||||
client_->fetchCommunityAvatar(community_id, community->getAvatar());
|
client_->fetchCommunityAvatar(community_id, community->getAvatar());
|
||||||
|
|
||||||
contentsLayout_->insertWidget(contentsLayout_->count()-1, list_item);
|
contentsLayout_->insertWidget(contentsLayout_->count() - 1, list_item);
|
||||||
|
|
||||||
connect(list_item, &CommunitiesListItem::clicked,
|
connect(list_item,
|
||||||
this, &CommunitiesList::highlightSelectedCommunity);
|
&CommunitiesListItem::clicked,
|
||||||
|
this,
|
||||||
|
&CommunitiesList::highlightSelectedCommunity);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CommunitiesList::removeCommunity(const QString &community_id)
|
CommunitiesList::removeCommunity(const QString &community_id)
|
||||||
{
|
{
|
||||||
communities_.remove(community_id);
|
communities_.remove(community_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CommunitiesList::updateCommunityAvatar(const QString &community_id, const QPixmap &img)
|
CommunitiesList::updateCommunityAvatar(const QString &community_id, const QPixmap &img)
|
||||||
{
|
{
|
||||||
if (!communities_.contains(community_id)) {
|
if (!communities_.contains(community_id)) {
|
||||||
qWarning() << "Avatar update on nonexistent community" << community_id;
|
qWarning() << "Avatar update on nonexistent community" << community_id;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
communities_.value(community_id)->setAvatar(img.toImage());
|
|
||||||
|
|
||||||
|
communities_.value(community_id)->setAvatar(img.toImage());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CommunitiesList::highlightSelectedCommunity(const QString &community_id)
|
CommunitiesList::highlightSelectedCommunity(const QString &community_id)
|
||||||
{
|
{
|
||||||
emit communityChanged(community_id);
|
emit communityChanged(community_id);
|
||||||
|
|
||||||
if (!communities_.contains(community_id)) {
|
if (!communities_.contains(community_id)) {
|
||||||
qDebug() << "CommunitiesList: clicked unknown community";
|
qDebug() << "CommunitiesList: clicked unknown community";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto it = communities_.constBegin(); it != communities_.constEnd(); it++) {
|
for (auto it = communities_.constBegin(); it != communities_.constEnd(); it++) {
|
||||||
if (it.key() != community_id) {
|
if (it.key() != community_id) {
|
||||||
it.value()->setPressedState(false);
|
it.value()->setPressedState(false);
|
||||||
} else {
|
} else {
|
||||||
it.value()->setPressedState(true);
|
it.value()->setPressedState(true);
|
||||||
scrollArea_->ensureWidgetVisible(
|
scrollArea_->ensureWidgetVisible(
|
||||||
qobject_cast<QWidget *>(it.value().data()));
|
qobject_cast<QWidget *>(it.value().data()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -3,14 +3,14 @@
|
|||||||
CommunitiesListItem::CommunitiesListItem(QSharedPointer<Community> community,
|
CommunitiesListItem::CommunitiesListItem(QSharedPointer<Community> community,
|
||||||
QString community_id,
|
QString community_id,
|
||||||
QWidget *parent)
|
QWidget *parent)
|
||||||
: QWidget(parent)
|
: QWidget(parent)
|
||||||
, community_(community)
|
, community_(community)
|
||||||
, communityId_(community_id)
|
, communityId_(community_id)
|
||||||
{
|
{
|
||||||
//menu_ = new Menu(this);
|
// menu_ = new Menu(this);
|
||||||
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||||
setFixedHeight(ui::sidebar::CommunitiesSidebarSize);
|
setFixedHeight(ui::sidebar::CommunitiesSidebarSize);
|
||||||
setFixedWidth(ui::sidebar::CommunitiesSidebarSize);
|
setFixedWidth(ui::sidebar::CommunitiesSidebarSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
CommunitiesListItem::~CommunitiesListItem() {}
|
CommunitiesListItem::~CommunitiesListItem() {}
|
||||||
@ -18,20 +18,21 @@ CommunitiesListItem::~CommunitiesListItem() {}
|
|||||||
void
|
void
|
||||||
CommunitiesListItem::setCommunity(QSharedPointer<Community> community)
|
CommunitiesListItem::setCommunity(QSharedPointer<Community> community)
|
||||||
{
|
{
|
||||||
community_ = community;
|
community_ = community;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CommunitiesListItem::setPressedState(bool state)
|
CommunitiesListItem::setPressedState(bool state)
|
||||||
{
|
{
|
||||||
if (isPressed_ != state) {
|
if (isPressed_ != state) {
|
||||||
isPressed_ = state;
|
isPressed_ = state;
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CommunitiesListItem::mousePressEvent(QMouseEvent *event) {
|
CommunitiesListItem::mousePressEvent(QMouseEvent *event)
|
||||||
|
{
|
||||||
if (event->buttons() == Qt::RightButton) {
|
if (event->buttons() == Qt::RightButton) {
|
||||||
QWidget::mousePressEvent(event);
|
QWidget::mousePressEvent(event);
|
||||||
return;
|
return;
|
||||||
@ -47,7 +48,6 @@ CommunitiesListItem::paintEvent(QPaintEvent *event)
|
|||||||
{
|
{
|
||||||
Q_UNUSED(event);
|
Q_UNUSED(event);
|
||||||
|
|
||||||
|
|
||||||
QPainter p(this);
|
QPainter p(this);
|
||||||
p.setRenderHint(QPainter::TextAntialiasing);
|
p.setRenderHint(QPainter::TextAntialiasing);
|
||||||
p.setRenderHint(QPainter::SmoothPixmapTransform);
|
p.setRenderHint(QPainter::SmoothPixmapTransform);
|
||||||
@ -65,7 +65,7 @@ CommunitiesListItem::paintEvent(QPaintEvent *event)
|
|||||||
|
|
||||||
p.setPen(QColor("#333"));
|
p.setPen(QColor("#333"));
|
||||||
|
|
||||||
QRect avatarRegion((width()-IconSize)/2, (height()-IconSize)/2, IconSize, IconSize);
|
QRect avatarRegion((width() - IconSize) / 2, (height() - IconSize) / 2, IconSize, IconSize);
|
||||||
|
|
||||||
font.setBold(false);
|
font.setBold(false);
|
||||||
p.setPen(Qt::NoPen);
|
p.setPen(Qt::NoPen);
|
||||||
@ -91,14 +91,15 @@ CommunitiesListItem::paintEvent(QPaintEvent *event)
|
|||||||
p.save();
|
p.save();
|
||||||
|
|
||||||
QPainterPath path;
|
QPainterPath path;
|
||||||
path.addEllipse((width()-IconSize)/2, (height()-IconSize)/2, IconSize, IconSize);
|
path.addEllipse(
|
||||||
|
(width() - IconSize) / 2, (height() - IconSize) / 2, IconSize, IconSize);
|
||||||
p.setClipPath(path);
|
p.setClipPath(path);
|
||||||
|
|
||||||
p.drawPixmap(avatarRegion, communityAvatar_);
|
p.drawPixmap(avatarRegion, communityAvatar_);
|
||||||
p.restore();
|
p.restore();
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: Discord-style community ping counts?
|
// TODO: Discord-style community ping counts?
|
||||||
/*if (unreadMsgCount_ > 0) {
|
/*if (unreadMsgCount_ > 0) {
|
||||||
QColor textColor("white");
|
QColor textColor("white");
|
||||||
QColor backgroundColor("#38A3D8");
|
QColor backgroundColor("#38A3D8");
|
||||||
@ -142,11 +143,11 @@ CommunitiesListItem::contextMenuEvent(QContextMenuEvent *event)
|
|||||||
{
|
{
|
||||||
Q_UNUSED(event);
|
Q_UNUSED(event);
|
||||||
|
|
||||||
//menu_->popup(event->globalPos());
|
// menu_->popup(event->globalPos());
|
||||||
}
|
}
|
||||||
|
|
||||||
WorldCommunityListItem::WorldCommunityListItem(QWidget *parent)
|
WorldCommunityListItem::WorldCommunityListItem(QWidget *parent)
|
||||||
: CommunitiesListItem(QSharedPointer<Community>(), "", parent)
|
: CommunitiesListItem(QSharedPointer<Community>(), "", parent)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -190,10 +191,10 @@ WorldCommunityListItem::paintEvent(QPaintEvent *event)
|
|||||||
p.setPen(Qt::NoPen);
|
p.setPen(Qt::NoPen);
|
||||||
p.setBrush(brush);
|
p.setBrush(brush);
|
||||||
|
|
||||||
QRect avatarRegion((width()-IconSize)/2, (height()-IconSize)/2, IconSize, IconSize);
|
QRect avatarRegion((width() - IconSize) / 2, (height() - IconSize) / 2, IconSize, IconSize);
|
||||||
p.drawEllipse(avatarRegion.center(), IconSize / 2, IconSize / 2);
|
p.drawEllipse(avatarRegion.center(), IconSize / 2, IconSize / 2);
|
||||||
QPainterPath path;
|
QPainterPath path;
|
||||||
path.addEllipse((width()-IconSize)/2, (height()-IconSize)/2, IconSize, IconSize);
|
path.addEllipse((width() - IconSize) / 2, (height() - IconSize) / 2, IconSize, IconSize);
|
||||||
p.setClipPath(path);
|
p.setClipPath(path);
|
||||||
|
|
||||||
p.drawPixmap(avatarRegion, worldIcon);
|
p.drawPixmap(avatarRegion, worldIcon);
|
||||||
|
@ -1,45 +1,44 @@
|
|||||||
#include "include/Community.h"
|
#include "include/Community.h"
|
||||||
|
|
||||||
#include <QJsonValue>
|
|
||||||
#include <QJsonArray>
|
#include <QJsonArray>
|
||||||
|
#include <QJsonValue>
|
||||||
|
|
||||||
void
|
void
|
||||||
Community::parseProfile(const QJsonObject &profile)
|
Community::parseProfile(const QJsonObject &profile)
|
||||||
{
|
{
|
||||||
if (profile["name"].type() == QJsonValue::Type::String) {
|
if (profile["name"].type() == QJsonValue::Type::String) {
|
||||||
name_ = profile["name"].toString();
|
name_ = profile["name"].toString();
|
||||||
} else {
|
} else {
|
||||||
name_ = "Unnamed Community"; //TODO: what is correct here?
|
name_ = "Unnamed Community"; // TODO: what is correct here?
|
||||||
}
|
}
|
||||||
|
|
||||||
if (profile["avatar_url"].type() == QJsonValue::Type::String) {
|
if (profile["avatar_url"].type() == QJsonValue::Type::String) {
|
||||||
avatar_ = QUrl(profile["avatar_url"].toString());
|
avatar_ = QUrl(profile["avatar_url"].toString());
|
||||||
} else {
|
} else {
|
||||||
avatar_ = QUrl();
|
avatar_ = QUrl();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (profile["short_description"].type() == QJsonValue::Type::String) {
|
if (profile["short_description"].type() == QJsonValue::Type::String) {
|
||||||
short_description_ = profile["short_description"].toString();
|
short_description_ = profile["short_description"].toString();
|
||||||
} else {
|
} else {
|
||||||
short_description_ = "";
|
short_description_ = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (profile["long_description"].type() == QJsonValue::Type::String) {
|
|
||||||
long_description_ = profile["long_description"].toString();
|
|
||||||
} else {
|
|
||||||
long_description_ = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (profile["long_description"].type() == QJsonValue::Type::String) {
|
||||||
|
long_description_ = profile["long_description"].toString();
|
||||||
|
} else {
|
||||||
|
long_description_ = "";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Community::parseRooms(const QJsonObject &rooms)
|
Community::parseRooms(const QJsonObject &rooms)
|
||||||
{
|
{
|
||||||
rooms_.clear();
|
rooms_.clear();
|
||||||
|
|
||||||
for (auto i = 0; i<rooms["chunk"].toArray().size(); i++) {
|
for (auto i = 0; i < rooms["chunk"].toArray().size(); i++) {
|
||||||
rooms_.append(rooms["chunk"].toArray()[i].toObject()["room_id"].toString());
|
rooms_.append(rooms["chunk"].toArray()[i].toObject()["room_id"].toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
emit roomsChanged(rooms_);
|
emit roomsChanged(rooms_);
|
||||||
}
|
}
|
||||||
|
@ -489,13 +489,15 @@ MatrixClient::getOwnCommunities() noexcept
|
|||||||
auto data = reply->readAll();
|
auto data = reply->readAll();
|
||||||
auto json = QJsonDocument::fromJson(data);
|
auto json = QJsonDocument::fromJson(data);
|
||||||
try {
|
try {
|
||||||
QList<QString> response;
|
QList<QString> response;
|
||||||
for (auto it = json["groups"].toArray().constBegin(); it != json["groups"].toArray().constEnd(); it++) {
|
for (auto it = json["groups"].toArray().constBegin();
|
||||||
response.append(it->toString());
|
it != json["groups"].toArray().constEnd();
|
||||||
}
|
it++) {
|
||||||
emit getOwnCommunitiesResponse(response);
|
response.append(it->toString());
|
||||||
|
}
|
||||||
|
emit getOwnCommunitiesResponse(response);
|
||||||
} catch (DeserializationException &e) {
|
} catch (DeserializationException &e) {
|
||||||
qWarning() << "Own communities:" << e.what();
|
qWarning() << "Own communities:" << e.what();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -606,7 +608,7 @@ MatrixClient::fetchCommunityProfile(const QString &communityId)
|
|||||||
|
|
||||||
QNetworkReply *reply = get(request);
|
QNetworkReply *reply = get(request);
|
||||||
connect(reply, &QNetworkReply::finished, this, [this, reply, communityId]() {
|
connect(reply, &QNetworkReply::finished, this, [this, reply, communityId]() {
|
||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
|
|
||||||
int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
||||||
|
|
||||||
@ -615,7 +617,7 @@ MatrixClient::fetchCommunityProfile(const QString &communityId)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto data = reply->readAll();
|
auto data = reply->readAll();
|
||||||
const auto json = QJsonDocument::fromJson(data).object();
|
const auto json = QJsonDocument::fromJson(data).object();
|
||||||
|
|
||||||
emit communityProfileRetrieved(communityId, json);
|
emit communityProfileRetrieved(communityId, json);
|
||||||
@ -636,7 +638,7 @@ MatrixClient::fetchCommunityRooms(const QString &communityId)
|
|||||||
|
|
||||||
QNetworkReply *reply = get(request);
|
QNetworkReply *reply = get(request);
|
||||||
connect(reply, &QNetworkReply::finished, this, [this, reply, communityId]() {
|
connect(reply, &QNetworkReply::finished, this, [this, reply, communityId]() {
|
||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
|
|
||||||
int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
||||||
|
|
||||||
@ -645,7 +647,7 @@ MatrixClient::fetchCommunityRooms(const QString &communityId)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto data = reply->readAll();
|
auto data = reply->readAll();
|
||||||
const auto json = QJsonDocument::fromJson(data).object();
|
const auto json = QJsonDocument::fromJson(data).object();
|
||||||
|
|
||||||
emit communityRoomsRetrieved(communityId, json);
|
emit communityRoomsRetrieved(communityId, json);
|
||||||
|
@ -296,21 +296,21 @@ RoomList::setFilterRooms(bool filterRooms)
|
|||||||
{
|
{
|
||||||
filterRooms_ = filterRooms;
|
filterRooms_ = filterRooms;
|
||||||
|
|
||||||
for (int i=0; i<contentsLayout_->count(); i++) {
|
for (int i = 0; i < contentsLayout_->count(); i++) {
|
||||||
|
// If roomFilter_ contains the room for the current RoomInfoListItem,
|
||||||
|
// show the list item, otherwise hide it
|
||||||
|
RoomInfoListItem *listitem =
|
||||||
|
(RoomInfoListItem *)contentsLayout_->itemAt(i)->widget();
|
||||||
|
|
||||||
//If roomFilter_ contains the room for the current RoomInfoListItem,
|
if (listitem != nullptr) {
|
||||||
//show the list item, otherwise hide it
|
if (!filterRooms) {
|
||||||
RoomInfoListItem *listitem = (RoomInfoListItem *) contentsLayout_->itemAt(i)->widget();
|
contentsLayout_->itemAt(i)->widget()->show();
|
||||||
|
} else if (roomFilter_.contains(listitem->roomId())) {
|
||||||
if (listitem != nullptr) {
|
contentsLayout_->itemAt(i)->widget()->show();
|
||||||
if (!filterRooms) {
|
} else {
|
||||||
contentsLayout_->itemAt(i)->widget()->show();
|
contentsLayout_->itemAt(i)->widget()->hide();
|
||||||
} else if (roomFilter_.contains(listitem->roomId())) {
|
}
|
||||||
contentsLayout_->itemAt(i)->widget()->show();
|
|
||||||
} else {
|
|
||||||
contentsLayout_->itemAt(i)->widget()->hide();
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filterRooms_ && !roomFilter_.contains(selectedRoom_)) {
|
if (filterRooms_ && !roomFilter_.contains(selectedRoom_)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user