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.