HomoBField einfuegbar in die scene und editierbar
git-svn-id: http://svn.lsim.tuxzone.org/trunk@5 4bec179b-ab65-46ed-a5f8-55b8b5c735d0
This commit is contained in:
@@ -25,6 +25,7 @@
|
||||
#include <cmath>
|
||||
#include "graphicsellipseitem.h"
|
||||
#include "homoefielditem.h"
|
||||
#include "homobfielditem.h"
|
||||
#include <QRectF>
|
||||
#include <QGraphicsSceneMouseEvent>
|
||||
#include <QtDebug>
|
||||
@@ -41,8 +42,12 @@ SimulScene::SimulScene ( QObject* parent ) : QGraphicsScene ( parent ) {
|
||||
setSteps(1000);
|
||||
//setMeterPerPx(1/1000.0);
|
||||
setMeterPerPx(1);
|
||||
|
||||
currHomoEfieldInsertItem = 0;
|
||||
currHomoEfieldEditItem = 0;
|
||||
currHomoBfieldInsertItem = 0;
|
||||
currHomoBfieldEditItem = 0;
|
||||
|
||||
createResizeRects();
|
||||
|
||||
addLine(0,-298,0,298,QPen(Qt::green, 1, Qt::SolidLine) )->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
|
||||
@@ -104,6 +109,12 @@ void SimulScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent) {
|
||||
addItem(currHomoEfieldInsertItem);
|
||||
QApplication::setOverrideCursor(QCursor(Qt::SizeFDiagCursor));
|
||||
break;
|
||||
case HomoBFieldItemInsert:
|
||||
if (mouseEvent->button() != Qt::LeftButton) break; //benutze nur linke maustaste
|
||||
currHomoBfieldInsertItem = new HomoBFieldItem(QRectF(mouseEvent->scenePos(),mouseEvent->scenePos()));
|
||||
addItem(currHomoBfieldInsertItem);
|
||||
QApplication::setOverrideCursor(QCursor(Qt::SizeFDiagCursor));
|
||||
break;
|
||||
default:
|
||||
if (itemAt(mouseEvent->scenePos())->data(0) == ResizeRectItem && mouseEvent->button()==Qt::LeftButton) {
|
||||
pressedResizeItem = itemAt(mouseEvent->scenePos());
|
||||
@@ -111,6 +122,10 @@ void SimulScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent) {
|
||||
currHomoEfieldEditItem = qgraphicsitem_cast<HomoEFieldItem *>(selectedItems().first());
|
||||
QApplication::setOverrideCursor(pressedResizeItem->cursor());
|
||||
}
|
||||
else if (selectedItems().first()->type() == HomoBFieldItem::Type) {
|
||||
currHomoBfieldEditItem = qgraphicsitem_cast<HomoBFieldItem *>(selectedItems().first());
|
||||
QApplication::setOverrideCursor(pressedResizeItem->cursor());
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
@@ -135,6 +150,19 @@ void SimulScene::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent) {
|
||||
|
||||
}
|
||||
}
|
||||
else if (currHomoBfieldInsertItem != 0) {
|
||||
if (myMode == HomoBFieldItemInsert) {
|
||||
QPointF point(currHomoBfieldInsertItem->getRectF().x(), currHomoBfieldInsertItem->getRectF().y());
|
||||
update(currHomoBfieldInsertItem->getRectF());
|
||||
if(point.x() <= mouseEvent->scenePos().x() && point.y() <= mouseEvent->scenePos().y()) {
|
||||
QRectF rect(point,mouseEvent->scenePos());
|
||||
currHomoBfieldInsertItem->setRectF(rect);
|
||||
//update(QRectF(point,mouseEvent->lastScenePos()));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
else if (currHomoEfieldEditItem != 0 ) {
|
||||
|
||||
QGraphicsRectItem *pressedRectItem = qgraphicsitem_cast<QGraphicsRectItem *>(pressedResizeItem);
|
||||
@@ -151,6 +179,23 @@ void SimulScene::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent) {
|
||||
//resize rechtecke mitverschieben --> macht jetzt schon das Widget
|
||||
//if(mouseEvent->scenePos() != mouseEvent->lastScenePos()) displayResizeRects(true);
|
||||
|
||||
}
|
||||
else if (currHomoBfieldEditItem != 0 ) {
|
||||
|
||||
QGraphicsRectItem *pressedRectItem = qgraphicsitem_cast<QGraphicsRectItem *>(pressedResizeItem);
|
||||
QRectF currRect = currHomoBfieldEditItem->getRectF();
|
||||
QPointF newPos = currHomoBfieldEditItem->pos();
|
||||
|
||||
calculateItemResize(mouseEvent,pressedRectItem,currRect,newPos,HomoBFieldItem::MinimumWidth,HomoBFieldItem::MinimumHeight);
|
||||
|
||||
//aenderungen uebernehmen
|
||||
currHomoBfieldEditItem->setPos(newPos);
|
||||
if (currRect != currHomoBfieldEditItem->getRectF()) {
|
||||
currHomoBfieldEditItem->setRectF(currRect);
|
||||
}
|
||||
//resize rechtecke mitverschieben --> macht jetzt schon das Widget
|
||||
//if(mouseEvent->scenePos() != mouseEvent->lastScenePos()) displayResizeRects(true);
|
||||
|
||||
}
|
||||
else {
|
||||
QGraphicsScene::mouseMoveEvent(mouseEvent);
|
||||
@@ -197,14 +242,55 @@ void SimulScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent) {
|
||||
update(); //moegliche darstellungsprobleme beseitigen
|
||||
QApplication::restoreOverrideCursor();
|
||||
}
|
||||
else if (currHomoBfieldInsertItem != 0 && myMode == HomoBFieldItemInsert) {
|
||||
if (currHomoBfieldInsertItem->getRectF().width() < HomoBFieldItem::MinimumWidth || currHomoBfieldInsertItem->getRectF().height() <HomoBFieldItem::MinimumHeight ) {
|
||||
//removeItem(currHomoEfieldInsertItem); //segmention fault in kombination mit delete?
|
||||
delete currHomoBfieldInsertItem; //zu kleines feld loeschen
|
||||
}
|
||||
else {
|
||||
//setze Startpunkt des rechtecks auf 0,0, damit pos() richtig funktioniert
|
||||
currHomoBfieldInsertItem->setVisible(false); //ausblenden, damit sich nix verschiebt
|
||||
QRectF rect (currHomoBfieldInsertItem->getRectF());
|
||||
QPointF posPoint(rect.x(),rect.y());
|
||||
rect.setWidth(rect.width() - rect.x());
|
||||
rect.setHeight(rect.height() - rect.y());
|
||||
rect.setX(0);
|
||||
rect.setY(0);
|
||||
currHomoBfieldInsertItem->setRectF(rect);
|
||||
currHomoBfieldInsertItem->setPos(posPoint);
|
||||
currHomoBfieldInsertItem->setVisible(true); //und wieder einblenden
|
||||
|
||||
|
||||
setSceneMode(FieldItemEdit);
|
||||
//das neue item auswaehlen
|
||||
clearSelection();
|
||||
currHomoBfieldInsertItem->setSelected(true);
|
||||
|
||||
//die resize items aus und einblenden bei rotation
|
||||
connect( currHomoBfieldInsertItem, SIGNAL(rotationChanged()), this, SLOT(displayResizeRects()));
|
||||
//bei groesenanderung und verschieben resizerects mitverschieben
|
||||
connect( currHomoBfieldInsertItem, SIGNAL(heightChanged(double)), this, SLOT(moveResizeRects()));
|
||||
connect( currHomoBfieldInsertItem, SIGNAL(widthChanged(double)), this, SLOT(moveResizeRects()));
|
||||
connect( currHomoBfieldInsertItem, SIGNAL(ScenePosChanged(QPointF)), this, SLOT(moveResizeRects()));
|
||||
//item ueber sceneChange informieren
|
||||
connect(this,SIGNAL(changed(QList<QRectF>)),currHomoBfieldInsertItem,SLOT(handleSceneChange(QList<QRectF>)));
|
||||
}
|
||||
update(); //moegliche darstellungsprobleme beseitigen
|
||||
QApplication::restoreOverrideCursor();
|
||||
}
|
||||
else if (currHomoEfieldEditItem != 0) {
|
||||
update();
|
||||
QApplication::restoreOverrideCursor();
|
||||
|
||||
}
|
||||
else if (currHomoBfieldEditItem != 0) {
|
||||
update();
|
||||
QApplication::restoreOverrideCursor();
|
||||
}
|
||||
pressedResizeItem = 0;
|
||||
currHomoEfieldInsertItem = 0;
|
||||
currHomoBfieldInsertItem = 0;
|
||||
currHomoEfieldEditItem = 0;
|
||||
currHomoBfieldEditItem = 0;
|
||||
|
||||
QGraphicsScene::mouseReleaseEvent(mouseEvent);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user