1 /***************************************************************************
2 jmoontool.cpp - Display overhead view of the solar system
4 begin : Sun May 25 2003
5 copyright : (C) 2003 by Jason Harris
6 email : jharris@30doradus.org
7 ***************************************************************************/
8 /***************************************************************************
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
15 ***************************************************************************/
23 #include "jmoontool.h"
24 #include "jupitermoons.h"
26 #include "kstarsdata.h"
29 #include "planetcatalog.h"
31 #include "ksnumbers.h"
33 JMoonTool::JMoonTool(QWidget
*parent
, const char *name
)
34 : KDialogBase( KDialogBase::Plain
, i18n("Jupiter Moons Tool"), Close
, Close
, parent
, name
)
36 ksw
= (KStars
*)parent
;
38 QFrame
*page
= plainPage();
39 QVBoxLayout
*vlay
= new QVBoxLayout( page
, 0, 0 );
45 colCa
= "YellowGreen";
47 QLabel
*labIo
= new QLabel( "Io", page
);
48 QLabel
*labEu
= new QLabel( "Europa", page
);
49 QLabel
*labGn
= new QLabel( "Ganymede", page
);
50 QLabel
*labCa
= new QLabel( "Callisto", page
);
52 labIo
->setSizePolicy( QSizePolicy::Expanding
, QSizePolicy::Fixed
);
53 labEu
->setSizePolicy( QSizePolicy::Expanding
, QSizePolicy::Fixed
);
54 labGn
->setSizePolicy( QSizePolicy::Expanding
, QSizePolicy::Fixed
);
55 labCa
->setSizePolicy( QSizePolicy::Expanding
, QSizePolicy::Fixed
);
56 labIo
->setAlignment( AlignHCenter
);
57 labEu
->setAlignment( AlignHCenter
);
58 labGn
->setAlignment( AlignHCenter
);
59 labCa
->setAlignment( AlignHCenter
);
61 labIo
->setPaletteForegroundColor( colIo
);
62 labEu
->setPaletteForegroundColor( colEu
);
63 labGn
->setPaletteForegroundColor( colGn
);
64 labCa
->setPaletteForegroundColor( colCa
);
65 labIo
->setPaletteBackgroundColor( "Black" );
66 labEu
->setPaletteBackgroundColor( "Black" );
67 labGn
->setPaletteBackgroundColor( "Black" );
68 labCa
->setPaletteBackgroundColor( "Black" );
70 QGridLayout
*glay
= new QGridLayout( 2, 2, 0 );
71 glay
->addWidget( labIo
, 0, 0 );
72 glay
->addWidget( labEu
, 1, 0 );
73 glay
->addWidget( labGn
, 0, 1 );
74 glay
->addWidget( labCa
, 1, 1 );
76 pw
= new KStarsPlotWidget( 0.0, 1.0, 0.0, 1.0, page
);
77 pw
->setShowGrid( false );
78 pw
->setYAxisType0( KStarsPlotWidget::TIME
);
79 pw
->setLimits( -12.0, 12.0, -240.0, 240.0 );
80 pw
->setXAxisLabel( i18n( "offset from Jupiter (arcmin)" ) );
81 pw
->setYAxisLabel( i18n( "time since now (days)" ) );
82 vlay
->addLayout( glay
);
83 vlay
->addWidget( pw
);
90 JMoonTool::~JMoonTool()
94 void JMoonTool::initPlotObjects() {
95 KPlotObject
*orbit
[4];
97 long double jd0
= ksw
->data()->ut().djd();
98 KSSun
*ksun
= (KSSun
*)ksw
->data()->PCat
->findByName( "Sun" );
99 KSPlanet
*jup
= (KSPlanet
*)ksw
->data()->PCat
->findByName( "Jupiter" );
102 if ( pw
->objectCount() ) pw
->clearObjectList();
104 orbit
[0] = new KPlotObject( "io", colIo
, KPlotObject::CURVE
, 1, KPlotObject::SOLID
);
105 orbit
[1] = new KPlotObject( "europa", colEu
, KPlotObject::CURVE
, 1, KPlotObject::SOLID
);
106 orbit
[2] = new KPlotObject( "ganymede", colGn
, KPlotObject::CURVE
, 1, KPlotObject::SOLID
);
107 orbit
[3] = new KPlotObject( "callisto", colCa
, KPlotObject::CURVE
, 1, KPlotObject::SOLID
);
108 jpath
= new KPlotObject( "jupiter", colJp
, KPlotObject::CURVE
, 1, KPlotObject::SOLID
);
110 double dy
= 0.01*pw
->dataHeight();
112 //t is the offset from jd0, in hours.
113 for ( double t
=pw
->y(); t
<=pw
->y2(); t
+=dy
) {
114 KSNumbers
num( jd0
+ t
/24.0 );
115 jm
.findPosition( &num
, jup
, ksun
);
117 //jm.x(i) tells the offset from Jupiter, in units of Jupiter's angular radius.
118 //multiply by 0.5*jup->angSize() to get arcminutes
119 for ( unsigned int i
=0; i
<4; ++i
)
120 orbit
[i
]->addPoint( new DPoint( 0.5*jup
->angSize()*jm
.x(i
), t
) );
122 jpath
->addPoint( new DPoint( 0.0, t
) );
125 for ( unsigned int i
=0; i
<4; ++i
)
126 pw
->addObject( orbit
[i
] );
128 pw
->addObject( jpath
);
131 void JMoonTool::keyPressEvent( QKeyEvent
*e
) {
132 switch ( e
->key() ) {
133 case Key_BracketRight
:
135 double dy
= 0.02*pw
->dataHeight();
136 pw
->setLimits( pw
->x(), pw
->x2(), pw
->y()+dy
, pw
->y2()+dy
);
141 case Key_BracketLeft
:
143 double dy
= 0.02*pw
->dataHeight();
144 pw
->setLimits( pw
->x(), pw
->x2(), pw
->y()-dy
, pw
->y2()-dy
);
152 if ( pw
->dataHeight() > 48.0 ) {
153 double dy
= 0.45*pw
->dataHeight();
154 double y0
= pw
->y() + 0.5*pw
->dataHeight();
155 pw
->setLimits( pw
->x(), pw
->x2(), y0
-dy
, y0
+dy
);
164 if ( pw
->dataHeight() < 960.0 ) {
165 double dy
= 0.55*pw
->dataHeight();
166 double y0
= pw
->y() + 0.5*pw
->dataHeight();
167 pw
->setLimits( pw
->x(), pw
->x2(), y0
-dy
, y0
+dy
);
179 default: { e
->ignore(); break; }
183 #include "jmoontool.moc"