void KSPopupMenu::initPopupMenu( SkyObject *obj, QString name, QString type, QString info, bool showDetails, bool showObsList, bool showFlags ) { KStarsData* data = KStarsData::Instance(); SkyMap * map = SkyMap::Instance(); clear(); bool showLabel = name != i18n("star") && !name.isEmpty(); if( name.isEmpty() ) name = i18n( "Empty sky" ); addFancyLabel( name ); addFancyLabel( type ); addFancyLabel( info ); addFancyLabel( KStarsData::Instance()->skyComposite()->getConstellationBoundary()->constellationName( obj ) ); //Insert Rise/Set/Transit labels SkyObject* o = obj->clone(); addSeparator(); addFancyLabel( riseSetTimeLabel(o, true), -2 ); addFancyLabel( riseSetTimeLabel(o, false), -2 ); addFancyLabel( transitTimeLabel(o), -2 ); addSeparator(); delete o; // Show 'Select this object' item when in object pointing mode and when obj is not empty sky if(map->isInObjectPointingMode() && obj->type() != 21) { addAction( i18n( "Select this object"), map, SLOT(slotObjectSelected())); } //Insert item for centering on object addAction( i18n( "Center && Track" ), map, SLOT( slotCenter() ) ); if ( showFlags ) { //Insert actions for flag operations initFlagActions( obj ); } //Insert item for measuring distances //FIXME: add key shortcut to menu items properly! addAction( i18n( "Angular Distance To... [" ), map, SLOT(slotBeginAngularDistance()) ); addAction( i18n( "Starhop from here to... " ), map, SLOT(slotBeginStarHop()) ); //Insert item for Showing details dialog if ( showDetails ) addAction( i18nc( "Show Detailed Information Dialog", "Details" ), map, SLOT( slotDetail() ) ); //Insert "Add/Remove Label" item if ( showLabel ) { if ( map->isObjectLabeled( obj ) ) { addAction( i18n( "Remove Label" ), map, SLOT( slotRemoveObjectLabel() ) ); } else { addAction( i18n( "Attach Label" ), map, SLOT( slotAddObjectLabel() ) ); } } // Should show observing list if( showObsList ) { if ( data->observingList()->contains( obj ) ) addAction( i18n("Remove From Observing WishList"), data->observingList(), SLOT( slotRemoveObject() ) ); else addAction( i18n("Add to Observing WishList"), data->observingList(), SLOT( slotAddObject() ) ); } // Should we show trail actions TrailObject* t = dynamic_cast<TrailObject*>( obj ); if( t ) { if( t->hasTrail() ) addAction( i18n( "Remove Trail" ), map, SLOT( slotRemovePlanetTrail() ) ); else addAction( i18n( "Add Trail" ), map, SLOT( slotAddPlanetTrail() ) ); } addAction( i18n("Simulate eyepiece view"), map, SLOT( slotEyepieceView() ) ); addSeparator(); #ifdef HAVE_XPLANET if ( obj->isSolarSystem() && obj->type() != SkyObject::COMET ) { // FIXME: We now have asteroids -- so should this not be isMajorPlanet() || Pluto? QMenu *xplanetSubmenu = new QMenu(); xplanetSubmenu->setTitle( i18n( "Print Xplanet view" ) ); xplanetSubmenu->addAction( i18n( "To screen" ), map, SLOT( slotXplanetToScreen() ) ); xplanetSubmenu->addAction( i18n( "To file..." ), map, SLOT( slotXplanetToFile() ) ); addMenu( xplanetSubmenu ); } #endif addSeparator(); addINDI(); }
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. }