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 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 );