#pragma once #include #include #include #include #include "SelectionContext.h" class ItemTooltip; class QEvent; class QLabel; class QTimer; // One buffered item: its icon, its count in a larger type, and a sub-line beneath the // count (REQ-UI-SINGLE-SELECTION). Boxed so a row of them reads as separate quantities // rather than as a run of text. // // Hovering it explains where its item comes from (REQ-UI-ITEM-TOOLTIP). class ItemChip : public QWidget { Q_OBJECT public: // An empty icon leaves the icon off and the chip laid out around the text alone. ItemChip(const SelectionContext& context, const std::string& itemId, const QPixmap& icon, QWidget* parent = nullptr); void setCount(const QString& count); // Left empty for an item with nothing to say beneath its count. void setSubLine(const QString& subLine); protected: void enterEvent(QEvent* event) override; void leaveEvent(QEvent* event) override; private: void showTooltip(); SelectionContext m_context; std::string m_itemId; QLabel* m_iconLabel; QLabel* m_countLabel; QLabel* m_subLineLabel; // Held back so a cursor crossing the chip on its way elsewhere does not flash the // tooltip, the way an ordinary tooltip is. QTimer* m_hoverTimer; // Built on the first hover, because most chips are never hovered at all. ItemTooltip* m_tooltip = nullptr; };