nextcloud-desktop/src/gui/profilepagewidget.cpp
Felix Weilbach db337c4457 Add profile page
Fix: #3889

Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
2021-11-10 13:11:47 +01:00

46 lines
1.6 KiB
C++

#include "profilepagewidget.h"
#include "guiutility.h"
#include "ocsprofileconnector.h"
namespace OCC {
ProfilePageMenu::ProfilePageMenu(AccountPtr account, const QString &shareWithUserId, QWidget *parent)
: QWidget(parent)
, _profileConnector(account)
{
connect(&_profileConnector, &OcsProfileConnector::hovercardFetched, this, &ProfilePageMenu::onHovercardFetched);
connect(&_profileConnector, &OcsProfileConnector::iconLoaded, this, &ProfilePageMenu::onIconLoaded);
_profileConnector.fetchHovercard(shareWithUserId);
}
ProfilePageMenu::~ProfilePageMenu() = default;
void ProfilePageMenu::exec(const QPoint &globalPosition)
{
_menu.exec(globalPosition);
}
void ProfilePageMenu::onHovercardFetched()
{
_menu.clear();
const auto hovercardActions = _profileConnector.hovercard()._actions;
for (const auto &hovercardAction : hovercardActions) {
const auto action = _menu.addAction(hovercardAction._icon, hovercardAction._title);
const auto link = hovercardAction._link;
connect(action, &QAction::triggered, action, [link](bool) { Utility::openBrowser(link); });
}
}
void ProfilePageMenu::onIconLoaded(const std::size_t &hovercardActionIndex)
{
const auto hovercardActions = _profileConnector.hovercard()._actions;
const auto menuActions = _menu.actions();
if (hovercardActionIndex >= hovercardActions.size()
|| hovercardActionIndex >= static_cast<std::size_t>(menuActions.size())) {
return;
}
const auto menuAction = menuActions[static_cast<int>(hovercardActionIndex)];
menuAction->setIcon(hovercardActions[hovercardActionIndex]._icon);
}
}