swift
scalescreenfactor.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2018 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
4 #include "scalescreenfactor.h"
5 
6 #include <QIntValidator>
7 #include <QScreen>
8 
9 #include "ui_scalescreenfactor.h"
10 
11 #include "gui/guiutility.h"
12 
13 namespace swift::gui::components
14 {
15  CScaleScreenFactor::CScaleScreenFactor(QWidget *parent) : QFrame(parent), ui(new Ui::CScaleScreenFactor)
16  {
17  ui->setupUi(this);
18  this->setMinMax(50, 150);
19 
20  connect(ui->hs_Factor, &QSlider::valueChanged, this, &CScaleScreenFactor::onSliderChanged);
21  connect(ui->le_Factor, &QLineEdit::editingFinished, this, &CScaleScreenFactor::onEditFinished);
22 
23  const QString tt = QStringLiteral("Scaling only works on High DPI screens");
24  this->setToolTip(tt);
25  }
26 
28 
29  void CScaleScreenFactor::setMinMax(int min, int max)
30  {
31  ui->hs_Factor->setMinimum(min);
32  ui->hs_Factor->setMaximum(max);
33  ui->le_Factor->setValidator(new QIntValidator(min, max, ui->le_Factor));
34 
35  const QString tt = QStringLiteral("%1-%2").arg(min).arg(max);
36  ui->le_Factor->setToolTip(tt);
37  ui->le_Factor->setPlaceholderText(tt);
38  ui->hs_Factor->setToolTip(tt);
39 
40  const int v = (min + max) / 2;
41  ui->hs_Factor->setValue(v);
42  ui->le_Factor->setText(QString::number(v));
43  }
44 
45  qreal CScaleScreenFactor::getScaleFactor() const { return 0.01 * ui->hs_Factor->value(); }
46 
48  {
49  const QString sf = QString::number(this->getScaleFactor(), 'f', 2);
50  return sf;
51  }
52 
53  void CScaleScreenFactor::onSliderChanged(int value)
54  {
55  const QString v = QString::number(value);
56  if (ui->le_Factor->text() == v) { return; } // avoid signal roundtrips
57  ui->le_Factor->setText(v);
58  }
59 
60  void CScaleScreenFactor::onEditFinished()
61  {
62  const QString v = ui->le_Factor->text();
63  if (v.isEmpty()) { return; }
64  bool ok;
65  const int value = v.toInt(&ok);
66  if (!ok) { return; }
67  if (ui->hs_Factor->value() == value) { return; } // avoid signal roundtrips
68  ui->hs_Factor->setValue(value);
69  }
70 } // namespace swift::gui::components
QString getScaleFactorAsString() const
Scale factor as string.
CScaleScreenFactor(QWidget *parent=nullptr)
Constructor.
void setMinMax(int min, int max)
Minimum/maximum values.
High level reusable GUI components.
Definition: aboutdialog.cpp:13