//Misc Projects/PcMarlinInterface/MacroController.cpp |
---|
0,0 → 1,147 |
#include "MacroController.h" |
MacroController::MacroController(QWidget *parent) : QWidget(parent) |
{ |
sigMapper = new QSignalMapper(); |
btnExport = new QPushButton("&Export"); |
btnImport = new QPushButton("&Import"); |
btnIncreaseMacro = new QPushButton("&Add"); |
btnDecreaseMacro = new QPushButton("&Remove"); |
mainLayout = new QGridLayout(); |
macroCount = 0; |
connected = false; |
ioLayout = new QHBoxLayout(); |
ioLayout->addStretch(); |
ioLayout->addWidget(btnIncreaseMacro); |
ioLayout->addWidget(btnDecreaseMacro); |
ioLayout->addWidget(btnExport); |
ioLayout->addWidget(btnImport); |
mainLayout->addLayout(ioLayout, 0, 0, 1, 2); |
for (int i = 0; i < MACRO_DEFAULT_COUNT; i++) { |
Macro_AddEntry(); |
} |
setLayout(mainLayout); |
this->resize(this->minimumSizeHint()); |
connect(btnIncreaseMacro, SIGNAL(clicked()), this, SLOT(Macro_AddEntry())); |
connect(btnDecreaseMacro, SIGNAL(clicked()), this, SLOT(Macro_RemoveEntry())); |
connect(btnExport, SIGNAL(clicked()), this, SLOT(Macro_WriteToFile())); |
connect(btnImport, SIGNAL(clicked()), this, SLOT(Macro_ReadFromFile())); |
connect(sigMapper, SIGNAL(mapped(QWidget*)), this, SLOT(Macro_InitTransmit(QWidget*))); |
setWindowTitle("Macro Settings"); |
} |
MacroController::~MacroController() |
{ |
} |
void MacroController::Macro_EnableTransmit() |
{ |
connected = true; |
for (int i = 0; i < macroBtnList.size(); i++) { |
macroBtnList[i]->setEnabled(true); |
} |
} |
void MacroController::Macro_DisableTransmit() |
{ |
connected = false; |
for (int i = 0; i < macroBtnList.size(); i++) { |
macroBtnList[i]->setEnabled(false); |
} |
} |
void MacroController::Macro_InitTransmit(QWidget *t) |
{ |
QTextEdit *text = qobject_cast<QTextEdit*>(t); |
emit Macro_TransmitText(text->toPlainText()); |
} |
void MacroController::Macro_AddEntry() |
{ |
macroCount++; |
// Create new layout/widgets |
QLineEdit *lineEdit = new QLineEdit(QString("Macro %1").arg(macroCount)); |
lineEdit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); |
lineEdit->setAlignment(Qt::AlignCenter | Qt::AlignTop); |
macroNameList.append(lineEdit); |
QTextEdit *textEdit = new QTextEdit(); |
textEdit->setMinimumHeight(50); |
textEdit->setWordWrapMode(QTextOption::NoWrap); |
textEdit->setFont(QFont("Consolas", 8)); |
textEdit->setAcceptRichText(false); |
macroValueList.append(textEdit); |
QPushButton *pushButton = new QPushButton("Send Macro"); |
pushButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); |
pushButton->setEnabled(connected); |
macroBtnList.append(pushButton); |
QVBoxLayout *tmpLayout = new QVBoxLayout(); |
tmpLayout->addWidget(lineEdit); |
tmpLayout->addWidget(pushButton); |
// Add layout/widgets to main layout |
mainLayout->addLayout(tmpLayout, macroCount, 0); |
mainLayout->addWidget(textEdit, macroCount, 1); |
mainLayout->setColumnStretch(1, 1); |
// Associate PushButton with its corresponding TextEdit |
sigMapper->setMapping(pushButton, textEdit); |
connect(pushButton, SIGNAL(clicked()), sigMapper, SLOT(map())); |
QLayoutItem *item = mainLayout->itemAtPosition(1, 1); |
int height = item->widget()->height(); |
this->resize(this->width(), this->height() + height + 8); |
btnDecreaseMacro->setEnabled(true); |
} |
void MacroController::Macro_RemoveEntry() |
{ |
// Remove and delete layout/widgets at last macro slot |
QLayoutItem *item = mainLayout->itemAtPosition(macroCount, 0); |
while(!item->isEmpty()) |
delete item->layout()->takeAt(0)->widget(); |
delete item; |
item = mainLayout->itemAtPosition(macroCount, 1); |
int height = item->widget()->height(); |
delete item->widget(); |
// Unmap and remove widgets from lists |
QPushButton *pushButton = macroBtnList.back(); |
sigMapper->removeMappings(pushButton); |
macroNameList.pop_back(); |
macroValueList.pop_back(); |
macroBtnList.pop_back(); |
macroCount--; |
this->resize(this->width(), this->height() - height - 8); |
if (macroCount == 1) |
btnDecreaseMacro->setEnabled(false); |
} |
void MacroController::Macro_WriteToFile() |
{ |
} |
void MacroController::Macro_ReadFromFile() |
{ |
} |
//Misc Projects/PcMarlinInterface/MacroController.h |
---|
0,0 → 1,47 |
#ifndef MACROCONTROLLER |
#define MACROCONTROLLER |
#include "GlobalDefines.h" |
#define MACRO_DEFAULT_COUNT 4 |
class MacroController : public QWidget |
{ |
Q_OBJECT |
public: |
MacroController(QWidget *parent = 0); |
~MacroController(); |
public slots: |
void Macro_EnableTransmit(void); |
void Macro_DisableTransmit(void); |
void Macro_InitTransmit(QWidget* t); |
void Macro_AddEntry(void); |
void Macro_RemoveEntry(void); |
void Macro_WriteToFile(void); |
void Macro_ReadFromFile(void); |
signals: |
void Macro_TransmitText(QString string); |
private: |
int macroCount; |
bool connected; |
QPushButton *btnExport; |
QPushButton *btnImport; |
QPushButton *btnIncreaseMacro; |
QPushButton *btnDecreaseMacro; |
QList<QLineEdit*> macroNameList; |
QList<QTextEdit*> macroValueList; |
QList<QPushButton*> macroBtnList; |
QGridLayout *mainLayout; |
QHBoxLayout *ioLayout; |
QSignalMapper *sigMapper; |
}; |
#endif // MACROCONTROLLER |
//Misc Projects/PcMarlinInterface/MainWindow.cpp |
---|
9,14 → 9,12 |
// Serial connection UI |
groupSerialInit = new QGroupBox("Initialization"); |
btnSerialConnect = new QPushButton("Connect"); |
btnSerialRefresh = new QPushButton("Refresh"); |
btnSerialConnect = new QPushButton("&Connect"); |
btnSerialRefresh = new QPushButton("&Refresh"); |
labelSerialPort = new QLabel("Port:"); |
labelSerialSpeed = new QLabel("Baud Rate:"); |
cboxSerialPort = new QComboBox(); |
// cboxSerialPort->setFixedWidth(100); |
cboxSerialSpeed = new QComboBox(); |
// cboxSerialSpeed->setFixedWidth(100); |
QHBoxLayout *serialInitLayout = new QHBoxLayout(); |
serialInitLayout->addWidget(btnSerialConnect); |
39,7 → 37,7 |
textSerialData->setReadOnly(true); |
textSerialTransmit = new QLineEdit(); |
textSerialTransmit->setFont(QFont("Consolas", 8)); |
btnSerialTransmit = new QPushButton("Send"); |
btnSerialTransmit = new QPushButton("&Send"); |
btnSerialClear = new QPushButton("Clear"); |
QHBoxLayout *serialTransmitLayout = new QHBoxLayout(); |
52,24 → 50,28 |
groupSerialData->setLayout(serialDataLayout); |
// Macro controller |
groupMacro = new QGroupBox("Other"); |
btnMacro = new QPushButton("&Macros"); |
QHBoxLayout *macroLayout = new QHBoxLayout(); |
macroLayout->addWidget(btnMacro); |
groupMacro->setLayout(macroLayout); |
groupMacro->setFixedSize(groupMacro->sizeHint()); |
// Main layout |
QGridLayout *mainLayout = new QGridLayout(); |
mainLayout->addWidget(groupSerialInit, 0, 0); |
mainLayout->addWidget(groupSerialData, 1, 0); |
mainLayout->addWidget(groupSerialInit, 0, 0, 1, 1, Qt::AlignLeft); |
mainLayout->addWidget(groupMacro, 0, 1, 1, 1, Qt::AlignLeft); |
mainLayout->addWidget(groupSerialData, 1, 0, 1, 2); |
mainLayout->setColumnStretch(0, 0); |
mainLayout->setColumnStretch(1, 1); |
centralWidget->setLayout(mainLayout); |
setWindowTitle("Paste Dispenser Controller"); |
setBaseSize(this->sizeHint()); |
// Initialize thread for connection to serial port |
serialThread = new QThread(); |
serialController = new SerialController(); |
serialController->moveToThread(serialThread); |
connect(btnSerialConnect, SIGNAL(clicked()), this, SLOT(Serial_ConnectToggleBtn())); |
connect(btnSerialRefresh, SIGNAL(clicked()), this, SIGNAL(Serial_QueryParameters())); |
connect(btnSerialTransmit, SIGNAL(clicked()), this, SLOT(Serial_TransmitStringBtn())); |
connect(textSerialTransmit, SIGNAL(returnPressed()), btnSerialTransmit, SIGNAL(clicked())); |
connect(btnSerialClear, SIGNAL(clicked()), this, SLOT(Serial_ClearBtn())); |
connect(this, SIGNAL(Serial_QueryParameters()), serialController, SLOT(Serial_QueryParameters())); |
connect(this, SIGNAL(Serial_Connect(QString,QString)), serialController, SLOT(Serial_Connect(QString,QString))); |
connect(this, SIGNAL(Serial_Disconnect()), serialController, SLOT(Serial_Disconnect())); |
81,8 → 83,24 |
connect(serialThread, SIGNAL(finished()), serialController, SLOT(deleteLater())); |
serialThread->start(); |
// Initialize macro widget |
macroController = new MacroController(); |
connect(macroController, SIGNAL(Macro_TransmitText(QString)), this, SLOT(Serial_PrepareTransmit(QString))); |
connect(serialController, SIGNAL(Serial_Connected()), macroController, SLOT(Macro_EnableTransmit())); |
connect(serialController, SIGNAL(Serial_Disconnected()), macroController, SLOT(Macro_DisableTransmit())); |
// Connect local widgets |
connect(btnSerialConnect, SIGNAL(clicked()), this, SLOT(Serial_ConnectToggleBtn())); |
connect(btnSerialRefresh, SIGNAL(clicked()), this, SIGNAL(Serial_QueryParameters())); |
connect(btnSerialTransmit, SIGNAL(clicked()), this, SLOT(Serial_PrepareTransmit())); |
connect(textSerialTransmit, SIGNAL(returnPressed()), btnSerialTransmit, SIGNAL(clicked())); |
connect(btnSerialClear, SIGNAL(clicked()), this, SLOT(Serial_ClearBtn())); |
connect(btnMacro, SIGNAL(clicked()), this, SLOT(Macro_ShowWindowBtn())); |
emit Serial_QueryParameters(); |
Serial_Disconnected(); |
setWindowTitle("Marlin Controller"); |
} |
MainWindow::~MainWindow() |
101,12 → 119,19 |
} |
} |
void MainWindow::Serial_TransmitStringBtn() |
void MainWindow::Serial_PrepareTransmit(QString string) |
{ |
emit Serial_TransmitString(textSerialTransmit->text()); |
if (string == "") { |
string = textSerialTransmit->text(); |
textSerialTransmit->setText(""); |
} |
emit Serial_TransmitString(string); |
textSerialData->setTextColor(Qt::darkBlue); |
textSerialData->append("TX: " + textSerialTransmit->text()); |
textSerialTransmit->setText(""); |
QStringList cmds = string.split('\n'); |
for (int i = 0; i < cmds.size(); i++) { |
textSerialData->append("TX: " + cmds[i]); |
} |
} |
void MainWindow::Serial_ClearBtn() |
114,6 → 139,11 |
textSerialData->clear(); |
} |
void MainWindow::Macro_ShowWindowBtn() |
{ |
macroController->show(); |
} |
void MainWindow::Serial_UpdateParameters(QStringList ports, QStringList speeds) |
{ |
cboxSerialPort->clear(); |
131,7 → 161,7 |
void MainWindow::Serial_Connected() |
{ |
btnSerialConnect->setText("Disconnect"); |
btnSerialConnect->setText("&Disconnect"); |
cboxSerialPort->setEnabled(false); |
cboxSerialSpeed->setEnabled(false); |
btnSerialRefresh->setEnabled(false); |
141,7 → 171,7 |
void MainWindow::Serial_Disconnected() |
{ |
btnSerialConnect->setText("Connect"); |
btnSerialConnect->setText("&Connect"); |
cboxSerialPort->setEnabled(true); |
cboxSerialSpeed->setEnabled(true); |
btnSerialRefresh->setEnabled(true); |
148,3 → 178,9 |
textSerialTransmit->setEnabled(false); |
btnSerialTransmit->setEnabled(false); |
} |
void MainWindow::closeEvent(QCloseEvent *event) |
{ |
macroController->close(); |
event->accept(); |
} |
//Misc Projects/PcMarlinInterface/MainWindow.h |
---|
3,7 → 3,7 |
#include "GlobalDefines.h" |
#include "SerialController.h" |
#include <QPlainTextEdit> |
#include "MacroController.h" |
class MainWindow : public QMainWindow |
{ |
20,9 → 20,11 |
void Serial_Disconnected(void); |
void Serial_ConnectToggleBtn(void); |
void Serial_TransmitStringBtn(void); |
void Serial_PrepareTransmit(QString string = ""); |
void Serial_ClearBtn(void); |
void Macro_ShowWindowBtn(void); |
signals: |
void Serial_QueryParameters(void); |
void Serial_Connect(QString port, QString speed); |
29,10 → 31,16 |
void Serial_Disconnect(void); |
void Serial_TransmitString(QString string); |
protected: |
void closeEvent(QCloseEvent *event); |
private: |
QWidget *centralWidget; |
// UI Stuff (Serial) |
// Serial controller + UI |
SerialController *serialController; |
QThread *serialThread; |
QGroupBox *groupSerialInit; |
QPushButton *btnSerialConnect; |
QPushButton *btnSerialRefresh; |
47,8 → 55,12 |
QPushButton *btnSerialTransmit; |
QPushButton *btnSerialClear; |
SerialController *serialController; |
QThread *serialThread; |
// Macro controller + UI |
MacroController *macroController; |
QGroupBox *groupMacro; |
QPushButton *btnMacro; |
}; |
#endif // MAINWINDOW_H |
//Misc Projects/PcMarlinInterface/PcMarlinInterface.pro |
---|
14,8 → 14,10 |
SOURCES += main.cpp \ |
MainWindow.cpp \ |
SerialController.cpp |
SerialController.cpp \ |
MacroController.cpp |
HEADERS += GlobalDefines.h \ |
MainWindow.h \ |
SerialController.h |
SerialController.h \ |
MacroController.h |
//Misc Projects/PcMarlinInterface/PcMarlinInterface.pro.user |
---|
1,6 → 1,6 |
<?xml version="1.0" encoding="UTF-8"?> |
<!DOCTYPE QtCreatorProject> |
<!-- Written by QtCreator 3.3.0, 2015-01-02T21:14:21. --> |
<!-- Written by QtCreator 3.3.0, 2015-01-02T21:18:20. --> |
<qtcreator> |
<data> |
<variable>EnvironmentId</variable> |
224,11 → 224,11 |
</valuelist> |
<value type="int" key="PE.EnvironmentAspect.Base">2</value> |
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/> |
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">PasteDispenserController</value> |
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">PasteDispenserController2</value> |
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:C:/Users/Kevin/Documents/Code/QT/PasteDispenserController/PasteDispenserController.pro</value> |
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">PcMarlinInterface</value> |
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> |
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:C:/Users/Kevin/Documents/Code/QT/PcMarlinInterface/PcMarlinInterface.pro</value> |
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value> |
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">PasteDispenserController.pro</value> |
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">PcMarlinInterface.pro</value> |
<value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value> |
<value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseTerminal">false</value> |
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value> |
//Misc Projects/PcMarlinInterface/SerialController.cpp |
---|
51,7 → 51,7 |
serialPort->setDataBits(QSerialPort::Data8); |
serialPort->setParity(QSerialPort::NoParity); |
serialPort->setFlowControl(QSerialPort::HardwareControl); |
// serialPort->setFlowControl(QSerialPort::HardwareControl); |
serialPort->setStopBits(QSerialPort::OneStop); |
// See http://umforum.ultimaker.com/index.php?/topic/5886-um2-controller-resetreboot-when-opening-usb-port-on-linux/ |
//Misc Projects/PcMarlinInterface/SerialController.h |
---|
5,7 → 5,7 |
#include <QtSerialPort> |
#define SERIAL_NEWLINE_CHAR "\n" |
#define SERIAL_BUFFER_SIZE 10 |
#define SERIAL_BUFFER_SIZE 32 |
class SerialController : public QObject |
{ |