// The left-hand category tree. Lane GUI. // // docs/03-gui-spec.md ยง1: All Downloads / Unfinished / Finished, then Categories and // Queues from category.list / queue.list. Selecting a node emits the filter the table // should apply. Per-node counts come later (they need the full task set, not just the // filtered page). #pragma once #include #include #include #include "models/DownloadFilterProxy.hpp" class QTreeWidget; class QTreeWidgetItem; namespace velox::gui { class CategoryPanel : public QWidget { Q_OBJECT public: explicit CategoryPanel(QWidget *parent = nullptr); public slots: void setCategories(const QJsonArray &items); void setQueues(const QJsonArray &items); /// Per-node task counts, keyed by the node's filter. Missing keys render no count. void setCounts(int all, int unfinished, int finished, const QHash &byCategory, const QHash &byQueue); signals: void selectionChanged(const velox::gui::TaskSelection &selection); private: QTreeWidgetItem *makeItem(QTreeWidgetItem *parent, const QString &label, const TaskSelection &sel); void onCurrentItemChanged(QTreeWidgetItem *current); QTreeWidget *tree_; QTreeWidgetItem *categoriesRoot_; QTreeWidgetItem *queuesRoot_; }; } // namespace velox::gui