| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  | #ifndef CONFIGURATION_HPP_
 | 
					
						
							|  |  |  | #define CONFIGURATION_HPP_
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <QObject>
 | 
					
						
							|  |  |  | #include <QFont>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "Radio.hpp"
 | 
					
						
							|  |  |  | #include "IARURegions.hpp"
 | 
					
						
							|  |  |  | #include "AudioDevice.hpp"
 | 
					
						
							|  |  |  | #include "Transceiver.hpp"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "pimpl_h.hpp"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class QSettings; | 
					
						
							|  |  |  | class QWidget; | 
					
						
							|  |  |  | class QAudioDeviceInfo; | 
					
						
							|  |  |  | class QString; | 
					
						
							|  |  |  | class QDir; | 
					
						
							|  |  |  | class Bands; | 
					
						
							|  |  |  | class FrequencyList_v2; | 
					
						
							|  |  |  | class StationList; | 
					
						
							|  |  |  | class QStringListModel; | 
					
						
							|  |  |  | class QHostAddress; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // Class Configuration
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //  Encapsulates the control, access  and, persistence of user defined
 | 
					
						
							|  |  |  | //  settings for the wsjtx GUI.  Setting values are accessed through a
 | 
					
						
							|  |  |  | //  QDialog window containing concept orientated tab windows.
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // Responsibilities
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //  Provides management of  the CAT and PTT  rig interfaces, providing
 | 
					
						
							|  |  |  | //  control access  via a minimal generic  set of Qt slots  and status
 | 
					
						
							|  |  |  | //  updates via Qt signals.  Internally  the rig control capability is
 | 
					
						
							|  |  |  | //  farmed out  to a  separate thread  since many  of the  rig control
 | 
					
						
							|  |  |  | //  functions are blocking.
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //  All user  settings required by  the wsjtx GUI are  exposed through
 | 
					
						
							|  |  |  | //  query methods.  Settings only become  visible once they  have been
 | 
					
						
							|  |  |  | //  accepted by the user which is  done by clicking the "OK" button on
 | 
					
						
							|  |  |  | //  the settings dialog.
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //  The QSettings instance  passed to the constructor is  used to read
 | 
					
						
							|  |  |  | //  and write user settings.
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //  Pointers to three QAbstractItemModel  objects are provided to give
 | 
					
						
							|  |  |  | //  access to amateur band  information, user working frequencies and,
 | 
					
						
							|  |  |  | //  user operating  band information.  These porovide  consistent data
 | 
					
						
							|  |  |  | //  models that can  be used in GUI lists or  tables or simply queried
 | 
					
						
							|  |  |  | //  for user defined bands, default operating frequencies and, station
 | 
					
						
							|  |  |  | //  descriptions.
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | class Configuration final | 
					
						
							|  |  |  |   : public QObject | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   Q_OBJECT | 
					
						
							|  |  |  |   Q_ENUMS (DataMode Type2MsgGen) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  |   using MODE = Transceiver::MODE; | 
					
						
							|  |  |  |   using TransceiverState = Transceiver::TransceiverState; | 
					
						
							|  |  |  |   using Frequency = Radio::Frequency; | 
					
						
							|  |  |  |   using port_type = quint16; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   enum DataMode {data_mode_none, data_mode_USB, data_mode_data}; | 
					
						
							|  |  |  |   Q_ENUM (DataMode) | 
					
						
							|  |  |  |   enum Type2MsgGen {type_2_msg_1_full, type_2_msg_3_full, type_2_msg_5_only}; | 
					
						
							|  |  |  |   Q_ENUM (Type2MsgGen) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   explicit Configuration (QDir const& temp_directory, QSettings * settings, | 
					
						
							|  |  |  |                           QWidget * parent = nullptr); | 
					
						
							|  |  |  |   ~Configuration (); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   void select_tab (int); | 
					
						
							|  |  |  |   int exec (); | 
					
						
							|  |  |  |   bool is_active () const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   QDir temp_dir () const; | 
					
						
							|  |  |  |   QDir doc_dir () const; | 
					
						
							|  |  |  |   QDir data_dir () const; | 
					
						
							|  |  |  |   QDir writeable_data_dir () const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   QAudioDeviceInfo const& audio_input_device () const; | 
					
						
							|  |  |  |   AudioDevice::Channel audio_input_channel () const; | 
					
						
							|  |  |  |   QAudioDeviceInfo const& audio_output_device () const; | 
					
						
							|  |  |  |   AudioDevice::Channel audio_output_channel () const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // These query methods should be used after a call to exec() to
 | 
					
						
							|  |  |  |   // determine if either the audio input or audio output stream
 | 
					
						
							|  |  |  |   // parameters have changed. The respective streams should be
 | 
					
						
							|  |  |  |   // re-opened if they return true.
 | 
					
						
							|  |  |  |   bool restart_audio_input () const; | 
					
						
							|  |  |  |   bool restart_audio_output () const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-07 23:11:11 -04:00
										 |  |  |   bool use_dynamic_grid() const; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   QString my_callsign () const; | 
					
						
							|  |  |  |   QString my_grid () const; | 
					
						
							| 
									
										
										
										
											2018-07-19 00:39:31 -04:00
										 |  |  |   QString my_station () const; | 
					
						
							| 
									
										
										
										
											2018-10-27 10:09:40 -04:00
										 |  |  |   QSet<QString> my_groups() const; | 
					
						
							| 
									
										
										
										
											2018-07-20 10:13:12 -04:00
										 |  |  |   int activity_aging() const; | 
					
						
							|  |  |  |   int callsign_aging() const; | 
					
						
							| 
									
										
										
										
											2018-07-19 10:34:19 -04:00
										 |  |  |   QString my_qth () const; | 
					
						
							| 
									
										
										
										
											2018-09-06 15:22:24 -04:00
										 |  |  |   QString cq_message () const; | 
					
						
							|  |  |  |   QString reply_message () const; | 
					
						
							| 
									
										
										
										
											2018-09-15 17:33:19 -04:00
										 |  |  |   QFont table_font() const; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   QFont text_font () const; | 
					
						
							| 
									
										
										
										
											2018-09-07 10:12:40 -04:00
										 |  |  |   QFont rx_text_font () const; | 
					
						
							|  |  |  |   QFont tx_text_font () const; | 
					
						
							| 
									
										
										
										
											2018-09-12 20:51:46 -04:00
										 |  |  |   QFont compose_text_font () const; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   qint32 id_interval () const; | 
					
						
							|  |  |  |   qint32 ntrials() const; | 
					
						
							|  |  |  |   qint32 aggressive() const; | 
					
						
							|  |  |  |   qint32 RxBandwidth() const; | 
					
						
							|  |  |  |   double degrade() const; | 
					
						
							|  |  |  |   double txDelay() const; | 
					
						
							|  |  |  |   bool id_after_73 () const; | 
					
						
							| 
									
										
										
										
											2018-09-11 10:52:07 -04:00
										 |  |  |   bool tx_qsy_allowed () const; | 
					
						
							| 
									
										
										
										
											2018-08-27 21:19:38 -04:00
										 |  |  |   bool spot_to_reporting_networks () const; | 
					
						
							|  |  |  |   void set_spot_to_reporting_networks (bool); | 
					
						
							| 
									
										
										
										
											2018-08-24 09:38:00 -04:00
										 |  |  |   bool transmit_directed() const; | 
					
						
							| 
									
										
										
										
											2018-07-24 16:46:04 -04:00
										 |  |  |   bool autoreply_off_at_startup () const; | 
					
						
							| 
									
										
										
										
											2018-10-03 18:55:57 -04:00
										 |  |  |   bool beacon_anywhere() const; | 
					
						
							| 
									
										
										
										
											2018-09-09 14:37:34 -04:00
										 |  |  |   bool relay_off() const; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   bool monitor_off_at_startup () const; | 
					
						
							|  |  |  |   bool monitor_last_used () const; | 
					
						
							| 
									
										
										
										
											2018-08-17 10:07:17 -04:00
										 |  |  |   bool log_as_DATA () const; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   bool report_in_comments () const; | 
					
						
							|  |  |  |   bool prompt_to_log () const; | 
					
						
							|  |  |  |   bool insert_blank () const; | 
					
						
							|  |  |  |   bool DXCC () const; | 
					
						
							| 
									
										
										
										
											2018-03-05 14:49:51 -05:00
										 |  |  |   bool ppfx() const; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   bool clear_DX () const; | 
					
						
							|  |  |  |   bool miles () const; | 
					
						
							|  |  |  |   bool quick_call () const; | 
					
						
							|  |  |  |   bool disable_TX_on_73 () const; | 
					
						
							| 
									
										
										
										
											2018-07-06 20:01:38 -04:00
										 |  |  |   int beacon () const; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   int watchdog () const; | 
					
						
							|  |  |  |   bool TX_messages () const; | 
					
						
							|  |  |  |   bool split_mode () const; | 
					
						
							|  |  |  |   bool enable_VHF_features () const; | 
					
						
							|  |  |  |   bool decode_at_52s () const; | 
					
						
							|  |  |  |   bool single_decode () const; | 
					
						
							|  |  |  |   bool twoPass() const; | 
					
						
							| 
									
										
										
										
											2018-03-05 14:49:51 -05:00
										 |  |  |   bool bFox() const; | 
					
						
							|  |  |  |   bool bHound() const; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   bool x2ToneSpacing() const; | 
					
						
							| 
									
										
										
										
											2018-03-05 14:49:51 -05:00
										 |  |  |   bool x4ToneSpacing() const; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   bool contestMode() const; | 
					
						
							|  |  |  |   bool MyDx() const; | 
					
						
							|  |  |  |   bool CQMyN() const; | 
					
						
							|  |  |  |   bool NDxG() const; | 
					
						
							|  |  |  |   bool NN() const; | 
					
						
							|  |  |  |   bool EMEonly() const; | 
					
						
							|  |  |  |   bool post_decodes () const; | 
					
						
							| 
									
										
										
										
											2018-03-05 14:49:51 -05:00
										 |  |  |   QString opCall() const; | 
					
						
							| 
									
										
										
										
											2018-09-02 00:05:15 -04:00
										 |  |  |   QString aprs_server_name () const; | 
					
						
							|  |  |  |   port_type aprs_server_port () const; | 
					
						
							| 
									
										
										
										
											2018-09-05 11:33:50 -04:00
										 |  |  |   QString aprs_passcode () const; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   QString udp_server_name () const; | 
					
						
							|  |  |  |   port_type udp_server_port () const; | 
					
						
							| 
									
										
										
										
											2018-03-05 14:49:51 -05:00
										 |  |  |   QString n1mm_server_name () const; | 
					
						
							|  |  |  |   port_type n1mm_server_port () const; | 
					
						
							|  |  |  |   bool valid_n1mm_info () const; | 
					
						
							|  |  |  |   bool broadcast_to_n1mm() const; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   bool accept_udp_requests () const; | 
					
						
							|  |  |  |   bool udpWindowToFront () const; | 
					
						
							|  |  |  |   bool udpWindowRestore () const; | 
					
						
							| 
									
										
										
										
											2018-08-17 10:07:17 -04:00
										 |  |  |   bool udpEnabled () const; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   Bands * bands (); | 
					
						
							|  |  |  |   Bands const * bands () const; | 
					
						
							|  |  |  |   IARURegions::Region region () const; | 
					
						
							|  |  |  |   FrequencyList_v2 * frequencies (); | 
					
						
							|  |  |  |   FrequencyList_v2 const * frequencies () const; | 
					
						
							|  |  |  |   StationList * stations (); | 
					
						
							|  |  |  |   StationList const * stations () const; | 
					
						
							| 
									
										
										
										
											2018-08-08 23:19:27 -04:00
										 |  |  |   bool auto_switch_bands() const; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   QStringListModel * macros (); | 
					
						
							|  |  |  |   QStringListModel const * macros () const; | 
					
						
							|  |  |  |   QDir save_directory () const; | 
					
						
							|  |  |  |   QDir azel_directory () const; | 
					
						
							| 
									
										
										
										
											2018-09-07 15:38:11 -04:00
										 |  |  |   QString sound_dm_path() const; | 
					
						
							|  |  |  |   QString sound_am_path() const; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   QString rig_name () const; | 
					
						
							|  |  |  |   Type2MsgGen type_2_msg_gen () const; | 
					
						
							| 
									
										
										
										
											2018-09-15 17:33:19 -04:00
										 |  |  |   QColor color_table_background() const; | 
					
						
							|  |  |  |   QColor color_table_highlight() const; | 
					
						
							|  |  |  |   QColor color_table_foreground() const; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   QColor color_CQ () const; | 
					
						
							|  |  |  |   QColor color_MyCall () const; | 
					
						
							| 
									
										
										
										
											2018-09-07 10:12:40 -04:00
										 |  |  |   QColor color_rx_background () const; | 
					
						
							|  |  |  |   QColor color_rx_foreground () const; | 
					
						
							|  |  |  |   QColor color_tx_foreground () const; | 
					
						
							| 
									
										
										
										
											2018-09-12 20:51:46 -04:00
										 |  |  |   QColor color_compose_background () const; | 
					
						
							|  |  |  |   QColor color_compose_foreground () const; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   QColor color_DXCC () const; | 
					
						
							|  |  |  |   QColor color_NewCall () const; | 
					
						
							|  |  |  |   bool pwrBandTxMemory () const; | 
					
						
							|  |  |  |   bool pwrBandTuneMemory () const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   struct CalibrationParams | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     CalibrationParams () | 
					
						
							|  |  |  |       : intercept {0.} | 
					
						
							|  |  |  |       , slope_ppm {0.} | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     CalibrationParams (double the_intercept, double the_slope_ppm) | 
					
						
							|  |  |  |       : intercept {the_intercept} | 
					
						
							|  |  |  |       , slope_ppm {the_slope_ppm} | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     double intercept;           // Hertz
 | 
					
						
							|  |  |  |     double slope_ppm;           // Hertz
 | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Temporarily enable or disable calibration adjustments.
 | 
					
						
							|  |  |  |   void enable_calibration (bool = true); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Set the calibration parameters and enable calibration corrections.
 | 
					
						
							|  |  |  |   void set_calibration (CalibrationParams); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-05 14:49:51 -05:00
										 |  |  |   // Set the dynamic grid which is only used if configuration setting is enabled.
 | 
					
						
							| 
									
										
										
										
											2018-08-11 22:12:54 -04:00
										 |  |  |   void set_dynamic_location (QString const&); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Set the dynamic statios message which is only used if configuration setting is enabled.
 | 
					
						
							|  |  |  |   void set_dynamic_station_message(QString const& qtc); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-05 14:49:51 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   // This method queries if a CAT and PTT connection is operational.
 | 
					
						
							|  |  |  |   bool is_transceiver_online () const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Start the rig connection, safe and normal to call when rig is
 | 
					
						
							|  |  |  |   // already open.
 | 
					
						
							|  |  |  |   bool transceiver_online (); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // check if a real rig is configured
 | 
					
						
							|  |  |  |   bool is_dummy_rig () const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Frequency resolution of the rig
 | 
					
						
							|  |  |  |   //
 | 
					
						
							|  |  |  |   //  0 - 1Hz
 | 
					
						
							|  |  |  |   //  1 - 10Hz rounded
 | 
					
						
							|  |  |  |   // -1 - 10Hz truncated
 | 
					
						
							|  |  |  |   //  2 - 100Hz rounded
 | 
					
						
							|  |  |  |   // -2 - 100Hz truncated
 | 
					
						
							|  |  |  |   int transceiver_resolution () const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Close down connection to rig.
 | 
					
						
							|  |  |  |   void transceiver_offline (); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Set transceiver frequency in Hertz.
 | 
					
						
							|  |  |  |   Q_SLOT void transceiver_frequency (Frequency); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Setting a non zero TX frequency means split operation
 | 
					
						
							|  |  |  |   // rationalise_mode means ensure TX uses same mode as RX.
 | 
					
						
							|  |  |  |   Q_SLOT void transceiver_tx_frequency (Frequency = 0u); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Set transceiver mode.
 | 
					
						
							|  |  |  |   //
 | 
					
						
							|  |  |  |   // Rationalise means ensure TX uses same mode as RX.
 | 
					
						
							|  |  |  |   Q_SLOT void transceiver_mode (MODE); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Set/unset PTT.
 | 
					
						
							|  |  |  |   //
 | 
					
						
							|  |  |  |   // Note that this must be called even if VOX PTT is selected since
 | 
					
						
							|  |  |  |   // the "Emulate Split" mode requires PTT information to coordinate
 | 
					
						
							|  |  |  |   // frequency changes.
 | 
					
						
							|  |  |  |   Q_SLOT void transceiver_ptt (bool = true); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Attempt to (re-)synchronise transceiver state.
 | 
					
						
							|  |  |  |   //
 | 
					
						
							|  |  |  |   // Force signal guarantees either a transceiver_update or a
 | 
					
						
							|  |  |  |   // transceiver_failure signal.
 | 
					
						
							|  |  |  |   //
 | 
					
						
							|  |  |  |   // The enforce_mode_and_split parameter ensures that future
 | 
					
						
							|  |  |  |   // transceiver updates have the correct mode and split setting
 | 
					
						
							|  |  |  |   // i.e. the transceiver is ready for use.
 | 
					
						
							|  |  |  |   Q_SLOT void sync_transceiver (bool force_signal = false, bool enforce_mode_and_split = false); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   //
 | 
					
						
							|  |  |  |   // These signals indicate a font has been selected and accepted for
 | 
					
						
							|  |  |  |   // the application text and decoded text respectively.
 | 
					
						
							|  |  |  |   //
 | 
					
						
							| 
									
										
										
										
											2018-09-07 10:12:40 -04:00
										 |  |  |   Q_SIGNAL void gui_text_font_changed (QFont); | 
					
						
							|  |  |  |   Q_SIGNAL void tx_text_font_changed (QFont); | 
					
						
							|  |  |  |   Q_SIGNAL void rx_text_font_changed (QFont); | 
					
						
							| 
									
										
										
										
											2018-09-12 20:51:46 -04:00
										 |  |  |   Q_SIGNAL void compose_text_font_changed (QFont); | 
					
						
							| 
									
										
										
										
											2018-09-15 17:33:19 -04:00
										 |  |  |   Q_SIGNAL void table_font_changed (QFont); | 
					
						
							| 
									
										
										
										
											2018-08-16 11:02:23 -04:00
										 |  |  |   Q_SIGNAL void colors_changed (); | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |   //
 | 
					
						
							|  |  |  |   // This signal is emitted when the UDP server changes
 | 
					
						
							|  |  |  |   //
 | 
					
						
							|  |  |  |   Q_SIGNAL void udp_server_changed (QString const& udp_server); | 
					
						
							|  |  |  |   Q_SIGNAL void udp_server_port_changed (port_type server_port); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-12 10:35:19 -04:00
										 |  |  |   // This signal is emitted when the band schedule changes
 | 
					
						
							|  |  |  |   Q_SIGNAL void band_schedule_changed (StationList &stations); | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |   //
 | 
					
						
							|  |  |  |   // These signals are emitted and reflect transceiver state changes
 | 
					
						
							|  |  |  |   //
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // signals a change in one of the TransceiverState members
 | 
					
						
							|  |  |  |   Q_SIGNAL void transceiver_update (Transceiver::TransceiverState const&) const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Signals a failure of a control rig CAT or PTT connection.
 | 
					
						
							|  |  |  |   //
 | 
					
						
							|  |  |  |   // A failed rig CAT or PTT connection is fatal and the underlying
 | 
					
						
							|  |  |  |   // connections are closed automatically. The connections can be
 | 
					
						
							|  |  |  |   // re-established with a call to transceiver_online(true) assuming
 | 
					
						
							|  |  |  |   // the fault condition has been rectified or is transient.
 | 
					
						
							|  |  |  |   Q_SIGNAL void transceiver_failure (QString const& reason) const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							|  |  |  |   class impl; | 
					
						
							|  |  |  |   pimpl<impl> m_; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if QT_VERSION < 0x050500
 | 
					
						
							|  |  |  | Q_DECLARE_METATYPE (Configuration::DataMode); | 
					
						
							|  |  |  | Q_DECLARE_METATYPE (Configuration::Type2MsgGen); | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if !defined (QT_NO_DEBUG_STREAM)
 | 
					
						
							|  |  |  | ENUM_QDEBUG_OPS_DECL (Configuration, DataMode); | 
					
						
							|  |  |  | ENUM_QDEBUG_OPS_DECL (Configuration, Type2MsgGen); | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ENUM_QDATASTREAM_OPS_DECL (Configuration, DataMode); | 
					
						
							|  |  |  | ENUM_QDATASTREAM_OPS_DECL (Configuration, Type2MsgGen); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ENUM_CONVERSION_OPS_DECL (Configuration, DataMode); | 
					
						
							|  |  |  | ENUM_CONVERSION_OPS_DECL (Configuration, Type2MsgGen); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif
 |