[Kstars-devel] KDE/kdeedu/kstars/kstars
Jason Harris
kstars at 30doradus.org
Mon May 19 02:04:13 CEST 2008
By the way, I noticed that if the initial startup position is below
the horizon, the program quits after showing the main window for a
fraction of a second. The quit happens whether you select "Reset
Position" or "Keep Position" in the warning dialog.
gdb claims that there's no crash, it just "exits normally". I have no
idea why it exits. Anyone want to have a look? I might not have time
to give it my attention until later next week...
Jason
On 5/18/08, Jason Harris <kstars at 30doradus.org> wrote:
> SVN commit 809477 by harris:
>
> Reorganizing initFocus():
>
> + Fix bug #162059: when leaving the program in Horizontal coordinates
> and not tracking on the sky, the initial position on next startup should
> be the same Alt/Az coordinates. Fixed.
>
> + When leaving the program tracking on a star named "star", the initial
> position on the next startup should be that same star, Fixed.
>
> They seem like simple fixes, but it actually took quite a bit to fix
> these. Another symptom of the bubble-gum-and-duct-tape nature of the
> startup code...
>
> Is it worth trying to backport this fix to the 3.x codebase? Are we
> going to have 3.5.10?
>
> CCMAIL: kstars-devel at kde.org
> BUG: 162059
>
>
>
> M +14 -12 kstars.cpp
> M +3 -1 kstars.h
> M +8 -2 kstarsactions.cpp
> M +37 -28 kstarsinit.cpp
> M +15 -1 skycomponents/starcomponent.cpp
>
>
> --- trunk/KDE/kdeedu/kstars/kstars/kstars.cpp #809476:809477
> @@ -146,7 +146,7 @@
> }
> }
>
> -void KStars::applyConfig() {
> +void KStars::applyConfig( bool doApplyFocus ) {
> if ( Options::isTracking() ) {
> actionCollection()->action("track_object")->setText( i18n( "Stop
> &Tracking" ) );
> actionCollection()->action("track_object")->setIcon(
> KIcon("document-encrypt") );
> @@ -192,19 +192,21 @@
> data()->setLocationFromOptions();
>
> //Focus
> - SkyObject *fo = data()->objectNamed( Options::focusObject() );
> - if ( fo && fo != map()->focusObject() ) {
> - map()->setClickedObject( fo );
> - map()->setClickedPoint( fo );
> - map()->slotCenter();
> - }
> -
> - if ( ! fo ) {
> - SkyPoint fp( Options::focusRA(), Options::focusDec() );
> - if ( fp.ra()->Degrees() != map()->focus()->ra()->Degrees() ||
> fp.dec()->Degrees() != map()->focus()->dec()->Degrees() ) {
> - map()->setClickedPoint( &fp );
> + if ( doApplyFocus ) {
> + SkyObject *fo = data()->objectNamed( Options::focusObject() );
> + if ( fo && fo != map()->focusObject() ) {
> + map()->setClickedObject( fo );
> + map()->setClickedPoint( fo );
> map()->slotCenter();
> }
> +
> + if ( ! fo ) {
> + SkyPoint fp( Options::focusRA(), Options::focusDec() );
> + if ( fp.ra()->Degrees() != map()->focus()->ra()->Degrees() ||
> fp.dec()->Degrees() != map()->focus()->dec()->Degrees() ) {
> + map()->setClickedPoint( &fp );
> + map()->slotCenter();
> + }
> + }
> }
> }
>
> --- trunk/KDE/kdeedu/kstars/kstars/kstars.h #809476:809477
> @@ -128,8 +128,10 @@
> /**@short Apply config options throughout the program.
> *In most cases, options are set in the "Options" object directly,
> *but for some things we have to manually react to config changes.
> + *@param doApplyFocus If true, then focus posiiton will be set
> + *from config file
> */
> - void applyConfig();
> + void applyConfig( bool doApplyFocus = true );
>
> public Q_SLOTS:
> /**DBUS interface function.
> --- trunk/KDE/kdeedu/kstars/kstars/kstarsactions.cpp #809476:809477
> @@ -1058,9 +1058,15 @@
> void KStars::slotAboutToQuit()
> {
> //store focus values in Options
> + //If not trcking and using Alt/Az coords, stor the Alt/Az coordinates
> if( skymap && skymap->focus() && skymap->focus()->ra() ) {
> - Options::setFocusRA( skymap->focus()->ra()->Hours() );
> - Options::setFocusDec( skymap->focus()->dec()->Degrees() );
> + if ( Options::useAltAz && ! Options::isTracking() ) {
> + Options::setFocusRA( skymap->focus()->az()->Degrees() );
> + Options::setFocusDec( skymap->focus()->alt()->Degrees() );
> + } else {
> + Options::setFocusRA( skymap->focus()->ra()->Hours() );
> + Options::setFocusDec( skymap->focus()->dec()->Degrees() );
> + }
> }
>
> //Store Window geometry in Options object
> --- trunk/KDE/kdeedu/kstars/kstars/kstarsinit.cpp #809476:809477
> @@ -602,9 +602,6 @@
> //Initialize Observing List
> obsList = new ObservingList( this );
>
> - data()->setFullTimeUpdate();
> - updateTime();
> -
> //Do not start the clock if "--paused" specified on the cmd line
> if ( StartClockRunning )
> data()->clock()->start();
> @@ -613,11 +610,14 @@
> connect( data(), SIGNAL( clearCache() ), this,
> SLOT( clearCachedFindDialog() ) );
>
> + //Propagate config settings
> + applyConfig( false );
> +
> //Initialize focus
> initFocus();
>
> - //Propagate config settings
> - applyConfig();
> + data()->setFullTimeUpdate();
> + updateTime();
>
> //show the window. must be before kswizard and messageboxes
> show();
> @@ -635,35 +635,44 @@
> }
>
> void KStars::initFocus() {
> - SkyPoint newPoint;
> + //Case 1: tracking on an object
> + if ( Options::isTracking() && Options::focusObject() != i18n("nothing")
> ) {
> + SkyObject *oFocus;
> + if ( Options::focusObject() == i18n("star") ) {
> + SkyPoint p( Options::focusRA(), Options::focusDec() );
> + double maxrad = 1.0;
>
> - if ( Options::focusRA() == 180.0 && Options::focusDec() == 45.0 ) {
> - newPoint.setAz( Options::focusRA() );
> - newPoint.setAlt( Options::focusDec() );
> - newPoint.HorizontalToEquatorial( LST(), geo()->lat() );
> - } else {
> - newPoint.set( Options::focusRA(), Options::focusDec() );
> - newPoint.EquatorialToHorizontal( LST(), geo()->lat() );
> - }
> + oFocus = data()->skyComposite()->starNearest( &p, maxrad );
> + } else {
> + oFocus = data()->objectNamed( Options::focusObject() );
> + }
>
> - //need to set focusObject before updateTime, otherwise tracking is set
> to false
> - if ( (Options::focusObject() != i18n( "star" ) ) &&
> - (Options::focusObject() != i18n( "nothing" ) ) )
> - map()->setFocusObject( data()->objectNamed( Options::focusObject()
> ) );
> -
> - //if user was tracking last time, track on same object now.
> - if ( Options::isTracking() ) {
> - map()->setClickedObject( data()->objectNamed(
> Options::focusObject() ) );
> - if ( map()->clickedObject() ) {
> - map()->setFocusPoint( map()->clickedObject() );
> - map()->setFocusObject( map()->clickedObject() );
> + if ( oFocus ) {
> + map()->setFocusObject( oFocus );
> + map()->setClickedObject( oFocus );
> + map()->setFocusPoint( oFocus );
> } else {
> - map()->setFocusPoint( &newPoint );
> + kWarning() << "Cannot center on "
> + << Options::focusObject()
> + << ": no object found." << endl;
> }
> +
> + //Case 2: not tracking, and using Alt/Az coords. Set focus point using
> + //FocusRA as the Azimuth, and FocusDec as the Altitude
> + } else if ( ! Options::isTracking() && Options::useAltAz() ) {
> + SkyPoint pFocus;
> + pFocus.setAz( Options::focusRA() );
> + pFocus.setAlt( Options::focusDec() );
> + pFocus.HorizontalToEquatorial( LST(), geo()->lat() );
> + map()->setFocusPoint( &pFocus );
> +
> + //Default: set focus point using FocusRA as the RA and
> + //FocusDec as the Dec
> } else {
> - map()->setFocusPoint( &newPoint );
> + SkyPoint pFocus( Options::focusRA(), Options::focusDec() );
> + pFocus.EquatorialToHorizontal( LST(), geo()->lat() );
> + map()->setFocusPoint( &pFocus );
> }
> -
> data()->setSnapNextFocus();
> map()->setDestination( map()->focusPoint() );
> map()->setFocus( map()->destination() );
> --- trunk/KDE/kdeedu/kstars/kstars/skycomponents/starcomponent.cpp
> #809476:809477
> @@ -76,6 +76,19 @@
> readLineNumbers();
> readData( Options::magLimitDrawStar() );
>
> + //adjust maglimit for ZoomLevel
> + float maglim = Options::magLimitDrawStar();
> + double lgmin = log10(MINZOOM);
> + double lgmax = log10(MAXZOOM);
> + double lgz = log10(Options::zoomFactor());
> +
> + if ( lgz <= 0.75*lgmax )
> + maglim -= (Options::magLimitDrawStar() -
> + Options::magLimitDrawStarZoomOut() ) *
> + (0.75*lgmax - lgz)/(0.75*lgmax - lgmin);
> +
> + m_zoomMagLimit = maglim;
> +
> StarObject::initImages();
> }
>
> @@ -185,13 +198,13 @@
>
> //shortcuts to inform whether to draw different objects
> bool hideFaintStars( checkSlewing && Options::hideStars() );
> - float maglim = Options::magLimitDrawStar();
> double hideStarsMag = Options::magLimitHideStar();
> rereadData();
>
> reindex( data->updateNum() );
>
> //adjust maglimit for ZoomLevel
> + float maglim = Options::magLimitDrawStar();
> double lgmin = log10(MINZOOM);
> double lgmax = log10(MAXZOOM);
> double lgz = log10(Options::zoomFactor());
> @@ -482,6 +495,7 @@
> {
> StarObject *oBest = 0;
> MeshIterator region(m_skyMesh, OBJ_NEAREST_BUF);
> +
> while ( region.hasNext() ) {
> StarList* starList = m_starIndex->at( region.next() );
> for (int i=0; i < starList->size(); ++i) {
> _______________________________________________
> Kstars-devel mailing list
> Kstars-devel at kde.org
> https://mail.kde.org/mailman/listinfo/kstars-devel
>
More information about the Kstars-devel
mailing list