void InfoPanel::buildInfoPage(Selection sel, Universe* universe, double tdb) { QString pageText; QTextStream stream(&pageText, QIODevice::WriteOnly); pageHeader(stream); if (sel.body() != NULL) { buildSolarSystemBodyPage(sel.body(), tdb, stream); } else if (sel.star() != NULL) { buildStarPage(sel.star(), universe, tdb, stream); } else if (sel.deepsky() != NULL) { buildDSOPage(sel.deepsky(), universe, stream); } else { stream << "Error: no object selected!\n"; } pageFooter(stream); textBrowser->setHtml(pageText); }
// Utility function that returns the complete path for a selection. string getSelectionName(const Selection& selection, CelestiaCore* appCore) { Universe *universe = appCore->getSimulation()->getUniverse(); switch (selection.getType()) { case Selection::Type_Body: return getBodyName(universe, selection.body()); case Selection::Type_Star: return universe->getStarCatalog()->getStarName(*selection.star()); case Selection::Type_DeepSky: return universe->getDSOCatalog()->getDSOName(selection.deepsky()); case Selection::Type_Location: { std::string name = selection.location()->getName(); Body* parentBody = selection.location()->getParentBody(); if (parentBody != NULL) name = getBodyName(universe, parentBody) + ":" + name; return name; } default: return ""; } }
// Set the object visibility flag. static int object_setvisible(lua_State* l) { CelxLua celx(l); celx.checkArgs(2, 2, "One argument expected to object:setvisible()"); Selection* sel = this_object(l); bool visible = celx.safeGetBoolean(2, AllErrors, "Argument to object:setvisible() must be a boolean"); if (sel->body() != NULL) { sel->body()->setVisible(visible); } else if (sel->deepsky() != NULL) { sel->deepsky()->setVisible(visible); } return 0; }
void CelestiaAppWindow::slotAddBookmark() { // Set the default bookmark title to the name of the current selection Selection sel = m_appCore->getSimulation()->getSelection(); QString defaultTitle; if (sel.body() != NULL) { defaultTitle = QString::fromUtf8(sel.body()->getName(true).c_str()); } else if (sel.star() != NULL) { Universe* universe = m_appCore->getSimulation()->getUniverse(); defaultTitle = QString::fromUtf8(ReplaceGreekLetterAbbr(universe->getStarCatalog()->getStarName(*sel.star(), true)).c_str()); } else if (sel.deepsky() != NULL) { Universe* universe = m_appCore->getSimulation()->getUniverse(); defaultTitle = QString::fromUtf8(ReplaceGreekLetterAbbr(universe->getDSOCatalog()->getDSOName(sel.deepsky(), true)).c_str()); } else if (sel.location() != NULL) { defaultTitle = sel.location()->getName().c_str(); } if (defaultTitle.isEmpty()) defaultTitle = _("New bookmark"); CelestiaState appState; appState.captureState(m_appCore); // Capture the current frame buffer to use as a bookmark icon. QImage grabbedImage = glWidget->grabFrameBuffer(); int width = grabbedImage.width(); int height = grabbedImage.height(); // Crop the image to a square. QImage iconImage; if (width > height) iconImage = grabbedImage.copy((width - height) / 2, 0, height, height); else iconImage = grabbedImage.copy(0, (height - width) / 2, width, width); AddBookmarkDialog dialog(m_bookmarkManager, defaultTitle, appState, iconImage); dialog.exec(); populateBookmarkMenu(); m_bookmarkToolBar->rebuild(); }
SelectionPopup::SelectionPopup(const Selection& sel, CelestiaCore* _appCore, QWidget* parent) : QMenu(parent), selection(sel), appCore(_appCore), centerAction(NULL), gotoAction(NULL) { Simulation* sim = appCore->getSimulation(); Vec3d v = sel.getPosition(sim->getTime()) - sim->getObserver().getPosition(); if (sel.body() != NULL) { addAction(boldTextItem(QString::fromUtf8(sel.body()->getName(true).c_str()))); // Start and end dates double startTime = 0.0; double endTime = 0.0; sel.body()->getLifespan(startTime, endTime); if (startTime > -1.0e9 || endTime < 1.0e9) { addSeparator(); if (startTime > -1.0e9) { ostringstream startDateStr; startDateStr << "Start: " << astro::TDBtoUTC(startTime); QAction* startDateAct = new QAction(startDateStr.str().c_str(), this); connect(startDateAct, SIGNAL(triggered()), this, SLOT(slotGotoStartDate())); addAction(startDateAct); } if (endTime < 1.0e9) { ostringstream endDateStr; endDateStr << "End: " << astro::TDBtoUTC(endTime); QAction* endDateAct = new QAction(endDateStr.str().c_str(), this); connect(endDateAct, SIGNAL(triggered()), this, SLOT(slotGotoEndDate())); addAction(endDateAct); } } } else if (sel.star() != NULL) { std::string name = sim->getUniverse()->getStarCatalog()->getStarName(*sel.star()); addAction(boldTextItem(QString::fromUtf8(ReplaceGreekLetterAbbr(name).c_str()))); // Add some text items giving additional information about // the star. double distance = v.length() * 1e-6; char buff[50]; setlocale(LC_NUMERIC, ""); if (abs(distance) >= astro::AUtoLightYears(1000.0f)) sprintf(buff, "%.3f %s", distance, ("ly")); else if (abs(distance) >= astro::kilometersToLightYears(10000000.0)) sprintf(buff, "%.3f %s", astro::lightYearsToAU(distance), ("au")); else if (abs(distance) > astro::kilometersToLightYears(1.0f)) sprintf(buff, "%.3f km", astro::lightYearsToKilometers(distance)); else sprintf(buff, "%.3f m", astro::lightYearsToKilometers(distance) * 1000.0f); addAction(italicTextItem(tr("Distance: ") + QString::fromUtf8(buff))); sprintf(buff, "%.2f (%.2f)", sel.star()->getAbsoluteMagnitude(), astro::absToAppMag(sel.star()->getAbsoluteMagnitude(), (float) distance)); addAction(italicTextItem(tr("Abs (app) mag: ") + QString::fromUtf8(buff))); sprintf(buff, "%s", sel.star()->getSpectralType()); addAction(italicTextItem(tr("Class: ") + QString::fromUtf8(buff))); setlocale(LC_NUMERIC, "C"); } else if (sel.deepsky() != NULL) { addAction(boldTextItem(QString::fromUtf8(sim->getUniverse()->getDSOCatalog()->getDSOName(sel.deepsky()).c_str()))); } addSeparator(); QAction* selectAction = new QAction(tr("&Select"), this); connect(selectAction, SIGNAL(triggered()), this, SLOT(slotSelect())); addAction(selectAction); centerAction = new QAction(tr("&Center"), this); connect(centerAction, SIGNAL(triggered()), this, SLOT(slotCenterSelection())); addAction(centerAction); gotoAction = new QAction(tr("&Goto"), this); connect(gotoAction, SIGNAL(triggered()), this, SLOT(slotGotoSelection())); addAction(gotoAction); QAction* followAction = new QAction(tr("&Follow"), this); connect(followAction, SIGNAL(triggered()), this, SLOT(slotFollowSelection())); addAction(followAction); if (sel.star() == NULL && sel.deepsky() == NULL) { QAction* syncOrbitAction = new QAction(tr("S&ynch Orbit"), this); connect(syncOrbitAction, SIGNAL(triggered()), this, SLOT(slotSyncOrbitSelection())); addAction(syncOrbitAction); } QAction* infoAction = new QAction("Info", this); connect(infoAction, SIGNAL(triggered()), this, SLOT(slotInfo())); addAction(infoAction); if (sel.body() != NULL) { QAction* setVisibilityAction = new QAction("Visible", this); setVisibilityAction->setCheckable(true); setVisibilityAction->setChecked(sel.body()->isVisible()); connect(setVisibilityAction, SIGNAL(toggled(bool)), this, SLOT(slotToggleVisibility(bool))); addAction(setVisibilityAction); }