void CircleWidget::contextMenuEvent(QContextMenuEvent* event) { QMenu menu; QAction* renameAction = menu.addAction(tr("Rename circle", "Menu for renaming a circle")); QAction* removeAction = menu.addAction(tr("Remove circle", "Menu for removing a circle")); QAction* openAction = nullptr; if (friendOfflineLayout()->count() + friendOnlineLayout()->count() > 0) openAction = menu.addAction(tr("Open all in new window")); QAction* selectedItem = menu.exec(mapToGlobal(event->pos())); if (selectedItem) { if (selectedItem == renameAction) { editName(); } else if (selectedItem == removeAction) { FriendListWidget* friendList = static_cast<FriendListWidget*>(parentWidget()); moveFriendWidgets(friendList); friendList->removeCircleWidget(this); int replacedCircle = Settings::getInstance().removeCircle(id); auto circleReplace = circleList.find(replacedCircle); if (circleReplace != circleList.end()) circleReplace.value()->updateID(id); else assert(true); // This should never happen. circleList.remove(replacedCircle); } else if (selectedItem == openAction) { ContentDialog* dialog = Widget::getInstance()->createContentDialog(); for (int i = 0; i < friendOnlineLayout()->count(); ++i) { QWidget* const widget = friendOnlineLayout()->itemAt(i)->widget(); FriendWidget* const friendWidget = qobject_cast<FriendWidget*>(widget); if (friendWidget != nullptr) { friendWidget->activate(); } } for (int i = 0; i < friendOfflineLayout()->count(); ++i) { QWidget* const widget = friendOfflineLayout()->itemAt(i)->widget(); FriendWidget* const friendWidget = qobject_cast<FriendWidget*>(widget); if (friendWidget != nullptr) { friendWidget->activate(); } } dialog->show(); dialog->ensureSplitterVisible(); } } setContainerAttribute(Qt::WA_UnderMouse, false); }
void ContentDialog::onChatroomWidgetClicked(GenericChatroomWidget *widget, bool group) { if (group) { ContentDialog* contentDialog = new ContentDialog(settingsWidget); contentDialog->show(); if (widget->getFriend() != nullptr) { removeFriend(widget->getFriend()->getFriendID()); Widget::getInstance()->addFriendDialog(widget->getFriend(), contentDialog); } else { removeGroup(widget->getGroup()->getGroupId()); Widget::getInstance()->addGroupDialog(widget->getGroup(), contentDialog); } contentDialog->raise(); contentDialog->activateWindow(); return; } // If we clicked on the currently active widget, don't reload and relayout everything if (activeChatroomWidget == widget) return; contentLayout->clear(); if (activeChatroomWidget != nullptr) activeChatroomWidget->setAsInactiveChatroom(); activeChatroomWidget = widget; widget->setChatForm(contentLayout); widget->setAsActiveChatroom(); widget->resetEventFlags(); widget->updateStatusLight(); updateTitle(widget); if (widget->getFriend()) widget->getFriend()->getFriendWidget()->updateStatusLight(); else widget->getGroup()->getGroupWidget()->updateStatusLight(); }