#include "mainwindow.h" #include "ui_mainwindow.h" #include "main.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); addTab(); ui->tabWidget->removeTab(0); } MainWindow::~MainWindow() { delete ui; } void MainWindow::keyPressEvent(QKeyEvent* event) { // TODO manage program-level shortcuts // else forward to active document key handler ui->openGLWidget->keyPressEvent(event); } void MainWindow::keyReleaseEvent(QKeyEvent* event) { // TODO manage program-level shortcuts // else forward to active document key handler ui->openGLWidget->keyReleaseEvent(event); } void MainWindow::addTab() { 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); int newIndex = ui->tabWidget->addTab(newtab, QString("newtab")); ui->tabWidget->setTabText(ui->tabWidget->indexOf(newtab), QApplication::translate("MainWindow", "Design", nullptr)); 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); QVariant rootPointerProperty(QVariant::fromValue(static_cast(newRoot))); ui->tabWidget->widget(newIndex)->setProperty("OEroot", rootPointerProperty); ui->tabWidget->setCurrentIndex(newIndex); update(); } OE_interfaceDisplay* MainWindow::getItfDisplay() { QWidget* widget = ui->tabWidget->currentWidget(); OE_root* root = static_cast(widget->property("OEroot").value()); return root->interfaceDisplay; } void MainWindow::on_tabWidget_tabCloseRequested(int index) { // TODO some brain and warn if loss of data QWidget* widget = ui->tabWidget->widget(index); OE_root* root = static_cast(widget->property("OEroot").value()); delete root->document; delete root->controller; delete root; ui->tabWidget->removeTab(index); if (ui->tabWidget->count() == 0) addTab(); } 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 QKeyEvent fakeKey(QKeyEvent::Type::KeyPress, Qt::Key_O, Qt::KeyboardModifier::ControlModifier); getItfDisplay()->key(&fakeKey); } void MainWindow::on_actionSave_triggered() { // TODO real call to a save function, not a fake key event QKeyEvent fakeKey(QKeyEvent::Type::KeyPress, Qt::Key_S, Qt::KeyboardModifier::ControlModifier); getItfDisplay()->key(&fakeKey); } void MainWindow::on_actionLine_triggered() { // TODO real call to a save function, not a fake key event QKeyEvent fakeKey(QKeyEvent::Type::KeyPress, Qt::Key_L, Qt::KeyboardModifier::NoModifier); getItfDisplay()->key(&fakeKey); } void MainWindow::on_actionUndo_triggered() { QKeyEvent fakeKey(QKeyEvent::Type::KeyPress, Qt::Key_Z, Qt::KeyboardModifier::ControlModifier); getItfDisplay()->key(&fakeKey); } void MainWindow::on_actionRedo_triggered() { QKeyEvent fakeKey(QKeyEvent::Type::KeyPress, Qt::Key_Z, Qt::KeyboardModifier::ControlModifier|Qt::KeyboardModifier::ShiftModifier); getItfDisplay()->key(&fakeKey); } void MainWindow::on_actionBirail_triggered() { QKeyEvent fakeKey(QKeyEvent::Type::KeyPress, Qt::Key_B, Qt::KeyboardModifier::NoModifier); getItfDisplay()->key(&fakeKey); } void MainWindow::on_actionPattern1_triggered() { QKeyEvent fakeKey(QKeyEvent::Type::KeyPress, Qt::Key_1, Qt::KeyboardModifier::KeypadModifier); getItfDisplay()->key(&fakeKey); } void MainWindow::on_actionPattern2_triggered() { QKeyEvent fakeKey(QKeyEvent::Type::KeyPress, Qt::Key_2, Qt::KeyboardModifier::KeypadModifier); getItfDisplay()->key(&fakeKey); } void MainWindow::on_actionPattern3_triggered() { QKeyEvent fakeKey(QKeyEvent::Type::KeyPress, Qt::Key_3, Qt::KeyboardModifier::KeypadModifier); getItfDisplay()->key(&fakeKey); } void MainWindow::on_actionPattern4_triggered() { QKeyEvent fakeKey(QKeyEvent::Type::KeyPress, Qt::Key_4, Qt::KeyboardModifier::KeypadModifier); getItfDisplay()->key(&fakeKey); } void MainWindow::on_actionPattern5_triggered() { QKeyEvent fakeKey(QKeyEvent::Type::KeyPress, Qt::Key_5, Qt::KeyboardModifier::KeypadModifier); getItfDisplay()->key(&fakeKey); } void MainWindow::on_actionPattern6_triggered() { QKeyEvent fakeKey(QKeyEvent::Type::KeyPress, Qt::Key_6, Qt::KeyboardModifier::KeypadModifier); getItfDisplay()->key(&fakeKey); } void MainWindow::on_actionPattern7_triggered() { QKeyEvent fakeKey(QKeyEvent::Type::KeyPress, Qt::Key_7, Qt::KeyboardModifier::KeypadModifier); getItfDisplay()->key(&fakeKey); } void MainWindow::on_actionPattern8_triggered() { QKeyEvent fakeKey(QKeyEvent::Type::KeyPress, Qt::Key_8, Qt::KeyboardModifier::KeypadModifier); getItfDisplay()->key(&fakeKey); } void MainWindow::on_actionPattern9_triggered() { QKeyEvent fakeKey(QKeyEvent::Type::KeyPress, Qt::Key_9, Qt::KeyboardModifier::KeypadModifier); getItfDisplay()->key(&fakeKey); } void MainWindow::on_tabWidget_currentChanged(int index) { if (index >= 0) { // Ugly hack because OE_actions can't work on multiple documents (shame on you) QWidget* widget = ui->tabWidget->widget(index); OE_root* root = static_cast(widget->property("OEroot").value()); OE_actions::setCurrentDocument(root->document); } } void MainWindow::on_actionCloseCurve_triggered() { QKeyEvent fakeKey(QKeyEvent::Type::KeyPress, Qt::Key_C, Qt::KeyboardModifier::NoModifier); getItfDisplay()->key(&fakeKey); } void MainWindow::on_actionReverse_curve_R_triggered() { QKeyEvent fakeKey(QKeyEvent::Type::KeyPress, Qt::Key_R, Qt::KeyboardModifier::NoModifier); getItfDisplay()->key(&fakeKey); } void MainWindow::on_actionFill_triggered() { QKeyEvent fakeKey(QKeyEvent::Type::KeyPress, Qt::Key_F, Qt::KeyboardModifier::NoModifier); getItfDisplay()->key(&fakeKey); }