/* Список каналов и PM с unread/online; загружает данные DbManager и принимает обновления bridge. * Выбор и действия пользователя передаёт наружу signals; виджет используется в GUI-потоке. */ #pragma once #include #include #include #include #include #include #include class DbManager; class QLabel; class CpuLoadIndicator; class ChannelList : public QWidget { Q_OBJECT public: explicit ChannelList(DbManager* db = nullptr, QWidget *parent = nullptr); void loadChannels(); void refreshDmPresence(); void onDmCallRoute(const uint8_t* data, int len); void clearDmPresence(); void selectChannel(const QString& channelId); void setChannelPeersOnline(const QString& channelId, int count); void setAutoConnectActive(bool active); void setCpuLoad(int percent); void setChannelUnreadCount(const QString& channelId, int count); int getChannelUnreadCount(const QString& channelId) const; signals: void channelSelected(const QString& channelId); void filesRequested(const QString& channelId); void ownFilesDropped(const QString& channelId, const QStringList& paths); void joinRequested(); void createGroupRequested(); void settingsRequested(); void connMonitorRequested(); protected: bool eventFilter(QObject* target, QEvent* event) override; private: QListView *m_listView; QStandardItemModel *m_model; DbManager *m_db; QWidget *m_footer; QLabel *m_dropHint; bool m_autoConnectActive = false; QHash m_dmOnline; QTimer* m_dmPresenceTimer; CpuLoadIndicator* m_cpuLoad; };