diff --git a/src/graphicsview.cpp b/src/graphicsview.cpp index 38fc2d4..282a77c 100644 --- a/src/graphicsview.cpp +++ b/src/graphicsview.cpp @@ -24,11 +24,11 @@ GraphicsView::GraphicsView(): QGraphicsView() { //setMinimumSize(900,700); - //setDragMode(QGraphicsView::RubberBandDrag); + //setDragMode(QGraphicsView::ScrollHandDrag); - //scale(2.5,2.5); + //scale(2,2); diff --git a/src/homobfielditem.cpp b/src/homobfielditem.cpp index 7ea652f..6099b56 100644 --- a/src/homobfielditem.cpp +++ b/src/homobfielditem.cpp @@ -32,8 +32,8 @@ HomoBFieldItem::HomoBFieldItem(QRectF sizeRect): FieldItem() { setFlag(ItemIsSelectable); setFlag(ItemIsFocusable); setOuterPenWidth (2); - dockWidget = new HomoBFieldWidget(0,0,this); setIsDirectionIntoPlane(true); + dockWidget = new HomoBFieldWidget(0,0,this); setFluxDensity(2e-5); } @@ -55,7 +55,7 @@ QRectF HomoBFieldItem::getRectF() const void HomoBFieldItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) { //Qt::GlobalColor linecolor = Qt::red; - QColor linecolor(92,105,118); + QColor linecolor(0,86,30); painter->setPen(linecolor); if (isSelected()) painter->setBrush(Qt::Dense6Pattern); //selection deutlich machen painter->drawRect(sizeRect); diff --git a/src/homobfieldwidget.cpp b/src/homobfieldwidget.cpp index 9aca233..0b16756 100644 --- a/src/homobfieldwidget.cpp +++ b/src/homobfieldwidget.cpp @@ -110,6 +110,8 @@ void HomoBFieldWidget::createWidget() { QRadioButton* intoPlaneButton = new QRadioButton(tr("in die Ebene hinein")); QRadioButton* outOfPlaneButton = new QRadioButton(tr("aus der Ebene heraus")); + intoPlaneButton->setChecked(homoBField->getIsDirectionIntoPlane()); + outOfPlaneButton->setChecked(!homoBField->getIsDirectionIntoPlane()); connect(homoBField ,SIGNAL(directionChanged(bool)),intoPlaneButton, SLOT(setChecked(bool)) ); connect(intoPlaneButton, SIGNAL(toggled(bool)),homoBField ,SLOT(setIsDirectionIntoPlane(bool)) ); diff --git a/src/lsim.cpp b/src/lsim.cpp index 4ff103d..13efcf9 100644 --- a/src/lsim.cpp +++ b/src/lsim.cpp @@ -96,22 +96,33 @@ void lsim::createActions() { acts.exitAct->setStatusTip (tr ("Die Anwendung beenden")); connect (acts.exitAct, SIGNAL (triggered()), qApp, SLOT (quit())); - acts.moveItemDown = new QAction (tr ("runter"), this); + //up down actions + acts.moveItemDown = new QAction (QChar(0x2193), this); acts.moveItemDown->setStatusTip (tr ("runter")); + acts.moveItemDown->setEnabled(false); connect (acts.moveItemDown, SIGNAL (triggered()), simulscene, SLOT (moveSelectedFieldItemDown())); + connect (acts.moveItemDown, SIGNAL (triggered()), this, SLOT (handleUpDownActionChanges()) ); - acts.moveItemUp = new QAction (tr ("rauf"), this); + acts.moveItemUp = new QAction (QChar(0x2191), this); acts.moveItemUp->setStatusTip (tr ("rauf")); + acts.moveItemUp->setEnabled(false); connect (acts.moveItemUp, SIGNAL (triggered()), simulscene, SLOT (moveSelectedFieldItemUp())); + connect (acts.moveItemUp, SIGNAL (triggered()), this, SLOT (handleUpDownActionChanges()) ); - acts.moveItemOnTop = new QAction (tr ("ganz rauf"), this); + acts.moveItemOnTop = new QAction (QChar(0x21C8), this); acts.moveItemOnTop->setStatusTip (tr ("ganz rauf")); + acts.moveItemOnTop->setEnabled(false); connect (acts.moveItemOnTop, SIGNAL (triggered()), simulscene, SLOT (moveSelectedFieldItemOnTop())); + connect (acts.moveItemOnTop, SIGNAL (triggered()), this, SLOT (handleUpDownActionChanges()) ); - acts.moveItemOnBottom = new QAction (tr ("ganz runter"), this); + acts.moveItemOnBottom = new QAction (QChar(0x21CA), this); acts.moveItemOnBottom->setStatusTip (tr ("ganz runter")); + acts.moveItemOnBottom->setEnabled(false); //acts.moveItemOnBottom->setToolTip( tr ("Nach ganz unten absinken lassen")); connect (acts.moveItemOnBottom, SIGNAL (triggered()), simulscene, SLOT (moveSelectedFieldItemOnBottom())); + connect (acts.moveItemOnBottom, SIGNAL (triggered()), this, SLOT (handleUpDownActionChanges()) ); + + connect (simulscene, SIGNAL (selectionChanged ()), this, SLOT (handleUpDownActionChanges()) ); //Edit, insert, Modechange @@ -369,4 +380,24 @@ void lsim::startTimer() { } void lsim::handleDockLocationChange() { +} + +void lsim::handleUpDownActionChanges() { + if (simulscene->selectedItems().isEmpty() || + simulscene->selectedItems().first()->zValue() == simulscene->getHighestZIndexFieldItems() ) { + acts.moveItemUp->setEnabled(false); + acts.moveItemOnTop->setEnabled(false); + } else { + acts.moveItemUp->setEnabled(true); + acts.moveItemOnTop->setEnabled(true); + } + + if (simulscene->selectedItems().isEmpty() || + simulscene->selectedItems().first()->zValue() == simulscene->getLowestZIndexFieldItems() ) { + acts.moveItemDown->setEnabled(false); + acts.moveItemOnBottom->setEnabled(false); + } else { + acts.moveItemDown->setEnabled(true); + acts.moveItemOnBottom->setEnabled(true); + } } \ No newline at end of file diff --git a/src/lsim.h b/src/lsim.h index 082de72..de30d3a 100644 --- a/src/lsim.h +++ b/src/lsim.h @@ -57,6 +57,7 @@ class lsim: public QMainWindow { void startCalculation(); void startTimer(); void handleDockLocationChange(); + void handleUpDownActionChanges(); private: void createActions(); diff --git a/src/simulscene.cpp b/src/simulscene.cpp index d077b2b..455c20a 100644 --- a/src/simulscene.cpp +++ b/src/simulscene.cpp @@ -520,6 +520,23 @@ qreal SimulScene::getHighestZIndexFieldItems() { return highestZValue; } +qreal SimulScene::getLowestZIndexFieldItems() { + bool lowestZValueSet = false; + qreal lowestZValue = FieldDefaultZValue; //default value + for (int i = 0; i < items().count() ; ++i ) { + if (FieldItem::isFieldItem(items().at(i))) { + if (!lowestZValueSet) { + lowestZValue = items().at(i)->zValue(); + lowestZValueSet = true; + } + else if (lowestZValue > items().at(i)->zValue()) { + lowestZValue = items().at(i)->zValue(); + } + } + } + return lowestZValue; +} + void SimulScene::deleteSelectedFieldItems() { QList currSelectedItems = selectedItems(); for (int i = 0; i < currSelectedItems.count() ; ++i ) { diff --git a/src/simulscene.h b/src/simulscene.h index 4242a57..cf8061e 100644 --- a/src/simulscene.h +++ b/src/simulscene.h @@ -50,6 +50,7 @@ class SimulScene : public QGraphicsScene { SimulScene ( QObject* parent = 0); qreal getHighestZIndexVisible(); //hoechsten z-index der sichtbaren items qreal getHighestZIndexFieldItems(); //hoechsten z-index der Felder ausgeben + qreal getLowestZIndexFieldItems(); ~SimulScene(); double getTimePerStep();