From c9da580c984ae46c8581cd6fae1bdc456a1b550f Mon Sep 17 00:00:00 2001 From: Denis Dovzhenko Date: Fri, 22 Dec 2017 00:19:18 +0300 Subject: [PATCH] Fix settings loader, change LevelSlider needle shape --- openhantek/src/dsowidget.cpp | 1 + openhantek/src/hantek/hantekdsocontrol.cpp | 1 - openhantek/src/main.cpp | 3 +-- openhantek/src/settings.cpp | 5 ++++- openhantek/src/settings.h | 2 +- openhantek/src/widgets/levelslider.cpp | 59 ++++++++++++++++++++++++++++++----------------------------- 6 files changed, 37 insertions(+), 34 deletions(-) diff --git a/openhantek/src/dsowidget.cpp b/openhantek/src/dsowidget.cpp index 4befb78..faedcdb 100644 --- a/openhantek/src/dsowidget.cpp +++ b/openhantek/src/dsowidget.cpp @@ -217,6 +217,7 @@ DsoWidget::DsoWidget(DsoSettings *settings, QWidget *parent, Qt::WindowFlags fla mainScope->update(); zoomScope->update(); }); + updateTriggerSource(); } void DsoWidget::showNewData(std::unique_ptr data) { diff --git a/openhantek/src/hantek/hantekdsocontrol.cpp b/openhantek/src/hantek/hantekdsocontrol.cpp index 66ad3c7..45218a7 100644 --- a/openhantek/src/hantek/hantekdsocontrol.cpp +++ b/openhantek/src/hantek/hantekdsocontrol.cpp @@ -220,7 +220,6 @@ HantekDsoControl::HantekDsoControl(USBDevice *device) : device(device) { break; case MODEL_DSO5200A: - [[clang::fallthrough]]; case MODEL_DSO5200: // Instantiate additional commands for the DSO-5200 command[BULK_CSETTRIGGERORSAMPLERATE] = new BulkSetSamplerate5200(); diff --git a/openhantek/src/main.cpp b/openhantek/src/main.cpp index 51dc880..c5d8ff3 100644 --- a/openhantek/src/main.cpp +++ b/openhantek/src/main.cpp @@ -162,8 +162,7 @@ int main(int argc, char *argv[]) { QObject::connect(&dsoControl, &HantekDsoControl::samplesAvailable, &dataAnalyser, &DataAnalyzer::samplesAvailable); //////// Create settings object //////// - DsoSettings settings; - settings.setChannelCount(dsoControl.getChannelCount()); + DsoSettings settings(dsoControl.getChannelCount()); dataAnalyser.applySettings(&settings.scope); //////// Create main window //////// diff --git a/openhantek/src/settings.cpp b/openhantek/src/settings.cpp index b360c51..e50bb05 100644 --- a/openhantek/src/settings.cpp +++ b/openhantek/src/settings.cpp @@ -33,7 +33,10 @@ /// \brief Set the number of channels. /// \param channels The new channel count, that will be applied to lists. -DsoSettings::DsoSettings() { load(); } +DsoSettings::DsoSettings(unsigned int channels) { + setChannelCount(channels); + load(); +} bool DsoSettings::setFilename(const QString &filename) { std::unique_ptr local = std::unique_ptr(new QSettings(filename, QSettings::IniFormat)); diff --git a/openhantek/src/settings.h b/openhantek/src/settings.h index c529c36..2bd03f2 100644 --- a/openhantek/src/settings.h +++ b/openhantek/src/settings.h @@ -23,7 +23,7 @@ struct DsoSettingsOptions { /// \brief Holds the settings of the program. class DsoSettings { public: - DsoSettings(); + explicit DsoSettings(unsigned int channels); bool setFilename(const QString &filename); void setChannelCount(unsigned int channels); diff --git a/openhantek/src/widgets/levelslider.cpp b/openhantek/src/widgets/levelslider.cpp index fc1ff98..4083d6f 100644 --- a/openhantek/src/widgets/levelslider.cpp +++ b/openhantek/src/widgets/levelslider.cpp @@ -40,7 +40,7 @@ LevelSlider::LevelSlider(Qt::ArrowType direction, QWidget *parent) : QWidget(par this->setFont(font); this->pressedSlider = -1; - this->sliderWidth = 8; + this->sliderWidth = 12; this->setDirection(direction); } @@ -381,44 +381,45 @@ void LevelSlider::paintEvent(QPaintEvent *event) { painter.setPen((*slider)->color); if ((*slider)->text.isEmpty()) { - int needlePoints[6]; + QVector needlePoints; + QRect& sRect = (*slider)->rect; + const int W = this->sliderWidth; switch (this->_direction) { case Qt::LeftArrow: - needlePoints[0] = (*slider)->rect.left() + 4; - needlePoints[1] = (*slider)->rect.top(); - needlePoints[2] = (*slider)->rect.left() + 1; - needlePoints[3] = (*slider)->rect.top() + 3; - needlePoints[4] = (*slider)->rect.left() + 4; - needlePoints[5] = (*slider)->rect.top() + 6; + needlePoints << QPoint(sRect.left() + 4, sRect.top() ) + << QPoint(sRect.left() + 1, sRect.top() + 3) + << QPoint(sRect.left() + 4, sRect.top() + 6) + << QPoint(sRect.left() + W, sRect.top() + 6) + << QPoint(sRect.left() + W, sRect.top() ); break; case Qt::UpArrow: - needlePoints[0] = (*slider)->rect.left(); - needlePoints[1] = (*slider)->rect.top() + 4; - needlePoints[2] = (*slider)->rect.left() + 3; - needlePoints[3] = (*slider)->rect.top() + 1; - needlePoints[4] = (*slider)->rect.left() + 6; - needlePoints[5] = (*slider)->rect.top() + 4; + needlePoints << QPoint(sRect.left(), sRect.top() + 4) + << QPoint(sRect.left() + 3, sRect.top() + 1) + << QPoint(sRect.left() + 6, sRect.top() + 4) + << QPoint(sRect.left() + 6, sRect.top() + W) + << QPoint(sRect.left(), sRect.top() + W); break; case Qt::DownArrow: - needlePoints[0] = (*slider)->rect.left(); - needlePoints[1] = (*slider)->rect.top() + this->sliderWidth - 5; - needlePoints[2] = (*slider)->rect.left() + 3; - needlePoints[3] = (*slider)->rect.top() + this->sliderWidth - 2; - needlePoints[4] = (*slider)->rect.left() + 6; - needlePoints[5] = (*slider)->rect.top() + this->sliderWidth - 5; + needlePoints << QPoint(sRect.left(), sRect.top() + W - 5) + << QPoint(sRect.left() + 3, sRect.top() + W - 2) + << QPoint(sRect.left() + 6, sRect.top() + W - 5) + << QPoint(sRect.left() + 6, sRect.top() ) + << QPoint(sRect.left(), sRect.top() ); + break; + case Qt::RightArrow: + needlePoints << QPoint(sRect.left() + W - 5, sRect.top() ) + << QPoint(sRect.left() + W - 2, sRect.top() + 3) + << QPoint(sRect.left() + W - 5, sRect.top() + 6) + << QPoint(sRect.left(), sRect.top() + 6) + << QPoint(sRect.left(), sRect.top() ); break; default: - needlePoints[0] = (*slider)->rect.left() + this->sliderWidth - 5; - needlePoints[1] = (*slider)->rect.top(); - needlePoints[2] = (*slider)->rect.left() + this->sliderWidth - 2; - needlePoints[3] = (*slider)->rect.top() + 3; - needlePoints[4] = (*slider)->rect.left() + this->sliderWidth - 5; - needlePoints[5] = (*slider)->rect.top() + 6; + break; } painter.setBrush(QBrush((*slider)->color, Qt::SolidPattern)); - painter.drawPolygon(QPolygon(3, needlePoints)); + painter.drawPolygon(QPolygon(needlePoints)); painter.setBrush(Qt::NoBrush); } else { // Get rect for text and draw needle @@ -539,8 +540,8 @@ QRect LevelSlider::calculateRect(int sliderId) { /// \brief Search for the widest slider element. /// \return The calculated width of the slider. int LevelSlider::calculateWidth() { - // At least 8 px for the needles - this->sliderWidth = 8; + // At least 12 px for the needles + this->sliderWidth = 12; // Is it a vertical slider? if (this->_direction == Qt::RightArrow || this->_direction == Qt::LeftArrow) { -- libgit2 0.21.4