mirror of
https://github.com/wf-group/wfview
synced 2026-08-13 17:32:59 -04:00
176 lines
6.2 KiB
C++
176 lines
6.2 KiB
C++
#ifndef CWSENDERCONTROLLER_H
|
|
#define CWSENDERCONTROLLER_H
|
|
|
|
#include <QObject>
|
|
#include <QString>
|
|
#include <QStringList>
|
|
#include "wfviewtypes.h"
|
|
#include "cachingqueue.h"
|
|
#include "rigcommander.h"
|
|
#include "cwsidetone.h"
|
|
|
|
class CWSenderController : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
// Properties for QML binding
|
|
Q_PROPERTY(bool visible READ visible WRITE setVisible NOTIFY visibleChanged)
|
|
Q_PROPERTY(int wpm READ wpm WRITE setWpm NOTIFY wpmChanged)
|
|
Q_PROPERTY(double dashRatio READ dashRatio WRITE setDashRatio NOTIFY dashRatioChanged)
|
|
Q_PROPERTY(int pitch READ pitch WRITE setPitch NOTIFY pitchChanged)
|
|
Q_PROPERTY(int breakInMode READ breakInMode WRITE setBreakInMode NOTIFY breakInModeChanged)
|
|
Q_PROPERTY(bool cutNumbers READ cutNumbers WRITE setCutNumbers NOTIFY cutNumbersChanged)
|
|
Q_PROPERTY(bool sendImmediate READ sendImmediate WRITE setSendImmediate NOTIFY sendImmediateChanged)
|
|
Q_PROPERTY(bool sidetoneEnable READ sidetoneEnable WRITE setSidetoneEnable NOTIFY sidetoneEnableChanged)
|
|
Q_PROPERTY(int sidetoneLevel READ sidetoneLevel WRITE setSidetoneLevel NOTIFY sidetoneLevelChanged)
|
|
Q_PROPERTY(int sequenceNumber READ sequenceNumber WRITE setSequenceNumber NOTIFY sequenceNumberChanged)
|
|
Q_PROPERTY(int maxChars READ maxChars NOTIFY maxCharsChanged)
|
|
Q_PROPERTY(QString statusMessage READ statusMessage NOTIFY statusMessageChanged)
|
|
Q_PROPERTY(bool macroEditMode READ macroEditMode WRITE setMacroEditMode NOTIFY macroEditModeChanged)
|
|
Q_PROPERTY(bool receiveVisible READ receiveVisible WRITE setReceiveVisible NOTIFY receiveVisibleChanged)
|
|
Q_PROPERTY(bool canSendCW READ canSendCW NOTIFY canSendCWChanged)
|
|
|
|
public:
|
|
explicit CWSenderController(QObject* parent = nullptr);
|
|
~CWSenderController();
|
|
|
|
// Property getters
|
|
bool visible() const { return m_visible; }
|
|
int wpm() const { return m_wpm; }
|
|
double dashRatio() const { return m_dashRatio; }
|
|
int pitch() const { return m_pitch; }
|
|
int breakInMode() const { return m_breakInMode; }
|
|
bool cutNumbers() const { return m_cutNumbers; }
|
|
bool sendImmediate() const { return m_sendImmediate; }
|
|
bool sidetoneEnable() const { return m_sidetoneEnable; }
|
|
int sidetoneLevel() const { return m_sidetoneLevel; }
|
|
int sequenceNumber() const { return m_sequenceNumber; }
|
|
int maxChars() const { return m_maxChars; }
|
|
QString statusMessage() const { return m_statusMessage; }
|
|
bool macroEditMode() const { return m_macroEditMode; }
|
|
bool receiveVisible() const { return m_receiveVisible; }
|
|
bool canSendCW() const { return m_canSendCW; }
|
|
|
|
// Property setters
|
|
void setVisible(bool visible);
|
|
void setWpm(int wpm);
|
|
void setDashRatio(double ratio);
|
|
void setPitch(int pitch);
|
|
void setBreakInMode(int mode);
|
|
void setCutNumbers(bool val);
|
|
void setSendImmediate(bool val);
|
|
void setSidetoneEnable(bool val);
|
|
void setSidetoneLevel(int val);
|
|
void setSequenceNumber(int val);
|
|
void setMacroEditMode(bool val);
|
|
void setReceiveVisible(bool val);
|
|
void loadSettings(bool cutNumbers, bool sendImmediate, bool sidetoneEnabled, int sidetoneLevel, const QStringList& macros);
|
|
|
|
// Macro management
|
|
QStringList getMacroText() const;
|
|
void setMacroText(const QStringList& macros);
|
|
Q_INVOKABLE QString getMacro(int index) const;
|
|
Q_INVOKABLE QString getMacroButtonText(int index) const;
|
|
|
|
// Invokable methods for QML
|
|
Q_INVOKABLE void sendText(const QString& text);
|
|
Q_INVOKABLE void stopSending();
|
|
Q_INVOKABLE void runMacro(int macroNumber);
|
|
Q_INVOKABLE void editMacro(int macroNumber, const QString& newText);
|
|
Q_INVOKABLE void textChanged(const QString& text);
|
|
Q_INVOKABLE void appendReceiveText(const QString& text);
|
|
Q_INVOKABLE void appendTranscriptText(const QString& text);
|
|
|
|
public slots:
|
|
void handleKeySpeed(quint8 wpm);
|
|
void handleDashRatio(quint8 ratio);
|
|
void handlePitch(quint16 pitch);
|
|
void handleBreakInMode(quint8 b);
|
|
void handleCurrentModeUpdate(rigMode_t mode);
|
|
void handleSidetoneText(QString text);
|
|
void handleStopSidetone();
|
|
void receive(QString text);
|
|
void receiveEnabled(bool en);
|
|
void receiveRigCaps(rigCapabilities* caps);
|
|
|
|
signals:
|
|
// Window signals
|
|
void visibleChanged();
|
|
|
|
// Property change signals
|
|
void wpmChanged();
|
|
void dashRatioChanged();
|
|
void pitchChanged();
|
|
void breakInModeChanged();
|
|
void cutNumbersChanged();
|
|
void sendImmediateChanged();
|
|
void sidetoneEnableChanged();
|
|
void sidetoneLevelChanged();
|
|
void sequenceNumberChanged();
|
|
void statusMessageChanged();
|
|
void macroEditModeChanged();
|
|
void receiveVisibleChanged();
|
|
void maxCharsChanged();
|
|
void canSendCWChanged();
|
|
void keyerSettingsChanged();
|
|
|
|
// Text update signals for QML
|
|
void receiveTextAppended(QString text);
|
|
void transcriptTextAppended(QString text);
|
|
void textColorChanged(QString color);
|
|
void clearTextInput();
|
|
void macroButtonTextChanged(int index, QString text);
|
|
|
|
// Radio command signals
|
|
void sendCW(QString cwMessage);
|
|
void stopCW();
|
|
void setKeySpeed(quint8 wpm);
|
|
void setDashRatioSignal(quint8 ratio);
|
|
void setPitchSignal(quint16 pitch);
|
|
void setBreakInModeSignal(quint8 b);
|
|
void setLevel(int level);
|
|
void getCWSettings();
|
|
void initTone();
|
|
|
|
private:
|
|
void setStatusMessage(const QString& msg);
|
|
void updateTextColor(const QString& text);
|
|
void setupTone();
|
|
void teardownTone();
|
|
QString processMacroText(const QString& macroText);
|
|
|
|
// UI state
|
|
bool m_visible;
|
|
int m_wpm;
|
|
double m_dashRatio;
|
|
int m_pitch;
|
|
int m_breakInMode;
|
|
bool m_cutNumbers;
|
|
bool m_sendImmediate;
|
|
bool m_sidetoneEnable;
|
|
int m_sidetoneLevel;
|
|
int m_sequenceNumber;
|
|
int m_maxChars;
|
|
QString m_statusMessage;
|
|
bool m_macroEditMode;
|
|
bool m_receiveVisible;
|
|
bool m_canSendCW;
|
|
|
|
// Macro storage
|
|
QString m_macroText[11]; // 1-10 indexed
|
|
|
|
// Radio state
|
|
rigMode_t m_currentMode;
|
|
|
|
// Infrastructure
|
|
cachingQueue* m_queue;
|
|
rigCapabilities* m_rigCaps;
|
|
rigCommander* m_rig;
|
|
bool m_queueSignalsConnected;
|
|
|
|
// Sidetone
|
|
cwSidetone* m_tone;
|
|
QThread* m_toneThread;
|
|
};
|
|
|
|
#endif // CWSENDERCONTROLLER_H
|