File indexing completed on 2024-05-19 05:51:03

0001 /* Atelier KDE Printer Host for 3D Printing
0002     Copyright (C) <2016>
0003     Author: Lays Rodrigues - lays.rodrigues@kde.org
0004             Tomaz Canabraza - tcanabrava@kde.org
0005             Chris Rizzitello - rizzitello@kde.org
0006 
0007     This program is free software: you can redistribute it and/or modify
0008     it under the terms of the GNU General Public License as published by
0009     the Free Software Foundation, either version 3 of the License, or
0010     (at your option) any later version.
0011 
0012     This program is distributed in the hope that it will be useful,
0013     but WITHOUT ANY WARRANTY; without even the implied warranty of
0014     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0015     GNU General Public License for more details.
0016 
0017     You should have received a copy of the GNU General Public License
0018     along with this program.  If not, see <http://www.gnu.org/licenses/>.
0019 */
0020 #include "bedextruderwidget.h"
0021 #include "thermowidget.h"
0022 #include <KLocalizedString>
0023 #include <QBoxLayout>
0024 #include <QLabel>
0025 #include <QRadioButton>
0026 
0027 BedExtruderWidget::BedExtruderWidget(QWidget *parent)
0028     : QWidget(parent)
0029     , m_bedThermo(new ThermoWidget(this, QString(i18n("Bed"))))
0030     , m_extruderThermo(new ThermoWidget(this, QString(i18n("HotEnd"))))
0031     , m_extrudersLayout(new QHBoxLayout)
0032     , m_extruderBox(new QWidget(this))
0033 {
0034     m_bedThermo->setRange(0, 150);
0035     m_extruderThermo->setRange(0, 250);
0036     m_extruderBox->setLayout(m_extrudersLayout);
0037 
0038     auto *label = new QLabel(i18n("Active Extruder:"), this);
0039     m_extrudersLayout->addWidget(label);
0040 
0041     auto *layout = new QHBoxLayout;
0042     layout->addWidget(m_extruderBox);
0043     layout->addWidget(m_bedThermo);
0044     layout->addWidget(m_extruderThermo);
0045 
0046     setLayout(layout);
0047     // Add Default Extruder
0048     setExtruderCount(1);
0049 
0050     connect(m_bedThermo, &ThermoWidget::targetTemperatureChanged, this, [this](int v) { emit bedTemperatureChanged(v, false); });
0051 
0052     connect(m_extruderThermo, &ThermoWidget::targetTemperatureChanged, this, [this](int v) { emit extTemperatureChanged(v, currentExtruder(), false); });
0053 }
0054 
0055 void BedExtruderWidget::setExtruderCount(int value)
0056 {
0057     value > 1 ? m_extruderBox->setVisible(true) : m_extruderBox->setVisible(false);
0058     if (value == m_extruderCount) {
0059         return;
0060     }
0061 
0062     if (m_extruderCount < value) {
0063         // loop for the new buttons
0064         for (int i = m_extruderCount; i < value; i++) {
0065             auto *rb = new QRadioButton(QString::number(i + 1), this);
0066             m_extrudersLayout->addWidget(rb);
0067             extruderMap.insert(i, rb);
0068         }
0069     } else {
0070         // remove buttons - need to test it!
0071         for (int i = m_extruderCount; i >= value; i--) {
0072             auto *rb = extruderMap.value(i);
0073             m_extrudersLayout->removeWidget(rb);
0074             extruderMap.remove(i);
0075             delete (rb);
0076         }
0077     }
0078     m_extruderCount = value;
0079 }
0080 
0081 void BedExtruderWidget::updateBedTemp(const float temp)
0082 {
0083     m_bedThermo->setCurrentTemperature(double(temp));
0084 }
0085 
0086 void BedExtruderWidget::updateExtTemp(const float temp)
0087 {
0088     m_extruderThermo->setCurrentTemperature(double(temp));
0089 }
0090 
0091 void BedExtruderWidget::updateBedTargetTemp(const int temp)
0092 {
0093     m_bedThermo->setTargetTemperature(temp);
0094 }
0095 
0096 void BedExtruderWidget::updateExtTargetTemp(const int temp)
0097 {
0098     m_extruderThermo->setTargetTemperature(temp);
0099 }
0100 
0101 int BedExtruderWidget::currentExtruder()
0102 {
0103     int currExt = 0;
0104     for (int i = 0; i < extruderMap.size(); i++) {
0105         if (extruderMap.value(i)->isChecked()) {
0106             currExt = i;
0107             break;
0108         }
0109     }
0110     return currExt;
0111 }
0112 
0113 void BedExtruderWidget::setBedMaxTemperature(int value)
0114 {
0115     m_bedThermo->setRange(0, value);
0116 }
0117 
0118 void BedExtruderWidget::setExtruderMaxTemperature(int value)
0119 {
0120     m_extruderThermo->setRange(0, value);
0121 }
0122 
0123 void BedExtruderWidget::setBedThermoHidden(bool hidden)
0124 {
0125     m_bedThermo->setHidden(hidden);
0126 }