RollupWidget, GLWidget, etc: automatic channel color assignment
This commit is contained in:
parent
4db5f20216
commit
391e47fed5
|
@ -27,6 +27,9 @@ public:
|
|||
const QColor& getColor() const { return m_color; }
|
||||
|
||||
protected:
|
||||
static QRgb m_colorTable[];
|
||||
static int m_nextColor;
|
||||
|
||||
QString m_title;
|
||||
int m_centerFrequency;
|
||||
int m_bandwidth;
|
||||
|
|
|
@ -7,15 +7,27 @@ namespace Ui {
|
|||
class BasicChannelSettingsWidget;
|
||||
}
|
||||
|
||||
class ChannelMarker;
|
||||
|
||||
class BasicChannelSettingsWidget : public QWidget {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit BasicChannelSettingsWidget(QWidget* parent = NULL);
|
||||
explicit BasicChannelSettingsWidget(ChannelMarker* marker, QWidget* parent = NULL);
|
||||
~BasicChannelSettingsWidget();
|
||||
|
||||
private slots:
|
||||
void on_title_textChanged(const QString& text);
|
||||
void on_colorBtn_clicked();
|
||||
void on_red_valueChanged(int value);
|
||||
void on_green_valueChanged(int value);
|
||||
void on_blue_valueChanged(int value);
|
||||
|
||||
private:
|
||||
Ui::BasicChannelSettingsWidget* ui;
|
||||
ChannelMarker* m_channelMarker;
|
||||
|
||||
void paintColor();
|
||||
};
|
||||
|
||||
#endif // INCLUDE_BASICCHANNELSETTINGSWIDGET_H
|
||||
|
|
|
@ -13,15 +13,19 @@ public:
|
|||
QByteArray saveState(int version = 0) const;
|
||||
bool restoreState(const QByteArray& state, int version = 0);
|
||||
|
||||
void setTitleColor(const QColor& c);
|
||||
|
||||
signals:
|
||||
void widgetRolled(QWidget* widget, bool rollDown);
|
||||
void menuDoubleClickEvent(const QPoint& position);
|
||||
void menuDoubleClickEvent();
|
||||
|
||||
protected:
|
||||
enum {
|
||||
VersionMarker = 0xff
|
||||
};
|
||||
|
||||
QColor m_titleColor;
|
||||
|
||||
int arrangeRollups();
|
||||
|
||||
void paintEvent(QPaintEvent*);
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#include "dsp/spectrumvis.h"
|
||||
#include "dsp/threadedsamplesink.h"
|
||||
#include "util/simpleserializer.h"
|
||||
#include "gui/basicchannelsettingswidget.h"
|
||||
#include "ui_tcpsrcgui.h"
|
||||
|
||||
TCPSrcGUI* TCPSrcGUI::create(PluginAPI* pluginAPI)
|
||||
|
@ -43,6 +44,7 @@ QByteArray TCPSrcGUI::serialize() const
|
|||
s.writeReal(5, m_rfBandwidth);
|
||||
s.writeS32(6, m_tcpPort);
|
||||
s.writeBlob(7, ui->spectrumGUI->serialize());
|
||||
s.writeU32(8, m_channelMarker->getColor().rgb());
|
||||
return s.final();
|
||||
}
|
||||
|
||||
|
@ -58,6 +60,7 @@ bool TCPSrcGUI::deserialize(const QByteArray& data)
|
|||
if(d.getVersion() == 1) {
|
||||
QByteArray bytetmp;
|
||||
qint32 s32tmp;
|
||||
quint32 u32tmp;
|
||||
Real realtmp;
|
||||
d.readBlob(1, &bytetmp);
|
||||
restoreState(bytetmp);
|
||||
|
@ -83,6 +86,8 @@ bool TCPSrcGUI::deserialize(const QByteArray& data)
|
|||
ui->tcpPort->setText(QString("%1").arg(s32tmp));
|
||||
d.readBlob(7, &bytetmp);
|
||||
ui->spectrumGUI->deserialize(bytetmp);
|
||||
if(d.readU32(8, &u32tmp))
|
||||
m_channelMarker->setColor(u32tmp);
|
||||
applySettings();
|
||||
return true;
|
||||
} else {
|
||||
|
@ -119,6 +124,7 @@ TCPSrcGUI::TCPSrcGUI(PluginAPI* pluginAPI, QWidget* parent) :
|
|||
ui->setupUi(this);
|
||||
ui->connectedClientsBox->hide();
|
||||
connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
|
||||
connect(this, SIGNAL(menuDoubleClickEvent()), this, SLOT(onMenuDoubleClicked()));
|
||||
setAttribute(Qt::WA_DeleteOnClose, true);
|
||||
|
||||
m_spectrumVis = new SpectrumVis(ui->glSpectrum);
|
||||
|
@ -134,7 +140,6 @@ TCPSrcGUI::TCPSrcGUI(PluginAPI* pluginAPI, QWidget* parent) :
|
|||
m_spectrumVis->configure(m_threadedSampleSink->getMessageQueue(), 64, 10, FFTWindow::BlackmanHarris);
|
||||
|
||||
m_channelMarker = new ChannelMarker(this);
|
||||
m_channelMarker->setColor(Qt::red);
|
||||
m_channelMarker->setBandwidth(25000);
|
||||
m_channelMarker->setCenterFrequency(0);
|
||||
m_channelMarker->setVisible(true);
|
||||
|
@ -143,6 +148,8 @@ TCPSrcGUI::TCPSrcGUI(PluginAPI* pluginAPI, QWidget* parent) :
|
|||
|
||||
ui->spectrumGUI->setBuddies(m_threadedSampleSink->getMessageQueue(), m_spectrumVis, ui->glSpectrum);
|
||||
|
||||
m_basicSettingsShown = false;
|
||||
|
||||
applySettings();
|
||||
}
|
||||
|
||||
|
@ -172,6 +179,7 @@ void TCPSrcGUI::applySettings()
|
|||
if((!ok) || (tcpPort < 1) || (tcpPort > 65535))
|
||||
tcpPort = 9999;
|
||||
|
||||
setTitleColor(m_channelMarker->getColor());
|
||||
ui->sampleRate->setText(QString("%1").arg(outputSampleRate, 0));
|
||||
ui->rfBandwidth->setText(QString("%1").arg(rfBandwidth, 0));
|
||||
ui->tcpPort->setText(QString("%1").arg(tcpPort));
|
||||
|
@ -242,6 +250,15 @@ void TCPSrcGUI::onWidgetRolled(QWidget* widget, bool rollDown)
|
|||
m_tcpSrc->setSpectrum(m_threadedSampleSink->getMessageQueue(), rollDown);
|
||||
}
|
||||
|
||||
void TCPSrcGUI::onMenuDoubleClicked()
|
||||
{
|
||||
if(!m_basicSettingsShown) {
|
||||
m_basicSettingsShown = true;
|
||||
BasicChannelSettingsWidget* bcsw = new BasicChannelSettingsWidget(m_channelMarker, this);
|
||||
bcsw->show();
|
||||
}
|
||||
}
|
||||
|
||||
void TCPSrcGUI::addConnection(quint32 id, const QHostAddress& peerAddress, int peerPort)
|
||||
{
|
||||
QStringList l;
|
||||
|
|
|
@ -40,6 +40,7 @@ private slots:
|
|||
void on_tcpPort_textEdited(const QString& arg1);
|
||||
void on_applyBtn_clicked();
|
||||
void onWidgetRolled(QWidget* widget, bool rollDown);
|
||||
void onMenuDoubleClicked();
|
||||
|
||||
private:
|
||||
Ui::TCPSrcGUI* ui;
|
||||
|
@ -51,6 +52,7 @@ private:
|
|||
Real m_outputSampleRate;
|
||||
Real m_rfBandwidth;
|
||||
int m_tcpPort;
|
||||
bool m_basicSettingsShown;
|
||||
|
||||
// RF path
|
||||
ThreadedSampleSink* m_threadedSampleSink;
|
||||
|
|
|
@ -1,12 +1,40 @@
|
|||
#include "dsp/channelmarker.h"
|
||||
|
||||
QRgb ChannelMarker::m_colorTable[] = {
|
||||
qRgb(0xc0, 0x00, 0x00),
|
||||
qRgb(0x00, 0xc0, 0x00),
|
||||
qRgb(0x00, 0x00, 0xc0),
|
||||
|
||||
qRgb(0xc0, 0xc0, 0x00),
|
||||
qRgb(0xc0, 0x00, 0xc0),
|
||||
qRgb(0x00, 0xc0, 0xc0),
|
||||
|
||||
qRgb(0xc0, 0x60, 0x00),
|
||||
qRgb(0xc0, 0x00, 0x60),
|
||||
qRgb(0x60, 0x00, 0xc0),
|
||||
|
||||
qRgb(0x60, 0x00, 0x00),
|
||||
qRgb(0x00, 0x60, 0x00),
|
||||
qRgb(0x00, 0x00, 0x60),
|
||||
|
||||
qRgb(0x60, 0x60, 0x00),
|
||||
qRgb(0x60, 0x00, 0x60),
|
||||
qRgb(0x00, 0x60, 0x60),
|
||||
|
||||
0
|
||||
};
|
||||
int ChannelMarker::m_nextColor = 0;
|
||||
|
||||
ChannelMarker::ChannelMarker(QObject* parent) :
|
||||
QObject(parent),
|
||||
m_centerFrequency(0),
|
||||
m_bandwidth(0),
|
||||
m_visible(false),
|
||||
m_color(Qt::red)
|
||||
m_color(m_colorTable[m_nextColor])
|
||||
{
|
||||
++m_nextColor;
|
||||
if(m_colorTable[m_nextColor] == 0)
|
||||
m_nextColor = 0;
|
||||
}
|
||||
|
||||
void ChannelMarker::setTitle(const QString& title)
|
||||
|
|
|
@ -1,14 +1,77 @@
|
|||
#include <QPainter>
|
||||
#include <QColorDialog>
|
||||
#include "gui/basicchannelsettingswidget.h"
|
||||
#include "dsp/channelmarker.h"
|
||||
#include "ui_basicchannelsettingswidget.h"
|
||||
|
||||
BasicChannelSettingsWidget::BasicChannelSettingsWidget(QWidget* parent) :
|
||||
BasicChannelSettingsWidget::BasicChannelSettingsWidget(ChannelMarker* marker, QWidget* parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::BasicChannelSettingsWidget)
|
||||
ui(new Ui::BasicChannelSettingsWidget),
|
||||
m_channelMarker(marker)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
ui->title->setText(m_channelMarker->getTitle());
|
||||
paintColor();
|
||||
ui->red->setValue(m_channelMarker->getColor().red());
|
||||
ui->green->setValue(m_channelMarker->getColor().green());
|
||||
ui->blue->setValue(m_channelMarker->getColor().blue());
|
||||
}
|
||||
|
||||
BasicChannelSettingsWidget::~BasicChannelSettingsWidget()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void BasicChannelSettingsWidget::on_title_textChanged(const QString& text)
|
||||
{
|
||||
m_channelMarker->setTitle(text);
|
||||
}
|
||||
|
||||
void BasicChannelSettingsWidget::on_colorBtn_clicked()
|
||||
{
|
||||
QColor c = m_channelMarker->getColor();
|
||||
c = QColorDialog::getColor(c, this, tr("Select Color for Channel"));
|
||||
if(c.isValid()) {
|
||||
m_channelMarker->setColor(c);
|
||||
paintColor();
|
||||
ui->red->setValue(m_channelMarker->getColor().red());
|
||||
ui->green->setValue(m_channelMarker->getColor().green());
|
||||
ui->blue->setValue(m_channelMarker->getColor().blue());
|
||||
}
|
||||
}
|
||||
|
||||
void BasicChannelSettingsWidget::paintColor()
|
||||
{
|
||||
QColor c(m_channelMarker->getColor());
|
||||
QPixmap pm(24, 24);
|
||||
pm.fill(c);
|
||||
ui->colorBtn->setIcon(pm);
|
||||
ui->color->setText(tr("#%1%2%3")
|
||||
.arg(c.red(), 2, 16, QChar('0'))
|
||||
.arg(c.green(), 2, 16, QChar('0'))
|
||||
.arg(c.blue(), 2, 16, QChar('0')));
|
||||
}
|
||||
|
||||
void BasicChannelSettingsWidget::on_red_valueChanged(int value)
|
||||
{
|
||||
QColor c(m_channelMarker->getColor());
|
||||
c.setRed(value);
|
||||
m_channelMarker->setColor(c);
|
||||
paintColor();
|
||||
}
|
||||
|
||||
void BasicChannelSettingsWidget::on_green_valueChanged(int value)
|
||||
{
|
||||
QColor c(m_channelMarker->getColor());
|
||||
c.setGreen(value);
|
||||
m_channelMarker->setColor(c);
|
||||
paintColor();
|
||||
}
|
||||
|
||||
void BasicChannelSettingsWidget::on_blue_valueChanged(int value)
|
||||
{
|
||||
QColor c(m_channelMarker->getColor());
|
||||
c.setBlue(value);
|
||||
m_channelMarker->setColor(c);
|
||||
paintColor();
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
<string>Title & Color</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<property name="margin">
|
||||
|
@ -22,6 +22,12 @@
|
|||
</property>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Title</string>
|
||||
</property>
|
||||
|
@ -32,6 +38,12 @@
|
|||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Color</string>
|
||||
</property>
|
||||
|
@ -45,7 +57,7 @@
|
|||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<widget class="QLabel" name="color">
|
||||
<property name="text">
|
||||
<string>#ff0000</string>
|
||||
</property>
|
||||
|
@ -53,6 +65,9 @@
|
|||
</item>
|
||||
<item row="2" column="1" colspan="2">
|
||||
<widget class="QSlider" name="red">
|
||||
<property name="maximum">
|
||||
<number>255</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
|
@ -60,6 +75,9 @@
|
|||
</item>
|
||||
<item row="3" column="1" colspan="2">
|
||||
<widget class="QSlider" name="green">
|
||||
<property name="maximum">
|
||||
<number>255</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
|
@ -67,6 +85,9 @@
|
|||
</item>
|
||||
<item row="4" column="1" colspan="2">
|
||||
<widget class="QSlider" name="blue">
|
||||
<property name="maximum">
|
||||
<number>255</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
|
|
|
@ -466,7 +466,7 @@ void GLSpectrum::paintGL()
|
|||
if(dv->m_channelMarker->getVisible()) {
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glColor4f(dv->m_channelMarker->getColor().redF(), dv->m_channelMarker->getColor().greenF(), dv->m_channelMarker->getColor().blueF(), 0.15f);
|
||||
glColor4f(dv->m_channelMarker->getColor().redF(), dv->m_channelMarker->getColor().greenF(), dv->m_channelMarker->getColor().blueF(), 0.3f);
|
||||
glPushMatrix();
|
||||
glTranslatef(dv->m_glRect.x(), dv->m_glRect.y(), 0);
|
||||
glScalef(dv->m_glRect.width(), dv->m_glRect.height(), 1);
|
||||
|
@ -546,7 +546,7 @@ void GLSpectrum::paintGL()
|
|||
if(dv->m_channelMarker->getVisible()) {
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glColor4f(dv->m_channelMarker->getColor().redF(), dv->m_channelMarker->getColor().greenF(), dv->m_channelMarker->getColor().blueF(), 0.15f);
|
||||
glColor4f(dv->m_channelMarker->getColor().redF(), dv->m_channelMarker->getColor().greenF(), dv->m_channelMarker->getColor().blueF(), 0.3f);
|
||||
glPushMatrix();
|
||||
glTranslatef(dv->m_glRect.x(), dv->m_glRect.y(), 0);
|
||||
glScalef(dv->m_glRect.width(), dv->m_glRect.height(), 1);
|
||||
|
@ -646,7 +646,7 @@ void GLSpectrum::paintGL()
|
|||
if(dv->m_channelMarker->getVisible()) {
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glColor4f(dv->m_channelMarker->getColor().redF(), dv->m_channelMarker->getColor().greenF(), dv->m_channelMarker->getColor().blueF(), 0.3f);
|
||||
glColor4f(dv->m_channelMarker->getColor().redF(), dv->m_channelMarker->getColor().greenF(), dv->m_channelMarker->getColor().blueF(), 0.5f);
|
||||
glPushMatrix();
|
||||
glTranslatef(dv->m_glRect.x(), dv->m_glRect.y(), 0);
|
||||
glScalef(dv->m_glRect.width(), dv->m_glRect.height(), 1);
|
||||
|
|
|
@ -13,6 +13,8 @@ RollupWidget::RollupWidget(QWidget* parent) :
|
|||
|
||||
setAutoFillBackground(false);
|
||||
setAttribute(Qt::WA_OpaquePaintEvent, true);
|
||||
|
||||
m_titleColor = palette().highlight().color();
|
||||
}
|
||||
|
||||
QByteArray RollupWidget::saveState(int version) const
|
||||
|
@ -87,6 +89,12 @@ bool RollupWidget::restoreState(const QByteArray& state, int version)
|
|||
return true;
|
||||
}
|
||||
|
||||
void RollupWidget::setTitleColor(const QColor& c)
|
||||
{
|
||||
m_titleColor = c;
|
||||
update();
|
||||
}
|
||||
|
||||
int RollupWidget::arrangeRollups()
|
||||
{
|
||||
QFontMetrics fm(font());
|
||||
|
@ -139,7 +147,7 @@ void RollupWidget::paintEvent(QPaintEvent*)
|
|||
|
||||
// Titel-Hintergrund
|
||||
p.setPen(Qt::NoPen);
|
||||
p.setBrush(palette().highlight());
|
||||
p.setBrush(m_titleColor);
|
||||
QPainterPath path;
|
||||
path.moveTo(1.5, fm.height() + 2.5);
|
||||
path.lineTo(width() - 1.5, fm.height() + 2.5);
|
||||
|
@ -303,7 +311,7 @@ void RollupWidget::mouseDoubleClickEvent(QMouseEvent* event)
|
|||
|
||||
// menu box left
|
||||
if(QRectF(3.5, 3.5, fm.ascent(), fm.ascent()).contains(event->pos())) {
|
||||
emit menuDoubleClickEvent(event->pos());
|
||||
emit menuDoubleClickEvent();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue