41 #include <QApplication>
43 #include <QContextMenuEvent>
45 #include <QFileDialog>
46 #include <QInputDialog>
62 , isDefaultAvatar{
true}
64 avatar->setPixmap(QPixmap(
":/img/contact.svg"));
66 statusPic.setMargin(3);
68 auto frnd = chatroom->getFriend();
69 nameLabel->setText(frnd->getDisplayedName());
75 statusMessageLabel->setTextFormat(Qt::PlainText);
99 setBackgroundRole(QPalette::Highlight);
102 installEventFilter(
this);
106 if (
chatroom->possibleToOpenInNewWindow()) {
107 const auto openChatWindow = menu.addAction(tr(
"Open chat in new window"));
108 connect(openChatWindow, &QAction::triggered, [=]() { emit
newWindowOpened(
this); });
111 if (
chatroom->canBeRemovedFromWindow()) {
112 const auto removeChatWindow = menu.addAction(tr(
"Remove chat from this window"));
118 menu.addMenu(tr(
"Invite to group",
"Menu to invite a friend to a groupchat"));
119 inviteMenu->setEnabled(
chatroom->canBeInvited());
120 const auto newGroupAction = inviteMenu->addAction(tr(
"To new group"));
122 inviteMenu->addSeparator();
124 for (
const auto& group :
chatroom->getGroups()) {
125 const auto groupAction = inviteMenu->addAction(tr(
"Invite to group '%1'").arg(group.name));
126 connect(groupAction, &QAction::triggered, [=]() {
chatroom->inviteFriend(group.group); });
129 const auto circleId =
chatroom->getCircleId();
131 menu.addMenu(tr(
"Move to circle...",
"Menu to move a friend into a different circle"));
133 const auto newCircleAction = circleMenu->addAction(tr(
"To new circle"));
136 if (circleId != -1) {
137 const auto circleName =
chatroom->getCircleName();
138 const auto removeCircleAction =
139 circleMenu->addAction(tr(
"Remove from circle '%1'").arg(circleName));
143 circleMenu->addSeparator();
145 for (
const auto& circle :
chatroom->getOtherCircles()) {
146 QAction* action =
new QAction(tr(
"Move to circle \"%1\"").arg(circle.name), circleMenu);
147 connect(action, &QAction::triggered, [=]() {
moveToCircle(circle.circleId); });
148 circleMenu->addAction(action);
151 const auto setAlias = menu.addAction(tr(
"Set alias..."));
156 menu.addAction(tr(
"Auto accept files from this friend",
"context menu entry"));
157 autoAccept->setCheckable(
true);
158 autoAccept->setChecked(!
chatroom->autoAcceptEnabled());
162 if (
chatroom->friendCanBeRemoved()) {
163 const auto friendPk =
chatroom->getFriend()->getPublicKey();
164 const auto removeAction =
165 menu.addAction(tr(
"Remove friend",
"Menu to remove the friend from the friend list"));
166 connect(removeAction, &QAction::triggered,
this, [=]() { emit
removeFriend(friendPk); },
167 Qt::QueuedConnection);
171 const auto aboutWindow = menu.addAction(tr(
"Show details"));
174 const auto pos =
event->globalPos();
177 removeEventFilter(
this);
180 setBackgroundRole(QPalette::Window);
186 chatroom->removeFriendFromDialogs();
191 std::tuple<CircleWidget*, FriendListWidget*> getCircleAndFriendList(
const Friend* frnd,
FriendWidget* fw)
196 auto w = circleWidget ?
static_cast<QWidget*
>(circleWidget) :
static_cast<QWidget*
>(fw);
197 auto friendList = qobject_cast<FriendListWidget*>(w->parentWidget());
198 return std::make_tuple(circleWidget, friendList);
205 const auto frnd =
chatroom->getFriend();
208 std::tie(circleWidget, friendList) = getCircleAndFriendList(frnd,
this);
210 if (circleWidget !=
nullptr) {
214 if (friendList !=
nullptr) {
219 auto circleId = s.addCircle();
220 s.setFriendCircleID(pk, circleId);
226 const auto frnd =
chatroom->getFriend();
229 std::tie(circleWidget, friendList) = getCircleAndFriendList(frnd,
this);
231 if (friendList !=
nullptr) {
236 s.setFriendCircleID(pk, -1);
239 if (circleWidget !=
nullptr) {
246 const auto frnd =
chatroom->getFriend();
253 if (newCircleWidget) {
254 newCircleWidget->addFriendWidget(
this, frnd->
getStatus());
255 newCircleWidget->setExpanded(
true);
258 s.setFriendCircleID(pk, newCircleId);
261 if (oldCircleWidget) {
262 oldCircleWidget->updateStatus();
269 const auto oldDir =
chatroom->getAutoAcceptDir();
271 QFileDialog::getExistingDirectory(Q_NULLPTR,
272 tr(
"Choose an auto accept directory",
"popup title"),
281 const auto frnd =
chatroom->getFriend();
283 std::unique_ptr<IAboutFriend> about = std::unique_ptr<IAboutFriend>(iabout);
304 active ? QStringLiteral(
":img/contact_dark.svg") : QStringLiteral(
":img/contact.svg");
311 const auto frnd =
chatroom->getFriend();
331 const auto frnd =
chatroom->getFriend();
332 const int status =
static_cast<int>(frnd->
getStatus());
335 static const QVector<QString> names = {
344 return event ? tr(
"New message") : names.value(status);
385 const auto frnd =
chatroom->getFriend();
411 const auto frnd =
chatroom->getFriend();
422 const auto frnd =
chatroom->getFriend();
429 const QString path = QString(
":/img/contact%1.svg").arg(
isActive() ?
"_dark" :
"");
435 if (ev->button() == Qt::LeftButton) {
439 GenericChatroomWidget::mousePressEvent(ev);
444 if (!(ev->buttons() & Qt::LeftButton)) {
448 const int distance = (
dragStartPos - ev->pos()).manhattanLength();
449 if (distance > QApplication::startDragDistance()) {
450 QMimeData* mdata =
new QMimeData;
455 QDrag* drag =
new QDrag(
this);
456 drag->setMimeData(mdata);
458 drag->exec(Qt::CopyAction | Qt::MoveAction);