// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 

// Copyright Liam Girdwood 2003

#include "sky_appbar.hh"

#include <libnova/libnova.h>

namespace Vega
{

SkyAppbar::SkyAppbar()
{
	// Equ posn
	m_equ_bar.pack_start(m_equ_title, Gtk::PACK_SHRINK, 0);
	m_equ_bar.pack_start(m_equ_sep1, Gtk::PACK_SHRINK, 0);
	m_equ_rah.set_size_request(20, -1);
	m_equ_ra_bar.pack_start(m_equ_rah);
	m_equ_ra_bar.pack_start(m_equ_ra_sep1, Gtk::PACK_SHRINK, 0);
	m_equ_ram.set_size_request(20, -1);
	m_equ_ra_bar.pack_start(m_equ_ram);
	m_equ_ra_bar.pack_start(m_equ_ra_sep2, Gtk::PACK_SHRINK, 0);
	m_equ_ras.set_size_request(40, -1);
	m_equ_ra_bar.pack_start(m_equ_ras);
	m_equ_bar.pack_start(m_equ_ra_bar, Gtk::PACK_SHRINK, 0);
	m_equ_bar.pack_start(m_equ_sep2, Gtk::PACK_SHRINK, 0);
	m_equ_ded.set_size_request(20, -1);
	m_equ_dec_bar.pack_start(m_equ_ded);
	m_equ_dec_bar.pack_start(m_equ_dec_sep1, Gtk::PACK_SHRINK, 0);
	m_equ_dem.set_size_request(20, -1);
	m_equ_dec_bar.pack_start(m_equ_dem);
	m_equ_dec_bar.pack_start(m_equ_dec_sep2, Gtk::PACK_SHRINK, 0);
	m_equ_des.set_size_request(40, -1);
	m_equ_dec_bar.pack_start(m_equ_des);
	m_equ_bar.pack_start(m_equ_dec_bar, Gtk::PACK_SHRINK, 0);
	m_equ_title.set_text("Equ Posn ");
	m_equ_sep1.set_text("RA: ");
	m_equ_sep2.set_text("DEC: ");
	m_equ_ra_sep1.set_text(":");
	m_equ_ra_sep2.set_text(":");
	m_equ_dec_sep1.set_text(":");
	m_equ_dec_sep2.set_text(":");
	
	// hrz posn
	m_hrz_bar.pack_start(m_hrz_title, Gtk::PACK_SHRINK, 0);
	m_hrz_bar.pack_start(m_hrz_sep1, Gtk::PACK_SHRINK, 0);
	m_hrz_ald.set_size_request(20, -1);
	m_hrz_alt_bar.pack_start(m_hrz_ald);
	m_hrz_alt_bar.pack_start(m_hrz_alt_sep1, Gtk::PACK_SHRINK, 0);
	m_hrz_alm.set_size_request(20, -1);
	m_hrz_alt_bar.pack_start(m_hrz_alm);
	m_hrz_alt_bar.pack_start(m_hrz_alt_sep2, Gtk::PACK_SHRINK, 0);
	m_hrz_als.set_size_request(40, -1);
	m_hrz_alt_bar.pack_start(m_hrz_als);
	m_hrz_bar.pack_start(m_hrz_alt_bar, Gtk::PACK_SHRINK, 0);
	m_hrz_bar.pack_start(m_hrz_sep2, Gtk::PACK_SHRINK, 0);
	m_hrz_azd.set_size_request(30, -1);
	m_hrz_az_bar.pack_start(m_hrz_azd);
	m_hrz_az_bar.pack_start(m_hrz_az_sep1, Gtk::PACK_SHRINK, 0);
	m_hrz_azm.set_size_request(20, -1);
	m_hrz_az_bar.pack_start(m_hrz_azm);
	m_hrz_az_bar.pack_start(m_hrz_az_sep2, Gtk::PACK_SHRINK, 0);
	m_hrz_azs.set_size_request(40, -1);
	m_hrz_az_bar.pack_start(m_hrz_azs);
	m_hrz_bar.pack_start(m_hrz_az_bar, Gtk::PACK_SHRINK, 0);
	m_hrz_title.set_text("Hrz Posn ");
	m_hrz_sep1.set_text("ALT: ");
	m_hrz_sep2.set_text("AZ: ");
	m_hrz_alt_sep1.set_text(":");
	m_hrz_alt_sep2.set_text(":");
	m_hrz_az_sep1.set_text(":");
	m_hrz_az_sep2.set_text(":");
	
	// object
	m_object_name;
	m_object_mag_title.set_text("Mag:");
	m_object_title.set_text("Object: ");
	m_object_bar.pack_start(m_object_title, Gtk::PACK_SHRINK, 0);
	m_object_name.set_size_request(80, -1);
	m_object_bar.pack_start(m_object_name);
	m_object_bar.pack_start(m_object_mag_title, Gtk::PACK_SHRINK, 0);
	m_object_mag.set_size_request(40, -1);
	m_object_bar.pack_start(m_object_mag);
	
	// fov and sky limits
	m_fov_title.set_text("FOV: ");
	m_fov_bar.pack_start(m_fov_title, Gtk::PACK_SHRINK, 0);
	m_fov.set_size_request(35, -1);
	m_fov_bar.pack_start(m_fov);
	
	pack_start(m_object_bar, Gtk::PACK_SHRINK, 0);
	pack_start(m_sep1);
	pack_start(m_fov_bar, Gtk::PACK_SHRINK, 0);
	pack_start(m_sep2);
	pack_start(m_equ_bar, Gtk::PACK_SHRINK, 0);
	pack_start(m_sep3);
	pack_start(m_hrz_bar, Gtk::PACK_SHRINK, 0);
	pack_start(m_sep4);
	
	set_border_width(2);
	set_spacing(3);
	show_all();
}

SkyAppbar::~SkyAppbar()
{
}

void SkyAppbar::set_equ_posn(double ra, double dec)
{
	struct ln_hms hra;
	struct ln_dms hdec;
	char text[32];
	
	ln_deg_to_dms (dec, &hdec);
	ln_deg_to_hms (ra, &hra);
	
	sprintf(text, "%2.2d", hra.hours);
	m_equ_rah.set_text(text);
	
	sprintf(text, "%2.2d", hra.minutes);
	m_equ_ram.set_text(text);
	
	sprintf(text, "%5.2f", hra.seconds);
	m_equ_ras.set_text(text);
	
	sprintf(text, "%2.2d", hdec.degrees);
	m_equ_ded.set_text(text);
	
	sprintf(text, "%2.2d", hdec.minutes);
	m_equ_dem.set_text(text);
	
	sprintf(text, "%5.2f", hdec.seconds);
	m_equ_des.set_text(text);
}
	
void SkyAppbar::set_hrz_posn(double alt, double az)
{
	struct ln_dms halt, haz;
	char text[32];
	
	ln_deg_to_dms (alt, &halt);
	ln_deg_to_dms (az, &haz);
	
	sprintf(text, "%2.2d", halt.degrees);
	m_hrz_ald.set_text(text);
	
	sprintf(text, "%2.2d", halt.minutes);
	m_hrz_alm.set_text(text);
	
	sprintf(text, "%5.2f", halt.seconds);
	m_hrz_als.set_text(text);
	
	sprintf(text, "%2.2d", haz.degrees);
	m_hrz_azd.set_text(text);
	
	sprintf(text, "%2.2d", haz.minutes);
	m_hrz_azm.set_text(text);
	
	sprintf(text, "%5.2f", haz.seconds);
	m_hrz_azs.set_text(text);
}

void SkyAppbar::set_object(Castor::AstroObject* object)
{
	if (object) {
		char text[32];
		std::string name;
		object->get_name(name);
		m_object_name.set_text(name);
		sprintf(text, "%4.2f", object->get_mag());
		m_object_mag.set_text(text);
	} else {
		m_object_name.set_text("None");
		m_object_mag.set_text("");
	}
}

void SkyAppbar::set_fov(double fov)
{
	char text[32];
	sprintf(text, "%2.2f", fov);
	m_fov.set_text(text);
}

}


syntax highlighted by Code2HTML, v. 0.9.1