mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-16 17:11:53 -05:00
4a32b0bef6
Some rigs either do not honour some CAT commands while transmitting or interpret them incorrectly. To deal with this a settings option to allow TX frequency changes while transmitting has been added with a default value of off. Any UI actions that directly or indirectly change the TX frequency are guarded according to this new option. As well as this band changes and use of the +2kHz check box are disabled and guarded respectively in transmit mode. Mode changes via the menu are now disabled while transmitting. When TX frequency changes are allowed; frequency changes are correctly implemented while in tune mode. Double clicking decodes while transmitting now correctly regenerate and change the message sent on the fly. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@4349 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
190 lines
5.7 KiB
C++
190 lines
5.7 KiB
C++
#ifndef CONFIGURATION_HPP_
|
|
#define CONFIGURATION_HPP_
|
|
|
|
#include <QObject>
|
|
|
|
#include "Radio.hpp"
|
|
#include "AudioDevice.hpp"
|
|
#include "Transceiver.hpp"
|
|
|
|
#include "pimpl_h.hpp"
|
|
|
|
class QSettings;
|
|
class QWidget;
|
|
class QAudioDeviceInfo;
|
|
class QString;
|
|
class QDir;
|
|
class QFont;
|
|
class Bands;
|
|
class FrequencyList;
|
|
class StationList;
|
|
class QStringListModel;
|
|
|
|
//
|
|
// 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.
|
|
//
|
|
// 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);
|
|
|
|
public:
|
|
using MODE = Transceiver::MODE;
|
|
using TransceiverState = Transceiver::TransceiverState;
|
|
using Frequency = Radio::Frequency;
|
|
|
|
enum DataMode {data_mode_none, data_mode_USB, data_mode_data};
|
|
|
|
explicit Configuration (QString const& instance_key, QSettings * settings, bool test_mode, QWidget * parent = nullptr);
|
|
~Configuration ();
|
|
|
|
int exec ();
|
|
|
|
QDir data_path () 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;
|
|
|
|
QString my_callsign () const;
|
|
QString my_grid () const;
|
|
QFont decoded_text_font () const;
|
|
qint32 id_interval () const;
|
|
bool id_after_73 () const;
|
|
bool tx_QSY_allowed () const;
|
|
bool spot_to_psk_reporter () const;
|
|
bool monitor_off_at_startup () const;
|
|
bool log_as_RTTY () const;
|
|
bool report_in_comments () const;
|
|
bool prompt_to_log () const;
|
|
bool insert_blank () const;
|
|
bool DXCC () const;
|
|
bool clear_DX () const;
|
|
bool miles () const;
|
|
bool quick_call () const;
|
|
bool disable_TX_on_73 () const;
|
|
bool watchdog () const;
|
|
bool TX_messages () const;
|
|
bool split_mode () const;
|
|
Bands * bands ();
|
|
FrequencyList * frequencies ();
|
|
StationList * stations ();
|
|
QStringListModel * macros ();
|
|
QDir save_directory () const;
|
|
QString rig_name () const;
|
|
unsigned jt9w_bw_mult () const;
|
|
float jt9w_min_dt () const;
|
|
float jt9w_max_dt () const;
|
|
|
|
// This method queries if a CAT and PTT connection is operational,
|
|
//
|
|
// It also doubles as an initialisation method when the
|
|
// open_if_closed parameter is passed as true.
|
|
bool transceiver_online (bool open_if_closed = false);
|
|
|
|
// 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);
|
|
|
|
|
|
//
|
|
// This signal indicates that a font has been selected and accepted
|
|
// for the decoded text.
|
|
//
|
|
Q_SIGNAL void decoded_text_font_changed (QFont);
|
|
|
|
|
|
//
|
|
// 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;
|
|
|
|
// 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 reason) const;
|
|
|
|
private:
|
|
class impl;
|
|
pimpl<impl> m_;
|
|
};
|
|
|
|
Q_DECLARE_METATYPE (Configuration::DataMode);
|
|
|
|
#if !defined (QT_NO_DEBUG_STREAM)
|
|
ENUM_QDEBUG_OPS_DECL (Configuration, DataMode);
|
|
#endif
|
|
|
|
ENUM_QDATASTREAM_OPS_DECL (Configuration, DataMode);
|
|
|
|
ENUM_CONVERSION_OPS_DECL (Configuration, DataMode);
|
|
|
|
#endif
|