2,6 → 2,14 |
|
PasteController::PasteController(QWidget *parent) : QWidget(parent) |
{ |
connected = false; |
hotkeysEnabled = false; |
xPos = yPos = zPos = 0.0; |
X_Incr = X_Decr = Y_Incr = Y_Decr = Z_Incr = Z_Decr = E_Incr = false; |
|
tmrUpdate = new QTimer(this); |
connect(tmrUpdate, SIGNAL(timeout()), this, SLOT(UpdatePosition())); |
|
QString helpString = ""; |
helpString.append("XY Control: Arrow Keys or H/J/K/L\n"); |
helpString.append("Z Control: PgUp/PgDown\n"); |
14,10 → 22,14 |
QGroupBox *helpBox = new QGroupBox("Hotkeys:"); |
helpBox->setLayout(helpLayout); |
|
btnEnableHotkeys = new QPushButton("Enable Hotkeys"); |
btnInit = new QPushButton("Initialize Printer"); |
btnHome = new QPushButton("Home Printhead"); |
btnEnableHotkeys = new QPushButton("&Enable Hotkeys"); |
connect(btnEnableHotkeys, SIGNAL(clicked()), this, SLOT(ToggleHotkeys())); |
|
btnInit = new QPushButton("&Initialize Printer"); |
|
btnHome = new QPushButton("&Home Printhead"); |
connect(btnHome, SIGNAL(clicked()), this, SLOT(ResetPosition())); |
|
QVBoxLayout *miscBtnLayout = new QVBoxLayout(); |
miscBtnLayout->addWidget(btnEnableHotkeys); |
miscBtnLayout->addWidget(btnInit); |
40,26 → 52,32 |
btnForward->setIcon(iconUp); |
btnForward->setIconSize(QSize(BTN_ICON_SIZE,BTN_ICON_SIZE)); |
btnForward->setAutoRaise(true); |
connect(btnForward, SIGNAL(clicked()), this, SLOT(UpdatePositionSingle())); |
btnBackward = new QToolButton(); |
btnBackward->setIcon(iconDown); |
btnBackward->setIconSize(QSize(BTN_ICON_SIZE,BTN_ICON_SIZE)); |
btnBackward->setAutoRaise(true); |
connect(btnBackward, SIGNAL(clicked()), this, SLOT(UpdatePositionSingle())); |
btnLeft = new QToolButton(); |
btnLeft->setIcon(iconLeft); |
btnLeft->setIconSize(QSize(BTN_ICON_SIZE,BTN_ICON_SIZE)); |
btnLeft->setAutoRaise(true); |
connect(btnLeft, SIGNAL(clicked()), this, SLOT(UpdatePositionSingle())); |
btnRight = new QToolButton(); |
btnRight->setIcon(iconRight); |
btnRight->setIconSize(QSize(BTN_ICON_SIZE,BTN_ICON_SIZE)); |
btnRight->setAutoRaise(true); |
connect(btnRight, SIGNAL(clicked()), this, SLOT(UpdatePositionSingle())); |
btnUp = new QToolButton(); |
btnUp->setIcon(iconAdd); |
btnUp->setIconSize(QSize(BTN_ICON_SIZE,BTN_ICON_SIZE)); |
btnUp->setAutoRaise(true); |
connect(btnUp, SIGNAL(clicked()), this, SLOT(UpdatePositionSingle())); |
btnDown = new QToolButton(); |
btnDown->setIcon(iconRemove); |
btnDown->setIconSize(QSize(BTN_ICON_SIZE,BTN_ICON_SIZE)); |
btnDown->setAutoRaise(true); |
connect(btnDown, SIGNAL(clicked()), this, SLOT(UpdatePositionSingle())); |
btnExtrude = new QToolButton(); |
btnExtrude->setIcon(iconDelete); |
btnExtrude->setIconSize(QSize(BTN_ICON_SIZE,BTN_ICON_SIZE)); |
85,20 → 103,27 |
controlBox->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); |
|
labelXPos = new QLabel("X :"); |
labelXPos->setFont(QFont("", 14, 1)); |
labelXPos->setFont(QFont("", 14, QFont::Normal)); |
labelYPos = new QLabel("Y :"); |
labelYPos->setFont(QFont("", 14, 1)); |
labelYPos->setFont(QFont("", 14, QFont::Normal)); |
labelZPos = new QLabel("Z :"); |
labelZPos->setFont(QFont("", 14, 1)); |
labelZPos->setFont(QFont("", 14, QFont::Normal)); |
textXValue = new QLineEdit(); |
textXValue->setReadOnly(true); |
textXValue->setMaximumWidth(60); |
textXValue->setFont(QFont("", 10, QFont::Bold)); |
textXValue->setAlignment(Qt::AlignCenter); |
textYValue = new QLineEdit(); |
textYValue->setReadOnly(true); |
textYValue->setMaximumWidth(60); |
textYValue->setFont(QFont("", 10, QFont::Bold)); |
textYValue->setAlignment(Qt::AlignCenter); |
textZValue = new QLineEdit(); |
textZValue->setReadOnly(true); |
textZValue->setMaximumWidth(60); |
textZValue->setFont(QFont("", 10, QFont::Bold)); |
textZValue->setAlignment(Qt::AlignCenter); |
UpdatePosition(); |
|
QHBoxLayout *posValueLayout = new QHBoxLayout(); |
posValueLayout->addWidget(labelXPos); |
112,37 → 137,87 |
toolheadPosBox->setLayout(posValueLayout); |
toolheadPosBox->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); |
|
labelXYSpeed = new QLabel("XY Axis Speed:"); |
labelXYSteps = new QLabel("XY Axis Step (mm):"); |
sliderXYSteps = new QSlider(Qt::Horizontal); |
textXYSteps = new QDoubleSpinBox(); |
textXYSteps->setMinimumWidth(60); |
labelXYSpeed = new QLabel("XY Axis Speed (mm/s):"); |
sliderXYSpeed = new QSlider(Qt::Horizontal); |
textXYSpeed = new QSpinBox(); |
textXYSpeed->setMinimumWidth(60); |
labelXYAmount = new QLabel("XY Axis Steps:"); |
sliderXYAmount = new QSlider(Qt::Horizontal); |
textXYAmount = new QSpinBox(); |
textXYAmount->setMinimumWidth(60); |
labelZSpeed = new QLabel("Z Axis Speed:"); |
labelZSteps = new QLabel("Z Axis Step (mm):"); |
sliderZSteps = new QSlider(Qt::Horizontal); |
textZSteps = new QDoubleSpinBox(); |
textZSteps->setMinimumWidth(60); |
labelZSpeed = new QLabel("Z Axis Speed (mm/s):"); |
sliderZSpeed = new QSlider(Qt::Horizontal); |
textZSpeed = new QSpinBox(); |
textZSpeed->setMinimumWidth(60); |
labelZAmount = new QLabel("Z Axis Steps:"); |
sliderZAmount = new QSlider(Qt::Horizontal); |
textZAmount = new QSpinBox(); |
textZAmount->setMinimumWidth(60); |
labelRepeatDelay = new QLabel("Repeat Delay:"); |
labelRepeatDelay = new QLabel("Repeat Delay (ms):"); |
sliderRepeatDelay = new QSlider(Qt::Horizontal); |
textRepeatDelay = new QSpinBox(); |
textRepeatDelay->setMinimumWidth(60); |
|
labelEForwardSteps = new QLabel("Extrude Step (mm):"); |
sliderEForwardSteps = new QSlider(Qt::Horizontal); |
textEForwardSteps = new QSpinBox(); |
textEForwardSteps->setMinimumWidth(60); |
labelEForwardSpeed = new QLabel("Extrude Speed (mm/s):"); |
sliderEForwardSpeed = new QSlider(Qt::Horizontal); |
textEForwardSpeed = new QSpinBox(); |
textEForwardSpeed->setMinimumWidth(60); |
labelEBackwardSteps = new QLabel("Retract Step (mm):"); |
sliderEBackwardSteps = new QSlider(Qt::Horizontal); |
textEBackwardSteps = new QSpinBox(); |
textEBackwardSteps->setMinimumWidth(60); |
labelEBackwardSpeed = new QLabel("Retract Speed: (mm/s)"); |
sliderEBackwardSpeed = new QSlider(Qt::Horizontal); |
textEBackwardSpeed = new QSpinBox(); |
textEBackwardSpeed->setMinimumWidth(60); |
labelEZSteps = new QLabel("Z Axis Step (mm):"); |
sliderEZSteps = new QSlider(Qt::Horizontal); |
textEZSteps = new QDoubleSpinBox(); |
textEZSteps->setMinimumWidth(60); |
|
connect(sliderXYSteps, SIGNAL(valueChanged(int)), this, SLOT(QSliderToQDoubleSpinBox(int))); |
connect(textXYSteps, SIGNAL(valueChanged(double)), this, SLOT(QDoubleSpinBoxToQSlider(double))); |
sliderXYSteps->setRange(0, 5000); |
textXYSteps->setRange(0,50); |
textXYSteps->setSingleStep(0.1); |
textXYSteps->setValue(10); |
connect(sliderXYSpeed, SIGNAL(valueChanged(int)), textXYSpeed, SLOT(setValue(int))); |
connect(textXYSpeed, SIGNAL(valueChanged(int)), sliderXYSpeed, SLOT(setValue(int))); |
sliderXYSpeed->setRange(1, 10000); |
textXYSpeed->setRange(1, 10000); |
textXYSpeed->setValue(4000); |
connect(sliderZSteps, SIGNAL(valueChanged(int)), this, SLOT(QSliderToQDoubleSpinBox(int))); |
connect(textZSteps, SIGNAL(valueChanged(double)), this, SLOT(QDoubleSpinBoxToQSlider(double))); |
sliderZSteps->setRange(0, 5000); |
textZSteps->setRange(0, 50); |
textZSteps->setSingleStep(0.1); |
textZSteps->setValue(10); |
connect(sliderZSpeed, SIGNAL(valueChanged(int)), textZSpeed, SLOT(setValue(int))); |
connect(textZSpeed, SIGNAL(valueChanged(int)), sliderZSpeed, SLOT(setValue(int))); |
sliderZSpeed->setRange(1, 10000); |
textZSpeed->setRange(1, 10000); |
textZSpeed->setValue(1000); |
connect(sliderRepeatDelay, SIGNAL(valueChanged(int)), textRepeatDelay, SLOT(setValue(int))); |
connect(textRepeatDelay, SIGNAL(valueChanged(int)), sliderRepeatDelay, SLOT(setValue(int))); |
connect(textRepeatDelay, SIGNAL(valueChanged(int)), this, SLOT(UpdateTimer(int))); |
sliderRepeatDelay->setRange(20, 500); |
textRepeatDelay->setRange(20, 500); |
textRepeatDelay->setValue(100); |
|
QGridLayout *xyRepeatLayout = new QGridLayout(); |
xyRepeatLayout->addWidget(labelXYAmount, 0, 0); |
xyRepeatLayout->addWidget(sliderXYAmount, 0, 1); |
xyRepeatLayout->addWidget(textXYAmount, 0, 2); |
xyRepeatLayout->addWidget(labelXYSteps, 0, 0); |
xyRepeatLayout->addWidget(sliderXYSteps, 0, 1); |
xyRepeatLayout->addWidget(textXYSteps, 0, 2); |
xyRepeatLayout->addWidget(labelXYSpeed, 1, 0); |
xyRepeatLayout->addWidget(sliderXYSpeed, 1, 1); |
xyRepeatLayout->addWidget(textXYSpeed, 1, 2); |
xyRepeatLayout->addWidget(labelZAmount, 2, 0); |
xyRepeatLayout->addWidget(sliderZAmount, 2, 1); |
xyRepeatLayout->addWidget(textZAmount, 2, 2); |
xyRepeatLayout->addWidget(labelZSteps, 2, 0); |
xyRepeatLayout->addWidget(sliderZSteps, 2, 1); |
xyRepeatLayout->addWidget(textZSteps, 2, 2); |
xyRepeatLayout->addWidget(labelZSpeed, 3, 0); |
xyRepeatLayout->addWidget(sliderZSpeed, 3, 1); |
xyRepeatLayout->addWidget(textZSpeed, 3, 2); |
153,36 → 228,49 |
QGroupBox *xyRepeatBox = new QGroupBox("Movement Settings"); |
xyRepeatBox->setLayout(xyRepeatLayout); |
|
labelEForwardSpeed = new QLabel("Extrude Speed:"); |
sliderEForwardSpeed = new QSlider(Qt::Horizontal); |
textEForwardSpeed = new QSpinBox(); |
textEForwardSpeed->setMinimumWidth(60); |
labelEBackwardSpeed = new QLabel("Retract Speed:"); |
sliderEBackwardSpeed = new QSlider(Qt::Horizontal); |
textEBackwardSpeed = new QSpinBox(); |
textEBackwardSpeed->setMinimumWidth(60); |
labelEForwardAmount = new QLabel("Extrude Steps:"); |
sliderEForwardAmount = new QSlider(Qt::Horizontal); |
textEForwardAmount = new QSpinBox(); |
textEForwardAmount->setMinimumWidth(60); |
labelEBackwardAmount = new QLabel("Retract Steps:"); |
sliderEBackwardAmount = new QSlider(Qt::Horizontal); |
textEBackwardAmount = new QSpinBox(); |
textEBackwardAmount->setMinimumWidth(60); |
connect(sliderEForwardSteps, SIGNAL(valueChanged(int)), textEForwardSteps, SLOT(setValue(int))); |
connect(textEForwardSteps, SIGNAL(valueChanged(int)), sliderEForwardSteps, SLOT(setValue(int))); |
sliderEForwardSteps->setRange(1, 10000); |
textEForwardSteps->setRange(1, 10000); |
textEForwardSteps->setValue(4000); |
connect(sliderEForwardSpeed, SIGNAL(valueChanged(int)), textEForwardSpeed, SLOT(setValue(int))); |
connect(textEForwardSpeed, SIGNAL(valueChanged(int)), sliderEForwardSpeed, SLOT(setValue(int))); |
sliderEForwardSpeed->setRange(1, 10000); |
textEForwardSpeed->setRange(1, 10000); |
textEForwardSpeed->setValue(1000); |
connect(sliderEBackwardSteps, SIGNAL(valueChanged(int)), textEBackwardSteps, SLOT(setValue(int))); |
connect(textEBackwardSteps, SIGNAL(valueChanged(int)), sliderEBackwardSteps, SLOT(setValue(int))); |
sliderEBackwardSteps->setRange(1, 10000); |
textEBackwardSteps->setRange(1, 10000); |
textEBackwardSteps->setValue(2000); |
connect(sliderEBackwardSpeed, SIGNAL(valueChanged(int)), textEBackwardSpeed, SLOT(setValue(int))); |
connect(textEBackwardSpeed, SIGNAL(valueChanged(int)), sliderEBackwardSpeed, SLOT(setValue(int))); |
sliderEBackwardSpeed->setRange(1, 10000); |
textEBackwardSpeed->setRange(1, 10000); |
textEBackwardSpeed->setValue(2000); |
connect(sliderEZSteps, SIGNAL(valueChanged(int)), this, SLOT(QSliderToQDoubleSpinBox(int))); |
connect(textEZSteps, SIGNAL(valueChanged(double)), this, SLOT(QDoubleSpinBoxToQSlider(double))); |
sliderEZSteps->setRange(0, 1000); |
textEZSteps->setRange(0, 10); |
textEZSteps->setSingleStep(0.1); |
textEZSteps->setValue(2); |
|
QGridLayout *extruderLayout = new QGridLayout(); |
extruderLayout->addWidget(labelEForwardAmount, 0, 0); |
extruderLayout->addWidget(sliderEForwardAmount, 0, 1); |
extruderLayout->addWidget(textEForwardAmount, 0, 2); |
extruderLayout->addWidget(labelEForwardSteps, 0, 0); |
extruderLayout->addWidget(sliderEForwardSteps, 0, 1); |
extruderLayout->addWidget(textEForwardSteps, 0, 2); |
extruderLayout->addWidget(labelEForwardSpeed, 1, 0); |
extruderLayout->addWidget(sliderEForwardSpeed, 1, 1); |
extruderLayout->addWidget(textEForwardSpeed, 1, 2); |
extruderLayout->addWidget(labelEBackwardAmount, 2, 0); |
extruderLayout->addWidget(sliderEBackwardAmount, 2, 1); |
extruderLayout->addWidget(textEBackwardAmount, 2, 2); |
extruderLayout->addWidget(labelEBackwardSteps, 2, 0); |
extruderLayout->addWidget(sliderEBackwardSteps, 2, 1); |
extruderLayout->addWidget(textEBackwardSteps, 2, 2); |
extruderLayout->addWidget(labelEBackwardSpeed, 4, 0); |
extruderLayout->addWidget(sliderEBackwardSpeed, 4, 1); |
extruderLayout->addWidget(textEBackwardSpeed, 4, 2); |
extruderLayout->addWidget(labelEZSteps, 5, 0); |
extruderLayout->addWidget(sliderEZSteps, 5, 1); |
extruderLayout->addWidget(textEZSteps, 5, 2); |
|
QGroupBox *extruderBox = new QGroupBox("Extruder Settings"); |
extruderBox->setLayout(extruderLayout); |
203,6 → 291,7 |
|
setLayout(mainLayout); |
setFixedSize(sizeHint()); |
|
} |
|
PasteController::~PasteController() |
210,3 → 299,153 |
|
} |
|
void PasteController::EnableTransmit(bool en) { |
connected = en; |
} |
|
void PasteController::ToggleHotkeys() { |
if (hotkeysEnabled) { |
qApp->removeEventFilter(this); |
btnEnableHotkeys->setText("&Enable Hotkeys"); |
} else { |
qApp->installEventFilter(this); |
btnEnableHotkeys->setText("&Disable Hotkeys"); |
} |
hotkeysEnabled = !hotkeysEnabled; |
} |
|
void PasteController::UpdatePosition() { |
if (X_Incr && !X_Decr) xPos += textXYSteps->value(); |
if (!X_Incr && X_Decr) xPos -= textXYSteps->value(); |
if (Y_Incr && !Y_Decr) yPos += textXYSteps->value(); |
if (!Y_Incr && Y_Decr) yPos -= textXYSteps->value(); |
if (Z_Incr && !Z_Decr) zPos += textZSteps->value(); |
if (!Z_Incr && Z_Decr) zPos -= textZSteps->value(); |
|
textXValue->setText(QString::number(xPos, 'f', 2)); |
textYValue->setText(QString::number(yPos, 'f', 2)); |
textZValue->setText(QString::number(zPos, 'f', 2)); |
} |
|
void PasteController::UpdatePositionSingle() { |
if (QObject::sender() == btnRight) xPos += textXYSteps->value(); |
if (QObject::sender() == btnLeft) xPos -= textXYSteps->value(); |
if (QObject::sender() == btnForward) yPos += textXYSteps->value(); |
if (QObject::sender() == btnBackward) yPos -= textXYSteps->value(); |
if (QObject::sender() == btnUp) zPos += textZSteps->value(); |
if (QObject::sender() == btnDown) zPos -= textZSteps->value(); |
|
textXValue->setText(QString::number(xPos, 'f', 2)); |
textYValue->setText(QString::number(yPos, 'f', 2)); |
textZValue->setText(QString::number(zPos, 'f', 2)); |
} |
|
void PasteController::UpdateTimer(int delay) { |
tmrUpdate->setInterval(delay); |
} |
|
void PasteController::QSliderToQDoubleSpinBox(int) { |
textXYSteps->setValue((double)sliderXYSteps->value()/100); |
textZSteps->setValue((double)sliderZSteps->value()/100); |
textEZSteps->setValue((double)sliderEZSteps->value()/100); |
} |
|
void PasteController::QDoubleSpinBoxToQSlider(double) { |
sliderXYSteps->setValue(textXYSteps->value()*100); |
sliderZSteps->setValue(textZSteps->value()*100); |
sliderEZSteps->setValue(textEZSteps->value()*100); |
} |
|
void PasteController::ResetPosition() { |
xPos = yPos = zPos = 0; |
UpdatePosition(); |
} |
|
bool PasteController::eventFilter(QObject *obj, QEvent *event) |
{ |
// Only process keyboard press and release events |
if (event->type() == QEvent::KeyPress) { |
QKeyEvent *keyevent = static_cast<QKeyEvent*>(event); |
// QKeySequence seq = keyevent->modifiers() + keyevent->key(); |
|
if (hotkeysEnabled) { |
if (keyevent->isAutoRepeat()) return true; |
bool keychange = false; |
if (keyevent->key() == Qt::Key_Left || keyevent->key() == Qt::Key_H) { |
btnLeft->setDown(true); |
X_Decr = keychange = true; |
} |
if (keyevent->key() == Qt::Key_Right || keyevent->key() == Qt::Key_L) { |
btnRight->setDown(true); |
X_Incr = keychange = true; |
} |
if (keyevent->key() == Qt::Key_Up || keyevent->key() == Qt::Key_K) { |
btnForward->setDown(true); |
Y_Incr = keychange = true; |
} |
if (keyevent->key() == Qt::Key_Down || keyevent->key() == Qt::Key_J) { |
btnBackward->setDown(true); |
Y_Decr = keychange = true; |
} |
if (keyevent->key() == Qt::Key_PageDown) { |
btnDown->setDown(true); |
Z_Decr = keychange = true; |
} |
if (keyevent->key() == Qt::Key_PageUp) { |
btnUp->setDown(true); |
Z_Incr = keychange = true; |
} |
if (keyevent->key() == Qt::Key_Space) { |
btnExtrude->setDown(true); |
E_Incr = keychange = true; |
} |
if (X_Incr || X_Decr || Y_Incr || Y_Decr || Z_Incr || Z_Decr || E_Incr) { |
UpdatePosition(); |
tmrUpdate->start(); |
} |
if (keychange) return true; |
} |
} else if (event->type() == QEvent::KeyRelease) { |
QKeyEvent *keyevent = static_cast<QKeyEvent*>(event); |
// QKeySequence seq = keyevent->modifiers() + keyevent->key(); |
|
if (hotkeysEnabled) { |
if (keyevent->isAutoRepeat()) return true; |
bool keychange = false; |
if (keyevent->key() == Qt::Key_Left || keyevent->key() == Qt::Key_H) { |
btnLeft->setDown(false); |
X_Decr = keychange = false; |
} |
if (keyevent->key() == Qt::Key_Right || keyevent->key() == Qt::Key_L) { |
btnRight->setDown(false); |
X_Incr = keychange = false; |
} |
if (keyevent->key() == Qt::Key_Up || keyevent->key() == Qt::Key_K) { |
btnForward->setDown(false); |
Y_Incr = keychange = false; |
} |
if (keyevent->key() == Qt::Key_Down || keyevent->key() == Qt::Key_J) { |
btnBackward->setDown(false); |
Y_Decr = keychange = false; |
} |
if (keyevent->key() == Qt::Key_PageDown) { |
btnDown->setDown(false); |
Z_Decr = keychange = false; |
} |
if (keyevent->key() == Qt::Key_PageUp) { |
btnUp->setDown(false); |
Z_Incr = keychange = false; |
} |
if (keyevent->key() == Qt::Key_Space) { |
btnExtrude->setDown(false); |
E_Incr = keychange = false; |
} |
if (!X_Incr && !X_Decr && !Y_Incr && !Y_Decr && !Z_Incr && !Z_Decr && !E_Incr) { |
tmrUpdate->stop(); |
} |
if (keychange) return true; |
} |
} |
|
return QWidget::eventFilter(obj, event); |
} |