From b795ceb914bc1c61c6ffa669b08c997d8ff423eb Mon Sep 17 00:00:00 2001 From: catdog2 Date: Sun, 23 Nov 2008 13:45:09 +0000 Subject: [PATCH] edit mode/simul mode git-svn-id: http://svn.lsim.tuxzone.org/trunk@23 4bec179b-ab65-46ed-a5f8-55b8b5c735d0 --- lsim.kdevelop.pcs | Bin 135948 -> 153500 bytes lsim.kdevses | 25 +++-- src/graphicsellipseitem.cpp | 4 +- src/lsim.cpp | 218 +++++++++++++++++++++++++++--------- src/lsim.h | 25 ++++- src/simulscene.cpp | 7 +- src/simulscene.h | 2 + 7 files changed, 218 insertions(+), 63 deletions(-) diff --git a/lsim.kdevelop.pcs b/lsim.kdevelop.pcs index 29f2656245a0f84404c35b03fa4ae957b676d0d4..f325e956f12e708047790fc10cd8661415659e53 100644 GIT binary patch delta 12797 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 delta 7114 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 - + - + - + - + - + - + - + - + + + + + + + + + + diff --git a/src/graphicsellipseitem.cpp b/src/graphicsellipseitem.cpp index e58e738..75c2fc3 100644 --- a/src/graphicsellipseitem.cpp +++ b/src/graphicsellipseitem.cpp @@ -124,12 +124,14 @@ void GraphicsEllipseItem::calculateProbePath(QPointF startPoint) { QPointF newPoint(currProbePath->at(i-1).x() + deltaDistX/meterPerPx ,currProbePath->at(i-1).y() + deltaDistY/meterPerPx); + if (myScene->stopsHere(currProbePath->at(i-1),newPoint)) break; + currProbePath->append(newPoint); speedListX->append(newspeedX); speedListY->append(newspeedY); if (i%path_entry_step == 0 || i==steps) flightPath.lineTo(newPoint); - if (myScene->stopsHere(currProbePath->at(i-1),newPoint)) break; + } qDebug()<< difftime(time(0),start_time); diff --git a/src/lsim.cpp b/src/lsim.cpp index c1829b1..8743d89 100644 --- a/src/lsim.cpp +++ b/src/lsim.cpp @@ -48,6 +48,7 @@ lsim::lsim() { createToolBars(); createStatusBar(); createDocks(); + setMode(EditMode); } void lsim::closeEvent (QCloseEvent *event) { @@ -161,6 +162,24 @@ void lsim::createActions() { connect (modeChangeActGroup, SIGNAL (triggered(QAction*)), this, SLOT (actModeSwitcher(QAction*))); connect (simulscene, SIGNAL(sceneModeChanged(int)) , this, SLOT(setSceneMode(int))); + + //Window Mode + acts.editModeAct = new QAction (tr ("Edit Mode"), this); + acts.editModeAct->setStatusTip (tr ("Edit Mode")); + acts.editModeAct->setCheckable(true); + acts.editModeAct->setData(QVariant(lsim::EditMode)); + + acts.simulationModeAct = new QAction (tr ("Simulation Mode"), this); + acts.simulationModeAct->setStatusTip (tr ("Simulation Mode")); + acts.simulationModeAct->setCheckable(true); + acts.simulationModeAct->setData(QVariant(lsim::SimulationMode)); + + windowModeActGroup = new QActionGroup(this); + windowModeActGroup->addAction(acts.editModeAct); + windowModeActGroup->addAction(acts.simulationModeAct); + connect (windowModeActGroup, SIGNAL (triggered(QAction*)), this, SLOT (actWindowModeSwitcher(QAction*))); + //connect (simulscene, SIGNAL(sceneModeChanged(int)) , this, SLOT(setSceneMode(int))); + } void lsim::createMenus() { @@ -183,28 +202,76 @@ void lsim::createMenus() { } void lsim::createToolBars() { - fileToolBar = addToolBar (tr ("File")); - fileToolBar->addAction(acts.calculate); - fileToolBar->addSeparator(); - fileToolBar->addAction(acts.timerStart); - fileToolBar->addAction(acts.timerStop); + windowModeBar = new QToolBar(tr("Modus")); + windowModeBar->addAction(acts.editModeAct); + windowModeBar->addAction(acts.simulationModeAct); - editToolBar = addToolBar (tr ("Edit")); + timerControlBar = new QToolBar (tr ("Timer")); + timerControlBar->addAction(acts.timerStart); + timerControlBar->addAction(acts.timerStop); - editToolBar->addAction(acts.itemEditModeAct); - editToolBar->addAction(acts.insertEFieldItemAct); - editToolBar->addAction(acts.insertBFieldItemAct); - editToolBar->addAction(acts.insertStopperItemAct); - editToolBar->addAction(acts.probeChargeItemPlaceAct); + sceneModeBar = new QToolBar (tr ("Edit")); + sceneModeBar->addAction(acts.itemEditModeAct); + sceneModeBar->addAction(acts.insertEFieldItemAct); + sceneModeBar->addAction(acts.insertBFieldItemAct); + sceneModeBar->addAction(acts.insertStopperItemAct); + sceneModeBar->addAction(acts.probeChargeItemPlaceAct); - upDownToolBar=addToolBar(tr("updown")); - upDownToolBar->addAction(acts.moveItemOnBottom); - upDownToolBar->addAction(acts.moveItemDown); - upDownToolBar->addAction(acts.moveItemUp); - upDownToolBar->addAction(acts.moveItemOnTop); + upDownBar = new QToolBar(tr("Feldanordnungsreihenfolge")); + upDownBar->addAction(acts.moveItemOnBottom); + upDownBar->addAction(acts.moveItemDown); + upDownBar->addAction(acts.moveItemUp); + upDownBar->addAction(acts.moveItemOnTop); + + addToolBar(windowModeBar); } +void lsim::initWindowMode(WindowMode newMode) { + removeToolBar(timerControlBar); + removeToolBar(sceneModeBar); + removeToolBar(upDownBar); + removeDockWidget(fieldItemEditDock); + removeDockWidget(probeItemDock); + removeDockWidget(sceneDock); + removeDockWidget(simulOptDock); + gview->setDragMode(QGraphicsView::NoDrag); + gview->setInteractive(true); + if (newMode == lsim::EditMode) { + simulscene->clearFlightPath(); + acts.timerStop->trigger(); + sceneModeBar->setVisible(true); + upDownBar->setVisible(true); + fieldItemEditDock->setVisible(true); + probeItemDock->setVisible(true); + sceneDock->setVisible(true); + + addToolBar(sceneModeBar); + addToolBar(upDownBar); + addDockWidget(Qt::LeftDockWidgetArea,fieldItemEditDock); + addDockWidget(Qt::LeftDockWidgetArea,probeItemDock); + addDockWidget(Qt::LeftDockWidgetArea,sceneDock); + tabifyDockWidget(probeItemDock,fieldItemEditDock); + tabifyDockWidget(fieldItemEditDock, sceneDock); + + } else if (newMode == lsim::SimulationMode) { + timerControlBar->setVisible(true); + addToolBar(timerControlBar); + gview->setDragMode(QGraphicsView::ScrollHandDrag); + gview->setInteractive (false); + + addDockWidget(Qt::LeftDockWidgetArea,simulOptDock); + simulOptDock->setVisible(true); + + acts.itemEditModeAct->trigger(); + simulscene->clearSelection(); + acts.calculate->trigger(); + + } + +} + + void lsim::createStatusBar() { statusBar()->showMessage (tr ("Willkommen zu lsim")); } @@ -247,6 +314,41 @@ void lsim::createDocks() { connect(meter_per_px_box, SIGNAL(valueChanged(double)),simulscene, SLOT(setMeterPerPx(double))); connect(simulscene, SIGNAL(meterPerPxChanged(double)),meter_per_px_box, SLOT(setValue( double ))); + //description labels + QLabel *time_per_step_label = new QLabel(tr("Zeit pro Schritt:")); + QLabel *steps_label = new QLabel(tr("Schritte:")); + QLabel *meter_per_pixel_label = new QLabel(tr("Ein Pixel entspricht:")); + + //Scene settings Layout + QGridLayout *sceneGridLayout = new QGridLayout; + sceneGridLayout->addWidget(steps_label,0,0,Qt::AlignRight); + sceneGridLayout->addWidget(steps_box,0,1); + sceneGridLayout->addWidget(time_per_step_label,1,0,Qt::AlignRight); + sceneGridLayout->addWidget(time_step_box,1,1); + sceneGridLayout->addWidget(meter_per_pixel_label,2,0,Qt::AlignRight); + sceneGridLayout->addWidget(meter_per_px_box,2,1); + + + QGroupBox *sceneGroupBox = new QGroupBox(tr("Allgemeines")); + sceneGroupBox->setLayout(sceneGridLayout); + + QVBoxLayout *allgVBoxLayout = new QVBoxLayout(); + allgVBoxLayout->addWidget(sceneGroupBox); + allgVBoxLayout->addStretch(); + + QWidget *allgWidget = new QWidget; + allgWidget->setLayout(allgVBoxLayout); + + sceneDock = new QDockWidget(tr("Allgemeines"), this); + sceneDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea); + sceneDock->setWidget((allgWidget)); + //sceneDock->setFeatures(QDockWidget::NoDockWidgetFeatures); + //addDockWidget(Qt::LeftDockWidgetArea, sceneDock); + + //************************************************************************** + + + //FlugbahnAnzeigeBox QCheckBox *flight_path_box = new QCheckBox(""); flight_path_box->setChecked(simulscene->isFlightPathVisible()); @@ -264,49 +366,39 @@ void lsim::createDocks() { //description labels - QLabel *time_per_step_label = new QLabel(tr("Zeit pro Schritt:")); - QLabel *steps_label = new QLabel(tr("Schritte:")); - QLabel *meter_per_pixel_label = new QLabel(tr("Ein Pixel entspricht:")); QLabel *flight_path_label = new QLabel(tr("Flugbahn anzeigen:")); QLabel *timer_label = new QLabel(tr("L\344nge der Animation:")); - //Scene settings Layout - QGridLayout *sceneGridLayout = new QGridLayout; - sceneGridLayout->addWidget(steps_label,0,0,Qt::AlignRight); - sceneGridLayout->addWidget(steps_box,0,1); - sceneGridLayout->addWidget(time_per_step_label,1,0,Qt::AlignRight); - sceneGridLayout->addWidget(time_step_box,1,1); - sceneGridLayout->addWidget(meter_per_pixel_label,2,0,Qt::AlignRight); - sceneGridLayout->addWidget(meter_per_px_box,2,1); - sceneGridLayout->addWidget(flight_path_label,3,0,Qt::AlignRight); - sceneGridLayout->addWidget(flight_path_box,3,1); - sceneGridLayout->addWidget(timer_label,4,0,Qt::AlignRight); - sceneGridLayout->addWidget(timer_box,4,1); + //grid layout + QGridLayout *simulOptGridLayout = new QGridLayout; + simulOptGridLayout->addWidget(flight_path_label,3,0,Qt::AlignRight); + simulOptGridLayout->addWidget(flight_path_box,3,1); + simulOptGridLayout->addWidget(timer_label,4,0,Qt::AlignRight); + simulOptGridLayout->addWidget(timer_box,4,1); - QGroupBox *sceneGroupBox = new QGroupBox(tr("Allgemeines")); - sceneGroupBox->setLayout(sceneGridLayout); + QGroupBox *simulOptGroupBox = new QGroupBox(tr("Allgemeines")); + simulOptGroupBox->setLayout(simulOptGridLayout); - QVBoxLayout *allgVBoxLayout = new QVBoxLayout(); - allgVBoxLayout->addWidget(sceneGroupBox); - allgVBoxLayout->addStretch(); + QVBoxLayout *simulOptVBoxLayout = new QVBoxLayout(); + simulOptVBoxLayout->addWidget(simulOptGroupBox); + simulOptVBoxLayout->addStretch(); - QWidget *allgWidget = new QWidget; - allgWidget->setLayout(allgVBoxLayout); - - sceneDock = new QDockWidget(tr("Allgemeines"), this); - sceneDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea); - sceneDock->setWidget((allgWidget)); - //sceneDock->setFeatures(QDockWidget::NoDockWidgetFeatures); - addDockWidget(Qt::LeftDockWidgetArea, sceneDock); + QWidget *simulOptWidget = new QWidget; + simulOptWidget->setLayout(simulOptVBoxLayout); + + simulOptDock = new QDockWidget(tr("Allgemeines"), this); + simulOptDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea); + simulOptDock->setWidget(simulOptWidget); + + //************************************************************************ - //************************************************************************** fieldItemEditDock = new QDockWidget(tr("Feldeinstellungen"), this); fieldItemEditDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea); fieldItemEditDock->setWidget(new QWidget); //fieldItemEditDock->setFeatures(QDockWidget::NoDockWidgetFeatures); - addDockWidget(Qt::LeftDockWidgetArea, fieldItemEditDock); + //addDockWidget(Qt::LeftDockWidgetArea, fieldItemEditDock); connect (simulscene, SIGNAL(selectionChanged ()) , this, SLOT(updateDockFieldWidget())); updateDockFieldWidget(); @@ -314,12 +406,12 @@ void lsim::createDocks() { probeItemDock = new QDockWidget(tr("Probleladung"), this); probeItemDock->setWidget(simulscene->getProbeDockWidget()); //probeItemDock->setFeatures(QDockWidget::NoDockWidgetFeatures); - addDockWidget(Qt::LeftDockWidgetArea, probeItemDock); + //addDockWidget(Qt::LeftDockWidgetArea, probeItemDock); - tabifyDockWidget(probeItemDock,fieldItemEditDock); - tabifyDockWidget(fieldItemEditDock, sceneDock); + //tabifyDockWidget(probeItemDock,fieldItemEditDock); + //tabifyDockWidget(fieldItemEditDock, sceneDock); setDockOptions(QMainWindow::VerticalTabs); } @@ -328,6 +420,10 @@ void lsim::actModeSwitcher(QAction *action) { simulscene->setSceneMode((SimulScene::SceneMode)action->data().toInt()); } +void lsim::actWindowModeSwitcher(QAction *action) { + setMode((lsim::WindowMode)action->data().toInt()); +} + void lsim::setSceneMode(int mode) { for (int i=0;i < modeChangeActGroup->actions().count();++i){ //nur das aktuelle checked setzen if(modeChangeActGroup->actions().at(i)->data().toInt() == mode) { @@ -337,6 +433,8 @@ void lsim::setSceneMode(int mode) { modeChangeActGroup->actions().at(i)->setChecked(false); } } + + /* //Problem mit resizeRects, warum auch immer :( //je nach sceneMode den cursor eintellen @@ -425,4 +523,24 @@ void lsim::handleUpDownActionChanges() { acts.moveItemDown->setEnabled(true); acts.moveItemOnBottom->setEnabled(true); } -} \ No newline at end of file +} + +lsim::WindowMode lsim::getMode() const { + return myMode; +} + + +void lsim::setMode ( const WindowMode& theValue ) { + //if(myMode == theValue) return; + myMode = theValue; + initWindowMode(theValue); + for (int i=0;i < windowModeActGroup->actions().count();++i){ //nur das aktuelle checked setzen + if(windowModeActGroup->actions().at(i)->data().toInt() == myMode) { + windowModeActGroup->actions().at(i)->setChecked(true); + } + else { + windowModeActGroup->actions().at(i)->setChecked(false); + } + } + emit windowModeChanged(theValue); +} diff --git a/src/lsim.h b/src/lsim.h index 912805a..3d85564 100644 --- a/src/lsim.h +++ b/src/lsim.h @@ -43,21 +43,30 @@ class lsim: public QMainWindow { Q_OBJECT public: + enum WindowMode {EditMode,SimulationMode}; lsim(); ~lsim(); + void setMode ( const WindowMode& theValue ); + + + lsim::WindowMode getMode() const; + + protected: void closeEvent (QCloseEvent *event); private slots: void about(); void actModeSwitcher(QAction *action); + void actWindowModeSwitcher(QAction *action); void setSceneMode(int mode); void updateDockFieldWidget(); void startCalculation(); void startTimer(); void handleDockLocationChange(); void handleUpDownActionChanges(); + void initWindowMode(WindowMode newMode); private: void createActions(); @@ -74,9 +83,10 @@ class lsim: public QMainWindow { QMenu *helpMenu; QMenu *viewMenu; - QToolBar *fileToolBar; - QToolBar *editToolBar; - QToolBar *upDownToolBar; + QToolBar *timerControlBar; + QToolBar *sceneModeBar; + QToolBar *upDownBar; + QToolBar *windowModeBar; struct Actions { QAction *aboutAct; @@ -93,6 +103,9 @@ class lsim: public QMainWindow { QAction *moveItemOnTop; QAction *moveItemOnBottom; + QAction *editModeAct; + QAction *simulationModeAct; + QAction *itemEditModeAct; QAction *insertEFieldItemAct; QAction *insertBFieldItemAct; @@ -102,14 +115,20 @@ class lsim: public QMainWindow { Actions acts; QActionGroup *modeChangeActGroup; + QActionGroup *windowModeActGroup; QDockWidget *fieldItemEditDock; QDockWidget *probeItemDock; QDockWidget *sceneDock; + QDockWidget *simulOptDock; SimulScene *simulscene; + + WindowMode myMode; + signals: + void windowModeChanged(WindowMode mode); }; #endif diff --git a/src/simulscene.cpp b/src/simulscene.cpp index 1042123..f4c9edc 100644 --- a/src/simulscene.cpp +++ b/src/simulscene.cpp @@ -114,6 +114,7 @@ void SimulScene::startTimer() { timer->start(); } void SimulScene::stopTimer() { + timer->setCurrentTime(0); timer->stop(); } @@ -750,7 +751,7 @@ void SimulScene::startCalculation() { stopTimer(); //leeren Pfad setezen - pathItem1->setPath(QPainterPath()); + clearFlightPath(); //Feld Item Listen erzeugen (viel schneller, als jedes mal items(point) durchlaufen) calcEFieldList.clear(); @@ -1043,3 +1044,7 @@ void SimulScene::moveSelectedFieldItemOnBottom() { GraphicsEllipseItem* SimulScene::getProbeChargeItem() { return ellipse1; } + +void SimulScene::clearFlightPath() { + pathItem1->setPath(QPainterPath()); +} diff --git a/src/simulscene.h b/src/simulscene.h index a850bd9..6561658 100644 --- a/src/simulscene.h +++ b/src/simulscene.h @@ -79,6 +79,8 @@ class SimulScene : public QGraphicsScene { GraphicsEllipseItem* getProbeChargeItem(); + void clearFlightPath(); + public slots: void setSceneMode(SceneMode mode); void startTimer();