diff --git a/src/application.qrc b/src/application.qrc
index 2800a4f..99edfd1 100644
--- a/src/application.qrc
+++ b/src/application.qrc
@@ -18,7 +18,8 @@
icons/lsim.svg
icons/view-fullscreen.svg
icons/view-restore.svg
-
-
+ icons/document-save.svg
+ icons/document-open.svg
+ icons/document-revert.svg
diff --git a/src/constants.h b/src/constants.h
index 9d90ca3..dc92100 100644
--- a/src/constants.h
+++ b/src/constants.h
@@ -18,10 +18,13 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#include
+#include
//! Diese Datei definiert Konstanten
/**
@author Peter Dahlberg
*/
const double PI = acos( -1.0 );
-const double SPEED_OF_LIGHT = 299792458.0;
\ No newline at end of file
+const double SPEED_OF_LIGHT = 299792458.0;
+const qint32 FILEVERSION=1;
+const qint32 FILEMAGIC=52224242425254;
diff --git a/src/fielditem.h b/src/fielditem.h
index 2972f33..0a154d5 100644
--- a/src/fielditem.h
+++ b/src/fielditem.h
@@ -22,6 +22,7 @@
#include
#include
+#include
//! Ein abstraktes Feld GraphicsItem
/**
@@ -56,6 +57,10 @@ class FieldItem :public QObject, public QGraphicsItem {
static bool isFieldItem(QGraphicsItem *item);
int getRotation();
+ virtual QList getSaveDataList() = 0;
+ virtual void setSaveDataList(QList list) = 0;
+
+
protected:
virtual void wheelEvent(QGraphicsSceneWheelEvent * event);
virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event );
diff --git a/src/graphicsellipseitem.cpp b/src/graphicsellipseitem.cpp
index 910a5b1..b61d8ad 100644
--- a/src/graphicsellipseitem.cpp
+++ b/src/graphicsellipseitem.cpp
@@ -1,6 +1,6 @@
/***************************************************************************
- * Copyright (C) 2008 by Peter Dahlberg *
- * pdahlberg@gmail.com *
+ * Copyright (C) 2008 by Peter Dahlberg *
+ * pdahlberg@gmail.com *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
@@ -57,6 +57,27 @@ void GraphicsEllipseItem::setupVars () {
setAdaptiveStepControl(true);
}
+QList GraphicsEllipseItem::getSaveDataList(){
+ QList list;
+ list << getMasse(0);
+ list << getCharge();
+ list << getStartSpeedX();
+ list << getStartSpeedY();
+ list << scenePos();
+ list << getAdaptiveStepLength();
+ list << isAdaptiveStepControlEnabled();
+ return list;
+}
+void GraphicsEllipseItem::setSaveDataList(QList list) {
+ setMasse(list[0].toDouble());
+ setCharge(list[1].toDouble());
+ setStartSpeedX(list[2].toDouble());
+ setStartSpeedY(list[3].toDouble());
+ setPos(list[4].toPointF());
+ setAdaptiveStepLength(list[5].toDouble());
+ setAdaptiveStepControl(list[6].toBool());
+}
+
void GraphicsEllipseItem::resetProbe() {
setupVars();
}
@@ -80,8 +101,12 @@ void GraphicsEllipseItem::handleSceneChange(const QList & /*region*/) {
emit ScenePosChanged(myScenePos);
emit ScenePosXChanged(myScenePos.x());
emit ScenePosYChanged(myScenePos.y());
+ }
- SimulScene* myScene = dynamic_cast(scene());
+}
+
+void GraphicsEllipseItem::updateScenePosLabels() {
+ SimulScene* myScene = dynamic_cast(scene());
if (myScene != 0) {
QString ScenePosPxStringX(QLocale().toString(myScenePos.x(),'g',3));
ScenePosPxStringX.append(" px");
@@ -96,11 +121,8 @@ void GraphicsEllipseItem::handleSceneChange(const QList & /*region*/) {
emit ScenePosXChangedMeter(ScenePosMStringX);
emit ScenePosYChangedMeter(ScenePosMStringY);
}
- }
-
}
-
/*!
\fn GraphicsEllipseItem::calculateProbePath()
*/
diff --git a/src/graphicsellipseitem.h b/src/graphicsellipseitem.h
index 8f389f7..119676f 100644
--- a/src/graphicsellipseitem.h
+++ b/src/graphicsellipseitem.h
@@ -57,6 +57,9 @@ class GraphicsEllipseItem : public QObject , public QGraphicsEllipseItem {
QList< double >* getSpeedListX() const;
QList< double >* getSpeedListY() const;
+ QList getSaveDataList();
+ void setSaveDataList(QList list);
+
protected:
void mousePressEvent ( QGraphicsSceneMouseEvent *event );
@@ -113,6 +116,7 @@ class GraphicsEllipseItem : public QObject , public QGraphicsEllipseItem {
void resetProbe();
void setAdaptiveStepControl ( bool theValue );
void setAdaptiveStepLength ( double theValue );
+ void updateScenePosLabels();
signals:
diff --git a/src/homobfielditem.cpp b/src/homobfielditem.cpp
index e41ba0a..e6921b7 100644
--- a/src/homobfielditem.cpp
+++ b/src/homobfielditem.cpp
@@ -37,9 +37,25 @@ HomoBFieldItem::HomoBFieldItem(QRectF sizeRect): FieldItem() {
setFluxDensity(2e-5);
}
+HomoBFieldItem::~HomoBFieldItem() {
+}
-HomoBFieldItem::~HomoBFieldItem()
-{
+QList HomoBFieldItem::getSaveDataList() {
+ QList list;
+ list << type();
+ list << scenePos();
+ list << getRectF();
+ list << zValue();
+ list << getIsDirectionIntoPlane();
+ list << getFluxDensity();
+ return list;
+}
+void HomoBFieldItem::setSaveDataList(QList list){
+ setPos(list[1].toPointF());
+ setRectF(list[2].toRectF());
+ setZValue(list[3].toDouble());
+ setIsDirectionIntoPlane(list[4].toBool());
+ setFluxDensity(list[5].toDouble());
}
@@ -48,8 +64,7 @@ QRectF HomoBFieldItem::boundingRect() const {
sizeRect.width() + outerPenWidth, sizeRect.height() + outerPenWidth);
}
-QRectF HomoBFieldItem::getRectF() const
-{
+QRectF HomoBFieldItem::getRectF() const {
return FieldItem::getRectF();
}
diff --git a/src/homobfielditem.h b/src/homobfielditem.h
index fc14c07..6c774e5 100644
--- a/src/homobfielditem.h
+++ b/src/homobfielditem.h
@@ -51,6 +51,10 @@ class HomoBFieldItem : public FieldItem {
double getOuterPenWidth() const;
bool getIsDirectionIntoPlane() const;
double getFluxDensity() const;
+
+ QList getSaveDataList();
+ void setSaveDataList(QList list);
+
public slots:
void setOuterPenWidth ( double theValue );
void setFieldLineDistance ( int theValue );
diff --git a/src/homoefielditem.cpp b/src/homoefielditem.cpp
index dea521f..4e8e9f6 100644
--- a/src/homoefielditem.cpp
+++ b/src/homoefielditem.cpp
@@ -43,6 +43,24 @@ HomoEFieldItem::HomoEFieldItem(QRectF sizeRect)
+}
+
+QList HomoEFieldItem::getSaveDataList() {
+ QList list;
+ list << type();
+ list << scenePos();
+ list << getRectF();
+ list << zValue();
+ list << getRotation();
+ list << getFieldPower();
+ return list;
+}
+void HomoEFieldItem::setSaveDataList(QList list){
+ setPos(list[1].toPointF());
+ setRectF(list[2].toRectF());
+ setZValue(list[3].toDouble());
+ setRotation(list[4].toInt());
+ setFieldPower(list[5].toDouble());
}
void HomoEFieldItem::setFieldLineDistance(int pixel) {
diff --git a/src/homoefielditem.h b/src/homoefielditem.h
index 995337c..cacd601 100644
--- a/src/homoefielditem.h
+++ b/src/homoefielditem.h
@@ -55,6 +55,9 @@ class HomoEFieldItem : public FieldItem {
double getFieldPower() const;
double getOuterPenWidth() const;
+ QList getSaveDataList();
+ void setSaveDataList(QList list);
+
public slots:
void setFieldPower (double fieldPower );
diff --git a/src/icons/document-open.svg b/src/icons/document-open.svg
new file mode 100644
index 0000000..a52642c
--- /dev/null
+++ b/src/icons/document-open.svg
@@ -0,0 +1,481 @@
+
+
+
diff --git a/src/icons/document-revert.svg b/src/icons/document-revert.svg
new file mode 100644
index 0000000..6adc324
--- /dev/null
+++ b/src/icons/document-revert.svg
@@ -0,0 +1,1022 @@
+
+
+
\ No newline at end of file
diff --git a/src/lsim.cpp b/src/lsim.cpp
index 547e89a..b3dde61 100644
--- a/src/lsim.cpp
+++ b/src/lsim.cpp
@@ -36,6 +36,10 @@
#include
#include "expdoublespinbox.h"
#include "homoefieldwidget.h"
+#include "constants.h"
+#include "homobfielditem.h"
+#include "homoefielditem.h"
+#include "stopperitem.h"
lsim::lsim() {
@@ -52,6 +56,125 @@ lsim::lsim() {
connect(simulscene, SIGNAL(timeLineDurationChanged(int)),this, SLOT(timeLineDurationChangeWrapperToSec(int)));
}
+void lsim::saveFileAs() {
+ clearAnyFocus();
+ QFile file(QFileDialog::getSaveFileName(this, tr("Speichern unter..."),
+ QString(), tr("lsim Dateien (*.lsm);;Alle Dateien (*)")));
+ if (file.fileName() == "") return; //wenn keine datei gewaehlt
+
+ QStringList fileNameSplit = file.fileName().split('.');
+ if (fileNameSplit.count() > 0 && !file.exists()) { //.lsm anhaengen
+ if (fileNameSplit.last() != "lsm") {
+ QString fileName = file.fileName();
+ if (fileName.endsWith('.')) fileName.append("lsm");
+ else fileName.append(".lsm");
+ file.setFileName(fileName);
+ }
+ }
+
+ if(!file.open(QIODevice::WriteOnly)){ //wenn oeffnen fehl schlaegt
+ QMessageBox::warning ( this, tr("Speichern Fehlgeschlagen"),
+ tr("Die Datei konnte leider nicht gespeichert werden"));
+ return;
+ }
+
+ QDataStream out(&file);
+ out.setVersion(QDataStream::Qt_4_4);
+ QList simulSceneSaveList = simulscene->getSaveDataList();
+ QList ProbeChargeItemSaveList = simulscene->getProbeChargeItem()->getSaveDataList();
+ out << FILEMAGIC;
+ out << FILEVERSION;
+ out << simulSceneSaveList;
+ out << ProbeChargeItemSaveList;
+
+ QList fields(simulscene->getFieldItemsInZOrder());
+ for(int i = 0;i(fields.at(i));
+ QList fieldItemSaveList = currItem->getSaveDataList();
+ out << fieldItemSaveList;
+ }
+
+ file.close();
+}
+void lsim::openFile() {
+ QFile file(QFileDialog::getOpenFileName(this, tr("\326ffnen..."),
+ QString(), tr("lsim Dateien (*.lsm);;Alle Dateien (*)")));
+ if (file.fileName() == "") return; //wenn keine datei gewaehlt
+
+ if(!file.open(QIODevice::ReadOnly)){ //wenn oeffnen fehl schlaegt
+ displayOpenFailedBox();
+ return;
+ }
+ resetAll();
+ QDataStream in(&file);
+ in.setVersion(QDataStream::Qt_4_4);
+ qint32 magic;
+ qint32 version;
+ in >> magic;
+ in >> version;
+ if (magic != FILEMAGIC||version != FILEVERSION) {
+ displayOpenFailedBox();
+ return;
+ }
+
+ QList simulSceneSaveList;
+ QList ProbeChargeItemSaveList;
+ in >> simulSceneSaveList;
+ in >> ProbeChargeItemSaveList;
+ simulscene->setSaveDataList(simulSceneSaveList);
+ simulscene->getProbeChargeItem()->setSaveDataList(ProbeChargeItemSaveList);
+ while(!in.atEnd()) {
+ QList fieldItemSaveList;
+ in >> fieldItemSaveList;
+ FieldItem* currItem;
+ if (fieldItemSaveList.first() == HomoEFieldItem::Type) {
+ HomoEFieldItem* currHomoEfieldInsertItem = new HomoEFieldItem(QRectF(0,0,0,0));
+ //die resize items aus und einblenden bei rotation
+ connect( currHomoEfieldInsertItem, SIGNAL(rotationChanged()), simulscene, SLOT(displayResizeRects()));
+ //bei groesenanderung und verschieben resizerects mitverschieben
+ connect( currHomoEfieldInsertItem, SIGNAL(heightChanged(double)), simulscene, SLOT(moveResizeRects()));
+ connect( currHomoEfieldInsertItem, SIGNAL(widthChanged(double)), simulscene, SLOT(moveResizeRects()));
+ connect( currHomoEfieldInsertItem, SIGNAL(ScenePosChanged(QPointF)), simulscene, SLOT(moveResizeRects()));
+ //item ueber sceneChange informieren
+ connect(simulscene,SIGNAL(changed(QList)),currHomoEfieldInsertItem,SLOT(handleSceneChange(QList)));
+ currItem = currHomoEfieldInsertItem;
+ } else if (fieldItemSaveList.first() == HomoBFieldItem::Type) {
+ HomoBFieldItem* currHomoBfieldInsertItem = new HomoBFieldItem(QRectF(0,0,0,0));
+ //die resize items aus und einblenden bei rotation
+ connect( currHomoBfieldInsertItem, SIGNAL(rotationChanged()), simulscene, SLOT(displayResizeRects()));
+ //bei groesenanderung und verschieben resizerects mitverschieben
+ connect( currHomoBfieldInsertItem, SIGNAL(heightChanged(double)), simulscene, SLOT(moveResizeRects()));
+ connect( currHomoBfieldInsertItem, SIGNAL(widthChanged(double)), simulscene, SLOT(moveResizeRects()));
+ connect( currHomoBfieldInsertItem, SIGNAL(ScenePosChanged(QPointF)), simulscene, SLOT(moveResizeRects()));
+ //item ueber sceneChange informieren
+ connect(simulscene,SIGNAL(changed(QList)),currHomoBfieldInsertItem,SLOT(handleSceneChange(QList)));
+ currItem = currHomoBfieldInsertItem;
+ } else if (fieldItemSaveList.first() == StopperItem::Type) {
+ StopperItem* currStopperInsertItem = new StopperItem(QPointF(0,0),QPointF(0,0));
+ //die resize items aus und einblenden bei rotation
+ connect( currStopperInsertItem, SIGNAL(rotationChanged()), simulscene, SLOT(displayResizeRects()));
+ //bei groesenanderung und verschieben resizerects mitverschieben
+ connect( currStopperInsertItem, SIGNAL(heightChanged(double)), simulscene, SLOT(moveResizeRects()));
+ connect( currStopperInsertItem, SIGNAL(widthChanged(double)), simulscene, SLOT(moveResizeRects()));
+ connect( currStopperInsertItem, SIGNAL(ScenePosChanged(QPointF)), simulscene, SLOT(moveResizeRects()));
+ //item ueber sceneChange informieren
+ connect(simulscene,SIGNAL(changed(QList)),currStopperInsertItem,SLOT(handleSceneChange(QList)));
+ currItem = currStopperInsertItem;
+ } else {
+ continue;
+ }
+ simulscene->addItem(currItem);
+ currItem->setSaveDataList(fieldItemSaveList);
+ }
+
+ file.close();
+}
+
+void lsim::displayOpenFailedBox() {
+ QMessageBox::warning ( this, tr("\326ffnen. Fehlgeschlagen"),
+ tr("Die Datei konnte leider nicht ge\366fnet werden"));
+}
+
void lsim::closeEvent (QCloseEvent *event) {
//event->ignore();
}
@@ -86,6 +209,18 @@ void lsim::createActions() {
acts.aboutAct->setStatusTip (tr ("Show the application's About box"));
connect (acts.aboutAct, SIGNAL (triggered()), this, SLOT (about()));
+ acts.fileSaveAsAct = new QAction (tr ("&Speichern..."), this);
+ acts.fileSaveAsAct->setStatusTip (tr ("Die Anordnung speichern"));
+ acts.fileSaveAsAct->setShortcut(QKeySequence::Save);
+ acts.fileSaveAsAct->setIcon(QIcon(":icons/document-save.svg"));
+ connect (acts.fileSaveAsAct, SIGNAL (triggered()), this, SLOT (saveFileAs()));
+
+ acts.fileOpenAct = new QAction (tr ("&\326ffnen..."), this);
+ acts.fileOpenAct->setStatusTip (tr ("Die Anordnung \366ffnen"));
+ acts.fileOpenAct->setShortcut(QKeySequence::Open);
+ acts.fileOpenAct->setIcon(QIcon(":icons/document-open.svg"));
+ connect (acts.fileOpenAct, SIGNAL (triggered()), this, SLOT (openFile()));
+
acts.aboutQtAct = new QAction (tr ("\334ber &Qt"), this);
acts.aboutQtAct->setStatusTip (tr ("Show the Qt library's About box"));
connect (acts.aboutQtAct, SIGNAL (triggered()), qApp, SLOT (aboutQt()));
@@ -104,7 +239,8 @@ void lsim::createActions() {
acts.resetAct = new QAction (tr ("Alles Zur\374cksetzen"), this);
acts.resetAct->setStatusTip (tr ("Alle Werte Zur\374cksetzen und alle Felder L\366schen"));
- connect (acts.resetAct, SIGNAL (triggered()), this, SLOT (resetAll()));
+ acts.resetAct->setIcon(QIcon(":icons/document-revert.svg"));
+ connect (acts.resetAct, SIGNAL (triggered()), this, SLOT (resetAllActionSlot()));
acts.timerStart = new QAction (tr ("Timer Start"), this);
acts.timerStart->setStatusTip (tr ("Timer starten"));
@@ -242,6 +378,9 @@ void lsim::createMenus() {
fileMenu = menuBar()->addMenu(tr("&Datei"));
fileMenu->addAction(acts.resetAct);
+ fileMenu->addAction(acts.fileOpenAct);
+ fileMenu->addAction(acts.fileSaveAsAct);
+ fileMenu->addSeparator();
fileMenu->addAction(acts.exitAct);
editMenu = menuBar()->addMenu(tr("&Bearbeiten"));
@@ -255,9 +394,6 @@ void lsim::createMenus() {
viewMenu->addSeparator();
viewMenu->addAction(acts.fullScreenAct);
- menuBar()->addMenu(tr("&Einstellungen"));
-
-
helpMenu = menuBar()->addMenu (tr ("&Help"));
helpMenu->addAction (acts.aboutAct);
helpMenu->addAction (acts.aboutQtAct);
@@ -468,6 +604,16 @@ void lsim::createDocks() {
//connect(timer_box, SIGNAL(valueChanged(int)),simulscene, SLOT(stopTimer()));
connect(this, SIGNAL(timeLineDurationChangedSec(double)),timer_box, SLOT(setValue(double)));
+ //geschwindigkeitsbox
+ QDoubleSpinBox *simul_speed_box = new QDoubleSpinBox;
+ simul_speed_box->setRange(0, 1e+10);
+ simul_speed_box->setDecimals(3);
+ //timer_box->setKeyboardTracking(false);
+ simul_speed_box->setValue(simulscene->getPxPerSec());
+ simul_speed_box->setSuffix(" px/s");
+ connect(simul_speed_box, SIGNAL(valueChanged(double)),simulscene, SLOT(setPxPerSec(double)));
+ connect(simulscene, SIGNAL(pxPerSecChanged(double)),simul_speed_box, SLOT(setValue(double)));
+
//Echte simulationsdauer
QLabel *real_simul_time_shower = new QLabel(tr("keine Daten"));
real_simul_time_shower->setTextInteractionFlags(Qt::TextSelectableByMouse);
@@ -478,6 +624,7 @@ void lsim::createDocks() {
QLabel *flight_path_label = new QLabel(tr("Flugbahn anzeigen:"));
QLabel *timer_label = new QLabel(tr("Dauer der Animation:"));
QLabel *real_simul_time_label = new QLabel(tr("\"Reale\" Simulationsdauer:"));
+ QLabel *simul_speed_label = new QLabel(tr("Simulationsgeschwindigkeit:"));
//grid layout
QGridLayout *simulOptGridLayout = new QGridLayout;
@@ -485,8 +632,10 @@ void lsim::createDocks() {
simulOptGridLayout->addWidget(flight_path_box,3,1);
simulOptGridLayout->addWidget(timer_label,4,0,Qt::AlignRight);
simulOptGridLayout->addWidget(timer_box,4,1);
- simulOptGridLayout->addWidget(real_simul_time_label,5,0,Qt::AlignRight);
- simulOptGridLayout->addWidget(real_simul_time_shower,5,1);
+ simulOptGridLayout->addWidget(simul_speed_label,5,0,Qt::AlignRight);
+ simulOptGridLayout->addWidget(simul_speed_box,5,1);
+ simulOptGridLayout->addWidget(real_simul_time_label,6,0,Qt::AlignRight);
+ simulOptGridLayout->addWidget(real_simul_time_shower,6,1);
QGroupBox *simulOptGroupBox = new QGroupBox(tr("Allgemeines"));
simulOptGroupBox->setLayout(simulOptGridLayout);
@@ -743,6 +892,11 @@ void lsim::setMode ( const WindowMode& theValue ) {
emit windowModeChanged(theValue);
}
+void lsim::resetAllActionSlot() {
+ QMessageBox::StandardButton button = QMessageBox::question ( this, tr("Frage"), tr("Wirklich Zur\374cksetzen?"), QMessageBox::Yes|QMessageBox::No) ;
+ if (button==QMessageBox::Yes) resetAll();
+}
+
void lsim::resetAll() {
setMode(EditMode);
simulscene->resetScene();
diff --git a/src/lsim.h b/src/lsim.h
index 8c3e981..d0b14df 100644
--- a/src/lsim.h
+++ b/src/lsim.h
@@ -71,10 +71,14 @@ class lsim: public QMainWindow {
void initWindowMode(WindowMode newMode);
void clearAnyFocus();
void resetAll();
+ void resetAllActionSlot();
void timeLineDurationChangeWrapperToSec(int length);
void timeLineDurationSetWrapperToMsec(double length);
+ void saveFileAs();
+ void openFile();
+
private:
void createActions();
void createMenus();
@@ -83,6 +87,8 @@ class lsim: public QMainWindow {
void createDocks();
void createScene();
+ void displayOpenFailedBox();
+
GraphicsView *gview;
QMenu *fileMenu;
@@ -106,6 +112,9 @@ class lsim: public QMainWindow {
QAction *timerStop;
QAction *timerPause;
+ QAction *fileSaveAsAct;
+ QAction *fileOpenAct;
+
QAction *moveItemDown;
QAction *moveItemUp;
QAction *moveItemOnTop;
diff --git a/src/main.cpp b/src/main.cpp
index 95d1864..170ba55 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -25,6 +25,7 @@
#include
#include
#include
+#include
int main(int argc, char *argv[])
{
diff --git a/src/simulscene.cpp b/src/simulscene.cpp
index d41bfd1..1548fb5 100644
--- a/src/simulscene.cpp
+++ b/src/simulscene.cpp
@@ -131,6 +131,7 @@ void SimulScene::handleTimeLineValueChange(qreal value ) {
emit probeSpeedXChanged(newSpeedStringX);
emit probespeedYChanged(newSpeedStringY);
emit probeSpeedChanged(newSpeedGes);
+ ellipse1->updateScenePosLabels();
}
void SimulScene::setupVars() {
@@ -147,8 +148,25 @@ void SimulScene::setupVars() {
setTimeLineDuration(30000);
setFlightPathVisible(true);
+}
-
+QList SimulScene::getSaveDataList() {
+ QList list;
+ list<< getTimePerStep();
+ list<< getSteps();
+ list<< getMeterPerPx();
+ list<< getPxPerSec();
+ list<< getTimeLineDuration();
+ list<< isFlightPathVisible();
+ return list;
+}
+void SimulScene::setSaveDataList(QList list){
+ setTimePerStep(list[0].toDouble());
+ setSteps(list[1].toInt());
+ setMeterPerPx(list[2].toDouble());
+ setPxPerSec(list[3].toDouble());
+ setTimeLineDuration(list[4].toInt());
+ setFlightPathVisible(list[5].toBool());
}
void SimulScene::startTimer() {
@@ -952,6 +970,7 @@ void SimulScene::setMeterPerPx ( double theValue ) {
void SimulScene::setPxPerSec ( double theValue ) {
if (theValue == pxPerSec) return;
pxPerSec = theValue;
+ setTimeLineDuration(ellipse1->getFlightPath().length()/getPxPerSec() * 1000.0);
emit pxPerSecChanged(theValue);
}
diff --git a/src/simulscene.h b/src/simulscene.h
index feea4f7..ee6be5a 100644
--- a/src/simulscene.h
+++ b/src/simulscene.h
@@ -84,6 +84,9 @@ class SimulScene : public QGraphicsScene {
void clearFlightPath();
+ QList getSaveDataList();
+ void setSaveDataList(QList list);
+
public slots:
void setSceneMode(SceneMode mode);
void startTimer();
diff --git a/src/stopperitem.cpp b/src/stopperitem.cpp
index 52cc061..6e326a3 100644
--- a/src/stopperitem.cpp
+++ b/src/stopperitem.cpp
@@ -35,6 +35,21 @@ StopperItem::StopperItem(QPointF start, QPointF end): FieldItem() {
setFlag(ItemIsFocusable);
}
+QList StopperItem::getSaveDataList() {
+ QList list;
+ list << type();
+ list << scenePos();
+ list << getRectF();
+ list << zValue();
+ list << getRotation();
+ return list;
+}
+void StopperItem::setSaveDataList(QList list){
+ setPos(list[1].toPointF());
+ setRectF(list[2].toRectF());
+ setZValue(list[3].toDouble());
+ setRotation(list[4].toInt());
+}
StopperItem::~StopperItem() {
diff --git a/src/stopperitem.h b/src/stopperitem.h
index 8b288a3..38d3cba 100644
--- a/src/stopperitem.h
+++ b/src/stopperitem.h
@@ -48,6 +48,9 @@ public:
double getOuterPenWidth() const;
+ QList getSaveDataList();
+ void setSaveDataList(QList list);
+
public slots:
void setOuterPenWidth ( double theValue );