23 #include <QTextStream> 
   24 #include <QHBoxLayout> 
   26 #include <QTreeWidgetItem> 
   28 #include <kstandarddirs.h> 
   29 #include <kmessagebox.h> 
   30 #include <kpushbutton.h> 
   31 #include <klineedit.h> 
   32 #include <ktoolinvocation.h> 
   33 #include <ktemporaryfile.h> 
   34 #include <kio/netaccess.h> 
   57 #include <config-kstars.h> 
   60 #include <basedevice.h> 
   72     Data(0), DataComet(0), Pos(0), Links(0), Adv(0), 
Log(0)
 
   74     setFaceType( Tabbed );
 
   75     setBackgroundRole( QPalette::Base );
 
   77     titlePalette = palette();
 
   78     titlePalette.setColor( backgroundRole(), palette().color( QPalette::Active, QPalette::Highlight ) );
 
   79     titlePalette.setColor( foregroundRole(), palette().color( QPalette::Active, QPalette::HighlightedText ) );
 
   82     Thumbnail = 
new QPixmap( 200, 200 );
 
   84     setCaption( i18n( 
"Object Details" ) );
 
   85     setButtons( KDialog::Close );
 
   88     createPositionTab( ut, geo );
 
   98 void DetailDialog::createGeneralTab()
 
  101     addPage( Data, i18n(
"General") );
 
  103     Data->Names->setPalette( titlePalette );
 
  106     connect( Data->ObsListButton, SIGNAL( clicked() ), 
this, SLOT( 
addToObservingList() ) );
 
  107     connect( Data->CenterButton, SIGNAL( clicked() ), 
this, SLOT( 
centerMap() ) );
 
  109     connect( Data->ScopeButton, SIGNAL( clicked() ), 
this, SLOT( 
centerTelescope() ) );
 
  111     Data->ScopeButton->setEnabled(
false);
 
  113     connect( Data->Image, SIGNAL( clicked() ), 
this, SLOT( 
updateThumbnail() ) );
 
  116     Data->IllumLabel->setVisible( 
false ); 
 
  117     Data->Illumination->setVisible( 
false );
 
  119     Data->BVIndex->setVisible( 
false ); 
 
  120     Data->BVLabel->setVisible( 
false );
 
  131     QString pname, oname, objecttyp, constellationname, str;
 
  133     switch ( selectedObject->
type() ) {
 
  137         Data->Names->setText( s->
longname() );
 
  141                 Data->Names->setText( s->
longname() + QString( 
", HD%1" ).arg( QString::number( s->
getHDIndex() ) ) );
 
  143                 Data->Names->setText( QString( 
", HD%1" ).arg( QString::number( s->
getHDIndex() ) ) );
 
  145         objecttyp = s->
sptype() + 
' ' + i18n(
"star");
 
  146         Data->Magnitude->setText( 
i18nc( 
"number in magnitudes", 
"%1 mag" ,
 
  147                                          KGlobal::locale()->formatNumber( s->
mag(), 1 ) ) );  
 
  149         Data->BVLabel->setVisible( 
true );
 
  150         Data->BVIndex->setVisible( 
true );
 
  152             Data->BVIndex->setText( QString::number( s->
getBVIndex() , 
'g', 2 ) );
 
  156         Data->Image->setFrameStyle( QFrame::NoFrame );
 
  157         disconnect( Data->Image, SIGNAL( clicked() ), 
this, SLOT( 
updateThumbnail() ) );
 
  161             Data->Distance->setText( QString(
i18nc(
"larger than 2000 parsecs", 
"> 2000 pc") ) );
 
  163             Data->Distance->setText( 
i18nc( 
"number in parsecs", 
"%1 pc" ,
 
  164                                             KGlobal::locale()->formatNumber( s->
distance(), 0 ) ) );
 
  166             Data->Distance->setText( 
i18nc( 
"number in parsecs", 
"%1 pc" ,
 
  167                                             KGlobal::locale()->formatNumber( s->
distance(), 1 ) ) );
 
  169             Data->Distance->setText( 
i18nc( 
"number in parsecs", 
"%1 pc" ,
 
  170                                             KGlobal::locale()->formatNumber( s->
distance(), 2 ) ) );
 
  173         Data->AngSizeLabel->setText( QString() );
 
  174         Data->AngSize->setText( QString() );
 
  175         Data->AngSizeLabel->setFont( Data->AngSize->font() );
 
  177             Data->AngSizeLabel->setText( 
i18nc( 
"the star is a multiple star", 
"multiple" ) + 
',' );
 
  178             Data->AngSize->setText( 
i18nc( 
"the star is a variable star", 
"variable" ) );
 
  180             Data->AngSizeLabel->setText( 
i18nc( 
"the star is a multiple star", 
"multiple" ) );
 
  182             Data->AngSizeLabel->setText( 
i18nc( 
"the star is a variable star", 
"variable" ) );
 
  191         Data->Names->setText( ps->
longname() );
 
  193         if ( ps->
name() == 
"Sun" )
 
  194             objecttyp = i18n(
"G5 star");
 
  195         else if ( ps->
name() == 
"Moon" )
 
  197         else if ( ps->
name() == i18n(
"Pluto") || ps->
name() == 
"Ceres" || ps->
name() == 
"Eris" ) 
 
  198             objecttyp = i18n(
"Dwarf planet");
 
  203         if ( selectedObject->
name() == 
"Moon" ) {
 
  204             Data->IllumLabel->setVisible( 
true );
 
  205             Data->Illumination->setVisible( 
true );
 
  206             Data->Illumination->setText( QString(
"%1 %").arg( KGlobal::locale()->formatNumber( ((
KSMoon *)selectedObject)->illum()*100., 0 ) ) );
 
  210             Data->Magnitude->setText( 
i18nc( 
"number in magnitudes", 
"%1 mag" ,
 
  211                                              KGlobal::locale()->formatNumber( ((
KSComet *)selectedObject)->getTotalMagnitudeParameter(), 1 ) ) );  
 
  214             Data->Magnitude->setText( 
i18nc( 
"number in magnitudes", 
"%1 mag" ,
 
  215                                              KGlobal::locale()->formatNumber( ps->
mag(), 1 ) ) );  
 
  219         if ( ps->
name() == 
"Moon" ) {
 
  220             Data->Distance->setText( 
i18nc(
"distance in kilometers", 
"%1 km",
 
  221                                            KGlobal::locale()->formatNumber( ps->
rearth()*
AU_KM ) ) );
 
  223             Data->Distance->setText( 
i18nc(
"distance in Astronomical Units", 
"%1 AU",
 
  224                                            KGlobal::locale()->formatNumber( ps->
rearth() ) ) );
 
  229             if ( ps->
name() == 
"Sun" || ps->
name() == 
"Moon" )
 
  230                 Data->AngSize->setText( 
i18nc(
"angular size in arcminutes", 
"%1 arcmin",
 
  231                                               KGlobal::locale()->formatNumber( ps->
angSize() ) ) ); 
 
  233                 Data->AngSize->setText( 
i18nc(
"angular size in arcseconds",
"%1 arcsec",
 
  234                                               KGlobal::locale()->formatNumber( ps->
angSize()*60.0 ) ) ); 
 
  236             Data->AngSize->setText( 
"--" );
 
  244         Data->Names->setText(sup->
name());
 
  246         Data->Magnitude->setText( 
i18nc( 
"number in magnitudes", 
"%1 mag" ,
 
  247                                          KGlobal::locale()->formatNumber( sup->
mag(), 1 ) ) );
 
  248         Data->Distance->setText( 
"---" );
 
  268         if ( dso->
ugc() != 0 ) {
 
  269             if ( ! oname.isEmpty() ) oname += 
", ";
 
  270             oname += 
"UGC " + QString::number( dso->
ugc() );
 
  272         if ( dso->
pgc() != 0 ) {
 
  273             if ( ! oname.isEmpty() ) oname += 
", ";
 
  274             oname += 
"PGC " + QString::number( dso->
pgc() );
 
  277         if ( ! oname.isEmpty() ) pname += 
", " + oname;
 
  278         Data->Names->setText( pname );
 
  285             Data->Magnitude->setText( 
i18nc( 
"integrated flux value", 
"%1 %2" ,
 
  288         else if ( dso->
mag() > 90.0 )
 
  289             Data->Magnitude->setText( 
"--" );
 
  291             Data->Magnitude->setText( 
i18nc( 
"number in magnitudes", 
"%1 mag" ,
 
  292                                              KGlobal::locale()->formatNumber( dso->
mag(), 1 ) ) );  
 
  295         Data->Distance->setText( 
"--" );
 
  298         if ( dso->
a() > 10.0 )
 
  299             Data->AngSize->setText( 
i18nc(
"angular size in arcminutes", 
"%1 arcmin",
 
  300                                           KGlobal::locale()->formatNumber(dso->
a(), 0 ) ) );
 
  302             Data->AngSize->setText( 
i18nc(
"angular size in arcminutes", 
"%1 arcmin",
 
  303                                           KGlobal::locale()->formatNumber( dso->
a(), 1 ) ) );
 
  305             Data->AngSize->setText( 
"--" );
 
  311     switch ( selectedObject->
type() ) {
 
  315             Data->IncludeData->layout()->addWidget( DataComet );
 
  319             DataComet->Perihelion->setText( str + 
" AU" );
 
  325             DataComet->EarthMOID->setText( str );
 
  327             DataComet->OrbitID->setText( ast->
getOrbitID() );
 
  332                 DataComet->NEO->setText( 
"Yes" );
 
  334                 DataComet->NEO->setText( 
"No" );
 
  340             DataComet->Albedo->setText( str );
 
  346             DataComet->Diameter->setText( str );
 
  349                 DataComet->Dimensions->setText( 
"" );
 
  351                 DataComet->Dimensions->setText( ast->
getDimensions() + 
" km" );
 
  357             DataComet->Rotation->setText( str );
 
  362                 str.setNum( ast->
getPeriod() ).append( 
" y" );
 
  363             DataComet->Period->setText( str );
 
  370             Data->IncludeData->layout()->addWidget( DataComet );
 
  374             DataComet->Perihelion->setText( str + 
" AU" );
 
  380             DataComet->EarthMOID->setText( str );
 
  382             DataComet->OrbitID->setText( com->
getOrbitID() );
 
  387                 DataComet->NEO->setText( 
"Yes" );
 
  389                 DataComet->NEO->setText( 
"No" );
 
  395             DataComet->Albedo->setText( str );
 
  401             DataComet->Diameter->setText( str );
 
  404                 DataComet->Dimensions->setText( 
"" );
 
  406                 DataComet->Dimensions->setText( com->
getDimensions() + 
" km" );
 
  412             DataComet->Rotation->setText( str );
 
  417                 str.setNum( com->
getPeriod() ).append( 
" y" );
 
  418             DataComet->Period->setText( str );
 
  429         Data->ObjectTypeInConstellation->setText(
 
  432         Data->ObjectTypeInConstellation->setText( 
 
  433             i18nc(
"%1 type of sky object (planet, asteroid etc), %2 name of a constellation", 
"%1 in %2", objecttyp,
 
  434                   KStarsData::Instance()->skyComposite()->getConstellationBoundary()->constellationName( selectedObject ) ) );
 
  439     addPage( Pos,  i18n(
"Position") );
 
  441     Pos->CoordTitle->setPalette( titlePalette );
 
  442     Pos->RSTTitle->setPalette( titlePalette );
 
  448     QString sEpoch = QString::number( ut.
epoch(), 
'f', 1 );
 
  450     sEpoch.replace( 
'.', KGlobal::locale()->decimalSymbol() );
 
  452     kDebug() << (selectedObject->
deprecess(data->
updateNum(),2451545.0l)).ra0().toHMSString() << (selectedObject->
deprecess(data->
updateNum(),2451545.0l)).dec0().toDMSString() << endl;
 
  454     Pos->RALabel->setText( i18n( 
"RA (%1):", sEpoch ) );
 
  455     Pos->DecLabel->setText( i18n( 
"Dec (%1):", sEpoch ) );
 
  456     Pos->RA->setText( selectedObject->
ra().toHMSString() );
 
  457     Pos->Dec->setText( selectedObject->
dec().toDMSString() );
 
  458     Pos->Az->setText( selectedObject->
az().toDMSString() );
 
  461         a = selectedObject->
alt();
 
  464     Pos->Alt->setText( a.toDMSString() );
 
  468         Pos->RA0->setText( selectedObject->
ra0().toHMSString() );
 
  469         Pos->Dec0->setText( selectedObject->
dec0().toDMSString() );
 
  472         Pos->RA0->setText( 
"--" );
 
  473         Pos->Dec0->setText( 
"--" );
 
  481     if ( ha.Hours() > 12.0 ) {
 
  482         ha.setH( 24.0 - ha.Hours() );
 
  485     Pos->HA->setText( QString(
"%1%2").arg(sgn).arg( ha.toHMSString() ) );
 
  490         Pos->Airmass->setText( KGlobal::locale()->formatNumber(
 
  491                                    1./sin( selectedObject->
alt().radians() ), 2 ) );
 
  493         Pos->Airmass->setText( 
"--" );
 
  498     QTime rt = selectedObject->
riseSetTime( ut, geo, 
true ); 
 
  510     QTime st = selectedObject->
riseSetTime(  ut, geo, 
false ); 
 
  517     if ( rt.isValid() ) {
 
  518         Pos->TimeRise->setText( QString().sprintf( 
"%02d:%02d", rt.hour(), rt.minute() ) );
 
  519         Pos->TimeSet->setText( QString().sprintf( 
"%02d:%02d", st.hour(), st.minute() ) );
 
  520         Pos->AzRise->setText( raz.toDMSString() );
 
  521         Pos->AzSet->setText( saz.toDMSString() );
 
  523         if ( selectedObject->
alt().
Degrees() > 0.0 ) {
 
  524             Pos->TimeRise->setText( i18n( 
"Circumpolar" ) );
 
  525             Pos->TimeSet->setText( i18n( 
"Circumpolar" ) );
 
  527             Pos->TimeRise->setText( i18n( 
"Never rises" ) );
 
  528             Pos->TimeSet->setText( i18n( 
"Never rises" ) );
 
  531         Pos->AzRise->setText( 
i18nc( 
"Not Applicable", 
"N/A" ) );
 
  532         Pos->AzSet->setText( 
i18nc( 
"Not Applicable", 
"N/A" ) );
 
  535     Pos->TimeTransit->setText( QString().sprintf( 
"%02d:%02d", tt.hour(), tt.minute() ) );
 
  536     Pos->AltTransit->setText( talt.toDMSString() );
 
  543 void DetailDialog::createLinksTab()
 
  546     if (selectedObject->
name() == QString(
"star"))
 
  550     addPage( Links, i18n( 
"Links" ) );
 
  552     Links->InfoTitle->setPalette( titlePalette );
 
  553     Links->ImagesTitle->setPalette( titlePalette );
 
  555     foreach ( 
const QString &s, selectedObject->
InfoTitle() )
 
  556         Links->InfoTitleList->addItem( 
i18nc( 
"Image/info menu item (should be translated)", s.toLocal8Bit() ) );
 
  560     foreach ( 
const QString &s, selectedObject->
ImageTitle() )
 
  561         Links->ImageTitleList->addItem( 
i18nc( 
"Image/info menu item (should be translated)", s.toLocal8Bit() ) );
 
  566     connect( Links->ViewButton, SIGNAL(clicked()), 
this, SLOT( 
viewLink() ) );
 
  567     connect( Links->AddLinkButton, SIGNAL(clicked()), 
KStars::Instance()->map(), SLOT( addLink() ) );
 
  568     connect( Links->EditLinkButton, SIGNAL(clicked()), 
this, SLOT( 
editLinkDialog() ) );
 
  569     connect( Links->RemoveLinkButton, SIGNAL(clicked()), 
this, SLOT( 
removeLinkDialog() ) );
 
  572     connect( Links->InfoTitleList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), 
this, SLOT( 
setCurrentLink(QListWidgetItem*) ) );
 
  573     connect( Links->InfoTitleList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), Links->ImageTitleList, SLOT( clearSelection() ) );
 
  576     connect( Links->ImageTitleList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), 
this, SLOT( 
setCurrentLink(QListWidgetItem*) ) );
 
  577     connect( Links->ImageTitleList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), Links->InfoTitleList, SLOT( clearSelection() ));
 
  579     connect( Links->InfoTitleList, SIGNAL(itemDoubleClicked(QListWidgetItem *)), 
this, SLOT( 
viewLink() ) );
 
  580     connect( Links->ImageTitleList, SIGNAL(itemDoubleClicked(QListWidgetItem *)), 
this, SLOT( 
viewLink() ) );
 
  582     connect( Links->InfoTitleList, SIGNAL(itemSelectionChanged ()), 
this, SLOT( 
updateButtons() ) );
 
  583     connect( Links->ImageTitleList, SIGNAL(itemSelectionChanged ()), 
this, SLOT( 
updateButtons() ));
 
  588 void DetailDialog::createAdvancedTab()
 
  592     if (selectedObject->
name() == QString(
"star") ||
 
  600     addPage( Adv,  i18n( 
"Advanced" ) );
 
  602     connect( Adv->ADVTree, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, 
int)), 
this, SLOT(
viewADVData()));
 
  607 void DetailDialog::createLogTab()
 
  610     if ( selectedObject->
name() == QString(
"star") )
 
  615     addPage( 
Log,  i18n( 
"Log" ) );
 
  617     Log->LogTitle->setPalette( titlePalette );
 
  619     if ( selectedObject->
userLog().isEmpty() )
 
  620         Log->UserLog->setText(i18n(
"Record here observation logs and/or data on %1.", selectedObject->
translatedName()));
 
  622         Log->UserLog->setText(selectedObject->
userLog());
 
  625     connect( 
Log->UserLog, SIGNAL( focusOut() ), 
this, SLOT( 
saveLogData() ) );
 
  638     if (m_CurrentLink == NULL) 
return;
 
  640     if ( m_CurrentLink->listWidget() == Links->InfoTitleList ) {
 
  641         URL = QString( selectedObject->
InfoList().at( Links->InfoTitleList->row(m_CurrentLink) ) );
 
  643     else if ( m_CurrentLink->listWidget() == Links->ImageTitleList ) {
 
  644         URL = QString( selectedObject->
ImageList().at( Links->ImageTitleList->row(m_CurrentLink) ) );
 
  647     if ( !URL.isEmpty() )
 
  648         KToolInvocation::invokeBrowser(URL);
 
  653     Links->InfoTitleList->clear();
 
  654     Links->ImageTitleList->clear();
 
  656     foreach ( 
const QString &s, selectedObject->
InfoTitle() )
 
  657         Links->InfoTitleList->addItem( s );
 
  659     foreach ( 
const QString &s, selectedObject->
ImageTitle() )
 
  660         Links->ImageTitleList->addItem( s );
 
  669     if (!Links->InfoTitleList->selectedItems().isEmpty() || !Links->ImageTitleList->selectedItems().isEmpty())
 
  674     Links->ViewButton->setEnabled(anyLink);
 
  675     Links->EditLinkButton->setEnabled(anyLink);
 
  676     Links->RemoveLinkButton->setEnabled(anyLink);
 
  682     QString search_line, replace_line, currentItemTitle, currentItemURL;
 
  684     if (m_CurrentLink == NULL) 
return;
 
  687     editDialog.setCaption( i18n(
"Edit Link") );
 
  688     editDialog.setButtons( KDialog::Ok | KDialog::Cancel );
 
  689     QFrame editFrame( &editDialog );
 
  691     if ( m_CurrentLink->listWidget() == Links->InfoTitleList )
 
  693         row = Links->InfoTitleList->row( m_CurrentLink );
 
  695         currentItemTitle = m_CurrentLink->text();
 
  696         currentItemURL = selectedObject->
InfoTitle().at( row );
 
  697         search_line = selectedObject->
name();
 
  699         search_line += currentItemTitle;
 
  701         search_line += currentItemURL;
 
  704     else if ( m_CurrentLink->listWidget() == Links->ImageTitleList )
 
  706         row = Links->ImageTitleList->row( m_CurrentLink );
 
  708         currentItemTitle = m_CurrentLink->text();
 
  709         currentItemURL = selectedObject->
ImageTitle().at( row ); 
 
  710         search_line = selectedObject->
name();
 
  712         search_line += currentItemTitle;
 
  714         search_line += currentItemURL;
 
  719     QLineEdit editNameField(&editFrame);
 
  720     editNameField.setObjectName(
"nameedit");
 
  721     editNameField.home(
false);
 
  722     editNameField.setText(currentItemTitle);
 
  723     QLabel editLinkURL(i18n(
"URL:"), &editFrame);
 
  724     QLineEdit editLinkField(&editFrame);
 
  725     editLinkField.setObjectName(
"urledit");
 
  726     editLinkField.home(
false);
 
  727     editLinkField.setText(currentItemURL);
 
  728     QVBoxLayout vlay(&editFrame);
 
  729     vlay.setObjectName(
"vlay");
 
  730     QHBoxLayout editLinkLayout(&editFrame);
 
  731     editLinkLayout.setObjectName(
"editlinklayout");
 
  732     editLinkLayout.addWidget(&editLinkURL);
 
  733     editLinkLayout.addWidget(&editLinkField);
 
  734     vlay.addWidget( &editNameField );
 
  735     vlay.addLayout( &editLinkLayout );
 
  736     editDialog.setMainWidget( &editFrame );
 
  740     if ( editDialog.exec() != QDialog::Accepted )
 
  744     if (editLinkField.text() == currentItemURL && editNameField.text() == currentItemTitle)
 
  748         replace_line = selectedObject->
name() + 
':' + editNameField.text() + 
':' + editLinkField.text();
 
  752             selectedObject->
InfoTitle().replace(row, editNameField.text());
 
  753             selectedObject->
InfoList().replace(row, editLinkField.text());
 
  757             selectedObject->
ImageTitle().replace(row, editNameField.text());
 
  758             selectedObject->
ImageList().replace(row, editLinkField.text());
 
  762         updateLocalDatabase(type, search_line, replace_line);
 
  766             Links->InfoTitleList->setCurrentRow(row);
 
  768             Links->ImageTitleList->setCurrentRow(row);
 
  775     QString currentItemURL, currentItemTitle, LineEntry, TempFileName, FileLine;
 
  777     KTemporaryFile TempFile;
 
  778     TempFile.setAutoRemove(
false);
 
  780     TempFileName = TempFile.fileName();
 
  782     if (m_CurrentLink == NULL) 
return;
 
  784     if ( m_CurrentLink->listWidget() == Links->InfoTitleList )
 
  786         row = Links->InfoTitleList->row( m_CurrentLink );
 
  787         currentItemTitle = m_CurrentLink->text();
 
  788         currentItemURL   = selectedObject->
InfoList()[row];
 
  789         LineEntry = selectedObject->
name();
 
  791         LineEntry += currentItemTitle;
 
  793         LineEntry += currentItemURL;
 
  796     else if ( m_CurrentLink->listWidget() == Links->ImageTitleList )
 
  798         row = Links->ImageTitleList->row( m_CurrentLink );
 
  799         currentItemTitle = m_CurrentLink->text();
 
  800         currentItemURL   = selectedObject->
ImageList()[row];
 
  801         LineEntry = selectedObject->
name();
 
  803         LineEntry += currentItemTitle;
 
  805         LineEntry += currentItemURL;
 
  810     if (KMessageBox::warningContinueCancel( 0, i18n(
"Are you sure you want to remove the %1 link?", currentItemTitle), i18n(
"Delete Confirmation"),KStandardGuiItem::del())!=KMessageBox::Continue)
 
  815         selectedObject->
InfoTitle().removeAt(row);
 
  816         selectedObject->
InfoList().removeAt(row);
 
  821         selectedObject->
ImageList().removeAt(row);
 
  825     updateLocalDatabase(type, LineEntry);
 
  829         Links->InfoTitleList->clearSelection();
 
  831         Links->ImageTitleList->clearSelection();
 
  835 void DetailDialog::updateLocalDatabase(
int type, 
const QString &search_line, 
const QString &replace_line)
 
  837     QString TempFileName, file_line;
 
  839     KTemporaryFile TempFile;
 
  840     TempFile.setAutoRemove(
false);
 
  843     bool replace = !replace_line.isEmpty();
 
  845     if (search_line.isEmpty())
 
  848     TempFileName = TempFile.fileName();
 
  855         URLFile.setFileName( KStandardDirs::locateLocal( 
"appdata", 
"info_url.dat" ) );
 
  861         URLFile.setFileName( KStandardDirs::locateLocal( 
"appdata", 
"image_url.dat" ) );
 
  866     KIO::file_copy(KUrl::fromPath(URLFile.fileName()), KUrl::fromPath(TempFileName), -1, KIO::Overwrite | KIO::HideProgressInfo );
 
  869     if ( !URLFile.open( QIODevice::WriteOnly) )
 
  871         kDebug() << 
"DetailDialog: Failed to open " << URLFile.fileName();
 
  872         kDebug() << 
"KStars cannot save to user database";
 
  880     while (!temp_stream->atEnd())
 
  882         file_line = temp_stream->readLine();
 
  884         if (file_line == search_line)
 
  887                 (*out_stream) << replace_line << endl;
 
  892             (*out_stream) << file_line << endl;
 
  903 void DetailDialog::populateADVTree()
 
  905     QTreeWidgetItem *parent = NULL, *temp = NULL;
 
  916             temp = 
new QTreeWidgetItem(parent, QStringList(item->
Name));
 
  918                 Adv->ADVTree->addTopLevelItem(temp);
 
  925             if (parent != NULL) parent = parent->parent();
 
  930             new QTreeWidgetItem(parent, QStringList(item->
Name));
 
  940     QTreeWidgetItem * current = Adv->ADVTree->currentItem();
 
  943     if ( !current || current->childCount()>0 )  
return;
 
  947         if (item->
Name == current->text(0))
 
  950             link = parseADVData(link);
 
  951             KToolInvocation::invokeBrowser(link);
 
  957 QString DetailDialog::parseADVData( 
const QString &inlink )
 
  959     QString link = inlink;
 
  963     if ( (index = link.indexOf(
"KSOBJ")) != -1)
 
  965         link.remove(index, 5);
 
  966         link = link.insert(index, selectedObject->
name());
 
  969     if ( (index = link.indexOf(
"KSRA")) != -1)
 
  971         link.remove(index, 4);
 
  972         subLink.sprintf(
"%02d%02d%02d", selectedObject->
ra0().
hour(), selectedObject->
ra0().
minute(), selectedObject->
ra0().
second());
 
  973         subLink = subLink.insert(2, 
"%20");
 
  974         subLink = subLink.insert(7, 
"%20");
 
  976         link = link.insert(index, subLink);
 
  978     if ( (index = link.indexOf(
"KSDEC")) != -1)
 
  980         link.remove(index, 5);
 
  984             subLink = subLink.insert(3, 
"%20");
 
  985             subLink = subLink.insert(8, 
"%20");
 
  990             subLink = subLink.insert(0, 
"%2B");
 
  991             subLink = subLink.insert(5, 
"%20");
 
  992             subLink = subLink.insert(10, 
"%20");
 
  994         link = link.insert(index, subLink);
 
 1021         KMessageBox::sorry(0, i18n(
"KStars did not find any active telescopes."));
 
 1035         if (bd->isConnected() == 
false)
 
 1037             KMessageBox::error(0, i18n(
"Telescope %1 is offline. Please connect and retry again.", gd->
getDeviceName()));
 
 1051     KMessageBox::sorry(0, i18n(
"KStars did not find any active telescopes."));
 
 1060         Thumbnail->scaled( Data->Image->width(), Data->Image->height() );
 
 1061         Thumbnail->fill( Data->DataFrame->palette().color( QPalette::Window ) );
 
 1062         Data->Image->setPixmap( *Thumbnail );
 
 1070     QString fname = 
"thumb-" + selectedObject->
name().toLower().remove( 
' ' ) + 
".png";
 
 1073         Thumbnail->load( file.fileName(), 
"PNG" );
 
 1076         Thumbnail->load( file.fileName(), 
"PNG" );
 
 1078         Thumbnail->scaled( Data->Image->width(), Data->Image->height() );
 
 1079         Thumbnail->fill( Data->DataFrame->palette().color( QPalette::Window ) );
 
 1082     Data->Image->setPixmap( *Thumbnail );
 
 1086     QPointer<ThumbnailPicker> tp = 
new ThumbnailPicker( selectedObject, *Thumbnail, 
this );
 
 1088     if ( tp->exec() == QDialog::Accepted ) {
 
 1089         QString fname = KStandardDirs::locateLocal( 
"appdata", 
"thumb-" + selectedObject->
name().toLower().remove( 
' ' ) + 
".png" );
 
 1091         Data->Image->setPixmap( *(tp->image()) );
 
 1095         if ( tp->imageFound() ) {
 
 1096             Data->Image->pixmap()->save( fname, 
"PNG" );
 
 1097             *Thumbnail = *(Data->Image->pixmap());
 
 1100             f.setFileName( fname );
 
 1110     DataFrame->setBackgroundRole( QPalette::Base );
 
 1121     CoordFrame->setBackgroundRole( QPalette::Base );
 
 1122     RSTFrame->setBackgroundRole( QPalette::Base );
 
 1140 #include "detaildialog.moc" 
dms riseSetTimeAz(const KStarsDateTime &dt, const GeoLocation *geo, bool rst)
 
dms transitAltitude(const KStarsDateTime &dt, const GeoLocation *geo)
 
SkyPoint deprecess(const KSNumbers *num, long double epoch=J2000)
Obtain a Skypoint with RA0 and Dec0 set from the RA, Dec of this skypoint. 
 
KStarsData is the backbone of KStars. 
 
CatalogComponent * customCatalog()
 
void updateButtons()
Update View/Edit/Remove buttons. 
 
QString translatedName() const 
 
void slotCenter()
Center the display at the point ClickedPoint. 
 
virtual bool runCommand(int command, void *ptr=NULL)=0
 
QString fluxFrequency() const 
 
void removeLinkDialog()
remove a URL entry from either the Images or Info lists, and update the user's *url.dat file. 
 
QString sptype(void) const 
Returns entire spectral type string. 
 
void updateLists()
Rebuild the Image and Info URL lists for this object. 
 
static INDIListener * Instance()
 
KStarsDateTime addDays(int nd) const 
Modify the Date/Time by adding a number of days. 
 
virtual INDI::BaseDevice * getBaseDevice()=0
 
double getPerihelion()
Returns Perihelion distance. 
 
virtual QString longname(void) const 
 
void setClickedObject(SkyObject *o)
Set the ClickedObject pointer to the argument. 
 
static KStarsData * Instance()
 
const double & Degrees() const 
 
QTime riseSetTime(const KStarsDateTime &dt, const GeoLocation *geo, bool rst, bool exact=true)
Determine the time at which the point will rise or set. 
 
virtual const char * getDeviceName()=0
 
void saveUserLog(const QString &newLog)
Save new user log text. 
 
static KStars * Instance()
 
QTime transitTime(const KStarsDateTime &dt, const GeoLocation *geo)
The same iteration technique described in riseSetTime() is used here. 
 
bool openDataFile(QFile &file, const QString &filename)
Attempt to open the data file named filename, using the QFile object "file". 
 
float getRotationPeriod()
 
void centerMap()
Slot to center this object in the display. 
 
ObservingList * observingList() const 
 
void updateThumbnail()
Slot to update thumbnail image for the object, using the Thumbnail Picker tool. 
 
Contains all relevant information for specifying a location on Earth: City Name, State/Province name...
 
QStringList & ImageList()
 
dms GSTtoLST(const dms &gst) const 
 
A subclass of KSPlanetBase that implements comets. 
 
Represents the supernova object. 
 
i18nc("string from libindi, used in the config dialog","100x")
 
void showThumbnail()
Slot to display the thumbnail image for the object. 
 
Extension of KDateTime for KStars KStarsDateTime can represent the date/time as a Julian Day...
 
A subclass of KSPlanetBase that implements asteroids. 
 
bool isSolarSystem() const 
 
QString translatedLongName() const 
 
SkyMapComposite * skyComposite()
 
An angle, stored as degrees, but expressible in many ways. 
 
void addToObservingList()
Slot to add this object to the observing list. 
 
DetailDialog(SkyObject *o, const KStarsDateTime &ut, GeoLocation *geo, QWidget *parent=0)
Constructor. 
 
void viewADVData()
Open the web browser to the selected online astronomy database, with a query to the object of this De...
 
Provides all necessary information about a deep-sky object: data inherited from SkyObject (coordinate...
 
virtual DeviceFamily getType()=0
 
QStringList & InfoTitle()
 
void saveLogData()
Save the User's text in the Log Tab to the userlog.dat file. 
 
void viewLink()
Slot for viewing the selected image or info URL in the web browser. 
 
A subclass of SkyObject that provides information needed for the Moon. 
 
SkyPoint recomputeCoords(const KStarsDateTime &dt, const GeoLocation *geo=0)
The coordinates for the object on date dt are computed and returned, but the object's internal coordi...
 
virtual bool setProperty(QObject *)=0
 
This is the canvas on which the sky is painted. 
 
static bool useAltAz()
Get Use horizontal coordinate system? 
 
ConstellationBoundaryLines * getConstellationBoundary()
 
virtual QString longname(void) const 
If star is unnamed return "star" otherwise return the longname. 
 
QString translatedName2() const 
 
A subclass of TrailObject that provides additional information needed for most solar system objects...
 
~DetailDialog()
Destructor. 
 
void centerTelescope()
Slot to center this object in the telescope. 
 
QString constellationName(SkyPoint *p)
 
virtual QString name(void) const 
 
void editLinkDialog()
Open a dialog to edit a URL in either the Images or Info lists, and update the user's *url...
 
This is a subclass of SkyObject. 
 
static QString typeName(const int t)
 
Provides all necessary information about an object in the sky: its coordinates, name(s), type, magnitude, and QStringLists of URLs for images and webpages regarding the object. 
 
float getRotationPeriod()
 
QStringList & ImageTitle()
 
virtual QString name(void) const 
 
void setCurrentLink(QListWidgetItem *it)
Set the currently-selected URL resource.