void GraphViewer::onSceneMouseRelease(QGraphicsSceneMouseEvent *mouseEvent) { // need to put the connecting line on the background otherwise it is detected under the mouse _drawingEdge->setZValue(EDGE_LINE_Z); QGraphicsItem * item = _scene.itemAt(mouseEvent->scenePos(), QTransform()); if (qgraphicsitem_cast<QGraphicsEllipseItem*>(item) || qgraphicsitem_cast<QGraphicsSimpleTextItem*>(item)) { QGraphicsEllipseItem* vertex = qgraphicsitem_cast<QGraphicsEllipseItem*>(item->parentItem()); if (!vertex) vertex = qgraphicsitem_cast<QGraphicsEllipseItem*>(item); if (vertex) { double x = _drawingEdge->transform().dx(); double y = _drawingEdge->transform().dy(); _drawingEdge->setLine(0.0,0.0, vertex->scenePos().x()-x, vertex->scenePos().y()-y); _drawingEdge->setZValue(EDGE_LINE_Z); if (_drawingEdge->data(KEY_EDGE_VERTEX1) == vertex->data(KEY_EDGE_VERTEX1)) _scene.removeItem(_drawingEdge); else { int defaultWeight = 1; _drawingEdge->setData(KEY_EDGE_VERTEX2, vertex->data(KEY_VERTEX_ID)); _drawingEdge->setData(KEY_EDGE_WEIGHT, defaultWeight); // draw edge weight QGraphicsSimpleTextItem * edgeWeight = _scene.addSimpleText(QString("%1").arg(defaultWeight)); edgeWeight->setParentItem(_drawingEdge); edgeWeight->setBrush(Qt::blue); QLineF line = _drawingEdge->line(); edgeWeight->setTransform( QTransform::fromScale(0.005, 0.005) * QTransform::fromTranslate(line.x2()*0.5, line.y2()*0.5) ); edgeWeight->setZValue(EDGE_TEXT_Z); // add to graph edges _edges << _drawingEdge; } } } else { _scene.removeItem(_drawingEdge); } _isDrawingEdge=false; _drawingEdge=0; }
void GalaGV::setMomentPos(QString index) { qDebug() << Q_FUNC_INFO ; mData->momentPos.first =index; QGraphicsEllipseItem *item = mData->systeme.value(mData->gala).value(mData->momentPos.first); if(item != NULL){ QGraphicsEllipseItem *newItem = makeMarkerItem(item->data(Cords).toString(),mData->momentPos.first,Moment,QColor("#00D0F0"),Mark); qDebug() << mData->momentPos.second; newItem->setZValue(2); scene()->addItem(newItem); ensureVisible(newItem); mSecondView->ensureVisible(newItem); if(mData->momentPos.second != NULL) delete mData->momentPos.second; mData->momentPos.second = newItem; calcNearSys(newItem->data(Cords).toString()); } }
void GalaGV::setGate() { qDebug() << Q_FUNC_INFO; if(mData->gate != NULL){ delete mData->gate; mData->gate = NULL; } const Gate& g = mData->gates.value(mData->gala); QGraphicsEllipseItem *item = mData->systeme.value(mData->gala).value(QString(g.sysID)); qDebug() << Q_FUNC_INFO << item; if( item != NULL){ mData->gate = makeMarkerItem(item->data(Cords).toString(),g.sysID,GateItem,QColor("#E087DF"),BigMarker); scene()->addItem(mData->gate); } }
void GalaGV::onContextMenuRequest(const QPoint &pos) { QGraphicsItem *item = itemAt(pos); QGraphicsEllipseItem *eSystemItem; ESystem e; SendMenu menu(ShipTreeWidget::tree()); QMenu *m = menu.menu(); QAction *openSys = m->addAction("openSys"); QAction *openLog = m->addAction("openLog"); QAction *setCheckd = m->addAction("check"); QAction *setWerf = m->addAction("werft"); QAction *clearChecked = m->addAction("clear all checked"); setCheckd->setCheckable(true); setWerf->setCheckable(true); const QHash<QString,QGraphicsEllipseItem*> &esysteme = mData->eSysteme.value(mData->showESysteme.first+";"+QString::number(mData->gala)); if(!mData->showESysteme.second || esysteme.size() == 0) clearChecked->setEnabled(false); if(item == NULL){ openSys->setEnabled(false); openLog->setEnabled(false); setCheckd->setEnabled(false); setWerf->setEnabled(false); } else { if(!mData->mPlayerLogPlanis.contains(item)) openLog->setEnabled(false); eSystemItem =esysteme.value(item->data(ID).toString()); if(eSystemItem == NULL || !mData->showESysteme.second){ setCheckd->setEnabled(false); setWerf->setEnabled(false); }else { e=eSystemItem->data(Esystem).value<ESystem>(); setCheckd->setChecked(e.isChecked); setWerf->setChecked(e.isWerft); } } if( eSystemItem == NULL || !mData->showESysteme.second) menu.setDisable(true); do { QAction *ret = m->exec(mapToGlobal(pos)); if(ret == openSys){ emit loadPage("http://www.omega-day.com/game/?op=system&sys="+item->data(Qt::UserRole).toString()); }else if (ret == openLog){ emit loadPage("http://www.omega-day.com/game/"+item->data(Qt::UserRole+1).toString()); } else if(ret == setCheckd){ setChecked(eSystemItem,setCheckd->isChecked()); } else if(ret == clearChecked){ int ret =QMessageBox::warning(this,"muh","wirklich löschen",QMessageBox::Yes,QMessageBox::No); if(ret == QMessageBox::Yes) clearAllChecked(); }else if (ret == setWerf) { setWerft(eSystemItem,setWerf->isChecked()); }else if( menu.checkSendClicked(ret)){ const QStringList & l = menu.checkedID(); const QString &oldID = menu.orbitID(); if(l.size()>0){ QString planiID = eSystemItem->data(Esystem).value<ESystem>().planiID; if(l.size() == 1) emit sendShip(l.first(),oldID,planiID); else emit sendShips(l,planiID); } } }while(!menu.exit()); }
void GraphViewer::onSceneMousePress(QGraphicsSceneMouseEvent *mouseEvent) { if (_vertices.isEmpty()) _initialText->setVisible(false); if (_scene.items(QRectF( mouseEvent->scenePos().x() - VERTEX_SIZE*0.5, mouseEvent->scenePos().y() - VERTEX_SIZE*0.5, VERTEX_SIZE, VERTEX_SIZE) ).isEmpty()) { // Create new vertex QGraphicsEllipseItem * vertex = _scene.addEllipse( QRectF(-VERTEX_SIZE*0.5, -VERTEX_SIZE*0.5, VERTEX_SIZE, VERTEX_SIZE), QPen(Qt::black, 0), QBrush(Qt::white) ); vertex->setTransform( QTransform::fromTranslate(mouseEvent->scenePos().x(), mouseEvent->scenePos().y()) ); vertex->setZValue(VERTEX_CIRCLE_Z); _vertices << vertex; int id = _vertices.size()-1; vertex->setData(KEY_VERTEX_ID, id); QGraphicsSimpleTextItem * vertexId = _scene.addSimpleText(QString("%1").arg(id+1)); vertexId->setParentItem(vertex); vertexId->setTransform( QTransform::fromScale(0.005, 0.005) * QTransform::fromTranslate(-VERTEX_SIZE*( (id < 9) ? 0.18 : 0.28 ), -VERTEX_SIZE*0.35) ); vertexId->setZValue(VERTEX_TEXT_Z); } else { // Propose to draw new edge QGraphicsItem * item = _scene.itemAt(mouseEvent->scenePos(), QTransform()); if (qgraphicsitem_cast<QGraphicsEllipseItem*>(item) || qgraphicsitem_cast<QGraphicsSimpleTextItem*>(item)) { QGraphicsEllipseItem* vertex = qgraphicsitem_cast<QGraphicsEllipseItem*>(item->parentItem()); if (!vertex) vertex = qgraphicsitem_cast<QGraphicsEllipseItem*>(item); if (vertex) { _isDrawingEdge=true; _drawingEdge = _scene.addLine(0.0, 0.0, mouseEvent->scenePos().x()-vertex->scenePos().x(), mouseEvent->scenePos().y()-vertex->scenePos().y(), QPen(Qt::black, 0)); _drawingEdge->setTransform(QTransform::fromTranslate(vertex->scenePos().x(), vertex->scenePos().y())); _drawingEdge->setZValue(VERTEX_CIRCLE_Z); _drawingEdge->setData(KEY_EDGE_VERTEX1, vertex->data(KEY_VERTEX_ID)); } } } }