File indexing completed on 2025-09-14 03:42:59
0001 /* 0002 File : MQTTSubscriptionWidget.h 0003 Project : LabPlot 0004 Description : manage topics and subscribing 0005 -------------------------------------------------------------------- 0006 SPDX-FileCopyrightText: 2019 Kovacs Ferencz <kferike98@gmail.com> 0007 SPDX-License-Identifier: GPL-2.0-or-later 0008 */ 0009 0010 #ifndef MQTTSUBSCRIPTIONWIDGET_H 0011 #define MQTTSUBSCRIPTIONWIDGET_H 0012 0013 #include "ui_mqttsubscriptionwidget.h" 0014 class QMqttSubscription; 0015 0016 class MQTTSubscriptionWidget : public QWidget { 0017 Q_OBJECT 0018 0019 public: 0020 explicit MQTTSubscriptionWidget(QWidget* parent = nullptr); 0021 ~MQTTSubscriptionWidget() override; 0022 enum class MQTTParentWidget { ImportFileWidget, LiveDataDock }; 0023 0024 void setTopicList(const QStringList& topicList); 0025 QStringList getTopicList(); 0026 0027 int subscriptionCount(); 0028 QTreeWidgetItem* topLevelTopic(int); 0029 QTreeWidgetItem* topLevelSubscription(int); 0030 QTreeWidgetItem* currentItem() const; 0031 void addTopic(QTreeWidgetItem*); 0032 int topicCount(); 0033 void setTopicTreeText(const QString&); 0034 void makeVisible(bool); 0035 void testSubscribe(QTreeWidgetItem*); 0036 void testUnsubscribe(QTreeWidgetItem*); 0037 0038 static bool checkTopicContains(const QString&, const QString&); 0039 static void findSubscriptionLeafChildren(QVector<QTreeWidgetItem*>&, QTreeWidgetItem*); 0040 0041 Q_SIGNALS: 0042 void subscriptionChanged(); 0043 void makeSubscription(const QString& name, quint8 QoS); 0044 void MQTTUnsubscribeFromTopic(const QString&, QVector<QTreeWidgetItem*> children); 0045 void removeMQTTSubscription(const QString&); 0046 void addBeforeRemoveSubscription(const QString&, quint8); 0047 void reparentTopic(const QString& topic, const QString& parent); 0048 void enableWill(bool); 0049 0050 private: 0051 Ui::MQTTSubscriptionWidget ui; 0052 MQTTParentWidget m_parent; 0053 QCompleter* m_subscriptionCompleter{nullptr}; 0054 QCompleter* m_topicCompleter{nullptr}; 0055 QStringList m_topicList; 0056 bool m_searching{false}; 0057 QTimer* m_searchTimer; 0058 0059 void unsubscribeFromTopic(const QString&); 0060 void manageCommonLevelSubscriptions(); 0061 void updateSubscriptionCompleter(); 0062 0063 static void addSubscriptionChildren(QTreeWidgetItem*, QTreeWidgetItem*); 0064 static void restoreSubscriptionChildren(QTreeWidgetItem* topic, QTreeWidgetItem* subscription, const QStringList& list, int level); 0065 static int checkCommonChildCount(int levelIdx, int level, QStringList& namelist, QTreeWidgetItem* currentItem); 0066 static int commonLevelIndex(const QString& first, const QString& second); 0067 static QString checkCommonLevel(const QString&, const QString&); 0068 0069 private Q_SLOTS: 0070 void mqttAvailableTopicDoubleClicked(QTreeWidgetItem* item, int column); 0071 void mqttSubscribedTopicDoubleClicked(QTreeWidgetItem* item, int column); 0072 void mqttSubscribe(); 0073 void mqttUnsubscribe(); 0074 void setTopicCompleter(const QString&); 0075 void scrollToTopicTreeItem(const QString& rootName); 0076 void scrollToSubsriptionTreeItem(const QString& rootName); 0077 void topicTimeout(); 0078 void updateSubscriptionTree(const QVector<QString>&); 0079 void clearWidgets(); 0080 void onDisconnect(); 0081 }; 0082 0083 #endif // MQTTSUBSCRIPTIONWIDGET_H