void CObjInfo::on_cb_copy1_clicked() //////////////////////////////////// { QClipboard *clipboard = QApplication::clipboard(); double ra, dec; ra = m_infoItem.radec.Ra; dec = m_infoItem.radec.Dec; precess(&ra, &dec, JD2000, m_map->m_mapView.jd); QString str = getStrRA(ra) + " " + getStrDeg(dec); clipboard->setText(str); }
static void render(int type, SKMATRIX *mat, mapView_t *mapView, CSkPainter *pPainter, bool eqOnly, int x, int y, int spcx, int spcy) { if (x < 0) { x += 129600000; } else if (x >= 129600000) { x -= 129600000; } if (y < 0 || y > 64800000) { return; } radec_t rd[4]; if (mSet.contains(MAKE_INT64(x, y))) { // already rendered return; } QColor col = g_skSet.map.grid[type].color; QPen pen1 = QPen(col, 1); QPen pen3 = QPen(col, 3); rd[0].Ra = TORA(x); rd[0].Dec = TODEC(y); rd[1].Ra = TORA(x + spcx); rd[1].Dec = TODEC(y); rd[2].Ra = rd[1].Ra; rd[2].Dec = TODEC(y + spcy); rd[3].Ra = TORA(x); rd[3].Dec = rd[2].Dec; double dec = rd[0].Dec; double ra = rd[0].Ra; if (type == SMCT_ALT_AZM) { for (int i = 0; i < 4; i++) { rd[i].Dec -= cAstro.getInvAtmRef(rd[i].Dec); } } if (y + spcy > 64800000 && depth > 0) { return; } if (y + spcy < 00 && depth > 0) { return; } SKPOINT pt[4]; SKPOINT opt[4]; for (int i = 0; i < 4; i++) { trfRaDecToPointNoCorrect(&rd[i], &pt[i], mat); opt[i] = pt[i]; } if (!SKPLANECheckFrustumToPolygon(trfGetFrustum(), pt, 4)) { // out of screen return; } pPainter->setPen(pen1); ren++; if (!eqOnly && trfProjectLine(&pt[0], &pt[3])) { if ((y + spcy < 64800000 && y > 0) || (x == 0 || x == FROMRA(90) || x == FROMRA(180) || x == FROMRA(270))) { pPainter->setClipRect(clipSize, clipSize, scrWidth - clipSize * 2, scrHeight - clipSize * 2); pPainter->drawLine(pt[0].sx, pt[0].sy, pt[3].sx, pt[3].sy); pPainter->setClipping(false); int cx, cy; if (getClipPoint(cx, cy, pt[0].sx, pt[0].sy, pt[3].sx, pt[3].sy)) { QString text; if (g_skSet.map.showGridLabels && g_showLabels) { if (type == SMCT_RA_DEC) { text = getStrRA(ra, true); } else if (type == SMCT_ECL) { text = getStrDeg(ra, true); } else { double value = R360 - ra; rangeDbl(&value, R360); text = getStrDeg(value, true); } drawEdgeAlignTextY(pPainter, cx, cy, text); } } } } else { QPointF fpt[2]; if (eqOnly && y == 32400000 && trfProjectLine(&pt[0], &pt[3], fpt)) { QString text; if (g_skSet.map.showGridLabels && g_showLabels) { if (type == SMCT_RA_DEC) { text = getStrRA(ra, true); } else if (type == SMCT_ECL) { text = getStrDeg(ra, true); } else { double value = R360 - ra; rangeDbl(&value, R360); text = getStrDeg(value, true); } SKVECTOR v; double l = 10; QPointF fpt2[2]; trfProjectLine(&pt[0], &pt[1], fpt2); v.x = fpt2[0].x() - fpt2[1].x(); v.y = fpt2[0].y() - fpt2[1].y(); v.z = 0; SKVecNormalize(&v, &v); pPainter->setClipRect(clipSize, clipSize, scrWidth - clipSize * 2, scrHeight - clipSize * 2); pPainter->setPen(pen1); pPainter->drawLine(fpt[0].x(), fpt[0].y(), fpt[0].x() - v.y * l, fpt[0].y() + v.x * l); pPainter->drawLine(fpt[0].x(), fpt[0].y(), fpt[0].x() + v.y * l, fpt[0].y() - v.x * l); setSetFontColor(FONT_GRID, pPainter); pPainter->renderText(fpt[0].x(), fpt[0].y(), 10, text, RT_BOTTOM); pPainter->setClipping(false); } } } if ((eqOnly && y == 32400000) || !eqOnly) { int cx, cy; if (y == 32400000) { pPainter->setPen(pen3); } else { pPainter->setPen(pen1); } pPainter->setClipRect(clipSize, clipSize, scrWidth - clipSize * 2, scrHeight - clipSize * 2); if (drawInterpolatedLineRD(mat, 5, &rd[0], &rd[1], pPainter, cx, cy)) { pPainter->setClipping(false); if (g_skSet.map.showGridLabels && g_showLabels) { drawEdgeAlignTextX(pPainter, cx, cy, QString("%1").arg(getStrDeg(dec, true))); } } pPainter->setClipping(false); } mSet.insert(MAKE_INT64(x, y)); depth++; render(type, mat, mapView, pPainter, eqOnly, x - spcx, y, spcx, spcy); render(type, mat, mapView, pPainter, eqOnly, x + spcx, y, spcx, spcy); render(type, mat, mapView, pPainter, eqOnly, x, y + spcy, spcx, spcy); render(type, mat, mapView, pPainter, eqOnly, x, y - spcy, spcx, spcy); }
CRestoreTM::CRestoreTM(QWidget *parent) : QDialog(parent), ui(new Ui::CRestoreTM) { ui->setupUi(this); QStandardItemModel *m = new QStandardItemModel(0, 4); m->setHeaderData(0, Qt::Horizontal, QObject::tr("Date/Time")); m->setHeaderData(1, Qt::Horizontal, QObject::tr("Desc.")); m->setHeaderData(2, Qt::Horizontal, QObject::tr("R.A.")); m->setHeaderData(3, Qt::Horizontal, QObject::tr("Dec.")); ui->treeView->sortByColumn(0); ui->treeView->setSortingEnabled(true); SkFile f(QStandardPaths::writableLocation(QStandardPaths::DataLocation) + "/data/timemarks/timemarks.dat"); QTextStream s(&f); int row = 0; if (f.open(SkFile::ReadOnly | SkFile::Text)) { QStringList list; while (!s.atEnd()) { QString line = s.readLine(); list = line.split(';'); if (list.count() == 2 || list.count() == 4) { item_t *i = new item_t; i->desc = list.at(0); i->jd = list.at(1).toDouble(); CTimeMarkItem *i0 = new CTimeMarkItem; QStandardItem *i1 = new QStandardItem; CTimeMarkItemRD *i2 = new CTimeMarkItemRD; CTimeMarkItemRD *i3 = new CTimeMarkItemRD; i0->setText(getStrDate(i->jd, 0) + " " + getStrTime(i->jd, 0)); i0->setData((qint64)i); i1->setText(i->desc); if (list.count() == 4) { i->ra = D2R(list.at(2).toDouble()); i->dec = D2R(list.at(3).toDouble()); i2->setText(getStrRA(i->ra)); i2->setData(i->ra); i3->setText(getStrDeg(i->dec)); i3->setData(i->dec); } else { i->ra = CM_UNDEF; i->dec = CM_UNDEF; i2->setText(tr("N/A")); i2->setData(CM_UNDEF); i3->setText(tr("N/A")); i3->setData(CM_UNDEF); } m->setItem(row, 0, i0); m->setItem(row, 1, i1); m->setItem(row, 2, i2); m->setItem(row, 3, i3); row++; } } } ui->treeView->setModel(m); ui->treeView->header()->resizeSection(0, 140); QShortcut *sh1 = new QShortcut(QKeySequence(Qt::Key_Delete), ui->treeView, 0, 0, Qt::WidgetShortcut); connect(sh1, SIGNAL(activated()), this, SLOT(slotDelete())); }
void CEphList::on_pushButton_4_clicked() //////////////////////////////////////// { QList <int> columns; QStringList strCol; int obj; int type; bool isUT; double tz; double jdFrom; double jdTo; double step = 1; QString name; QListWidgetItem *com; QList <tableRow_t> rows; for (int i = 0; i < EL_COLUMN_COUNT; i++) { QListWidgetItem *item = ui->listWidget_2->item(i); if (item->checkState() == Qt::Checked && (item->flags() & Qt::ItemIsEnabled)) { columns.append(item->data(Qt::UserRole + 1).toInt()); } } if (columns.count() == 0) { msgBoxError(this, tr("There is no selected column!!!")); return; } switch (ui->tabWidget->currentIndex()) { case 0: type = MO_PLANET; obj = ui->listWidget->currentRow(); if (!showNoObjectSelected(obj)) return; break; case 1: type = MO_COMET; obj = ui->listWidget_3->currentRow(); if (!showNoObjectSelected(obj)) return; com = ui->listWidget_3->item(obj); obj = com->data(Qt::UserRole + 1).toInt(); break; case 2: type = MO_ASTER; obj = ui->listWidget_4->currentRow(); if (!showNoObjectSelected(obj)) return; com = ui->listWidget_4->item(obj); obj = com->data(Qt::UserRole + 1).toInt(); break; } isUT = ui->checkBox->isChecked(); if (isUT) tz = 0; else tz = m_view.geo.tz; QDateTime dt; dt = ui->dateTimeEdit->dateTime(); jdFrom = jdGetJDFrom_DateTime(&dt); dt = ui->dateTimeEdit_2->dateTime(); jdTo = jdGetJDFrom_DateTime(&dt); for (int i = 0; i < columns.count(); i++) { QString str = cELColumn[columns[i]]; strCol.append(str); } if (jdFrom >= jdTo) { msgBoxError(this, tr("Invalid date/time range!!!")); return; } double mul; switch (ui->comboBox->currentIndex()) { case 0: mul = JD1SEC * 60; break; case 1: mul = JD1SEC * 3600; break; case 2: mul = 1; break; } step = ui->spinBox->value() * mul; int count = (jdTo - jdFrom) / step; if (count > 1000) { if (QMessageBox::No == msgBoxQuest(this, tr("Calculation 1000+ positions. Do you want to continue?"))) return; } for (double jd = jdFrom; jd <= jdTo; jd += step) { bool isMoon = false; tableRow_t row; orbit_t o; m_view.jd = jd - tz; cAstro.setParam(&m_view); switch (type) { case MO_PLANET: cAstro.calcPlanet(obj, &o); name = cAstro.getName(obj); isMoon = (obj == PT_MOON); break; case MO_COMET: comSolve(&tComets[obj], m_view.jd); name = tComets[obj].name; o = tComets[obj].orbit; break; case MO_ASTER: astSolve(&tAsteroids[obj], m_view.jd); name = tAsteroids[obj].name; o = tAsteroids[obj].orbit; break; } for (int j = 0; j < columns.count(); j++) { QString str; double ra2000 = o.lRD.Ra; double dec2000 = o.lRD.Dec; precess(&ra2000, &dec2000, m_view.jd, JD2000); switch (columns[j]) { case 0: str = QString::number(m_view.jd, 'f', 6); break; case 1: str = getStrDate(m_view.jd, tz); break; case 2: str = getStrTime(m_view.jd, tz); break; case 3: str = getStrMag(o.mag); break; case 4: str = QString::number(o.phase, 'f', 3); break; case 5: str = QString::number(R2D(o.PA), 'f', 1) + "°"; break; case 6: str = QString::number(o.sx, 'f', 2) + "\""; break; case 7: str = QString::number(o.sy, 'f', 2) + "\""; break; case 8: str = getStrRA(o.lRD.Ra); break; case 9: str = getStrDeg(o.lRD.Dec); break; case 10: str = getStrRA(ra2000); break; case 11: str = getStrDeg(dec2000); break; case 12: str = getStrRA(o.gRD.Ra); break; case 13: str = getStrDeg(o.gRD.Dec); break; case 14: str = getStrDeg(o.lAzm); break; case 15: str = getStrDeg(o.lAlt); break; case 16: if (!isMoon) { str = QString::number(o.R, 'f', 6) + " AU"; } else { str = QString::number(o.r * EARTH_DIAM) + tr(" Km"); } break; case 17: if (!isMoon) { str = QString::number(o.r, 'f', 6) + " AU"; } else { str = tr("N/A"); } break; case 18: str = ((o.elongation >= 0) ? "+" : "") + QString::number(R2D(o.elongation), 'f', 2) + "°"; break; case 19: str = getStrDeg(o.hLon); break; case 20: str = getStrDeg(o.hLat); break; case 21: str = QString::number(o.hRect[0], 'f', 6) + " AU"; break; case 22: str = QString::number(o.hRect[1], 'f', 6) + " AU"; break; case 23: str = QString::number(o.hRect[2], 'f', 6) + " AU"; break; case 24: str = QString::number(o.light * 24. * 60., 'f', 2) + tr(" mins."); break; } row.row.append(str); } rows.append(row); } CEphTable dlg(this, name, strCol, rows); dlg.exec(); }