Commit 38da7cad authored by Ken Edmundson's avatar Ken Edmundson
Browse files

added preliminary target body functionality to ipce

git-svn-id: http://subversion.wr.usgs.gov/repos/prog/isis3/branches/ipce@6355 41f8697f-d340-4b68-9986-7bafba869bb8
parent ef11ef13
Loading
Loading
Loading
Loading
+51 −0
Original line number Diff line number Diff line
#include "TargetBodyTreeWidgetItem.h"

#include <QDebug>

#include "TargetBodyDisplayProperties.h"

namespace Isis {

  /**
   * TargetBodyTreeWidgetItem constructor.
   * TargetBodyTreeWidgetItem is derived from QTreeWidgetItem
   *
   *
   * @param parent
   */
  TargetBodyTreeWidgetItem::TargetBodyTreeWidgetItem(TargetBodyQsp targetBody,
      QTreeWidget *parent) : QTreeWidgetItem(parent, UserType) {
    m_targetBody = targetBody;

    setText(0, m_targetBody->displayProperties()->displayName());
    setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);

    if (m_targetBody->displayProperties()->displayName() == "MOON")
      setIcon(0, QIcon(":moon"));
    else if (m_targetBody->displayProperties()->displayName() == "Enceladus")
      setIcon(0, QIcon(":enceladus"));
    else if (m_targetBody->displayProperties()->displayName() == "Mars")
      setIcon(0, QIcon(":mars"));
    else if (m_targetBody->displayProperties()->displayName() == "Titan")
      setIcon(0, QIcon(":titan"));
    else
      setIcon(0, QIcon(":moonPhase"));

    // since m_targetBody is a QSharedPointer is the signal below not needed?
    connect(m_targetBody.data(), SIGNAL(destroyed(QObject *)), this, SLOT(deleteLater()));
  }


  TargetBodyTreeWidgetItem::~TargetBodyTreeWidgetItem() {
  }


  TargetBodyQsp TargetBodyTreeWidgetItem::targetBody() {
    return m_targetBody;
  }


  void TargetBodyTreeWidgetItem::selectionChanged() {
//    m_control->displayProperties()->setSelected(isSelected());
  }
}
+37 −0
Original line number Diff line number Diff line
#ifndef TargetBodyTreeWidgetItem_H
#define TargetBodyTreeWidgetItem_H

#include <QObject>
#include <QTreeWidgetItem>

#include "TargetBody.h"

namespace Isis {

  /**
   * @brief A control in the project tree widget
   *
   * This class visualizes a TargetBody * from the project in the project tree widget.
   *
   * @author 2015-06-08 Ken Edmundson
   *
   * @internal
   *   @history 2015-06-08 Ken Edmundson - Original version.
   */
  class TargetBodyTreeWidgetItem : public QObject, public QTreeWidgetItem {
    Q_OBJECT
    public:
      TargetBodyTreeWidgetItem(TargetBodyQsp targetBody,
                                       QTreeWidget *parent = 0);
      virtual ~TargetBodyTreeWidgetItem();

      TargetBodyQsp targetBody();
      void selectionChanged();

    private:
      TargetBodyQsp m_targetBody;
  };
}

#endif
+7 −0
Original line number Diff line number Diff line
ifeq ($(ISISROOT), $(BLANK))
.SILENT:
error:
	echo "Please set ISISROOT";
else
	include $(ISISROOT)/make/isismake.objs
endif
 No newline at end of file
+175 −0
Original line number Diff line number Diff line
#include "TargetInfoWidget.h"
#include "ui_TargetInfoWidget.h"

#include <QPixmap>

#include "Directory.h"
#include "TargetBody.h"
#include "TargetBodyDisplayProperties.h"

namespace Isis {

  TargetInfoWidget::TargetInfoWidget(TargetBody* target, Directory *directory,
                                     QWidget *parent) : m_ui(new Ui::TargetInfoWidget) {
    m_ui->setupUi(this);

    m_target = target;

    QString name = m_target->displayProperties()->displayName();


    // Ken TODO - set up map between target display names and icon/image names
    QPixmap image;
    if (name.compare("MOON") == 0) {
      image.load(":moon-large");
      setWindowIcon(QIcon(":moon"));
    }
    else if (name.compare("Enceladus") == 0) {
      image.load(":enceladus-saturn");
      setWindowIcon(QIcon(":enceladus"));
    }
    else if (name.compare("Europa") == 0) {
      image.load(":europa-large");
      setWindowIcon(QIcon(":europa"));
    }
    else if (name.compare("Mars") == 0) {
      image.load(":mars-large");
      setWindowIcon(QIcon(":mars"));
    }
    else if (name.compare("Titan") == 0) {
      image.load(":titan-large");
      setWindowIcon(QIcon(":titan"));
    }

    m_ui->bodySystemlabel->setText(tr("System: %1").arg(m_target->naifPlanetSystemName()));

    setMinimumWidth(m_ui->tabWidget->minimumWidth()+20);

    m_ui->targetImage->setPixmap(image);

    setFrameStyle(QFrame::Panel | QFrame::Sunken);
    setLineWidth(2);

    m_ui->tabWidget->setCurrentIndex(0);

    m_ui->poleRightAscensionLabel->setText(formatPoleRaString());
    m_ui->poleDeclinationLabel->setText(formatPoleDecString());
    m_ui->polePMOffsetLabel->setText(formatPmString());

    m_ui->aRadiiLabel->setText(tr("%1").arg(m_target->radiusA().kilometers()));
    m_ui->bRadiiLabel->setText(tr("%1").arg(m_target->radiusB().kilometers()));
    m_ui->cRadiiLabel->setText(tr("%1").arg(m_target->radiusC().kilometers()));
    m_ui->meanRadiiLabel->setText(tr("%1").arg(m_target->meanRadius().kilometers()));
  }


  TargetInfoWidget::~TargetInfoWidget() {
    delete m_ui;
  }


  QString TargetInfoWidget::formatPoleRaString() {
    std::vector<Angle> poleRaCoefs = m_target->poleRaCoefs();
    std::vector<double> poleRaNutPrecCoefs = m_target->poleRaNutPrecCoefs();

    const QChar degChar(0260);
    QString poleRaString = "";
    QString coefLetter = m_target->naifPlanetSystemName().at(0);

    if (poleRaCoefs[1].degrees() < 0.0 )
      poleRaString.append(tr("%1%3 - %2T").arg(poleRaCoefs[0].degrees()).arg(-poleRaCoefs[1]
          .degrees()).arg(degChar));
    else
      poleRaString.append(tr("%1%3 + %2T").arg(poleRaCoefs[0].degrees()).arg(poleRaCoefs[1]
          .degrees()).arg(degChar));

    QString tmp;
    int nCoefs = poleRaNutPrecCoefs.size();;
    for (int i = 0; i < nCoefs; i++) {
      if (poleRaNutPrecCoefs[i] < 0.0 ) {
        tmp.append(tr(" - %1%2%3").arg(-poleRaNutPrecCoefs[i]).arg("sin %1").arg(coefLetter)
                                  .arg(i+1));
      }
      else if (poleRaNutPrecCoefs[i] > 0.0 ) {
        tmp.append(tr(" + %1%2%3").arg(poleRaNutPrecCoefs[i]).arg("sin %1").arg(coefLetter)
                                  .arg(i+1));
      }
    }

    poleRaString.append(tmp);

    return poleRaString;
  }


  QString TargetInfoWidget::formatPoleDecString() {
    std::vector<Angle> poleDecCoefs = m_target->poleDecCoefs();
    std::vector<double> poleDecNutPrecCoefs = m_target->poleDecNutPrecCoefs();

    const QChar degChar(0260);
    QString poleDecString = "";
    QString coefLetter = m_target->naifPlanetSystemName().at(0);

    if (poleDecCoefs[1].degrees() < 0.0 )
      poleDecString.append(tr("%1%3 - %2T").arg(poleDecCoefs[0].degrees()).arg(-poleDecCoefs[1]
          .degrees()).arg(degChar));
    else
      poleDecString.append(tr("%1%3 + %2T").arg(poleDecCoefs[0].degrees()).arg(poleDecCoefs[1]
          .degrees()).arg(degChar));

    QString tmp;
    int nCoefs = poleDecNutPrecCoefs.size();;
    for (int i = 0; i < nCoefs; i++) {
      if (poleDecNutPrecCoefs[i] < 0.0 ) {
        tmp.append(tr(" - %1%2%3").arg(-poleDecNutPrecCoefs[i]).arg("cos %1").arg(coefLetter)
                                  .arg(i+1));
      }
      else if (poleDecNutPrecCoefs[i] > 0.0 ) {
        tmp.append(tr(" + %1%2%3").arg(poleDecNutPrecCoefs[i]).arg("cos %1").arg(coefLetter)
                                  .arg(i+1));
      }
    }

    poleDecString.append(tmp);

    return poleDecString;
  }


  QString TargetInfoWidget::formatPmString() {
    std::vector<Angle> pmCoefs = m_target->pmCoefs();
    std::vector<double> pmNutPrecCoefs = m_target->pmNutPrecCoefs();

    const QChar degChar(0260);
    QString pmString = "";
    QString coefLetter = m_target->naifPlanetSystemName().at(0);

    if (pmCoefs[1].degrees() < 0.0 )
      pmString.append(tr("%1%3 - %2d").arg(pmCoefs[0].degrees()).arg(-pmCoefs[1].degrees())
          .arg(degChar));
    else if (pmCoefs[1].degrees() > 0.0 )
      pmString.append(tr("%1%3 + %2d").arg(pmCoefs[0].degrees()).arg(pmCoefs[1].degrees())
          .arg(degChar));

    if (pmCoefs[2].degrees() < 0.0 )
      pmString.append(tr(" - %2d^2").arg(-pmCoefs[2].degrees()));
    else if (pmCoefs[2].degrees() > 0.0 )
      pmString.append(tr(" + %2d^2").arg(pmCoefs[2].degrees()));


    QString tmp;
    int nCoefs = pmNutPrecCoefs.size();;
    for (int i = 0; i < nCoefs; i++) {
      if (pmNutPrecCoefs[i] < 0.0 ) {
        tmp.append(tr(" - %1%2%3").arg(-pmNutPrecCoefs[i]).arg("sin %1").arg(coefLetter).arg(i+1));
      }
      else if (pmNutPrecCoefs[i] > 0.0 ) {
        tmp.append(tr(" + %1%2%3").arg(pmNutPrecCoefs[i]).arg("sin %1").arg(coefLetter).arg(i+1));
      }
    }

    pmString.append(tmp);

    return pmString;
  }
}
+45 −0
Original line number Diff line number Diff line
#ifndef TargetInfoWidget_H
#define TargetInfoWidget_H

#include <QFrame>
#include <QString>

namespace Ui {
  class TargetInfoWidget;
}

namespace Isis {
  class Directory;

  /**
   * @brief
   *
   * @ingroup ControlNetworks
   *
   * @author 2015-06-13 Ken Edmundson
   *
   * @internal
   *   @history 2015-06-13 Ken Edmundson - Original version.
   */
  class TargetBody;

  class TargetInfoWidget : public QFrame {
    Q_OBJECT

    public:
      explicit TargetInfoWidget(TargetBody* target, Directory *directory, QWidget *parent = 0);
      ~TargetInfoWidget();

    private:
      Ui::TargetInfoWidget *m_ui;

      QString formatPoleRaString();
      QString formatPoleDecString();
      QString formatPmString();

      Directory *m_directory;
      TargetBody *m_target;
  };
}

#endif // TargetInfoWidget_H
Loading