void QNEMainWindow::addBlock() { QNEBlock *b = new QNEBlock(0); scene->addItem(b); static const char* names[] = {"Vin", "Voutsadfasdf", "Imin", "Imax", "mul", "add", "sub", "div", "Conv", "FFT"}; for (int i = 0; i < 4 + rand() % 3; i++) { b->addPort(names[rand() % 10], rand() % 2, 0, 0); b->setPos(view->sceneRect().center().toPoint()); } }
void QNEMainWindow::addBlock() { static int n_item=3; QNEBlock *b = new QNEBlock(0); scene->addItem(b); b->block_name="U"+QString::number(n_item); b->block_type="Source"; static const char* names[] = {"Vin", "Voutsadfasdf", "Imin", "Imax", "mul", "add", "sub", "div", "Conv", "FFT"}; for (int i = 0; i < 4 + rand() % 3; i++) { b->addPort(names[rand() % 10], rand() % 2, 0, 0); b->setPos(view->sceneRect().center().toPoint()); } n_item++; }
void QNodesEditor::load(QDataStream &ds) { scene->clear(); QMap<quint64, QNEPort*> portMap; while (!ds.atEnd()) { int type; ds >> type; if (type == QNEBlock::Type) { QNEBlock *block = new QNEBlock(0); scene->addItem(block); block->load(ds, portMap); } else if (type == QNEConnection::Type) { QNEConnection *conn = new QNEConnection(0); scene->addItem(conn); conn->load(ds, portMap); } } }
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); } } }
bool QNodesEditor::eventFilter(QObject *o, QEvent *e) { QGraphicsSceneMouseEvent *me = (QGraphicsSceneMouseEvent*) e; switch ((int) e->type()) { case QEvent::GraphicsSceneMousePress: { switch ((int) me->button()) { case Qt::LeftButton: { QGraphicsItem *item = itemAt(me->scenePos()); if (item && item->type() == QNEPort::Type) { conn = new QNEConnection(0); scene->addItem(conn); conn->setPort1((QNEPort*) item); conn->setPos1(item->scenePos()); conn->setPos2(me->scenePos()); conn->updatePath(); return true; } else if (item && item->type() == QNEBlock::Type) { /* if (selBlock) selBlock->setSelected(); */ // selBlock = (QNEBlock*) item; } break; } case Qt::RightButton: { QGraphicsItem *item = itemAt(me->scenePos()); if (item && (item->type() == QNEConnection::Type)) { QNEConnection *conn = (QNEConnection *) item; QNEBlock *node1 = (QNEBlock *) conn->port1()->parentItem(); QNEBlock *node2 = (QNEBlock *) conn->port2()->parentItem(); for(INodesEditorListener *listener : listeners) { listener->connectionDeleted(node1, node2); } delete item; } else if(item && (item->type() == QNEBlock::Type)) { QNEBlock *block = (QNEBlock *) item; for(INodesEditorListener *listener : listeners) { listener->nodeDeleted(block->id(), block->type()); } delete item; } // if (selBlock == (QNEBlock*) item) // selBlock = 0; break; } } break; } case QEvent::GraphicsSceneMouseMove: { if (conn) { conn->setPos2(me->scenePos()); conn->updatePath(); return true; } break; } case QEvent::GraphicsSceneMouseRelease: { if (conn && me->button() == Qt::LeftButton) { QGraphicsItem *item = itemAt(me->scenePos()); if (item && item->type() == QNEPort::Type) { QNEPort *port1 = conn->port1(); QNEPort *port2 = (QNEPort*) item; if (port1->block() != port2->block() && port1->isOutput() != port2->isOutput() && !port1->isConnected(port2)) { conn->setPos2(port2->scenePos()); conn->setPort2(port2); conn->updatePath(); conn = 0; QNEBlock *node1 = (QNEBlock *) port1->parentItem(); QNEBlock *node2 = (QNEBlock *) port2->parentItem(); for(INodesEditorListener *listener : listeners) { listener->connectionMade(node1, node2); } return true; } } delete conn; conn = 0; return true; } break; } } return QObject::eventFilter(o, e); }