#ifndef DEVICE_MENU_H #define DEVICE_MENU_H #include #include "config.h" #include Q_DECLARE_METATYPE(OPTSCHEME) class device_menu : public QMenu { Q_OBJECT typedef struct _pop_menu { QMenu* menu; std::vector actions; bool operator==(const QString& menu_title) { return menu->title() == menu_title; } }POPMENU; std::vector menus_; QAction* cur_action_; QAction* none_action_; QActionGroup* group_action_; std::mutex mutex_; QMenu* find_device_menu(const QString& dev_name); QAction* find_device_config(const QString& dev_name, const QString& cfg_name); public: device_menu(QWidget* parent = nullptr); device_menu(const QString& title, QWidget* parent = nullptr); void update(const std::vector* dev_cfgs); void connectedDevice(const QString& device); void disconnectedDevice(const QString& device); void setOptionChecked(const QString& device, const QString& opt, bool checked); void get_online_devices(QList& dev_names); signals: void scanOptionsChanged(const QString& device, const QString& opt, bool checked_now); private slots: void on_act_triggered(QAction* act); }; #endif // DEVICE_MENU_H