Skip to content

Commit effe8bf

Browse files
committed
Merge branch 'bugfix-415' into testing_0.38
2 parents 4dc8c37 + 9a5a80c commit effe8bf

File tree

2 files changed

+63
-56
lines changed

2 files changed

+63
-56
lines changed

ui/BandmapWidget.cpp

+57-54
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ MODULE_IDENTIFICATION("qlog.ui.bandmapwidget");
2727
//Pixel between each step in BandMap
2828
#define PIXELSPERSTEP 10
2929

30+
#define WIDGET_CENTER ( height()/2 - 50 )
31+
3032
BandmapWidget::BandmapWidget(QWidget *parent) :
3133
QWidget(parent),
3234
ui(new Ui::BandmapWidget),
@@ -39,19 +41,16 @@ BandmapWidget::BandmapWidget(QWidget *parent) :
3941
{
4042
FCT_IDENTIFICATION;
4143

42-
QSettings settings;
43-
4444
ui->setupUi(this);
4545

46-
double freq = settings.value("newcontact/frequency", 3.5).toDouble();
46+
double newContactFreq = settings.value("newcontact/frequency", 3.5).toDouble();
47+
double ritFreq = newContactFreq + RigProfilesManager::instance()->getCurProfile1().ritOffset;
48+
double xitFreq = newContactFreq + RigProfilesManager::instance()->getCurProfile1().xitOffset;
4749
const QString &mode = settings.value("newcontact/mode", "CW").toString();
4850
const QString &submode = settings.value("newcontact/submode").toString();
49-
50-
freq += RigProfilesManager::instance()->getCurProfile1().ritOffset;
51-
5251
keepRXCenter = settings.value("bandmap/centerrx", true).toBool();
5352

54-
setBand(BandPlan::freq2Band(freq), false);
53+
setBand(BandPlan::freq2Band(ritFreq), false);
5554

5655
bandmapScene = new GraphicsScene(this);
5756
bandmapScene->setFocusOnTouch(false);
@@ -72,7 +71,7 @@ BandmapWidget::BandmapWidget(QWidget *parent) :
7271
update_timer->start(BANDMAP_MAX_REFRESH_TIME);
7372

7473
updateMode(VFO1, QString(), mode, submode, 0);
75-
updateTunedFrequency(VFO1, freq, freq, freq);
74+
updateTunedFrequency(VFO1, newContactFreq, ritFreq, xitFreq);
7675
}
7776

7877
void BandmapWidget::update()
@@ -206,7 +205,7 @@ void BandmapWidget::updateStations()
206205
QMap<double, DxSpot>::iterator lower = spots.lowerBound(currentBand.start);
207206
QMap<double, DxSpot>::iterator upper = spots.upperBound(currentBand.end);
208207

209-
for (; lower != upper; lower++)
208+
while ( lower != upper )
210209
{
211210
double freq_y = ((lower.key() - currentBand.start) / step) * PIXELSPERSTEP;
212211
double text_y = std::max(min_y + 5, freq_y);
@@ -244,6 +243,7 @@ void BandmapWidget::updateStations()
244243

245244
text->setDefaultTextColor(Data::statusToColor(lower.value().status, qApp->palette().color(QPalette::Text)));
246245
textItemList.append(text);
246+
++lower;
247247
}
248248

249249
pendingSpots = 0;
@@ -367,8 +367,6 @@ void BandmapWidget::drawTXRXMarks(double step)
367367
/**************************/
368368
drawFreqMark(rx_freq, step, QColor(30, 180, 30), &rxMark);
369369

370-
centerRXFreqPosition();
371-
372370
/**************************/
373371
/* Draw TX frequency mark */
374372
/**************************/
@@ -517,35 +515,56 @@ void BandmapWidget::setBand(const Band &newBand, bool savePrevBandZoom)
517515
if ( savePrevBandZoom )
518516
{
519517
saveCurrentZoom();
518+
saveCurrentScrollFreq();
520519
}
521520
currentBand = newBand;
522-
zoom = savedZoom(newBand);
521+
zoom = getSavedZoom(newBand);
522+
zoomFreq = getSavedScrollFreq(newBand);
523+
zoomWidgetYOffset = WIDGET_CENTER;
523524
}
524525

525526
void BandmapWidget::saveCurrentZoom()
526527
{
527528
FCT_IDENTIFICATION;
528529

529-
QSettings settings;
530-
531530
settings.setValue("bandmap/zoom/" + currentBand.name, zoom);
532531
}
533532

534-
BandmapWidget::BandmapZoom BandmapWidget::savedZoom(Band band)
533+
BandmapWidget::BandmapZoom BandmapWidget::getSavedZoom(Band band)
535534
{
536535
FCT_IDENTIFICATION;
537536

538-
QSettings settings;
539-
540537
QVariant zoomVariant = settings.value("bandmap/zoom/" + band.name, ZOOM_10KHZ);
541538
return zoomVariant.value<BandmapWidget::BandmapZoom>();
542539
}
543540

544-
void BandmapWidget::spotAgingChanged(int)
541+
void BandmapWidget::saveCurrentScrollFreq()
545542
{
546543
FCT_IDENTIFICATION;
547544

548-
QSettings settings;
545+
settings.setValue("bandmap/scroll/" + currentBand.name, visibleCentreFreq());
546+
}
547+
548+
double BandmapWidget::getSavedScrollFreq(Band band)
549+
{
550+
FCT_IDENTIFICATION;
551+
552+
return settings.value("bandmap/scroll/" + band.name, 0.0).toDouble();
553+
}
554+
555+
double BandmapWidget::visibleCentreFreq() const
556+
{
557+
FCT_IDENTIFICATION;
558+
559+
QPoint point(0,ui->scrollArea->verticalScrollBar()->value() + WIDGET_CENTER);
560+
double ret = ScenePos2Freq(ui->graphicsView->mapToScene(point));
561+
qCDebug(runtime) << "Centre freq" << ret;
562+
return ret;
563+
}
564+
565+
void BandmapWidget::spotAgingChanged(int)
566+
{
567+
FCT_IDENTIFICATION;
549568

550569
settings.setValue("bandmap/spot_aging", ui->clearSpotOlderSpin->value());
551570
}
@@ -565,16 +584,9 @@ void BandmapWidget::zoomIn()
565584

566585
if ( zoomFreq == 0.0 )
567586
{
568-
if ( keepRXCenter )
569-
{
570-
zoomFreq = rx_freq;
571-
}
572-
else
573-
{
574-
QPoint point(0,ui->scrollArea->verticalScrollBar()->value() + this->height()/2 - 50);
575-
zoomFreq = ScenePos2Freq(ui->graphicsView->mapToScene(point));
576-
}
577-
zoomWidgetYOffset = this->height()/2 - 50;
587+
zoomWidgetYOffset = WIDGET_CENTER;
588+
zoomFreq = ( keepRXCenter ) ? rx_freq
589+
: visibleCentreFreq();
578590
}
579591

580592
if ( zoom > ZOOM_100HZ )
@@ -583,6 +595,7 @@ void BandmapWidget::zoomIn()
583595
}
584596
setBandmapAnimation(false);
585597
update();
598+
scrollToFreq(zoomFreq);
586599
setBandmapAnimation(true);
587600
}
588601

@@ -592,16 +605,9 @@ void BandmapWidget::zoomOut()
592605

593606
if ( zoomFreq == 0.0 )
594607
{
595-
if ( keepRXCenter )
596-
{
597-
zoomFreq = rx_freq;
598-
}
599-
else
600-
{
601-
QPoint point(0,ui->scrollArea->verticalScrollBar()->value() + this->height()/2 - 50);
602-
zoomFreq = ScenePos2Freq(ui->graphicsView->mapToScene(point));
603-
}
604-
zoomWidgetYOffset = this->height()/2 - 50;
608+
zoomWidgetYOffset = WIDGET_CENTER;
609+
zoomFreq = ( keepRXCenter ) ? rx_freq
610+
: visibleCentreFreq();
605611
}
606612

607613
if ( zoom < ZOOM_10KHZ )
@@ -610,6 +616,7 @@ void BandmapWidget::zoomOut()
610616
}
611617
setBandmapAnimation(false);
612618
update();
619+
scrollToFreq(zoomFreq);
613620
setBandmapAnimation(true);
614621
}
615622

@@ -699,7 +706,7 @@ void BandmapWidget::showContextMenu(const QPoint &point)
699706
connect(action, &QAction::triggered, this, [this, enabledBand]()
700707
{
701708
setBand(enabledBand);
702-
this->update();
709+
update();
703710
});
704711
bandsMenu.addAction(action);
705712
}
@@ -715,12 +722,10 @@ void BandmapWidget::showContextMenu(const QPoint &point)
715722
contextMenu.exec(ui->graphicsView->mapToGlobal(point));
716723
}
717724

718-
void BandmapWidget::updateTunedFrequency(VFOID vfoid, double vfoFreq, double ritFreq, double xitFreq)
725+
void BandmapWidget::updateTunedFrequency(VFOID, double vfoFreq, double ritFreq, double xitFreq)
719726
{
720727
FCT_IDENTIFICATION;
721728

722-
Q_UNUSED(vfoid)
723-
724729
qCDebug(function_parameters) << vfoFreq << ritFreq << xitFreq;
725730

726731
/* always show the bandmap for RIT Freq */
@@ -752,6 +757,7 @@ void BandmapWidget::updateTunedFrequency(VFOID vfoid, double vfoFreq, double rit
752757
/* Draw TX and RX Marks */
753758
/************************/
754759
drawTXRXMarks(step);
760+
scrollToFreq(rx_freq);
755761
}
756762

757763
updateNearestSpot();
@@ -794,7 +800,7 @@ void BandmapWidget::resizeEvent(QResizeEvent *event)
794800

795801
QWidget::resizeEvent(event);
796802

797-
centerRXFreqPosition();
803+
scrollToFreq(rx_freq);
798804
}
799805

800806
bool BandmapWidget::eventFilter(QObject *, QEvent *event)
@@ -846,27 +852,25 @@ bool BandmapWidget::eventFilter(QObject *, QEvent *event)
846852
return false;
847853
}
848854

849-
void BandmapWidget::centerRXFreqPosition()
855+
void BandmapWidget::scrollToFreq(double freq)
850856
{
851857
FCT_IDENTIFICATION;
852858

853-
qreal freqScenePos = Freq2ScenePos(rx_freq).y();
859+
qreal freqScenePos = Freq2ScenePos(freq).y();
854860

855861
QPropertyAnimation *anim = new QPropertyAnimation(ui->scrollArea->verticalScrollBar(), "value", this);
856862
anim->setDuration((bandmapAnimation) ? 300 : 0);
857863
anim->setStartValue(ui->scrollArea->verticalScrollBar()->value());
858864

859865
if ( keepRXCenter )
860866
{
861-
862867
/* If RX freq should be center then center it */
863-
anim->setEndValue(freqScenePos - (this->height()/2) + 50);
864-
//ui->scrollArea->verticalScrollBar()->setValue(freqScenePos - (this->height()/2) + 50);
868+
anim->setEndValue(freqScenePos - (WIDGET_CENTER));
865869
}
866870
else
867871
{
868872
/* If RX freq is out-of-scene then keep the RX mark visible - this is not centering !!! */
869-
int sceneSize = this->height() - 60;
873+
int sceneSize = height() - 60;
870874
int sliderSceneMin = ui->scrollArea->verticalScrollBar()->value();
871875
int sliderSceneMax = ui->scrollArea->verticalScrollBar()->value() + sceneSize;
872876

@@ -941,13 +945,12 @@ void BandmapWidget::centerRXActionChecked(bool state)
941945
{
942946
FCT_IDENTIFICATION;
943947

944-
QSettings settings;
945-
946948
keepRXCenter = state;
949+
zoomFreq = 0.0;
947950
settings.setValue("bandmap/centerrx", keepRXCenter);
948951

949-
zoomFreq = 0.0;
950-
centerRXFreqPosition();
952+
if ( keepRXCenter )
953+
scrollToFreq(rx_freq);
951954
}
952955

953956
void GraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *evt)

ui/BandmapWidget.h

+6-2
Original file line numberDiff line numberDiff line change
@@ -81,15 +81,18 @@ public slots:
8181
void drawTXRXMarks(double);
8282
void resizeEvent(QResizeEvent * event) override;
8383
bool eventFilter(QObject *obj, QEvent *event) override;
84-
void centerRXFreqPosition();
84+
void scrollToFreq(double freq);
8585
QPointF Freq2ScenePos(const double) const;
8686
double ScenePos2Freq(const QPointF &point) const;
8787
DxSpot nearestSpot(const double) const;
8888
void updateNearestSpot();
8989
void setBandmapAnimation(bool);
9090
void setBand(const Band &newBand, bool savePrevBandZoom = true);
9191
void saveCurrentZoom();
92-
BandmapWidget::BandmapZoom savedZoom(Band);
92+
BandmapWidget::BandmapZoom getSavedZoom(Band);
93+
void saveCurrentScrollFreq();
94+
double getSavedScrollFreq(Band);
95+
double visibleCentreFreq() const;
9396

9497
private slots:
9598
void centerRXActionChecked(bool);
@@ -120,6 +123,7 @@ private slots:
120123
int zoomWidgetYOffset;
121124
bool bandmapAnimation;
122125
QString currBandMode;
126+
QSettings settings;
123127

124128
struct LastTuneDx
125129
{

0 commit comments

Comments
 (0)