Subversion Repositories Code-Repo

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
344 Kevin 1
#include "MainWindow.h"
2
 
3
MainWindow::MainWindow(QWidget *parent) :
4
    QMainWindow(parent)
5
{
6
    // Set central widget
7
    centralWidget = new QWidget();
8
    setCentralWidget(centralWidget);
9
 
10
    // Serial connection UI
11
    groupSerialInit = new QGroupBox("Initialization");
345 Kevin 12
    btnSerialConnect = new QPushButton("&Connect");
13
    btnSerialRefresh = new QPushButton("&Refresh");
344 Kevin 14
    labelSerialPort = new QLabel("Port:");
15
    labelSerialSpeed = new QLabel("Baud Rate:");
16
    cboxSerialPort = new QComboBox();
17
    cboxSerialSpeed = new QComboBox();
346 Kevin 18
    cboxSerialSpeed->setEditable(true);
344 Kevin 19
 
20
    QHBoxLayout *serialInitLayout = new QHBoxLayout();
21
    serialInitLayout->addWidget(btnSerialConnect);
22
    serialInitLayout->addWidget(labelSerialPort);
23
    serialInitLayout->addWidget(cboxSerialPort);
24
    serialInitLayout->addWidget(labelSerialSpeed);
25
    serialInitLayout->addWidget(cboxSerialSpeed);
26
    serialInitLayout->addWidget(btnSerialRefresh);
27
    serialInitLayout->addStretch();
28
    groupSerialInit->setLayout(serialInitLayout);
29
    groupSerialInit->setFixedSize(groupSerialInit->sizeHint());
30
 
31
 
32
    // Serial data UI
33
    groupSerialData = new QGroupBox("Data");
34
    textSerialData = new QTextEdit();
35
    textSerialData->setCurrentFont(QFont("Consolas", 8));
36
    textSerialData->append("Waiting for serial connection...");
37
    textSerialData->setMinimumHeight(100);
38
    textSerialData->setReadOnly(true);
39
    textSerialTransmit = new QLineEdit();
40
    textSerialTransmit->setFont(QFont("Consolas", 8));
345 Kevin 41
    btnSerialTransmit = new QPushButton("&Send");
344 Kevin 42
    btnSerialClear = new QPushButton("Clear");
43
 
44
    QHBoxLayout *serialTransmitLayout = new QHBoxLayout();
45
    serialTransmitLayout->addWidget(textSerialTransmit);
46
    serialTransmitLayout->addWidget(btnSerialTransmit);
47
    serialTransmitLayout->addWidget(btnSerialClear);
48
    QVBoxLayout *serialDataLayout = new QVBoxLayout();
49
    serialDataLayout->addWidget(textSerialData);
50
    serialDataLayout->addLayout(serialTransmitLayout);
51
    groupSerialData->setLayout(serialDataLayout);
52
 
53
 
345 Kevin 54
    // Macro controller
55
    groupMacro = new QGroupBox("Other");
56
    btnMacro = new QPushButton("&Macros");
57
    QHBoxLayout *macroLayout = new QHBoxLayout();
58
    macroLayout->addWidget(btnMacro);
59
    groupMacro->setLayout(macroLayout);
60
    groupMacro->setFixedSize(groupMacro->sizeHint());
61
 
62
 
344 Kevin 63
    // Main layout
64
    QGridLayout *mainLayout = new QGridLayout();
345 Kevin 65
    mainLayout->addWidget(groupSerialInit, 0, 0, 1, 1, Qt::AlignLeft);
66
    mainLayout->addWidget(groupMacro, 0, 1, 1, 1, Qt::AlignLeft);
67
    mainLayout->addWidget(groupSerialData, 1, 0, 1, 2);
68
    mainLayout->setColumnStretch(0, 0);
69
    mainLayout->setColumnStretch(1, 1);
344 Kevin 70
    centralWidget->setLayout(mainLayout);
71
 
345 Kevin 72
    // Initialize thread for connection to serial port
344 Kevin 73
    serialThread = new QThread();
74
    serialController = new SerialController();
75
    serialController->moveToThread(serialThread);
76
    connect(this, SIGNAL(Serial_QueryParameters()), serialController, SLOT(Serial_QueryParameters()));
77
    connect(this, SIGNAL(Serial_Connect(QString,QString)), serialController, SLOT(Serial_Connect(QString,QString)));
78
    connect(this, SIGNAL(Serial_Disconnect()), serialController, SLOT(Serial_Disconnect()));
79
    connect(this, SIGNAL(Serial_TransmitString(QString)), serialController, SLOT(Serial_TransmitString(QString)));
80
    connect(serialController, SIGNAL(Serial_UpdateParameters(QStringList,QStringList)), this, SLOT(Serial_UpdateParameters(QStringList,QStringList)));
81
    connect(serialController, SIGNAL(Serial_ReceivedString(QString)), this, SLOT(Serial_ReceivedString(QString)));
82
    connect(serialController, SIGNAL(Serial_Connected()), this, SLOT(Serial_Connected()));
83
    connect(serialController, SIGNAL(Serial_Disconnected()), this, SLOT(Serial_Disconnected()));
84
    connect(serialThread, SIGNAL(finished()), serialController, SLOT(deleteLater()));
85
    serialThread->start();
86
 
345 Kevin 87
    // Initialize macro widget
88
    macroController = new MacroController();
89
    connect(macroController, SIGNAL(Macro_TransmitText(QString)), this, SLOT(Serial_PrepareTransmit(QString)));
90
    connect(serialController, SIGNAL(Serial_Connected()), macroController, SLOT(Macro_EnableTransmit()));
91
    connect(serialController, SIGNAL(Serial_Disconnected()), macroController, SLOT(Macro_DisableTransmit()));
92
 
93
    // Connect local widgets
94
    connect(btnSerialConnect, SIGNAL(clicked()), this, SLOT(Serial_ConnectToggleBtn()));
95
    connect(btnSerialRefresh, SIGNAL(clicked()), this, SIGNAL(Serial_QueryParameters()));
96
    connect(btnSerialTransmit, SIGNAL(clicked()), this, SLOT(Serial_PrepareTransmit()));
97
    connect(textSerialTransmit, SIGNAL(returnPressed()), btnSerialTransmit, SIGNAL(clicked()));
98
    connect(btnSerialClear, SIGNAL(clicked()), this, SLOT(Serial_ClearBtn()));
99
    connect(btnMacro, SIGNAL(clicked()), this, SLOT(Macro_ShowWindowBtn()));
100
 
344 Kevin 101
    emit Serial_QueryParameters();
102
    Serial_Disconnected();
345 Kevin 103
 
104
    setWindowTitle("Marlin Controller");
347 Kevin 105
    setWindowIcon(QIcon(":/External/Resources/Icon_16.bmp"));
344 Kevin 106
}
107
 
108
MainWindow::~MainWindow()
109
{
110
    serialThread->quit();
111
}
112
 
113
void MainWindow::Serial_ConnectToggleBtn()
114
{
115
    if (serialController->connected) {
116
        emit Serial_Disconnect();
117
    } else {
118
        if (cboxSerialPort->currentText() != "" && cboxSerialSpeed->currentText() != "") {
119
            emit Serial_Connect(cboxSerialPort->currentText(), cboxSerialSpeed->currentText());
120
        }
121
    }
122
}
123
 
345 Kevin 124
void MainWindow::Serial_PrepareTransmit(QString string)
344 Kevin 125
{
345 Kevin 126
    if (string == "") {
127
        string = textSerialTransmit->text();
128
        textSerialTransmit->setText("");
129
    }
130
    emit Serial_TransmitString(string);
344 Kevin 131
    textSerialData->setTextColor(Qt::darkBlue);
345 Kevin 132
 
133
    QStringList cmds = string.split('\n');
134
    for (int i = 0; i < cmds.size(); i++) {
135
        textSerialData->append("TX:  " + cmds[i]);
136
    }
344 Kevin 137
}
138
 
139
void MainWindow::Serial_ClearBtn()
140
{
141
    textSerialData->clear();
142
}
143
 
345 Kevin 144
void MainWindow::Macro_ShowWindowBtn()
145
{
146
    macroController->show();
147
}
148
 
344 Kevin 149
void MainWindow::Serial_UpdateParameters(QStringList ports, QStringList speeds)
150
{
151
    cboxSerialPort->clear();
152
    cboxSerialPort->addItems(ports);
153
 
154
    cboxSerialSpeed->clear();
155
    cboxSerialSpeed->addItems(speeds);
156
}
157
 
158
void MainWindow::Serial_ReceivedString(QString string)
159
{
160
    textSerialData->setTextColor(Qt::darkRed);
161
    textSerialData->append("RX:  " + string);
162
}
163
 
164
void MainWindow::Serial_Connected()
165
{
345 Kevin 166
    btnSerialConnect->setText("&Disconnect");
344 Kevin 167
    cboxSerialPort->setEnabled(false);
168
    cboxSerialSpeed->setEnabled(false);
169
    btnSerialRefresh->setEnabled(false);
170
    textSerialTransmit->setEnabled(true);
171
    btnSerialTransmit->setEnabled(true);
172
}
173
 
174
void MainWindow::Serial_Disconnected()
175
{
345 Kevin 176
    btnSerialConnect->setText("&Connect");
344 Kevin 177
    cboxSerialPort->setEnabled(true);
178
    cboxSerialSpeed->setEnabled(true);
179
    btnSerialRefresh->setEnabled(true);
180
    textSerialTransmit->setEnabled(false);
181
    btnSerialTransmit->setEnabled(false);
182
}
345 Kevin 183
 
184
void MainWindow::closeEvent(QCloseEvent *event)
185
{
186
    macroController->close();
187
    event->accept();
188
}