Subversion Repositories Code-Repo

Compare Revisions

Ignore whitespace Rev 363 → Rev 364

/Misc Projects/PcMarlinInterface/GlobalDefines.h
1,8 → 1,34
#ifndef GLOBALDEFINES
#define GLOBALDEFINES
 
#include <QtWidgets>
#include <QApplication>
#include <QMainWindow>
 
#include <QTextEdit>
#include <QLineEdit>
#include <QPushButton>
#include <QDockWidget>
#include <QLabel>
#include <QToolButton>
#include <QSpinBox>
#include <QSlider>
#include <QComboBox>
 
#include <QGroupBox>
#include <QGridLayout>
#include <QHBoxLayout>
#include <QSignalMapper>
#include <QEvent>
#include <QKeyEvent>
#include <QAction>
#include <QStatusBar>
 
#include <QTimer>
#include <QFileDialog>
#include <QFileInfo>
#include <QXmlStreamWriter>
#include <QXmlStreamReader>
 
#define STATUS_TIMEOUT_MS 3000
 
#endif // GLOBALDEFINES
/Misc Projects/PcMarlinInterface/IOWidget.cpp
28,7 → 28,7
connect(textTransmit, SIGNAL(returnPressed()), btnTransmit, SIGNAL(clicked()));
connect(btnClear, SIGNAL(clicked()), this, SLOT(ClearBtn()));
 
DisableTransmit();
EnableTransmit(false);
lastTransmit = true;
}
 
77,14 → 77,13
textData->clear();
}
 
void IOWidget::EnableTransmit()
void IOWidget::EnableTransmit(bool enable)
{
textTransmit->setEnabled(true);
btnTransmit->setEnabled(true);
if (enable) {
textTransmit->setEnabled(true);
btnTransmit->setEnabled(true);
} else {
textTransmit->setEnabled(false);
btnTransmit->setEnabled(false);
}
}
 
void IOWidget::DisableTransmit()
{
textTransmit->setEnabled(false);
btnTransmit->setEnabled(false);
}
/Misc Projects/PcMarlinInterface/IOWidget.h
14,8 → 14,7
void PreprocessTransmit(QByteArray data = QByteArray());
void ProcessReceivedByte(QByteArray data);
void ClearBtn(void);
void EnableTransmit(void);
void DisableTransmit(void);
void EnableTransmit(bool);
 
signals:
void TransmitByteArray(QByteArray data);
/Misc Projects/PcMarlinInterface/MacroWidget.cpp
55,22 → 55,21
return this->minimumSizeHint();
}
 
void MacroWidget::EnableTransmit()
void MacroWidget::EnableTransmit(bool enable)
{
connected = true;
for (int i = 0; i < btnSendList.size(); i++) {
btnSendList[i]->setEnabled(true);
if (enable) {
connected = true;
for (int i = 0; i < btnSendList.size(); i++) {
btnSendList[i]->setEnabled(true);
}
} else {
connected = false;
for (int i = 0; i < btnSendList.size(); i++) {
btnSendList[i]->setEnabled(false);
}
}
}
 
void MacroWidget::DisableTransmit()
{
connected = false;
for (int i = 0; i < btnSendList.size(); i++) {
btnSendList[i]->setEnabled(false);
}
}
 
void MacroWidget::InitTransmit(QWidget *t)
{
if (connected) {
/Misc Projects/PcMarlinInterface/MacroWidget.h
16,8 → 16,7
 
public slots:
// *public* slots
void EnableTransmit(void);
void DisableTransmit(void);
void EnableTransmit(bool);
// *private* slots
void InitTransmit(QWidget* t);
void KeybindPrompt(int id);
/Misc Projects/PcMarlinInterface/MainWindow.cpp
11,10 → 11,7
groupOther = new QGroupBox("Other");
btnMacro = new QPushButton("&Macros");
btnPaste = new QPushButton("&Paste");
QGridLayout *otherLayout = new QGridLayout();
otherLayout->addWidget(btnMacro, 0, 0);
otherLayout->addWidget(btnPaste, 1, 0);
groupOther->setLayout(otherLayout);
ToggleGroupLayout(false);
 
// Initialize serial widget
serialWidget = new SerialWidget();
33,8 → 30,7
serialDataLayout->addWidget(ioWidget);
groupSerialData->setLayout(serialDataLayout);
connect(serialWidget, SIGNAL(ReceivedByte(QByteArray)), ioWidget, SLOT(ProcessReceivedByte(QByteArray)));
connect(serialWidget, SIGNAL(Connected()), ioWidget, SLOT(EnableTransmit()));
connect(serialWidget, SIGNAL(Disconnected()), ioWidget, SLOT(DisableTransmit()));
connect(serialWidget, SIGNAL(Connected(bool)), ioWidget, SLOT(EnableTransmit(bool)));
connect(ioWidget, SIGNAL(TransmitByteArray(QByteArray)), serialWidget, SIGNAL(TransmitByteArray(QByteArray)));
 
// Initialize macro widget
45,8 → 41,7
macroDockWidget->hide();
addDockWidget(Qt::RightDockWidgetArea, macroDockWidget);
connect(macroWidget, SIGNAL(TransmitText(QByteArray)), ioWidget, SLOT(PreprocessTransmit(QByteArray)));
connect(serialWidget, SIGNAL(Connected()), macroWidget, SLOT(EnableTransmit()));
connect(serialWidget, SIGNAL(Disconnected()), macroWidget, SLOT(DisableTransmit()));
connect(serialWidget, SIGNAL(Connected(bool)), macroWidget, SLOT(EnableTransmit(bool)));
 
// Initialize paste controller widget
pasteDockWidget = new QDockWidget("Paste Controller", this);
53,6 → 48,9
pasteWidget = new PasteController(pasteDockWidget);
pasteDockWidget->setWidget(pasteWidget);
pasteDockWidget->setFloating(true);
pasteDockWidget->hide();
connect(serialWidget, SIGNAL(Connected(bool)), pasteWidget, SLOT(EnableTransmit(bool)));
connect(pasteWidget, SIGNAL(TransmitData(QByteArray)), ioWidget, SLOT(PreprocessTransmit(QByteArray)));
 
// Connect local widgets
connect(btnMacro, SIGNAL(clicked()), macroDockWidget->toggleViewAction(), SLOT(trigger()));
66,6 → 64,7
mainLayout->setColumnStretch(0, 0);
mainLayout->setColumnStretch(1, 1);
centralWidget->setLayout(mainLayout);
connect(serialWidget, SIGNAL(Connected(bool)), this, SLOT(ToggleGroupLayout(bool)));
 
setWindowTitle("Marlin Controller");
setWindowIcon(QIcon(":/External/Resources/Icon_16.bmp"));
88,3 → 87,20
{
labelSerialStatus->setText(string);
}
 
void MainWindow::ToggleGroupLayout(bool toggle)
{
QGridLayout *layout = qobject_cast<QGridLayout*>(groupOther->layout());
if (layout == NULL) layout = new QGridLayout();
layout->removeWidget(btnMacro);
layout->removeWidget(btnPaste);
if (toggle) {
layout->addWidget(btnMacro, 0, 0);
layout->addWidget(btnPaste, 0, 1);
} else {
layout->addWidget(btnMacro, 0, 0);
layout->addWidget(btnPaste, 1, 0);
}
groupOther->setLayout(layout);
groupOther->repaint();
}
/Misc Projects/PcMarlinInterface/MainWindow.h
17,6 → 17,7
public slots:
void UpdateStatus(QString string);
void UpdateSerialStatus(QString string);
void ToggleGroupLayout(bool);
 
signals:
void Serial_TransmitByteArray(QByteArray data);
/Misc Projects/PcMarlinInterface/PasteController.cpp
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);
}
/Misc Projects/PcMarlinInterface/PasteController.h
15,10 → 15,33
signals:
void EnableControls(void);
void DisableControls(void);
void TransmitData(QByteArray);
 
public slots:
void EnableTransmit(bool);
void ToggleHotkeys(void);
void UpdatePosition(void);
void UpdatePositionSingle(void);
void UpdateTimer(int);
void ResetPosition(void);
 
void QSliderToQDoubleSpinBox(int);
void QDoubleSpinBoxToQSlider(double);
 
protected:
bool eventFilter(QObject *, QEvent *);
 
private:
bool connected;
bool hotkeysEnabled;
double xPos,yPos,zPos;
bool X_Incr, X_Decr, Y_Incr, Y_Decr, Z_Incr, Z_Decr, E_Incr;
 
void IncrementToolhead(double x, double y, double z);
void SingleExtrude(void);
 
QTimer *tmrUpdate;
 
QLabel *labelHelp;
 
QPushButton *btnEnableHotkeys;
25,6 → 48,7
QPushButton *btnInit;
QPushButton *btnHome;
 
// Printer control buttons
QToolButton *btnForward;
QToolButton *btnBackward;
QToolButton *btnLeft;
33,6 → 57,7
QToolButton *btnDown;
QToolButton *btnExtrude;
 
// Toolhead position elements
QLabel *labelXPos;
QLineEdit *textXValue;
QLabel *labelYPos;
40,43 → 65,48
QLabel *labelZPos;
QLineEdit *textZValue;
 
// Movement setting elements
QLabel *labelXYSteps;
QSlider *sliderXYSteps;
QDoubleSpinBox *textXYSteps;
 
QLabel *labelXYSpeed;
QSlider *sliderXYSpeed;
QSpinBox *textXYSpeed;
 
QLabel *labelXYAmount;
QSlider *sliderXYAmount;
QSpinBox *textXYAmount;
QLabel *labelZSteps;
QSlider *sliderZSteps;
QDoubleSpinBox *textZSteps;
 
QLabel *labelZSpeed;
QSlider *sliderZSpeed;
QSpinBox *textZSpeed;
 
QLabel *labelZAmount;
QSlider *sliderZAmount;
QSpinBox *textZAmount;
 
QLabel *labelRepeatDelay;
QSlider *sliderRepeatDelay;
QSpinBox *textRepeatDelay;
 
// Extruder setting elements
QLabel *labelEForwardSteps;
QSlider *sliderEForwardSteps;
QSpinBox *textEForwardSteps;
 
QLabel *labelEForwardSpeed;
QSlider *sliderEForwardSpeed;
QSpinBox *textEForwardSpeed;
 
QLabel *labelEBackwardSteps;
QSlider *sliderEBackwardSteps;
QSpinBox *textEBackwardSteps;
 
QLabel *labelEBackwardSpeed;
QSlider *sliderEBackwardSpeed;
QSpinBox *textEBackwardSpeed;
 
QLabel *labelEForwardAmount;
QSlider *sliderEForwardAmount;
QSpinBox *textEForwardAmount;
QLabel *labelEZSteps;
QSlider *sliderEZSteps;
QDoubleSpinBox *textEZSteps;
 
QLabel *labelEBackwardAmount;
QSlider *sliderEBackwardAmount;
QSpinBox *textEBackwardAmount;
 
 
};
 
#endif // PASTECONTROLLER_H
/Misc Projects/PcMarlinInterface/PcMarlinInterface.pro.user
1,10 → 1,10
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 3.3.0, 2015-03-05T14:44:31. -->
<!-- Written by QtCreator 3.3.0, 2015-03-08T01:36:41. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{22bd4f67-ea17-48ee-8299-171e5aa125c2}</value>
<value type="QByteArray">{4c29e835-aad4-4677-99d7-2a63e01ab69b}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
65,7 → 65,7
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:/Users/Kevin/Documents/Code/QT/PcMarlinInterface/build-PcMarlinInterface_Qt_5_4_0_MSVC2013_64bit</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:/Users/Kevin/Documents/Code/QT/build-PcMarlinInterface-Desktop_Qt_5_4_0_MSVC2013_64bit</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
119,7 → 119,7
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:/Users/Kevin/Documents/Code/QT/PcMarlinInterface/build-PcMarlinInterface_Qt_5_4_0_MSVC2013_64bit</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:/Users/Kevin/Documents/Code/QT/build-PcMarlinInterface-Desktop_Qt_5_4_0_MSVC2013_64bit</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
/Misc Projects/PcMarlinInterface/SerialHelper.cpp
85,7 → 85,7
if (ok) {
QString status = "Connected (%1 @ %2 D: %3 S: %4 P: %5 FC: %6)";
emit UpdateStatus(status.arg(port).arg(speed).arg(dataBits).arg(stopBits).arg(parity).arg(flowControl));
emit Connected();
emit Connected(true);
} else
Disconnect();
}
100,7 → 100,7
connected = false;
if (!errored)
emit UpdateStatus("Disconnected");
emit Disconnected();
emit Connected(false);
}
 
void SerialHelper::TransmitString(QString string)
/Misc Projects/PcMarlinInterface/SerialHelper.h
34,8 → 34,7
void UpdateParameters(QStringList ports, QStringList speeds, QStringList dataBits,
QStringList stopBits, QStringList parity, QStringList flowControl);
void ReceivedByte(QByteArray);
void Connected(void);
void Disconnected(void);
void Connected(bool);
void UpdateStatus(QString string);
 
private:
/Misc Projects/PcMarlinInterface/SerialWidget.cpp
55,12 → 55,10
 
connect(this, SIGNAL(Connect(QString,QString,QString,QString,QString,QString)),
serialHelper, SLOT(Connect(QString,QString,QString,QString,QString,QString)));
connect(serialHelper, SIGNAL(Connected()), this, SIGNAL(Connected()));
connect(serialHelper, SIGNAL(Connected()), this, SLOT(LocalConnected()));
connect(serialHelper, SIGNAL(Connected(bool)), this, SIGNAL(Connected(bool)));
connect(serialHelper, SIGNAL(Connected(bool)), this, SLOT(LocalConnected(bool)));
 
connect(this, SIGNAL(Disconnect()), serialHelper, SLOT(Disconnect()));
connect(serialHelper, SIGNAL(Disconnected()), this, SIGNAL(Disconnected()));
connect(serialHelper, SIGNAL(Disconnected()), this, SLOT(LocalDisconnected()));
 
connect(this, SIGNAL(TransmitByteArray(QByteArray)), serialHelper, SLOT(TransmitByteArray(QByteArray)));
 
73,7 → 71,7
connect(btnRefresh, SIGNAL(clicked()), this, SIGNAL(QueryParameters()));
 
emit QueryParameters();
LocalDisconnected();
LocalConnected(false);
}
 
SerialWidget::~SerialWidget()
116,56 → 114,41
if (currFlow >= 0) cboxFlowControl->setCurrentIndex(currFlow);
}
 
void SerialWidget::LocalConnected()
void SerialWidget::LocalConnected(bool connected)
{
btnConnect->setText("&Disconnect");
// cboxSerialPort->setEnabled(false);
// cboxSerialSpeed->setEnabled(false);
// cboxSerialDataBits->setEnabled(false);
// cboxSerialStopBits->setEnabled(false);
// cboxSerialParity->setEnabled(false);
// cboxSerialFlowControl->setEnabled(false);
// btnSerialRefresh->setEnabled(false);
btnRefresh->hide();
labelPort->hide();
labelSpeed->hide();
labelDataBits->hide();
labelStopBits->hide();
labelParity->hide();
labelFlowControl->hide();
cboxPort->hide();
cboxSpeed->hide();
cboxDataBits->hide();
cboxStopBits->hide();
cboxParity->hide();
cboxFlowControl->hide();
if (connected) {
btnConnect->setText("&Disconnect");
btnRefresh->hide();
labelPort->hide();
labelSpeed->hide();
labelDataBits->hide();
labelStopBits->hide();
labelParity->hide();
labelFlowControl->hide();
cboxPort->hide();
cboxSpeed->hide();
cboxDataBits->hide();
cboxStopBits->hide();
cboxParity->hide();
cboxFlowControl->hide();
} else {
btnConnect->setText("&Connect");
btnRefresh->show();
labelPort->show();
labelSpeed->show();
labelDataBits->show();
labelStopBits->show();
labelParity->show();
labelFlowControl->show();
cboxPort->show();
cboxSpeed->show();
cboxDataBits->show();
cboxStopBits->show();
cboxParity->show();
cboxFlowControl->show();
}
}
 
void SerialWidget::LocalDisconnected()
{
btnConnect->setText("&Connect");
// cboxSerialPort->setEnabled(true);
// cboxSerialSpeed->setEnabled(true);
// cboxSerialDataBits->setEnabled(true);
// cboxSerialStopBits->setEnabled(true);
// cboxSerialParity->setEnabled(true);
// cboxSerialFlowControl->setEnabled(true);
// btnSerialRefresh->setEnabled(true);
btnRefresh->show();
labelPort->show();
labelSpeed->show();
labelDataBits->show();
labelStopBits->show();
labelParity->show();
labelFlowControl->show();
cboxPort->show();
cboxSpeed->show();
cboxDataBits->show();
cboxStopBits->show();
cboxParity->show();
cboxFlowControl->show();
}
 
void SerialWidget::ConnectToggleBtn()
{
if (serialHelper->connected) {
/Misc Projects/PcMarlinInterface/SerialWidget.h
18,8 → 18,7
 
// Local GUI processing
void ConnectToggleBtn(void);
void LocalConnected(void);
void LocalDisconnected(void);
void LocalConnected(bool);
 
signals:
// Outbound to SerialHelper
31,8 → 30,7
 
// Outbound to MainWindow
void ReceivedByte(QByteArray data);
void Connected(void);
void Disconnected(void);
void Connected(bool);
void UpdateStatus(QString string);
 
private: