Newer
Older
raoul
committed
#include "main.h"
#include "machine.h"
#include <QSerialPortInfo>
#include <QDebug>
#include <qtmaterialtooltabs_internal.h>
#include "qtmaterialiconbutton.h"
#include "qtmaterialtoggle.h"
#include "qtmaterialcheckbox.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
raoul
committed
ui->setupUi(this);
raoul
committed
addTab();
ui->tabWidget->removeTab(0);
connect(machine.get(), &Machine::connectionChanged, this, &MainWindow::on_machineConnectionChanged);
connect(machine.get(), &Machine::stateChanged, this, &MainWindow::on_machineStateChanged);
raoul
committed
delete ui;
}
void MainWindow::keyPressEvent(QKeyEvent* event)
{
QWidget* widget = ui->tabWidget->currentWidget();
OE_root* root = static_cast<OE_root*>(widget->property("OEroot").value<void*>());
root->display->keyPressEvent(event);
}
void MainWindow::keyReleaseEvent(QKeyEvent* event)
{
QWidget* widget = ui->tabWidget->currentWidget();
OE_root* root = static_cast<OE_root*>(widget->property("OEroot").value<void*>());
root->display->keyReleaseEvent(event);
raoul
committed
void MainWindow::addTab()
raoul
committed
QWidget* newtab = new QWidget();
newtab->setObjectName(QStringLiteral("newtab"));
QGridLayout * newGridLayout = new QGridLayout(newtab);
newGridLayout->setSpacing(6);
newGridLayout->setContentsMargins(11, 11, 11, 11);
newGridLayout->setObjectName(QStringLiteral("newGridLayout"));
newGridLayout->setHorizontalSpacing(0);
newGridLayout->setContentsMargins(0, 0, 0, 0);
OE_interfaceDisplay* newOpenGLWidget = new OE_interfaceDisplay(newtab);
newOpenGLWidget->setObjectName(QStringLiteral("newOpenGLWidget"));
newOpenGLWidget->setMouseTracking(true);
newOpenGLWidget->setAcceptDrops(true);
newGridLayout->addWidget(newOpenGLWidget, 0, 0, 1, 1);
OE_root* newRoot = new OE_root();
newRoot->document = new OE_document();
newRoot->interfaceDisplay = newOpenGLWidget;
newRoot->interfaceDisplay->setDocument(newRoot->document);
newRoot->display = newRoot->interfaceDisplay;
newRoot->controller = new OE_controller(newRoot->display, newRoot->document);
newRoot->controller->initNewDocument();
newRoot->display->setController(newRoot->controller);
//opengl window overlay layout
QBoxLayout *openglWidgetLayout = new QHBoxLayout;
newOpenGLWidget->setLayout(openglWidgetLayout);
openglWidgetLayout->setSpacing(0);
openglWidgetLayout->setMargin(0);
openglWidgetLayout->setContentsMargins(0, 0, 0, 0);
//left tool tab
m_leftToolTab = new OE_ui_toolBox(this, newRoot);
openglWidgetLayout->addWidget(m_leftToolTab);
openglWidgetLayout->setStretch(0, 0);
//viewport top bar (viewport options)
QBoxLayout *topGlWindowLayout = topGlWindowBar();
openglWidgetLayout->addLayout(topGlWindowLayout);
openglWidgetLayout->setStretch(1, 0);
openglWidgetLayout->addStretch(1);
//viewport top bar (viewport options)
QBoxLayout *stitchParamLayout = stitchParam();
openglWidgetLayout->addLayout(stitchParamLayout);
openglWidgetLayout->setStretch(3, 0);
//right stitches list
OE_ui_stitchList *stitchesList = new OE_ui_stitchList();
stitchesList->setFixedWidth(120);
/*stitchesList->setMargin(0);
stitchesList->setContentsMargins(0,0,0,0);*/
/*QtMaterialFlatButton* button = new QtMaterialFlatButton("here soon the stitches list");
button->setFont(QFont("Roboto", 8, QFont::Medium));
button->setUseThemeColors(true);
button->setRole(Material::Role::Primary);
button->setBackgroundMode(Qt::BGMode::OpaqueMode);
button->setSizePolicy(QSizePolicy ::Expanding, QSizePolicy ::Expanding );
button->setHaloVisible(false);
button->setMinimumHeight(150);
stitchesList->addWidget(button);
*/
openglWidgetLayout->addWidget(stitchesList);
raoul
committed
int newIndex = ui->tabWidget->addTab(newtab, QString("newtab"));
ui->tabWidget->setTabText(ui->tabWidget->indexOf(newtab), QApplication::translate("MainWindow", "Design", nullptr));
raoul
committed
QVariant rootPointerProperty(QVariant::fromValue(static_cast<void*>(newRoot)));
ui->tabWidget->widget(newIndex)->setProperty("OEroot", rootPointerProperty);
raoul
committed
ui->tabWidget->setCurrentIndex(newIndex);
update();
}
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
QtMaterialIconButton* MainWindow::setIconButton(QString iconFile, const char * method = NULL)
{
QIcon icon;
icon.addFile(iconFile, QSize(), QIcon::Normal, QIcon::Off);
QtMaterialIconButton* button = new QtMaterialIconButton(icon);
button->setUseThemeColors(false);
button->setIconSize(QSize(25,25));
if (method)
connect(button, SIGNAL(clicked(bool)), this, method);
return button;
}
QBoxLayout* MainWindow::topGlWindowBar()
{
QHBoxLayout *topGlWindowLayout = new QHBoxLayout;
topGlWindowLayout->setAlignment(Qt::AlignTop);
topGlWindowLayout->setSpacing(4);
topGlWindowLayout->setMargin(3);
topGlWindowLayout->addWidget(setIconButton(":/resources/zoom_selection.svg"));
topGlWindowLayout->addWidget(setIconButton(":/resources/zoom_document.svg"));
topGlWindowLayout->addSpacing(8);
topGlWindowLayout->addWidget(setIconButton(":/resources/grid.svg"));
topGlWindowLayout->addWidget(setIconButton(":/resources/show_curve.svg"));
topGlWindowLayout->addWidget(setIconButton(":/resources/show_stitch.svg"));
topGlWindowLayout->addSpacing(8);
topGlWindowLayout->addWidget(setIconButton(":/resources/select_curve.svg"));
topGlWindowLayout->addWidget(setIconButton(":/resources/select_stitch.svg"));
return topGlWindowLayout;
}
QBoxLayout* MainWindow::stitchParam()
{
QVBoxLayout *topGlWindowLayout = new QVBoxLayout;
topGlWindowLayout->setAlignment(Qt::AlignTop);
topGlWindowLayout->addWidget(new QtMaterialToggle());
QtMaterialCheckBox* m_checkBox = new QtMaterialCheckBox();
m_checkBox->setText("param2");
m_checkBox->setIconSize(QSize(5,5));
topGlWindowLayout->addWidget(m_checkBox);
topGlWindowLayout->setAlignment(m_checkBox, Qt::AlignCenter);
topGlWindowLayout->addWidget(new QtMaterialFlatButton("param3"));
return topGlWindowLayout;
}
QtMaterialFlatButton* MainWindow::setButton(QString name, const char * method = NULL)
{
QtMaterialFlatButton* button = new QtMaterialFlatButton(name);
button->setFont(QFont("Roboto", 8, QFont::Medium));
button->setUseThemeColors(true);
button->setHaloVisible(false);
button->setMinimumHeight(0);
if (method)
connect(button, SIGNAL(clicked(bool)), this, method);
return button;
}
raoul
committed
OE_interfaceDisplay* MainWindow::getItfDisplay()
{
QWidget* widget = ui->tabWidget->currentWidget();
OE_root* root = static_cast<OE_root*>(widget->property("OEroot").value<void*>());
return root->interfaceDisplay;
}
void MainWindow::sendKeyPulse(Qt::Key key, Qt::KeyboardModifiers modifiers)
{
QKeyEvent fakeKeyPress(QKeyEvent::Type::KeyPress, key, modifiers);
getItfDisplay()->key(&fakeKeyPress);
QKeyEvent fakeKeyRelease(QKeyEvent::Type::KeyRelease, key, modifiers);
getItfDisplay()->key(&fakeKeyRelease);
}
raoul
committed
void MainWindow::on_tabWidget_tabCloseRequested(int index)
{
// TODO some brain and warn if loss of data
if (ui->tabWidget->count() == 1)
addTab();
raoul
committed
QWidget* widget = ui->tabWidget->widget(index);
OE_root* root = static_cast<OE_root*>(widget->property("OEroot").value<void*>());
raoul
committed
delete root->controller;
delete root;
ui->tabWidget->removeTab(index);
raoul
committed
void MainWindow::on_actionNew_triggered()
{
addTab();
}
void MainWindow::on_actionClose_triggered()
{
on_tabWidget_tabCloseRequested(ui->tabWidget->currentIndex());
}
void MainWindow::on_actionOpen_triggered()
{ // TODO real call to a load function, not a fake key event
sendKeyPulse(Qt::Key_O, Qt::KeyboardModifier::ControlModifier);
raoul
committed
}
void MainWindow::on_actionSave_triggered()
{ // TODO real call to a save function, not a fake key event
sendKeyPulse(Qt::Key_S, Qt::KeyboardModifier::ControlModifier);
raoul
committed
}
void MainWindow::on_actionLine_triggered()
{ // TODO real call to a save function, not a fake key event
sendKeyPulse(Qt::Key_L, Qt::KeyboardModifier::NoModifier);
raoul
committed
}
void MainWindow::on_actionUndo_triggered()
{
sendKeyPulse(Qt::Key_Z, Qt::KeyboardModifier::ControlModifier);
raoul
committed
}
void MainWindow::on_actionRedo_triggered()
{
sendKeyPulse(Qt::Key_Z, Qt::KeyboardModifier::ControlModifier|Qt::KeyboardModifier::ShiftModifier);
raoul
committed
}
void MainWindow::on_actionBirail_triggered()
{
sendKeyPulse(Qt::Key_B, Qt::KeyboardModifier::NoModifier);
raoul
committed
}
void MainWindow::on_actionPattern1_triggered() { sendKeyPulse(Qt::Key_1, Qt::KeyboardModifier::KeypadModifier); }
void MainWindow::on_actionPattern2_triggered() { sendKeyPulse(Qt::Key_2, Qt::KeyboardModifier::KeypadModifier); }
void MainWindow::on_actionPattern3_triggered() { sendKeyPulse(Qt::Key_3, Qt::KeyboardModifier::KeypadModifier); }
void MainWindow::on_actionPattern4_triggered() { sendKeyPulse(Qt::Key_4, Qt::KeyboardModifier::KeypadModifier); }
void MainWindow::on_actionPattern5_triggered() { sendKeyPulse(Qt::Key_5, Qt::KeyboardModifier::KeypadModifier); }
void MainWindow::on_actionPattern6_triggered() { sendKeyPulse(Qt::Key_6, Qt::KeyboardModifier::KeypadModifier); }
void MainWindow::on_actionPattern7_triggered() { sendKeyPulse(Qt::Key_7, Qt::KeyboardModifier::KeypadModifier); }
void MainWindow::on_actionPattern8_triggered() { sendKeyPulse(Qt::Key_8, Qt::KeyboardModifier::KeypadModifier); }
void MainWindow::on_actionPattern9_triggered() { sendKeyPulse(Qt::Key_9, Qt::KeyboardModifier::KeypadModifier); }
raoul
committed
void MainWindow::on_tabWidget_currentChanged(int index)
{
if (index >= 0)
{ // Discard previous modifiers on that widget
QKeyEvent fakeKey(QKeyEvent::Type::KeyRelease, Qt::Key_Escape, Qt::KeyboardModifier::NoModifier);
getItfDisplay()->key(&fakeKey);
raoul
committed
}
}
void MainWindow::on_actionCloseCurve_triggered()
{
sendKeyPulse(Qt::Key_C, Qt::KeyboardModifier::NoModifier);
raoul
committed
}
void MainWindow::on_actionReverse_curve_R_triggered()
{
sendKeyPulse(Qt::Key_R, Qt::KeyboardModifier::NoModifier);
raoul
committed
}
void MainWindow::on_actionFill_triggered()
sendKeyPulse(Qt::Key_F, Qt::KeyboardModifier::NoModifier);
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
void MainWindow::on_actionConnectToMachine_triggered(bool checked)
{
QString msg;
//msg += checked ? QString::fromUtf8("[ Connected ] ") : QString::fromUtf8("[Disconnected] ");
//msg += QString("Seq %1. Status %2. Space %3/%4. Pos (%5, %6). Point %7. tSensor %8")
// .arg(42,5).arg(7).arg(800,5).arg(1016,-5).arg(24,5).arg(32,-5).arg(301,4).arg(123);
//status.setText(msg);
if (checked)
{
QList<QSerialPortInfo> ports = QSerialPortInfo::availablePorts();
if (ports.size())
{
machine->connectPort(ports.front().portName());
for (const QSerialPortInfo& port : ports)
{
qDebug() << port.portName() << ". " << port.description() << ". " << port.manufacturer() << ". "
<< port.vendorIdentifier() << ". " << port.productIdentifier();
}
}
}
else
{
machine->disconnectPort();
}
}
void MainWindow::on_machineConnectionChanged(bool connected)
{
if (!connected)
{
QString msg = status.text().replace("[ Connected ]", "[Disconnected]");
status.setText(msg);
}
ui->actionMachineRun->setEnabled(connected);
ui->actionMachineLoad->setEnabled(connected);
}
void MainWindow::on_machineStateChanged(Machine::SlaveInfo info)
{
QString msg;
msg = QString("[ Connected ] Seq %1. Status %2. Space %3/%4. Pos (%5, %6). Point %7")
.arg(info.sequence,5)
.arg(info.status)
.arg(info.spaceSize-info.freeSpace,5).arg(info.spaceSize,-5)
.arg(info.posX,5).arg(info.posY,-5)
.arg(info.nPoint,4);
status.setText(msg);
printf("%s\n",msg.toStdString().c_str());
}
void MainWindow::on_actionMachineRun_triggered()
{
machineRun();
}
void MainWindow::on_actionMachineLoad_triggered()
{
machineLoad();
}
void MainWindow::machineRun()
{
if (machine)
machine->startMove();
}