static bool eventTypeMatchesClass()

in src/checks/level0/wrong-qevent-cast.cpp [104:187]


static bool eventTypeMatchesClass(QtUnregularlyNamedEventTypes eventType, const std::string &eventTypeStr, StringRef className)
{
    // In the simplest case, the class is "Q" + eventType + "Event"
    std::string expectedClassName = std::string("Q") + eventTypeStr + std::string("Event");
    if (expectedClassName == className) {
        return true;
    }

    // Otherwise it's unregular and we need a map:

    static std::unordered_map<QtUnregularlyNamedEventTypes, ClassNameList, std::hash<int>> map = {
        {ActionAdded, {"QActionEvent"}},
        {ActionRemoved, {"QActionEvent"}},
        {ActionChanged, {"QActionEvent"}},
        {ChildAdded, {"QChildEvent"}},
        {ChildRemoved, {"QChildEvent"}},
        {ChildPolished, {"QChildEvent"}},
        {MetaCall, {"QDBusSpyCallEvent", "QDBusCallDeliveryEvent"}},
        {DragEnter, {"QDragEnterEvent", "QDragMoveEvent", "QDropEvent"}},
        {DragLeave, {"QDragLeaveEvent", "QDragMoveEvent", "QDropEvent"}},
        {DragMove, {"QDragMoveEvent", "QDropEvent"}},
        {FocusIn, {"QFocusEvent"}},
        {FocusOut, {"QFocusEvent"}},
        {FocusAboutToChange, {"QFocusEvent"}},
        {Gesture, {"QGestureEvent"}},
        {GestureOverride, {"QGestureEvent"}},
        {GraphicsSceneContextMenu, {"QGraphicsSceneEvent"}},
        {GraphicsSceneHoverEnter, {"QGraphicsSceneHoverEvent", "QGraphicsSceneEvent"}},
        {GraphicsSceneHoverMove, {"QGraphicsSceneHoverEvent", "QGraphicsSceneEvent"}},
        {GraphicsSceneHoverLeave, {"QGraphicsSceneHoverEvent", "QGraphicsSceneEvent"}},
        {GraphicsSceneHelp, {"QGraphicsSceneEvent"}},
        {GraphicsSceneDragEnter, {"QGraphicsSceneDragDropEvent", "QGraphicsSceneEvent"}},
        {GraphicsSceneDragMove, {"QGraphicsSceneDragDropEvent", "QGraphicsSceneEvent"}},
        {GraphicsSceneDragLeave, {"QGraphicsSceneDragDropEvent", "QGraphicsSceneEvent"}},
        {GraphicsSceneDrop, {"QGraphicsSceneDragDropEvent", "QGraphicsSceneEvent"}},
        {GraphicsSceneWheel, {"QGraphicsSceneEvent"}},
        {GraphicsSceneResize, {"QGraphicsSceneEvent"}},
        {GraphicsSceneMouseMove, {"QGraphicsSceneMouseEvent"}},
        {GraphicsSceneMousePress, {"QGraphicsSceneMouseEvent"}},
        {GraphicsSceneMouseRelease, {"QGraphicsSceneMouseEvent"}},
        {GraphicsSceneMouseDoubleClick, {"QGraphicsSceneMouseEvent"}},
        //{ StatusTip, {"QStatusTipEvent" } },
        {ToolTip, {"QHelpEvent"}},
        {WhatsThis, {"QHelpEvent"}},
        {QueryWhatsThis, {"QHelpEvent"}},
        {HoverEnter, {"QHoverEvent", "QInputEvent"}},
        {HoverLeave, {"QHoverEvent", "QInputEvent"}},
        {HoverMove, {"QHoverEvent", "QInputEvent"}},
        {KeyPress, {"QKeyEvent", "QInputEvent"}},
        {KeyRelease, {"QKeyEvent", "QInputEvent"}},
        {ShortcutOverride, {"QKeyEvent", "QInputEvent"}},
        {MouseButtonPress, {"QMouseEvent"}},
        {MouseButtonRelease, {"QMouseEvent"}},
        {MouseButtonDblClick, {"QMouseEvent"}},
        {MouseMove, {"QMouseEvent"}},
        {NonClientAreaMouseMove, {"QMouseEvent"}},
        {NonClientAreaMouseButtonPress, {"QMouseEvent"}},
        {NonClientAreaMouseButtonRelease, {"QMouseEvent"}},
        {NonClientAreaMouseButtonRelease, {"QMouseEvent"}},
        {NonClientAreaMouseButtonDblClick, {"QMouseEvent"}},
        {NativeGesture, {"QInputEvent"}},
        {OrientationChange, {"QScreenOrientationChangeEvent"}},
        {TabletEnterProximity, {"QTabletEvent", "QInputEvent"}},
        {TabletLeaveProximity, {"QTabletEvent", "QInputEvent"}},
        {TabletPress, {"QTabletEvent", "QInputEvent"}},
        {TabletMove, {"QTabletEvent", "QInputEvent"}},
        {TabletRelease, {"QTabletEvent", "QInputEvent"}},
        {TouchBegin, {"QTouchEvent", "QInputEvent"}},
        {TouchCancel, {"QTouchEvent", "QInputEvent"}},
        {TouchEnd, {"QTouchEvent", "QInputEvent"}},
        {TouchUpdate, {"QTouchEvent", "QInputEvent"}},
        {Wheel, {"QInputEvent"}},
        {ContextMenu, {"QInputEvent"}}};

    auto it = map.find(eventType);
    if (it == map.cend()) {
        return false;
    }

    const ClassNameList &classes = it->second;
    const bool found = clazy::find(classes, className) != classes.cend();

    return found;
}