• Skip to content
  • Skip to link menu
KDE 3.5 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

kstars

obslistwizard.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002                           obslistwizard.cpp  -  Display overhead view of the solar system
00003                              -------------------
00004     begin                : Thu 23 Jun 2005
00005     copyright            : (C) 2005 by Jason Harris
00006     email                : jharris@30doradus.org
00007  ***************************************************************************/
00008 /***************************************************************************
00009  *                                                                         *
00010  *   This program is free software; you can redistribute it and/or modify  *
00011  *   it under the terms of the GNU General Public License as published by  *
00012  *   the Free Software Foundation; either version 2 of the License, or     *
00013  *   (at your option) any later version.                                   *
00014  *                                                                         *
00015  ***************************************************************************/
00016 
00017 #include <qcheckbox.h>
00018 #include <qlabel.h>
00019 #include <qlayout.h>
00020 #include <qwidgetstack.h>
00021 #include <knuminput.h>
00022 #include <klistbox.h>
00023 #include <klistview.h>
00024 #include <kpushbutton.h>
00025 
00026 #include "dmsbox.h"
00027 #include "kstars.h"
00028 #include "kstarsdata.h"
00029 #include "locationdialog.h"
00030 #include "magnitudespinbox.h"
00031 #include "skyobject.h"
00032 #include "starobject.h"
00033 //#include "libkdeedu/extdate/extdatetimeedit.h"
00034 
00035 #include "obslistwizard.h"
00036 
00037 ObsListWizard::ObsListWizard( QWidget *parent, const char *name ) 
00038   : KDialogBase( KDialogBase::Plain, i18n("Observing List Wizard"), Ok|Cancel, Ok, parent, name )
00039 {
00040     ksw = (KStars*)parent;
00041     QFrame *page = plainPage();
00042     QVBoxLayout *vlay = new QVBoxLayout( page, 0, 0 );
00043 
00044     olw = new ObsListWizardUI( page );
00045     vlay->addWidget( olw );
00046 
00047     connect( olw->AllButton, SIGNAL( clicked() ), this, SLOT( slotAllButton() ) );
00048     connect( olw->NoneButton, SIGNAL( clicked() ), this, SLOT( slotNoneButton() ) );
00049     connect( olw->DeepSkyButton, SIGNAL( clicked() ), this, SLOT( slotDeepSkyButton() ) );
00050     connect( olw->SolarSystemButton, SIGNAL( clicked() ), this, SLOT( slotSolarSystemButton() ) );
00051     connect( olw->LocationButton, SIGNAL( clicked() ), this, SLOT( slotChangeLocation() ) );
00052 
00053     connect( olw->FilterList, SIGNAL( clicked(QListViewItem*) ), this, SLOT( slotShowStackWidget(QListViewItem*) ) );
00054 
00055     //Update the selected observing list when certain UI elements are modified
00056     connect( olw->TypeList, SIGNAL( selectionChanged() ), this, SLOT( slotUpdateObjectCount() ) );
00057     connect( olw->ConstellationList, SIGNAL( selectionChanged() ), this, SLOT( slotUpdateObjectCount() ) );
00058     connect( olw->RAMin, SIGNAL( lostFocus() ), this, SLOT( slotUpdateObjectCount() ) );
00059     connect( olw->RAMax, SIGNAL( lostFocus() ), this, SLOT( slotUpdateObjectCount() ) );
00060     connect( olw->DecMin, SIGNAL( lostFocus() ), this, SLOT( slotUpdateObjectCount() ) );
00061     connect( olw->DecMax, SIGNAL( lostFocus() ), this, SLOT( slotUpdateObjectCount() ) );
00062     connect( olw->RA, SIGNAL( lostFocus() ), this, SLOT( slotUpdateObjectCount() ) );
00063     connect( olw->Dec, SIGNAL( lostFocus() ), this, SLOT( slotUpdateObjectCount() ) );
00064     connect( olw->Radius, SIGNAL( valueChanged(double) ), this, SLOT( slotUpdateObjectCount() ) );
00065 //  connect( olw->Date, SIGNAL( valueChanged( const ExtDate& ) ), this, SLOT( slotApplyFilters() ) );
00066     connect( olw->Mag, SIGNAL( valueChanged( double ) ), this, SLOT( slotUpdateObjectCount() ) );
00067     connect( olw->ExcludeNoMag, SIGNAL( clicked() ), this, SLOT( slotUpdateObjectCount() ) );
00068 
00069     connect( olw->SelectByConstellation, SIGNAL( toggled(bool) ), this, SLOT( slotEnableConstellationPage(bool) ) );
00070     connect( olw->SelectByRect, SIGNAL( toggled(bool) ), this, SLOT( slotEnableRectPage(bool) ) );
00071     connect( olw->SelectByCirc, SIGNAL( toggled(bool) ), this, SLOT( slotEnableCircPage(bool) ) );
00072 //  connect( olw->SelectByDate, SIGNAL( toggled(bool) ), this, SLOT( slotEnableDatePage(bool) ) );
00073     connect( olw->SelectByMag,  SIGNAL( toggled(bool) ), this, SLOT( slotEnableMagPage(bool) ) );
00074 
00075     connect( this, SIGNAL( okClicked() ), this, SLOT( slotApplyFilters() ) );
00076 
00077     initialize();
00078 }
00079 
00080 ObsListWizard::~ObsListWizard()
00081 {
00082 }
00083 
00084 void ObsListWizard::initialize()
00085 {
00086     //Populate the list of constellations
00087     for ( SkyObject *p = ksw->data()->cnameList.first(); p; p = ksw->data()->cnameList.next() ) {
00088         olw->ConstellationList->insertItem( p->name() );
00089     }
00090 
00091 //  //Initialize date
00092 //  olw->Date->setDate( ksw->data()->lt().date() );
00093 
00094     //unSelect all object types
00095     olw->TypeList->selectAll( false );
00096 
00097     olw->Mag->setMinValue( -5.0 );
00098     olw->Mag->setMaxValue( 20.0 );
00099     olw->Mag->setValue( 6.0 );
00100 
00101     olw->FilterList->setSelected( olw->FilterList->firstChild(), true );
00102 
00103     olw->RA->setDegType( false );
00104     olw->RAMin->setDegType( false );
00105     olw->RAMax->setDegType( false );
00106 
00107     //Initialize object counts
00108     ObjectCount = 0; //number of objects in observing list
00109     StarCount = ksw->data()->starList.count(); //total number of stars
00110     PlanetCount = 10; //Sun, Moon, 8 planets
00111     AsteroidCount = ksw->data()->asteroidList.count(); //total number of asteroids
00112     CometCount = ksw->data()->cometList.count(); //total number of comets
00113     //DeepSkyObjects
00114     OpenClusterCount = 0;
00115     GlobClusterCount = 0;
00116     GasNebCount = 0;
00117     PlanNebCount = 0;
00118     GalaxyCount = 0;
00119     for ( SkyObject *o = (SkyObject*)(ksw->data()->deepSkyList.first()); o; o = (SkyObject*)(ksw->data()->deepSkyList.next()) ) {
00120         if ( o->type() == SkyObject::GALAXY ) ++GalaxyCount; //most deepsky obj are galaxies, so check them first
00121         else if ( o->type() == SkyObject::STAR || o->type() == SkyObject::CATALOG_STAR ) ++StarCount;
00122         else if ( o->type() == SkyObject::OPEN_CLUSTER ) ++OpenClusterCount;
00123         else if ( o->type() == SkyObject::GLOBULAR_CLUSTER ) ++GlobClusterCount;
00124         else if ( o->type() == SkyObject::GASEOUS_NEBULA || o->type() == SkyObject::SUPERNOVA_REMNANT ) ++GasNebCount;
00125         else if ( o->type() == SkyObject::PLANETARY_NEBULA ) ++PlanNebCount;
00126     }
00127 
00128 //  //DEBUG
00129 //  kdDebug() << "StarCount: " << StarCount << endl;
00130 //  kdDebug() << "OpenClusterCount: " << OpenClusterCount << endl;
00131 //  kdDebug() << "GlobClusterCount: " << GlobClusterCount << endl;
00132 //  kdDebug() << "GasNebCount: " << GasNebCount << endl;
00133 //  kdDebug() << "PlanNebCount: " << PlanNebCount << endl;
00134 //  kdDebug() << "GalaxyCount: " << GalaxyCount << endl;
00135 
00136 }
00137 
00138 void ObsListWizard::slotAllButton() { olw->TypeList->selectAll( true ); }
00139 void ObsListWizard::slotNoneButton() { olw->TypeList->selectAll( false ); }
00140 
00141 void ObsListWizard::slotEnableConstellationPage( bool t ) {
00142     olw->ConstellationList->setEnabled(t);
00143 
00144     //disable the other two region options
00145     if ( t ) {
00146         olw->SelectByRect->setChecked( false );
00147         olw->SelectByCirc->setChecked( false );
00148     }
00149     
00150     slotUpdateObjectCount();
00151 }
00152 
00153 void ObsListWizard::slotEnableRectPage( bool t ) {
00154     olw->RAMin->setEnabled(t);
00155     olw->RAMax->setEnabled(t);
00156     olw->DecMin->setEnabled(t);
00157     olw->DecMax->setEnabled(t);
00158 
00159     //disable the other two region options
00160     if ( t ) {
00161         olw->SelectByConstellation->setChecked( false );
00162         olw->SelectByCirc->setChecked( false );
00163     }
00164     
00165     slotUpdateObjectCount();
00166 }
00167 
00168 void ObsListWizard::slotEnableCircPage( bool t ) {
00169     olw->RA->setEnabled(t);
00170     olw->Dec->setEnabled(t);
00171     olw->Radius->setEnabled(t);
00172 
00173     //disable the other two region options
00174     if ( t ) {
00175         olw->SelectByConstellation->setChecked( false );
00176         olw->SelectByRect->setChecked( false );
00177     }
00178     
00179     slotUpdateObjectCount();
00180 }
00181 
00182 // void ObsListWizard::slotEnableDatePage( bool t ) {
00183 //  olw->Date->setEnabled(t);
00184 //  olw->LocationButton->setEnabled(t);
00185 // }
00186 
00187 void ObsListWizard::slotEnableMagPage( bool t ) {
00188     olw->Mag->setEnabled(t);
00189     olw->ExcludeNoMag->setEnabled(t);
00190     slotUpdateObjectCount();
00191 }
00192 
00193 void ObsListWizard::slotShowStackWidget( QListViewItem *i )
00194 {
00195     if ( i ) {
00196         QString t = i->text(0);
00197     
00198         if ( t.contains( i18n( "Object type(s)" ) ) )      olw->FilterStack->raiseWidget( olw->ObjTypePage );
00199         if ( t.contains( i18n( "Region" ) ) )              olw->FilterStack->raiseWidget( olw->RegionPage );
00200         if ( t.contains( i18n( "In constellation(s)" ) ) ) olw->FilterStack->raiseWidget( olw->ConstellationPage );
00201         if ( t.contains( i18n( "Circular" ) ) )            olw->FilterStack->raiseWidget( olw->CircRegionPage );
00202         if ( t.contains( i18n( "Rectangular" ) ) )         olw->FilterStack->raiseWidget( olw->RectRegionPage );
00203 //      if ( t.contains( i18n( "Observable on date" ) ) )  olw->FilterStack->raiseWidget( olw->ObsDatePage );
00204         if ( t.contains( i18n( "Magnitude limit" ) ) )     olw->FilterStack->raiseWidget( olw->MagLimitPage );
00205     }
00206 }
00207 
00208 void ObsListWizard::slotDeepSkyButton()
00209 {
00210     olw->TypeList->selectAll( false );
00211     olw->TypeList->setSelected( olw->TypeList->findItem( i18n( "Open Clusters" ) ), true );
00212     olw->TypeList->setSelected( olw->TypeList->findItem( i18n( "Globular Clusters" ) ), true );
00213     olw->TypeList->setSelected( olw->TypeList->findItem( i18n( "Gaseous Nebulae" ) ), true );
00214     olw->TypeList->setSelected( olw->TypeList->findItem( i18n( "Planetary Nebulae" ) ), true );
00215     olw->TypeList->setSelected( olw->TypeList->findItem( i18n( "Galaxies" ) ), true );
00216 }
00217 
00218 void ObsListWizard::slotSolarSystemButton()
00219 {
00220     olw->TypeList->selectAll( false );
00221     olw->TypeList->setSelected( olw->TypeList->findItem( i18n( "Sun, Moon, Planets" ) ), true );
00222     olw->TypeList->setSelected( olw->TypeList->findItem( i18n( "Comets" ) ), true );
00223     olw->TypeList->setSelected( olw->TypeList->findItem( i18n( "Asteroids" ) ), true );
00224 }
00225 
00226 void ObsListWizard::slotChangeLocation()
00227 {
00228     LocationDialog ld( ksw );
00229 
00230     if ( ld.exec() == QDialog::Accepted ) {
00231         //set geographic location
00232     }
00233 }
00234 
00235 void ObsListWizard::slotUpdateObjectCount() 
00236 {
00237     ObjectCount = 0;
00238     if ( olw->TypeList->findItem( i18n( "Stars" ) )->isSelected() )
00239         ObjectCount += StarCount;
00240     if ( olw->TypeList->findItem( i18n( "Sun, Moon, Planets" ) )->isSelected() ) 
00241         ObjectCount += PlanetCount;
00242     if ( olw->TypeList->findItem( i18n( "Comets" ) )->isSelected() )
00243         ObjectCount += CometCount;
00244     if ( olw->TypeList->findItem( i18n( "Asteroids" ) )->isSelected() )
00245         ObjectCount += AsteroidCount;
00246     if ( olw->TypeList->findItem( i18n( "Galaxies" ) )->isSelected() )
00247         ObjectCount += GalaxyCount;
00248     if ( olw->TypeList->findItem( i18n( "Open Clusters" ) )->isSelected() )
00249         ObjectCount += OpenClusterCount;
00250     if ( olw->TypeList->findItem( i18n( "Globular Clusters" ) )->isSelected() )
00251         ObjectCount += GlobClusterCount;
00252     if ( olw->TypeList->findItem( i18n( "Gaseous Nebulae" ) )->isSelected() )
00253         ObjectCount += GasNebCount;
00254     if ( olw->TypeList->findItem( i18n( "Planetary Nebulae" ) )->isSelected() )
00255         ObjectCount += PlanNebCount;
00256 
00257     applyFilters( false ); //false = only adjust counts, do not build list
00258 }
00259 
00260 void ObsListWizard::applyFilters( bool doBuildList )
00261 {
00262     if ( doBuildList )
00263         obsList().clear();
00264 
00265     //make sure rect region data are valid
00266     rectOk = false;
00267     if ( olw->SelectByRect->isChecked() ) {
00268         ra1 = olw->RAMin->createDms( false, &rectOk ).Hours();
00269         if ( rectOk ) ra2 = olw->RAMax->createDms( false, &rectOk ).Hours();
00270         if ( rectOk ) dc1 = olw->DecMin->createDms( true, &rectOk ).Degrees();
00271         if ( rectOk ) dc2 = olw->DecMax->createDms( true, &rectOk ).Degrees();
00272         if ( ra2 == 0.0 ) ra2 = 24.0;
00273 
00274         //Make sure dc1 < dc2.  
00275         if ( dc1 > dc2 ) {
00276             double temp = dc2;
00277             dc2 = dc1;
00278             dc1 = temp;
00279         }
00280 
00281         //If ra1 > ra2, we may need to swap the two values, or subtract 24h from ra1.
00282         if ( ra1 > ra2 ) {
00283             if ( ra1 - ra2 > 12.0 ) { //the user probably wants a region that straddles 0h
00284                 ra1 -= 24.0;
00285             } else { //the user probably wants ra2 to be the lower limit
00286                 double temp = ra2;
00287                 ra2 = ra1;
00288                 ra1 = temp;
00289             }
00290         }
00291     }
00292 
00293     //make sure circ region data are valid
00294     circOk = false;
00295     if ( olw->SelectByCirc->isChecked() ) {
00296         double ra = olw->RA->createDms( false, &circOk ).Hours();
00297         double dc(0.0);
00298         if ( circOk ) dc = olw->Dec->createDms( true, &circOk ).Degrees();
00299         if ( circOk ) {
00300             pCirc.set( ra, dc );
00301             rCirc = olw->Radius->value();
00302         }
00303     }
00304 
00305     double maglimit = 100.;
00306     if ( olw->SelectByMag->isChecked() ) maglimit = olw->Mag->value();
00307 
00308     //Stars
00309     int starIndex(ksw->data()->starList.count());
00310     if ( olw->TypeList->findItem( i18n( "Stars" ) )->isSelected() ) {
00311         if ( maglimit < 100. ) {
00312             //Stars are sorted by mag, so use binary search algo to find index of faintest mag
00313             int low(0), high(ksw->data()->starList.count()-1), middle;
00314             while ( low < high ) {
00315                 middle = (low + high)/2;
00316                 if ( maglimit == ksw->data()->starList.at(middle)->mag() ) break;
00317                 if ( maglimit <  ksw->data()->starList.at(middle)->mag() ) high = middle - 1;
00318                 if ( maglimit >  ksw->data()->starList.at(middle)->mag() ) low = middle + 1;
00319             }
00320             //now, the star at "middle" has the right mag, but we want the *last* star that has this mag.
00321             for ( starIndex=middle+1; starIndex<ksw->data()->starList.count(); ++starIndex ) {
00322                 if ( ksw->data()->starList.at(starIndex)->mag() > maglimit ) break;
00323             }
00324         }
00325 
00326         if ( doBuildList ) {
00327             for ( uint i=0; i < starIndex; ++i ) {
00328                 SkyObject *o = (SkyObject*)(ksw->data()->starList.at(i));
00329                 applyRegionFilter( o, doBuildList, false ); //false = don't adjust ObjectCount 
00330             }
00331         } else {
00332             ObjectCount -= (ksw->data()->starList.count() - starIndex); //reduce StarCount by appropriate amount
00333             for ( uint i=0; i < starIndex; ++i ) {
00334                 SkyObject *o = (SkyObject*)(ksw->data()->starList.at(i));
00335                 applyRegionFilter( o, doBuildList );
00336             }
00337         }
00338     }
00339 
00340     //Sun, Moon, Planets
00341     if ( olw->TypeList->findItem( i18n( "Sun, Moon, Planets" ) )->isSelected() ) {
00342         applyRegionFilter( (SkyObject*)ksw->data()->PCat->planetSun(), doBuildList );
00343         applyRegionFilter( (SkyObject*)ksw->data()->Moon, doBuildList );
00344         applyRegionFilter( (SkyObject*)ksw->data()->PCat->findByName("Mercury"), doBuildList );
00345         applyRegionFilter( (SkyObject*)ksw->data()->PCat->findByName("Venus"), doBuildList );
00346         applyRegionFilter( (SkyObject*)ksw->data()->PCat->findByName("Mars"), doBuildList );
00347         applyRegionFilter( (SkyObject*)ksw->data()->PCat->findByName("Jupiter"), doBuildList );
00348         applyRegionFilter( (SkyObject*)ksw->data()->PCat->findByName("Saturn"), doBuildList );
00349         applyRegionFilter( (SkyObject*)ksw->data()->PCat->findByName("Uranus"), doBuildList );
00350         applyRegionFilter( (SkyObject*)ksw->data()->PCat->findByName("Neptune"), doBuildList );
00351         applyRegionFilter( (SkyObject*)ksw->data()->PCat->findByName("Pluto"), doBuildList );
00352     }
00353 
00354     //Deep sky objects
00355     for ( SkyObject *o = (SkyObject*)(ksw->data()->deepSkyList.first()); o; o = (SkyObject*)(ksw->data()->deepSkyList.next()) ) {
00356         //Skip unselected object types
00357         if ( (o->type() == SkyObject::STAR || o->type() == SkyObject::CATALOG_STAR) && ! olw->TypeList->findItem( i18n( "Stars" ) )->isSelected() ) continue;
00358         if ( o->type() == SkyObject::OPEN_CLUSTER && ! olw->TypeList->findItem( i18n( "Open Clusters" ) )->isSelected() ) continue;
00359         if ( o->type() == SkyObject::GLOBULAR_CLUSTER && ! olw->TypeList->findItem( i18n( "Globular Clusters" ) )->isSelected() ) continue;
00360         if ( (o->type() == SkyObject::GASEOUS_NEBULA || o->type() == SkyObject::SUPERNOVA_REMNANT) && ! olw->TypeList->findItem( i18n( "Gaseous Nebulae" ) )->isSelected() ) continue;
00361         if ( o->type() == SkyObject::PLANETARY_NEBULA && ! olw->TypeList->findItem( i18n( "Planetary Nebulae" ) )->isSelected() ) continue;
00362         if ( o->type() == SkyObject::GALAXY && ! olw->TypeList->findItem( i18n( "Galaxies" ) )->isSelected() ) continue;
00363         if ( o->type() == SkyObject::TYPE_UNKNOWN ) continue;
00364 
00365         if ( olw->SelectByMag->isChecked() ) {
00366             if ( o->mag() > 90. ) {
00367                 if ( ! olw->ExcludeNoMag->isChecked() ) 
00368                     applyRegionFilter( o, doBuildList );
00369                 else if ( ! doBuildList )
00370                     --ObjectCount;
00371             } else {
00372                 if ( o->mag() <= maglimit ) 
00373                     applyRegionFilter( o, doBuildList );
00374                 else if ( ! doBuildList )
00375                     --ObjectCount;
00376             }
00377         } else {
00378             applyRegionFilter( o, doBuildList );
00379         }
00380     }
00381 
00382     //Comets
00383     if ( olw->TypeList->findItem( i18n( "Comets" ) )->isSelected() ) {
00384         for ( SkyObject *o = (SkyObject*)(ksw->data()->cometList.first()); o; o = (SkyObject*)(ksw->data()->cometList.next()) ) {
00385             //comets don't have magnitudes at this point, so skip mag check
00386             applyRegionFilter( o, doBuildList );
00387         }
00388     }
00389 
00390     //Asteroids
00391     if ( olw->TypeList->findItem( i18n( "Asteroids" ) )->isSelected() ) {
00392         for ( SkyObject *o = (SkyObject*)(ksw->data()->asteroidList.first()); o; o = (SkyObject*)(ksw->data()->asteroidList.next()) ) {
00393     
00394             if ( olw->SelectByMag->isChecked() ) {
00395                 if ( o->mag() > 90. ) {
00396                     if ( ! olw->ExcludeNoMag->isChecked() ) 
00397                         applyRegionFilter( o, doBuildList );
00398                     else if ( ! doBuildList )
00399                         --ObjectCount;
00400                 } else {
00401                     if ( o->mag() <= maglimit ) 
00402                         applyRegionFilter( o, doBuildList );
00403                     else if ( ! doBuildList )
00404                         --ObjectCount;
00405                 }
00406             } else {
00407                 applyRegionFilter( o, doBuildList );
00408             }
00409         }
00410     }
00411 
00412     //Update the object count label
00413     if ( doBuildList ) ObjectCount = obsList().count();
00414     olw->CountLabel->setText( i18n("Current selection: %1 objects").arg( ObjectCount ) );
00415 }
00416     
00417 void ObsListWizard::applyRegionFilter( SkyObject *o, bool doBuildList, bool doAdjustCount ) {
00418     //select by constellation
00419     if ( olw->SelectByConstellation->isChecked() ) {
00420         QString c( o->constellation( ksw->data()->csegmentList, ksw->data()->cnameList ) );
00421         QListBoxItem *it = olw->ConstellationList->findItem( c );
00422 
00423         if ( it && it->isSelected() ) { 
00424             if ( doBuildList ) obsList().append ( o );
00425         } else if ( doAdjustCount ) --ObjectCount;
00426     }
00427 
00428     //select by rectangular region
00429     else if ( rectOk ) {
00430         double ra = o->ra()->Hours();
00431         double dec = o->dec()->Degrees();
00432         bool addObject = false;
00433         if ( dec >= dc1 && dec <= dc2 ) {
00434             if ( ra1 < 0.0 ) {
00435                 if (ra >= ra1 + 24.0 || ra <= ra2 ) { addObject = true; }
00436             } else {
00437                 if ( ra >= ra1 && ra <= ra2 ) { addObject = true; }
00438             }
00439         }
00440 
00441         if ( addObject && doBuildList ) obsList().append( o );
00442         if ( ! addObject && doAdjustCount ) --ObjectCount;
00443     }
00444 
00445     //select by circular region
00446     else if ( circOk ) {
00447         if ( o->angularDistanceTo( &pCirc ).Degrees() < rCirc ) { 
00448             if ( doBuildList ) obsList().append( o );
00449         } else if ( doAdjustCount ) --ObjectCount;
00450     }
00451 
00452     //No region filter, just add the object
00453     else if ( doBuildList ) {
00454         obsList().append( o );
00455     }
00456 }
00457 
00458 #include "obslistwizard.moc"

kstars

Skip menu "kstars"
  • Main Page
  • Modules
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Class Members
  • Related Pages

API Reference

Skip menu "API Reference"
  • keduca
  • kstars
Generated for API Reference by doxygen 1.5.9
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal