示例#1
0
void QtTreeWidget::currentChanged(const QModelIndex& current, const QModelIndex& previous) {
    RosterItem* item = nullptr;
    QModelIndexList selectedIndexList = getSelectedIndexes();
    if (selectedIndexList.empty() || !selectedIndexList[0].isValid()) {
        /* I didn't quite understand why using current didn't seem to work here.*/
    }
    else if (current.isValid()) {
        item = static_cast<RosterItem*>(current.internalPointer());
        item = dynamic_cast<ContactRosterItem*>(item);
    }
    onSomethingSelectedChanged(item);
    QTreeView::currentChanged(current, previous);
}
void QtOccupantListWidget::contextMenuEvent(QContextMenuEvent* event) {
    QModelIndex index = indexAt(event->pos());
    if (!index.isValid()) {
        return;
    }

    RosterItem* item = static_cast<RosterItem*>(index.internalPointer());
    ContactRosterItem* contact = dynamic_cast<ContactRosterItem*>(item);
    if (contact) {
        onSomethingSelectedChanged(contact);
        QMenu contextMenu;
        if (availableOccupantActions_.empty()) {
            QAction* noAction = contextMenu.addAction(tr("No actions for this user"));
            noAction->setEnabled(false);
            contextMenu.exec(event->globalPos());
        }
        else {
            std::map<QAction*, ChatWindow::OccupantAction> actions;
            foreach (ChatWindow::OccupantAction availableAction, availableOccupantActions_) {
                QString text = "Error: missing string";
                switch (availableAction) {
                case ChatWindow::Kick:
                    text = tr("Kick user");
                    break;
                case ChatWindow::Ban:
                    text = tr("Kick and ban user");
                    break;
                case ChatWindow::MakeModerator:
                    text = tr("Make moderator");
                    break;
                case ChatWindow::MakeParticipant:
                    text = tr("Make participant");
                    break;
                case ChatWindow::MakeVisitor:
                    text = tr("Remove voice");
                    break;
                }
                QAction* action = contextMenu.addAction(text);
                actions[action] = availableAction;
            }
            QAction* result = contextMenu.exec(event->globalPos());
            if (result) {
                onOccupantActionSelected(actions[result], contact);
            }
        }
    }