#ifndef WSJTX_UDP_CLIENT_WIDGET_MODEL_HPP__ #define WSJTX_UDP_CLIENT_WIDGET_MODEL_HPP__ #include #include #include #include #include #include "MessageServer.hpp" class QAbstractItemModel; class QModelIndex; using Frequency = MessageServer::Frequency; class ClientWidget : public QDockWidget { Q_OBJECT; public: explicit ClientWidget (QAbstractItemModel * decodes_model, QAbstractItemModel * beacons_model , QString const& id, QWidget * parent = nullptr); Q_SLOT void update_status (QString const& id, Frequency f, QString const& mode, QString const& dx_call , QString const& report, QString const& tx_mode, bool tx_enabled , bool transmitting, bool decoding, qint32 rx_df, qint32 tx_df , QString const& de_call, QString const& de_grid, QString const& dx_grid); Q_SLOT void decode_added (bool /*is_new*/, QString const& client_id, QTime /*time*/, qint32 /*snr*/ , float /*delta_time*/, quint32 /*delta_frequency*/, QString const& /*mode*/ , QString const& /*message*/); Q_SLOT void beacon_spot_added (bool /*is_new*/, QString const& client_id, QTime /*time*/, qint32 /*snr*/ , float /*delta_time*/, Frequency /*delta_frequency*/, qint32 /*drift*/ , QString const& /*callsign*/, QString const& /*grid*/, qint32 /*power*/); Q_SIGNAL void do_reply (QModelIndex const&); Q_SIGNAL void do_halt_tx (QString const& id, bool auto_only); Q_SIGNAL void do_free_text (QString const& id, QString const& text, bool); private: QString id_; class IdFilterModel final : public QSortFilterProxyModel { public: IdFilterModel (QString const& client_id); void de_call (QString const&); void rx_df (int); QVariant data (QModelIndex const& proxy_index, int role = Qt::DisplayRole) const override; protected: bool filterAcceptsRow (int source_row, QModelIndex const& source_parent) const override; private: QString client_id_; QString call_; QRegularExpression base_call_re_; int rx_df_; } decodes_proxy_model_; QTableView * decodes_table_view_; QTableView * beacons_table_view_; QLineEdit * message_line_edit_; QStackedLayout * decodes_stack_; QAbstractButton * auto_off_button_; QAbstractButton * halt_tx_button_; QLabel * mode_label_; QLabel * frequency_label_; QLabel * rx_df_label_; QLabel * tx_df_label_; QLabel * report_label_; }; #endif