7 #include "pvplotwidget.h"
9 #include "planetviewer.h"
11 #include <KPlotObject>
15 #include <QMouseEvent>
16 #include <QWheelEvent>
23 setMouseTracking(
true);
24 setAntialiasing(
true);
29 void PVPlotWidget::keyPressEvent(
QKeyEvent *e)
31 double xc = (dataRect().right() + dataRect().x()) * 0.5;
32 double yc = (dataRect().bottom() + dataRect().y()) * 0.5;
33 double xstep = 0.01 * (dataRect().right() - dataRect().x());
34 double ystep = 0.01 * (dataRect().bottom() - dataRect().y());
35 double dx = 0.5 * dataRect().width();
36 double dy = 0.5 * dataRect().height();
41 if (xc - xstep > -AUMAX)
43 setLimits(dataRect().x() - xstep, dataRect().
right() - xstep, dataRect().y(), dataRect().bottom());
50 if (xc + xstep < AUMAX)
52 setLimits(dataRect().x() + xstep, dataRect().
right() + xstep, dataRect().y(), dataRect().bottom());
59 if (yc - ystep > -AUMAX)
61 setLimits(dataRect().x(), dataRect().
right(), dataRect().y() - ystep, dataRect().bottom() - ystep);
68 if (yc + ystep < AUMAX)
70 setLimits(dataRect().x(), dataRect().
right(), dataRect().y() + ystep, dataRect().bottom() + ystep);
93 setLimits(-dx, dx, -dy, dy);
94 pv->setCenterPlanet(
i18n(
"Sun"));
100 KPlotPoint *p = plotObjects().at(10)->points().at(0);
101 setLimits(p->
x() - dx, p->
x() + dx, p->
y() - dy, p->
y() + dy);
102 pv->setCenterPlanet(
i18n(
"Mercury"));
109 KPlotPoint *p = plotObjects().at(11)->points().at(0);
110 setLimits(p->
x() - dx, p->
x() + dx, p->
y() - dy, p->
y() + dy);
111 pv->setCenterPlanet(
i18n(
"Venus"));
118 KPlotPoint *p = plotObjects().at(12)->points().at(0);
119 setLimits(p->
x() - dx, p->
x() + dx, p->
y() - dy, p->
y() + dy);
120 pv->setCenterPlanet(
i18n(
"Earth"));
127 KPlotPoint *p = plotObjects().at(13)->points().at(0);
128 setLimits(p->
x() - dx, p->
x() + dx, p->
y() - dy, p->
y() + dy);
129 pv->setCenterPlanet(
i18n(
"Mars"));
136 KPlotPoint *p = plotObjects().at(14)->points().at(0);
137 setLimits(p->
x() - dx, p->
x() + dx, p->
y() - dy, p->
y() + dy);
138 pv->setCenterPlanet(
i18n(
"Jupiter"));
145 KPlotPoint *p = plotObjects().at(15)->points().at(0);
146 setLimits(p->
x() - dx, p->
x() + dx, p->
y() - dy, p->
y() + dy);
147 pv->setCenterPlanet(
i18n(
"Saturn"));
154 KPlotPoint *p = plotObjects().at(16)->points().at(0);
155 setLimits(p->
x() - dx, p->
x() + dx, p->
y() - dy, p->
y() + dy);
156 pv->setCenterPlanet(
"Uranus");
163 KPlotPoint *p = plotObjects().at(17)->points().at(0);
164 setLimits(p->
x() - dx, p->
x() + dx, p->
y() - dy, p->
y() + dy);
165 pv->setCenterPlanet(
i18n(
"Neptune"));
187 mouseButtonDown =
true;
192 void PVPlotWidget::mouseReleaseEvent(
QMouseEvent *)
194 mouseButtonDown =
false;
203 double xc = (dataRect().right() + dataRect().x()) * 0.5;
204 double yc = (dataRect().bottom() + dataRect().y()) * 0.5;
205 double xscale = dataRect().width() / (width() - leftPadding() - rightPadding());
206 double yscale = dataRect().height() / (height() - topPadding() - bottomPadding());
208 xc += (oldx - e->
x()) * xscale;
209 yc -= (oldy - e->
y()) * yscale;
211 if (xc > -AUMAX && xc < AUMAX && yc > -AUMAX && yc < AUMAX)
213 setLimits(xc - 0.5 * dataRect().width(), xc + 0.5 * dataRect().width(), yc - 0.5 * dataRect().height(),
214 yc + 0.5 * dataRect().height());
216 qApp->processEvents();
224 void PVPlotWidget::mouseDoubleClickEvent(
QMouseEvent *e)
226 double xscale = dataRect().width() / (width() - leftPadding() - rightPadding());
227 double yscale = dataRect().height() / (height() - topPadding() - bottomPadding());
229 double xc = dataRect().x() + xscale * (e->
x() - leftPadding());
230 double yc = dataRect().bottom() - yscale * (e->
y() - topPadding());
232 if (xc > -AUMAX && xc < AUMAX && yc > -AUMAX && yc < AUMAX)
234 setLimits(xc - 0.5 * dataRect().width(), xc + 0.5 * dataRect().width(), yc - 0.5 * dataRect().height(),
235 yc + 0.5 * dataRect().height());
239 pv->setCenterPlanet(
QString());
240 for (
unsigned int i = 0; i < 9; ++i)
242 KPlotPoint *point = pv->planetObject(i)->points().at(0);
243 double dx = (point->
x() - xc) / xscale;
246 double dy = (point->
y() - yc) / yscale;
247 if (sqrt(dx * dx + dy * dy) < 4.0)
249 pv->setCenterPlanet(pv->planetName(i));
264 void PVPlotWidget::slotZoomIn()
266 double size = dataRect().width();
269 setLimits(dataRect().x() + factor * 0.01 * size, dataRect().
right() - factor * 0.01 * size,
270 dataRect().y() + factor * 0.01 * size, dataRect().bottom() - factor * 0.01 * size);
275 void PVPlotWidget::slotZoomOut()
277 double size = dataRect().width();
280 setLimits(dataRect().x() - factor * 0.01 * size, dataRect().
right() + factor * 0.01 * size,
281 dataRect().y() - factor * 0.01 * size, dataRect().bottom() + factor * 0.01 * size);
286 void PVPlotWidget::updateFactor(
const int modifier)