mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-02-03 09:44:01 -05:00
Added options to display scope primary or secondary displays exclusively
This commit is contained in:
parent
b10cab79ae
commit
3d75f2f899
@ -42,6 +42,12 @@ public:
|
|||||||
ModeCyclostationary
|
ModeCyclostationary
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum Displays {
|
||||||
|
DisplayBoth,
|
||||||
|
DisplayFirstOnly,
|
||||||
|
DisplaySecondOnly
|
||||||
|
};
|
||||||
|
|
||||||
GLScope(QWidget* parent = NULL);
|
GLScope(QWidget* parent = NULL);
|
||||||
~GLScope();
|
~GLScope();
|
||||||
|
|
||||||
@ -51,6 +57,7 @@ public:
|
|||||||
void setTimeBase(int timeBase);
|
void setTimeBase(int timeBase);
|
||||||
void setTimeOfsProMill(int timeOfsProMill);
|
void setTimeOfsProMill(int timeOfsProMill);
|
||||||
void setMode(Mode mode);
|
void setMode(Mode mode);
|
||||||
|
void setDisplays(Displays displays);
|
||||||
void setOrientation(Qt::Orientation orientation);
|
void setOrientation(Qt::Orientation orientation);
|
||||||
void setDisplayGridIntensity(int intensity);
|
void setDisplayGridIntensity(int intensity);
|
||||||
|
|
||||||
@ -72,6 +79,7 @@ private:
|
|||||||
bool m_dataChanged;
|
bool m_dataChanged;
|
||||||
bool m_configChanged;
|
bool m_configChanged;
|
||||||
Mode m_mode;
|
Mode m_mode;
|
||||||
|
Displays m_displays;
|
||||||
Qt::Orientation m_orientation;
|
Qt::Orientation m_orientation;
|
||||||
|
|
||||||
// traces
|
// traces
|
||||||
|
@ -67,6 +67,8 @@ private slots:
|
|||||||
|
|
||||||
void on_horizView_clicked();
|
void on_horizView_clicked();
|
||||||
void on_vertView_clicked();
|
void on_vertView_clicked();
|
||||||
|
void on_onlyPrimeView_clicked();
|
||||||
|
void on_onlySecondView_clicked();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // INCLUDE_GLSCOPEGUI_H
|
#endif // INCLUDE_GLSCOPEGUI_H
|
||||||
|
@ -17,6 +17,7 @@ GLScope::GLScope(QWidget* parent) :
|
|||||||
m_dataChanged(false),
|
m_dataChanged(false),
|
||||||
m_configChanged(true),
|
m_configChanged(true),
|
||||||
m_mode(ModeIQ),
|
m_mode(ModeIQ),
|
||||||
|
m_displays(DisplayBoth),
|
||||||
m_orientation(Qt::Horizontal),
|
m_orientation(Qt::Horizontal),
|
||||||
m_displayTrace(&m_rawTrace),
|
m_displayTrace(&m_rawTrace),
|
||||||
m_oldTraceSize(-1),
|
m_oldTraceSize(-1),
|
||||||
@ -103,6 +104,14 @@ void GLScope::setMode(Mode mode)
|
|||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GLScope::setDisplays(Displays displays)
|
||||||
|
{
|
||||||
|
m_displays = displays;
|
||||||
|
m_dataChanged = true;
|
||||||
|
m_configChanged = true;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
void GLScope::setOrientation(Qt::Orientation orientation)
|
void GLScope::setOrientation(Qt::Orientation orientation)
|
||||||
{
|
{
|
||||||
m_orientation = orientation;
|
m_orientation = orientation;
|
||||||
@ -169,8 +178,10 @@ void GLScope::paintGL()
|
|||||||
glScalef(2.0, -2.0, 1.0);
|
glScalef(2.0, -2.0, 1.0);
|
||||||
glTranslatef(-0.50, -0.5, 0);
|
glTranslatef(-0.50, -0.5, 0);
|
||||||
|
|
||||||
// I
|
// I - primary display
|
||||||
|
|
||||||
|
if ((m_displays == DisplayBoth) || (m_displays == DisplayFirstOnly))
|
||||||
|
{
|
||||||
// draw rect around
|
// draw rect around
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glTranslatef(m_glScopeRect1.x(), m_glScopeRect1.y(), 0);
|
glTranslatef(m_glScopeRect1.x(), m_glScopeRect1.y(), 0);
|
||||||
@ -252,52 +263,6 @@ void GLScope::paintGL()
|
|||||||
glDisable(GL_TEXTURE_2D);
|
glDisable(GL_TEXTURE_2D);
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
|
|
||||||
// paint left #2 scale
|
|
||||||
glBindTexture(GL_TEXTURE_2D, m_left2ScaleTexture);
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
|
||||||
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
|
|
||||||
glPushMatrix();
|
|
||||||
glTranslatef(m_glLeft2ScaleRect.x(), m_glLeft2ScaleRect.y(), 0);
|
|
||||||
glScalef(m_glLeft2ScaleRect.width(), m_glLeft2ScaleRect.height(), 1);
|
|
||||||
glEnable(GL_TEXTURE_2D);
|
|
||||||
glBegin(GL_QUADS);
|
|
||||||
glTexCoord2f(0, 1);
|
|
||||||
glVertex2f(0, 1);
|
|
||||||
glTexCoord2f(1, 1);
|
|
||||||
glVertex2f(1, 1);
|
|
||||||
glTexCoord2f(1, 0);
|
|
||||||
glVertex2f(1, 0);
|
|
||||||
glTexCoord2f(0, 0);
|
|
||||||
glVertex2f(0, 0);
|
|
||||||
glEnd();
|
|
||||||
glDisable(GL_TEXTURE_2D);
|
|
||||||
glPopMatrix();
|
|
||||||
|
|
||||||
// paint bottom #2 scale
|
|
||||||
glBindTexture(GL_TEXTURE_2D, m_bot2ScaleTexture);
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
|
||||||
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
|
|
||||||
glPushMatrix();
|
|
||||||
glTranslatef(m_glBot2ScaleRect.x(), m_glBot2ScaleRect.y(), 0);
|
|
||||||
glScalef(m_glBot2ScaleRect.width(), m_glBot2ScaleRect.height(), 1);
|
|
||||||
glEnable(GL_TEXTURE_2D);
|
|
||||||
glBegin(GL_QUADS);
|
|
||||||
glTexCoord2f(0, 1);
|
|
||||||
glVertex2f(0, 1);
|
|
||||||
glTexCoord2f(1, 1);
|
|
||||||
glVertex2f(1, 1);
|
|
||||||
glTexCoord2f(1, 0);
|
|
||||||
glVertex2f(1, 0);
|
|
||||||
glTexCoord2f(0, 0);
|
|
||||||
glVertex2f(0, 0);
|
|
||||||
glEnd();
|
|
||||||
glDisable(GL_TEXTURE_2D);
|
|
||||||
glPopMatrix();
|
|
||||||
|
|
||||||
if(m_triggerChannel == ScopeVis::TriggerChannelI) {
|
if(m_triggerChannel == ScopeVis::TriggerChannelI) {
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glTranslatef(m_glScopeRect1.x(), m_glScopeRect1.y() + m_glScopeRect1.height() / 2.0, 0);
|
glTranslatef(m_glScopeRect1.x(), m_glScopeRect1.y() + m_glScopeRect1.height() / 2.0, 0);
|
||||||
@ -348,9 +313,12 @@ void GLScope::paintGL()
|
|||||||
glDisable(GL_LINE_SMOOTH);
|
glDisable(GL_LINE_SMOOTH);
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
}
|
}
|
||||||
|
} // Both displays or primary only
|
||||||
|
|
||||||
// Q
|
// Q - secondary display
|
||||||
|
|
||||||
|
if ((m_displays == DisplayBoth) || (m_displays == DisplaySecondOnly))
|
||||||
|
{
|
||||||
// draw rect around
|
// draw rect around
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glTranslatef(m_glScopeRect2.x(), m_glScopeRect2.y(), 0);
|
glTranslatef(m_glScopeRect2.x(), m_glScopeRect2.y(), 0);
|
||||||
@ -366,6 +334,7 @@ void GLScope::paintGL()
|
|||||||
glVertex2f(1, 0);
|
glVertex2f(1, 0);
|
||||||
glEnd();
|
glEnd();
|
||||||
glDisable(GL_BLEND);
|
glDisable(GL_BLEND);
|
||||||
|
|
||||||
// paint grid
|
// paint grid
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
@ -385,6 +354,52 @@ void GLScope::paintGL()
|
|||||||
}
|
}
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
|
|
||||||
|
// paint left #2 scale
|
||||||
|
glBindTexture(GL_TEXTURE_2D, m_left2ScaleTexture);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||||
|
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
|
||||||
|
glPushMatrix();
|
||||||
|
glTranslatef(m_glLeft2ScaleRect.x(), m_glLeft2ScaleRect.y(), 0);
|
||||||
|
glScalef(m_glLeft2ScaleRect.width(), m_glLeft2ScaleRect.height(), 1);
|
||||||
|
glEnable(GL_TEXTURE_2D);
|
||||||
|
glBegin(GL_QUADS);
|
||||||
|
glTexCoord2f(0, 1);
|
||||||
|
glVertex2f(0, 1);
|
||||||
|
glTexCoord2f(1, 1);
|
||||||
|
glVertex2f(1, 1);
|
||||||
|
glTexCoord2f(1, 0);
|
||||||
|
glVertex2f(1, 0);
|
||||||
|
glTexCoord2f(0, 0);
|
||||||
|
glVertex2f(0, 0);
|
||||||
|
glEnd();
|
||||||
|
glDisable(GL_TEXTURE_2D);
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
// paint bottom #2 scale
|
||||||
|
glBindTexture(GL_TEXTURE_2D, m_bot2ScaleTexture);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||||
|
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
|
||||||
|
glPushMatrix();
|
||||||
|
glTranslatef(m_glBot2ScaleRect.x(), m_glBot2ScaleRect.y(), 0);
|
||||||
|
glScalef(m_glBot2ScaleRect.width(), m_glBot2ScaleRect.height(), 1);
|
||||||
|
glEnable(GL_TEXTURE_2D);
|
||||||
|
glBegin(GL_QUADS);
|
||||||
|
glTexCoord2f(0, 1);
|
||||||
|
glVertex2f(0, 1);
|
||||||
|
glTexCoord2f(1, 1);
|
||||||
|
glVertex2f(1, 1);
|
||||||
|
glTexCoord2f(1, 0);
|
||||||
|
glVertex2f(1, 0);
|
||||||
|
glTexCoord2f(0, 0);
|
||||||
|
glVertex2f(0, 0);
|
||||||
|
glEnd();
|
||||||
|
glDisable(GL_TEXTURE_2D);
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
if(m_triggerChannel == ScopeVis::TriggerChannelQ) {
|
if(m_triggerChannel == ScopeVis::TriggerChannelQ) {
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glTranslatef(m_glScopeRect2.x(), m_glScopeRect2.y() + m_glScopeRect2.height() / 2.0, 0);
|
glTranslatef(m_glScopeRect2.x(), m_glScopeRect2.y() + m_glScopeRect2.height() / 2.0, 0);
|
||||||
@ -435,6 +450,7 @@ void GLScope::paintGL()
|
|||||||
glDisable(GL_LINE_SMOOTH);
|
glDisable(GL_LINE_SMOOTH);
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
}
|
}
|
||||||
|
} // Both displays or secondary display only
|
||||||
|
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
m_dataChanged = false;
|
m_dataChanged = false;
|
||||||
@ -643,6 +659,8 @@ void GLScope::applyConfig()
|
|||||||
|
|
||||||
// QRectF(x, y, w, h); (x, y) = top left corner
|
// QRectF(x, y, w, h); (x, y) = top left corner
|
||||||
|
|
||||||
|
if (m_displays == DisplayBoth)
|
||||||
|
{
|
||||||
if(m_orientation == Qt::Vertical) {
|
if(m_orientation == Qt::Vertical) {
|
||||||
int scopeHeight = (height() - topMargin) / 2 - botMargin;
|
int scopeHeight = (height() - topMargin) / 2 - botMargin;
|
||||||
int scopeWidth = width() - leftMargin - rightMargin;
|
int scopeWidth = width() - leftMargin - rightMargin;
|
||||||
@ -1017,6 +1035,201 @@ void GLScope::applyConfig()
|
|||||||
m_bot2ScaleTextureAllocated = true;
|
m_bot2ScaleTextureAllocated = true;
|
||||||
} // X2 scale
|
} // X2 scale
|
||||||
}
|
}
|
||||||
|
} // Both displays
|
||||||
|
else if (m_displays == DisplayFirstOnly)
|
||||||
|
{
|
||||||
|
int scopeHeight = height() - topMargin - botMargin;
|
||||||
|
int scopeWidth = width() - leftMargin - rightMargin;
|
||||||
|
|
||||||
|
m_glScopeRect1 = QRectF(
|
||||||
|
(float) leftMargin / (float) width(),
|
||||||
|
(float) topMargin / (float) height(),
|
||||||
|
(float) scopeWidth / (float) width(),
|
||||||
|
(float) scopeHeight / (float) height()
|
||||||
|
);
|
||||||
|
m_glLeft1ScaleRect = QRectF(
|
||||||
|
0,
|
||||||
|
(float) topMargin / (float) height(),
|
||||||
|
(float) (leftMargin-1) / (float) width(),
|
||||||
|
(float) scopeHeight / (float) height()
|
||||||
|
);
|
||||||
|
m_glBot1ScaleRect = QRectF(
|
||||||
|
(float) leftMargin / (float) width(),
|
||||||
|
(float) (scopeHeight + topMargin + 1) / (float) height(),
|
||||||
|
(float) scopeWidth / (float) width(),
|
||||||
|
(float) (botMargin - 1) / (float) height()
|
||||||
|
);
|
||||||
|
|
||||||
|
{ // Y1 scale
|
||||||
|
//std::cerr << "Horizontal: " << width() << "x" << scopeHeight << " amp:" << m_amp << std::endl;
|
||||||
|
m_y1Scale.setSize(scopeHeight);
|
||||||
|
|
||||||
|
m_left1ScalePixmap = QPixmap(
|
||||||
|
leftMargin - 1,
|
||||||
|
scopeHeight
|
||||||
|
);
|
||||||
|
|
||||||
|
const ScaleEngine::TickList* tickList;
|
||||||
|
const ScaleEngine::Tick* tick;
|
||||||
|
|
||||||
|
m_left1ScalePixmap.fill(Qt::black);
|
||||||
|
QPainter painter(&m_left1ScalePixmap);
|
||||||
|
painter.setPen(QColor(0xf0, 0xf0, 0xff));
|
||||||
|
painter.setFont(font());
|
||||||
|
tickList = &m_y1Scale.getTickList();
|
||||||
|
|
||||||
|
for(int i = 0; i < tickList->count(); i++) {
|
||||||
|
tick = &(*tickList)[i];
|
||||||
|
if(tick->major) {
|
||||||
|
if(tick->textSize > 0) {
|
||||||
|
//std::cerr << (tick->text).toStdString() << " @ " << tick->textPos << std::endl;
|
||||||
|
painter.drawText(QPointF(leftMargin - M - tick->textSize, topMargin + scopeHeight - tick->textPos - fm.ascent()/2), tick->text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_left1ScaleTextureAllocated)
|
||||||
|
deleteTexture(m_left1ScaleTextureAllocated);
|
||||||
|
m_left1ScaleTexture = bindTexture(m_left1ScalePixmap,
|
||||||
|
GL_TEXTURE_2D,
|
||||||
|
GL_RGBA,
|
||||||
|
QGLContext::LinearFilteringBindOption |
|
||||||
|
QGLContext::MipmapBindOption);
|
||||||
|
m_left1ScaleTextureAllocated = true;
|
||||||
|
} // Y1 scale
|
||||||
|
{ // X1 scale
|
||||||
|
m_x1Scale.setSize(scopeWidth);
|
||||||
|
|
||||||
|
m_bot1ScalePixmap = QPixmap(
|
||||||
|
scopeWidth,
|
||||||
|
botMargin - 1
|
||||||
|
);
|
||||||
|
|
||||||
|
const ScaleEngine::TickList* tickList;
|
||||||
|
const ScaleEngine::Tick* tick;
|
||||||
|
|
||||||
|
m_bot1ScalePixmap.fill(Qt::black);
|
||||||
|
QPainter painter(&m_bot1ScalePixmap);
|
||||||
|
painter.setPen(QColor(0xf0, 0xf0, 0xff));
|
||||||
|
painter.setFont(font());
|
||||||
|
tickList = &m_x1Scale.getTickList();
|
||||||
|
|
||||||
|
for(int i = 0; i < tickList->count(); i++) {
|
||||||
|
tick = &(*tickList)[i];
|
||||||
|
if(tick->major) {
|
||||||
|
if(tick->textSize > 0) {
|
||||||
|
painter.drawText(QPointF(tick->textPos, fm.height() - 1), tick->text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_bot1ScaleTextureAllocated)
|
||||||
|
deleteTexture(m_bot1ScaleTexture);
|
||||||
|
m_bot1ScaleTexture = bindTexture(m_bot1ScalePixmap,
|
||||||
|
GL_TEXTURE_2D,
|
||||||
|
GL_RGBA,
|
||||||
|
QGLContext::LinearFilteringBindOption |
|
||||||
|
QGLContext::MipmapBindOption);
|
||||||
|
m_bot1ScaleTextureAllocated = true;
|
||||||
|
} // X1 scale
|
||||||
|
} // Primary display only
|
||||||
|
else if (m_displays == DisplaySecondOnly)
|
||||||
|
{
|
||||||
|
int scopeHeight = height() - topMargin - botMargin;
|
||||||
|
int scopeWidth = width() - leftMargin - rightMargin;
|
||||||
|
|
||||||
|
m_glScopeRect2 = QRectF(
|
||||||
|
(float) leftMargin / (float) width(),
|
||||||
|
(float) topMargin / (float) height(),
|
||||||
|
(float) scopeWidth / (float) width(),
|
||||||
|
(float) scopeHeight / (float) height()
|
||||||
|
);
|
||||||
|
m_glLeft2ScaleRect = QRectF(
|
||||||
|
0,
|
||||||
|
(float) topMargin / (float) height(),
|
||||||
|
(float) (leftMargin-1) / (float) width(),
|
||||||
|
(float) scopeHeight / (float) height()
|
||||||
|
);
|
||||||
|
m_glBot2ScaleRect = QRectF(
|
||||||
|
(float) leftMargin / (float) width(),
|
||||||
|
(float) (scopeHeight + topMargin + 1) / (float) height(),
|
||||||
|
(float) scopeWidth / (float) width(),
|
||||||
|
(float) (botMargin - 1) / (float) height()
|
||||||
|
);
|
||||||
|
|
||||||
|
{ // Y2 scale
|
||||||
|
//std::cerr << "Horizontal: " << width() << "x" << scopeHeight << " amp:" << m_amp << std::endl;
|
||||||
|
m_y2Scale.setSize(scopeHeight);
|
||||||
|
|
||||||
|
m_left2ScalePixmap = QPixmap(
|
||||||
|
leftMargin - 1,
|
||||||
|
scopeHeight
|
||||||
|
);
|
||||||
|
|
||||||
|
const ScaleEngine::TickList* tickList;
|
||||||
|
const ScaleEngine::Tick* tick;
|
||||||
|
|
||||||
|
m_left2ScalePixmap.fill(Qt::black);
|
||||||
|
QPainter painter(&m_left2ScalePixmap);
|
||||||
|
painter.setPen(QColor(0xf0, 0xf0, 0xff));
|
||||||
|
painter.setFont(font());
|
||||||
|
tickList = &m_y2Scale.getTickList();
|
||||||
|
|
||||||
|
for(int i = 0; i < tickList->count(); i++) {
|
||||||
|
tick = &(*tickList)[i];
|
||||||
|
if(tick->major) {
|
||||||
|
if(tick->textSize > 0) {
|
||||||
|
//std::cerr << (tick->text).toStdString() << " @ " << tick->textPos << std::endl;
|
||||||
|
painter.drawText(QPointF(leftMargin - M - tick->textSize, topMargin + scopeHeight - tick->textPos - fm.ascent()/2), tick->text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_left2ScaleTextureAllocated)
|
||||||
|
deleteTexture(m_left2ScaleTextureAllocated);
|
||||||
|
m_left2ScaleTexture = bindTexture(m_left2ScalePixmap,
|
||||||
|
GL_TEXTURE_2D,
|
||||||
|
GL_RGBA,
|
||||||
|
QGLContext::LinearFilteringBindOption |
|
||||||
|
QGLContext::MipmapBindOption);
|
||||||
|
m_left2ScaleTextureAllocated = true;
|
||||||
|
} // Y2 scale
|
||||||
|
{ // X2 scale
|
||||||
|
m_x2Scale.setSize(scopeWidth);
|
||||||
|
|
||||||
|
m_bot2ScalePixmap = QPixmap(
|
||||||
|
scopeWidth,
|
||||||
|
botMargin - 1
|
||||||
|
);
|
||||||
|
|
||||||
|
const ScaleEngine::TickList* tickList;
|
||||||
|
const ScaleEngine::Tick* tick;
|
||||||
|
|
||||||
|
m_bot2ScalePixmap.fill(Qt::black);
|
||||||
|
QPainter painter(&m_bot2ScalePixmap);
|
||||||
|
painter.setPen(QColor(0xf0, 0xf0, 0xff));
|
||||||
|
painter.setFont(font());
|
||||||
|
tickList = &m_x2Scale.getTickList();
|
||||||
|
|
||||||
|
for(int i = 0; i < tickList->count(); i++) {
|
||||||
|
tick = &(*tickList)[i];
|
||||||
|
if(tick->major) {
|
||||||
|
if(tick->textSize > 0) {
|
||||||
|
painter.drawText(QPointF(tick->textPos, fm.height() - 1), tick->text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_bot2ScaleTextureAllocated)
|
||||||
|
deleteTexture(m_bot2ScaleTexture);
|
||||||
|
m_bot2ScaleTexture = bindTexture(m_bot2ScalePixmap,
|
||||||
|
GL_TEXTURE_2D,
|
||||||
|
GL_RGBA,
|
||||||
|
QGLContext::LinearFilteringBindOption |
|
||||||
|
QGLContext::MipmapBindOption);
|
||||||
|
m_bot2ScaleTextureAllocated = true;
|
||||||
|
} // X2 scale
|
||||||
|
} // Secondary display only
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLScope::tick()
|
void GLScope::tick()
|
||||||
|
@ -248,24 +248,63 @@ void GLScopeGUI::on_dataMode_currentIndexChanged(int index)
|
|||||||
|
|
||||||
void GLScopeGUI::on_horizView_clicked()
|
void GLScopeGUI::on_horizView_clicked()
|
||||||
{
|
{
|
||||||
|
std::cerr << "GLScopeGUI::on_horizView_clicked" << std::endl;
|
||||||
m_displayOrientation = Qt::Horizontal;
|
m_displayOrientation = Qt::Horizontal;
|
||||||
if(ui->horizView->isChecked()) {
|
if(ui->horizView->isChecked()) {
|
||||||
ui->vertView->setChecked(false);
|
ui->vertView->setChecked(false);
|
||||||
|
ui->onlyPrimeView->setChecked(false);
|
||||||
|
ui->onlySecondView->setChecked(false);
|
||||||
m_glScope->setOrientation(Qt::Horizontal);
|
m_glScope->setOrientation(Qt::Horizontal);
|
||||||
|
m_glScope->setDisplays(GLScope::DisplayBoth);
|
||||||
} else {
|
} else {
|
||||||
ui->horizView->setChecked(true);
|
ui->horizView->setChecked(true);
|
||||||
|
m_glScope->setOrientation(Qt::Horizontal);
|
||||||
|
m_glScope->setDisplays(GLScope::DisplayBoth);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLScopeGUI::on_vertView_clicked()
|
void GLScopeGUI::on_vertView_clicked()
|
||||||
{
|
{
|
||||||
|
std::cerr << "GLScopeGUI::on_vertView_clicked" << std::endl;
|
||||||
m_displayOrientation = Qt::Vertical;
|
m_displayOrientation = Qt::Vertical;
|
||||||
if(ui->vertView->isChecked()) {
|
if(ui->vertView->isChecked()) {
|
||||||
ui->horizView->setChecked(false);
|
ui->horizView->setChecked(false);
|
||||||
|
ui->onlyPrimeView->setChecked(false);
|
||||||
|
ui->onlySecondView->setChecked(false);
|
||||||
m_glScope->setOrientation(Qt::Vertical);
|
m_glScope->setOrientation(Qt::Vertical);
|
||||||
|
m_glScope->setDisplays(GLScope::DisplayBoth);
|
||||||
} else {
|
} else {
|
||||||
ui->vertView->setChecked(true);
|
ui->vertView->setChecked(true);
|
||||||
m_glScope->setOrientation(Qt::Vertical);
|
m_glScope->setOrientation(Qt::Vertical);
|
||||||
|
m_glScope->setDisplays(GLScope::DisplayBoth);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GLScopeGUI::on_onlyPrimeView_clicked()
|
||||||
|
{
|
||||||
|
std::cerr << "GLScopeGUI::on_onlyPrimeView_clicked" << std::endl;
|
||||||
|
if(ui->onlyPrimeView->isChecked()) {
|
||||||
|
ui->horizView->setChecked(false);
|
||||||
|
ui->vertView->setChecked(false);
|
||||||
|
ui->onlySecondView->setChecked(false);
|
||||||
|
m_glScope->setDisplays(GLScope::DisplayFirstOnly);
|
||||||
|
} else {
|
||||||
|
ui->onlyPrimeView->setChecked(true);
|
||||||
|
m_glScope->setDisplays(GLScope::DisplayFirstOnly);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GLScopeGUI::on_onlySecondView_clicked()
|
||||||
|
{
|
||||||
|
std::cerr << "GLScopeGUI::on_onlySecondView_clicked" << std::endl;
|
||||||
|
if(ui->onlySecondView->isChecked()) {
|
||||||
|
ui->horizView->setChecked(false);
|
||||||
|
ui->vertView->setChecked(false);
|
||||||
|
ui->onlyPrimeView->setChecked(false);
|
||||||
|
m_glScope->setDisplays(GLScope::DisplaySecondOnly);
|
||||||
|
} else {
|
||||||
|
ui->onlySecondView->setChecked(true);
|
||||||
|
m_glScope->setDisplays(GLScope::DisplaySecondOnly);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,27 +79,27 @@
|
|||||||
</property>
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>I+Q (linear)</string>
|
<string>1:I 2:Q (linear)</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Mag (linear) + Phi</string>
|
<string>1:Mag (linear) 2:Phi</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Mag (dB) + Phi</string>
|
<string>1:Mag (dB) 2: Phi</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Derived 1+2nd </string>
|
<string>1:Derived 1 2:2nd </string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Cyclostationary</string>
|
<string>1,2:Cyclostationary</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
</widget>
|
</widget>
|
||||||
@ -116,10 +116,56 @@
|
|||||||
<property name="spacing">
|
<property name="spacing">
|
||||||
<number>0</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="onlyPrimeView">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Only primary display</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../resources/res.qrc">
|
||||||
|
<normaloff>:/display1.png</normaloff>:/display1.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="iconSize">
|
||||||
|
<size>
|
||||||
|
<width>16</width>
|
||||||
|
<height>16</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="checkable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="onlySecondView">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Only secondary display</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../resources/res.qrc">
|
||||||
|
<normaloff>:/display2.png</normaloff>:/display2.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="iconSize">
|
||||||
|
<size>
|
||||||
|
<width>16</width>
|
||||||
|
<height>16</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="checkable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QToolButton" name="horizView">
|
<widget class="QToolButton" name="horizView">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>Horizontal display arrangement</string>
|
<string>Both displays horizontally arranged</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string/>
|
<string/>
|
||||||
@ -145,7 +191,7 @@
|
|||||||
<item>
|
<item>
|
||||||
<widget class="QToolButton" name="vertView">
|
<widget class="QToolButton" name="vertView">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>Vertical display arrangement</string>
|
<string>Both displays vertically arranged</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string/>
|
<string/>
|
||||||
|
BIN
sdrbase/resources/display1.png
Normal file
BIN
sdrbase/resources/display1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 251 B |
BIN
sdrbase/resources/display2.png
Normal file
BIN
sdrbase/resources/display2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 279 B |
@ -14,5 +14,7 @@
|
|||||||
<file>grid.png</file>
|
<file>grid.png</file>
|
||||||
<file>invertspectrum.png</file>
|
<file>invertspectrum.png</file>
|
||||||
<file>preset-last.png</file>
|
<file>preset-last.png</file>
|
||||||
|
<file>display1.png</file>
|
||||||
|
<file>display2.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
Loading…
Reference in New Issue
Block a user