diff --git a/src/widgets/bedextruderwidget.cpp b/src/widgets/bedextruderwidget.cpp
index 098027a..5167dd0 100644
--- a/src/widgets/bedextruderwidget.cpp
+++ b/src/widgets/bedextruderwidget.cpp
@@ -1,119 +1,119 @@
/* Atelier KDE Printer Host for 3D Printing
Copyright (C) <2016>
Author: Lays Rodrigues - laysrodriguessilva@gmail.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
#include "bedextruderwidget.h"
#include
#include
#include "thermowidget.h"
BedExtruderWidget::BedExtruderWidget(QWidget *parent) :
QWidget(parent),
- m_bedThermo(new ThermoWidget(this)),
- m_extruderThermo(new ThermoWidget(this)),
+ m_bedThermo(new ThermoWidget(this, QString(i18n("Bed")))),
+ m_extruderThermo(new ThermoWidget(this, QString(i18n("HotEnd")))),
m_extruderBox(new QWidget(this)),
m_extrudersLayout(new QHBoxLayout)
{
m_bedThermo->setScale(0, 150);
m_extruderThermo->setScale(0, 250);
m_extruderBox->setLayout(m_extrudersLayout);
auto *layout = new QGridLayout;
auto *label = new QLabel(i18n("Active Extruder:"));
m_extrudersLayout->addWidget(label);
layout->addWidget(m_extruderBox, 0, 0, 1, -1);
layout->addWidget(m_bedThermo, 1, 0);
layout->addWidget(m_extruderThermo, 1, 1);
setLayout(layout);
//Add Default Extruder
setExtruderCount(1);
connect(m_bedThermo, &ThermoWidget::targetTemperatureChanged, [this](double v) {
qDebug() << "Receiving the temperature change for bed";
emit bedTemperatureChanged((int)v, false);
});
connect(m_extruderThermo, &ThermoWidget::targetTemperatureChanged, [this](double v) {
qDebug() << "Receiving the temperature changed for thermo";
emit extTemperatureChanged((int)v, currentExtruder(), false);
});
}
BedExtruderWidget::~BedExtruderWidget()
{
}
void BedExtruderWidget::setExtruderCount(int value)
{
value > 1 ? m_extruderBox->setVisible(true) : m_extruderBox->setVisible(false);
if (value == m_extruderCount) {
return;
} else if (m_extruderCount < value) {
//loop for the new buttons
for (int i = m_extruderCount; i < value; i++) {
auto *rb = new QRadioButton(QString::number(i + 1));
m_extrudersLayout->addWidget(rb);
extruderMap.insert(i, rb);
}
} else {
//remove buttons - need to test it!
for (int i = m_extruderCount; i >= value; i--) {
auto *rb = extruderMap.value(i);
m_extrudersLayout->removeWidget(rb);
extruderMap.remove(i);
delete (rb);
}
}
m_extruderCount = value;
}
void BedExtruderWidget::updateBedTemp(const float temp)
{
m_bedThermo->setCurrentTemperature(temp);
}
void BedExtruderWidget::updateExtTemp(const float temp)
{
m_extruderThermo->setCurrentTemperature(temp);
}
void BedExtruderWidget::updateBedTargetTemp(const float temp)
{
m_bedThermo->setTargetTemperature(temp);
}
void BedExtruderWidget::updateExtTargetTemp(const float temp)
{
m_extruderThermo->setTargetTemperature(temp);
}
int BedExtruderWidget::currentExtruder()
{
int currExt = 0;
for (int i = 0; i < extruderMap.size(); i++) {
if (extruderMap.value(i)->isChecked()) {
currExt = i;
break;
}
}
return currExt;
}
diff --git a/src/widgets/thermowidget.cpp b/src/widgets/thermowidget.cpp
index 657c469..54ac4c1 100644
--- a/src/widgets/thermowidget.cpp
+++ b/src/widgets/thermowidget.cpp
@@ -1,180 +1,188 @@
#include "thermowidget.h"
#include
#include
#include
#include
#include
#include
#include
-ThermoWidget::ThermoWidget(QWidget *parent) : QwtDial(parent),
+ThermoWidget::ThermoWidget(QWidget *parent, QString name) : QwtDial(parent),
m_currentTemperatureNeedle(new QwtDialSimpleNeedle(QwtDialSimpleNeedle::Arrow)),
- m_targetTemperatureNeedle(new QwtDialSimpleNeedle(QwtDialSimpleNeedle::Arrow, Qt::red, Qt::darkRed))
+ m_targetTemperatureNeedle(new QwtDialSimpleNeedle(QwtDialSimpleNeedle::Arrow, Qt::red, Qt::darkRed)),
+ m_name(name)
{
setScaleArc(40, 320);
setNeedle(m_currentTemperatureNeedle);
setReadOnly(false);
setFocusPolicy(Qt::StrongFocus);
m_currentTemperature = 0;
m_targetTemperature = 0;
}
void ThermoWidget::keyPressEvent(QKeyEvent* ev)
{
if (ev->key() >= Qt::Key_0 && ev->key() <= Qt::Key_9) {
auto tmp = m_currentTemperatureTextFromEditor + ev->key();
if (tmp.toInt() <= upperBound() && tmp.toInt() >= lowerBound()) {
m_currentTemperatureTextFromEditor = tmp;
}
} else if (ev->key() == Qt::Key_Backspace && m_currentTemperatureTextFromEditor.count()) {
m_currentTemperatureTextFromEditor.remove(m_currentTemperatureTextFromEditor.count() - 1, 1);
} else if (ev->key() == Qt::Key_Enter) {
m_targetTemperature = m_currentTemperatureTextFromEditor.toInt();
} else if (ev->key() == Qt::Key_Escape) {
m_currentTemperatureTextFromEditor = '0';
} else if (ev->key() == Qt::Key_Up || ev->key() == Qt::Key_Right) {
if (m_targetTemperature != upperBound()) {
m_currentTemperatureTextFromEditor = QString::number(m_targetTemperature + 1);
}
} else if (ev->key() == Qt::Key_Down || ev->key() == Qt::Key_Left) {
if (m_targetTemperature != lowerBound()) {
m_currentTemperatureTextFromEditor = QString::number(m_targetTemperature - 1);
}
} else if (ev->key() == Qt::Key_PageUp) {
if (m_targetTemperature + 10 > upperBound()) {
m_currentTemperatureTextFromEditor = QString::number(upperBound());
} else {
m_currentTemperatureTextFromEditor = QString::number(m_targetTemperature + 10);
}
} else if (ev->key() == Qt::Key_PageDown) {
if (m_targetTemperature - 10 < lowerBound()) {
m_currentTemperatureTextFromEditor = QString::number(lowerBound());
} else {
m_currentTemperatureTextFromEditor = QString::number(m_targetTemperature - 10);
}
}
else {
QwtDial::keyPressEvent(ev);
return;
}
if (m_targetTemperature != m_currentTemperatureTextFromEditor.toInt()) {
m_targetTemperature = m_currentTemperatureTextFromEditor.toInt();
emit targetTemperatureChanged(m_targetTemperature);
update();
ev->accept();
}
}
void ThermoWidget::focusOutEvent(QFocusEvent* ev)
{
if (m_targetTemperature != m_currentTemperatureTextFromEditor.toInt()) {
m_targetTemperature = m_currentTemperatureTextFromEditor.toInt();
emit targetTemperatureChanged(m_targetTemperature);
update();
ev->accept();
}
}
void ThermoWidget::paintEvent(QPaintEvent* ev)
{
QwtDial::paintEvent(ev);
const QString currentText = QString::number(m_currentTemperature);
QFontMetrics fm(font());
const double targetWidth = fm.width(m_currentTemperatureTextFromEditor);
const double currentWidth = fm.width(currentText);
+ const double nameWidth = fm.width(m_name);
const double height = fm.height();
const double halfWidth = geometry().width() / 2;
const double xposTarget = halfWidth - (targetWidth / 2);
const double xposCurrent = halfWidth - (currentWidth / 2);
+ const double xposName = halfWidth - (nameWidth / 2);
const double ypos = geometry().height() - height * 2 - 2;
QPainter p(this);
+ QColor color = palette().color(QPalette::Text);
+
p.setPen(Qt::red);
- p.drawText(xposTarget, ypos - height, m_currentTemperatureTextFromEditor);
+ p.drawText(xposTarget, ypos - 2 * height, m_currentTemperatureTextFromEditor);
+
+ p.setPen(color);
+ p.drawText(xposCurrent, ypos - height, QString::number(m_currentTemperature));
- p.setPen(Qt::white);
- p.drawText(xposCurrent, ypos, QString::number(m_currentTemperature));
+ p.setPen(color);
+ p.drawText(xposName, ypos, m_name);
}
void ThermoWidget::wheelEvent(QWheelEvent* ev)
{
if (ev->angleDelta().y() > 0) {
if (m_targetTemperature + 10 > upperBound()) {
m_currentTemperatureTextFromEditor = QString::number(upperBound());
} else {
m_currentTemperatureTextFromEditor = QString::number(m_targetTemperature + 10);
}
} else if (ev->angleDelta().y() < 0) {
if (m_targetTemperature - 10 < lowerBound()) {
m_currentTemperatureTextFromEditor = QString::number(lowerBound());
} else {
m_currentTemperatureTextFromEditor = QString::number(m_targetTemperature - 10);
}
}
if (m_targetTemperature != m_currentTemperatureTextFromEditor.toInt()) {
m_targetTemperature = m_currentTemperatureTextFromEditor.toInt();
emit targetTemperatureChanged(m_targetTemperature);
update();
}
ev->accept();
}
void ThermoWidget::drawNeedle( QPainter *painter, const QPointF ¢er, double radius, double dir, QPalette::ColorGroup colorGroup ) const
{
Q_UNUSED( dir );
const double relativePercent = upperBound() - lowerBound();
const double currentTemperaturePercent = (m_currentTemperature - lowerBound()) / relativePercent;
const double targetTemperaturePercent = (m_targetTemperature - lowerBound()) / relativePercent;
const double currentTemperatureAngle = (maxScaleArc() - minScaleArc()) * currentTemperaturePercent + minScaleArc();
const double targetTemperatureAngle = (maxScaleArc() - minScaleArc()) * targetTemperaturePercent + minScaleArc();
// Qt coordinates and Qwt coordinates differ.
// the "begin" of our coordinates in Qt: -130
// the "span" of our coordinates in Qt: -180
// Negative values means clockwise in Qt dialect.
const double qtBeginAngle = -130;
const double coolZone = - (targetTemperatureAngle - minScaleArc());
int yPos = geometry().height() / 2 - radius;
int xPos = geometry().width() / 2 - radius;
QRadialGradient grad(center,radius);
grad.setColorAt(0.75,QColor(0,0,0,0));
grad.setColorAt(0.85,QColor(255,0,0,196));
grad.setColorAt(0.95,QColor(255,110,60,196));
painter->setBrush(grad);
painter->drawPie(xPos,yPos, radius * 2, radius * 2, qtBeginAngle * 16, coolZone* 16);
m_targetTemperatureNeedle->draw(painter, center, radius * 1.3, 360 - targetTemperatureAngle - origin(), colorGroup);
m_currentTemperatureNeedle->draw(painter, center, radius, 360 - currentTemperatureAngle - origin(), colorGroup);
}
void ThermoWidget::setCurrentTemperature(double temperature)
{
if (m_currentTemperature != temperature) {
m_currentTemperature = temperature;
update();
}
}
void ThermoWidget::setTargetTemperature(double temperature)
{
if (m_targetTemperature != temperature) {
m_currentTemperatureTextFromEditor = QString::number(temperature);
m_targetTemperature = temperature;
emit targetTemperatureChanged(m_targetTemperature);
update();
}
}
diff --git a/src/widgets/thermowidget.h b/src/widgets/thermowidget.h
index 963d174..01469db 100644
--- a/src/widgets/thermowidget.h
+++ b/src/widgets/thermowidget.h
@@ -1,42 +1,43 @@
#ifndef THERMOWIDGET_H
#define THERMOWIDGET_H
#include
#include
class QKeyEvent;
class QPaintEvent;
class QFocusEvent;
class QWheelEvent;
class ThermoWidget : public QwtDial {
Q_OBJECT
public:
- ThermoWidget(QWidget *parent);
+ ThermoWidget(QWidget *parent, QString name);
void setTargetTemperature(double temperature);
void setCurrentTemperature(double temperature);
void drawNeedle( QPainter *painter, const QPointF ¢er,
double radius, double dir, QPalette::ColorGroup colorGroup ) const;
signals:
void targetTemperatureChanged(double targetTemperature);
protected:
void keyPressEvent (QKeyEvent *);
void paintEvent(QPaintEvent *);
void focusOutEvent(QFocusEvent *);
void wheelEvent(QWheelEvent *event);
private:
QwtDialSimpleNeedle *m_currentTemperatureNeedle;
QwtDialSimpleNeedle *m_targetTemperatureNeedle;
double m_currentTemperature;
double m_targetTemperature;
QString m_currentTemperatureTextFromEditor;
+ QString m_name;
};
#endif