Esempio n. 1
0
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());
  }
}
Esempio n. 2
0
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++;
}
Esempio n. 3
0
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);
		}
	}
}
Esempio n. 4
0
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);
}
Esempio n. 5
0
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);
		}
	}
}
Esempio n. 6
0
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);
}