void SkyMap::keyPressEvent( QKeyEvent *e ) { KStars* kstars = KStars::Instance(); QString s; bool arrowKeyPressed( false ); bool shiftPressed( false ); float step = 1.0; if ( e->modifiers() & Qt::ShiftModifier ) { step = 10.0; shiftPressed = true; } //If the DBus resume key is not empty, then DBus processing is //paused while we wait for a keypress if ( ! data->resumeKey.isEmpty() && QKeySequence(e->key()) == data->resumeKey ) { //The resumeKey was pressed. Signal that it was pressed by //resetting it to empty; this will break the loop in //KStars::waitForKey() data->resumeKey = QKeySequence(); return; } if(m_previewLegend) { slotCancelLegendPreviewMode(); } switch ( e->key() ) { case Qt::Key_Left : if ( Options::useAltAz() ) { focus()->setAz( dms( focus()->az().Degrees() - step * MINZOOM/Options::zoomFactor() ).reduce() ); focus()->HorizontalToEquatorial( data->lst(), data->geo()->lat() ); } else { focus()->setRA( focus()->ra().Hours() + 0.05*step * MINZOOM/Options::zoomFactor() ); focus()->EquatorialToHorizontal( data->lst(), data->geo()->lat() ); } arrowKeyPressed = true; slewing = true; break; case Qt::Key_Right : if ( Options::useAltAz() ) { focus()->setAz( dms( focus()->az().Degrees() + step * MINZOOM/Options::zoomFactor() ).reduce() ); focus()->HorizontalToEquatorial( data->lst(), data->geo()->lat() ); } else { focus()->setRA( focus()->ra().Hours() - 0.05*step * MINZOOM/Options::zoomFactor() ); focus()->EquatorialToHorizontal( data->lst(), data->geo()->lat() ); } arrowKeyPressed = true; slewing = true; break; case Qt::Key_Up : if ( Options::useAltAz() ) { focus()->setAlt( focus()->alt().Degrees() + step * MINZOOM/Options::zoomFactor() ); if ( focus()->alt().Degrees() > 90.0 ) focus()->setAlt( 90.0 ); focus()->HorizontalToEquatorial( data->lst(), data->geo()->lat() ); } else { focus()->setDec( focus()->dec().Degrees() + step * MINZOOM/Options::zoomFactor() ); if (focus()->dec().Degrees() > 90.0) focus()->setDec( 90.0 ); focus()->EquatorialToHorizontal( data->lst(), data->geo()->lat() ); } arrowKeyPressed = true; slewing = true; break; case Qt::Key_Down: if ( Options::useAltAz() ) { focus()->setAlt( focus()->alt().Degrees() - step * MINZOOM/Options::zoomFactor() ); if ( focus()->alt().Degrees() < -90.0 ) focus()->setAlt( -90.0 ); focus()->HorizontalToEquatorial(data->lst(), data->geo()->lat() ); } else { focus()->setDec( focus()->dec().Degrees() - step * MINZOOM/Options::zoomFactor() ); if (focus()->dec().Degrees() < -90.0) focus()->setDec( -90.0 ); focus()->EquatorialToHorizontal( data->lst(), data->geo()->lat() ); } arrowKeyPressed = true; slewing = true; break; case Qt::Key_Plus: //Zoom in case Qt::Key_Equal: zoomInOrMagStep( e->modifiers() ); break; case Qt::Key_Minus: //Zoom out case Qt::Key_Underscore: zoomOutOrMagStep( e->modifiers() ); break; case Qt::Key_0: //center on Sun setClickedObject( data->skyComposite()->planet( KSPlanetBase::SUN ) ); setClickedPoint( clickedObject() ); slotCenter(); break; case Qt::Key_1: //center on Mercury setClickedObject( data->skyComposite()->planet( KSPlanetBase::MERCURY ) ); setClickedPoint( clickedObject() ); slotCenter(); break; case Qt::Key_2: //center on Venus setClickedObject( data->skyComposite()->planet( KSPlanetBase::VENUS ) ); setClickedPoint( clickedObject() ); slotCenter(); break; case Qt::Key_3: //center on Moon setClickedObject( data->skyComposite()->planet( KSPlanetBase::MOON ) ); setClickedPoint( clickedObject() ); slotCenter(); break; case Qt::Key_4: //center on Mars setClickedObject( data->skyComposite()->planet( KSPlanetBase:: MARS) ); setClickedPoint( clickedObject() ); slotCenter(); break; case Qt::Key_5: //center on Jupiter setClickedObject( data->skyComposite()->planet( KSPlanetBase::JUPITER ) ); setClickedPoint( clickedObject() ); slotCenter(); break; case Qt::Key_6: //center on Saturn setClickedObject( data->skyComposite()->planet( KSPlanetBase::SATURN ) ); setClickedPoint( clickedObject() ); slotCenter(); break; case Qt::Key_7: //center on Uranus setClickedObject( data->skyComposite()->planet( KSPlanetBase::URANUS ) ); setClickedPoint( clickedObject() ); slotCenter(); break; case Qt::Key_8: //center on Neptune setClickedObject( data->skyComposite()->planet( KSPlanetBase::NEPTUNE ) ); setClickedPoint( clickedObject() ); slotCenter(); break; case Qt::Key_9: //center on Pluto setClickedObject( data->skyComposite()->planet( KSPlanetBase::PLUTO ) ); setClickedPoint( clickedObject() ); slotCenter(); break; case Qt::Key_BracketLeft: // Begin measuring angular distance if( !rulerMode ) slotBeginAngularDistance(); break; case Qt::Key_Escape: // Cancel angular distance measurement { if( rulerMode ) slotCancelRulerMode(); if( m_fovCaptureMode ) slotFinishFovCaptureMode(); break; } case Qt::Key_C: //Center clicked object if ( clickedObject() ) slotCenter(); break; case Qt::Key_D: //Details window for Clicked/Centered object { SkyObject *orig = 0; if ( shiftPressed ) { orig = clickedObject(); setClickedObject( focusObject() ); } if ( clickedObject() ) { slotDetail(); } if ( orig ) { setClickedObject( orig ); } break; } case Qt::Key_P: //Show Popup menu for Clicked/Centered object if ( shiftPressed ) { if ( focusObject() ) focusObject()->showPopupMenu( pmenu, QCursor::pos() ); } else { if ( clickedObject() ) clickedObject()->showPopupMenu( pmenu, QCursor::pos() ); } break; case Qt::Key_O: //Add object to Observing List { SkyObject *orig = 0; if ( shiftPressed ) { orig = clickedObject(); setClickedObject( focusObject() ); } if ( clickedObject() ) { kstars->observingList()->slotAddObject(); } if ( orig ) { setClickedObject( orig ); } break; } case Qt::Key_L: //Toggle User label on Clicked/Centered object { SkyObject *orig = 0; if ( shiftPressed ) { orig = clickedObject(); setClickedObject( focusObject() ); } if ( clickedObject() ) { if ( isObjectLabeled( clickedObject() ) ) slotRemoveObjectLabel(); else slotAddObjectLabel(); } if ( orig ) { setClickedObject( orig ); } break; } case Qt::Key_T: //Toggle planet trail on Clicked/Centered object (if solsys) { SkyObject *orig = 0; if ( shiftPressed ) { orig = clickedObject(); setClickedObject( focusObject() ); } KSPlanetBase* planet = dynamic_cast<KSPlanetBase*>( clickedObject() ); if( planet ) { if( planet->hasTrail() ) slotRemovePlanetTrail(); else slotAddPlanetTrail(); } if ( orig ) { setClickedObject( orig ); } break; } case Qt::Key_R: { // Toggle relativistic corrections Options::setUseRelativistic( ! Options::useRelativistic() ); kDebug() << "Relativistc corrections: " << Options::useRelativistic(); forceUpdate(); break; } case Qt::Key_A: Options::setUseAntialias( ! Options::useAntialias() ); kDebug() << "Use Antialiasing: " << Options::useAntialias(); forceUpdate(); break; case Qt::Key_K: { if(m_fovCaptureMode) slotCaptureFov(); break; } case Qt::Key_PageUp: { KStars::Instance()->selectPreviousFov(); break; } case Qt::Key_PageDown: { KStars::Instance()->selectNextFov(); break; } default: // We don't want to do anything in this case. Key is unknown return; } if ( arrowKeyPressed ) { stopTracking(); setDestination( *focus() ); } forceUpdate(); //need a total update, or slewing with the arrow keys doesn't work. }
void PlanetCatalog::EquatorialToHorizontal( dms *LST, const dms *lat ) { for (KSPlanetBase * ksp = planets.first(); ksp != 0; ksp = planets.next()) { ksp->EquatorialToHorizontal( LST, lat); if ( ksp->hasTrail() ) ksp->updateTrail( LST, lat ); } }