mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-02-21 04:58:38 -05:00
SSB mod/demod: improve LSB/USB experience: DSB/SSB icon shows right sideband. Filter limit sliders with ticks. Button to flip sidebands
This commit is contained in:
parent
5e13c16cb6
commit
9455a4c5f6
@ -1,10 +1,10 @@
|
|||||||
|
#include <QPixmap>
|
||||||
|
|
||||||
#include "ssbdemodgui.h"
|
#include "ssbdemodgui.h"
|
||||||
#include "ssbdemodgui.h"
|
#include "ssbdemodgui.h"
|
||||||
|
|
||||||
#include <device/devicesourceapi.h>
|
#include <device/devicesourceapi.h>
|
||||||
#include "device/deviceuiset.h"
|
#include "device/deviceuiset.h"
|
||||||
#include <QDockWidget>
|
|
||||||
#include <QMainWindow>
|
|
||||||
|
|
||||||
#include "ui_ssbdemodgui.h"
|
#include "ui_ssbdemodgui.h"
|
||||||
#include "dsp/spectrumvis.h"
|
#include "dsp/spectrumvis.h"
|
||||||
@ -107,8 +107,9 @@ void SSBDemodGUI::on_audioFlipChannels_toggled(bool flip)
|
|||||||
applySettings();
|
applySettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SSBDemodGUI::on_dsb_toggled(bool dsb __attribute__((unused)))
|
void SSBDemodGUI::on_dsb_toggled(bool dsb)
|
||||||
{
|
{
|
||||||
|
ui->flipSidebands->setEnabled(!dsb);
|
||||||
applyBandwidths();
|
applyBandwidths();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -187,6 +188,14 @@ void SSBDemodGUI::on_spanLog2_valueChanged(int value)
|
|||||||
applyBandwidths();
|
applyBandwidths();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SSBDemodGUI::on_flipSidebands_clicked(bool checked __attribute__((unused)))
|
||||||
|
{
|
||||||
|
int bwValue = ui->BW->value();
|
||||||
|
int lcValue = ui->lowCut->value();
|
||||||
|
ui->BW->setValue(-bwValue);
|
||||||
|
ui->lowCut->setValue(-lcValue);
|
||||||
|
}
|
||||||
|
|
||||||
void SSBDemodGUI::onWidgetRolled(QWidget* widget __attribute__((unused)), bool rollDown __attribute__((unused)))
|
void SSBDemodGUI::onWidgetRolled(QWidget* widget __attribute__((unused)), bool rollDown __attribute__((unused)))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -251,6 +260,11 @@ SSBDemodGUI::SSBDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban
|
|||||||
|
|
||||||
ui->spectrumGUI->setBuddies(m_spectrumVis->getInputMessageQueue(), m_spectrumVis, ui->glSpectrum);
|
ui->spectrumGUI->setBuddies(m_spectrumVis->getInputMessageQueue(), m_spectrumVis, ui->glSpectrum);
|
||||||
|
|
||||||
|
m_iconDSBUSB.addPixmap(QPixmap("://dsb.png"), QIcon::Normal, QIcon::On);
|
||||||
|
m_iconDSBUSB.addPixmap(QPixmap("://usb.png"), QIcon::Normal, QIcon::Off);
|
||||||
|
m_iconDSBLSB.addPixmap(QPixmap("://dsb.png"), QIcon::Normal, QIcon::On);
|
||||||
|
m_iconDSBLSB.addPixmap(QPixmap("://lsb.png"), QIcon::Normal, QIcon::Off);
|
||||||
|
|
||||||
displaySettings();
|
displaySettings();
|
||||||
applyBandwidths(true); // does applySettings(true)
|
applyBandwidths(true); // does applySettings(true)
|
||||||
}
|
}
|
||||||
@ -373,6 +387,7 @@ void SSBDemodGUI::applyBandwidths(bool force)
|
|||||||
bool wasBlocked = blockApplySettings(true);
|
bool wasBlocked = blockApplySettings(true);
|
||||||
m_channelMarker.setBandwidth(bw * 200);
|
m_channelMarker.setBandwidth(bw * 200);
|
||||||
m_channelMarker.setSidebands(dsb ? ChannelMarker::dsb : bw < 0 ? ChannelMarker::lsb : ChannelMarker::usb);
|
m_channelMarker.setSidebands(dsb ? ChannelMarker::dsb : bw < 0 ? ChannelMarker::lsb : ChannelMarker::usb);
|
||||||
|
ui->dsb->setIcon(bw < 0 ? m_iconDSBLSB: m_iconDSBUSB);
|
||||||
if (!dsb) { m_channelMarker.setLowCutoff(lw * 100); }
|
if (!dsb) { m_channelMarker.setLowCutoff(lw * 100); }
|
||||||
blockApplySettings(wasBlocked);
|
blockApplySettings(wasBlocked);
|
||||||
}
|
}
|
||||||
@ -385,13 +400,17 @@ void SSBDemodGUI::displaySettings()
|
|||||||
m_channelMarker.setBandwidth(m_settings.m_rfBandwidth * 2);
|
m_channelMarker.setBandwidth(m_settings.m_rfBandwidth * 2);
|
||||||
m_channelMarker.setLowCutoff(m_settings.m_lowCutoff);
|
m_channelMarker.setLowCutoff(m_settings.m_lowCutoff);
|
||||||
|
|
||||||
|
ui->flipSidebands->setEnabled(!m_settings.m_dsb);
|
||||||
|
|
||||||
if (m_settings.m_dsb) {
|
if (m_settings.m_dsb) {
|
||||||
m_channelMarker.setSidebands(ChannelMarker::dsb);
|
m_channelMarker.setSidebands(ChannelMarker::dsb);
|
||||||
} else {
|
} else {
|
||||||
if (m_settings.m_rfBandwidth < 0) {
|
if (m_settings.m_rfBandwidth < 0) {
|
||||||
m_channelMarker.setSidebands(ChannelMarker::lsb);
|
m_channelMarker.setSidebands(ChannelMarker::lsb);
|
||||||
|
ui->dsb->setIcon(m_iconDSBLSB);
|
||||||
} else {
|
} else {
|
||||||
m_channelMarker.setSidebands(ChannelMarker::usb);
|
m_channelMarker.setSidebands(ChannelMarker::usb);
|
||||||
|
ui->dsb->setIcon(m_iconDSBUSB);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
#ifndef INCLUDE_SSBDEMODGUI_H
|
#ifndef INCLUDE_SSBDEMODGUI_H
|
||||||
#define INCLUDE_SSBDEMODGUI_H
|
#define INCLUDE_SSBDEMODGUI_H
|
||||||
|
|
||||||
#include <plugin/plugininstancegui.h>
|
#include <QIcon>
|
||||||
|
|
||||||
|
#include "plugin/plugininstancegui.h"
|
||||||
#include "gui/rollupwidget.h"
|
#include "gui/rollupwidget.h"
|
||||||
#include "dsp/channelmarker.h"
|
#include "dsp/channelmarker.h"
|
||||||
#include "dsp/movingaverage.h"
|
#include "dsp/movingaverage.h"
|
||||||
@ -60,6 +62,9 @@ private:
|
|||||||
SpectrumVis* m_spectrumVis;
|
SpectrumVis* m_spectrumVis;
|
||||||
MessageQueue m_inputMessageQueue;
|
MessageQueue m_inputMessageQueue;
|
||||||
|
|
||||||
|
QIcon m_iconDSBUSB;
|
||||||
|
QIcon m_iconDSBLSB;
|
||||||
|
|
||||||
explicit SSBDemodGUI(PluginAPI* pluginAPI, DeviceUISet* deviceUISet, BasebandSampleSink *rxChannel, QWidget* parent = 0);
|
explicit SSBDemodGUI(PluginAPI* pluginAPI, DeviceUISet* deviceUISet, BasebandSampleSink *rxChannel, QWidget* parent = 0);
|
||||||
virtual ~SSBDemodGUI();
|
virtual ~SSBDemodGUI();
|
||||||
|
|
||||||
@ -89,6 +94,7 @@ private slots:
|
|||||||
void on_agcThresholdGate_valueChanged(int value);
|
void on_agcThresholdGate_valueChanged(int value);
|
||||||
void on_audioMute_toggled(bool checked);
|
void on_audioMute_toggled(bool checked);
|
||||||
void on_spanLog2_valueChanged(int value);
|
void on_spanLog2_valueChanged(int value);
|
||||||
|
void on_flipSidebands_clicked(bool checked);
|
||||||
void onWidgetRolled(QWidget* widget, bool rollDown);
|
void onWidgetRolled(QWidget* widget, bool rollDown);
|
||||||
void tick();
|
void tick();
|
||||||
};
|
};
|
||||||
|
@ -205,6 +205,27 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="Line" name="line_4">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="flipSidebands">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Flip sidebands in SSB mode (LSB->USB or USB->LSB)</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../../../sdrgui/resources/res.qrc">
|
||||||
|
<normaloff>:/flip_sidebands.png</normaloff>:/flip_sidebands.png</iconset>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QToolButton" name="dsb">
|
<widget class="QToolButton" name="dsb">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
@ -337,7 +358,7 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QSlider" name="BW">
|
<widget class="TickedSlider" name="BW">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>Lowpass filter cutoff frequency</string>
|
<string>Lowpass filter cutoff frequency</string>
|
||||||
</property>
|
</property>
|
||||||
@ -356,6 +377,12 @@
|
|||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="tickPosition">
|
||||||
|
<enum>QSlider::TicksBelow</enum>
|
||||||
|
</property>
|
||||||
|
<property name="tickInterval">
|
||||||
|
<number>5</number>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
@ -404,7 +431,7 @@
|
|||||||
</font>
|
</font>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>f </string>
|
<string>f: </string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@ -514,7 +541,7 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QSlider" name="lowCut">
|
<widget class="TickedSlider" name="lowCut">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>Highpass filter cutoff frequency (SSB)</string>
|
<string>Highpass filter cutoff frequency (SSB)</string>
|
||||||
</property>
|
</property>
|
||||||
@ -533,6 +560,12 @@
|
|||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="tickPosition">
|
||||||
|
<enum>QSlider::TicksAbove</enum>
|
||||||
|
</property>
|
||||||
|
<property name="tickInterval">
|
||||||
|
<number>5</number>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
@ -893,6 +926,11 @@
|
|||||||
<extends>QToolButton</extends>
|
<extends>QToolButton</extends>
|
||||||
<header>gui/buttonswitch.h</header>
|
<header>gui/buttonswitch.h</header>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
|
<customwidget>
|
||||||
|
<class>TickedSlider</class>
|
||||||
|
<extends>QSlider</extends>
|
||||||
|
<header>gui/tickedslider.h</header>
|
||||||
|
</customwidget>
|
||||||
</customwidgets>
|
</customwidgets>
|
||||||
<resources>
|
<resources>
|
||||||
<include location="../../../sdrgui/resources/res.qrc"/>
|
<include location="../../../sdrgui/resources/res.qrc"/>
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
const PluginDescriptor SSBPlugin::m_pluginDescriptor = {
|
const PluginDescriptor SSBPlugin::m_pluginDescriptor = {
|
||||||
QString("SSB Demodulator"),
|
QString("SSB Demodulator"),
|
||||||
QString("3.8.4"),
|
QString("3.8.5"),
|
||||||
QString("(c) Edouard Griffiths, F4EXB"),
|
QString("(c) Edouard Griffiths, F4EXB"),
|
||||||
QString("https://github.com/f4exb/sdrangel"),
|
QString("https://github.com/f4exb/sdrangel"),
|
||||||
true,
|
true,
|
||||||
|
@ -150,8 +150,17 @@ void SSBModGUI::on_deltaFrequency_changed(qint64 value)
|
|||||||
applySettings();
|
applySettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SSBModGUI::on_dsb_toggled(bool checked __attribute__((unused)))
|
void SSBModGUI::on_flipSidebands_clicked(bool checked __attribute__((unused)))
|
||||||
{
|
{
|
||||||
|
int bwValue = ui->BW->value();
|
||||||
|
int lcValue = ui->lowCut->value();
|
||||||
|
ui->BW->setValue(-bwValue);
|
||||||
|
ui->lowCut->setValue(-lcValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SSBModGUI::on_dsb_toggled(bool dsb)
|
||||||
|
{
|
||||||
|
ui->flipSidebands->setEnabled(!dsb);
|
||||||
applyBandwidths();
|
applyBandwidths();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -404,6 +413,11 @@ SSBModGUI::SSBModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam
|
|||||||
connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleSourceMessages()));
|
connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleSourceMessages()));
|
||||||
connect(m_ssbMod, SIGNAL(levelChanged(qreal, qreal, int)), ui->volumeMeter, SLOT(levelChanged(qreal, qreal, int)));
|
connect(m_ssbMod, SIGNAL(levelChanged(qreal, qreal, int)), ui->volumeMeter, SLOT(levelChanged(qreal, qreal, int)));
|
||||||
|
|
||||||
|
m_iconDSBUSB.addPixmap(QPixmap("://dsb.png"), QIcon::Normal, QIcon::On);
|
||||||
|
m_iconDSBUSB.addPixmap(QPixmap("://usb.png"), QIcon::Normal, QIcon::Off);
|
||||||
|
m_iconDSBLSB.addPixmap(QPixmap("://dsb.png"), QIcon::Normal, QIcon::On);
|
||||||
|
m_iconDSBLSB.addPixmap(QPixmap("://lsb.png"), QIcon::Normal, QIcon::Off);
|
||||||
|
|
||||||
displaySettings();
|
displaySettings();
|
||||||
applyBandwidths(true); // does applySettings(true)
|
applyBandwidths(true); // does applySettings(true)
|
||||||
}
|
}
|
||||||
@ -526,6 +540,7 @@ void SSBModGUI::applyBandwidths(bool force)
|
|||||||
bool applySettingsWereBlocked = blockApplySettings(true);
|
bool applySettingsWereBlocked = blockApplySettings(true);
|
||||||
m_channelMarker.setBandwidth(bw * 200);
|
m_channelMarker.setBandwidth(bw * 200);
|
||||||
m_channelMarker.setSidebands(dsb ? ChannelMarker::dsb : bw < 0 ? ChannelMarker::lsb : ChannelMarker::usb);
|
m_channelMarker.setSidebands(dsb ? ChannelMarker::dsb : bw < 0 ? ChannelMarker::lsb : ChannelMarker::usb);
|
||||||
|
ui->dsb->setIcon(bw < 0 ? m_iconDSBLSB : m_iconDSBUSB);
|
||||||
if (!dsb) { m_channelMarker.setLowCutoff(lw * 100); }
|
if (!dsb) { m_channelMarker.setLowCutoff(lw * 100); }
|
||||||
blockApplySettings(applySettingsWereBlocked);
|
blockApplySettings(applySettingsWereBlocked);
|
||||||
}
|
}
|
||||||
@ -537,13 +552,17 @@ void SSBModGUI::displaySettings()
|
|||||||
m_channelMarker.setBandwidth(m_settings.m_bandwidth * 2);
|
m_channelMarker.setBandwidth(m_settings.m_bandwidth * 2);
|
||||||
m_channelMarker.setLowCutoff(m_settings.m_lowCutoff);
|
m_channelMarker.setLowCutoff(m_settings.m_lowCutoff);
|
||||||
|
|
||||||
|
ui->flipSidebands->setEnabled(!m_settings.m_dsb);
|
||||||
|
|
||||||
if (m_settings.m_dsb) {
|
if (m_settings.m_dsb) {
|
||||||
m_channelMarker.setSidebands(ChannelMarker::dsb);
|
m_channelMarker.setSidebands(ChannelMarker::dsb);
|
||||||
} else {
|
} else {
|
||||||
if (m_settings.m_bandwidth < 0) {
|
if (m_settings.m_bandwidth < 0) {
|
||||||
m_channelMarker.setSidebands(ChannelMarker::lsb);
|
m_channelMarker.setSidebands(ChannelMarker::lsb);
|
||||||
|
ui->dsb->setIcon(m_iconDSBLSB);
|
||||||
} else {
|
} else {
|
||||||
m_channelMarker.setSidebands(ChannelMarker::usb);
|
m_channelMarker.setSidebands(ChannelMarker::usb);
|
||||||
|
ui->dsb->setIcon(m_iconDSBUSB);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,6 +17,8 @@
|
|||||||
#ifndef PLUGINS_CHANNELTX_MODSSB_SSBMODGUI_H_
|
#ifndef PLUGINS_CHANNELTX_MODSSB_SSBMODGUI_H_
|
||||||
#define PLUGINS_CHANNELTX_MODSSB_SSBMODGUI_H_
|
#define PLUGINS_CHANNELTX_MODSSB_SSBMODGUI_H_
|
||||||
|
|
||||||
|
#include <QIcon>
|
||||||
|
|
||||||
#include <plugin/plugininstancegui.h>
|
#include <plugin/plugininstancegui.h>
|
||||||
#include "gui/rollupwidget.h"
|
#include "gui/rollupwidget.h"
|
||||||
#include "dsp/channelmarker.h"
|
#include "dsp/channelmarker.h"
|
||||||
@ -78,6 +80,9 @@ private:
|
|||||||
SSBMod::SSBModInputAF m_modAFInput;
|
SSBMod::SSBModInputAF m_modAFInput;
|
||||||
MessageQueue m_inputMessageQueue;
|
MessageQueue m_inputMessageQueue;
|
||||||
|
|
||||||
|
QIcon m_iconDSBUSB;
|
||||||
|
QIcon m_iconDSBLSB;
|
||||||
|
|
||||||
explicit SSBModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSource *channelTx, QWidget* parent = 0);
|
explicit SSBModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSource *channelTx, QWidget* parent = 0);
|
||||||
virtual ~SSBModGUI();
|
virtual ~SSBModGUI();
|
||||||
|
|
||||||
@ -96,6 +101,7 @@ private:
|
|||||||
private slots:
|
private slots:
|
||||||
void handleSourceMessages();
|
void handleSourceMessages();
|
||||||
void on_deltaFrequency_changed(qint64 value);
|
void on_deltaFrequency_changed(qint64 value);
|
||||||
|
void on_flipSidebands_clicked(bool checked);
|
||||||
void on_dsb_toggled(bool checked);
|
void on_dsb_toggled(bool checked);
|
||||||
void on_audioBinaural_toggled(bool checked);
|
void on_audioBinaural_toggled(bool checked);
|
||||||
void on_audioFlipChannels_toggled(bool checked);
|
void on_audioFlipChannels_toggled(bool checked);
|
||||||
|
@ -205,6 +205,27 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="Line" name="line_2">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="flipSidebands">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Flip sidebands in SSB mode (LSB->USB or USB->LSB)</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../../../sdrgui/resources/res.qrc">
|
||||||
|
<normaloff>:/flip_sidebands.png</normaloff>:/flip_sidebands.png</iconset>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QToolButton" name="dsb">
|
<widget class="QToolButton" name="dsb">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
@ -301,7 +322,7 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QSlider" name="BW">
|
<widget class="TickedSlider" name="BW">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>Lowpass filter cutoff frequency</string>
|
<string>Lowpass filter cutoff frequency</string>
|
||||||
</property>
|
</property>
|
||||||
@ -320,6 +341,12 @@
|
|||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="tickPosition">
|
||||||
|
<enum>QSlider::TicksBelow</enum>
|
||||||
|
</property>
|
||||||
|
<property name="tickInterval">
|
||||||
|
<number>5</number>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
@ -481,7 +508,7 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QSlider" name="lowCut">
|
<widget class="TickedSlider" name="lowCut">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>Highpass filter cutoff frequency (SSB)</string>
|
<string>Highpass filter cutoff frequency (SSB)</string>
|
||||||
</property>
|
</property>
|
||||||
@ -500,6 +527,12 @@
|
|||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="tickPosition">
|
||||||
|
<enum>QSlider::TicksAbove</enum>
|
||||||
|
</property>
|
||||||
|
<property name="tickInterval">
|
||||||
|
<number>5</number>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
@ -1225,6 +1258,11 @@
|
|||||||
<header>gui/valuedialz.h</header>
|
<header>gui/valuedialz.h</header>
|
||||||
<container>1</container>
|
<container>1</container>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
|
<customwidget>
|
||||||
|
<class>TickedSlider</class>
|
||||||
|
<extends>QSlider</extends>
|
||||||
|
<header>gui/tickedslider.h</header>
|
||||||
|
</customwidget>
|
||||||
</customwidgets>
|
</customwidgets>
|
||||||
<resources>
|
<resources>
|
||||||
<include location="../../../sdrgui/resources/res.qrc"/>
|
<include location="../../../sdrgui/resources/res.qrc"/>
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
const PluginDescriptor SSBModPlugin::m_pluginDescriptor = {
|
const PluginDescriptor SSBModPlugin::m_pluginDescriptor = {
|
||||||
QString("SSB Modulator"),
|
QString("SSB Modulator"),
|
||||||
QString("3.8.4"),
|
QString("3.8.5"),
|
||||||
QString("(c) Edouard Griffiths, F4EXB"),
|
QString("(c) Edouard Griffiths, F4EXB"),
|
||||||
QString("https://github.com/f4exb/sdrangel"),
|
QString("https://github.com/f4exb/sdrangel"),
|
||||||
true,
|
true,
|
||||||
|
@ -34,6 +34,7 @@ set(sdrgui_SOURCES
|
|||||||
gui/samplingdevicedialog.cpp
|
gui/samplingdevicedialog.cpp
|
||||||
gui/scale.cpp
|
gui/scale.cpp
|
||||||
gui/scaleengine.cpp
|
gui/scaleengine.cpp
|
||||||
|
gui/tickedslider.cpp
|
||||||
gui/transverterbutton.cpp
|
gui/transverterbutton.cpp
|
||||||
gui/transverterdialog.cpp
|
gui/transverterdialog.cpp
|
||||||
gui/valuedial.cpp
|
gui/valuedial.cpp
|
||||||
@ -85,6 +86,7 @@ set(sdrgui_HEADERS
|
|||||||
gui/samplingdevicedialog.h
|
gui/samplingdevicedialog.h
|
||||||
gui/scale.h
|
gui/scale.h
|
||||||
gui/scaleengine.h
|
gui/scaleengine.h
|
||||||
|
gui/tickedslider.h
|
||||||
gui/transverterbutton.h
|
gui/transverterbutton.h
|
||||||
gui/transverterdialog.h
|
gui/transverterdialog.h
|
||||||
gui/valuedial.h
|
gui/valuedial.h
|
||||||
|
78
sdrgui/gui/tickedslider.cpp
Normal file
78
sdrgui/gui/tickedslider.cpp
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Copyright (C) 2017 Edouard Griffiths, F4EXB. //
|
||||||
|
// //
|
||||||
|
// Swagger server adapter interface //
|
||||||
|
// //
|
||||||
|
// This program is free software; you can redistribute it and/or modify //
|
||||||
|
// it under the terms of the GNU General Public License as published by //
|
||||||
|
// the Free Software Foundation as version 3 of the License, or //
|
||||||
|
// //
|
||||||
|
// This program is distributed in the hope that it will be useful, //
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||||
|
// GNU General Public License V3 for more details. //
|
||||||
|
// //
|
||||||
|
// You should have received a copy of the GNU General Public License //
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>. //
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <QStylePainter>
|
||||||
|
#include <QStyleOptionSlider>
|
||||||
|
|
||||||
|
#include "tickedslider.h"
|
||||||
|
|
||||||
|
TickedSlider::TickedSlider(QWidget* parent) :
|
||||||
|
QSlider(parent),
|
||||||
|
m_tickColor(Qt::white)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
void TickedSlider::paintEvent(QPaintEvent *ev __attribute__((unused)))
|
||||||
|
{
|
||||||
|
|
||||||
|
QStylePainter p(this);
|
||||||
|
QStyleOptionSlider opt;
|
||||||
|
initStyleOption(&opt);
|
||||||
|
|
||||||
|
QRect handle = style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderHandle, this);
|
||||||
|
|
||||||
|
// draw tick marks
|
||||||
|
// do this manually because they are very badly behaved with style sheets
|
||||||
|
int interval = tickInterval();
|
||||||
|
if (interval == 0)
|
||||||
|
{
|
||||||
|
interval = pageStep();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tickPosition() != NoTicks)
|
||||||
|
{
|
||||||
|
for (int i = minimum(); i <= maximum(); i += interval)
|
||||||
|
{
|
||||||
|
int x = round((double)((double)((double)(i - this->minimum()) / (double)(this->maximum() - this->minimum())) * (double)(this->width() - handle.width()) + (double)(handle.width() / 2.0))) - 1;
|
||||||
|
int h = 4;
|
||||||
|
p.setPen(m_tickColor);
|
||||||
|
if (tickPosition() == TicksBothSides || tickPosition() == TicksAbove)
|
||||||
|
{
|
||||||
|
int y = this->rect().top();
|
||||||
|
p.drawLine(x, y, x, y + h);
|
||||||
|
}
|
||||||
|
if (tickPosition() == TicksBothSides || tickPosition() == TicksBelow)
|
||||||
|
{
|
||||||
|
int y = this->rect().bottom();
|
||||||
|
p.drawLine(x, y, x, y - h);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// draw the slider (this is basically copy/pasted from QSlider::paintEvent)
|
||||||
|
opt.subControls = QStyle::SC_SliderGroove;
|
||||||
|
p.drawComplexControl(QStyle::CC_Slider, opt);
|
||||||
|
|
||||||
|
// draw the slider handle
|
||||||
|
opt.subControls = QStyle::SC_SliderHandle;
|
||||||
|
p.drawComplexControl(QStyle::CC_Slider, opt);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
39
sdrgui/gui/tickedslider.h
Normal file
39
sdrgui/gui/tickedslider.h
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Copyright (C) 2017 Edouard Griffiths, F4EXB. //
|
||||||
|
// //
|
||||||
|
// Swagger server adapter interface //
|
||||||
|
// //
|
||||||
|
// This program is free software; you can redistribute it and/or modify //
|
||||||
|
// it under the terms of the GNU General Public License as published by //
|
||||||
|
// the Free Software Foundation as version 3 of the License, or //
|
||||||
|
// //
|
||||||
|
// This program is distributed in the hope that it will be useful, //
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||||
|
// GNU General Public License V3 for more details. //
|
||||||
|
// //
|
||||||
|
// You should have received a copy of the GNU General Public License //
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>. //
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef SDRGUI_GUI_TICKEDSLIDER_H_
|
||||||
|
#define SDRGUI_GUI_TICKEDSLIDER_H_
|
||||||
|
|
||||||
|
#include <QSlider>
|
||||||
|
#include <QColor>
|
||||||
|
|
||||||
|
class TickedSlider : public QSlider
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
TickedSlider(QWidget* parent = 0);
|
||||||
|
void setTickColor(const QColor& color) { m_tickColor = color; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void paintEvent(QPaintEvent *ev);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QColor m_tickColor;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* SDRGUI_GUI_TICKEDSLIDER_H_ */
|
BIN
sdrgui/resources/flip_sidebands.png
Normal file
BIN
sdrgui/resources/flip_sidebands.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 735 B |
@ -81,5 +81,6 @@
|
|||||||
<file>link.png</file>
|
<file>link.png</file>
|
||||||
<file>choose.png</file>
|
<file>choose.png</file>
|
||||||
<file>clocksource.png</file>
|
<file>clocksource.png</file>
|
||||||
|
<file>flip_sidebands.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
Loading…
Reference in New Issue
Block a user