首次提交

This commit is contained in:
2026-06-16 13:38:08 +08:00
commit ec32ae543d
192 changed files with 13162 additions and 0 deletions
@@ -0,0 +1,328 @@
#include "IntermediateFrequencyWidget.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QVector>
#include <QPainter>
#include <QDebug>
#include "../component/FrequentShower.h"
#include "../component/ProgressBar.h"
#include "../component/ConsoleWidget.h"
#include "../component/ShowTime.h"
#include "../Global.h"
#include "../BaseWidget.h"
#include "../menu/BaseWidgetMenu.h"
#include "../BackEnd/MainWidget.h"
#include "YSGraphic_Core/DemoGallery/Tool.h"
static YSG::Range frequent_range = {-12000, 12000};
static double max = 160;
QWidget* IntermediateFrequencyWidget::createSpectrogramPowerPlot() {
class SpectrumPlot : public YSG::Plot {
public:
YSG::FrequentAxis *xAxis{};
YSG::Axis *yAxis{};
YSG::MutiSelectRect* msr{};
YSG::Spectrum *sp{};
QMenu *mMenu{};
void init() override {
Plot::init();
mObjectName = "SpectrumPlot";
bindRenderThread(mObjectName + "Thread");
xAxis = YSG::FrequentAxis::Builder(this, Qt::Horizontal)
.set_tickLength(-10)
.set_coordRange(frequent_range)
.set_tickLength(-10)
.set_subTickLength(-5)
.build();
yAxis = YSG::Axis::Builder(this, Qt::Vertical)
.set_coordRange({160, 0})
.set_unitText("功率")
.build();
sp = YSG::Spectrum::Builder(xAxis, yAxis)
.set_frequentRange(frequent_range)
.set_useSweepFrequentRect(true)
.set_frequentPointSize(1024)
.build();
msr = YSG::MutiSelectRect::Builder(xAxis, yAxis).build();
}
protected:
void resizeEvent(QResizeEvent* event) override {
xAxis->set_x(0);
xAxis->set_y(height() - 1);
xAxis->set_pixelSize(width());
yAxis->set_x(0);
yAxis->set_y(0);
yAxis->set_pixelSize(height());
}
void contextMenuEvent(QContextMenuEvent* event) override {
if(!mMenu) {
auto ws =
bw(cw(sp, -1), "频谱图") +
bw(cw(xAxis), "频率x轴") +
bw(cw(yAxis), "功率y轴") +
bw(cw(msr), "多选框");
mMenu = createMenu(this, ws);
}
mMenu->exec(event->globalPos());
}
};
auto w = new SpectrumPlot;
w->init();
mSpectrogramLine = w->sp;
mProgressBar1->mSetValue = [this]() {
double middleFrequent = this->mSpectrogramLine->frequentRange().center();
bool ok;
this->mProgressBar1->mValue = mSpectrogramLine->getPower(middleFrequent, ok, YSG::SRC::Cache);
};
return w;
}
QWidget* IntermediateFrequencyWidget::create_Afterglow_Plot(){
class AfterglowPlot : public YSG::Plot {
public:
YSG::FrequentAxis *xAxis{};
YSG::Axis *yAxis{};
YSG::Afterglow *ag{};
YSG::MutiSelectRect* msr{};
QMenu *mMenu{};
void init() override {
Plot::init();
mObjectName = "AfterglowPlot";
bindRenderThread(mObjectName + "Thread");
xAxis = YSG::FrequentAxis::Builder(this, Qt::Horizontal)
.set_coordRange(frequent_range)
.set_tickLength(-10)
.set_subTickLength(-5)
.set_use_drag(true)
.build();
yAxis = YSG::Axis::Builder(this, Qt::Vertical)
.set_coordRange({160, 0})
.set_use_drag(true)
.build();
ag = YSG::Afterglow::Builder(xAxis, yAxis)
.set_frequentRange(frequent_range)
.set_powerRange({0 , 160})
.set_frequentPointSize(1024)
.build();
msr = YSG::MutiSelectRect::Builder(xAxis, yAxis).build();
}
protected:
void resizeEvent(QResizeEvent* event) override {
xAxis->set_x(0);
xAxis->set_y(height() - 1);
xAxis->set_pixelSize(width());
yAxis->set_x(0);
yAxis->set_y(0);
yAxis->set_pixelSize(height());
ag->set_powerPointSize(ag->powerAxis()->getPixelPointSize());
}
void contextMenuEvent(QContextMenuEvent* event) override {
if(!mMenu) {
auto ws =
bw(cw(ag, -1), "余辉图") +
bw(cw(xAxis), "频率轴") +
bw(cw(yAxis),"功率概率轴") +
bw(cw(msr), "多选框");
mMenu = createMenu(this, ws);
}
mMenu->exec(event->globalPos());
}
};
auto w = new AfterglowPlot;
w->init();
mAfterglow = w->ag;
return w;
}
//mAM, mATU, mVSQL, mNB, mNR, mDNF, mPRE, mATT, mSPL, mFIL1, mAGC_A
IntermediateFrequencyWidget::IntermediateFrequencyWidget(QWidget *parent) : BaseWidget(parent) {
setObjectName("发射界面");
int fontSize = 20;
m1 = createNormal("RF Gain\n62", fontSize);
m2 = createNormal("FFT SPAN\n100K", fontSize);
m3 = createNormal("频率表\n1289.6MHZ", fontSize);
m4 = createNormal("MODEM\nRTTY", fontSize);
m5 = createNormal("FIL1\n20K", fontSize);
m6 = createNormal("MSG1\n", fontSize);
mFrequentShower = new FrequentShower(this);
QColor orange(255, 165, 0);
mProgressBar1 = new ProgressBar({
Tick("S", Qt::black),
{"3", Qt::black},
{"6", Qt::black},
{"9", Qt::black},
{"20", Qt::black},
{"+40", orange},
{"+60", orange},
{"+80", orange},
{"+100", Qt::red},
}, this);
mProgressBar2 = new ProgressBar({
{"1", Qt::black},
{"2", Qt::yellow},
{"3", Qt::red},
{">5", Qt::red},
}, this);
auto main = createVBoxLayout({}, this);
main->addStretch(1);
{
auto center = createHBoxLayout();
main->addLayout(center, 7);
auto front = createVBoxLayout();
center->addLayout(front, 1);
front->addWidget(m1, 3);
front->addStretch(1);
front->addWidget(m2, 3);
center->addSpacing(4);
auto middle = createVBoxLayout();
center->addLayout(middle, 9);
middle->addStretch(1);
middle->addWidget(mFrequentShower, 4);
auto middleH = createHBoxLayout();
middle->addLayout(middleH, 2);
middleH->addWidget(mProgressBar1, 5);
middleH->addStretch(1);
middleH->addWidget(mProgressBar2, 3);
center->addStretch(4);
auto back1 = createVBoxLayout();
center->addLayout(back1, 1);
back1->addWidget(m3, 3);
back1->addStretch(1);
back1->addWidget(m4, 3);
center->addSpacing(4);
auto back2 = createVBoxLayout();
center->addLayout(back2, 1);
back2->addWidget(m5, 3);
back2->addStretch(1);
back2->addWidget(m6, 3);
}
main->addStretch(1);
main->addSpacing(8);
auto aH = createHBoxLayout();
main->addLayout(aH, 12);
aH->addWidget(createSpectrogramPowerPlot(), 12);
aH->addSpacing(8);
main->addWidget(create_Afterglow_Plot(), 12);
initMenu();
}
IntermediateFrequencyWidget::~IntermediateFrequencyWidget() {
}
void IntermediateFrequencyWidget::focusInEvent(QFocusEvent *event) {
QWidget::focusInEvent(event);
mFrequentShower->setFocus();
}
void IntermediateFrequencyWidget::initMenu() {
int fontSize = 30;
auto btn1 = new DoubleTextMenuButton("设置最大值标记", "取消最大值标记", fontSize, [&](bool isFirst){
mSpectrogramLine->set_useMaxMarker(isFirst);
mBaseWidgetMenu->hide();
MainWidget::instance()->getCurrentBaseWidget()->setFocus();
});
auto btn2 = new DoubleTextMenuButton("设置最小值标记", "取消最小值标记", fontSize, [&](bool isFirst){
mSpectrogramLine->set_useMinMarker(isFirst);
mBaseWidgetMenu->hide();
MainWidget::instance()->getCurrentBaseWidget()->setFocus();
});
auto btn3 = new MenuButton("设置自定义标记", fontSize, [&](){
mBaseWidgetMenu->hide();
MainWidget::instance()->getCurrentBaseWidget()->setFocus();
});
auto frequentStep2 = new ValueMenuButton("频率步进:%1", fontSize, [this](ValueMenuButton* that, bool add){
int newFrequent = (int)that->mValue + (add?1:-1);
that->setValue(newFrequent);
mSpectrogramLine->setCurrentMarkerFrequent(newFrequent);
}, qMax(0.0, mSpectrogramLine->frequentRange().length()/50.0));
auto btn_middleFrequent = new ValueMenuButton("中频:%1 Hz", fontSize, nullptr, mSpectrogramLine->middleSweepFrequent());
auto btn_frequentWidth = new ValueMenuButton("频宽:%1 Hz", fontSize, [this, frequentStep2](ValueMenuButton* that, bool add){
that->setValue(that->mValue + (double)(add?frequentStep2->mValue:-frequentStep2->mValue));
double middleSweepFrequent = mSpectrogramLine->middleSweepFrequent();
mSpectrogramLine->set_sweepFrequentRange({middleSweepFrequent - that->mValue, middleSweepFrequent + that->mValue});
}, qAbs(mSpectrogramLine->sweepFrequentRange().length()/2));
btn_middleFrequent->mValueChanged = [this, btn_frequentWidth, frequentStep2](ValueMenuButton* that, bool add){
that->setValue(that->mValue + (double)(add?frequentStep2->mValue:-frequentStep2->mValue));
mSpectrogramLine->set_middleSweepFrequent(that->mValue);
mSpectrogramLine->set_sweepFrequentRange({that->mValue - btn_frequentWidth->mValue, that->mValue + btn_frequentWidth->mValue});
};
auto btn2_2 = new ValueMenuButton("参考增益:%1", fontSize, [&](ValueMenuButton* that, bool add){
that->setValue(that->mValue + (double)(add ? 1 : -1));
}, 0);
mBaseWidgetMenu->addMenuButtonOnLayout1({btn1, btn2, btn3, btn2_2, });
mBaseWidgetMenu->addMenuButtonOnLayout2({frequentStep2, btn_middleFrequent, btn_frequentWidth,});
BaseWidgetMenu* sub1 = mBaseWidgetMenu->createSubWidgetMenu(btn3);
auto frequentStep = new ValueMenuButton("频率步进:%1", fontSize, [this](ValueMenuButton* that, bool add){
int newFrequent = (int)that->mValue + (add?1:-1);
that->setValue(newFrequent);
mSpectrogramLine->setCurrentMarkerFrequent(newFrequent);
}, qMax(0.0, mSpectrogramLine->frequentRange().length()/50.0));
auto markFrequent = new ValueMenuButton("更改标记频率:%1", fontSize, [frequentStep, this](ValueMenuButton* that, bool add){
int newFrequent = (int)that->mValue + (add?frequentStep->mValue:-frequentStep->mValue);
that->setValue(newFrequent);
mSpectrogramLine->setCurrentMarkerFrequent(newFrequent);
}, -1);
auto addInitFrequent = new ValueMenuButton("添加初始频率:%1", fontSize, [frequentStep,this](ValueMenuButton* that, bool add){
int newFrequent = (int)that->mValue + (add?frequentStep->mValue:-frequentStep->mValue);
that->setValue(newFrequent);
}, mSpectrogramLine->frequentRange().lower);
auto btn1_1 = new ValueMenuButton("当前标记:%1", fontSize, [&, markFrequent](ValueMenuButton* that, bool add){
int index = ((int)that->mValue + (add?1:-1) ) % mSpectrogramLine->selectLineMarkerSize();
that->setValue(index);
mSpectrogramLine->setSelectedLineMarker(index);
markFrequent->setValue(mSpectrogramLine->getMarkFrequent(index));
}, -1);
auto btn1_2 = new MenuButton("添加标记", fontSize, [&, addInitFrequent](){
mSpectrogramLine->addCustomLineMarker(addInitFrequent->mValue);
});
auto btn1_3 = new MenuButton("删除标记", fontSize, [&](){
mSpectrogramLine->removeCurrentMarker();
int size = mSpectrogramLine->selectLineMarkerSize();
if(size == 0){
mSpectrogramLine->setSelectedLineMarker(-1);
} else {
mSpectrogramLine->setSelectedLineMarker(0);
}
});
connect(sub1, &BaseWidgetMenu::showThat, [&, markFrequent](){
mSpectrogramLine->setSelectedLineMarker(0);
markFrequent->setValue(mSpectrogramLine->getMarkFrequent(0));
});
connect(sub1, &BaseWidgetMenu::hideThat, [&](){
mSpectrogramLine->unSelectMarker();
});
sub1->addMenuButtonOnLayout1({btn1_1, btn1_2, btn1_3},2);
sub1->addMenuButtonOnLayout2({frequentStep, markFrequent, addInitFrequent}, 2);
}