1 /* -*- c++ -*- */ 2 /* 3 * Gqrx SDR: Software defined radio receiver powered by GNU Radio and Qt 4 * https://gqrx.dk/ 5 * 6 * Copyright 2012-2013 Alexandru Csete OZ9AEC. 7 * 8 * Gqrx is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation; either version 3, or (at your option) 11 * any later version. 12 * 13 * Gqrx is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with Gqrx; see the file COPYING. If not, write to 20 * the Free Software Foundation, Inc., 51 Franklin Street, 21 * Boston, MA 02110-1301, USA. 22 */ 23 #include <QDebug> 24 #include <QString> 25 #include "agc_options.h" 26 #include "ui_agc_options.h" 27 CAgcOptions(QWidget * parent)28CAgcOptions::CAgcOptions(QWidget *parent) : 29 QDialog(parent), 30 ui(new Ui::CAgcOptions) 31 { 32 ui->setupUi(this); 33 } 34 ~CAgcOptions()35CAgcOptions::~CAgcOptions() 36 { 37 delete ui; 38 } 39 40 /*! \brief Catch window close events. 41 * 42 * This method is called when the user closes the dialog window using the 43 * window close icon. We catch the event and hide the dialog but keep it 44 * around for later use. 45 */ closeEvent(QCloseEvent * event)46void CAgcOptions::closeEvent(QCloseEvent *event) 47 { 48 hide(); 49 event->ignore(); 50 } 51 52 /*! \brief Get current gain slider value. */ gain()53int CAgcOptions::gain() 54 { 55 return ui->gainSlider->value(); 56 } 57 58 /*! \brief Set AGC preset. */ setPreset(agc_preset_e preset)59void CAgcOptions::setPreset(agc_preset_e preset) 60 { 61 switch (preset) 62 { 63 case AGC_FAST: 64 setDecay(100); 65 enableDecay(false); 66 setSlope(0); 67 enableSlope(false); 68 enableGain(false); 69 break; 70 71 case AGC_MEDIUM: 72 setDecay(500); 73 enableDecay(false); 74 setSlope(0); 75 enableSlope(false); 76 enableGain(false); 77 break; 78 79 case AGC_SLOW: 80 setDecay(2000); 81 enableDecay(false); 82 setSlope(0); 83 enableSlope(false); 84 enableGain(false); 85 break; 86 87 case AGC_USER: 88 enableDecay(true); 89 enableSlope(true); 90 enableGain(false); 91 break; 92 93 case AGC_OFF: 94 enableGain(true); 95 break; 96 97 default: 98 qDebug() << __func__ << "Invalid AGC preset" << preset; 99 break; 100 101 } 102 } 103 104 /*! \brief Set new gain slider value. */ setGain(int value)105void CAgcOptions::setGain(int value) 106 { 107 ui->gainSlider->setValue(value); 108 ui->gainLabel->setText(QString("%1 dB").arg(ui->gainSlider->value())); 109 } 110 111 /*! \brief Enable or disable gain slider. 112 * \param enabled Whether the slider should be enabled or not. 113 * 114 * The gain slider is enabled when AGC is OFF to provide manual gain 115 * control. It is disabled when AGC is ON. 116 */ enableGain(bool enabled)117void CAgcOptions::enableGain(bool enabled) 118 { 119 ui->gainLabel->setEnabled(enabled); 120 ui->gainSlider->setEnabled(enabled); 121 ui->label1->setEnabled(enabled); 122 } 123 124 /*! \brief Get current AGC threshold. */ threshold()125int CAgcOptions::threshold() 126 { 127 return ui->thresholdSlider->value(); 128 } 129 130 /*! \brief Set new AGC threshold. */ setThreshold(int value)131void CAgcOptions::setThreshold(int value) 132 { 133 ui->thresholdSlider->setValue(value); 134 ui->thresholdLabel->setText(QString("%1 dB").arg(ui->thresholdSlider->value())); 135 } 136 137 /*! \brief Get current AGC slope. */ slope()138int CAgcOptions::slope() 139 { 140 return ui->slopeSlider->value(); 141 } 142 143 /*! \brief Set new AGC slope. */ setSlope(int value)144void CAgcOptions::setSlope(int value) 145 { 146 ui->slopeSlider->setValue(value); 147 ui->slopeLabel->setText(QString("%1 dB").arg(ui->slopeSlider->value())); 148 } 149 150 /*! \brief Enable or disable AGC slope slider. 151 * \param enabled Whether the slider should be enabled or not. 152 * 153 * The slope slider is enabled when AGC is in user mode. 154 */ enableSlope(bool enabled)155void CAgcOptions::enableSlope(bool enabled) 156 { 157 ui->slopeSlider->setEnabled(enabled); 158 ui->slopeLabel->setEnabled(enabled); 159 ui->label3->setEnabled(enabled); 160 } 161 162 /*! \brief Get current decay value. */ decay()163int CAgcOptions::decay() 164 { 165 return ui->decaySlider->value(); 166 } 167 168 /*! \brief Set new decay value. */ setDecay(int value)169void CAgcOptions::setDecay(int value) 170 { 171 ui->decaySlider->setValue(value); 172 ui->decayLabel->setText(QString("%1 ms").arg(ui->decaySlider->value())); 173 } 174 175 /*! \brief Enable or disable AGC decay slider. 176 * \param enabled Whether the slider should be enabled or not. 177 * 178 * The decay slider is enabled when AGC is in user mode. 179 */ enableDecay(bool enabled)180void CAgcOptions::enableDecay(bool enabled) 181 { 182 ui->decaySlider->setEnabled(enabled); 183 ui->decayLabel->setEnabled(enabled); 184 ui->label4->setEnabled(enabled); 185 } 186 187 /*! \brief Get current state of AGC hang button. */ hang()188bool CAgcOptions::hang() 189 { 190 return ui->hangButton->isChecked(); 191 } 192 193 /*! \brief Set state og AGC hang button. */ setHang(bool checked)194void CAgcOptions::setHang(bool checked) 195 { 196 ui->hangButton->setChecked(checked); 197 } 198 199 200 201 /*! \brief AGC gain slider value has changed. */ on_gainSlider_valueChanged(int gain)202void CAgcOptions::on_gainSlider_valueChanged(int gain) 203 { 204 ui->gainLabel->setText(QString("%1 dB").arg(ui->gainSlider->value())); 205 emit gainChanged(gain); 206 } 207 208 /*! \brief AGC threshold slider value has changed. */ on_thresholdSlider_valueChanged(int threshold)209void CAgcOptions::on_thresholdSlider_valueChanged(int threshold) 210 { 211 ui->thresholdLabel->setText(QString("%1 dB").arg(ui->thresholdSlider->value())); 212 emit thresholdChanged(threshold); 213 } 214 215 /*! \brief AGC slope slider value has changed. */ on_slopeSlider_valueChanged(int slope)216void CAgcOptions::on_slopeSlider_valueChanged(int slope) 217 { 218 ui->slopeLabel->setText(QString("%1 dB").arg(ui->slopeSlider->value())); 219 emit slopeChanged(slope); 220 } 221 222 /*! \brief AGC decay slider value has changed. */ on_decaySlider_valueChanged(int decay)223void CAgcOptions::on_decaySlider_valueChanged(int decay) 224 { 225 ui->decayLabel->setText(QString("%1 ms").arg(ui->decaySlider->value())); 226 emit decayChanged(decay); 227 } 228 229 /*! \brief AGC hang button has been toggled. */ on_hangButton_toggled(bool checked)230void CAgcOptions::on_hangButton_toggled(bool checked) 231 { 232 ui->hangButton->setText(checked ? tr("Enabled") : tr("Disabled")); 233 emit hangChanged(checked); 234 } 235