diff --git a/lsim.kdevelop b/lsim.kdevelop
index c8982a4..ee263e1 100644
--- a/lsim.kdevelop
+++ b/lsim.kdevelop
@@ -161,7 +161,7 @@
/mnt/sdb1/c++/lsim
-
+
diff --git a/lsim.kdevelop.pcs b/lsim.kdevelop.pcs
index b46d0d2..322f3a9 100644
Binary files a/lsim.kdevelop.pcs and b/lsim.kdevelop.pcs differ
diff --git a/lsim.kdevses b/lsim.kdevses
index df05c45..6156c28 100644
--- a/lsim.kdevses
+++ b/lsim.kdevses
@@ -1,12 +1,12 @@
-
+
-
+
-
+
@@ -15,10 +15,10 @@
-
+
-
+
@@ -33,20 +33,29 @@
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
diff --git a/src/application.qrc b/src/application.qrc
index 597bbb6..2800a4f 100644
--- a/src/application.qrc
+++ b/src/application.qrc
@@ -16,6 +16,9 @@
icons/window-simulmode.svg
icons/application-exit.svg
icons/lsim.svg
+ icons/view-fullscreen.svg
+ icons/view-restore.svg
+
diff --git a/src/graphicsview.cpp b/src/graphicsview.cpp
index 6d1a0d0..e73e8f5 100644
--- a/src/graphicsview.cpp
+++ b/src/graphicsview.cpp
@@ -20,12 +20,21 @@
#include "graphicsview.h"
//#include
#include
+#include
+#include
+#include
+#include
+#include "simulscene.h"
+#include
-GraphicsView::GraphicsView(): QGraphicsView() {
+GraphicsView::GraphicsView(QWidget * parent, QStatusBar* statusbar): QGraphicsView(parent) {
+ mainWindowStatusBar = statusbar;
//setMinimumSize(900,700);
//setDragMode(QGraphicsView::ScrollHandDrag);
//setRenderHint (QPainter::QPainter::Antialiasing,true);
+ //setCacheMode(QGraphicsView::CacheBackground);
+ //setTransformationAnchor (QGraphicsView::AnchorUnderMouse);
//scale(2,2);
@@ -34,6 +43,56 @@ GraphicsView::GraphicsView(): QGraphicsView() {
}
+void GraphicsView::drawBackground ( QPainter * painter, const QRectF & rect ) {
+ int lineDistance = 20;
+
+ double startX = rect.x();
+ double startY = rect.y();
+ double endX = rect.x() + rect.width();
+ double endY = rect.y() + rect.height();
+
+ QPainterPath currPath;
+ int startPaintX = floor(startX/(double)lineDistance)*lineDistance;
+ int endPaintX = ceil(endX/(double)lineDistance)*lineDistance;
+ for (double i = startPaintX; isetPen(QPen(Qt::lightGray, 1, Qt::SolidLine));
+ painter->drawPath(currPath);
+
+ painter->setPen(QPen(Qt::green, 1, Qt::SolidLine));
+ painter->drawLine(startX,0,endX,0);
+ painter->drawLine(0,startY,0,endY);
+
+}
+
+void GraphicsView::mouseMoveEvent ( QMouseEvent * e ) {
+ QGraphicsView::mouseMoveEvent(e);
+ SimulScene* simulScene = dynamic_cast (scene());
+ if (simulScene != 0 && mainWindowStatusBar !=0) {
+ QPointF scenePos = mapToScene(e->pos());
+ QString posString;
+ posString += "Mausposition: ";
+ posString += "x: " + QLocale().toString(scenePos.x(),'g') + " px"+QChar(8793);
+ posString += QLocale().toString(scenePos.x()*simulScene->getMeterPerPx(),'g') + " m";
+ posString += " y: " + QLocale().toString(scenePos.y(),'g') + " px"+QChar(8793);
+ posString += QLocale().toString(scenePos.y()*simulScene->getMeterPerPx(),'g') + " m";
+ mainWindowStatusBar->showMessage(posString);
+ }
+}
+
+
void GraphicsView::enableOGLViewport() {
//setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));
}
diff --git a/src/graphicsview.h b/src/graphicsview.h
index 405ecc9..7714679 100644
--- a/src/graphicsview.h
+++ b/src/graphicsview.h
@@ -24,13 +24,14 @@
class HomoEFieldItem;
class QTimeLine;
+class QStatusBar;
/**
@author Peter Dahlberg
*/
class GraphicsView : public QGraphicsView {
Q_OBJECT
public:
- GraphicsView();
+ GraphicsView(QWidget * parent = 0, QStatusBar* statusbar = 0);
~GraphicsView();
@@ -38,6 +39,11 @@ class GraphicsView : public QGraphicsView {
void enableOGLViewport();
void disableOGLViewport();
private:
+ QStatusBar * mainWindowStatusBar;
+
+ protected:
+ void drawBackground ( QPainter * painter, const QRectF & rect );
+ void mouseMoveEvent ( QMouseEvent * e );
};
diff --git a/src/homoefielditem.cpp b/src/homoefielditem.cpp
index e0e51ff..9b5aed6 100644
--- a/src/homoefielditem.cpp
+++ b/src/homoefielditem.cpp
@@ -29,7 +29,7 @@ HomoEFieldItem::HomoEFieldItem(QRectF sizeRect)
setRectF(sizeRect);
dockWidget = new HomoEFieldWidget(0,0,this);
setFieldPower(10);
- setFieldLineDistance(10);
+ setFieldLineDistance(12);
setFlag(ItemIsMovable);
setFlag(ItemIsSelectable);
setFlag(ItemIsFocusable);
@@ -38,6 +38,7 @@ HomoEFieldItem::HomoEFieldItem(QRectF sizeRect)
//QGraphicsRectItem * testItem = new QGraphicsRectItem(QRectF(-10,-10,6,6), this);
//testItem->setBrush(Qt::SolidPattern);
+ connect(this, SIGNAL(heightChanged(double)), this, SLOT(handleVoltageChange()));
@@ -124,6 +125,16 @@ void HomoEFieldItem::setFieldPower (double fieldPower ) {
//if (this->fieldPower == fieldPower) return;
this->fieldPower = fieldPower;
emit fieldPowerChanged(fieldPower);
+ handleVoltageChange ();
+}
+
+void HomoEFieldItem::setVoltage (double voltage ) {
+ setFieldPower( voltage/getRectF().height());
+
+}
+
+void HomoEFieldItem::handleVoltageChange () {
+ emit voltageChanged(getFieldPower()*getRectF().height());
}
diff --git a/src/homoefielditem.h b/src/homoefielditem.h
index 8c0efa6..3c1d6b9 100644
--- a/src/homoefielditem.h
+++ b/src/homoefielditem.h
@@ -58,12 +58,15 @@ class HomoEFieldItem : public FieldItem {
public slots:
void setFieldPower (double fieldPower );
-
+ void setVoltage (double voltage );
void setOuterPenWidth ( double theValue );
-
+
+ private slots:
+ void handleVoltageChange();
signals:
void fieldPowerChanged(double fieldPower);
+ void voltageChanged(double voltage);
private:
//! Abstand der Feldlinien in der Zeichnung
diff --git a/src/homoefieldwidget.cpp b/src/homoefieldwidget.cpp
index f07b82b..efd7942 100644
--- a/src/homoefieldwidget.cpp
+++ b/src/homoefieldwidget.cpp
@@ -117,11 +117,13 @@ void HomoEFieldWidget::createWidget()
connect(fieldPowerBox, SIGNAL(valueChanged(double)),homoEField ,SLOT(setFieldPower(double)) );
ExpDoubleSpinBox* voltageBox = new ExpDoubleSpinBox;
- voltageBox->setRange(-1e+200,1e+200);
+ voltageBox->setRange(0,1e+200);
voltageBox->setDecimals(35);
voltageBox->setDisplayDecimals(3);
voltageBox->setKeyboardTracking(false);
voltageBox->setSuffix(" V");
+ connect(homoEField ,SIGNAL(voltageChanged(double)),voltageBox, SLOT(setValue(double)) );
+ connect(voltageBox, SIGNAL(valueChanged(double)),homoEField ,SLOT(setVoltage(double)) );
QGridLayout* constGridLayout = new QGridLayout;
//constGridLayout->setSizeConstraint(QLayout::SetFixedSize);
diff --git a/src/icons/view-fullscreen.svg b/src/icons/view-fullscreen.svg
new file mode 100644
index 0000000..06f8404
--- /dev/null
+++ b/src/icons/view-fullscreen.svg
@@ -0,0 +1,7402 @@
+
+
+
diff --git a/src/icons/view-restore.svg b/src/icons/view-restore.svg
new file mode 100644
index 0000000..b7f6d3b
--- /dev/null
+++ b/src/icons/view-restore.svg
@@ -0,0 +1,7402 @@
+
+
+
diff --git a/src/lsim.cpp b/src/lsim.cpp
index 829b099..92d00e6 100644
--- a/src/lsim.cpp
+++ b/src/lsim.cpp
@@ -39,7 +39,7 @@
lsim::lsim() {
- gview = new GraphicsView();
+ gview = new GraphicsView(this,statusBar());
setCentralWidget (gview);
createScene();
createActions();
@@ -66,6 +66,19 @@ void lsim::about() {
void lsim::createActions() {
+ QIcon fullScreenIcon = QIcon(":icons/view-fullscreen.svg");
+ fullScreenIcon.addFile(":icons/view-restore.svg", QSize(),QIcon::Normal,QIcon::On);
+ fullScreenIcon.addFile(":icons/view-restore.svg", QSize(),QIcon::Disabled,QIcon::On);
+ fullScreenIcon.addFile(":icons/view-restore.svg", QSize(),QIcon::Active,QIcon::On);
+ fullScreenIcon.addFile(":icons/view-restore.svg", QSize(),QIcon::Selected,QIcon::On);
+ acts.fullScreenAct = new QAction (tr ("&Vollbild"), this);
+ acts.fullScreenAct->setStatusTip (tr ("In den Vollbildmodus Wechseln"));
+ acts.fullScreenAct->setIcon(fullScreenIcon);
+ acts.fullScreenAct->setCheckable(true);
+ acts.fullScreenAct->setShortcut(QKeySequence(Qt::Key_F11));
+ connect (acts.fullScreenAct, SIGNAL (toggled(bool)), this, SLOT (goToFullscreen(bool)));
+ connect (this, SIGNAL (fullScreenModeChanged(bool)), acts.fullScreenAct, SLOT (setChecked(bool)));
+
acts.aboutAct = new QAction (tr ("&About"), this);
acts.aboutAct->setStatusTip (tr ("Show the application's About box"));
connect (acts.aboutAct, SIGNAL (triggered()), this, SLOT (about()));
@@ -115,6 +128,7 @@ void lsim::createActions() {
acts.exitAct = new QAction (tr ("Beenden"), this);
acts.exitAct->setStatusTip (tr ("lsim beenden"));
+ acts.exitAct->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q));
acts.exitAct->setIcon(QIcon(":icons/application-exit.svg"));
connect (acts.exitAct, SIGNAL (triggered()), qApp, SLOT (quit()));
@@ -152,13 +166,13 @@ void lsim::createActions() {
//Edit, insert, Modechange
- acts.itemEditModeAct = new QAction (tr ("Bearbeiten"), this);
+ acts.itemEditModeAct = new QAction (tr ("Felder Bearbeiten"), this);
acts.itemEditModeAct->setStatusTip (tr ("Die Anordnung ver\344ndern"));
acts.itemEditModeAct->setIcon(QIcon(":icons/edit-scene.svg"));
acts.itemEditModeAct->setCheckable(true);
acts.itemEditModeAct->setData(QVariant(SimulScene::FieldItemEdit));
- acts.insertEFieldItemAct = new QAction (tr ("elektrisches Feld hizuf\374gen"), this);
+ acts.insertEFieldItemAct = new QAction (tr ("Elektrisches Feld hizuf\374gen"), this);
acts.insertEFieldItemAct->setStatusTip (tr ("Ein elekrisches Feld hizuf\374gen"));
acts.insertEFieldItemAct->setIcon(QIcon(":icons/insert-efield.svg"));
acts.insertEFieldItemAct->setCheckable(true);
@@ -194,16 +208,18 @@ void lsim::createActions() {
//Window Mode
- acts.editModeAct = new QAction (tr ("in den Bearbeitungsmodus wechseln"), this);
+ acts.editModeAct = new QAction (tr ("&Bearbeitungsmodus"), this);
acts.editModeAct->setStatusTip (tr ("erm\366glicht das Bearbeiten der Anordnung"));
acts.editModeAct->setIcon(QIcon(":icons/window-editmode.svg"));
acts.editModeAct->setCheckable(true);
+ acts.editModeAct->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_E));
acts.editModeAct->setData(QVariant(lsim::EditMode));
- acts.simulationModeAct = new QAction (tr ("in den Simulation wechseln"), this);
+ acts.simulationModeAct = new QAction (tr ("&Simulationsmodus"), this);
acts.simulationModeAct->setStatusTip (tr ("Berechnet die Flugbahn und wechselt in den Simulationsmodus"));
acts.simulationModeAct->setIcon(QIcon(":icons/window-simulmode.svg"));
acts.simulationModeAct->setCheckable(true);
+ acts.simulationModeAct->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_R));
acts.simulationModeAct->setData(QVariant(lsim::SimulationMode));
windowModeActGroup = new QActionGroup(this);
@@ -215,15 +231,21 @@ void lsim::createActions() {
}
void lsim::createMenus() {
- fileMenu = menuBar()->addMenu(tr("Datei"));
+ fileMenu = menuBar()->addMenu(tr("&Datei"));
+ fileMenu->addAction(acts.resetAct);
fileMenu->addAction(acts.exitAct);
- menuBar()->addMenu(tr("Bearbeiten"));
- viewMenu = menuBar()->addMenu(tr("Ansicht"));
- viewMenu->addAction(acts.resetAct);
+ editMenu = menuBar()->addMenu(tr("&Bearbeiten"));
- menuBar()->addMenu(tr("Einstellungen"));
+
+ viewMenu = menuBar()->addMenu(tr("&Ansicht"));
+ viewMenu->addAction(acts.editModeAct);
+ viewMenu->addAction(acts.simulationModeAct);
+ viewMenu->addSeparator();
+ viewMenu->addAction(acts.fullScreenAct);
+
+ menuBar()->addMenu(tr("&Einstellungen"));
helpMenu = menuBar()->addMenu (tr ("&Help"));
@@ -271,6 +293,7 @@ void lsim::initWindowMode(WindowMode newMode) {
removeDockWidget(simulOptDock);
gview->setDragMode(QGraphicsView::NoDrag);
gview->setInteractive(true);
+
if (newMode == lsim::EditMode) {
simulscene->clearFlightPath();
acts.timerStop->trigger();
@@ -280,8 +303,9 @@ void lsim::initWindowMode(WindowMode newMode) {
addDockWidget(Qt::LeftDockWidgetArea,fieldItemEditDock);
addDockWidget(Qt::LeftDockWidgetArea,probeItemDock);
addDockWidget(Qt::LeftDockWidgetArea,sceneDock);
- tabifyDockWidget(probeItemDock,fieldItemEditDock);
- tabifyDockWidget(fieldItemEditDock, sceneDock);
+ tabifyDockWidget(probeItemDock,sceneDock);
+ tabifyDockWidget(sceneDock,fieldItemEditDock);
+ sceneDock->show();
sceneModeBar->setVisible(true);
upDownBar->setVisible(true);
fieldItemEditDock->setVisible(true);
@@ -303,11 +327,11 @@ void lsim::initWindowMode(WindowMode newMode) {
acts.itemEditModeAct->trigger();
simulscene->clearSelection();
acts.calculate->trigger();
- //gview->setScene(simulscene); //ueberfluessige scrollbars entfernen
gview->centerOn(simulscene->getProbeChargeItem());
}
+
}
@@ -318,6 +342,7 @@ void lsim::createStatusBar() {
void lsim::createScene() {
simulscene = new SimulScene();
gview->setScene(simulscene);
+ simulscene->addRect(-qApp->desktop()->screenGeometry().width(),-qApp->desktop()->screenGeometry().height(), qApp->desktop()->screenGeometry().width()*2, qApp->desktop()->screenGeometry().height()*2)->setVisible(false);
}
void lsim::createDocks() {
@@ -614,4 +639,13 @@ void lsim::resetAll() {
simulscene->resetScene();
gview->centerOn(0,0);
+}
+
+void lsim::goToFullscreen(bool yesno) {
+ if (yesno && windowState() == Qt::WindowFullScreen) return;
+ if (!yesno && windowState() != Qt::WindowFullScreen) return;
+
+ setWindowState(windowState() ^ Qt::WindowFullScreen);
+ //qDebug()<< (windowState() == Qt::WindowFullScreen);
+ emit fullScreenModeChanged(windowState() == Qt::WindowFullScreen);
}
\ No newline at end of file
diff --git a/src/lsim.h b/src/lsim.h
index 1df402f..18958f2 100644
--- a/src/lsim.h
+++ b/src/lsim.h
@@ -55,6 +55,8 @@ class lsim: public QMainWindow {
protected:
void closeEvent (QCloseEvent *event);
+ public slots:
+ void goToFullscreen(bool yesno);
private slots:
void about();
@@ -119,6 +121,7 @@ class lsim: public QMainWindow {
QAction *probeChargeItemPlaceAct;
QAction *resetAct;
+ QAction *fullScreenAct;
};
Actions acts;
@@ -138,6 +141,7 @@ class lsim: public QMainWindow {
signals:
void windowModeChanged(WindowMode mode);
void timeLineDurationChangedSec(double duration);
+ void fullScreenModeChanged(bool mode);
};
#endif
diff --git a/src/main.cpp b/src/main.cpp
index b22b556..21fd332 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -22,14 +22,30 @@
#include
#include
#include "lsim.h"
+#include
+#include
int main(int argc, char *argv[])
{
Q_INIT_RESOURCE(application);
QApplication app(argc, argv);
app.setWindowIcon(QIcon(":icons/lsim.svg"));
+
lsim * mw = new lsim();
- mw->show();
+ int dWidth = app.desktop()->availableGeometry(mw).width();
+ int dHeight = app.desktop()->availableGeometry(mw).height();
+ int frWidth = mw->frameGeometry().width() - mw->geometry().width();
+ int frHeight = mw->frameGeometry().height() - mw->geometry().height();
+ mw->resize(0.9*dWidth-frWidth, 0.9 *dHeight-frHeight);
+ int midX = (dWidth - mw->frameGeometry().width()) / 2.0;
+ int midY = (dHeight - mw->frameGeometry().height()) / 2.0;
+ mw->move(midX,midY);
+ if (dWidth <= 1024) {
+ mw->showMaximized();
+ }
+ else {
+ mw->show();
+ }
return app.exec();
}
diff --git a/src/simulscene.cpp b/src/simulscene.cpp
index 84fe65e..f7766f8 100644
--- a/src/simulscene.cpp
+++ b/src/simulscene.cpp
@@ -37,6 +37,7 @@
#include
#include
#include
+#include
SimulScene::SimulScene ( QObject* parent ) : QGraphicsScene ( parent ) {
@@ -60,7 +61,7 @@ SimulScene::SimulScene ( QObject* parent ) : QGraphicsScene ( parent ) {
setFlightPathVisible();
- addLine(0,-298,0,298,QPen(Qt::green, 1, Qt::SolidLine) )->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
+ /*addLine(0,-298,0,298,QPen(Qt::green, 1, Qt::SolidLine) )->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
addLine(-398,0,398,0,QPen(Qt::green, 1, Qt::SolidLine) )->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
for (int i = -39; i< 39; ++i) {
@@ -76,7 +77,7 @@ SimulScene::SimulScene ( QObject* parent ) : QGraphicsScene ( parent ) {
line ->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
line->setZValue(-1);
}
- }
+ }*/
ellipse1 = new GraphicsEllipseItem();
ellipse1->setRect(-2,-2,5,5);
@@ -102,6 +103,11 @@ SimulScene::SimulScene ( QObject* parent ) : QGraphicsScene ( parent ) {
}
+void SimulScene::drawBackground ( QPainter * painter, const QRectF & rect ) {
+ QGraphicsScene::drawBackground(painter,rect);
+}
+
+
void SimulScene::setupVars() {
//variablen initialisieren
setTimePerStep(1e-10);
@@ -111,7 +117,7 @@ void SimulScene::setupVars() {
setPxPerSec(90.0);
timer->setFrameRange(0,100);
- timer->setUpdateInterval(30);
+ //timer->setUpdateInterval(30);
timer->setCurveShape(QTimeLine::LinearCurve);
setTimeLineDuration(30000);
@@ -457,7 +463,7 @@ void SimulScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent) {
}
void SimulScene::keyPressEvent (QKeyEvent *keyevent) {
- if(keyevent->key() == Qt::Key_Delete) {
+ if(keyevent->matches(QKeySequence::Delete)) {
deleteSelectedFieldItems();
}
}
diff --git a/src/simulscene.h b/src/simulscene.h
index bf94972..6050988 100644
--- a/src/simulscene.h
+++ b/src/simulscene.h
@@ -199,6 +199,7 @@ class SimulScene : public QGraphicsScene {
void mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent);
void mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent);
void keyPressEvent ( QKeyEvent * keyEvent );
+ void drawBackground ( QPainter * painter, const QRectF & rect );
};
#endif