QNEMainWindow::QNEMainWindow(QWidget *parent) : QMainWindow(parent) { scene = new QGraphicsScene(); QAction *quitAct = new QAction(tr("&Quit"), this); quitAct->setShortcuts(QKeySequence::Quit); quitAct->setStatusTip(tr("Quit the application")); connect(quitAct, SIGNAL(triggered()), qApp, SLOT(quit())); QAction *loadAct = new QAction(tr("&Load"), this); loadAct->setShortcuts(QKeySequence::Open); loadAct->setStatusTip(tr("Open a file")); connect(loadAct, SIGNAL(triggered()), this, SLOT(loadFile())); QAction *saveAct = new QAction(tr("&Save"), this); saveAct->setShortcuts(QKeySequence::Save); saveAct->setStatusTip(tr("Save a file")); connect(saveAct, SIGNAL(triggered()), this, SLOT(saveFile())); QAction *addAct = new QAction(tr("&Add"), this); addAct->setStatusTip(tr("Add a block")); connect(addAct, SIGNAL(triggered()), this, SLOT(addBlock())); fileMenu = menuBar()->addMenu(tr("&File")); fileMenu->addAction(addAct); fileMenu->addAction(loadAct); fileMenu->addAction(saveAct); fileMenu->addSeparator(); fileMenu->addAction(quitAct); setWindowTitle(tr("Node Editor")); QDockWidget *dock = new QDockWidget(tr("Nodes"), this); dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); view = new QGraphicsView(dock); view->setScene(scene); view->setRenderHint(QPainter::Antialiasing, true); dock->setWidget(view); addDockWidget(Qt::LeftDockWidgetArea, dock); nodesEditor = new QNodesEditor(this); nodesEditor->install(scene); QNEBlock *b = new QNEBlock(0); scene->addItem(b); b->addPort("test", 0, QNEPort::NamePort); b->addPort("TestBlock", 0, QNEPort::TypePort); b->addInputPort("in1"); b->addInputPort("in2"); b->addInputPort("in3"); b->addOutputPort("out1"); b->addOutputPort("out2"); b->addOutputPort("out3"); b = b->clone(); b->setPos(150, 0); b = b->clone(); b->setPos(150, 150); }
void QNodesEditor::addBlock(BlockType type, int x, int y) { static int id_count = 0; QNEBlock *block = nullptr; if(type == ImageIn) { QNEBlock *imgIn = new QNEBlock; scene->addItem(imgIn); imgIn->addPort(tr("Image In"), 0, QNEPort::NamePort); imgIn->addPort(" ", 0, QNEPort::TypePort); imgIn->addOutputPort("out [img]"); imgIn->setPos(x, y); imgIn->setID(id_count); imgIn->setType(ImageIn); id_count++; block = imgIn; } else if(type == ImageDisplay) { QNEBlock *imgDisp = new QNEBlock; scene->addItem(imgDisp); imgDisp->addPort(tr("Display Image"), 0, QNEPort::NamePort); imgDisp->addPort(" ", 0, QNEPort::TypePort); imgDisp->addInputPort("in [img]"); imgDisp->setPos(x, y); imgDisp->setID(id_count); imgDisp->setType(ImageDisplay); id_count++; block = imgDisp; } else if(type == GaussianBlur) { QNEBlock *gaussianBlur = new QNEBlock; scene->addItem(gaussianBlur); gaussianBlur->addPort(tr("Gaussian Blur"), 0, QNEPort::NamePort); gaussianBlur->addPort(" ", 0, QNEPort::TypePort); gaussianBlur->addInputPort("in [img]"); gaussianBlur->addInputPort("kernel width [uint]"); gaussianBlur->addInputPort("kernel height [uint]"); gaussianBlur->addPort("", 0, QNEPort::TypePort); gaussianBlur->addOutputPort("out [img]"); gaussianBlur->setPos(x, y); gaussianBlur->setID(id_count); gaussianBlur->setType(GaussianBlur); id_count++; block = gaussianBlur; } else if(type == Number) { QNENumberBlock *number = new QNENumberBlock; scene->addItem(number); number->initialize(/*this*/); number->setPos(x, y); number->setID(id_count); number->setType(Number); id_count++; block = number; } if(block != nullptr) // Check if an item was actually added { for(INodesEditorListener *listener : listeners) { listener->nodeAdded(block); } } }